diff --git a/lib/editor/tiny/plugins/link/amd/build/ui.min.js b/lib/editor/tiny/plugins/link/amd/build/ui.min.js index 7ba19ad9799..ecb8d8f69e6 100644 --- a/lib/editor/tiny/plugins/link/amd/build/ui.min.js +++ b/lib/editor/tiny/plugins/link/amd/build/ui.min.js @@ -1,10 +1,10 @@ -define("tiny_link/ui",["exports","core/modal_factory","core/modal_events","editor_tiny/utils","tiny_link/modal","tiny_link/options","tiny_link/link","tiny_link/selectors"],(function(_exports,_modal_factory,_modal_events,_utils,_modal,_options,_link,_selectors){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} +define("tiny_link/ui",["exports","editor_tiny/options","core/modal_factory","core/modal_events","editor_tiny/utils","tiny_link/modal","tiny_link/options","tiny_link/link","tiny_link/selectors"],(function(_exports,_options,_modal_factory,_modal_events,_utils,_modal,_options2,_link,_selectors){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Tiny Link UI. * * @module tiny_link/ui * @copyright 2023 Huong Nguyen * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.handleAction=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_modal=_interopRequireDefault(_modal),_selectors=_interopRequireDefault(_selectors);_exports.handleAction=function(editor){let unlink=arguments.length>1&&void 0!==arguments[1]&&arguments[1];unlink?(0,_link.unSetLink)(editor):displayDialogue(editor)};const displayDialogue=async editor=>{const modalPromises=await _modal_factory.default.create({type:_modal.default.TYPE,templateContext:getTemplateContext(editor),large:!1});modalPromises.show();const $root=await modalPromises.getRoot(),root=$root[0],currentForm=root.querySelector("form");$root.on(_modal_events.default.hidden,(()=>{modalPromises.destroy()})),root.addEventListener("click",(e=>{const submitAction=e.target.closest(_selectors.default.actions.submit),linkBrowserAction=e.target.closest(_selectors.default.actions.linkBrowser);submitAction&&(e.preventDefault(),(0,_link.setLink)(currentForm,editor),modalPromises.destroy()),linkBrowserAction&&(e.preventDefault(),(0,_utils.displayFilepicker)(editor,"link").then((params=>(filePickerCallback(params,currentForm,editor),modalPromises.destroy()))).catch())}));const linkTitle=root.querySelector(_selectors.default.elements.urlText),linkUrl=root.querySelector(_selectors.default.elements.urlEntry);linkTitle.addEventListener("change",(()=>{linkTitle.value.length>0?linkTitle.dataset.useLinkAsText="false":(linkTitle.dataset.useLinkAsText="true",linkTitle.value=linkUrl.value)})),linkUrl.addEventListener("keyup",(()=>{updateTextToDisplay(currentForm)}))},getTemplateContext=editor=>{const data=(0,_link.getCurrentLinkData)(editor);return Object.assign({},{elementid:editor.id,showfilepicker:(0,_options.getPermissions)(editor).filepicker,isupdating:Object.keys(data).length>0},data)},filePickerCallback=(params,currentForm,editor)=>{if(params.url){currentForm.querySelector(_selectors.default.elements.urlEntry).value=params.url,(0,_link.setLink)(currentForm,editor)}},updateTextToDisplay=currentForm=>{const urlEntry=currentForm.querySelector(_selectors.default.elements.urlEntry),urlText=currentForm.querySelector(_selectors.default.elements.urlText);"true"===urlText.dataset.useLinkAsText&&(urlText.value=urlEntry.value)}})); + */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.handleAction=void 0,_modal_factory=_interopRequireDefault(_modal_factory),_modal_events=_interopRequireDefault(_modal_events),_modal=_interopRequireDefault(_modal),_selectors=_interopRequireDefault(_selectors);_exports.handleAction=function(editor){let unlink=arguments.length>1&&void 0!==arguments[1]&&arguments[1];unlink?(0,_link.unSetLink)(editor):displayDialogue(editor)};const displayDialogue=async editor=>{const modalPromises=await _modal_factory.default.create({type:_modal.default.TYPE,templateContext:getTemplateContext(editor),large:!1});modalPromises.show();const $root=await modalPromises.getRoot(),root=$root[0],currentForm=root.querySelector("form");$root.on(_modal_events.default.hidden,(()=>{modalPromises.destroy()})),root.addEventListener("click",(e=>{const submitAction=e.target.closest(_selectors.default.actions.submit),linkBrowserAction=e.target.closest(_selectors.default.actions.linkBrowser);submitAction&&(e.preventDefault(),(0,_link.setLink)(currentForm,editor),modalPromises.destroy()),linkBrowserAction&&(e.preventDefault(),(0,_utils.displayFilepicker)(editor,"link").then((params=>(filePickerCallback(params,currentForm,editor),modalPromises.destroy()))).catch())}));const linkTitle=root.querySelector(_selectors.default.elements.urlText),linkUrl=root.querySelector(_selectors.default.elements.urlEntry);linkTitle.addEventListener("change",(()=>{linkTitle.value.length>0?linkTitle.dataset.useLinkAsText="false":(linkTitle.dataset.useLinkAsText="true",linkTitle.value=linkUrl.value)})),linkUrl.addEventListener("keyup",(()=>{updateTextToDisplay(currentForm)}))},getTemplateContext=editor=>{const data=(0,_link.getCurrentLinkData)(editor);return Object.assign({},{elementid:editor.id,showfilepicker:(0,_options2.getPermissions)(editor).filepicker&&void 0!==(0,_options.getFilePicker)(editor,"link"),isupdating:Object.keys(data).length>0},data)},filePickerCallback=(params,currentForm,editor)=>{if(params.url){currentForm.querySelector(_selectors.default.elements.urlEntry).value=params.url,(0,_link.setLink)(currentForm,editor)}},updateTextToDisplay=currentForm=>{const urlEntry=currentForm.querySelector(_selectors.default.elements.urlEntry),urlText=currentForm.querySelector(_selectors.default.elements.urlText);"true"===urlText.dataset.useLinkAsText&&(urlText.value=urlEntry.value)}})); //# sourceMappingURL=ui.min.js.map \ No newline at end of file diff --git a/lib/editor/tiny/plugins/link/amd/build/ui.min.js.map b/lib/editor/tiny/plugins/link/amd/build/ui.min.js.map index 2bcf2018505..13507f2e9ba 100644 --- a/lib/editor/tiny/plugins/link/amd/build/ui.min.js.map +++ b/lib/editor/tiny/plugins/link/amd/build/ui.min.js.map @@ -1 +1 @@ -{"version":3,"file":"ui.min.js","sources":["../src/ui.js"],"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 * Tiny Link UI.\n *\n * @module tiny_link/ui\n * @copyright 2023 Huong Nguyen \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\nimport {displayFilepicker} from 'editor_tiny/utils';\nimport LinkModal from 'tiny_link/modal';\nimport {getPermissions} from \"tiny_link/options\";\nimport {setLink, getCurrentLinkData, unSetLink} from \"tiny_link/link\";\nimport Selectors from 'tiny_link/selectors';\n\n/**\n * Handle action.\n *\n * @param {TinyMCE} editor\n * @param {boolean} unlink\n */\nexport const handleAction = (editor, unlink = false) => {\n if (!unlink) {\n displayDialogue(editor);\n } else {\n unSetLink(editor);\n }\n};\n\n/**\n * Display the link dialogue.\n *\n * @param {TinyMCE} editor\n * @returns {Promise}\n */\nconst displayDialogue = async(editor) => {\n const modalPromises = await ModalFactory.create({\n type: LinkModal.TYPE,\n templateContext: getTemplateContext(editor),\n large: false,\n });\n\n modalPromises.show();\n const $root = await modalPromises.getRoot();\n const root = $root[0];\n const currentForm = root.querySelector('form');\n\n $root.on(ModalEvents.hidden, () => {\n modalPromises.destroy();\n });\n\n root.addEventListener('click', (e) => {\n const submitAction = e.target.closest(Selectors.actions.submit);\n const linkBrowserAction = e.target.closest(Selectors.actions.linkBrowser);\n if (submitAction) {\n e.preventDefault();\n setLink(currentForm, editor);\n modalPromises.destroy();\n }\n if (linkBrowserAction) {\n e.preventDefault();\n displayFilepicker(editor, 'link').then((params) => {\n filePickerCallback(params, currentForm, editor);\n return modalPromises.destroy();\n }).catch();\n }\n });\n\n const linkTitle = root.querySelector(Selectors.elements.urlText);\n const linkUrl = root.querySelector(Selectors.elements.urlEntry);\n linkTitle.addEventListener('change', () => {\n if (linkTitle.value.length > 0) {\n linkTitle.dataset.useLinkAsText = 'false';\n } else {\n linkTitle.dataset.useLinkAsText = 'true';\n linkTitle.value = linkUrl.value;\n }\n });\n\n linkUrl.addEventListener('keyup', () => {\n updateTextToDisplay(currentForm);\n });\n};\n\n/**\n * Get template context.\n *\n * @param {TinyMCE} editor\n * @returns {Object}\n */\nconst getTemplateContext = (editor) => {\n const data = getCurrentLinkData(editor);\n\n return Object.assign({}, {\n elementid: editor.id,\n showfilepicker: getPermissions(editor).filepicker,\n isupdating: Object.keys(data).length > 0,\n }, data);\n};\n\n/**\n * Update the dialogue after a link was selected in the File Picker.\n *\n * @param {Object} params\n * @param {Element} currentForm\n * @param {TinyMCE} editor\n */\nconst filePickerCallback = (params, currentForm, editor) => {\n if (params.url) {\n const inputUrl = currentForm.querySelector(Selectors.elements.urlEntry);\n inputUrl.value = params.url;\n setLink(currentForm, editor);\n }\n};\n\n/**\n * Update the text to display if the user does not provide the custom text.\n *\n * @param {Element} currentForm\n */\nconst updateTextToDisplay = (currentForm) => {\n const urlEntry = currentForm.querySelector(Selectors.elements.urlEntry);\n const urlText = currentForm.querySelector(Selectors.elements.urlText);\n if (urlText.dataset.useLinkAsText === 'true') {\n urlText.value = urlEntry.value;\n }\n};\n"],"names":["editor","unlink","displayDialogue","async","modalPromises","ModalFactory","create","type","LinkModal","TYPE","templateContext","getTemplateContext","large","show","$root","getRoot","root","currentForm","querySelector","on","ModalEvents","hidden","destroy","addEventListener","e","submitAction","target","closest","Selectors","actions","submit","linkBrowserAction","linkBrowser","preventDefault","then","params","filePickerCallback","catch","linkTitle","elements","urlText","linkUrl","urlEntry","value","length","dataset","useLinkAsText","updateTextToDisplay","data","Object","assign","elementid","id","showfilepicker","filepicker","isupdating","keys","url"],"mappings":";;;;;;;8SAqC4B,SAACA,YAAQC,+DAC5BA,2BAGSD,QAFVE,gBAAgBF,eAYlBE,gBAAkBC,MAAAA,eACdC,oBAAsBC,uBAAaC,OAAO,CAC5CC,KAAMC,eAAUC,KAChBC,gBAAiBC,mBAAmBX,QACpCY,OAAO,IAGXR,cAAcS,aACRC,YAAcV,cAAcW,UAC5BC,KAAOF,MAAM,GACbG,YAAcD,KAAKE,cAAc,QAEvCJ,MAAMK,GAAGC,sBAAYC,QAAQ,KACzBjB,cAAckB,aAGlBN,KAAKO,iBAAiB,SAAUC,UACtBC,aAAeD,EAAEE,OAAOC,QAAQC,mBAAUC,QAAQC,QAClDC,kBAAoBP,EAAEE,OAAOC,QAAQC,mBAAUC,QAAQG,aACzDP,eACAD,EAAES,mCACMhB,YAAajB,QACrBI,cAAckB,WAEdS,oBACAP,EAAES,8CACgBjC,OAAQ,QAAQkC,MAAMC,SACpCC,mBAAmBD,OAAQlB,YAAajB,QACjCI,cAAckB,aACtBe,kBAILC,UAAYtB,KAAKE,cAAcU,mBAAUW,SAASC,SAClDC,QAAUzB,KAAKE,cAAcU,mBAAUW,SAASG,UACtDJ,UAAUf,iBAAiB,UAAU,KAC7Be,UAAUK,MAAMC,OAAS,EACzBN,UAAUO,QAAQC,cAAgB,SAElCR,UAAUO,QAAQC,cAAgB,OAClCR,UAAUK,MAAQF,QAAQE,UAIlCF,QAAQlB,iBAAiB,SAAS,KAC9BwB,oBAAoB9B,iBAUtBN,mBAAsBX,eAClBgD,MAAO,4BAAmBhD,eAEzBiD,OAAOC,OAAO,GAAI,CACrBC,UAAWnD,OAAOoD,GAClBC,gBAAgB,2BAAerD,QAAQsD,WACvCC,WAAYN,OAAOO,KAAKR,MAAMJ,OAAS,GACxCI,OAUDZ,mBAAqB,CAACD,OAAQlB,YAAajB,aACzCmC,OAAOsB,IAAK,CACKxC,YAAYC,cAAcU,mBAAUW,SAASG,UACrDC,MAAQR,OAAOsB,sBAChBxC,YAAajB,UASvB+C,oBAAuB9B,oBACnByB,SAAWzB,YAAYC,cAAcU,mBAAUW,SAASG,UACxDF,QAAUvB,YAAYC,cAAcU,mBAAUW,SAASC,SACvB,SAAlCA,QAAQK,QAAQC,gBAChBN,QAAQG,MAAQD,SAASC"} \ No newline at end of file +{"version":3,"file":"ui.min.js","sources":["../src/ui.js"],"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 * Tiny Link UI.\n *\n * @module tiny_link/ui\n * @copyright 2023 Huong Nguyen \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getFilePicker} from 'editor_tiny/options';\nimport ModalFactory from 'core/modal_factory';\nimport ModalEvents from 'core/modal_events';\nimport {displayFilepicker} from 'editor_tiny/utils';\nimport LinkModal from 'tiny_link/modal';\nimport {getPermissions} from \"tiny_link/options\";\nimport {setLink, getCurrentLinkData, unSetLink} from \"tiny_link/link\";\nimport Selectors from 'tiny_link/selectors';\n\n/**\n * Handle action.\n *\n * @param {TinyMCE} editor\n * @param {boolean} unlink\n */\nexport const handleAction = (editor, unlink = false) => {\n if (!unlink) {\n displayDialogue(editor);\n } else {\n unSetLink(editor);\n }\n};\n\n/**\n * Display the link dialogue.\n *\n * @param {TinyMCE} editor\n * @returns {Promise}\n */\nconst displayDialogue = async(editor) => {\n const modalPromises = await ModalFactory.create({\n type: LinkModal.TYPE,\n templateContext: getTemplateContext(editor),\n large: false,\n });\n\n modalPromises.show();\n const $root = await modalPromises.getRoot();\n const root = $root[0];\n const currentForm = root.querySelector('form');\n\n $root.on(ModalEvents.hidden, () => {\n modalPromises.destroy();\n });\n\n root.addEventListener('click', (e) => {\n const submitAction = e.target.closest(Selectors.actions.submit);\n const linkBrowserAction = e.target.closest(Selectors.actions.linkBrowser);\n if (submitAction) {\n e.preventDefault();\n setLink(currentForm, editor);\n modalPromises.destroy();\n }\n if (linkBrowserAction) {\n e.preventDefault();\n displayFilepicker(editor, 'link').then((params) => {\n filePickerCallback(params, currentForm, editor);\n return modalPromises.destroy();\n }).catch();\n }\n });\n\n const linkTitle = root.querySelector(Selectors.elements.urlText);\n const linkUrl = root.querySelector(Selectors.elements.urlEntry);\n linkTitle.addEventListener('change', () => {\n if (linkTitle.value.length > 0) {\n linkTitle.dataset.useLinkAsText = 'false';\n } else {\n linkTitle.dataset.useLinkAsText = 'true';\n linkTitle.value = linkUrl.value;\n }\n });\n\n linkUrl.addEventListener('keyup', () => {\n updateTextToDisplay(currentForm);\n });\n};\n\n/**\n * Get template context.\n *\n * @param {TinyMCE} editor\n * @returns {Object}\n */\nconst getTemplateContext = (editor) => {\n const data = getCurrentLinkData(editor);\n\n return Object.assign({}, {\n elementid: editor.id,\n showfilepicker: getPermissions(editor).filepicker &&\n (typeof getFilePicker(editor, 'link') !== 'undefined'),\n isupdating: Object.keys(data).length > 0,\n }, data);\n};\n\n/**\n * Update the dialogue after a link was selected in the File Picker.\n *\n * @param {Object} params\n * @param {Element} currentForm\n * @param {TinyMCE} editor\n */\nconst filePickerCallback = (params, currentForm, editor) => {\n if (params.url) {\n const inputUrl = currentForm.querySelector(Selectors.elements.urlEntry);\n inputUrl.value = params.url;\n setLink(currentForm, editor);\n }\n};\n\n/**\n * Update the text to display if the user does not provide the custom text.\n *\n * @param {Element} currentForm\n */\nconst updateTextToDisplay = (currentForm) => {\n const urlEntry = currentForm.querySelector(Selectors.elements.urlEntry);\n const urlText = currentForm.querySelector(Selectors.elements.urlText);\n if (urlText.dataset.useLinkAsText === 'true') {\n urlText.value = urlEntry.value;\n }\n};\n"],"names":["editor","unlink","displayDialogue","async","modalPromises","ModalFactory","create","type","LinkModal","TYPE","templateContext","getTemplateContext","large","show","$root","getRoot","root","currentForm","querySelector","on","ModalEvents","hidden","destroy","addEventListener","e","submitAction","target","closest","Selectors","actions","submit","linkBrowserAction","linkBrowser","preventDefault","then","params","filePickerCallback","catch","linkTitle","elements","urlText","linkUrl","urlEntry","value","length","dataset","useLinkAsText","updateTextToDisplay","data","Object","assign","elementid","id","showfilepicker","filepicker","isupdating","keys","url"],"mappings":";;;;;;;8SAsC4B,SAACA,YAAQC,+DAC5BA,2BAGSD,QAFVE,gBAAgBF,eAYlBE,gBAAkBC,MAAAA,eACdC,oBAAsBC,uBAAaC,OAAO,CAC5CC,KAAMC,eAAUC,KAChBC,gBAAiBC,mBAAmBX,QACpCY,OAAO,IAGXR,cAAcS,aACRC,YAAcV,cAAcW,UAC5BC,KAAOF,MAAM,GACbG,YAAcD,KAAKE,cAAc,QAEvCJ,MAAMK,GAAGC,sBAAYC,QAAQ,KACzBjB,cAAckB,aAGlBN,KAAKO,iBAAiB,SAAUC,UACtBC,aAAeD,EAAEE,OAAOC,QAAQC,mBAAUC,QAAQC,QAClDC,kBAAoBP,EAAEE,OAAOC,QAAQC,mBAAUC,QAAQG,aACzDP,eACAD,EAAES,mCACMhB,YAAajB,QACrBI,cAAckB,WAEdS,oBACAP,EAAES,8CACgBjC,OAAQ,QAAQkC,MAAMC,SACpCC,mBAAmBD,OAAQlB,YAAajB,QACjCI,cAAckB,aACtBe,kBAILC,UAAYtB,KAAKE,cAAcU,mBAAUW,SAASC,SAClDC,QAAUzB,KAAKE,cAAcU,mBAAUW,SAASG,UACtDJ,UAAUf,iBAAiB,UAAU,KAC7Be,UAAUK,MAAMC,OAAS,EACzBN,UAAUO,QAAQC,cAAgB,SAElCR,UAAUO,QAAQC,cAAgB,OAClCR,UAAUK,MAAQF,QAAQE,UAIlCF,QAAQlB,iBAAiB,SAAS,KAC9BwB,oBAAoB9B,iBAUtBN,mBAAsBX,eAClBgD,MAAO,4BAAmBhD,eAEzBiD,OAAOC,OAAO,GAAI,CACrBC,UAAWnD,OAAOoD,GAClBC,gBAAgB,4BAAerD,QAAQsD,iBACO,KAAlC,0BAActD,OAAQ,QAClCuD,WAAYN,OAAOO,KAAKR,MAAMJ,OAAS,GACxCI,OAUDZ,mBAAqB,CAACD,OAAQlB,YAAajB,aACzCmC,OAAOsB,IAAK,CACKxC,YAAYC,cAAcU,mBAAUW,SAASG,UACrDC,MAAQR,OAAOsB,sBAChBxC,YAAajB,UASvB+C,oBAAuB9B,oBACnByB,SAAWzB,YAAYC,cAAcU,mBAAUW,SAASG,UACxDF,QAAUvB,YAAYC,cAAcU,mBAAUW,SAASC,SACvB,SAAlCA,QAAQK,QAAQC,gBAChBN,QAAQG,MAAQD,SAASC"} \ No newline at end of file diff --git a/lib/editor/tiny/plugins/link/amd/src/ui.js b/lib/editor/tiny/plugins/link/amd/src/ui.js index b7db7c40df0..a5bc43d0c12 100644 --- a/lib/editor/tiny/plugins/link/amd/src/ui.js +++ b/lib/editor/tiny/plugins/link/amd/src/ui.js @@ -21,6 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +import {getFilePicker} from 'editor_tiny/options'; import ModalFactory from 'core/modal_factory'; import ModalEvents from 'core/modal_events'; import {displayFilepicker} from 'editor_tiny/utils'; @@ -109,7 +110,8 @@ const getTemplateContext = (editor) => { return Object.assign({}, { elementid: editor.id, - showfilepicker: getPermissions(editor).filepicker, + showfilepicker: getPermissions(editor).filepicker && + (typeof getFilePicker(editor, 'link') !== 'undefined'), isupdating: Object.keys(data).length > 0, }, data); };