MDL-25937 Forms Library: Filepicker will respect disable if

This commit is contained in:
Rajesh Taneja
2011-11-03 13:37:58 +08:00
parent b2595cb67b
commit a5b30b0463
4 changed files with 42 additions and 6 deletions
+17 -2
View File
@@ -1,19 +1,34 @@
M.form_filepicker = {};
M.form_filepicker.Y = null;
M.form_filepicker.instances = [];
M.form_filepicker.callback = function(params) {
var html = '<a href="'+params['url']+'">'+params['file']+'</a>';
document.getElementById('file_info_'+params['client_id']).innerHTML = html;
//When file is added then set status of global variable to true
var elementname = M.core_filepicker.instances[params['client_id']].options.elementname;
M.form_filepicker.instances[elementname].fileadded = true;
//generate event to indicate changes which will be used by disable if or validation code
M.form_filepicker.Y.one('#id_'+elementname).simulate('change');
};
/**
* This fucntion is called for each file picker on page.
*/
M.form_filepicker.init = function(Y, options) {
//Keep reference of YUI, so that it can be used in callback.
M.form_filepicker.Y = Y;
//For client side validation, initialize file status for this filepicker
M.form_filepicker.instances[options.elementname] = {};
M.form_filepicker.instances[options.elementname].fileadded = false;
//Set filepicker callback
options.formcallback = M.form_filepicker.callback;
if (!M.core_filepicker.instances[options.client_id]) {
M.core_filepicker.init(Y, options);
M.core_filepicker.init(Y, options);
}
Y.on('click', function(e, client_id) {
e.preventDefault();
+2 -1
View File
@@ -79,6 +79,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {
$args->maxbytes = $this->_options['maxbytes'];
$args->context = $PAGE->context;
$args->buttonname = $elname.'choose';
$args->elementname = $elname;
$html = $this->_getTabs();
$fp = new file_picker($args);
@@ -87,7 +88,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {
$html .= $OUTPUT->render($fp);
$html .= '<input type="hidden" name="'.$elname.'" id="'.$id.'" value="'.$draftitemid.'" class="filepickerhidden"/>';
$module = array('name'=>'form_filepicker', 'fullpath'=>'/lib/form/filepicker.js', 'requires'=>array('core_filepicker'));
$module = array('name'=>'form_filepicker', 'fullpath'=>'/lib/form/filepicker.js', 'requires'=>array('core_filepicker', 'node', 'node-event-simulate'));
$PAGE->requires->js_init_call('M.form_filepicker.init', array($fp->options), true, $module);
$nonjsfilepicker = new moodle_url('/repository/draftfiles_manager.php', array(
+22 -2
View File
@@ -277,7 +277,17 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
} else if (this.getAttribute('type').toLowerCase() == 'checkbox' && !Y.Node.getDOMNode(this).checked) {
return;
}
lock = lock || this.get('value') == value;
//check for filepicker status
if (this.getAttribute('class').toLowerCase() == 'filepickerhidden') {
var elementname = this.getAttribute('name');
if (elementname && M.form_filepicker.instances[elementname].fileadded) {
lock = false;
} else {
lock = true;
}
} else {
lock = lock || this.get('value') == value;
}
});
return {
lock : lock,
@@ -298,7 +308,17 @@ M.form.initFormDependencies = function(Y, formid, dependencies) {
} else if (this.getAttribute('type').toLowerCase() == 'checkbox' && !Y.Node.getDOMNode(this).checked) {
return;
}
lock = lock || this.get('value') != value;
//check for filepicker status
if (this.getAttribute('class').toLowerCase() == 'filepickerhidden') {
var elementname = this.getAttribute('name');
if (elementname && M.form_filepicker.instances[elementname].fileadded) {
lock = true;
} else {
lock = false;
}
} else {
lock = lock || this.get('value') != value;
}
});
return {
lock : lock,
+1 -1
View File
@@ -2340,7 +2340,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
if (!$form->isFrozen()) {
$args = $form->getLockOptionObject();
if (count($args[1]) > 0) {
$PAGE->requires->js_init_call('M.form.initFormDependencies', $args, false, moodleform::get_js_module());
$PAGE->requires->js_init_call('M.form.initFormDependencies', $args, true, moodleform::get_js_module());
}
}
}