Merge branch 'MDL-85514-500' of https://github.com/snake/moodle into MOODLE_500_STABLE
This commit is contained in:
+1
-1
@@ -4,6 +4,6 @@
|
||||
* @copyright 2018 Davo Smith, Synergy Learning
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
define("core/showhidesettings",["jquery"],(function($){var dependencies;function isCheckboxHiddenElement($el){return $el.is("input[type=hidden]")&&$el.siblings('input[type=checkbox][name="'+$el.attr("name")+'"]').length}function isCheckedRelevant($el,value){return!isCheckboxHiddenElement($el)&&!function($el,value){return $el.is("input[type=radio]")&&$el.attr("value")!==value}($el,value)}function isUncheckedRadioButton($el){return $el.is("input[type=radio]")&&!$el.prop("checked")}function isUncheckedCheckbox($el){return $el.is("input[type=checkbox]")&&!$el.prop("checked")}function isMultiSelect($el){return $el.is("select")&&$el.prop("multiple")}function multiSelectMatches($el,values){var selected=$el.val()||[];if(1===values.length&&""===values[0])return 0===selected.length;if(selected.length!==values.length)return!1;for(var i in selected)if(selected.hasOwnProperty(i)&&-1===values.indexOf(selected[i]))return!1;return!0}var depFns={notchecked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&&(hide=hide||!$el.prop("checked"))})),hide},checked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&&(hide=hide||$el.prop("checked"))})),hide},noitemselected:function($dependon){var hide=!1;return $dependon.each((function(idx,el){var $el=$(el);hide=hide||-1===$el.prop("selectedIndex")})),hide},eq:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()===value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split("|");hide=multiSelectMatches($el,values)}else hide=hide||$el.val()===value})),hide},in:function($dependon,value){var hide=!1,hiddenVal=!1,values=value.split("|");return $dependon.each((function(idx,el){var $el=$(el);isUncheckedRadioButton($el)||(isCheckboxHiddenElement($el)?hiddenVal=values.indexOf($el.val())>-1:hide=isUncheckedCheckbox($el)?hide||hiddenVal:isMultiSelect($el)?multiSelectMatches($el,values):hide||values.indexOf($el.val())>-1)})),hide},defaultCondition:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()!==value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split("|");hide=!multiSelectMatches($el,values)}else hide=hide||$el.val()!==value})),hide}};function getElementsByName(name){return $('[name="'+name+'"],[name^="'+name+'["]')}function updateDependencies(){var toHide={};$.each(dependencies,(function(dependonname){var dependon=getElementsByName(dependonname);$.each(dependencies[dependonname],(function(condition,values){$.each(values,(function(value,elements){var hide=function($dependon,condition,value){return"function"==typeof depFns[condition]?depFns[condition]($dependon,value):depFns.defaultCondition($dependon,value)}(dependon,condition,value);$.each(elements,(function(idx,elToHide){toHide.hasOwnProperty(elToHide)?toHide[elToHide]=toHide[elToHide]||hide:toHide[elToHide]=hide}))}))}))})),$.each(toHide,(function(elToHide,hide){getElementsByName(elToHide).each((function(idx,el){var $parent=$(el).closest(".form-item");$parent.length&&(hide?$parent.hide():$parent.show())}))}))}return{init:function(opts){dependencies=opts.dependencies,$.each(dependencies,(function(depname){var $el=getElementsByName(depname);$el.length&&$el.on("change",updateDependencies)})),updateDependencies(),$(".form-dependenton").hide()}}}));
|
||||
define("core/showhidesettings",["jquery"],(function($){var dependencies;function isCheckboxHiddenElement($el){return $el.is("input[type=hidden]")&&$el.siblings('input[type=checkbox][name="'+$el.attr("name")+'"]').length}function isCheckedRelevant($el,value){return!isCheckboxHiddenElement($el)&&!function($el,value){return $el.is("input[type=radio]")&&$el.attr("value")!==value}($el,value)}function isUncheckedRadioButton($el){return $el.is("input[type=radio]")&&!$el.prop("checked")}function isUncheckedCheckbox($el){return $el.is("input[type=checkbox]")&&!$el.prop("checked")}function isMultiSelect($el){return $el.is("select")&&$el.prop("multiple")}function multiSelectMatches($el,values){var selected=$el.val()||[];if(1===values.length&&""===values[0])return 0===selected.length;if(selected.length!==values.length)return!1;for(var i in selected)if(selected.hasOwnProperty(i)&&-1===values.indexOf(selected[i]))return!1;return!0}var depFns={notchecked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&&(hide=hide||!$el.prop("checked"))})),hide},checked:function($dependon,value){var hide=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);isCheckedRelevant($el,value)&&(hide=hide||$el.prop("checked"))})),hide},noitemselected:function($dependon){var hide=!1;return $dependon.each((function(idx,el){var $el=$(el);hide=hide||-1===$el.prop("selectedIndex")})),hide},eq:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()===value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split("|");hide=multiSelectMatches($el,values)}else hide=hide||$el.val()===value})),hide},in:function($dependon,value){var hide=!1,hiddenVal=!1,values=value.split("|");return $dependon.each((function(idx,el){var $el=$(el);isUncheckedRadioButton($el)||(isCheckboxHiddenElement($el)?hiddenVal=values.indexOf($el.val())>-1:hide=isUncheckedCheckbox($el)?hide||hiddenVal:isMultiSelect($el)?function($el,values){let selected=$el.val()||[];return 0==selected.length&&selected.push(""),selected.every((element=>values.includes(element)))}($el,values):hide||values.indexOf($el.val())>-1)})),hide},defaultCondition:function($dependon,value){var hide=!1,hiddenVal=!1;return value=String(value),$dependon.each((function(idx,el){var $el=$(el);if(!isUncheckedRadioButton($el))if(isCheckboxHiddenElement($el))hiddenVal=$el.val()!==value;else if(isUncheckedCheckbox($el))hide=hide||hiddenVal;else if(isMultiSelect($el)){var values=value.split("|");hide=!multiSelectMatches($el,values)}else hide=hide||$el.val()!==value})),hide}};function getElementsByName(name){return $('[name="'+name+'"],[name^="'+name+'["]')}function updateDependencies(){var toHide={};$.each(dependencies,(function(dependonname){var dependon=getElementsByName(dependonname);$.each(dependencies[dependonname],(function(condition,values){$.each(values,(function(value,elements){var hide=function($dependon,condition,value){return"function"==typeof depFns[condition]?depFns[condition]($dependon,value):depFns.defaultCondition($dependon,value)}(dependon,condition,value);$.each(elements,(function(idx,elToHide){toHide.hasOwnProperty(elToHide)?toHide[elToHide]=toHide[elToHide]||hide:toHide[elToHide]=hide}))}))}))})),$.each(toHide,(function(elToHide,hide){getElementsByName(elToHide).each((function(idx,el){var $parent=$(el).closest(".form-item");$parent.length&&(hide?$parent.hide():$parent.show())}))}))}return{init:function(opts){dependencies=opts.dependencies,$.each(dependencies,(function(depname){var $el=getElementsByName(depname);$el.length&&$el.on("change",updateDependencies)})),updateDependencies(),$(".form-dependenton").hide()}}}));
|
||||
|
||||
//# sourceMappingURL=showhidesettings.min.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -71,7 +71,24 @@ define(['jquery'], function($) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Does the multi-select exactly match the list of values provided?
|
||||
* Are the selected values of a multi-select a subset of (i.e. 'in') the list of values provided?
|
||||
* @param {jQuery} $el
|
||||
* @param {array} values
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function multiSelectIn($el, values) {
|
||||
let selected = $el.val() || [];
|
||||
if (selected.length == 0) {
|
||||
selected.push('');
|
||||
}
|
||||
|
||||
// Lock/hide if the selected values are a subset of the values.
|
||||
let isSubset = selected.every(element => values.includes(element));
|
||||
return isSubset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Are the selected values of a multi-select an exact match (i.e. 'eq') to the list of values provided?
|
||||
* @param {jQuery} $el
|
||||
* @param {array} values
|
||||
* @returns {boolean}
|
||||
@@ -193,8 +210,8 @@ define(['jquery'], function($) {
|
||||
return;
|
||||
}
|
||||
if (isMultiSelect($el)) {
|
||||
// For multiselect, we check to see if the list of values provided matches the list selected.
|
||||
hide = multiSelectMatches($el, values);
|
||||
// For multiselect, we check to see if the selected values are a subset of the list of values provided.
|
||||
hide = multiSelectIn($el, values);
|
||||
return;
|
||||
}
|
||||
// All other element types - check to see if the value is in the list.
|
||||
@@ -328,4 +345,4 @@ define(['jquery'], function($) {
|
||||
hideDependencyInfo();
|
||||
}
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
+9
-16
@@ -572,23 +572,16 @@ if (typeof M.form.dependencyManager === 'undefined') {
|
||||
selected[selected.length] = this.get('value');
|
||||
}
|
||||
});
|
||||
if (values.length === 1 && values[0] === '') {
|
||||
// Values array contains a single empty entry -> value was empty.
|
||||
lock = selected.length === 0;
|
||||
return;
|
||||
}
|
||||
if (selected.length !== values.length) {
|
||||
lock = false;
|
||||
return;
|
||||
}
|
||||
lock = true;
|
||||
for (const i in selected) {
|
||||
v = selected[i];
|
||||
if (values.indexOf(v) === -1) {
|
||||
lock = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Needed to support subset resolution for empty selects, where 'no selection' is represented by ''.
|
||||
if (selected.length == 0) {
|
||||
selected.push('');
|
||||
}
|
||||
|
||||
// Lock/hide if the selected values are a subset of the values.
|
||||
let isSubset = selected.every(element => values.includes(element));
|
||||
lock = isSubset;
|
||||
return;
|
||||
} else {
|
||||
value = this.get('value');
|
||||
lock = lock || (values.indexOf(value) > -1);
|
||||
|
||||
@@ -56,6 +56,6 @@ Feature: disabledIf functionality in forms
|
||||
Examples:
|
||||
| selection | enabledEq_ | enabledIn_ | enabledNeq_ | enabledEq1 | enabledIn1 | enabledNeq1 | enabledEq12 | enabledIn12 | enabledNeq12 |
|
||||
| | disabled | disabled | enabled | enabled | enabled | disabled | enabled | enabled | disabled |
|
||||
| Option 1 | enabled | enabled | disabled | disabled | disabled | enabled | enabled | enabled | disabled |
|
||||
| Option 2 | enabled | enabled | disabled | enabled | enabled | disabled | enabled | enabled | disabled |
|
||||
| Option 1 | enabled | enabled | disabled | disabled | disabled | enabled | enabled | disabled | disabled |
|
||||
| Option 2 | enabled | enabled | disabled | enabled | enabled | disabled | enabled | disabled | disabled |
|
||||
| Option 1, Option 2 | enabled | enabled | disabled | enabled | enabled | disabled | disabled | disabled | enabled |
|
||||
|
||||
@@ -68,6 +68,6 @@ Feature: hideIf functionality in forms
|
||||
Examples:
|
||||
| selection | shouldSeeEq_ | shouldSeeIn_ | shouldSeeNeq_ | shouldSeeEq1 | shouldSeeIn1 | shouldSeeNeq1 | shouldSeeEq12 | shouldSeeIn12 | shouldSeeNeq12 |
|
||||
| | should not | should not | should | should | should | should not | should | should | should not |
|
||||
| Option 1 | should | should | should not | should not | should not | should | should | should | should not |
|
||||
| Option 2 | should | should | should not | should | should | should not | should | should | should not |
|
||||
| Option 1 | should | should | should not | should not | should not | should | should | should not | should not |
|
||||
| Option 2 | should | should | should not | should | should | should not | should | should not | should not |
|
||||
| Option 1, Option 2 | should | should | should not | should | should | should not | should not | should not | should |
|
||||
|
||||
@@ -23,6 +23,6 @@ Feature: hide_if functionality in admin settings
|
||||
Examples:
|
||||
| selection | shouldSeeEq_ | shouldSeeIn_ | shouldSeeNeq_ | shouldSeeEq1 | shouldSeeIn1 | shouldSeeNeq1 | shouldSeeEq12 | shouldSeeIn12 | shouldSeeNeq12 |
|
||||
| | should not | should not | should | should | should | should not | should | should | should not |
|
||||
| Option 1 | should | should | should not | should not | should not | should | should | should | should not |
|
||||
| Option 2 | should | should | should not | should | should | should not | should | should | should not |
|
||||
| Option 1 | should | should | should not | should not | should not | should | should | should not | should not |
|
||||
| Option 2 | should | should | should not | should | should | should not | should | should not | should not |
|
||||
| Option 1, Option 2 | should | should | should not | should | should | should not | should not | should not | should |
|
||||
|
||||
Reference in New Issue
Block a user