javascript MDL-23850 Moved mforms specific JavaScript to a separate file

This commit is contained in:
Sam Hemelryk
2010-08-19 05:43:06 +00:00
parent 0609036239
commit c7e3e61c70
6 changed files with 375 additions and 328 deletions

View File

@@ -675,223 +675,6 @@ function checknone() {
}
}
function lockoptions(formid, master, subitems) {
// Subitems is an array of names of sub items.
// Optionally, each item in subitems may have a
// companion hidden item in the form with the
// same name but prefixed by "h".
var form = document.forms[formid];
if (eval("form."+master+".checked")) {
for (i=0; i<subitems.length; i++) {
unlockoption(form, subitems[i]);
}
} else {
for (i=0; i<subitems.length; i++) {
lockoption(form, subitems[i]);
}
}
return(true);
}
function lockoption(form,item) {
eval("form."+item+".disabled=true");/* IE thing */
if(form.elements['h'+item]) {
eval("form.h"+item+".value=1");
}
}
function unlockoption(form,item) {
eval("form."+item+".disabled=false");/* IE thing */
if(form.elements['h'+item]) {
eval("form.h"+item+".value=0");
}
}
/**
* Get the value of the 'virtual form element' with a particular name. That is,
* abstracts away the difference between a normal form element, like a select
* which is a single HTML element with a .value property, and a set of radio
* buttons, which is several HTML elements.
*
* @param form a HTML form.
* @param master the name of an element in that form.
* @return the value of that element.
*/
function get_form_element_value(form, name) {
var element = form[name];
if (!element) {
return null;
}
if (element.tagName) {
// Ordinarly thing like a select box.
return element.value;
}
// Array of things, like radio buttons.
for (var j = 0; j < element.length; j++) {
var el = element[j];
if (el.checked) {
return el.value;
}
}
return null;
}
/**
* Set the disabled state of the 'virtual form element' with a particular name.
* This abstracts away the difference between a normal form element, like a select
* which is a single HTML element with a .value property, and a set of radio
* buttons, which is several HTML elements.
*
* @param form a HTML form.
* @param master the name of an element in that form.
* @param disabled the disabled state to set.
*/
function set_form_element_disabled(form, name, disabled) {
var element = form[name];
if (!element) {
return;
}
if (element.tagName) {
// Ordinarly thing like a select box.
element.disabled = disabled;
}
// Array of things, like radio buttons.
for (var j = 0; j < element.length; j++) {
var el = element[j];
el.disabled = disabled;
}
}
/**
* Set the hidden state of the 'virtual form element' with a particular name.
* This abstracts away the difference between a normal form element, like a select
* which is a single HTML element with a .value property, and a set of radio
* buttons, which is several HTML elements.
*
* @param form a HTML form.
* @param master the name of an element in that form.
* @param hidden the hidden state to set.
*/
function set_form_element_hidden(form, name, hidden) {
var element = form[name];
if (!element) {
return;
}
if (element.tagName) {
var el = findParentNode(element, 'DIV', 'fitem', false);
if (el!=null) {
el.style.display = hidden ? 'none' : '';
el.style.visibility = hidden ? 'hidden' : '';
}
}
// Array of things, like radio buttons.
for (var j = 0; j < element.length; j++) {
var el = findParentNode(element[j], 'DIV', 'fitem', false);
if (el!=null) {
el.style.display = hidden ? 'none' : '';
el.style.visibility = hidden ? 'hidden' : '';
}
}
}
function lockoptionsall(formid) {
var form = document.forms[formid];
var dependons = eval(formid + 'items');
var tolock = [];
var tohide = [];
for (var dependon in dependons) {
// change for MooTools compatibility
if (!dependons.propertyIsEnumerable(dependon)) {
continue;
}
if (!form[dependon]) {
continue;
}
for (var condition in dependons[dependon]) {
for (var value in dependons[dependon][condition]) {
var lock;
var hide = false;
switch (condition) {
case 'notchecked':
lock = !form[dependon].checked;break;
case 'checked':
lock = form[dependon].checked;break;
case 'noitemselected':
lock = form[dependon].selectedIndex == -1;break;
case 'eq':
lock = get_form_element_value(form, dependon) == value;break;
case 'hide':
// hide as well as disable
hide = true;break;
default:
lock = get_form_element_value(form, dependon) != value;break;
}
for (var ei in dependons[dependon][condition][value]) {
var eltolock = dependons[dependon][condition][value][ei];
if (hide) {
tohide[eltolock] = true;
}
if (tolock[eltolock] != null) {
tolock[eltolock] = lock || tolock[eltolock];
} else {
tolock[eltolock] = lock;
}
}
}
}
}
for (var el in tolock) {
// change for MooTools compatibility
if (!tolock.propertyIsEnumerable(el)) {
continue;
}
set_form_element_disabled(form, el, tolock[el]);
if (tohide.propertyIsEnumerable(el)) {
set_form_element_hidden(form, el, tolock[el]);
}
}
return true;
}
function lockoptionsallsetup(formid) {
var form = document.forms[formid];
var dependons = eval(formid+'items');
for (var dependon in dependons) {
// change for MooTools compatibility
if (!dependons.propertyIsEnumerable(dependon)) {
continue;
}
var masters = form[dependon];
if (!masters) {
continue;
}
if (masters.tagName) {
// If master is radio buttons, we get an array, otherwise we don't.
// Convert both cases to an array for convinience.
masters = [masters];
}
for (var j = 0; j < masters.length; j++) {
master = masters[j];
master.formid = formid;
master.onclick = function() {return lockoptionsall(this.formid);};
master.onblur = function() {return lockoptionsall(this.formid);};
master.onchange = function() {return lockoptionsall(this.formid);};
}
}
for (var i = 0; i < form.elements.length; i++) {
var formelement = form.elements[i];
if (formelement.type=='reset') {
formelement.formid = formid;
formelement.onclick = function() {this.form.reset();return lockoptionsall(this.formid);};
formelement.onblur = function() {this.form.reset();return lockoptionsall(this.formid);};
formelement.onchange = function() {this.form.reset();return lockoptionsall(this.formid);};
}
}
return lockoptionsall(formid);
}
/**
* Either check, or uncheck, all checkboxes inside the element with id is
* @param id the id of the container
@@ -994,59 +777,6 @@ function findChildNodes(start, tagName, elementClass, elementID, elementName) {
}
return children;
}
/*
elementSetHide (elements, hide)
Adds or removes the "hide" class for the specified elements depending on boolean hide.
*/
function elementShowAdvanced(elements, show) {
for (var elementIndex in elements) {
element = elements[elementIndex];
element.className = element.className.replace(new RegExp(' ?hide'), '')
if(!show) {
element.className += ' hide';
}
}
}
function showAdvancedInit(addBefore, nameAttr, buttonLabel, hideText, showText) {
var showHideButton = document.createElement("input");
showHideButton.type = 'button';
showHideButton.value = buttonLabel;
showHideButton.name = nameAttr;
showHideButton.moodle = {
hideLabel: M.str.form.hideadvanced,
showLabel: M.str.form.showadvanced
};
YAHOO.util.Event.addListener(showHideButton, 'click', showAdvancedOnClick);
el = document.getElementById(addBefore);
el.parentNode.insertBefore(showHideButton, el);
}
function showAdvancedOnClick(e) {
var button = e.target ? e.target : e.srcElement;
var toSet=findChildNodes(button.form, null, 'advanced');
var buttontext = '';
if (button.form.elements['mform_showadvanced_last'].value == '0' || button.form.elements['mform_showadvanced_last'].value == '' ) {
elementShowAdvanced(toSet, true);
buttontext = button.moodle.hideLabel;
button.form.elements['mform_showadvanced_last'].value = '1';
} else {
elementShowAdvanced(toSet, false);
buttontext = button.moodle.showLabel;
button.form.elements['mform_showadvanced_last'].value = '0';
}
var formelements = button.form.elements;
// Fixed MDL-10506
for (var i = 0; i < formelements.length; i++) {
if (formelements[i] && formelements[i].name && (formelements[i].name=='mform_showadvanced')) {
formelements[i].value = buttontext;
}
}
//never submit the form if js is enabled.
return false;
}
function unmaskPassword(id) {
var pw = document.getElementById(id);
@@ -1224,7 +954,11 @@ function getElementsByClassName(oElm, strTagName, name) {
function openpopup(event, args) {
if (event) {
YAHOO.util.Event.preventDefault(event);
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
var fullurl = args.url;
@@ -1277,7 +1011,11 @@ emoticons_help = {
/** Close the current browser window. */
function close_window(e) {
YAHOO.util.Event.preventDefault(e);
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
self.close();
}