diff --git a/lib/amd/build/notification.min.js b/lib/amd/build/notification.min.js index d43ed0009c1..4e559a2f810 100644 --- a/lib/amd/build/notification.min.js +++ b/lib/amd/build/notification.min.js @@ -1,2 +1,2 @@ -define ("core/notification",["core/yui","jquery","core/log"],function(a,b,c){var d={types:{success:"core/notification_success",info:"core/notification_info",warning:"core/notification_warning",error:"core/notification_error"},fieldName:"user-notifications",fetchNotifications:function fetchNotifications(){require(["core/ajax"],function(a){var b=a.call([{methodname:"core_fetch_notifications",args:{contextid:d.contextid}}]);b[0].done(d.addNotifications)})},addNotifications:function addNotifications(a){if(!a){a=[]}b.each(a,function(a,b){d.renderNotification(b.template,b.variables)})},setupTargetRegion:function setupTargetRegion(){var a=b("#"+d.fieldName);if(a.length){return!1}var c=b("").attr("id",d.fieldName);a=b("#region-main");if(a.length){return a.prepend(c)}a=b("[role=\"main\"]");if(a.length){return a.prepend(c)}a=b("body");return a.prepend(c)},addNotification:function addNotification(a){var c=d.types.error;a=b.extend({closebutton:!0,announce:!0,type:"error"},a);if(a.template){c=a.template;delete a.template}else if(a.type){if("undefined"!=typeof d.types[a.type]){c=d.types[a.type]}delete a.type}return d.renderNotification(c,a)},renderNotification:function renderNotification(a,e){if("undefined"==typeof e.message||!e.message){c.debug("Notification received without content. Skipping.");return}require(["core/templates"],function(c){c.render(a,e).done(function(a,e){b("#"+d.fieldName).prepend(a);c.runTemplateJS(e)}).fail(d.exception)})},alert:function alert(b,c,d){a.use("moodle-core-notification-alert",function(){var a=new M.core.alert({title:b,message:c,yesLabel:d});a.show()})},confirm:function confirm(b,c,d,e,f,g){a.use("moodle-core-notification-confirm",function(){var a=new M.core.confirm({title:b,question:c,yesLabel:d,noLabel:e});a.on("complete-yes",function(){f()});if(g){a.on("complete-no",function(){g()})}a.show()})},exception:function exception(b){if("undefined"==typeof b.stack){b.stack=""}if(b.debuginfo){b.stack+=b.debuginfo+"\n"}if(!b.backtrace&&b.stacktrace){b.backtrace=b.stacktrace}if(b.backtrace){b.stack+=b.backtrace;var c=b.backtrace.match(/line ([^ ]*) of/),d=b.backtrace.match(/ of ([^:]*): /);if(c&&c[1]){b.lineNumber=c[1]}if(d&&d[1]){b.fileName=d[1];if(30").attr("id",e.fieldName);a=b("#region-main");if(a.length){return a.prepend(c)}a=b("[role=\"main\"]");if(a.length){return a.prepend(c)}a=b("body");return a.prepend(c)},addNotification:function addNotification(a){var c=new d("core/notification:addNotifications"),f=e.types.error;a=b.extend({closebutton:!0,announce:!0,type:"error"},a);if(a.template){f=a.template;delete a.template}else if(a.type){if("undefined"!=typeof e.types[a.type]){f=e.types[a.type]}delete a.type}c.resolve();return e.renderNotification(f,a)},renderNotification:function renderNotification(a,f){if("undefined"==typeof f.message||!f.message){c.debug("Notification received without content. Skipping.");return}var g=new d("core/notification:renderNotification");require(["core/templates"],function(c){c.render(a,f).then(function(a,d){b("#"+e.fieldName).prepend(a);c.runTemplateJS(d)}).always(g.resolve).catch(e.exception)})},alert:function alert(b,c,e){var f=new d("core/notification:alert");a.use("moodle-core-notification-alert",function(){var a=new M.core.alert({title:b,message:c,yesLabel:e});a.show();f.resolve()})},confirm:function confirm(b,c,e,f,g,h){var i=new d("core/notification:confirm");a.use("moodle-core-notification-confirm",function(){var a=new M.core.confirm({title:b,question:c,yesLabel:e,noLabel:f});a.on("complete-yes",function(){g()});if(h){a.on("complete-no",function(){h()})}a.show();i.resolve()})},exception:function exception(b){var c=new d("core/notification:addNotifications");if("undefined"==typeof b.stack){b.stack=""}if(b.debuginfo){b.stack+=b.debuginfo+"\n"}if(!b.backtrace&&b.stacktrace){b.backtrace=b.stacktrace}if(b.backtrace){b.stack+=b.backtrace;var e=b.backtrace.match(/line ([^ ]*) of/),f=b.backtrace.match(/ of ([^:]*): /);if(e&&e[1]){b.lineNumber=e[1]}if(f&&f[1]){b.fileName=f[1];if(30.\n\n/**\n * A system for displaying notifications to users from the session.\n *\n * Wrapper for the YUI M.core.notification class. Allows us to\n * use the YUI version in AMD code until it is replaced.\n *\n * @module core/notification\n * @class notification\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(['core/yui', 'jquery', 'core/log'],\nfunction(Y, $, log) {\n var notificationModule = {\n types: {\n 'success': 'core/notification_success',\n 'info': 'core/notification_info',\n 'warning': 'core/notification_warning',\n 'error': 'core/notification_error',\n },\n\n fieldName: 'user-notifications',\n\n fetchNotifications: function() {\n require(['core/ajax'], function(ajax) {\n var promises = ajax.call([{\n methodname: 'core_fetch_notifications',\n args: {\n contextid: notificationModule.contextid\n }\n }]);\n\n promises[0]\n .done(notificationModule.addNotifications)\n ;\n });\n },\n\n addNotifications: function(notifications) {\n if (!notifications) {\n notifications = [];\n }\n\n $.each(notifications, function(i, notification) {\n notificationModule.renderNotification(notification.template, notification.variables);\n });\n },\n\n setupTargetRegion: function() {\n var targetRegion = $('#' + notificationModule.fieldName);\n if (targetRegion.length) {\n return false;\n }\n\n var newRegion = $('').attr('id', notificationModule.fieldName);\n\n targetRegion = $('#region-main');\n if (targetRegion.length) {\n return targetRegion.prepend(newRegion);\n }\n\n targetRegion = $('[role=\"main\"]');\n if (targetRegion.length) {\n return targetRegion.prepend(newRegion);\n }\n\n targetRegion = $('body');\n return targetRegion.prepend(newRegion);\n },\n\n addNotification: function(notification) {\n var template = notificationModule.types.error;\n\n notification = $.extend({\n closebutton: true,\n announce: true,\n type: 'error'\n }, notification);\n\n if (notification.template) {\n template = notification.template;\n delete notification.template;\n } else if (notification.type) {\n if (typeof notificationModule.types[notification.type] !== 'undefined') {\n template = notificationModule.types[notification.type];\n }\n delete notification.type;\n }\n\n return notificationModule.renderNotification(template, notification);\n },\n\n renderNotification: function(template, variables) {\n if (typeof variables.message === 'undefined' || !variables.message) {\n log.debug('Notification received without content. Skipping.');\n return;\n }\n require(['core/templates'], function(templates) {\n templates.render(template, variables)\n .done(function(html, js) {\n $('#' + notificationModule.fieldName).prepend(html);\n templates.runTemplateJS(js);\n })\n .fail(notificationModule.exception)\n ;\n });\n },\n\n alert: function(title, message, yesLabel) {\n // Here we are wrapping YUI. This allows us to start transitioning, but\n // wait for a good alternative without having inconsistent dialogues.\n Y.use('moodle-core-notification-alert', function() {\n var alert = new M.core.alert({\n title: title,\n message: message,\n yesLabel: yesLabel\n });\n\n alert.show();\n });\n },\n\n confirm: function(title, question, yesLabel, noLabel, yesCallback, noCallback) {\n // Here we are wrapping YUI. This allows us to start transitioning, but\n // wait for a good alternative without having inconsistent dialogues.\n Y.use('moodle-core-notification-confirm', function() {\n var modal = new M.core.confirm({\n title: title,\n question: question,\n yesLabel: yesLabel,\n noLabel: noLabel\n });\n\n modal.on('complete-yes', function() {\n yesCallback();\n });\n if (noCallback) {\n modal.on('complete-no', function() {\n noCallback();\n });\n }\n modal.show();\n });\n },\n\n exception: function(ex) {\n // Fudge some parameters.\n if (typeof ex.stack == 'undefined') {\n ex.stack = '';\n }\n if (ex.debuginfo) {\n ex.stack += ex.debuginfo + '\\n';\n }\n if (!ex.backtrace && ex.stacktrace) {\n ex.backtrace = ex.stacktrace;\n }\n if (ex.backtrace) {\n ex.stack += ex.backtrace;\n var ln = ex.backtrace.match(/line ([^ ]*) of/);\n var fn = ex.backtrace.match(/ of ([^:]*): /);\n if (ln && ln[1]) {\n ex.lineNumber = ln[1];\n }\n if (fn && fn[1]) {\n ex.fileName = fn[1];\n if (ex.fileName.length > 30) {\n ex.fileName = '...' + ex.fileName.substr(ex.fileName.length - 27);\n }\n }\n }\n if (typeof ex.name == 'undefined' && ex.errorcode) {\n ex.name = ex.errorcode;\n }\n\n Y.use('moodle-core-notification-exception', function() {\n var modal = new M.core.exception(ex);\n\n modal.show();\n });\n }\n };\n\n return /** @alias module:core/notification */{\n init: function(contextid, notifications) {\n notificationModule.contextid = contextid;\n\n // Setup the message target region if it isn't setup already\n notificationModule.setupTargetRegion();\n\n // Add provided notifications.\n notificationModule.addNotifications(notifications);\n\n // Poll for any new notifications.\n notificationModule.fetchNotifications();\n },\n\n /**\n * Poll the server for any new notifications.\n *\n * @method fetchNotifications\n */\n fetchNotifications: notificationModule.fetchNotifications,\n\n /**\n * Add a notification to the page.\n *\n * Note: This does not cause the notification to be added to the session.\n *\n * @method addNotification\n * @param {Object} notification The notification to add.\n * @param {string} notification.message The body of the notification\n * @param {string} notification.type The type of notification to add (error, warning, info, success).\n * @param {Boolean} notification.closebutton Whether to show the close button.\n * @param {Boolean} notification.announce Whether to announce to screen readers.\n */\n addNotification: notificationModule.addNotification,\n\n /**\n * Wrap M.core.alert.\n *\n * @method alert\n * @param {string} title\n * @param {string} message\n * @param {string} yesLabel\n */\n alert: notificationModule.alert,\n\n /**\n * Wrap M.core.confirm.\n *\n * @method confirm\n * @param {string} title\n * @param {string} question\n * @param {string} yesLabel\n * @param {string} noLabel\n * @param {function} yesCallback\n * @param {function} noCallback Optional parameter to be called if the user presses cancel.\n */\n confirm: notificationModule.confirm,\n\n /**\n * Wrap M.core.exception.\n *\n * @method exception\n * @param {Error} ex\n */\n exception: notificationModule.exception\n };\n});\n"],"file":"notification.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/notification.js"],"names":["define","Y","$","log","Pending","notificationModule","types","fieldName","fetchNotifications","pendingPromise","require","ajax","promises","call","methodname","args","contextid","then","addNotifications","always","resolve","notifications","each","i","notification","renderNotification","template","variables","setupTargetRegion","targetRegion","length","newRegion","attr","prepend","addNotification","error","extend","closebutton","announce","type","message","debug","templates","render","html","js","runTemplateJS","catch","exception","alert","title","yesLabel","use","M","core","show","confirm","question","noLabel","yesCallback","noCallback","modal","on","ex","stack","debuginfo","backtrace","stacktrace","ln","match","fn","lineNumber","fileName","substr","name","errorcode","init"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * A system for displaying notifications to users from the session.\n *\n * Wrapper for the YUI M.core.notification class. Allows us to\n * use the YUI version in AMD code until it is replaced.\n *\n * @module core/notification\n * @class notification\n * @package core\n * @copyright 2015 Damyon Wiese \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\ndefine(['core/yui', 'jquery', 'core/log', 'core/pending'],\nfunction(Y, $, log, Pending) {\n var notificationModule = {\n types: {\n 'success': 'core/notification_success',\n 'info': 'core/notification_info',\n 'warning': 'core/notification_warning',\n 'error': 'core/notification_error',\n },\n\n fieldName: 'user-notifications',\n\n fetchNotifications: function() {\n var pendingPromise = new Pending('core/notification:fetchNotifications');\n\n require(['core/ajax'], function(ajax) {\n var promises = ajax.call([{\n methodname: 'core_fetch_notifications',\n args: {\n contextid: notificationModule.contextid\n }\n }]);\n\n // This currently fails when not logged in.\n // eslint-disable-next-line promise/catch-or-return\n promises[0]\n .then(notificationModule.addNotifications)\n .always(pendingPromise.resolve);\n });\n },\n\n addNotifications: function(notifications) {\n var pendingPromise = new Pending('core/notification:addNotifications');\n\n if (!notifications) {\n notifications = [];\n }\n\n $.each(notifications, function(i, notification) {\n notificationModule.renderNotification(notification.template, notification.variables);\n });\n\n pendingPromise.resolve();\n },\n\n setupTargetRegion: function() {\n var targetRegion = $('#' + notificationModule.fieldName);\n if (targetRegion.length) {\n return false;\n }\n\n var newRegion = $('').attr('id', notificationModule.fieldName);\n\n targetRegion = $('#region-main');\n if (targetRegion.length) {\n return targetRegion.prepend(newRegion);\n }\n\n targetRegion = $('[role=\"main\"]');\n if (targetRegion.length) {\n return targetRegion.prepend(newRegion);\n }\n\n targetRegion = $('body');\n return targetRegion.prepend(newRegion);\n },\n\n addNotification: function(notification) {\n var pendingPromise = new Pending('core/notification:addNotifications');\n\n var template = notificationModule.types.error;\n\n notification = $.extend({\n closebutton: true,\n announce: true,\n type: 'error'\n }, notification);\n\n if (notification.template) {\n template = notification.template;\n delete notification.template;\n } else if (notification.type) {\n if (typeof notificationModule.types[notification.type] !== 'undefined') {\n template = notificationModule.types[notification.type];\n }\n delete notification.type;\n }\n\n pendingPromise.resolve();\n\n return notificationModule.renderNotification(template, notification);\n },\n\n renderNotification: function(template, variables) {\n if (typeof variables.message === 'undefined' || !variables.message) {\n log.debug('Notification received without content. Skipping.');\n return;\n }\n\n var pendingPromise = new Pending('core/notification:renderNotification');\n\n require(['core/templates'], function(templates) {\n templates.render(template, variables)\n .then(function(html, js) {\n $('#' + notificationModule.fieldName).prepend(html);\n templates.runTemplateJS(js);\n\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notificationModule.exception);\n });\n },\n\n alert: function(title, message, yesLabel) {\n var pendingPromise = new Pending('core/notification:alert');\n\n // Here we are wrapping YUI. This allows us to start transitioning, but\n // wait for a good alternative without having inconsistent dialogues.\n Y.use('moodle-core-notification-alert', function() {\n var alert = new M.core.alert({\n title: title,\n message: message,\n yesLabel: yesLabel\n });\n\n alert.show();\n\n pendingPromise.resolve();\n });\n },\n\n confirm: function(title, question, yesLabel, noLabel, yesCallback, noCallback) {\n var pendingPromise = new Pending('core/notification:confirm');\n\n // Here we are wrapping YUI. This allows us to start transitioning, but\n // wait for a good alternative without having inconsistent dialogues.\n Y.use('moodle-core-notification-confirm', function() {\n var modal = new M.core.confirm({\n title: title,\n question: question,\n yesLabel: yesLabel,\n noLabel: noLabel\n });\n\n modal.on('complete-yes', function() {\n yesCallback();\n });\n if (noCallback) {\n modal.on('complete-no', function() {\n noCallback();\n });\n }\n modal.show();\n\n pendingPromise.resolve();\n });\n },\n\n exception: function(ex) {\n var pendingPromise = new Pending('core/notification:addNotifications');\n\n // Fudge some parameters.\n if (typeof ex.stack == 'undefined') {\n ex.stack = '';\n }\n if (ex.debuginfo) {\n ex.stack += ex.debuginfo + '\\n';\n }\n if (!ex.backtrace && ex.stacktrace) {\n ex.backtrace = ex.stacktrace;\n }\n if (ex.backtrace) {\n ex.stack += ex.backtrace;\n var ln = ex.backtrace.match(/line ([^ ]*) of/);\n var fn = ex.backtrace.match(/ of ([^:]*): /);\n if (ln && ln[1]) {\n ex.lineNumber = ln[1];\n }\n if (fn && fn[1]) {\n ex.fileName = fn[1];\n if (ex.fileName.length > 30) {\n ex.fileName = '...' + ex.fileName.substr(ex.fileName.length - 27);\n }\n }\n }\n if (typeof ex.name == 'undefined' && ex.errorcode) {\n ex.name = ex.errorcode;\n }\n\n Y.use('moodle-core-notification-exception', function() {\n var modal = new M.core.exception(ex);\n\n modal.show();\n\n pendingPromise.resolve();\n });\n }\n };\n\n return /** @alias module:core/notification */{\n init: function(contextid, notifications) {\n notificationModule.contextid = contextid;\n\n // Setup the message target region if it isn't setup already\n notificationModule.setupTargetRegion();\n\n // Add provided notifications.\n notificationModule.addNotifications(notifications);\n\n // Poll for any new notifications.\n notificationModule.fetchNotifications();\n },\n\n /**\n * Poll the server for any new notifications.\n *\n * @method fetchNotifications\n */\n fetchNotifications: notificationModule.fetchNotifications,\n\n /**\n * Add a notification to the page.\n *\n * Note: This does not cause the notification to be added to the session.\n *\n * @method addNotification\n * @param {Object} notification The notification to add.\n * @param {string} notification.message The body of the notification\n * @param {string} notification.type The type of notification to add (error, warning, info, success).\n * @param {Boolean} notification.closebutton Whether to show the close button.\n * @param {Boolean} notification.announce Whether to announce to screen readers.\n */\n addNotification: notificationModule.addNotification,\n\n /**\n * Wrap M.core.alert.\n *\n * @method alert\n * @param {string} title\n * @param {string} message\n * @param {string} yesLabel\n */\n alert: notificationModule.alert,\n\n /**\n * Wrap M.core.confirm.\n *\n * @method confirm\n * @param {string} title\n * @param {string} question\n * @param {string} yesLabel\n * @param {string} noLabel\n * @param {function} yesCallback\n * @param {function} noCallback Optional parameter to be called if the user presses cancel.\n */\n confirm: notificationModule.confirm,\n\n /**\n * Wrap M.core.exception.\n *\n * @method exception\n * @param {Error} ex\n */\n exception: notificationModule.exception\n };\n});\n"],"file":"notification.min.js"} \ No newline at end of file diff --git a/lib/amd/build/tag.min.js b/lib/amd/build/tag.min.js index 2422a0ee691..603a1497a4d 100644 --- a/lib/amd/build/tag.min.js +++ b/lib/amd/build/tag.min.js @@ -1,2 +1,2 @@ -define ("core/tag",["jquery","core/ajax","core/templates","core/notification","core/str","core/modal_factory","core/modal_events"],function(a,b,c,d,f,g,h){return{initTagindexPage:function initTagindexPage(){a("body").delegate(".tagarea[data-ta] a[data-quickload=1]","click",function(d){d.preventDefault();var e=a(this),f=e[0].search.replace(/^\?/,""),g=e.closest(".tagarea[data-ta]"),h=f.split("&").reduce(function(a,b){var c=b.split("=");a[c[0]]=decodeURIComponent(c[1]);return a},{}),i=b.call([{methodname:"core_tag_get_tagindex",args:{tagindex:h}}],!0);a.when.apply(a,i).done(function(a){c.render("core_tag/index",a).done(function(a){g.replaceWith(a)})})})},initManagePage:function initManagePage(){a("body").on("updated","[data-inplaceeditable]",function(b){f.get_string("selecttag","core_tag",b.ajaxreturn.value).then(function(c){return a("label[for=\"tagselect"+b.ajaxreturn.itemid+"\"]").html(c)}).fail(d.exception);f.get_string("now").done(function(c){a(b.target).closest("tr").find("td.col-timemodified").html(c)});if("tagflag"===b.ajaxreturn.itemtype){var c=a(b.target).closest("tr");if("0"===b.ajaxreturn.value){c.removeClass("flagged-tag")}else{c.addClass("flagged-tag")}}});a(".tag-management-table").delegate("a.tagdelete","click",function(b){b.preventDefault();var c=a(this).attr("href");f.get_strings([{key:"delete"},{key:"confirmdeletetag",component:"tag"},{key:"yes"},{key:"no"}]).done(function(a){d.confirm(a[0],a[1],a[2],a[3],function(){window.location.href=c})})});a("#tag-management-delete").click(function(b){var c=a(this).closest("form").get(0),e=a(c).find("input[type=checkbox]:checked").length;if(!e){return}var g=a("").attr("name",this.name);b.preventDefault();f.get_strings([{key:"delete"},{key:"confirmdeletetags",component:"tag"},{key:"yes"},{key:"no"}]).done(function(a){d.confirm(a[0],a[1],a[2],a[3],function(){g.appendTo(c);c.submit()})})});a("#tag-management-combine").click(function(b){b.preventDefault();var i=a(this).closest("form").get(0),j=a(i).find("input[type=checkbox]:checked");if(1>=j.length){f.get_strings([{key:"combineselected",component:"tag"},{key:"selectmultipletags",component:"tag"},{key:"ok"}]).done(function(a){d.alert(a[0],a[1],a[2])});return}var k=a("").attr("name",this.name),l="",m=[];j.each(function(){var b=a(this).val(),c=a(".inplaceeditable[data-itemtype=tagname][data-itemid="+b+"]").attr("data-value");m.push({id:b,name:c})});f.get_strings([{key:"combineselected",component:"tag"},{key:"continue"}]).then(function(a){var b=a[0];l=a[1];return g.create({title:b,body:c.render("core_tag/combine_tags",{tags:m}),type:g.types.SAVE_CANCEL})}).then(function(b){b.setSaveButtonText(l);b.getRoot().on(h.save,function(b){b.preventDefault();k.appendTo(i);var c=a("input[name=maintag]:checked","#combinetags_form").val();a("").attr("name","maintag").attr("value",c).appendTo(i);i.submit()});b.getRoot().on(h.hidden,function(){b.destroy()});b.show();a("#combinetags_form input[type=radio]").first().focus().prop("checked",!0)}).catch(d.exception)});a("body").on("updatefailed","[data-inplaceeditable][data-itemtype=tagname]",function(b){var c=b.exception,e=b.newvalue,g=a(b.target).attr("data-itemid");if("namesalreadybeeingused"===c.errorcode){b.preventDefault();f.get_strings([{key:"nameuseddocombine",component:"tag"},{key:"yes"},{key:"cancel"}]).done(function(a){d.confirm(b.message,a[0],a[1],a[2],function(){window.location.href=window.location.href+"&newname="+encodeURIComponent(e)+"&tagid="+encodeURIComponent(g)+"&action=renamecombine&sesskey="+M.cfg.sesskey})})}});a("body").on("click","a[data-action=addstandardtag]",function(b){b.preventDefault();var e="";f.get_strings([{key:"addotags",component:"tag"},{key:"continue"}]).then(function(a){var b=a[0];e=a[1];var d={actionurl:window.location.href,sesskey:M.cfg.sesskey};return g.create({title:b,body:c.render("core_tag/add_tags",d),type:g.types.SAVE_CANCEL})}).then(function(b){b.setSaveButtonText(e);b.getRoot().on(h.save,function(b){var c=a(b.currentTarget).find("#id_tagslist"),d=c.val().trim();c.val(d);var e=a("#addtags_form");e.on("submit",function(b){var c=a("#addtags_form");if(!1===c[0].checkValidity()){b.preventDefault();b.stopPropagation()}c.addClass("was-validated");a("[data-region=\"tagslistinput\"]").addClass("error");var d=a("#id_tagslist_error_message");d.removeAttr("hidden");d.addClass("help-block")});e.submit();return!1});b.getRoot().on(h.hidden,function(){b.destroy()});b.show()}).catch(d.exception)})},initManageCollectionsPage:function initManageCollectionsPage(){a("body").on("updated","[data-inplaceeditable]",function(b){var c=b.ajaxreturn,d,e,f;if("core_tag"===c.component&&"tagareaenable"===c.itemtype){d=a(this).attr("data-itemid");a(".tag-collections-table ul[data-collectionid] li[data-areaid="+d+"]").hide();f=c.value;if("1"===f){a(this).closest("tr").removeClass("dimmed_text");e=a(this).closest("tr").find("[data-itemtype=\"tagareacollection\"]").attr("data-value");a(".tag-collections-table ul[data-collectionid="+e+"] li[data-areaid="+d+"]").show()}else{a(this).closest("tr").addClass("dimmed_text")}}if("core_tag"===c.component&&"tagareacollection"===c.itemtype){d=a(this).attr("data-itemid");a(".tag-collections-table ul[data-collectionid] li[data-areaid="+d+"]").hide();e=a(this).attr("data-value");f=a(this).closest("tr").find("[data-itemtype=\"tagareaenable\"]").attr("data-value");if("1"===f){a(".tag-collections-table ul[data-collectionid="+e+"] li[data-areaid="+d+"]").show()}}});a("body").on("click",".addtagcoll > a",function(b){b.preventDefault();var e=a(this).attr("data-url"),i="";f.get_strings([{key:"addtagcoll",component:"tag"},{key:"create"}]).then(function(a){var b=a[0];i=a[1];var d={actionurl:e,sesskey:M.cfg.sesskey};return g.create({title:b,body:c.render("core_tag/add_tag_collection",d),type:g.types.SAVE_CANCEL})}).then(function(b){b.setSaveButtonText(i);b.getRoot().on(h.save,function(b){var c=a(b.currentTarget).find("#addtagcoll_name"),d=c.val().trim();c.val(d);var f=a("#addtagcoll_form");f.on("submit",function(b){if(!1===f[0].checkValidity()){b.preventDefault();b.stopPropagation()}f.addClass("was-validated");a("[data-region=\"addtagcoll_nameinput\"]").addClass("error");var c=a("#id_addtagcoll_name_error_message");c.removeAttr("hidden");c.addClass("help-block")});f.submit();return!1});b.getRoot().on(h.hidden,function(){b.destroy()});b.show()}).catch(d.exception)});a("body").on("click",".tag-collections-table .action_delete",function(b){b.preventDefault();var c=a(this).attr("data-url")+"&sesskey="+M.cfg.sesskey;f.get_strings([{key:"delete"},{key:"suredeletecoll",component:"tag",param:a(this).attr("data-collname")},{key:"yes"},{key:"no"}]).done(function(a){d.confirm(a[0],a[1],a[2],a[3],function(){window.location.href=c})})})}}}); +define ("core/tag",["jquery","core/ajax","core/templates","core/notification","core/str","core/modal_factory","core/modal_events","core/pending"],function(a,b,c,d,f,g,h,i){return{initTagindexPage:function initTagindexPage(){a("body").delegate(".tagarea[data-ta] a[data-quickload=1]","click",function(f){var e=new i("core/tag:initTagindexPage");f.preventDefault();var g=a(this),h=g[0].search.replace(/^\?/,""),j=g.closest(".tagarea[data-ta]"),k=h.split("&").reduce(function(a,b){var c=b.split("=");a[c[0]]=decodeURIComponent(c[1]);return a},{});b.call([{methodname:"core_tag_get_tagindex",args:{tagindex:k}}])[0].then(function(a){return c.render("core_tag/index",a)}).then(function(a,b){c.replaceNode(j,a,b)}).always(e.resolve).catch(d.exception)})},initManagePage:function initManagePage(){a("body").on("updated","[data-inplaceeditable]",function(b){var c=new i("core/tag:initManagePage");f.get_strings([{key:"selecttag",component:"core_tag"},{key:"now",component:"core"}]).then(function(c){a("label[for=\"tagselect"+b.ajaxreturn.itemid+"\"]").html(c[0]);a(b.target).closest("tr").find("td.col-timemodified").html(c[1])}).always(c.resolve).catch(d.exception);if("tagflag"===b.ajaxreturn.itemtype){var e=a(b.target).closest("tr");if("0"===b.ajaxreturn.value){e.removeClass("flagged-tag")}else{e.addClass("flagged-tag")}}});a(".tag-management-table").delegate("a.tagdelete","click",function(b){var c=new i("core/tag:tagdelete");b.preventDefault();var e=a(this).attr("href");f.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetag",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then(function(a){return d.confirm(a[0],a[1],a[2],a[3],function(){window.location.href=e})}).always(c.resolve).catch(d.exception)});a("#tag-management-delete").click(function(b){var c=a(this).closest("form").get(0),e=a(c).find("input[type=checkbox]:checked").length;if(!e){return}var g=new i("core/tag:tag-management-delete"),h=a("").attr("name",this.name);b.preventDefault();f.get_strings([{key:"delete",component:"core"},{key:"confirmdeletetags",component:"tag"},{key:"yes",component:"core"},{key:"no",component:"core"}]).then(function(a){return d.confirm(a[0],a[1],a[2],a[3],function(){h.appendTo(c);c.submit()})}).always(g.resolve).catch(d.exception)});a("#tag-management-combine").click(function(b){var e=new i("core/tag:tag-management-combine");b.preventDefault();var j=a(this).closest("form").get(0),k=a(j).find("input[type=checkbox]:checked");if(1>=k.length){f.get_strings([{key:"combineselected",component:"tag"},{key:"selectmultipletags",component:"tag"},{key:"ok"}]).then(function(a){return d.alert(a[0],a[1],a[2])}).always(e.resolve).catch(d.exception);return}var l=a("").attr("name",this.name),m="",n=[];k.each(function(){var b=a(this).val(),c=a(".inplaceeditable[data-itemtype=tagname][data-itemid="+b+"]").attr("data-value");n.push({id:b,name:c})});f.get_strings([{key:"combineselected",component:"tag"},{key:"continue",component:"core"}]).then(function(a){var b=a[0];m=a[1];return g.create({title:b,body:c.render("core_tag/combine_tags",{tags:n}),type:g.types.SAVE_CANCEL})}).then(function(a){a.setSaveButtonText(m);return a}).then(function(b){b.getRoot().on(h.save,function(b){b.preventDefault();l.appendTo(j);var c=a("input[name=maintag]:checked","#combinetags_form").val();a("").attr("name","maintag").attr("value",c).appendTo(j);j.submit()});b.getRoot().on(h.hidden,function(){b.destroy()});b.show();a("#combinetags_form input[type=radio]").first().focus().prop("checked",!0)}).always(e.resolve).catch(d.exception)});a("body").on("updatefailed","[data-inplaceeditable][data-itemtype=tagname]",function(b){var c=b.exception,e=b.newvalue,g=a(b.target).attr("data-itemid");if("namesalreadybeeingused"===c.errorcode){var h=new i("core/tag:updatefailed");b.preventDefault();f.get_strings([{key:"nameuseddocombine",component:"tag"},{key:"yes"},{key:"cancel"}]).then(function(a){return d.confirm(b.message,a[0],a[1],a[2],function(){window.location.href=window.location.href+"&newname="+encodeURIComponent(e)+"&tagid="+encodeURIComponent(g)+"&action=renamecombine&sesskey="+M.cfg.sesskey})}).always(h.resolve).catch(d.exception)}});a("body").on("click","a[data-action=addstandardtag]",function(b){var e=new i("core/tag:addstandardtag");b.preventDefault();return g.create({title:f.get_string("addotags","tag"),body:c.render("core_tag/add_tags",{actionurl:window.location.href,sesskey:M.cfg.sesskey}),type:g.types.SAVE_CANCEL}).then(function(b){b.setSaveButtonText(f.get_string("continue","core"));b.getRoot().on(h.save,function(b){var c=a(b.currentTarget).find("#id_tagslist"),d=c.val().trim();c.val(d);var e=a("#addtags_form");e.on("submit",function(b){var c=a("#addtags_form");if(!1===c[0].checkValidity()){b.preventDefault();b.stopPropagation()}c.addClass("was-validated");a("[data-region=\"tagslistinput\"]").addClass("error");var d=a("#id_tagslist_error_message");d.removeAttr("hidden");d.addClass("help-block")});e.submit();return!1});b.getRoot().on(h.hidden,function(){b.destroy()});b.show()}).always(e.resolve).catch(d.exception)})},initManageCollectionsPage:function initManageCollectionsPage(){a("body").on("updated","[data-inplaceeditable]",function(b){var c=new i("core/tag:initManageCollectionsPage-updated"),d=b.ajaxreturn,e,f,g;if("core_tag"===d.component&&"tagareaenable"===d.itemtype){e=a(this).attr("data-itemid");a(".tag-collections-table ul[data-collectionid] li[data-areaid="+e+"]").hide();g=d.value;if("1"===g){a(this).closest("tr").removeClass("dimmed_text");f=a(this).closest("tr").find("[data-itemtype=\"tagareacollection\"]").attr("data-value");a(".tag-collections-table ul[data-collectionid="+f+"] li[data-areaid="+e+"]").show()}else{a(this).closest("tr").addClass("dimmed_text")}}if("core_tag"===d.component&&"tagareacollection"===d.itemtype){e=a(this).attr("data-itemid");a(".tag-collections-table ul[data-collectionid] li[data-areaid="+e+"]").hide();f=a(this).attr("data-value");g=a(this).closest("tr").find("[data-itemtype=\"tagareaenable\"]").attr("data-value");if("1"===g){a(".tag-collections-table ul[data-collectionid="+f+"] li[data-areaid="+e+"]").show()}}c.resolve()});a("body").on("click",".addtagcoll > a",function(b){var e=new i("core/tag:initManageCollectionsPage-addtagcoll");b.preventDefault();var j=a(this).attr("data-url"),k="";f.get_strings([{key:"addtagcoll",component:"tag"},{key:"create",component:"core"}]).then(function(a){var b=a[0];k=a[1];var d={actionurl:j,sesskey:M.cfg.sesskey};return g.create({title:b,body:c.render("core_tag/add_tag_collection",d),type:g.types.SAVE_CANCEL})}).then(function(b){b.setSaveButtonText(k);b.getRoot().on(h.save,function(b){var c=a(b.currentTarget).find("#addtagcoll_name"),d=c.val().trim();c.val(d);var f=a("#addtagcoll_form");f.on("submit",function(b){if(!1===f[0].checkValidity()){b.preventDefault();b.stopPropagation()}f.addClass("was-validated");a("[data-region=\"addtagcoll_nameinput\"]").addClass("error");var c=a("#id_addtagcoll_name_error_message");c.removeAttr("hidden");c.addClass("help-block")});f.submit();return!1});b.getRoot().on(h.hidden,function(){b.destroy()});b.show();return b}).always(e.resolve).catch(d.exception)});a("body").on("click",".tag-collections-table .action_delete",function(b){var c=new i("core/tag:initManageCollectionsPage-action_delete");b.preventDefault();var e=a(this).attr("data-url")+"&sesskey="+M.cfg.sesskey;f.get_strings([{key:"delete"},{key:"suredeletecoll",component:"tag",param:a(this).attr("data-collname")},{key:"yes"},{key:"no"}]).then(function(a){return d.confirm(a[0],a[1],a[2],a[3],function(){window.location.href=e})}).always(c.resolve).catch(d.exception)})}}}); //# sourceMappingURL=tag.min.js.map diff --git a/lib/amd/build/tag.min.js.map b/lib/amd/build/tag.min.js.map index bf12d88c2c6..974956862bd 100644 --- a/lib/amd/build/tag.min.js.map +++ b/lib/amd/build/tag.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tag.js"],"names":["define","$","ajax","templates","notification","str","ModalFactory","ModalEvents","initTagindexPage","delegate","e","preventDefault","target","query","search","replace","tagarea","closest","args","split","reduce","s","c","t","decodeURIComponent","promises","call","methodname","tagindex","when","apply","done","data","render","html","replaceWith","initManagePage","on","get_string","ajaxreturn","value","then","itemid","fail","exception","find","itemtype","row","removeClass","addClass","href","attr","get_strings","key","component","confirm","window","location","click","form","get","cnt","length","tempElement","name","appendTo","submit","tags","alert","saveButtonText","tagOptions","each","tagid","val","tagname","push","id","langStrings","modalTitle","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","save","maintag","hidden","destroy","show","first","focus","prop","catch","newvalue","errorcode","message","encodeURIComponent","M","cfg","sesskey","templateContext","actionurl","tagsInput","currentTarget","trim","tagsForm","checkValidity","stopPropagation","errorMessage","removeAttr","initManageCollectionsPage","areaid","collid","isenabled","hide","collectionInput","param"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * AJAX helper for the tag management page.\n *\n * @module core/tag\n * @package core_tag\n * @copyright 2015 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\ndefine(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str', 'core/modal_factory', 'core/modal_events'],\n function($, ajax, templates, notification, str, ModalFactory, ModalEvents) {\n return /** @alias module:core/tag */ {\n\n /**\n * Initialises tag index page.\n *\n * @method initTagindexPage\n */\n initTagindexPage: function() {\n // Click handler for changing tag type.\n $('body').delegate('.tagarea[data-ta] a[data-quickload=1]', 'click', function(e) {\n e.preventDefault();\n var target = $(this),\n query = target[0].search.replace(/^\\?/, ''),\n tagarea = target.closest('.tagarea[data-ta]'),\n args = query.split('&').reduce(function(s, c) {\n var t = c.split('=');\n s[t[0]] = decodeURIComponent(t[1]);\n return s;\n }, {});\n\n var promises = ajax.call([{\n methodname: 'core_tag_get_tagindex',\n args: {tagindex: args}\n }], true);\n\n $.when.apply($, promises)\n .done(function(data) {\n templates.render('core_tag/index', data).done(function(html) {\n tagarea.replaceWith(html);\n });\n });\n });\n },\n\n /**\n * Initialises tag management page.\n *\n * @method initManagePage\n */\n initManagePage: function() {\n\n // Set cell 'time modified' to 'now' when any of the element is updated in this row.\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n str.get_string('selecttag', 'core_tag', e.ajaxreturn.value)\n .then(function(s) {\n return $('label[for=\"tagselect' + e.ajaxreturn.itemid + '\"]').html(s);\n })\n .fail(notification.exception);\n str.get_string('now').done(function(s) {\n $(e.target).closest('tr').find('td.col-timemodified').html(s);\n });\n if (e.ajaxreturn.itemtype === 'tagflag') {\n var row = $(e.target).closest('tr');\n if (e.ajaxreturn.value === '0') {\n row.removeClass('flagged-tag');\n } else {\n row.addClass('flagged-tag');\n }\n }\n });\n\n // Confirmation for single tag delete link.\n $('.tag-management-table').delegate('a.tagdelete', 'click', function(e) {\n e.preventDefault();\n var href = $(this).attr('href');\n str.get_strings([\n {key: 'delete'},\n {key: 'confirmdeletetag', component: 'tag'},\n {key: 'yes'},\n {key: 'no'},\n ]).done(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n }\n );\n });\n\n // Confirmation for bulk tag delete button.\n $(\"#tag-management-delete\").click(function(e) {\n var form = $(this).closest('form').get(0),\n cnt = $(form).find(\"input[type=checkbox]:checked\").length;\n if (!cnt) {\n return;\n }\n var tempElement = $(\"\").attr('name', this.name);\n e.preventDefault();\n str.get_strings([\n {key: 'delete'},\n {key: 'confirmdeletetags', component: 'tag'},\n {key: 'yes'},\n {key: 'no'},\n ]).done(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n tempElement.appendTo(form);\n form.submit();\n });\n }\n );\n });\n\n // Confirmation for bulk tag combine button.\n $(\"#tag-management-combine\").click(function(e) {\n e.preventDefault();\n var form = $(this).closest('form').get(0),\n tags = $(form).find(\"input[type=checkbox]:checked\");\n if (tags.length <= 1) {\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'selectmultipletags', component: 'tag'},\n {key: 'ok'},\n ]).done(function(s) {\n notification.alert(s[0], s[1], s[2]);\n }\n );\n return;\n }\n var tempElement = $(\"\").attr('name', this.name);\n var saveButtonText = '';\n var tagOptions = [];\n tags.each(function() {\n var tagid = $(this).val(),\n tagname = $('.inplaceeditable[data-itemtype=tagname][data-itemid=' + tagid + ']').attr('data-value');\n tagOptions.push({\n id: tagid,\n name: tagname\n });\n });\n\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'continue'}\n ]).then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n tags: tagOptions\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/combine_tags', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n e.preventDefault();\n\n // Append this temp element in the form in the tags list, not the form in the modal. Confusing, right?!?\n tempElement.appendTo(form);\n // Get the selected tag from the modal.\n var maintag = $('input[name=maintag]:checked', '#combinetags_form').val();\n // Append this in the tags list form.\n $(\"\").attr('name', 'maintag').attr('value', maintag).appendTo(form);\n // Submit the tags list form.\n form.submit();\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n // Tick the first option.\n $('#combinetags_form input[type=radio]').first().focus().prop('checked', true);\n\n return;\n\n }).catch(notification.exception);\n });\n\n // When user changes tag name to some name that already exists suggest to combine the tags.\n $('body').on('updatefailed', '[data-inplaceeditable][data-itemtype=tagname]', function(e) {\n var exception = e.exception; // The exception object returned by the callback.\n var newvalue = e.newvalue; // The value that user tried to udpated the element to.\n var tagid = $(e.target).attr('data-itemid');\n if (exception.errorcode === 'namesalreadybeeingused') {\n e.preventDefault(); // This will prevent default error dialogue.\n str.get_strings([\n {key: 'nameuseddocombine', component: 'tag'},\n {key: 'yes'},\n {key: 'cancel'},\n ]).done(function(s) {\n notification.confirm(e.message, s[0], s[1], s[2], function() {\n window.location.href = window.location.href + \"&newname=\" + encodeURIComponent(newvalue) +\n \"&tagid=\" + encodeURIComponent(tagid) +\n '&action=renamecombine&sesskey=' + M.cfg.sesskey;\n });\n });\n }\n });\n\n // Form for adding standard tags.\n $('body').on('click', 'a[data-action=addstandardtag]', function(e) {\n e.preventDefault();\n\n var saveButtonText = '';\n str.get_strings([\n {key: 'addotags', component: 'tag'},\n {key: 'continue'}\n ]).then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n actionurl: window.location.href,\n sesskey: M.cfg.sesskey\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/add_tags', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var tagsInput = $(e.currentTarget).find('#id_tagslist');\n var name = tagsInput.val().trim();\n\n // Set the text field's value to the trimmed value.\n tagsInput.val(name);\n\n // Add submit event listener to the form.\n var tagsForm = $('#addtags_form');\n tagsForm.on('submit', function(e) {\n // Validate the form.\n var form = $('#addtags_form');\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"tagslistinput\"]').addClass('error');\n var errorMessage = $('#id_tagslist_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n tagsForm.submit();\n\n return false;\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return;\n\n }).catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag collection management page.\n *\n * @method initManageCollectionsPage\n */\n initManageCollectionsPage: function() {\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var ajaxreturn = e.ajaxreturn,\n areaid, collid, isenabled;\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n isenabled = ajaxreturn.value;\n if (isenabled === '1') {\n $(this).closest('tr').removeClass('dimmed_text');\n collid = $(this).closest('tr').find('[data-itemtype=\"tagareacollection\"]').attr(\"data-value\");\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n } else {\n $(this).closest('tr').addClass('dimmed_text');\n }\n }\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareacollection') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n collid = $(this).attr('data-value');\n isenabled = $(this).closest('tr').find('[data-itemtype=\"tagareaenable\"]').attr(\"data-value\");\n if (isenabled === \"1\") {\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n }\n }\n });\n\n $('body').on('click', '.addtagcoll > a', function(e) {\n e.preventDefault();\n var keys = [\n {\n key: 'addtagcoll',\n component: 'tag'\n },\n {\n key: 'create'\n }\n ];\n\n var href = $(this).attr('data-url');\n var saveButtonText = '';\n str.get_strings(keys).then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n actionurl: href,\n sesskey: M.cfg.sesskey\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/add_tag_collection', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n }).then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var collectionInput = $(e.currentTarget).find('#addtagcoll_name');\n var name = collectionInput.val().trim();\n // Set the text field's value to the trimmed value.\n collectionInput.val(name);\n\n // Add submit event listener to the form.\n var form = $('#addtagcoll_form');\n form.on('submit', function(e) {\n // Validate the form.\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"addtagcoll_nameinput\"]').addClass('error');\n var errorMessage = $('#id_addtagcoll_name_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n form.submit();\n\n return false;\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return;\n\n }).catch(notification.exception);\n });\n\n $('body').on('click', '.tag-collections-table .action_delete', function(e) {\n e.preventDefault();\n var href = $(this).attr('data-url') + '&sesskey=' + M.cfg.sesskey;\n str.get_strings([\n {key: 'delete'},\n {key: 'suredeletecoll', component: 'tag', param: $(this).attr('data-collname')},\n {key: 'yes'},\n {key: 'no'},\n ]).done(function(s) {\n notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n }\n );\n });\n }\n };\n});\n"],"file":"tag.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/tag.js"],"names":["define","$","ajax","templates","notification","str","ModalFactory","ModalEvents","Pending","initTagindexPage","delegate","e","pendingPromise","preventDefault","target","query","search","replace","tagarea","closest","args","split","reduce","s","c","t","decodeURIComponent","call","methodname","tagindex","then","data","render","html","js","replaceNode","always","resolve","catch","exception","initManagePage","on","get_strings","key","component","result","ajaxreturn","itemid","find","itemtype","row","value","removeClass","addClass","href","attr","confirm","window","location","click","form","get","cnt","length","tempElement","name","appendTo","submit","tags","alert","saveButtonText","tagOptions","each","tagid","val","tagname","push","id","langStrings","modalTitle","create","title","body","type","types","SAVE_CANCEL","modal","setSaveButtonText","getRoot","save","maintag","hidden","destroy","show","first","focus","prop","newvalue","errorcode","message","encodeURIComponent","M","cfg","sesskey","get_string","actionurl","tagsInput","currentTarget","trim","tagsForm","checkValidity","stopPropagation","errorMessage","removeAttr","initManageCollectionsPage","areaid","collid","isenabled","hide","templateContext","collectionInput","param"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * AJAX helper for the tag management page.\n *\n * @module core/tag\n * @package core_tag\n * @copyright 2015 Marina Glancy\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.0\n */\ndefine([\n 'jquery',\n 'core/ajax',\n 'core/templates',\n 'core/notification',\n 'core/str',\n 'core/modal_factory',\n 'core/modal_events',\n 'core/pending',\n], function(\n $,\n ajax,\n templates,\n notification,\n str,\n ModalFactory,\n ModalEvents,\n Pending\n) {\n return /** @alias module:core/tag */ {\n\n /**\n * Initialises tag index page.\n *\n * @method initTagindexPage\n */\n initTagindexPage: function() {\n // Click handler for changing tag type.\n $('body').delegate('.tagarea[data-ta] a[data-quickload=1]', 'click', function(e) {\n var pendingPromise = new Pending('core/tag:initTagindexPage');\n\n e.preventDefault();\n var target = $(this);\n var query = target[0].search.replace(/^\\?/, '');\n var tagarea = target.closest('.tagarea[data-ta]');\n var args = query.split('&').reduce(function(s, c) {\n var t = c.split('=');\n s[t[0]] = decodeURIComponent(t[1]);\n return s;\n }, {});\n\n ajax.call([{\n methodname: 'core_tag_get_tagindex',\n args: {tagindex: args}\n }])[0]\n .then(function(data) {\n return templates.render('core_tag/index', data);\n })\n .then(function(html, js) {\n templates.replaceNode(tagarea, html, js);\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag management page.\n *\n * @method initManagePage\n */\n initManagePage: function() {\n // Set cell 'time modified' to 'now' when any of the element is updated in this row.\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var pendingPromise = new Pending('core/tag:initManagePage');\n\n str.get_strings([\n {\n key: 'selecttag',\n component: 'core_tag',\n },\n {\n key: 'now',\n component: 'core',\n },\n ])\n .then(function(result) {\n $('label[for=\"tagselect' + e.ajaxreturn.itemid + '\"]').html(result[0]);\n $(e.target).closest('tr').find('td.col-timemodified').html(result[1]);\n\n return;\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n\n if (e.ajaxreturn.itemtype === 'tagflag') {\n var row = $(e.target).closest('tr');\n if (e.ajaxreturn.value === '0') {\n row.removeClass('flagged-tag');\n } else {\n row.addClass('flagged-tag');\n }\n }\n });\n\n // Confirmation for single tag delete link.\n $('.tag-management-table').delegate('a.tagdelete', 'click', function(e) {\n var pendingPromise = new Pending('core/tag:tagdelete');\n\n e.preventDefault();\n var href = $(this).attr('href');\n str.get_strings([\n {key: 'delete', component: 'core'},\n {key: 'confirmdeletetag', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // Confirmation for bulk tag delete button.\n $(\"#tag-management-delete\").click(function(e) {\n var form = $(this).closest('form').get(0);\n\n var cnt = $(form).find(\"input[type=checkbox]:checked\").length;\n if (!cnt) {\n return;\n }\n\n var pendingPromise = new Pending('core/tag:tag-management-delete');\n var tempElement = $(\"\").attr('name', this.name);\n e.preventDefault();\n str.get_strings([\n {key: 'delete', component: 'core'},\n {key: 'confirmdeletetags', component: 'tag'},\n {key: 'yes', component: 'core'},\n {key: 'no', component: 'core'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n tempElement.appendTo(form);\n form.submit();\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // Confirmation for bulk tag combine button.\n $(\"#tag-management-combine\").click(function(e) {\n var pendingPromise = new Pending('core/tag:tag-management-combine');\n\n e.preventDefault();\n var form = $(this).closest('form').get(0);\n var tags = $(form).find(\"input[type=checkbox]:checked\");\n\n if (tags.length <= 1) {\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'selectmultipletags', component: 'tag'},\n {key: 'ok'},\n ])\n .then(function(s) {\n return notification.alert(s[0], s[1], s[2]);\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n\n return;\n }\n\n var tempElement = $(\"\").attr('name', this.name);\n var saveButtonText = '';\n var tagOptions = [];\n tags.each(function() {\n var tagid = $(this).val(),\n tagname = $('.inplaceeditable[data-itemtype=tagname][data-itemid=' + tagid + ']').attr('data-value');\n tagOptions.push({\n id: tagid,\n name: tagname\n });\n });\n\n str.get_strings([\n {key: 'combineselected', component: 'tag'},\n {key: 'continue', component: 'core'}\n ])\n .then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n tags: tagOptions\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/combine_tags', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n })\n .then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n return modal;\n })\n .then(function(modal) {\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n e.preventDefault();\n\n // Append this temp element in the form in the tags list, not the form in the modal. Confusing, right?!?\n tempElement.appendTo(form);\n // Get the selected tag from the modal.\n var maintag = $('input[name=maintag]:checked', '#combinetags_form').val();\n // Append this in the tags list form.\n $(\"\").attr('name', 'maintag').attr('value', maintag).appendTo(form);\n // Submit the tags list form.\n form.submit();\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n // Tick the first option.\n $('#combinetags_form input[type=radio]').first().focus().prop('checked', true);\n\n return;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n // When user changes tag name to some name that already exists suggest to combine the tags.\n $('body').on('updatefailed', '[data-inplaceeditable][data-itemtype=tagname]', function(e) {\n var exception = e.exception; // The exception object returned by the callback.\n var newvalue = e.newvalue; // The value that user tried to udpated the element to.\n var tagid = $(e.target).attr('data-itemid');\n if (exception.errorcode === 'namesalreadybeeingused') {\n var pendingPromise = new Pending('core/tag:updatefailed');\n\n e.preventDefault(); // This will prevent default error dialogue.\n str.get_strings([\n {key: 'nameuseddocombine', component: 'tag'},\n {key: 'yes'},\n {key: 'cancel'},\n ])\n .then(function(s) {\n return notification.confirm(e.message, s[0], s[1], s[2], function() {\n window.location.href = window.location.href + \"&newname=\" + encodeURIComponent(newvalue) +\n \"&tagid=\" + encodeURIComponent(tagid) +\n '&action=renamecombine&sesskey=' + M.cfg.sesskey;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n }\n });\n\n // Form for adding standard tags.\n $('body').on('click', 'a[data-action=addstandardtag]', function(e) {\n var pendingPromise = new Pending('core/tag:addstandardtag');\n e.preventDefault();\n\n return ModalFactory.create({\n title: str.get_string('addotags', 'tag'),\n body: templates.render('core_tag/add_tags', {\n actionurl: window.location.href,\n sesskey: M.cfg.sesskey\n }),\n type: ModalFactory.types.SAVE_CANCEL\n })\n .then(function(modal) {\n modal.setSaveButtonText(str.get_string('continue', 'core'));\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var tagsInput = $(e.currentTarget).find('#id_tagslist');\n var name = tagsInput.val().trim();\n\n // Set the text field's value to the trimmed value.\n tagsInput.val(name);\n\n // Add submit event listener to the form.\n var tagsForm = $('#addtags_form');\n tagsForm.on('submit', function(e) {\n // Validate the form.\n var form = $('#addtags_form');\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"tagslistinput\"]').addClass('error');\n var errorMessage = $('#id_tagslist_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n tagsForm.submit();\n\n return false;\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n },\n\n /**\n * Initialises tag collection management page.\n *\n * @method initManageCollectionsPage\n */\n initManageCollectionsPage: function() {\n $('body').on('updated', '[data-inplaceeditable]', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-updated');\n\n var ajaxreturn = e.ajaxreturn,\n areaid, collid, isenabled;\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n isenabled = ajaxreturn.value;\n if (isenabled === '1') {\n $(this).closest('tr').removeClass('dimmed_text');\n collid = $(this).closest('tr').find('[data-itemtype=\"tagareacollection\"]').attr(\"data-value\");\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n } else {\n $(this).closest('tr').addClass('dimmed_text');\n }\n }\n if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareacollection') {\n areaid = $(this).attr('data-itemid');\n $(\".tag-collections-table ul[data-collectionid] li[data-areaid=\" + areaid + \"]\").hide();\n collid = $(this).attr('data-value');\n isenabled = $(this).closest('tr').find('[data-itemtype=\"tagareaenable\"]').attr(\"data-value\");\n if (isenabled === \"1\") {\n $(\".tag-collections-table ul[data-collectionid=\" + collid + \"] li[data-areaid=\" + areaid + \"]\").show();\n }\n }\n\n pendingPromise.resolve();\n });\n\n $('body').on('click', '.addtagcoll > a', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-addtagcoll');\n\n e.preventDefault();\n var keys = [\n {\n key: 'addtagcoll',\n component: 'tag'\n },\n {\n key: 'create',\n component: 'core'\n }\n ];\n\n var href = $(this).attr('data-url');\n var saveButtonText = '';\n str.get_strings(keys)\n .then(function(langStrings) {\n var modalTitle = langStrings[0];\n saveButtonText = langStrings[1];\n var templateContext = {\n actionurl: href,\n sesskey: M.cfg.sesskey\n };\n return ModalFactory.create({\n title: modalTitle,\n body: templates.render('core_tag/add_tag_collection', templateContext),\n type: ModalFactory.types.SAVE_CANCEL\n });\n })\n .then(function(modal) {\n modal.setSaveButtonText(saveButtonText);\n\n // Handle save event.\n modal.getRoot().on(ModalEvents.save, function(e) {\n var collectionInput = $(e.currentTarget).find('#addtagcoll_name');\n var name = collectionInput.val().trim();\n // Set the text field's value to the trimmed value.\n collectionInput.val(name);\n\n // Add submit event listener to the form.\n var form = $('#addtagcoll_form');\n form.on('submit', function(e) {\n // Validate the form.\n if (form[0].checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n form.addClass('was-validated');\n\n // BS2 compatibility.\n $('[data-region=\"addtagcoll_nameinput\"]').addClass('error');\n var errorMessage = $('#id_addtagcoll_name_error_message');\n errorMessage.removeAttr('hidden');\n errorMessage.addClass('help-block');\n });\n\n // Try to submit the form.\n form.submit();\n\n return false;\n });\n\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n modal.show();\n\n return modal;\n\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n\n $('body').on('click', '.tag-collections-table .action_delete', function(e) {\n var pendingPromise = new Pending('core/tag:initManageCollectionsPage-action_delete');\n\n e.preventDefault();\n var href = $(this).attr('data-url') + '&sesskey=' + M.cfg.sesskey;\n str.get_strings([\n {key: 'delete'},\n {key: 'suredeletecoll', component: 'tag', param: $(this).attr('data-collname')},\n {key: 'yes'},\n {key: 'no'},\n ])\n .then(function(s) {\n return notification.confirm(s[0], s[1], s[2], s[3], function() {\n window.location.href = href;\n });\n })\n .always(pendingPromise.resolve)\n .catch(notification.exception);\n });\n }\n };\n});\n"],"file":"tag.min.js"} \ No newline at end of file diff --git a/lib/amd/src/notification.js b/lib/amd/src/notification.js index 601e50e6c80..3bbe59f3094 100644 --- a/lib/amd/src/notification.js +++ b/lib/amd/src/notification.js @@ -26,8 +26,8 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 2.9 */ -define(['core/yui', 'jquery', 'core/log'], -function(Y, $, log) { +define(['core/yui', 'jquery', 'core/log', 'core/pending'], +function(Y, $, log, Pending) { var notificationModule = { types: { 'success': 'core/notification_success', @@ -39,6 +39,8 @@ function(Y, $, log) { fieldName: 'user-notifications', fetchNotifications: function() { + var pendingPromise = new Pending('core/notification:fetchNotifications'); + require(['core/ajax'], function(ajax) { var promises = ajax.call([{ methodname: 'core_fetch_notifications', @@ -47,13 +49,17 @@ function(Y, $, log) { } }]); + // This currently fails when not logged in. + // eslint-disable-next-line promise/catch-or-return promises[0] - .done(notificationModule.addNotifications) - ; + .then(notificationModule.addNotifications) + .always(pendingPromise.resolve); }); }, addNotifications: function(notifications) { + var pendingPromise = new Pending('core/notification:addNotifications'); + if (!notifications) { notifications = []; } @@ -61,6 +67,8 @@ function(Y, $, log) { $.each(notifications, function(i, notification) { notificationModule.renderNotification(notification.template, notification.variables); }); + + pendingPromise.resolve(); }, setupTargetRegion: function() { @@ -86,13 +94,15 @@ function(Y, $, log) { }, addNotification: function(notification) { + var pendingPromise = new Pending('core/notification:addNotifications'); + var template = notificationModule.types.error; notification = $.extend({ - closebutton: true, - announce: true, - type: 'error' - }, notification); + closebutton: true, + announce: true, + type: 'error' + }, notification); if (notification.template) { template = notification.template; @@ -104,6 +114,8 @@ function(Y, $, log) { delete notification.type; } + pendingPromise.resolve(); + return notificationModule.renderNotification(template, notification); }, @@ -112,18 +124,25 @@ function(Y, $, log) { log.debug('Notification received without content. Skipping.'); return; } + + var pendingPromise = new Pending('core/notification:renderNotification'); + require(['core/templates'], function(templates) { templates.render(template, variables) - .done(function(html, js) { - $('#' + notificationModule.fieldName).prepend(html); - templates.runTemplateJS(js); - }) - .fail(notificationModule.exception) - ; + .then(function(html, js) { + $('#' + notificationModule.fieldName).prepend(html); + templates.runTemplateJS(js); + + return; + }) + .always(pendingPromise.resolve) + .catch(notificationModule.exception); }); }, alert: function(title, message, yesLabel) { + var pendingPromise = new Pending('core/notification:alert'); + // Here we are wrapping YUI. This allows us to start transitioning, but // wait for a good alternative without having inconsistent dialogues. Y.use('moodle-core-notification-alert', function() { @@ -134,10 +153,14 @@ function(Y, $, log) { }); alert.show(); + + pendingPromise.resolve(); }); }, confirm: function(title, question, yesLabel, noLabel, yesCallback, noCallback) { + var pendingPromise = new Pending('core/notification:confirm'); + // Here we are wrapping YUI. This allows us to start transitioning, but // wait for a good alternative without having inconsistent dialogues. Y.use('moodle-core-notification-confirm', function() { @@ -157,10 +180,14 @@ function(Y, $, log) { }); } modal.show(); + + pendingPromise.resolve(); }); }, exception: function(ex) { + var pendingPromise = new Pending('core/notification:addNotifications'); + // Fudge some parameters. if (typeof ex.stack == 'undefined') { ex.stack = ''; @@ -193,6 +220,8 @@ function(Y, $, log) { var modal = new M.core.exception(ex); modal.show(); + + pendingPromise.resolve(); }); } }; diff --git a/lib/amd/src/tag.js b/lib/amd/src/tag.js index e6b12f1b597..2527032ad6f 100644 --- a/lib/amd/src/tag.js +++ b/lib/amd/src/tag.js @@ -22,8 +22,25 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 3.0 */ -define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str', 'core/modal_factory', 'core/modal_events'], - function($, ajax, templates, notification, str, ModalFactory, ModalEvents) { +define([ + 'jquery', + 'core/ajax', + 'core/templates', + 'core/notification', + 'core/str', + 'core/modal_factory', + 'core/modal_events', + 'core/pending', +], function( + $, + ajax, + templates, + notification, + str, + ModalFactory, + ModalEvents, + Pending +) { return /** @alias module:core/tag */ { /** @@ -34,27 +51,31 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' initTagindexPage: function() { // Click handler for changing tag type. $('body').delegate('.tagarea[data-ta] a[data-quickload=1]', 'click', function(e) { + var pendingPromise = new Pending('core/tag:initTagindexPage'); + e.preventDefault(); - var target = $(this), - query = target[0].search.replace(/^\?/, ''), - tagarea = target.closest('.tagarea[data-ta]'), - args = query.split('&').reduce(function(s, c) { + var target = $(this); + var query = target[0].search.replace(/^\?/, ''); + var tagarea = target.closest('.tagarea[data-ta]'); + var args = query.split('&').reduce(function(s, c) { var t = c.split('='); s[t[0]] = decodeURIComponent(t[1]); return s; }, {}); - var promises = ajax.call([{ + ajax.call([{ methodname: 'core_tag_get_tagindex', args: {tagindex: args} - }], true); - - $.when.apply($, promises) - .done(function(data) { - templates.render('core_tag/index', data).done(function(html) { - tagarea.replaceWith(html); - }); - }); + }])[0] + .then(function(data) { + return templates.render('core_tag/index', data); + }) + .then(function(html, js) { + templates.replaceNode(tagarea, html, js); + return; + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); }, @@ -64,17 +85,29 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' * @method initManagePage */ initManagePage: function() { - // Set cell 'time modified' to 'now' when any of the element is updated in this row. $('body').on('updated', '[data-inplaceeditable]', function(e) { - str.get_string('selecttag', 'core_tag', e.ajaxreturn.value) - .then(function(s) { - return $('label[for="tagselect' + e.ajaxreturn.itemid + '"]').html(s); - }) - .fail(notification.exception); - str.get_string('now').done(function(s) { - $(e.target).closest('tr').find('td.col-timemodified').html(s); - }); + var pendingPromise = new Pending('core/tag:initManagePage'); + + str.get_strings([ + { + key: 'selecttag', + component: 'core_tag', + }, + { + key: 'now', + component: 'core', + }, + ]) + .then(function(result) { + $('label[for="tagselect' + e.ajaxreturn.itemid + '"]').html(result[0]); + $(e.target).closest('tr').find('td.col-timemodified').html(result[1]); + + return; + }) + .always(pendingPromise.resolve) + .catch(notification.exception); + if (e.ajaxreturn.itemtype === 'tagflag') { var row = $(e.target).closest('tr'); if (e.ajaxreturn.value === '0') { @@ -87,60 +120,76 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' // Confirmation for single tag delete link. $('.tag-management-table').delegate('a.tagdelete', 'click', function(e) { + var pendingPromise = new Pending('core/tag:tagdelete'); + e.preventDefault(); var href = $(this).attr('href'); str.get_strings([ - {key: 'delete'}, - {key: 'confirmdeletetag', component: 'tag'}, - {key: 'yes'}, - {key: 'no'}, - ]).done(function(s) { - notification.confirm(s[0], s[1], s[2], s[3], function() { - window.location.href = href; - }); - } - ); + {key: 'delete', component: 'core'}, + {key: 'confirmdeletetag', component: 'tag'}, + {key: 'yes', component: 'core'}, + {key: 'no', component: 'core'}, + ]) + .then(function(s) { + return notification.confirm(s[0], s[1], s[2], s[3], function() { + window.location.href = href; + }); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); // Confirmation for bulk tag delete button. $("#tag-management-delete").click(function(e) { - var form = $(this).closest('form').get(0), - cnt = $(form).find("input[type=checkbox]:checked").length; + var form = $(this).closest('form').get(0); + + var cnt = $(form).find("input[type=checkbox]:checked").length; if (!cnt) { return; } + + var pendingPromise = new Pending('core/tag:tag-management-delete'); var tempElement = $("").attr('name', this.name); e.preventDefault(); str.get_strings([ - {key: 'delete'}, - {key: 'confirmdeletetags', component: 'tag'}, - {key: 'yes'}, - {key: 'no'}, - ]).done(function(s) { - notification.confirm(s[0], s[1], s[2], s[3], function() { - tempElement.appendTo(form); - form.submit(); - }); - } - ); + {key: 'delete', component: 'core'}, + {key: 'confirmdeletetags', component: 'tag'}, + {key: 'yes', component: 'core'}, + {key: 'no', component: 'core'}, + ]) + .then(function(s) { + return notification.confirm(s[0], s[1], s[2], s[3], function() { + tempElement.appendTo(form); + form.submit(); + }); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); // Confirmation for bulk tag combine button. $("#tag-management-combine").click(function(e) { + var pendingPromise = new Pending('core/tag:tag-management-combine'); + e.preventDefault(); - var form = $(this).closest('form').get(0), - tags = $(form).find("input[type=checkbox]:checked"); + var form = $(this).closest('form').get(0); + var tags = $(form).find("input[type=checkbox]:checked"); + if (tags.length <= 1) { str.get_strings([ {key: 'combineselected', component: 'tag'}, {key: 'selectmultipletags', component: 'tag'}, {key: 'ok'}, - ]).done(function(s) { - notification.alert(s[0], s[1], s[2]); - } - ); + ]) + .then(function(s) { + return notification.alert(s[0], s[1], s[2]); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); + return; } + var tempElement = $("").attr('name', this.name); var saveButtonText = ''; var tagOptions = []; @@ -155,8 +204,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' str.get_strings([ {key: 'combineselected', component: 'tag'}, - {key: 'continue'} - ]).then(function(langStrings) { + {key: 'continue', component: 'core'} + ]) + .then(function(langStrings) { var modalTitle = langStrings[0]; saveButtonText = langStrings[1]; var templateContext = { @@ -167,9 +217,14 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' body: templates.render('core_tag/combine_tags', templateContext), type: ModalFactory.types.SAVE_CANCEL }); - }).then(function(modal) { + }) + .then(function(modal) { modal.setSaveButtonText(saveButtonText); + return modal; + }) + .then(function(modal) { + // Handle save event. modal.getRoot().on(ModalEvents.save, function(e) { e.preventDefault(); @@ -196,7 +251,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' return; - }).catch(notification.exception); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); // When user changes tag name to some name that already exists suggest to combine the tags. @@ -205,43 +262,41 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' var newvalue = e.newvalue; // The value that user tried to udpated the element to. var tagid = $(e.target).attr('data-itemid'); if (exception.errorcode === 'namesalreadybeeingused') { + var pendingPromise = new Pending('core/tag:updatefailed'); + e.preventDefault(); // This will prevent default error dialogue. str.get_strings([ {key: 'nameuseddocombine', component: 'tag'}, {key: 'yes'}, {key: 'cancel'}, - ]).done(function(s) { - notification.confirm(e.message, s[0], s[1], s[2], function() { + ]) + .then(function(s) { + return notification.confirm(e.message, s[0], s[1], s[2], function() { window.location.href = window.location.href + "&newname=" + encodeURIComponent(newvalue) + "&tagid=" + encodeURIComponent(tagid) + '&action=renamecombine&sesskey=' + M.cfg.sesskey; }); - }); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); } }); // Form for adding standard tags. $('body').on('click', 'a[data-action=addstandardtag]', function(e) { + var pendingPromise = new Pending('core/tag:addstandardtag'); e.preventDefault(); - var saveButtonText = ''; - str.get_strings([ - {key: 'addotags', component: 'tag'}, - {key: 'continue'} - ]).then(function(langStrings) { - var modalTitle = langStrings[0]; - saveButtonText = langStrings[1]; - var templateContext = { + return ModalFactory.create({ + title: str.get_string('addotags', 'tag'), + body: templates.render('core_tag/add_tags', { actionurl: window.location.href, sesskey: M.cfg.sesskey - }; - return ModalFactory.create({ - title: modalTitle, - body: templates.render('core_tag/add_tags', templateContext), - type: ModalFactory.types.SAVE_CANCEL - }); - }).then(function(modal) { - modal.setSaveButtonText(saveButtonText); + }), + type: ModalFactory.types.SAVE_CANCEL + }) + .then(function(modal) { + modal.setSaveButtonText(str.get_string('continue', 'core')); // Handle save event. modal.getRoot().on(ModalEvents.save, function(e) { @@ -285,7 +340,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' return; - }).catch(notification.exception); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); }, @@ -296,6 +353,8 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' */ initManageCollectionsPage: function() { $('body').on('updated', '[data-inplaceeditable]', function(e) { + var pendingPromise = new Pending('core/tag:initManageCollectionsPage-updated'); + var ajaxreturn = e.ajaxreturn, areaid, collid, isenabled; if (ajaxreturn.component === 'core_tag' && ajaxreturn.itemtype === 'tagareaenable') { @@ -319,9 +378,13 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' $(".tag-collections-table ul[data-collectionid=" + collid + "] li[data-areaid=" + areaid + "]").show(); } } + + pendingPromise.resolve(); }); $('body').on('click', '.addtagcoll > a', function(e) { + var pendingPromise = new Pending('core/tag:initManageCollectionsPage-addtagcoll'); + e.preventDefault(); var keys = [ { @@ -329,13 +392,15 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' component: 'tag' }, { - key: 'create' + key: 'create', + component: 'core' } ]; var href = $(this).attr('data-url'); var saveButtonText = ''; - str.get_strings(keys).then(function(langStrings) { + str.get_strings(keys) + .then(function(langStrings) { var modalTitle = langStrings[0]; saveButtonText = langStrings[1]; var templateContext = { @@ -347,7 +412,8 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' body: templates.render('core_tag/add_tag_collection', templateContext), type: ModalFactory.types.SAVE_CANCEL }); - }).then(function(modal) { + }) + .then(function(modal) { modal.setSaveButtonText(saveButtonText); // Handle save event. @@ -388,25 +454,31 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/str' modal.show(); - return; + return modal; - }).catch(notification.exception); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); $('body').on('click', '.tag-collections-table .action_delete', function(e) { + var pendingPromise = new Pending('core/tag:initManageCollectionsPage-action_delete'); + e.preventDefault(); var href = $(this).attr('data-url') + '&sesskey=' + M.cfg.sesskey; str.get_strings([ - {key: 'delete'}, - {key: 'suredeletecoll', component: 'tag', param: $(this).attr('data-collname')}, - {key: 'yes'}, - {key: 'no'}, - ]).done(function(s) { - notification.confirm(s[0], s[1], s[2], s[3], function() { - window.location.href = href; - }); - } - ); + {key: 'delete'}, + {key: 'suredeletecoll', component: 'tag', param: $(this).attr('data-collname')}, + {key: 'yes'}, + {key: 'no'}, + ]) + .then(function(s) { + return notification.confirm(s[0], s[1], s[2], s[3], function() { + window.location.href = href; + }); + }) + .always(pendingPromise.resolve) + .catch(notification.exception); }); } };