From 6d9c93560bb4674f05ad5e034afeb0e45c5bacb2 Mon Sep 17 00:00:00 2001 From: Ryan Wyllie Date: Thu, 19 Sep 2019 09:32:24 +0800 Subject: [PATCH] MDL-66477 core: remove snakeCase block regions from drawer.mustache --- lib/amd/build/drawer.min.js | 2 +- lib/amd/build/drawer.min.js.map | 2 +- lib/amd/src/drawer.js | 2 +- lib/templates/drawer.mustache | 7 +++---- message/amd/build/message_drawer.min.js | 2 +- message/amd/build/message_drawer.min.js.map | 2 +- message/amd/src/message_drawer.js | 6 +++--- message/templates/message_drawer.mustache | 5 ++--- mod/forum/templates/discussion_settings_drawer.mustache | 5 ++--- 9 files changed, 15 insertions(+), 18 deletions(-) diff --git a/lib/amd/build/drawer.min.js b/lib/amd/build/drawer.min.js index 86d05566606..8b0283645b2 100644 --- a/lib/amd/build/drawer.min.js +++ b/lib/amd/build/drawer.min.js @@ -1,2 +1,2 @@ -define ("core/drawer",["exports","jquery","core/pubsub","core/drawer_events"],function(a,b,c,d){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=e(b);c=function(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}(c);d=e(d);function e(a){return a&&a.__esModule?a:{default:a}}var f=function(a){a.removeClass("hidden");a.attr("aria-expanded",!0);a.attr("aria-hidden",!1);c.publish(d.default.DRAWER_SHOWN,a)},g=function(a){a.addClass("hidden");a.attr("aria-expanded",!1);a.attr("aria-hidden",!0);c.publish(d.default.DRAWER_HIDDEN,a)},h=function(a){a=(0,b.default)(a);return a.closest("[data-rootid="+a.attr("id")+"]")};a.default={hide:g,show:f,isVisible:function isVisible(a){var b=a.hasClass("hidden");return!b},getDrawerRoot:h};return a.default}); +define ("core/drawer",["exports","jquery","core/pubsub","core/drawer_events"],function(a,b,c,d){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=e(b);c=function(a){if(a&&a.__esModule){return a}else{var b={};if(null!=a){for(var c in a){if(Object.prototype.hasOwnProperty.call(a,c)){var d=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(a,c):{};if(d.get||d.set){Object.defineProperty(b,c,d)}else{b[c]=a[c]}}}}b.default=a;return b}}(c);d=e(d);function e(a){return a&&a.__esModule?a:{default:a}}var f=function(a){a.removeClass("hidden");a.attr("aria-expanded",!0);a.attr("aria-hidden",!1);c.publish(d.default.DRAWER_SHOWN,a)},g=function(a){a.addClass("hidden");a.attr("aria-expanded",!1);a.attr("aria-hidden",!0);c.publish(d.default.DRAWER_HIDDEN,a)},h=function(a){a=(0,b.default)(a);return a.closest("[data-region=\"right-hand-drawer\"]")};a.default={hide:g,show:f,isVisible:function isVisible(a){var b=a.hasClass("hidden");return!b},getDrawerRoot:h};return a.default}); //# sourceMappingURL=drawer.min.js.map diff --git a/lib/amd/build/drawer.min.js.map b/lib/amd/build/drawer.min.js.map index e93bbe5f3a1..9838e945e8d 100644 --- a/lib/amd/build/drawer.min.js.map +++ b/lib/amd/build/drawer.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/drawer.js"],"names":["show","root","removeClass","attr","PubSub","publish","DrawerEvents","DRAWER_SHOWN","hide","addClass","DRAWER_HIDDEN","getDrawerRoot","contentRoot","closest","isVisible","isHidden","hasClass"],"mappings":"+KAsBA,OACA,kUACA,O,sDAOMA,CAAAA,CAAI,CAAG,SAACC,CAAD,CAAU,CACnBA,CAAI,CAACC,WAAL,CAAiB,QAAjB,EACAD,CAAI,CAACE,IAAL,CAAU,eAAV,KACAF,CAAI,CAACE,IAAL,CAAU,aAAV,KACAC,CAAM,CAACC,OAAP,CAAeC,UAAaC,YAA5B,CAA0CN,CAA1C,CACH,C,CAOKO,CAAI,CAAG,SAACP,CAAD,CAAU,CACnBA,CAAI,CAACQ,QAAL,CAAc,QAAd,EACAR,CAAI,CAACE,IAAL,CAAU,eAAV,KACAF,CAAI,CAACE,IAAL,CAAU,aAAV,KACAC,CAAM,CAACC,OAAP,CAAeC,UAAaI,aAA5B,CAA2CT,CAA3C,CACH,C,CAmBKU,CAAa,CAAG,SAACC,CAAD,CAAiB,CACnCA,CAAW,CAAG,cAAEA,CAAF,CAAd,CACA,MAAOA,CAAAA,CAAW,CAACC,OAAZ,CAAoB,gBAAkBD,CAAW,CAACT,IAAZ,CAAiB,IAAjB,CAAlB,CAA2C,GAA/D,CACV,C,WAEc,CACXK,IAAI,CAAEA,CADK,CAEXR,IAAI,CAAEA,CAFK,CAGXc,SAAS,CAnBK,QAAZA,CAAAA,SAAY,CAACb,CAAD,CAAU,CACxB,GAAIc,CAAAA,CAAQ,CAAGd,CAAI,CAACe,QAAL,CAAc,QAAd,CAAf,CACA,MAAO,CAACD,CACX,CAac,CAIXJ,aAAa,CAAEA,CAJJ,C","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 * Controls the drawer.\n *\n * @module core/drawer\n * @copyright 2019 Jun Pataleta \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport $ from 'jquery';\nimport * as PubSub from 'core/pubsub';\nimport DrawerEvents from 'core/drawer_events';\n\n/**\n * Show the drawer.\n *\n * @param {Object} root The drawer container.\n */\nconst show = (root) => {\n root.removeClass('hidden');\n root.attr('aria-expanded', true);\n root.attr('aria-hidden', false);\n PubSub.publish(DrawerEvents.DRAWER_SHOWN, root);\n};\n\n/**\n * Hide the drawer.\n *\n * @param {Object} root The drawer container.\n */\nconst hide = (root) => {\n root.addClass('hidden');\n root.attr('aria-expanded', false);\n root.attr('aria-hidden', true);\n PubSub.publish(DrawerEvents.DRAWER_HIDDEN, root);\n};\n\n/**\n * Check if the drawer is visible.\n *\n * @param {Object} root The drawer container.\n * @return {boolean}\n */\nconst isVisible = (root) => {\n let isHidden = root.hasClass('hidden');\n return !isHidden;\n};\n\n/**\n * Find the root element of the drawer based on the using the drawer content root's ID.\n *\n * @param {Object} contentRoot The drawer content's root element.\n * @returns {*|jQuery}\n */\nconst getDrawerRoot = (contentRoot) => {\n contentRoot = $(contentRoot);\n return contentRoot.closest('[data-rootid=' + contentRoot.attr('id') + ']');\n};\n\nexport default {\n hide: hide,\n show: show,\n isVisible: isVisible,\n getDrawerRoot: getDrawerRoot\n};\n"],"file":"drawer.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/drawer.js"],"names":["show","root","removeClass","attr","PubSub","publish","DrawerEvents","DRAWER_SHOWN","hide","addClass","DRAWER_HIDDEN","getDrawerRoot","contentRoot","closest","isVisible","isHidden","hasClass"],"mappings":"+KAsBA,OACA,kUACA,O,sDAOMA,CAAAA,CAAI,CAAG,SAACC,CAAD,CAAU,CACnBA,CAAI,CAACC,WAAL,CAAiB,QAAjB,EACAD,CAAI,CAACE,IAAL,CAAU,eAAV,KACAF,CAAI,CAACE,IAAL,CAAU,aAAV,KACAC,CAAM,CAACC,OAAP,CAAeC,UAAaC,YAA5B,CAA0CN,CAA1C,CACH,C,CAOKO,CAAI,CAAG,SAACP,CAAD,CAAU,CACnBA,CAAI,CAACQ,QAAL,CAAc,QAAd,EACAR,CAAI,CAACE,IAAL,CAAU,eAAV,KACAF,CAAI,CAACE,IAAL,CAAU,aAAV,KACAC,CAAM,CAACC,OAAP,CAAeC,UAAaI,aAA5B,CAA2CT,CAA3C,CACH,C,CAmBKU,CAAa,CAAG,SAACC,CAAD,CAAiB,CACnCA,CAAW,CAAG,cAAEA,CAAF,CAAd,CACA,MAAOA,CAAAA,CAAW,CAACC,OAAZ,CAAoB,qCAApB,CACV,C,WAEc,CACXL,IAAI,CAAEA,CADK,CAEXR,IAAI,CAAEA,CAFK,CAGXc,SAAS,CAnBK,QAAZA,CAAAA,SAAY,CAACb,CAAD,CAAU,CACxB,GAAIc,CAAAA,CAAQ,CAAGd,CAAI,CAACe,QAAL,CAAc,QAAd,CAAf,CACA,MAAO,CAACD,CACX,CAac,CAIXJ,aAAa,CAAEA,CAJJ,C","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 * Controls the drawer.\n *\n * @module core/drawer\n * @copyright 2019 Jun Pataleta \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport $ from 'jquery';\nimport * as PubSub from 'core/pubsub';\nimport DrawerEvents from 'core/drawer_events';\n\n/**\n * Show the drawer.\n *\n * @param {Object} root The drawer container.\n */\nconst show = (root) => {\n root.removeClass('hidden');\n root.attr('aria-expanded', true);\n root.attr('aria-hidden', false);\n PubSub.publish(DrawerEvents.DRAWER_SHOWN, root);\n};\n\n/**\n * Hide the drawer.\n *\n * @param {Object} root The drawer container.\n */\nconst hide = (root) => {\n root.addClass('hidden');\n root.attr('aria-expanded', false);\n root.attr('aria-hidden', true);\n PubSub.publish(DrawerEvents.DRAWER_HIDDEN, root);\n};\n\n/**\n * Check if the drawer is visible.\n *\n * @param {Object} root The drawer container.\n * @return {boolean}\n */\nconst isVisible = (root) => {\n let isHidden = root.hasClass('hidden');\n return !isHidden;\n};\n\n/**\n * Find the root element of the drawer based on the using the drawer content root's ID.\n *\n * @param {Object} contentRoot The drawer content's root element.\n * @returns {*|jQuery}\n */\nconst getDrawerRoot = (contentRoot) => {\n contentRoot = $(contentRoot);\n return contentRoot.closest('[data-region=\"right-hand-drawer\"]');\n};\n\nexport default {\n hide: hide,\n show: show,\n isVisible: isVisible,\n getDrawerRoot: getDrawerRoot\n};\n"],"file":"drawer.min.js"} \ No newline at end of file diff --git a/lib/amd/src/drawer.js b/lib/amd/src/drawer.js index 89f2c19cd07..b7acf7cc51d 100644 --- a/lib/amd/src/drawer.js +++ b/lib/amd/src/drawer.js @@ -67,7 +67,7 @@ const isVisible = (root) => { */ const getDrawerRoot = (contentRoot) => { contentRoot = $(contentRoot); - return contentRoot.closest('[data-rootid=' + contentRoot.attr('id') + ']'); + return contentRoot.closest('[data-region="right-hand-drawer"]'); }; export default { diff --git a/lib/templates/drawer.mustache b/lib/templates/drawer.mustache index 1bb01abd598..388b415478f 100644 --- a/lib/templates/drawer.mustache +++ b/lib/templates/drawer.mustache @@ -32,13 +32,12 @@ {} }} diff --git a/message/amd/build/message_drawer.min.js b/message/amd/build/message_drawer.min.js index 4f4b5523e14..fa586cbf17a 100644 --- a/message/amd/build/message_drawer.min.js +++ b/message/amd/build/message_drawer.min.js @@ -1,2 +1,2 @@ -define ("core_message/message_drawer",["jquery","core/custom_interaction_events","core/pubsub","core_message/message_drawer_view_contact","core_message/message_drawer_view_contacts","core_message/message_drawer_view_conversation","core_message/message_drawer_view_group_info","core_message/message_drawer_view_overview","core_message/message_drawer_view_search","core_message/message_drawer_view_settings","core_message/message_drawer_router","core_message/message_drawer_routes","core_message/message_drawer_events","core/pending","core/drawer"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p={PANEL_BODY_CONTAINER:"[data-region=\"panel-body-container\"]",PANEL_HEADER_CONTAINER:"[data-region=\"panel-header-container\"]",VIEW_CONTACT:"[data-region=\"view-contact\"]",VIEW_CONTACTS:"[data-region=\"view-contacts\"]",VIEW_CONVERSATION:"[data-region=\"view-conversation\"]",VIEW_GROUP_INFO:"[data-region=\"view-group-info\"]",VIEW_OVERVIEW:"[data-region=\"view-overview\"]",VIEW_SEARCH:"[data-region=\"view-search\"]",VIEW_SETTINGS:"[data-region=\"view-settings\"]",ROUTES:"[data-route]",ROUTES_BACK:"[data-route-back]",HEADER_CONTAINER:"[data-region=\"header-container\"]",BODY_CONTAINER:"[data-region=\"body-container\"]",FOOTER_CONTAINER:"[data-region=\"footer-container\"]"},q=function(a,b,c){var d=b.find(p.HEADER_CONTAINER).find(c);if(!d.length){d=b.find(p.PANEL_HEADER_CONTAINER).find(c)}var e=b.find(p.BODY_CONTAINER).find(c);if(!e.length){e=b.find(p.PANEL_BODY_CONTAINER).find(c)}var f=b.find(p.FOOTER_CONTAINER).find(c);return[a,d.length?d:null,e.length?e:null,f.length?f:null]},r=[[l.VIEW_CONTACT,p.VIEW_CONTACT,d.show,d.description],[l.VIEW_CONTACTS,p.VIEW_CONTACTS,e.show,e.description],[l.VIEW_CONVERSATION,p.VIEW_CONVERSATION,f.show,f.description],[l.VIEW_GROUP_INFO,p.VIEW_GROUP_INFO,g.show,g.description],[l.VIEW_OVERVIEW,p.VIEW_OVERVIEW,h.show,h.description],[l.VIEW_SEARCH,p.VIEW_SEARCH,i.show,i.description],[l.VIEW_SETTINGS,p.VIEW_SETTINGS,j.show,j.description]],s=function(a,b){r.forEach(function(c){k.add(a,c[0],q(a,b,c[1]),c[2],c[3])})},t=function(a,b){if(!b.attr("data-shown")){k.go(a,l.VIEW_OVERVIEW);b.attr("data-shown",!0)}var c=o.getDrawerRoot(b);if(c){o.show(c)}},u=function(a){var b=o.getDrawerRoot(a);if(b){o.hide(b)}},v=function(a){var b=o.getDrawerRoot(a);if(b){return o.isVisible(b)}return!0},w=function(d,e,f){b.define(e,[b.events.activate]);var g=/^data-route-param-?(\d*)$/;e.on(b.events.activate,p.ROUTES,function(b,c){for(var e=a(b.target).closest(p.ROUTES),f=e.attr("data-route"),h=[],j=0;j.\n\n/**\n * Controls the message drawer.\n *\n * @module core_message/message_drawer\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'core/pubsub',\n 'core_message/message_drawer_view_contact',\n 'core_message/message_drawer_view_contacts',\n 'core_message/message_drawer_view_conversation',\n 'core_message/message_drawer_view_group_info',\n 'core_message/message_drawer_view_overview',\n 'core_message/message_drawer_view_search',\n 'core_message/message_drawer_view_settings',\n 'core_message/message_drawer_router',\n 'core_message/message_drawer_routes',\n 'core_message/message_drawer_events',\n 'core/pending',\n 'core/drawer',\n],\nfunction(\n $,\n CustomEvents,\n PubSub,\n ViewContact,\n ViewContacts,\n ViewConversation,\n ViewGroupInfo,\n ViewOverview,\n ViewSearch,\n ViewSettings,\n Router,\n Routes,\n Events,\n Pending,\n Drawer\n) {\n\n var SELECTORS = {\n PANEL_BODY_CONTAINER: '[data-region=\"panel-body-container\"]',\n PANEL_HEADER_CONTAINER: '[data-region=\"panel-header-container\"]',\n VIEW_CONTACT: '[data-region=\"view-contact\"]',\n VIEW_CONTACTS: '[data-region=\"view-contacts\"]',\n VIEW_CONVERSATION: '[data-region=\"view-conversation\"]',\n VIEW_GROUP_INFO: '[data-region=\"view-group-info\"]',\n VIEW_OVERVIEW: '[data-region=\"view-overview\"]',\n VIEW_SEARCH: '[data-region=\"view-search\"]',\n VIEW_SETTINGS: '[data-region=\"view-settings\"]',\n ROUTES: '[data-route]',\n ROUTES_BACK: '[data-route-back]',\n HEADER_CONTAINER: '[data-region=\"header-container\"]',\n BODY_CONTAINER: '[data-region=\"body-container\"]',\n FOOTER_CONTAINER: '[data-region=\"footer-container\"]',\n };\n\n /**\n * Get elements for route.\n *\n * @param {String} namespace Unique identifier for the Routes\n * @param {Object} root The message drawer container.\n * @param {string} selector The route container.\n *\n * @return {array} elements Found route container objects.\n */\n var getParametersForRoute = function(namespace, root, selector) {\n\n var header = root.find(SELECTORS.HEADER_CONTAINER).find(selector);\n if (!header.length) {\n header = root.find(SELECTORS.PANEL_HEADER_CONTAINER).find(selector);\n }\n var body = root.find(SELECTORS.BODY_CONTAINER).find(selector);\n if (!body.length) {\n body = root.find(SELECTORS.PANEL_BODY_CONTAINER).find(selector);\n }\n var footer = root.find(SELECTORS.FOOTER_CONTAINER).find(selector);\n\n return [\n namespace,\n header.length ? header : null,\n body.length ? body : null,\n footer.length ? footer : null\n ];\n };\n\n var routes = [\n [Routes.VIEW_CONTACT, SELECTORS.VIEW_CONTACT, ViewContact.show, ViewContact.description],\n [Routes.VIEW_CONTACTS, SELECTORS.VIEW_CONTACTS, ViewContacts.show, ViewContacts.description],\n [Routes.VIEW_CONVERSATION, SELECTORS.VIEW_CONVERSATION, ViewConversation.show, ViewConversation.description],\n [Routes.VIEW_GROUP_INFO, SELECTORS.VIEW_GROUP_INFO, ViewGroupInfo.show, ViewGroupInfo.description],\n [Routes.VIEW_OVERVIEW, SELECTORS.VIEW_OVERVIEW, ViewOverview.show, ViewOverview.description],\n [Routes.VIEW_SEARCH, SELECTORS.VIEW_SEARCH, ViewSearch.show, ViewSearch.description],\n [Routes.VIEW_SETTINGS, SELECTORS.VIEW_SETTINGS, ViewSettings.show, ViewSettings.description]\n ];\n\n /**\n * Create routes.\n *\n * @param {String} namespace Unique identifier for the Routes\n * @param {Object} root The message drawer container.\n */\n var createRoutes = function(namespace, root) {\n routes.forEach(function(route) {\n Router.add(namespace, route[0], getParametersForRoute(namespace, root, route[1]), route[2], route[3]);\n });\n };\n\n /**\n * Show the message drawer.\n *\n * @param {string} namespace The route namespace.\n * @param {Object} root The message drawer container.\n */\n var show = function(namespace, root) {\n if (!root.attr('data-shown')) {\n Router.go(namespace, Routes.VIEW_OVERVIEW);\n root.attr('data-shown', true);\n }\n\n var drawerRoot = Drawer.getDrawerRoot(root);\n if (drawerRoot) {\n Drawer.show(drawerRoot);\n }\n };\n\n /**\n * Hide the message drawer.\n *\n * @param {Object} root The message drawer container.\n */\n var hide = function(root) {\n var drawerRoot = Drawer.getDrawerRoot(root);\n if (drawerRoot) {\n Drawer.hide(drawerRoot);\n }\n };\n\n /**\n * Check if the drawer is visible.\n *\n * @param {Object} root The message drawer container.\n * @return {boolean}\n */\n var isVisible = function(root) {\n var drawerRoot = Drawer.getDrawerRoot(root);\n if (drawerRoot) {\n return Drawer.isVisible(drawerRoot);\n }\n return true;\n };\n\n /**\n * Listen to and handle events for routing, showing and hiding the message drawer.\n *\n * @param {string} namespace The route namespace.\n * @param {Object} root The message drawer container.\n * @param {bool} alwaysVisible Is this messaging app always shown?\n */\n var registerEventListeners = function(namespace, root, alwaysVisible) {\n CustomEvents.define(root, [CustomEvents.events.activate]);\n var paramRegex = /^data-route-param-?(\\d*)$/;\n\n root.on(CustomEvents.events.activate, SELECTORS.ROUTES, function(e, data) {\n var element = $(e.target).closest(SELECTORS.ROUTES);\n var route = element.attr('data-route');\n var attributes = [];\n\n for (var i = 0; i < element[0].attributes.length; i++) {\n attributes.push(element[0].attributes[i]);\n }\n\n var paramAttributes = attributes.filter(function(attribute) {\n var name = attribute.nodeName;\n var match = paramRegex.test(name);\n return match;\n });\n paramAttributes.sort(function(a, b) {\n var aParts = paramRegex.exec(a.nodeName);\n var bParts = paramRegex.exec(b.nodeName);\n var aIndex = aParts.length > 1 ? aParts[1] : 0;\n var bIndex = bParts.length > 1 ? bParts[1] : 0;\n\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var params = paramAttributes.map(function(attribute) {\n return attribute.nodeValue;\n });\n\n var routeParams = [namespace, route].concat(params);\n\n Router.go.apply(null, routeParams);\n\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ROUTES_BACK, function(e, data) {\n Router.back(namespace);\n\n data.originalEvent.preventDefault();\n });\n\n // These are theme-specific to help us fix random behat fails.\n // These events target those events defined in BS3 and BS4 onwards.\n root.on('hide.bs.collapse', '.collapse', function(e) {\n var pendingPromise = new Pending();\n $(e.target).one('hidden.bs.collapse', function() {\n pendingPromise.resolve();\n });\n });\n\n root.on('show.bs.collapse', '.collapse', function(e) {\n var pendingPromise = new Pending();\n $(e.target).one('shown.bs.collapse', function() {\n pendingPromise.resolve();\n });\n });\n\n if (!alwaysVisible) {\n PubSub.subscribe(Events.SHOW, function() {\n show(namespace, root);\n });\n\n PubSub.subscribe(Events.HIDE, function() {\n hide(root);\n });\n\n PubSub.subscribe(Events.TOGGLE_VISIBILITY, function() {\n if (isVisible(root)) {\n hide(root);\n } else {\n show(namespace, root);\n }\n });\n }\n\n PubSub.subscribe(Events.SHOW_CONVERSATION, function(conversationId) {\n show(namespace, root);\n Router.go(namespace, Routes.VIEW_CONVERSATION, conversationId);\n });\n\n PubSub.subscribe(Events.CREATE_CONVERSATION_WITH_USER, function(userId) {\n show(namespace, root);\n Router.go(namespace, Routes.VIEW_CONVERSATION, null, 'create', userId);\n });\n\n PubSub.subscribe(Events.SHOW_SETTINGS, function() {\n show(namespace, root);\n Router.go(namespace, Routes.VIEW_SETTINGS);\n });\n\n PubSub.subscribe(Events.PREFERENCES_UPDATED, function(preferences) {\n var filteredPreferences = preferences.filter(function(preference) {\n return preference.type == 'message_entertosend';\n });\n var enterToSendPreference = filteredPreferences.length ? filteredPreferences[0] : null;\n\n if (enterToSendPreference) {\n var viewConversationFooter = root.find(SELECTORS.FOOTER_CONTAINER).find(SELECTORS.VIEW_CONVERSATION);\n viewConversationFooter.attr('data-enter-to-send', enterToSendPreference.value);\n }\n });\n };\n\n /**\n * Initialise the message drawer.\n *\n * @param {Object} root The message drawer container.\n * @param {String} uniqueId Unique identifier for the Routes\n * @param {bool} alwaysVisible Should we show the app now, or wait for the user?\n * @param {Object} route\n */\n var init = function(root, uniqueId, alwaysVisible, route) {\n root = $(root);\n createRoutes(uniqueId, root);\n registerEventListeners(uniqueId, root, alwaysVisible);\n\n if (alwaysVisible) {\n show(uniqueId, root);\n\n if (route) {\n var routeParams = route.params || [];\n routeParams = [uniqueId, route.path].concat(routeParams);\n Router.go.apply(null, routeParams);\n }\n }\n };\n\n return {\n init: init,\n };\n});\n"],"file":"message_drawer.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/message_drawer.js"],"names":["define","$","CustomEvents","PubSub","ViewContact","ViewContacts","ViewConversation","ViewGroupInfo","ViewOverview","ViewSearch","ViewSettings","Router","Routes","Events","Pending","Drawer","SELECTORS","PANEL_BODY_CONTAINER","PANEL_HEADER_CONTAINER","VIEW_CONTACT","VIEW_CONTACTS","VIEW_CONVERSATION","VIEW_GROUP_INFO","VIEW_OVERVIEW","VIEW_SEARCH","VIEW_SETTINGS","ROUTES","ROUTES_BACK","HEADER_CONTAINER","BODY_CONTAINER","FOOTER_CONTAINER","getParametersForRoute","namespace","root","selector","header","find","length","body","footer","routes","show","description","createRoutes","forEach","route","add","attr","go","drawerRoot","getDrawerRoot","hide","isVisible","registerEventListeners","alwaysVisible","events","activate","paramRegex","on","e","data","element","target","closest","attributes","i","push","paramAttributes","filter","attribute","name","nodeName","match","test","sort","a","b","aParts","exec","bParts","aIndex","bIndex","params","map","nodeValue","routeParams","concat","apply","originalEvent","preventDefault","back","pendingPromise","one","resolve","subscribe","SHOW","HIDE","TOGGLE_VISIBILITY","SHOW_CONVERSATION","conversationId","CREATE_CONVERSATION_WITH_USER","userId","SHOW_SETTINGS","PREFERENCES_UPDATED","preferences","filteredPreferences","preference","type","enterToSendPreference","viewConversationFooter","value","init","uniqueId","path"],"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 * Controls the message drawer.\n *\n * @module core_message/message_drawer\n * @copyright 2018 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(\n[\n 'jquery',\n 'core/custom_interaction_events',\n 'core/pubsub',\n 'core_message/message_drawer_view_contact',\n 'core_message/message_drawer_view_contacts',\n 'core_message/message_drawer_view_conversation',\n 'core_message/message_drawer_view_group_info',\n 'core_message/message_drawer_view_overview',\n 'core_message/message_drawer_view_search',\n 'core_message/message_drawer_view_settings',\n 'core_message/message_drawer_router',\n 'core_message/message_drawer_routes',\n 'core_message/message_drawer_events',\n 'core/pending',\n 'core/drawer',\n],\nfunction(\n $,\n CustomEvents,\n PubSub,\n ViewContact,\n ViewContacts,\n ViewConversation,\n ViewGroupInfo,\n ViewOverview,\n ViewSearch,\n ViewSettings,\n Router,\n Routes,\n Events,\n Pending,\n Drawer\n) {\n\n var SELECTORS = {\n PANEL_BODY_CONTAINER: '[data-region=\"panel-body-container\"]',\n PANEL_HEADER_CONTAINER: '[data-region=\"panel-header-container\"]',\n VIEW_CONTACT: '[data-region=\"view-contact\"]',\n VIEW_CONTACTS: '[data-region=\"view-contacts\"]',\n VIEW_CONVERSATION: '[data-region=\"view-conversation\"]',\n VIEW_GROUP_INFO: '[data-region=\"view-group-info\"]',\n VIEW_OVERVIEW: '[data-region=\"view-overview\"]',\n VIEW_SEARCH: '[data-region=\"view-search\"]',\n VIEW_SETTINGS: '[data-region=\"view-settings\"]',\n ROUTES: '[data-route]',\n ROUTES_BACK: '[data-route-back]',\n HEADER_CONTAINER: '[data-region=\"header-container\"]',\n BODY_CONTAINER: '[data-region=\"body-container\"]',\n FOOTER_CONTAINER: '[data-region=\"footer-container\"]',\n };\n\n /**\n * Get elements for route.\n *\n * @param {String} namespace Unique identifier for the Routes\n * @param {Object} root The message drawer container.\n * @param {string} selector The route container.\n *\n * @return {array} elements Found route container objects.\n */\n var getParametersForRoute = function(namespace, root, selector) {\n\n var header = root.find(SELECTORS.HEADER_CONTAINER).find(selector);\n if (!header.length) {\n header = root.find(SELECTORS.PANEL_HEADER_CONTAINER).find(selector);\n }\n var body = root.find(SELECTORS.BODY_CONTAINER).find(selector);\n if (!body.length) {\n body = root.find(SELECTORS.PANEL_BODY_CONTAINER).find(selector);\n }\n var footer = root.find(SELECTORS.FOOTER_CONTAINER).find(selector);\n\n return [\n namespace,\n header.length ? header : null,\n body.length ? body : null,\n footer.length ? footer : null\n ];\n };\n\n var routes = [\n [Routes.VIEW_CONTACT, SELECTORS.VIEW_CONTACT, ViewContact.show, ViewContact.description],\n [Routes.VIEW_CONTACTS, SELECTORS.VIEW_CONTACTS, ViewContacts.show, ViewContacts.description],\n [Routes.VIEW_CONVERSATION, SELECTORS.VIEW_CONVERSATION, ViewConversation.show, ViewConversation.description],\n [Routes.VIEW_GROUP_INFO, SELECTORS.VIEW_GROUP_INFO, ViewGroupInfo.show, ViewGroupInfo.description],\n [Routes.VIEW_OVERVIEW, SELECTORS.VIEW_OVERVIEW, ViewOverview.show, ViewOverview.description],\n [Routes.VIEW_SEARCH, SELECTORS.VIEW_SEARCH, ViewSearch.show, ViewSearch.description],\n [Routes.VIEW_SETTINGS, SELECTORS.VIEW_SETTINGS, ViewSettings.show, ViewSettings.description]\n ];\n\n /**\n * Create routes.\n *\n * @param {String} namespace Unique identifier for the Routes\n * @param {Object} root The message drawer container.\n */\n var createRoutes = function(namespace, root) {\n routes.forEach(function(route) {\n Router.add(namespace, route[0], getParametersForRoute(namespace, root, route[1]), route[2], route[3]);\n });\n };\n\n /**\n * Show the message drawer.\n *\n * @param {string} namespace The route namespace.\n * @param {Object} root The message drawer container.\n */\n var show = function(namespace, root) {\n if (!root.attr('data-shown')) {\n Router.go(namespace, Routes.VIEW_OVERVIEW);\n root.attr('data-shown', true);\n }\n\n var drawerRoot = Drawer.getDrawerRoot(root);\n if (drawerRoot.length) {\n Drawer.show(drawerRoot);\n }\n };\n\n /**\n * Hide the message drawer.\n *\n * @param {Object} root The message drawer container.\n */\n var hide = function(root) {\n var drawerRoot = Drawer.getDrawerRoot(root);\n if (drawerRoot.length) {\n Drawer.hide(drawerRoot);\n }\n };\n\n /**\n * Check if the drawer is visible.\n *\n * @param {Object} root The message drawer container.\n * @return {boolean}\n */\n var isVisible = function(root) {\n var drawerRoot = Drawer.getDrawerRoot(root);\n if (drawerRoot.length) {\n return Drawer.isVisible(drawerRoot);\n }\n return true;\n };\n\n /**\n * Listen to and handle events for routing, showing and hiding the message drawer.\n *\n * @param {string} namespace The route namespace.\n * @param {Object} root The message drawer container.\n * @param {bool} alwaysVisible Is this messaging app always shown?\n */\n var registerEventListeners = function(namespace, root, alwaysVisible) {\n CustomEvents.define(root, [CustomEvents.events.activate]);\n var paramRegex = /^data-route-param-?(\\d*)$/;\n\n root.on(CustomEvents.events.activate, SELECTORS.ROUTES, function(e, data) {\n var element = $(e.target).closest(SELECTORS.ROUTES);\n var route = element.attr('data-route');\n var attributes = [];\n\n for (var i = 0; i < element[0].attributes.length; i++) {\n attributes.push(element[0].attributes[i]);\n }\n\n var paramAttributes = attributes.filter(function(attribute) {\n var name = attribute.nodeName;\n var match = paramRegex.test(name);\n return match;\n });\n paramAttributes.sort(function(a, b) {\n var aParts = paramRegex.exec(a.nodeName);\n var bParts = paramRegex.exec(b.nodeName);\n var aIndex = aParts.length > 1 ? aParts[1] : 0;\n var bIndex = bParts.length > 1 ? bParts[1] : 0;\n\n if (aIndex < bIndex) {\n return -1;\n } else if (bIndex < aIndex) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var params = paramAttributes.map(function(attribute) {\n return attribute.nodeValue;\n });\n\n var routeParams = [namespace, route].concat(params);\n\n Router.go.apply(null, routeParams);\n\n data.originalEvent.preventDefault();\n });\n\n root.on(CustomEvents.events.activate, SELECTORS.ROUTES_BACK, function(e, data) {\n Router.back(namespace);\n\n data.originalEvent.preventDefault();\n });\n\n // These are theme-specific to help us fix random behat fails.\n // These events target those events defined in BS3 and BS4 onwards.\n root.on('hide.bs.collapse', '.collapse', function(e) {\n var pendingPromise = new Pending();\n $(e.target).one('hidden.bs.collapse', function() {\n pendingPromise.resolve();\n });\n });\n\n root.on('show.bs.collapse', '.collapse', function(e) {\n var pendingPromise = new Pending();\n $(e.target).one('shown.bs.collapse', function() {\n pendingPromise.resolve();\n });\n });\n\n if (!alwaysVisible) {\n PubSub.subscribe(Events.SHOW, function() {\n show(namespace, root);\n });\n\n PubSub.subscribe(Events.HIDE, function() {\n hide(root);\n });\n\n PubSub.subscribe(Events.TOGGLE_VISIBILITY, function() {\n if (isVisible(root)) {\n hide(root);\n } else {\n show(namespace, root);\n }\n });\n }\n\n PubSub.subscribe(Events.SHOW_CONVERSATION, function(conversationId) {\n show(namespace, root);\n Router.go(namespace, Routes.VIEW_CONVERSATION, conversationId);\n });\n\n PubSub.subscribe(Events.CREATE_CONVERSATION_WITH_USER, function(userId) {\n show(namespace, root);\n Router.go(namespace, Routes.VIEW_CONVERSATION, null, 'create', userId);\n });\n\n PubSub.subscribe(Events.SHOW_SETTINGS, function() {\n show(namespace, root);\n Router.go(namespace, Routes.VIEW_SETTINGS);\n });\n\n PubSub.subscribe(Events.PREFERENCES_UPDATED, function(preferences) {\n var filteredPreferences = preferences.filter(function(preference) {\n return preference.type == 'message_entertosend';\n });\n var enterToSendPreference = filteredPreferences.length ? filteredPreferences[0] : null;\n\n if (enterToSendPreference) {\n var viewConversationFooter = root.find(SELECTORS.FOOTER_CONTAINER).find(SELECTORS.VIEW_CONVERSATION);\n viewConversationFooter.attr('data-enter-to-send', enterToSendPreference.value);\n }\n });\n };\n\n /**\n * Initialise the message drawer.\n *\n * @param {Object} root The message drawer container.\n * @param {String} uniqueId Unique identifier for the Routes\n * @param {bool} alwaysVisible Should we show the app now, or wait for the user?\n * @param {Object} route\n */\n var init = function(root, uniqueId, alwaysVisible, route) {\n root = $(root);\n createRoutes(uniqueId, root);\n registerEventListeners(uniqueId, root, alwaysVisible);\n\n if (alwaysVisible) {\n show(uniqueId, root);\n\n if (route) {\n var routeParams = route.params || [];\n routeParams = [uniqueId, route.path].concat(routeParams);\n Router.go.apply(null, routeParams);\n }\n }\n };\n\n return {\n init: init,\n };\n});\n"],"file":"message_drawer.min.js"} \ No newline at end of file diff --git a/message/amd/src/message_drawer.js b/message/amd/src/message_drawer.js index 4ae6d0e832e..67bfe820234 100644 --- a/message/amd/src/message_drawer.js +++ b/message/amd/src/message_drawer.js @@ -137,7 +137,7 @@ function( } var drawerRoot = Drawer.getDrawerRoot(root); - if (drawerRoot) { + if (drawerRoot.length) { Drawer.show(drawerRoot); } }; @@ -149,7 +149,7 @@ function( */ var hide = function(root) { var drawerRoot = Drawer.getDrawerRoot(root); - if (drawerRoot) { + if (drawerRoot.length) { Drawer.hide(drawerRoot); } }; @@ -162,7 +162,7 @@ function( */ var isVisible = function(root) { var drawerRoot = Drawer.getDrawerRoot(root); - if (drawerRoot) { + if (drawerRoot.length) { return Drawer.isVisible(drawerRoot); } return true; diff --git a/message/templates/message_drawer.mustache b/message/templates/message_drawer.mustache index 71c18ec105d..5b8e46ac23b 100644 --- a/message/templates/message_drawer.mustache +++ b/message/templates/message_drawer.mustache @@ -34,8 +34,7 @@ }} {{< core/drawer}} - {{$rootId}}message-drawer-{{uniqid}}{{/rootId}} - {{$drawerContent}} + {{$drawercontent}}
{{> core_message/message_drawer_view_contacts_header }} @@ -58,7 +57,7 @@ {{> core_message/message_drawer_view_overview_footer }}
- {{/drawerContent}} + {{/drawercontent}} {{/core/drawer}} {{#js}} diff --git a/mod/forum/templates/discussion_settings_drawer.mustache b/mod/forum/templates/discussion_settings_drawer.mustache index 65635c9837e..7f8ee3ca78d 100644 --- a/mod/forum/templates/discussion_settings_drawer.mustache +++ b/mod/forum/templates/discussion_settings_drawer.mustache @@ -34,8 +34,7 @@ }} {{
{{> mod_forum/settings_header}} @@ -44,7 +43,7 @@ {{> mod_forum/discussion_settings_body_content}}
- {{/drawerContent}} + {{/drawercontent}} {{/core/drawer}} {{#js}}