Merge branch 'wip-MDL-54796-31' of git://github.com/abgreeve/moodle into MOODLE_31_STABLE
This commit is contained in:
Vendored
+1
-1
@@ -1 +1 @@
|
||||
define(["jquery","core/yui"],function(a,b){return{notifyFilterContentUpdated:function(c){c=a(c),b.use("event","moodle-core-event",function(b){a("document").trigger(M.core.event.FILTER_CONTENT_UPDATED,c);var d=new b.NodeList(c.get());b.fire(M.core.event.FILTER_CONTENT_UPDATED,{nodes:d})})}}});
|
||||
define(["jquery","core/yui"],function(a,b){return{notifyFilterContentUpdated:function(c){c=a(c),b.use("event","moodle-core-event",function(b){a(document).trigger(M.core.event.FILTER_CONTENT_UPDATED,c);var d=new b.NodeList(c.get());b.fire(M.core.event.FILTER_CONTENT_UPDATED,{nodes:d})})},notifyEditorContentRestored:function(){b.use("event","moodle-core-event",function(b){a(document).trigger(M.core.event.EDITOR_CONTENT_RESTORED),b.fire(M.core.event.EDITOR_CONTENT_RESTORED)})}}});
|
||||
+15
-1
@@ -38,7 +38,7 @@ define([ 'jquery', 'core/yui' ],
|
||||
nodes = $(nodes);
|
||||
Y.use('event', 'moodle-core-event', function(Y) {
|
||||
// Trigger it the JQuery way.
|
||||
$('document').trigger(M.core.event.FILTER_CONTENT_UPDATED, nodes);
|
||||
$(document).trigger(M.core.event.FILTER_CONTENT_UPDATED, nodes);
|
||||
|
||||
// Create a YUI NodeList from our JQuery Object.
|
||||
var yuiNodes = new Y.NodeList(nodes.get());
|
||||
@@ -47,6 +47,20 @@ define([ 'jquery', 'core/yui' ],
|
||||
Y.fire(M.core.event.FILTER_CONTENT_UPDATED, { nodes: yuiNodes });
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Trigger an event using both JQuery and YUI
|
||||
* This event alerts the world that the editor has restored some content.
|
||||
*
|
||||
* @method notifyEditorContentRestored
|
||||
*/
|
||||
notifyEditorContentRestored: function() {
|
||||
Y.use('event', 'moodle-core-event', function(Y) {
|
||||
// Trigger it the JQuery way.
|
||||
$(document).trigger(M.core.event.EDITOR_CONTENT_RESTORED);
|
||||
|
||||
// And again for YUI.
|
||||
Y.fire(M.core.event.EDITOR_CONTENT_RESTORED);
|
||||
});
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
+5
@@ -927,6 +927,11 @@ EditorAutosave.prototype = {
|
||||
this.showMessage(M.util.get_string('textrecovered', 'editor_atto'),
|
||||
NOTIFY_INFO, RECOVER_MESSAGE_TIMEOUT);
|
||||
|
||||
// Fire an event that the editor content has changed.
|
||||
require(['core/event'], function(event) {
|
||||
event.notifyEditorContentRestored();
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
|
||||
+3
-3
File diff suppressed because one or more lines are too long
+5
@@ -919,6 +919,11 @@ EditorAutosave.prototype = {
|
||||
this.showMessage(M.util.get_string('textrecovered', 'editor_atto'),
|
||||
NOTIFY_INFO, RECOVER_MESSAGE_TIMEOUT);
|
||||
|
||||
// Fire an event that the editor content has changed.
|
||||
require(['core/event'], function(event) {
|
||||
event.notifyEditorContentRestored();
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
|
||||
@@ -204,6 +204,11 @@ EditorAutosave.prototype = {
|
||||
this.showMessage(M.util.get_string('textrecovered', 'editor_atto'),
|
||||
NOTIFY_INFO, RECOVER_MESSAGE_TIMEOUT);
|
||||
|
||||
// Fire an event that the editor content has changed.
|
||||
require(['core/event'], function(event) {
|
||||
event.notifyEditorContentRestored();
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
|
||||
@@ -41,7 +41,15 @@ M.core.event = M.core.event || {
|
||||
* @event "filter-content-updated"
|
||||
* @param nodes {Y.NodeList} List of nodes added to the DOM.
|
||||
*/
|
||||
FILTER_CONTENT_UPDATED: "filter-content-updated"
|
||||
FILTER_CONTENT_UPDATED: "filter-content-updated",
|
||||
/**
|
||||
* This event is triggered when an editor has recovered some draft text.
|
||||
* It can be used to determine let other sections know that they should reset their
|
||||
* form comparison for changes.
|
||||
*
|
||||
* @event "editor-content-restored"
|
||||
*/
|
||||
EDITOR_CONTENT_RESTORED: "editor-content-restored"
|
||||
};
|
||||
|
||||
M.core.globalEvents = M.core.globalEvents || {
|
||||
|
||||
@@ -1 +1 @@
|
||||
YUI.add("moodle-core-event",function(e,t){var n="moodle-core-event";M.core=M.core||{},M.core.event=M.core.event||{FILTER_CONTENT_UPDATED:"filter-content-updated"},M.core.globalEvents=M.core.globalEvents||{FORM_ERROR:"form_error",BLOCK_CONTENT_UPDATED:"block_content_updated"};var r={emitFacade:!0,defaultFn:function(e){},preventedFn:function(e){},stoppedFn:function(e){}},i;for(i in M.core.event)M.core.event.hasOwnProperty(i)&&e.getEvent(M.core.event[i])===null&&e.publish(M.core.event[i],r);for(i in M.core.globalEvents)M.core.globalEvents.hasOwnProperty(i)&&e.Global.getEvent(M.core.globalEvents[i])===null&&e.Global.publish(M.core.globalEvents[i],e.merge(r,{broadcast:!0}))},"@VERSION@",{requires:["event-custom"]});
|
||||
YUI.add("moodle-core-event",function(e,t){var n="moodle-core-event";M.core=M.core||{},M.core.event=M.core.event||{FILTER_CONTENT_UPDATED:"filter-content-updated",EDITOR_CONTENT_RESTORED:"editor-content-restored"},M.core.globalEvents=M.core.globalEvents||{FORM_ERROR:"form_error",BLOCK_CONTENT_UPDATED:"block_content_updated"};var r={emitFacade:!0,defaultFn:function(e){},preventedFn:function(e){},stoppedFn:function(e){}},i;for(i in M.core.event)M.core.event.hasOwnProperty(i)&&e.getEvent(M.core.event[i])===null&&e.publish(M.core.event[i],r);for(i in M.core.globalEvents)M.core.globalEvents.hasOwnProperty(i)&&e.Global.getEvent(M.core.globalEvents[i])===null&&e.Global.publish(M.core.globalEvents[i],e.merge(r,{broadcast:!0}))},"@VERSION@",{requires:["event-custom"]});
|
||||
|
||||
+9
-1
@@ -41,7 +41,15 @@ M.core.event = M.core.event || {
|
||||
* @event "filter-content-updated"
|
||||
* @param nodes {Y.NodeList} List of nodes added to the DOM.
|
||||
*/
|
||||
FILTER_CONTENT_UPDATED: "filter-content-updated"
|
||||
FILTER_CONTENT_UPDATED: "filter-content-updated",
|
||||
/**
|
||||
* This event is triggered when an editor has recovered some draft text.
|
||||
* It can be used to determine let other sections know that they should reset their
|
||||
* form comparison for changes.
|
||||
*
|
||||
* @event "editor-content-restored"
|
||||
*/
|
||||
EDITOR_CONTENT_RESTORED: "editor-content-restored"
|
||||
};
|
||||
|
||||
M.core.globalEvents = M.core.globalEvents || {
|
||||
|
||||
+4
-1
@@ -38,6 +38,9 @@ Y.extend(FORMCHANGECHECKER, Y.Base, {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add a listener here for an editor restore event.
|
||||
Y.on(M.core.event.EDITOR_CONTENT_RESTORED, M.core_formchangechecker.reset_form_dirty_state, this);
|
||||
|
||||
// Add change events to the form elements
|
||||
currentform.delegate('change', M.core_formchangechecker.set_form_changed, 'input', this);
|
||||
currentform.delegate('change', M.core_formchangechecker.set_form_changed, 'textarea', this);
|
||||
@@ -214,4 +217,4 @@ M.core_formchangechecker.report_form_dirty_state = function(e) {
|
||||
};
|
||||
|
||||
|
||||
}, '@VERSION@', {"requires": ["base", "event-focus"]});
|
||||
}, '@VERSION@', {"requires": ["base", "event-focus", "moodle-core-event"]});
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
YUI.add("moodle-core-formchangechecker",function(e,t){var n="core-formchangechecker",r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{initialvaluelisteners:[],initializer:function(){var t="form#"+this.get("formid"),n=e.one(t);if(!n)return;n.delegate("change",M.core_formchangechecker.set_form_changed,"input",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"textarea",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"select",this),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"input",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"textarea",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"select",this)),e.one(t).on("submit",M.core_formchangechecker.set_form_submitted,this),window.onbeforeunload=M.core_formchangechecker.report_form_dirty_state},store_initial_value:function(e){var t;if(e.target.hasClass("ignoredirty"))return;if(M.core_formchangechecker.get_form_dirty_state()){while(this.initialvaluelisteners.length)t=this.initialvaluelisteners.shift(),t.detach();return}M.core_formchangechecker.stateinformation.focused_element={element:e.target,initial_value:e.target.get("value")}}},{NAME:n,ATTRS:{formid:{value:""}}}),M.core_formchangechecker=M.core_formchangechecker||{},M.core_formchangechecker.instances=M.core_formchangechecker.instances||[],M.core_formchangechecker.init=function(e){var t=new r(e);return M.core_formchangechecker.instances.push(t),t},M.core_formchangechecker.stateinformation=[],M.core_formchangechecker.set_form_changed=function(e){if(e&&e.target&&e.target.hasClass("ignoredirty"))return;M.core_formchangechecker.stateinformation.formchanged=1,delete M.core_formchangechecker.stateinformation.focused_element},M.core_formchangechecker.set_form_submitted=function(){M.core_formchangechecker.stateinformation.formsubmitted=1},M.core_formchangechecker.get_form_dirty_state=function(){var e=M.core_formchangechecker.stateinformation,t;if(e.formsubmitted)return 0;if(e.formchanged)return 1;if(e.focused_element&&e.focused_element.element.get("value")!==e.focused_element.initial_value)return 1;if(typeof window.tinyMCE!="undefined")for(t in window.tinyMCE.editors)if(window.tinyMCE.editors[t].isDirty())return 1;return 0},M.core_formchangechecker.reset_form_dirty_state=function(){M.core_formchangechecker.stateinformation.formsubmitted=!1,M.core_formchangechecker.stateinformation.formchanged=!1},M.core_formchangechecker.report_form_dirty_state=function(e){if(!M.core_formchangechecker.get_form_dirty_state())return;var t=M.util.get_string("changesmadereallygoaway","moodle");if(M.cfg.behatsiterunning)return;return e&&(e.returnValue=t),t}},"@VERSION@",{requires:["base","event-focus"]});
|
||||
YUI.add("moodle-core-formchangechecker",function(e,t){var n="core-formchangechecker",r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{initialvaluelisteners:[],initializer:function(){var t="form#"+this.get("formid"),n=e.one(t);if(!n)return;e.on(M.core.event.EDITOR_CONTENT_RESTORED,M.core_formchangechecker.reset_form_dirty_state,this),n.delegate("change",M.core_formchangechecker.set_form_changed,"input",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"textarea",this),n.delegate("change",M.core_formchangechecker.set_form_changed,"select",this),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"input",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"textarea",this)),this.initialvaluelisteners.push(n.delegate("focus",this.store_initial_value,"select",this)),e.one(t).on("submit",M.core_formchangechecker.set_form_submitted,this),window.onbeforeunload=M.core_formchangechecker.report_form_dirty_state},store_initial_value:function(e){var t;if(e.target.hasClass("ignoredirty"))return;if(M.core_formchangechecker.get_form_dirty_state()){while(this.initialvaluelisteners.length)t=this.initialvaluelisteners.shift(),t.detach();return}M.core_formchangechecker.stateinformation.focused_element={element:e.target,initial_value:e.target.get("value")}}},{NAME:n,ATTRS:{formid:{value:""}}}),M.core_formchangechecker=M.core_formchangechecker||{},M.core_formchangechecker.instances=M.core_formchangechecker.instances||[],M.core_formchangechecker.init=function(e){var t=new r(e);return M.core_formchangechecker.instances.push(t),t},M.core_formchangechecker.stateinformation=[],M.core_formchangechecker.set_form_changed=function(e){if(e&&e.target&&e.target.hasClass("ignoredirty"))return;M.core_formchangechecker.stateinformation.formchanged=1,delete M.core_formchangechecker.stateinformation.focused_element},M.core_formchangechecker.set_form_submitted=function(){M.core_formchangechecker.stateinformation.formsubmitted=1},M.core_formchangechecker.get_form_dirty_state=function(){var e=M.core_formchangechecker.stateinformation,t;if(e.formsubmitted)return 0;if(e.formchanged)return 1;if(e.focused_element&&e.focused_element.element.get("value")!==e.focused_element.initial_value)return 1;if(typeof window.tinyMCE!="undefined")for(t in window.tinyMCE.editors)if(window.tinyMCE.editors[t].isDirty())return 1;return 0},M.core_formchangechecker.reset_form_dirty_state=function(){M.core_formchangechecker.stateinformation.formsubmitted=!1,M.core_formchangechecker.stateinformation.formchanged=!1},M.core_formchangechecker.report_form_dirty_state=function(e){if(!M.core_formchangechecker.get_form_dirty_state())return;var t=M.util.get_string("changesmadereallygoaway","moodle");if(M.cfg.behatsiterunning)return;return e&&(e.returnValue=t),t}},"@VERSION@",{requires:["base","event-focus","moodle-core-event"]});
|
||||
|
||||
+4
-1
@@ -38,6 +38,9 @@ Y.extend(FORMCHANGECHECKER, Y.Base, {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add a listener here for an editor restore event.
|
||||
Y.on(M.core.event.EDITOR_CONTENT_RESTORED, M.core_formchangechecker.reset_form_dirty_state, this);
|
||||
|
||||
// Add change events to the form elements
|
||||
currentform.delegate('change', M.core_formchangechecker.set_form_changed, 'input', this);
|
||||
currentform.delegate('change', M.core_formchangechecker.set_form_changed, 'textarea', this);
|
||||
@@ -214,4 +217,4 @@ M.core_formchangechecker.report_form_dirty_state = function(e) {
|
||||
};
|
||||
|
||||
|
||||
}, '@VERSION@', {"requires": ["base", "event-focus"]});
|
||||
}, '@VERSION@', {"requires": ["base", "event-focus", "moodle-core-event"]});
|
||||
|
||||
Vendored
+9
-1
@@ -39,7 +39,15 @@ M.core.event = M.core.event || {
|
||||
* @event "filter-content-updated"
|
||||
* @param nodes {Y.NodeList} List of nodes added to the DOM.
|
||||
*/
|
||||
FILTER_CONTENT_UPDATED: "filter-content-updated"
|
||||
FILTER_CONTENT_UPDATED: "filter-content-updated",
|
||||
/**
|
||||
* This event is triggered when an editor has recovered some draft text.
|
||||
* It can be used to determine let other sections know that they should reset their
|
||||
* form comparison for changes.
|
||||
*
|
||||
* @event "editor-content-restored"
|
||||
*/
|
||||
EDITOR_CONTENT_RESTORED: "editor-content-restored"
|
||||
};
|
||||
|
||||
M.core.globalEvents = M.core.globalEvents || {
|
||||
|
||||
@@ -36,6 +36,9 @@ Y.extend(FORMCHANGECHECKER, Y.Base, {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add a listener here for an editor restore event.
|
||||
Y.on(M.core.event.EDITOR_CONTENT_RESTORED, M.core_formchangechecker.reset_form_dirty_state, this);
|
||||
|
||||
// Add change events to the form elements
|
||||
currentform.delegate('change', M.core_formchangechecker.set_form_changed, 'input', this);
|
||||
currentform.delegate('change', M.core_formchangechecker.set_form_changed, 'textarea', this);
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
"moodle-core-formchangechecker": {
|
||||
"requires": [
|
||||
"base",
|
||||
"event-focus"
|
||||
"event-focus",
|
||||
"moodle-core-event"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -278,6 +278,11 @@ define(['jquery', 'core/notification', 'core/templates', 'core/fragment',
|
||||
this._niceReplaceNodeContents(this._region, html, js)
|
||||
.done(function() {
|
||||
checker.saveFormState('[data-region="grade-panel"] .gradeform');
|
||||
$(document).on('editor-content-restored', function() {
|
||||
// If the editor has some content that has been restored
|
||||
// then save the form state again for comparison.
|
||||
checker.saveFormState('[data-region="grade-panel"] .gradeform');
|
||||
});
|
||||
$('[data-region="attempt-chooser"]').on('click', this._chooseAttempt.bind(this));
|
||||
this._addPopoutButtons('[data-region="grade-panel"] .gradeform');
|
||||
$(document).trigger('finish-loading-user');
|
||||
|
||||
Reference in New Issue
Block a user