AutorÃa | Ultima modificación | Ver Log |
{"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 <http://www.gnu.org/licenses/>.\n\n/**\n * Tiny Link UI.\n *\n * @module tiny_link/ui\n * @copyright 2023 Huong Nguyen <huongnv13@gmail.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport {getFilePicker} from 'editor_tiny/options';\
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<void>}\n */\nconst displayDialogue = async(editor) => {\n const modal = await LinkModal.create({\n templateContext: getTemplateContext(editor),\n });\n\n const $root = await modal.getRoot();\n const root = $root[0];\n const currentForm = root.querySelector('form');\n\n root.addEventListener('click', (e) => {\n const submitAction = e.target.closest(Selectors.actions.submi
t);\n const linkBrowserAction = e.target.closest(Selectors.actions.linkBrowser);\n if (submitAction) {\n e.preventDefault();\n setLink(currentForm, editor);\n modal.destroy();\n }\n if (linkBrowserAction) {\n e.preventDefault();\n displayFilepicker(editor, 'link').then((params) => {\n filePickerCallback(params, currentForm, editor);\n return modal.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 updateTextToDis
play(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} curren
tForm\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","modal","LinkModal","create","templateContext","getTemplateContext","root","getRoot","currentForm","querySelector","addEventListener","e","submitAction","target","closest","Selectors","actions","submit","linkBrowserAction","linkBrowser","preventDefault","destroy","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":";;;;;;;oMAoC4B,SAACA,YAAQC,+DAC5BA,2BAGSD,QAFVE,gBAAgBF,eAYlBE,gBAAkBC,MAAAA,eACdC,YAAcC,eAAUC,OAAO,CACjCC,gB
AAiBC,mBAAmBR,UAIlCS,YADcL,MAAMM,WACP,GACbC,YAAcF,KAAKG,cAAc,QAEvCH,KAAKI,iBAAiB,SAAUC,UACtBC,aAAeD,EAAEE,OAAOC,QAAQC,mBAAUC,QAAQC,QAClDC,kBAAoBP,EAAEE,OAAOC,QAAQC,mBAAUC,QAAQG,aACzDP,eACAD,EAAES,mCACMZ,YAAaX,QACrBI,MAAMoB,WAENH,oBACAP,EAAES,8CACgBvB,OAAQ,QAAQyB,MAAMC,SACpCC,mBAAmBD,OAAQf,YAAaX,QACjCI,MAAMoB,aACdI,kBAILC,UAAYpB,KAAKG,cAAcM,mBAAUY,SAASC,SAClDC,QAAUvB,KAAKG,cAAcM,mBAAUY,SAASG,UACtDJ,UAAUhB,iBAAiB,UAAU,KAC7BgB,UAAUK,MAAMC,OAAS,EACzBN,UAAUO,QAAQC,cAAgB,SAElCR,UAAUO,QAAQC,cAAgB,OAClCR,UAAUK,MAAQF,QAAQE,UAIlCF,QAAQnB,iBAAiB,SAAS,KAC9ByB,oBAAoB3B,iBAUtBH,mBAAsBR,eAClBuC,MAAO,4BAAmBvC,eAEzBwC,OAAOC,OAAO,GAAI,CACrBC,UAAW1C,OAAO2C,GAClBC,gBAAgB,4BAAe5C,QAAQ6C,iBACO,KAAlC,0BAAc7C,OAAQ,QAClC8C,WAAYN,OAAOO,KAAKR,MAAMJ,OAAS,GACxCI,OAUDZ,mBAAqB,CAACD,OAAQf,YAAaX,aACzC0B,OAAOsB,IAAK,CACKrC,YAAYC,cAAcM,mBAAUY,SAASG,UACrDC,MAAQR,OAAOsB,sBAChBrC,YAAaX,UASvBsC,oBAAuB3B,oBACnBsB,SAAWtB,YAAYC,cAAcM,mBAAUY,SAASG,UACxDF,QAAUpB,YAAYC,cAAcM,mBAAUY,SAASC,SACvB,SAAlCA,QAAQK,QAAQC,gBAChBN,QAAQG,MAAQD,SAASC"}