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_courseformat/courseeditor',
'core/event_dispatcher',
'core/local/inplace_editable/events',
'core_course/events'
],
function(
@ -54,6 +55,7 @@ define(
log,
editor,
EventDispatcher,
InplaceEditableEvents,
CourseEvents
) {
@ -995,18 +997,21 @@ define(
// The section and activity names are edited using inplace editable.
// The "update" jQuery event must be captured in order to update the course state.
$('body').on('updated', `${SELECTOR.SECTIONITEM} [data-inplaceeditable]`, function(e) {
if (e.ajaxreturn && e.ajaxreturn.itemid) {
$('body').on(InplaceEditableEvents.eventTypes.elementUpdated,
`${SELECTOR.SECTIONITEM} [data-inplaceeditable]`, function(e) {
if (e.detail.ajaxreturn.itemid) {
const state = courseeditor.state;
const section = state.section.get(e.ajaxreturn.itemid);
const section = state.section.get(e.detail.ajaxreturn.itemid);
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) {
courseeditor.dispatch('cmState', [e.ajaxreturn.itemid]);
$('body').on(InplaceEditableEvents.eventTypes.elementUpdated,
`${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
*
* @module core/local/inplace_editable/events
* @copyright 2021 Paul Holden <paulh@moodle.com>
* @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

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
*/
import $ from 'jquery';
import {dispatchEvent} from 'core/event_dispatcher';
/**
@ -98,29 +97,3 @@ export const notifyElementUpdateFailed = (element, exception, newvalue) => dispa
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 SaveCancelModal from 'core/modal_save_cancel';
import Config from 'core/config';
import {eventTypes as inplaceEditableEvents} from 'core/local/inplace_editable/events';
import * as reportSelectors from 'core_reportbuilder/local/selectors';
const getTagIndex = (tagindex) => fetchMany([{
@ -323,9 +324,9 @@ export const initTagindexPage = async() => {
*/
export const initManagePage = () => {
// 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');
row.toggleClass('table-warning', e.ajaxreturn.value === '1');
row.toggleClass('table-warning', e.detail.ajaxreturn.value === '1');
});
// 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.
$('body').on('updatefailed', '[data-inplaceeditable][data-itemtype=tagname]', async(e) => {
var exception = e.exception; // The exception object returned by the callback.
var newvalue = e.newvalue; // The value that user tried to udpated the element to.
$('body').on(inplaceEditableEvents.elementUpdateFailed, '[data-inplaceeditable][data-itemtype=tagname]', async(e) => {
var exception = e.detail.exception; // The exception object returned by the callback.
var newvalue = e.detail.newvalue; // The value that user tried to udpated the element to.
var tagid = $(e.target).attr('data-itemid');
if (exception.errorcode !== 'namesalreadybeeingused') {
return;
@ -392,10 +393,10 @@ export const initManagePage = () => {
* @method 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 ajaxreturn = e.ajaxreturn,
var ajaxreturn = e.detail.ajaxreturn,
areaid, collid, isenabled;
if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') {
areaid = $(this).attr('data-itemid');