Skip to content

Commit

Permalink
Merge branch 'wip-mdl-28987-m21' of git://github.com/rajeshtaneja/moo…
Browse files Browse the repository at this point in the history
…dle into MOODLE_21_STABLE
  • Loading branch information
stronk7 committed Sep 5, 2011
2 parents 593b451 + 48f6a80 commit 57d30b5
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 9 deletions.
5 changes: 4 additions & 1 deletion lib/editor/tinymce/lib.php
Expand Up @@ -172,7 +172,10 @@ protected function get_init_params($elementid, array $options=null) {
$params['file_browser_callback'] = "M.editor_tinymce.filepicker";
}
}

//Add onblur event for client side text validation
if (!empty($options['required'])) {
$params['init_instance_callback'] = 'M.editor_tinymce.onblur_event';
}
return $params;
}
}
16 changes: 16 additions & 0 deletions lib/editor/tinymce/module.js
Expand Up @@ -72,3 +72,19 @@ M.editor_tinymce.filepicker = function(target_id, url, type, win) {
});
};

M.editor_tinymce.onblur_event = function(ed) {
//Attach event only after tinymce is intialized.
if (ed.onInit != undefined) {
var s = ed.settings;
//Save before event is attached, so that if this event is not generated then textarea should
//have loaded contents and submitting form should not throw error.
ed.save();

//Attach blur event for tinymce to save contents to textarea
var doc = s.content_editable ? ed.getBody() : (tinymce.isGecko ? ed.getDoc() : ed.getWin());
tinymce.dom.Event.add(doc, 'blur', function() {
//save contents to textarea before calling validation script.
ed.save();
});
};
};
30 changes: 29 additions & 1 deletion lib/form/editor.php
Expand Up @@ -86,6 +86,24 @@ function setSubdirs($allow) {
$this->_options['subdirs'] = $allow;
}

/**
* Returns editor format
*
* @return int.
*/
function getFormat() {
return $this->_values['format'];
}

/**
* Checks if editor used is tinymce and is required field
*
* @return true if required field.
*/
function isRequired() {
return (isset($this->_options['required']) && $this->_options['required']);
}

function setHelpButton($_helpbuttonargs, $function='_helpbutton') {
if (!is_array($_helpbuttonargs)) {
$_helpbuttonargs = array($_helpbuttonargs);
Expand Down Expand Up @@ -198,13 +216,23 @@ function toHtml() {
$fpoptions['link'] = $link_options;
}

//If editor is required and tinymce, then set required_tinymce option to initalize tinymce validation.
if (($editor instanceof tinymce_texteditor) && !is_null($this->getAttribute('onchange'))) {
$this->_options['required'] = true;
}

/// print text area - TODO: add on-the-fly switching, size configuration, etc.
$editor->use_editor($id, $this->_options, $fpoptions);

$rows = empty($this->_attributes['rows']) ? 15 : $this->_attributes['rows'];
$cols = empty($this->_attributes['cols']) ? 80 : $this->_attributes['cols'];

$str .= '<div><textarea id="'.$id.'" name="'.$elname.'[text]" rows="'.$rows.'" cols="'.$cols.'">';
//Apply editor validation if required field
$editorrules = '';
if (!is_null($this->getAttribute('onblur')) && !is_null($this->getAttribute('onchange'))) {
$editorrules = 'onblur="'.htmlspecialchars($this->getAttribute('onblur')).'" onchange="'.htmlspecialchars($this->getAttribute('onchange')).'"';
}
$str .= '<div><textarea id="'.$id.'" name="'.$elname.'[text]" rows="'.$rows.'" cols="'.$cols.'"'.$editorrules.'>';
$str .= s($text);
$str .= '</textarea></div>';

Expand Down
23 changes: 16 additions & 7 deletions lib/formslib.php
Expand Up @@ -1703,8 +1703,16 @@ function getValidationScript()
}
}
}
//for editor element, [text] is appended to the name.
if ($element->getType() == 'editor') {
$elementName .= '[text]';
//Add format to rule as moodleform check which format is supported by browser
//it is not set anywhere... So small hack to make sure we pass it down to quickform
if (is_null($rule['format'])) {
$rule['format'] = $element->getFormat();
}
}
// Fix for bug displaying errors for elements in a group
//$test[$elementName][] = $registry->getValidationScript($element, $elementName, $rule);
$test[$elementName][0][] = $registry->getValidationScript($element, $elementName, $rule);
$test[$elementName][1]=$element;
//end of fix
Expand Down Expand Up @@ -2387,17 +2395,18 @@ function validate($value, $options = null) {
/**
* This function returns Javascript code used to build client-side validation.
* It checks if an element is not empty.
* Note, that QuickForm does not know how to work with editor text field and builds not correct
* JS code for validation. If client check is enabled for editor field it will not be validated
* on client side no matter what this function returns.
*
* @param mixed $options Not used yet
* @param int $format
* @return array
*/
function getValidationScript($options = null) {
function getValidationScript($format = null) {
global $CFG;
if (!empty($CFG->strictformsrequired)) {
return array('', "{jsVar}.replace(/^\s+$/g, '') == ''");
if (!empty($format) && $format == FORMAT_HTML) {
return array('', "{jsVar}.replace(/(<[^img|hr|canvas]+>)|&nbsp;|\s+/ig, '') == ''");
} else {
return array('', "{jsVar}.replace(/^\s+$/g, '') == ''");
}
} else {
return array('', "{jsVar} == ''");
}
Expand Down

0 comments on commit 57d30b5

Please sign in to comment.