This commit is contained in:
Ilya Tregubov 2024-08-28 11:20:02 +08:00
commit 8a80fca393
9 changed files with 29 additions and 49 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -37,6 +37,7 @@ define(
'core/log', 'core/log',
'core_courseformat/courseeditor', 'core_courseformat/courseeditor',
'core/event_dispatcher', 'core/event_dispatcher',
'core/local/inplace_editable/events',
'core_course/events' 'core_course/events'
], ],
function( function(
@ -54,6 +55,7 @@ define(
log, log,
editor, editor,
EventDispatcher, EventDispatcher,
InplaceEditableEvents,
CourseEvents CourseEvents
) { ) {
@ -995,18 +997,21 @@ define(
// The section and activity names are edited using inplace editable. // The section and activity names are edited using inplace editable.
// The "update" jQuery event must be captured in order to update the course state. // The "update" jQuery event must be captured in order to update the course state.
$('body').on('updated', `${SELECTOR.SECTIONITEM} [data-inplaceeditable]`, function(e) { $('body').on(InplaceEditableEvents.eventTypes.elementUpdated,
if (e.ajaxreturn && e.ajaxreturn.itemid) { `${SELECTOR.SECTIONITEM} [data-inplaceeditable]`, function(e) {
if (e.detail.ajaxreturn.itemid) {
const state = courseeditor.state; const state = courseeditor.state;
const section = state.section.get(e.ajaxreturn.itemid); const section = state.section.get(e.detail.ajaxreturn.itemid);
if (section !== undefined) { if (section !== undefined) {
courseeditor.dispatch('sectionState', [e.ajaxreturn.itemid]); courseeditor.dispatch('sectionState', [e.detail.ajaxreturn.itemid]);
} }
} }
}); });
$('body').on('updated', `${SELECTOR.ACTIVITYLI} [data-itemtype="activityname"][data-inplaceeditable]`, function(e) {
if (e.ajaxreturn && e.ajaxreturn.itemid) { $('body').on(InplaceEditableEvents.eventTypes.elementUpdated,
courseeditor.dispatch('cmState', [e.ajaxreturn.itemid]); `${SELECTOR.ACTIVITYLI} [data-itemtype="activityname"][data-inplaceeditable]`, function(e) {
if (e.detail.ajaxreturn.itemid) {
courseeditor.dispatch('cmState', [e.detail.ajaxreturn.itemid]);
} }
}); });

View File

@ -1,10 +1,11 @@
define("core/local/inplace_editable/events",["exports","jquery","core/event_dispatcher"],(function(_exports,_jquery,_event_dispatcher){var obj; define("core/local/inplace_editable/events",["exports","core/event_dispatcher"],(function(_exports,_event_dispatcher){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyElementUpdated=_exports.notifyElementUpdateFailed=_exports.eventTypes=void 0;
/** /**
* Inplace editable module events * Inplace editable module events
* *
* @module core/local/inplace_editable/events * @module core/local/inplace_editable/events
* @copyright 2021 Paul Holden <paulh@moodle.com> * @copyright 2021 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.notifyElementUpdated=_exports.notifyElementUpdateFailed=_exports.eventTypes=void 0,_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};const eventTypes={elementUpdated:"core/inplace_editable:updated",elementUpdateFailed:"core/inplace_editable:updateFailed"};_exports.eventTypes=eventTypes;_exports.notifyElementUpdated=(element,ajaxreturn,oldvalue)=>(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdated,{ajaxreturn:ajaxreturn,oldvalue:oldvalue},element);_exports.notifyElementUpdateFailed=(element,exception,newvalue)=>(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdateFailed,{exception:exception,newvalue:newvalue},element,{cancelable:!0});let legacyEventsRegistered=!1;legacyEventsRegistered||(document.addEventListener(eventTypes.elementUpdated,(event=>{const legacyEvent=_jquery.default.Event("updated",event.detail);(0,_jquery.default)(event.target).trigger(legacyEvent)})),document.addEventListener(eventTypes.elementUpdateFailed,(event=>{const legacyEvent=_jquery.default.Event("updatefailed",event.detail);(0,_jquery.default)(event.target).trigger(legacyEvent),legacyEvent.isDefaultPrevented()&&event.preventDefault()})),legacyEventsRegistered=!0)})); */
const eventTypes={elementUpdated:"core/inplace_editable:updated",elementUpdateFailed:"core/inplace_editable:updateFailed"};_exports.eventTypes=eventTypes;_exports.notifyElementUpdated=(element,ajaxreturn,oldvalue)=>(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdated,{ajaxreturn:ajaxreturn,oldvalue:oldvalue},element);_exports.notifyElementUpdateFailed=(element,exception,newvalue)=>(0,_event_dispatcher.dispatchEvent)(eventTypes.elementUpdateFailed,{exception:exception,newvalue:newvalue},element,{cancelable:!0})}));
//# sourceMappingURL=events.min.js.map //# sourceMappingURL=events.min.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -21,7 +21,6 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/ */
import $ from 'jquery';
import {dispatchEvent} from 'core/event_dispatcher'; import {dispatchEvent} from 'core/event_dispatcher';
/** /**
@ -98,29 +97,3 @@ export const notifyElementUpdateFailed = (element, exception, newvalue) => dispa
cancelable: true cancelable: true
} }
); );
let legacyEventsRegistered = false;
if (!legacyEventsRegistered) {
// The following event triggers are legacy and will be removed in the future.
// The following approach provides a backwards-compatability layer for the new events.
// Code should be updated to make use of native events.
// Listen for the new native elementUpdated event, and trigger the legacy jQuery event.
document.addEventListener(eventTypes.elementUpdated, event => {
const legacyEvent = $.Event('updated', event.detail);
$(event.target).trigger(legacyEvent);
});
// Listen for the new native elementUpdateFailed event, and trigger the legacy jQuery event.
document.addEventListener(eventTypes.elementUpdateFailed, event => {
const legacyEvent = $.Event('updatefailed', event.detail);
$(event.target).trigger(legacyEvent);
// If the legacy event is cancelled, so should the native event.
if (legacyEvent.isDefaultPrevented()) {
event.preventDefault();
}
});
legacyEventsRegistered = true;
}

View File

@ -31,6 +31,7 @@ import * as ModalEvents from 'core/modal_events';
import Pending from 'core/pending'; import Pending from 'core/pending';
import SaveCancelModal from 'core/modal_save_cancel'; import SaveCancelModal from 'core/modal_save_cancel';
import Config from 'core/config'; import Config from 'core/config';
import {eventTypes as inplaceEditableEvents} from 'core/local/inplace_editable/events';
import * as reportSelectors from 'core_reportbuilder/local/selectors'; import * as reportSelectors from 'core_reportbuilder/local/selectors';
const getTagIndex = (tagindex) => fetchMany([{ const getTagIndex = (tagindex) => fetchMany([{
@ -323,9 +324,9 @@ export const initTagindexPage = async() => {
*/ */
export const initManagePage = () => { export const initManagePage = () => {
// Toggle row class when updating flag. // Toggle row class when updating flag.
$('body').on('updated', '[data-inplaceeditable][data-itemtype=tagflag]', function(e) { $('body').on(inplaceEditableEvents.elementUpdated, '[data-inplaceeditable][data-itemtype=tagflag]', function(e) {
var row = $(e.target).closest('tr'); var row = $(e.target).closest('tr');
row.toggleClass('table-warning', e.ajaxreturn.value === '1'); row.toggleClass('table-warning', e.detail.ajaxreturn.value === '1');
}); });
// Confirmation for bulk tag combine button. // Confirmation for bulk tag combine button.
@ -355,9 +356,9 @@ export const initManagePage = () => {
}); });
// When user changes tag name to some name that already exists suggest to combine the tags. // When user changes tag name to some name that already exists suggest to combine the tags.
$('body').on('updatefailed', '[data-inplaceeditable][data-itemtype=tagname]', async(e) => { $('body').on(inplaceEditableEvents.elementUpdateFailed, '[data-inplaceeditable][data-itemtype=tagname]', async(e) => {
var exception = e.exception; // The exception object returned by the callback. var exception = e.detail.exception; // The exception object returned by the callback.
var newvalue = e.newvalue; // The value that user tried to udpated the element to. var newvalue = e.detail.newvalue; // The value that user tried to udpated the element to.
var tagid = $(e.target).attr('data-itemid'); var tagid = $(e.target).attr('data-itemid');
if (exception.errorcode !== 'namesalreadybeeingused') { if (exception.errorcode !== 'namesalreadybeeingused') {
return; return;
@ -392,10 +393,10 @@ export const initManagePage = () => {
* @method initManageCollectionsPage * @method initManageCollectionsPage
*/ */
export const initManageCollectionsPage = () => { export const initManageCollectionsPage = () => {
$('body').on('updated', '[data-inplaceeditable]', function(e) { $('body').on(inplaceEditableEvents.elementUpdated, '[data-inplaceeditable]', function(e) {
var pendingPromise = new Pending('core/tag:initManageCollectionsPage-updated'); var pendingPromise = new Pending('core/tag:initManageCollectionsPage-updated');
var ajaxreturn = e.ajaxreturn, var ajaxreturn = e.detail.ajaxreturn,
areaid, collid, isenabled; areaid, collid, isenabled;
if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') { if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') {
areaid = $(this).attr('data-itemid'); areaid = $(this).attr('data-itemid');