MDL-13766, improve file picker UI

This commit is contained in:
Dongsheng Cai 2010-05-21 08:13:08 +00:00
parent a3e153c2e9
commit 879b4f9ae1
3 changed files with 71 additions and 16 deletions

View File

@ -249,7 +249,7 @@ class page_requirements_manager {
$this->string_for_js('confirmation', 'admin');
$this->string_for_js('cancel', 'moodle');
$this->string_for_js('yes', 'moodle');
if ($page->pagelayout === 'frametop') {
$this->js_init_call('M.util.init_frametop');
}
@ -338,7 +338,7 @@ class page_requirements_manager {
$module = null;
if (strpos($component, 'core_') === 0) {
// must be some core stuff - list here is not complete, this is just the stuff used from multiple places
// so that we do nto have to repeat the definition of these modules over and over again
@ -358,7 +358,9 @@ class page_requirements_manager {
array('saving', 'repository'), array('search', 'repository'), array('searching', 'repository'), array('size', 'repository'),
array('submit', 'repository'), array('sync', 'repository'), array('title', 'repository'), array('upload', 'repository'),
array('uploading', 'repository'), array('xhtmlerror', 'repository'),
array('xhtml', 'quiz'), array('cancel'), array('chooselicense', 'repository'), array('author', 'repository')));
array('xhtml', 'quiz'), array('cancel'), array('chooselicense', 'repository'), array('author', 'repository'),
array('ok', 'moodle'), array('error', 'moodle'), array('info', 'moodle')
));
break;
case 'core_comment':
$module = array('name' => 'core_comment',
@ -714,8 +716,8 @@ class page_requirements_manager {
* @param string $function The name of the function to call
* @param array $arguments An optional array of argument parameters to pass to the function
* @return void
*/
public function event_handler($selector, $event, $function, array $arguments = null) {
*/
public function event_handler($selector, $event, $function, array $arguments = null) {
$this->eventhandlers[] = array('selector'=>$selector, 'event'=>$event, 'function'=>$function, 'arguments'=>$arguments);
}

View File

@ -120,14 +120,20 @@ M.core_filepicker.init = function(Y, options) {
try {
data = Y.JSON.parse(o.responseText);
} catch(e) {
Y.one(panel_id).set('innerHTML', 'ERROR: '+M.str.repository.invalidjson);
scope.print_msg(M.str.repository.invalidjson, 'error');
Y.one(panel_id).set('innerHTML', 'ERROR: '+M.str.repository.invalidjson+'<pre>'+stripHTML(o.responseText)+'</pre>');
return;
}
// error checking
if (data && data.e) {
Y.one(panel_id).set('innerHTML', 'ERROR: '+data.e);
//Y.one(panel_id).set('innerHTML', 'ERROR: '+data.e);
scope.print_msg(data.e, 'error');
scope.list();
return;
} else {
if (data.msg) {
scope.print_msg(data.msg, 'info');
}
args.callback(id,data,p);
}
}
@ -150,7 +156,42 @@ M.core_filepicker.init = function(Y, options) {
this.wait('load');
}
},
print_msg: function(msg, type) {
var client_id = this.options.client_id;
var dlg_id = 'fp-msg-dlg-'+client_id;
function handleYes() {
this.hide();
}
var icon = YAHOO.widget.SimpleDialog.ICON_INFO;
if (type=='error') {
icon = YAHOO.widget.SimpleDialog.ICON_ALARM;
}
if (!this.msg_dlg) {
this.msg_dlg = new YAHOO.widget.SimpleDialog(dlg_id,
{ width: "300px",
fixedcenter: true,
visible: true,
draggable: true,
close: true,
text: msg,
modal: false,
icon: icon,
zindex: 9999992,
constraintoviewport: true,
buttons: [{ text:M.str.moodle.ok, handler:handleYes, isDefault:true }]
});
this.msg_dlg.render(document.body);
} else {
this.msg_dlg.setBody(msg);
}
var header = M.str.moodle.info;
if (type=='error') {
header = M.str.moodle.error;
}
this.msg_dlg.setHeader(type);
this.msg_dlg.show();
},
build_tree: function(node, level) {
var client_id = this.options.client_id;
var dynload = this.active_repo.dynload;
@ -236,8 +277,19 @@ M.core_filepicker.init = function(Y, options) {
Y.one(panel_id).set('innerHTML', '');
this.print_header();
var tree = Y.Node.create('<div id="treeview-'+client_id+'"></div>');
var html = '<div class="fp-tree-panel" id="treeview-'+client_id+'">';
if (list.length==0) {
html += '<div class="fp-emptylist mdl-align">' +M.str.repository.emptylist+'</div>';
}
html += '</div>';
var tree = Y.Node.create(html);
Y.one(panel_id).appendChild(tree);
if (list.length==0) {
return;
}
this.treeview = new YAHOO.widget.TreeView('treeview-'+client_id);
if (dynload) {
this.treeview.setDynamicLoad(this.treeview_dynload, 1);
@ -268,7 +320,13 @@ M.core_filepicker.init = function(Y, options) {
this.print_header();
var gridpanel = Y.Node.create('<div id="fp-grid-panel-'+client_id+'"></div>');
var html = '<div class="fp-grid-panel" id="fp-grid-panel-'+client_id+'">';
if (list.length==0) {
html += '<div class="fp-emptylist mdl-align">' +M.str.repository.emptylist+'</div>';
}
html += '</div>';
var gridpanel = Y.Node.create(html);
Y.one('#panel-'+client_id).appendChild(gridpanel);
var count = 0;
for(var k in list) {
@ -742,9 +800,6 @@ M.core_filepicker.init = function(Y, options) {
'callback': function(id, o, args) {
scope.parse_repository_options(o);
scope.view_files();
if (o.msg) {
// do something
}
}
}, true);
}, this);
@ -883,9 +938,6 @@ M.core_filepicker.init = function(Y, options) {
scope.parse_repository_options(obj);
scope.view_files();
}
if (obj.msg) {
// TODO: Print message
}
}
}, true);
},

View File

@ -481,13 +481,14 @@ body.tag .managelink {padding: 5px;}
.file-picker .fp-paging a {padding: .5em;border: 1px solid #CCC;}
.file-picker .fp-paging a.cur_page {border: 1px solid blue;}
.file-picker .fp-popup {text-align:center;}
.file-picker .fp-grid-panel{}
.file-picker .fp-grid {float:left;text-align:center;}
.file-picker .fp-grid div {overflow: hidden;}
.file-picker .fp-grid p {margin:0;padding:0;background: #FFFFCC;}
.file-picker .fp-grid .label {height:48px;text-align:center;}
.file-picker .fp-grid span {color:gray;}
.file-picker .fp-error {padding: 2em 0;margin: 3em 5px;text-align:center;background: #FFBBBB;}
.file-picker .fp-msg {padding: 2em 0;margin: 3em 5px;text-align:center;background: green;}
.file-picker .fp-emptylist, .file-picker .fp-msg {padding: 2em 0;margin: 1em;text-align:center;background: green;}
/* file picker search dialog */
.file-picker div.bd {text-align:left;}