Proyectos de Subversion Moodle

Rev

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.submit);\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        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","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,gBAAiBC,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"}