From 000ab68327d6aba13590c4411c85cd9d15eaa95b Mon Sep 17 00:00:00 2001 From: Jonathan Date: Tue, 4 Apr 2023 11:24:49 +0200 Subject: [PATCH 1/7] #10490 TinyMCE Upgrade V6 --- pandora_console/composer.json | 3 +- pandora_console/composer.lock | 61 +- .../godmode/alerts/alert_commands.php | 22 +- .../godmode/alerts/configure_alert_action.php | 14 +- .../alerts/configure_alert_template.php | 23 +- .../reporting_builder.item_editor.php | 10 +- .../visual_console_builder.editor.php | 19 +- .../visual_console_builder.elements.php | 19 +- pandora_console/godmode/setup/news.php | 23 +- .../godmode/setup/setup_visuals.php | 18 +- .../godmode/snmpconsole/snmp_alert.php | 16 +- pandora_console/include/javascript/pandora.js | 80 +- .../include/javascript/pandora_dashboards.js | 55 +- .../javascript/pandora_visual_console.js | 20 +- .../rest-api/models/VisualConsole/Item.php | 10 +- .../rest-api/models/VisualConsole/View.php | 48 +- pandora_console/include/styles/form.css | 2 +- .../operation/visual_console/view.php | 2 +- .../vendor/composer/InstalledVersions.php | 4 +- pandora_console/vendor/composer/LICENSE | 2 + .../vendor/composer/autoload_psr4.php | 2 +- .../vendor/composer/autoload_static.php | 4 +- .../vendor/composer/installed.json | 62 + pandora_console/vendor/composer/installed.php | 13 +- .../vendor/composer/platform_check.php | 28 +- .../vendor/tinymce/tinymce/.npmignore | 2 + .../vendor/tinymce/tinymce/CHANGELOG.md | 3149 ++ .../vendor/tinymce/tinymce/README.md | 71 + .../vendor/tinymce/tinymce/bower.json | 27 + .../vendor/tinymce/tinymce/composer.json | 52 + .../tinymce/tinymce/icons/default/icons.js | 189 + .../tinymce/icons/default/icons.min.js | 1 + .../tinymce/tinymce/icons/default/index.js | 7 + .../vendor/tinymce/tinymce/license.txt | 21 + .../tinymce/tinymce/models/dom/index.js | 7 + .../tinymce/tinymce/models/dom/model.js | 8035 ++++ .../tinymce/tinymce/models/dom/model.min.js | 4 + .../vendor/tinymce/tinymce/package.json | 32 + .../tinymce/tinymce/plugins/advlist/index.js | 7 + .../tinymce/tinymce/plugins/advlist/plugin.js | 249 + .../tinymce/plugins/advlist/plugin.min.js | 4 + .../tinymce/tinymce/plugins/anchor/index.js | 7 + .../tinymce/tinymce/plugins/anchor/plugin.js | 196 + .../tinymce/plugins/anchor/plugin.min.js | 4 + .../tinymce/tinymce/plugins/autolink/index.js | 7 + .../tinymce/plugins/autolink/plugin.js | 228 + .../tinymce/plugins/autolink/plugin.min.js | 4 + .../tinymce/plugins/autoresize/index.js | 7 + .../tinymce/plugins/autoresize/plugin.js | 192 + .../tinymce/plugins/autoresize/plugin.min.js | 4 + .../tinymce/tinymce/plugins/autosave/index.js | 7 + .../tinymce/plugins/autosave/plugin.js | 233 + .../tinymce/plugins/autosave/plugin.min.js | 4 + .../tinymce/tinymce/plugins/charmap/index.js | 7 + .../tinymce/tinymce/plugins/charmap/plugin.js | 1646 + .../tinymce/plugins/charmap/plugin.min.js | 4 + .../tinymce/tinymce/plugins/code/index.js | 7 + .../tinymce/tinymce/plugins/code/plugin.js | 85 + .../tinymce/plugins/code/plugin.min.js | 4 + .../tinymce/plugins/codesample/index.js | 7 + .../tinymce/plugins/codesample/plugin.js | 2449 ++ .../tinymce/plugins/codesample/plugin.min.js | 4 + .../tinymce/plugins/directionality/index.js | 7 + .../tinymce/plugins/directionality/plugin.js | 384 + .../plugins/directionality/plugin.min.js | 4 + .../tinymce/plugins/emoticons/index.js | 7 + .../plugins/emoticons/js/emojiimages.js | 1 + .../plugins/emoticons/js/emojiimages.min.js | 3 + .../tinymce/plugins/emoticons/js/emojis.js | 1 + .../plugins/emoticons/js/emojis.min.js | 2 + .../tinymce/plugins/emoticons/plugin.js | 583 + .../tinymce/plugins/emoticons/plugin.min.js | 4 + .../tinymce/plugins/fullscreen/index.js | 7 + .../tinymce/plugins/fullscreen/plugin.js | 1196 + .../tinymce/plugins/fullscreen/plugin.min.js | 4 + .../tinymce/tinymce/plugins/help/index.js | 7 + .../tinymce/tinymce/plugins/help/plugin.js | 939 + .../tinymce/plugins/help/plugin.min.js | 4 + .../tinymce/tinymce/plugins/image/index.js | 7 + .../tinymce/tinymce/plugins/image/plugin.js | 1488 + .../tinymce/plugins/image/plugin.min.js | 4 + .../tinymce/plugins/importcss/index.js | 7 + .../tinymce/plugins/importcss/plugin.js | 344 + .../tinymce/plugins/importcss/plugin.min.js | 4 + .../tinymce/plugins/insertdatetime/index.js | 7 + .../tinymce/plugins/insertdatetime/plugin.js | 175 + .../plugins/insertdatetime/plugin.min.js | 4 + .../tinymce/tinymce/plugins/link/index.js | 7 + .../tinymce/tinymce/plugins/link/plugin.js | 1227 + .../tinymce/plugins/link/plugin.min.js | 4 + .../tinymce/tinymce/plugins/lists/index.js | 7 + .../tinymce/tinymce/plugins/lists/plugin.js | 1948 + .../tinymce/plugins/lists/plugin.min.js | 4 + .../tinymce/tinymce/plugins/media/index.js | 7 + .../tinymce/tinymce/plugins/media/plugin.js | 1177 + .../tinymce/plugins/media/plugin.min.js | 4 + .../tinymce/plugins/nonbreaking/index.js | 7 + .../tinymce/plugins/nonbreaking/plugin.js | 111 + .../tinymce/plugins/nonbreaking/plugin.min.js | 4 + .../tinymce/plugins/pagebreak/index.js | 7 + .../tinymce/plugins/pagebreak/plugin.js | 105 + .../tinymce/plugins/pagebreak/plugin.min.js | 4 + .../tinymce/tinymce/plugins/preview/index.js | 7 + .../tinymce/tinymce/plugins/preview/plugin.js | 97 + .../tinymce/plugins/preview/plugin.min.js | 4 + .../tinymce/plugins/quickbars/index.js | 7 + .../tinymce/plugins/quickbars/plugin.js | 429 + .../tinymce/plugins/quickbars/plugin.min.js | 4 + .../tinymce/tinymce/plugins/save/index.js | 7 + .../tinymce/tinymce/plugins/save/plugin.js | 118 + .../tinymce/plugins/save/plugin.min.js | 4 + .../tinymce/plugins/searchreplace/index.js | 7 + .../tinymce/plugins/searchreplace/plugin.js | 1092 + .../plugins/searchreplace/plugin.min.js | 4 + .../tinymce/tinymce/plugins/table/index.js | 7 + .../tinymce/tinymce/plugins/table/plugin.js | 3416 ++ .../tinymce/plugins/table/plugin.min.js | 4 + .../tinymce/tinymce/plugins/template/index.js | 7 + .../tinymce/plugins/template/plugin.js | 554 + .../tinymce/plugins/template/plugin.min.js | 4 + .../tinymce/plugins/visualblocks/index.js | 7 + .../tinymce/plugins/visualblocks/plugin.js | 98 + .../plugins/visualblocks/plugin.min.js | 4 + .../tinymce/plugins/visualchars/index.js | 7 + .../tinymce/plugins/visualchars/plugin.js | 560 + .../tinymce/plugins/visualchars/plugin.min.js | 4 + .../tinymce/plugins/wordcount/index.js | 7 + .../tinymce/plugins/wordcount/plugin.js | 405 + .../tinymce/plugins/wordcount/plugin.min.js | 4 + .../tinymce/skins/content/dark/content.css | 66 + .../skins/content/dark/content.min.css | 1 + .../tinymce/skins/content/default/content.css | 61 + .../skins/content/default/content.min.css | 1 + .../skins/content/document/content.css | 66 + .../skins/content/document/content.min.css | 1 + .../skins/content/tinymce-5-dark/content.css | 66 + .../content/tinymce-5-dark/content.min.css | 1 + .../skins/content/tinymce-5/content.css | 61 + .../skins/content/tinymce-5/content.min.css | 1 + .../tinymce/skins/content/writer/content.css | 62 + .../skins/content/writer/content.min.css | 1 + .../tinymce/skins/ui/oxide-dark/content.css | 759 + .../skins/ui/oxide-dark/content.inline.css | 772 + .../ui/oxide-dark/content.inline.min.css | 1 + .../skins/ui/oxide-dark/content.min.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.css | 3578 ++ .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../skins/ui/oxide-dark/skin.shadowdom.css | 30 + .../ui/oxide-dark/skin.shadowdom.min.css | 1 + .../tinymce/skins/ui/oxide/content.css | 778 + .../tinymce/skins/ui/oxide/content.inline.css | 772 + .../skins/ui/oxide/content.inline.min.css | 1 + .../tinymce/skins/ui/oxide/content.min.css | 1 + .../tinymce/tinymce/skins/ui/oxide/skin.css | 3575 ++ .../tinymce/skins/ui/oxide/skin.min.css | 1 + .../tinymce/skins/ui/oxide/skin.shadowdom.css | 30 + .../skins/ui/oxide/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5-dark/content.css | 759 + .../ui/tinymce-5-dark/content.inline.css | 772 + .../ui/tinymce-5-dark/content.inline.min.css | 1 + .../skins/ui/tinymce-5-dark/content.min.css | 1 + .../tinymce/skins/ui/tinymce-5-dark/skin.css | 3669 ++ .../skins/ui/tinymce-5-dark/skin.min.css | 1 + .../ui/tinymce-5-dark/skin.shadowdom.css | 30 + .../ui/tinymce-5-dark/skin.shadowdom.min.css | 1 + .../tinymce/skins/ui/tinymce-5/content.css | 778 + .../skins/ui/tinymce-5/content.inline.css | 772 + .../skins/ui/tinymce-5/content.inline.min.css | 1 + .../skins/ui/tinymce-5/content.min.css | 1 + .../tinymce/skins/ui/tinymce-5/skin.css | 3669 ++ .../tinymce/skins/ui/tinymce-5/skin.min.css | 1 + .../skins/ui/tinymce-5/skin.shadowdom.css | 30 + .../skins/ui/tinymce-5/skin.shadowdom.min.css | 1 + .../tinymce/tinymce/themes/silver/index.js | 7 + .../tinymce/tinymce/themes/silver/theme.js | 29981 +++++++++++++++ .../tinymce/themes/silver/theme.min.js | 4 + .../vendor/tinymce/tinymce/tinymce.d.ts | 3185 ++ .../vendor/tinymce/tinymce/tinymce.js | 30608 ++++++++++++++++ .../vendor/tinymce/tinymce/tinymce.min.js | 4 + 179 files changed, 118822 insertions(+), 351 deletions(-) create mode 100644 pandora_console/vendor/tinymce/tinymce/.npmignore create mode 100644 pandora_console/vendor/tinymce/tinymce/CHANGELOG.md create mode 100644 pandora_console/vendor/tinymce/tinymce/README.md create mode 100644 pandora_console/vendor/tinymce/tinymce/bower.json create mode 100644 pandora_console/vendor/tinymce/tinymce/composer.json create mode 100644 pandora_console/vendor/tinymce/tinymce/icons/default/icons.js create mode 100644 pandora_console/vendor/tinymce/tinymce/icons/default/icons.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/icons/default/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/license.txt create mode 100644 pandora_console/vendor/tinymce/tinymce/models/dom/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/models/dom/model.js create mode 100644 pandora_console/vendor/tinymce/tinymce/models/dom/model.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/package.json create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/advlist/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/advlist/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/advlist/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/anchor/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/anchor/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/anchor/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autolink/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autolink/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autolink/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autoresize/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autoresize/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autoresize/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autosave/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autosave/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/autosave/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/charmap/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/charmap/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/charmap/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/code/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/code/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/code/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/codesample/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/codesample/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/codesample/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/directionality/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/directionality/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/directionality/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/js/emojiimages.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/js/emojiimages.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/js/emojis.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/js/emojis.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/emoticons/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/fullscreen/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/fullscreen/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/help/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/help/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/help/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/image/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/image/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/image/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/importcss/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/importcss/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/importcss/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/insertdatetime/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/insertdatetime/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/link/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/link/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/link/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/lists/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/lists/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/lists/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/media/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/media/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/media/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/nonbreaking/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/nonbreaking/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/pagebreak/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/pagebreak/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/preview/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/quickbars/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/quickbars/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/quickbars/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/save/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/save/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/save/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/searchreplace/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/searchreplace/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/table/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/table/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/table/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/template/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/visualblocks/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/visualblocks/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/visualchars/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/visualchars/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/visualchars/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/wordcount/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/wordcount/plugin.js create mode 100644 pandora_console/vendor/tinymce/tinymce/plugins/wordcount/plugin.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/dark/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/dark/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/default/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/default/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/document/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/document/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/tinymce-5-dark/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/tinymce-5-dark/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/tinymce-5/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/tinymce-5/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/writer/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/content/writer/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/content.inline.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/skin.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/content.inline.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/content.inline.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/skin.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/skin.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/oxide/skin.shadowdom.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/content.inline.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/skin.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/skin.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/content.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/content.inline.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/content.inline.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/content.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/skin.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/skin.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/skin.shadowdom.css create mode 100644 pandora_console/vendor/tinymce/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css create mode 100644 pandora_console/vendor/tinymce/tinymce/themes/silver/index.js create mode 100644 pandora_console/vendor/tinymce/tinymce/themes/silver/theme.js create mode 100644 pandora_console/vendor/tinymce/tinymce/themes/silver/theme.min.js create mode 100644 pandora_console/vendor/tinymce/tinymce/tinymce.d.ts create mode 100644 pandora_console/vendor/tinymce/tinymce/tinymce.js create mode 100644 pandora_console/vendor/tinymce/tinymce/tinymce.min.js diff --git a/pandora_console/composer.json b/pandora_console/composer.json index 0a9632d2dd..e8f14f7803 100644 --- a/pandora_console/composer.json +++ b/pandora_console/composer.json @@ -17,7 +17,8 @@ "swiftmailer/swiftmailer": "^6.0", "amphp/parallel-functions": "^1.0", "chrome-php/chrome": "^1.7.1", - "artica/phpchartjs": "^1.0" + "artica/phpchartjs": "^1.0", + "tinymce/tinymce": "^6.4" }, "repositories": { "phpchartjs": { diff --git a/pandora_console/composer.lock b/pandora_console/composer.lock index ec6825167c..aa4fcc04f4 100644 --- a/pandora_console/composer.lock +++ b/pandora_console/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "be2ad3d9d4df55d7ccb87981e82c4932", + "content-hash": "9e3b6f6e51c682b07fe1516c9300f4d7", "packages": [ { "name": "amphp/amp", @@ -2378,6 +2378,65 @@ } ], "time": "2020-10-24T10:57:07+00:00" + }, + { + "name": "tinymce/tinymce", + "version": "6.4.1", + "source": { + "type": "git", + "url": "https://github.com/tinymce/tinymce-dist.git", + "reference": "b2327c03fba64f8c47ec030c1f3bce98da8f7596" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/b2327c03fba64f8c47ec030c1f3bce98da8f7596", + "reference": "b2327c03fba64f8c47ec030c1f3bce98da8f7596", + "shasum": "" + }, + "type": "component", + "extra": { + "component": { + "scripts": [ + "tinymce.js", + "plugins/*/plugin.js", + "themes/*/theme.js", + "models/*/model.js", + "icons/*/icons.js" + ], + "files": [ + "tinymce.min.js", + "plugins/*/plugin.min.js", + "themes/*/theme.min.js", + "models/*/model.min.js", + "skins/**", + "icons/*/icons.min.js" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT-only" + ], + "description": "Web based JavaScript HTML WYSIWYG editor control.", + "homepage": "https://www.tiny.cloud/", + "keywords": [ + "contenteditable", + "editing", + "html", + "javascript", + "rich editor", + "rich text", + "rich text editor", + "richtext", + "rte", + "text", + "tinymce", + "wysiwyg" + ], + "support": { + "source": "https://github.com/tinymce/tinymce-dist/tree/6.4.1" + }, + "time": "2023-03-29T01:33:40+00:00" } ], "packages-dev": [], diff --git a/pandora_console/godmode/alerts/alert_commands.php b/pandora_console/godmode/alerts/alert_commands.php index 9b22483f5c..867afdf9e2 100644 --- a/pandora_console/godmode/alerts/alert_commands.php +++ b/pandora_console/godmode/alerts/alert_commands.php @@ -151,7 +151,7 @@ if (is_ajax()) { '', false, $is_management_allowed, - "removeTinyMCE('textarea_field".$i."_value')", + "UndefineTinyMCE('#textarea_field".$i."_value')", '', true ); @@ -163,7 +163,7 @@ if (is_ajax()) { '', true, $is_management_allowed, - "addTinyMCE('textarea_field".$i."_value')", + "defineTinyMCE('#textarea_field".$i."_value')", '', true ); @@ -188,7 +188,7 @@ if (is_ajax()) { '', false, $is_management_allowed, - "removeTinyMCE('textarea_field".$i."_recovery_value')", + "UndefineTinyMCE('#textarea_field".$i."_recovery_value')", '', true ); @@ -200,7 +200,7 @@ if (is_ajax()) { '', true, $is_management_allowed, - "addTinyMCE('textarea_field".$i."_recovery_value')", + "defineTinyMCE('#textarea_field".$i."_recovery_value')", '', true ); @@ -855,16 +855,16 @@ if (users_is_admin() === true) { }); function dialog_message(message) { - $(message) + $(message) .css("display", "inline") .dialog({ - modal: true, - width: "400px", - buttons: { - Close: function() { - $(this).dialog("close"); + modal: true, + width: "400px", + buttons: { + Close: function() { + $(this).dialog("close"); + } } - } }); } diff --git a/pandora_console/godmode/alerts/configure_alert_action.php b/pandora_console/godmode/alerts/configure_alert_action.php index de5d93a082..706cfb5a6d 100644 --- a/pandora_console/godmode/alerts/configure_alert_action.php +++ b/pandora_console/godmode/alerts/configure_alert_action.php @@ -457,7 +457,7 @@ if ($is_management_allowed === true) { echo ''; ui_require_javascript_file('pandora_alerts'); -ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/'); +ui_require_javascript_file('tinymce', 'vendor/tinymce/tinymce/'); ?> '; + }; + const dataToHtml = (editor, dataIn) => { + var _a; + const data = global$5.extend({}, dataIn); + if (!data.source) { + global$5.extend(data, htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema)); + if (!data.source) { + return ''; + } + } + if (!data.altsource) { + data.altsource = ''; + } + if (!data.poster) { + data.poster = ''; + } + data.source = editor.convertURL(data.source, 'source'); + data.altsource = editor.convertURL(data.altsource, 'source'); + data.sourcemime = guess(data.source); + data.altsourcemime = guess(data.altsource); + data.poster = editor.convertURL(data.poster, 'poster'); + const pattern = matchPattern(data.source); + if (pattern) { + data.source = pattern.url; + data.type = pattern.type; + data.allowfullscreen = pattern.allowFullscreen; + data.width = data.width || String(pattern.w); + data.height = data.height || String(pattern.h); + } + if (data.embed) { + return updateHtml(data.embed, data, true, editor.schema); + } else { + const audioTemplateCallback = getAudioTemplateCallback(editor); + const videoTemplateCallback = getVideoTemplateCallback(editor); + const iframeTemplateCallback = getIframeTemplateCallback(editor); + data.width = data.width || '300'; + data.height = data.height || '150'; + global$5.each(data, (value, key) => { + data[key] = editor.dom.encode('' + value); + }); + if (data.type === 'iframe') { + return getIframeHtml(data, iframeTemplateCallback); + } else if (data.sourcemime === 'application/x-shockwave-flash') { + return getFlashHtml(data); + } else if (data.sourcemime.indexOf('audio') !== -1) { + return getAudioHtml(data, audioTemplateCallback); + } else if (data.type === 'script') { + return getScriptHtml(data); + } else { + return getVideoHtml(data, videoTemplateCallback); + } + } + }; + + const isMediaElement = element => element.hasAttribute('data-mce-object') || element.hasAttribute('data-ephox-embed-iri'); + const setup$2 = editor => { + editor.on('click keyup touchend', () => { + const selectedNode = editor.selection.getNode(); + if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) { + if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) { + selectedNode.setAttribute('data-mce-selected', '2'); + } + } + }); + editor.on('ObjectSelected', e => { + const objectType = e.target.getAttribute('data-mce-object'); + if (objectType === 'script') { + e.preventDefault(); + } + }); + editor.on('ObjectResized', e => { + const target = e.target; + if (target.getAttribute('data-mce-object')) { + let html = target.getAttribute('data-mce-html'); + if (html) { + html = unescape(html); + target.setAttribute('data-mce-html', escape(updateHtml(html, { + width: String(e.width), + height: String(e.height) + }, false, editor.schema))); + } + } + }); + }; + + const cache = {}; + const embedPromise = (data, dataToHtml, handler) => { + return new Promise((res, rej) => { + const wrappedResolve = response => { + if (response.html) { + cache[data.source] = response; + } + return res({ + url: data.source, + html: response.html ? response.html : dataToHtml(data) + }); + }; + if (cache[data.source]) { + wrappedResolve(cache[data.source]); + } else { + handler({ url: data.source }, wrappedResolve, rej); + } + }); + }; + const defaultPromise = (data, dataToHtml) => Promise.resolve({ + html: dataToHtml(data), + url: data.source + }); + const loadedData = editor => data => dataToHtml(editor, data); + const getEmbedHtml = (editor, data) => { + const embedHandler = getUrlResolver(editor); + return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor)); + }; + const isCached = url => has(cache, url); + + const extractMeta = (sourceInput, data) => get$1(data, sourceInput).bind(mainData => get$1(mainData, 'meta')); + const getValue = (data, metaData, sourceInput) => prop => { + const getFromData = () => get$1(data, prop); + const getFromMetaData = () => get$1(metaData, prop); + const getNonEmptyValue = c => get$1(c, 'value').bind(v => v.length > 0 ? Optional.some(v) : Optional.none()); + const getFromValueFirst = () => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child).orThunk(getFromMetaData) : getFromMetaData().orThunk(() => Optional.from(child))); + const getFromMetaFirst = () => getFromMetaData().orThunk(() => getFromData().bind(child => isObject(child) ? getNonEmptyValue(child) : Optional.from(child))); + return { [prop]: (prop === sourceInput ? getFromValueFirst() : getFromMetaFirst()).getOr('') }; + }; + const getDimensions = (data, metaData) => { + const dimensions = {}; + get$1(data, 'dimensions').each(dims => { + each$1([ + 'width', + 'height' + ], prop => { + get$1(metaData, prop).orThunk(() => get$1(dims, prop)).each(value => dimensions[prop] = value); + }); + }); + return dimensions; + }; + const unwrap = (data, sourceInput) => { + const metaData = sourceInput && sourceInput !== 'dimensions' ? extractMeta(sourceInput, data).getOr({}) : {}; + const get = getValue(data, metaData, sourceInput); + return { + ...get('source'), + ...get('altsource'), + ...get('poster'), + ...get('embed'), + ...getDimensions(data, metaData) + }; + }; + const wrap = data => { + const wrapped = { + ...data, + source: { value: get$1(data, 'source').getOr('') }, + altsource: { value: get$1(data, 'altsource').getOr('') }, + poster: { value: get$1(data, 'poster').getOr('') } + }; + each$1([ + 'width', + 'height' + ], prop => { + get$1(data, prop).each(value => { + const dimensions = wrapped.dimensions || {}; + dimensions[prop] = value; + wrapped.dimensions = dimensions; + }); + }); + return wrapped; + }; + const handleError = editor => error => { + const errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.'; + editor.notificationManager.open({ + type: 'error', + text: errorMessage + }); + }; + const getEditorData = editor => { + const element = editor.selection.getNode(); + const snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : ''; + return { + embed: snippet, + ...htmlToData(snippet, editor.schema) + }; + }; + const addEmbedHtml = (api, editor) => response => { + if (isString(response.url) && response.url.trim().length > 0) { + const html = response.html; + const snippetData = htmlToData(html, editor.schema); + const nuData = { + ...snippetData, + source: response.url, + embed: html + }; + api.setData(wrap(nuData)); + } + }; + const selectPlaceholder = (editor, beforeObjects) => { + const afterObjects = editor.dom.select('*[data-mce-object]'); + for (let i = 0; i < beforeObjects.length; i++) { + for (let y = afterObjects.length - 1; y >= 0; y--) { + if (beforeObjects[i] === afterObjects[y]) { + afterObjects.splice(y, 1); + } + } + } + editor.selection.select(afterObjects[0]); + }; + const handleInsert = (editor, html) => { + const beforeObjects = editor.dom.select('*[data-mce-object]'); + editor.insertContent(html); + selectPlaceholder(editor, beforeObjects); + editor.nodeChanged(); + }; + const submitForm = (prevData, newData, editor) => { + var _a; + newData.embed = updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema); + if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) { + handleInsert(editor, newData.embed); + } else { + getEmbedHtml(editor, newData).then(response => { + handleInsert(editor, response.html); + }).catch(handleError(editor)); + } + }; + const showDialog = editor => { + const editorData = getEditorData(editor); + const currentData = Cell(editorData); + const initialData = wrap(editorData); + const handleSource = (prevData, api) => { + const serviceData = unwrap(api.getData(), 'source'); + if (prevData.source !== serviceData.source) { + addEmbedHtml(win, editor)({ + url: serviceData.source, + html: '' + }); + getEmbedHtml(editor, serviceData).then(addEmbedHtml(win, editor)).catch(handleError(editor)); + } + }; + const handleEmbed = api => { + var _a; + const data = unwrap(api.getData()); + const dataFromEmbed = htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema); + api.setData(wrap(dataFromEmbed)); + }; + const handleUpdate = (api, sourceInput) => { + const data = unwrap(api.getData(), sourceInput); + const embed = dataToHtml(editor, data); + api.setData(wrap({ + ...data, + embed + })); + }; + const mediaInput = [{ + name: 'source', + type: 'urlinput', + filetype: 'media', + label: 'Source' + }]; + const sizeInput = !hasDimensions(editor) ? [] : [{ + type: 'sizeinput', + name: 'dimensions', + label: 'Constrain proportions', + constrain: true + }]; + const generalTab = { + title: 'General', + name: 'general', + items: flatten([ + mediaInput, + sizeInput + ]) + }; + const embedTextarea = { + type: 'textarea', + name: 'embed', + label: 'Paste your embed code below:' + }; + const embedTab = { + title: 'Embed', + items: [embedTextarea] + }; + const advancedFormItems = []; + if (hasAltSource(editor)) { + advancedFormItems.push({ + name: 'altsource', + type: 'urlinput', + filetype: 'media', + label: 'Alternative source URL' + }); + } + if (hasPoster(editor)) { + advancedFormItems.push({ + name: 'poster', + type: 'urlinput', + filetype: 'image', + label: 'Media poster (Image URL)' + }); + } + const advancedTab = { + title: 'Advanced', + name: 'advanced', + items: advancedFormItems + }; + const tabs = [ + generalTab, + embedTab + ]; + if (advancedFormItems.length > 0) { + tabs.push(advancedTab); + } + const body = { + type: 'tabpanel', + tabs + }; + const win = editor.windowManager.open({ + title: 'Insert/Edit Media', + size: 'normal', + body, + buttons: [ + { + type: 'cancel', + name: 'cancel', + text: 'Cancel' + }, + { + type: 'submit', + name: 'save', + text: 'Save', + primary: true + } + ], + onSubmit: api => { + const serviceData = unwrap(api.getData()); + submitForm(currentData.get(), serviceData, editor); + api.close(); + }, + onChange: (api, detail) => { + switch (detail.name) { + case 'source': + handleSource(currentData.get(), api); + break; + case 'embed': + handleEmbed(api); + break; + case 'dimensions': + case 'altsource': + case 'poster': + handleUpdate(api, detail.name); + break; + } + currentData.set(unwrap(api.getData())); + }, + initialData + }); + }; + + const get = editor => { + const showDialog$1 = () => { + showDialog(editor); + }; + return { showDialog: showDialog$1 }; + }; + + const register$1 = editor => { + const showDialog$1 = () => { + showDialog(editor); + }; + editor.addCommand('mceMedia', showDialog$1); + }; + + const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr; + const startsWith = (str, prefix) => { + return checkRange(str, prefix, 0); + }; + + var global = tinymce.util.Tools.resolve('tinymce.Env'); + + const isLiveEmbedNode = node => { + const name = node.name; + return name === 'iframe' || name === 'video' || name === 'audio'; + }; + const getDimension = (node, styles, dimension, defaultValue = null) => { + const value = node.attr(dimension); + if (isNonNullable(value)) { + return value; + } else if (!has(styles, dimension)) { + return defaultValue; + } else { + return null; + } + }; + const setDimensions = (node, previewNode, styles) => { + const useDefaults = previewNode.name === 'img' || node.name === 'video'; + const defaultWidth = useDefaults ? '300' : null; + const fallbackHeight = node.name === 'audio' ? '30' : '150'; + const defaultHeight = useDefaults ? fallbackHeight : null; + previewNode.attr({ + width: getDimension(node, styles, 'width', defaultWidth), + height: getDimension(node, styles, 'height', defaultHeight) + }); + }; + const appendNodeContent = (editor, nodeName, previewNode, html) => { + const newNode = Parser(editor.schema).parse(html, { context: nodeName }); + while (newNode.firstChild) { + previewNode.append(newNode.firstChild); + } + }; + const createPlaceholderNode = (editor, node) => { + const name = node.name; + const placeHolder = new global$2('img', 1); + retainAttributesAndInnerHtml(editor, node, placeHolder); + setDimensions(node, placeHolder, {}); + placeHolder.attr({ + 'style': node.attr('style'), + 'src': global.transparentSrc, + 'data-mce-object': name, + 'class': 'mce-object mce-object-' + name + }); + return placeHolder; + }; + const createPreviewNode = (editor, node) => { + var _a; + const name = node.name; + const previewWrapper = new global$2('span', 1); + previewWrapper.attr({ + 'contentEditable': 'false', + 'style': node.attr('style'), + 'data-mce-object': name, + 'class': 'mce-preview-object mce-object-' + name + }); + retainAttributesAndInnerHtml(editor, node, previewWrapper); + const styles = editor.dom.parseStyle((_a = node.attr('style')) !== null && _a !== void 0 ? _a : ''); + const previewNode = new global$2(name, 1); + setDimensions(node, previewNode, styles); + previewNode.attr({ + src: node.attr('src'), + style: node.attr('style'), + class: node.attr('class') + }); + if (name === 'iframe') { + previewNode.attr({ + allowfullscreen: node.attr('allowfullscreen'), + frameborder: '0' + }); + } else { + const attrs = [ + 'controls', + 'crossorigin', + 'currentTime', + 'loop', + 'muted', + 'poster', + 'preload' + ]; + each$1(attrs, attrName => { + previewNode.attr(attrName, node.attr(attrName)); + }); + const sanitizedHtml = previewWrapper.attr('data-mce-html'); + if (isNonNullable(sanitizedHtml)) { + appendNodeContent(editor, name, previewNode, unescape(sanitizedHtml)); + } + } + const shimNode = new global$2('span', 1); + shimNode.attr('class', 'mce-shim'); + previewWrapper.append(previewNode); + previewWrapper.append(shimNode); + return previewWrapper; + }; + const retainAttributesAndInnerHtml = (editor, sourceNode, targetNode) => { + var _a; + const attribs = (_a = sourceNode.attributes) !== null && _a !== void 0 ? _a : []; + let ai = attribs.length; + while (ai--) { + const attrName = attribs[ai].name; + let attrValue = attribs[ai].value; + if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style' && !startsWith(attrName, 'data-mce-')) { + if (attrName === 'data' || attrName === 'src') { + attrValue = editor.convertURL(attrValue, attrName); + } + targetNode.attr('data-mce-p-' + attrName, attrValue); + } + } + const serializer = global$1({ inner: true }, editor.schema); + const tempNode = new global$2('div', 1); + each$1(sourceNode.children(), child => tempNode.append(child)); + const innerHtml = serializer.serialize(tempNode); + if (innerHtml) { + targetNode.attr('data-mce-html', escape(innerHtml)); + targetNode.empty(); + } + }; + const isPageEmbedWrapper = node => { + const nodeClass = node.attr('class'); + return isString(nodeClass) && /\btiny-pageembed\b/.test(nodeClass); + }; + const isWithinEmbedWrapper = node => { + let tempNode = node; + while (tempNode = tempNode.parent) { + if (tempNode.attr('data-ephox-embed-iri') || isPageEmbedWrapper(tempNode)) { + return true; + } + } + return false; + }; + const placeHolderConverter = editor => nodes => { + let i = nodes.length; + let node; + while (i--) { + node = nodes[i]; + if (!node.parent) { + continue; + } + if (node.parent.attr('data-mce-object')) { + continue; + } + if (isLiveEmbedNode(node) && hasLiveEmbeds(editor)) { + if (!isWithinEmbedWrapper(node)) { + node.replace(createPreviewNode(editor, node)); + } + } else { + if (!isWithinEmbedWrapper(node)) { + node.replace(createPlaceholderNode(editor, node)); + } + } + } + }; + + const parseAndSanitize = (editor, context, html) => { + const getEditorOption = editor.options.get; + const sanitize = getEditorOption('xss_sanitization'); + const validate = shouldFilterHtml(editor); + return Parser(editor.schema, { + sanitize, + validate + }).parse(html, { context }); + }; + + const setup$1 = editor => { + editor.on('PreInit', () => { + const {schema, serializer, parser} = editor; + const boolAttrs = schema.getBoolAttrs(); + each$1('webkitallowfullscreen mozallowfullscreen'.split(' '), name => { + boolAttrs[name] = {}; + }); + each({ embed: ['wmode'] }, (attrs, name) => { + const rule = schema.getElementRule(name); + if (rule) { + each$1(attrs, attr => { + rule.attributes[attr] = {}; + rule.attributesOrder.push(attr); + }); + } + }); + parser.addNodeFilter('iframe,video,audio,object,embed,script', placeHolderConverter(editor)); + serializer.addAttributeFilter('data-mce-object', (nodes, name) => { + var _a; + let i = nodes.length; + while (i--) { + const node = nodes[i]; + if (!node.parent) { + continue; + } + const realElmName = node.attr(name); + const realElm = new global$2(realElmName, 1); + if (realElmName !== 'audio' && realElmName !== 'script') { + const className = node.attr('class'); + if (className && className.indexOf('mce-preview-object') !== -1 && node.firstChild) { + realElm.attr({ + width: node.firstChild.attr('width'), + height: node.firstChild.attr('height') + }); + } else { + realElm.attr({ + width: node.attr('width'), + height: node.attr('height') + }); + } + } + realElm.attr({ style: node.attr('style') }); + const attribs = (_a = node.attributes) !== null && _a !== void 0 ? _a : []; + let ai = attribs.length; + while (ai--) { + const attrName = attribs[ai].name; + if (attrName.indexOf('data-mce-p-') === 0) { + realElm.attr(attrName.substr(11), attribs[ai].value); + } + } + if (realElmName === 'script') { + realElm.attr('type', 'text/javascript'); + } + const innerHtml = node.attr('data-mce-html'); + if (innerHtml) { + const fragment = parseAndSanitize(editor, realElmName, unescape(innerHtml)); + each$1(fragment.children(), child => realElm.append(child)); + } + node.replace(realElm); + } + }); + }); + editor.on('SetContent', () => { + const dom = editor.dom; + each$1(dom.select('span.mce-preview-object'), elm => { + if (dom.select('span.mce-shim', elm).length === 0) { + dom.add(elm, 'span', { class: 'mce-shim' }); + } + }); + }); + }; + + const setup = editor => { + editor.on('ResolveName', e => { + let name; + if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) { + e.name = name; + } + }); + }; + + const register = editor => { + const onAction = () => editor.execCommand('mceMedia'); + editor.ui.registry.addToggleButton('media', { + tooltip: 'Insert/edit media', + icon: 'embed', + onAction, + onSetup: buttonApi => { + const selection = editor.selection; + buttonApi.setActive(isMediaElement(selection.getNode())); + return selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind; + } + }); + editor.ui.registry.addMenuItem('media', { + icon: 'embed', + text: 'Media...', + onAction + }); + }; + + var Plugin = () => { + global$6.add('media', editor => { + register$2(editor); + register$1(editor); + register(editor); + setup(editor); + setup$1(editor); + setup$2(editor); + return get(editor); + }); + }; + + Plugin(); + +})(); diff --git a/pandora_console/vendor/tinymce/tinymce/plugins/media/plugin.min.js b/pandora_console/vendor/tinymce/tinymce/plugins/media/plugin.min.js new file mode 100644 index 0000000000..65e3f23653 --- /dev/null +++ b/pandora_console/vendor/tinymce/tinymce/plugins/media/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.4.1 (2023-03-29) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(o=String).prototype.isPrototypeOf(r)||(null===(s=a.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var r,a,o,s})(t)===e,r=t("string"),a=t("object"),o=t("array"),s=e=>!(e=>null==e)(e);class i{constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?i.some(e):i.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}i.singletonNone=new i(!1);const n=Array.prototype.push,c=(e,t)=>{for(let r=0,a=e.length;r{const t=[];for(let r=0,a=e.length;rh(e,t)?i.from(e[t]):i.none(),h=(e,t)=>u.call(e,t),p=e=>t=>t.options.get(e),g=p("audio_template_callback"),b=p("video_template_callback"),w=p("iframe_template_callback"),v=p("media_live_embeds"),f=p("media_filter_html"),y=p("media_url_resolver"),x=p("media_alt_source"),_=p("media_poster"),j=p("media_dimensions");var k=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),A=tinymce.util.Tools.resolve("tinymce.html.DomParser");const S=O.DOM,C=e=>e.replace(/px$/,""),D=e=>{const t=e.attr("style"),r=t?S.parseStyle(t):{};return{type:"ephox-embed-iri",source:e.attr("data-ephox-embed-iri"),altsource:"",poster:"",width:d(r,"max-width").map(C).getOr(""),height:d(r,"max-height").map(C).getOr("")}},T=(e,t)=>{let r={};for(let a=A({validate:!1,forced_root_block:!1},t).parse(e);a;a=a.walk())if(1===a.type){const e=a.name;if(a.attr("data-ephox-embed-iri")){r=D(a);break}r.source||"param"!==e||(r.source=a.attr("movie")),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(r.type||(r.type=e),r=k.extend(a.attributes.map,r)),"script"===e&&(r={type:"script",source:a.attr("src")}),"source"===e&&(r.source?r.altsource||(r.altsource=a.attr("src")):r.source=a.attr("src")),"img"!==e||r.poster||(r.poster=a.attr("src"))}return r.source=r.source||r.src||"",r.altsource=r.altsource||"",r.poster=r.poster||"",r},z=e=>{var t;const r=null!==(t=e.toLowerCase().split(".").pop())&&void 0!==t?t:"";return d({mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},r).getOr("")};var $=tinymce.util.Tools.resolve("tinymce.html.Node"),M=tinymce.util.Tools.resolve("tinymce.html.Serializer");const F=(e,t={})=>A({forced_root_block:!1,validate:!1,allow_conditional_comments:!0,...t},e),N=O.DOM,R=e=>/^[0-9.]+$/.test(e)?e+"px":e,U=(e,t)=>{const r=t.attr("style"),a=r?N.parseStyle(r):{};s(e.width)&&(a["max-width"]=R(e.width)),s(e.height)&&(a["max-height"]=R(e.height)),t.attr("style",N.serializeStyle(a))},P=["source","altsource"],E=(e,t,r,a)=>{let o=0,s=0;const i=F(a);i.addNodeFilter("source",(e=>o=e.length));const n=i.parse(e);for(let e=n;e;e=e.walk())if(1===e.type){const a=e.name;if(e.attr("data-ephox-embed-iri")){U(t,e);break}switch(a){case"video":case"object":case"embed":case"img":case"iframe":void 0!==t.height&&void 0!==t.width&&(e.attr("width",t.width),e.attr("height",t.height))}if(r)switch(a){case"video":e.attr("poster",t.poster),e.attr("src",null);for(let r=o;r<2;r++)if(t[P[r]]){const a=new $("source",1);a.attr("src",t[P[r]]),a.attr("type",t[P[r]+"mime"]||null),e.append(a)}break;case"iframe":e.attr("src",t.source);break;case"object":const r=e.getAll("img").length>0;if(t.poster&&!r){e.attr("src",t.poster);const r=new $("img",1);r.attr("src",t.poster),r.attr("width",t.width),r.attr("height",t.height),e.append(r)}break;case"source":if(s<2&&(e.attr("src",t[P[s]]),e.attr("type",t[P[s]+"mime"]||null),!t[P[s]])){e.remove();continue}s++;break;case"img":t.poster||e.remove()}}return M({},a).serialize(n)},L=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=(e,t)=>{const r=(e=>{const t=e.match(/^(https?:\/\/|www\.)(.+)$/i);return t&&t.length>1?"www."===t[1]?"https://":t[1]:"https://"})(t),a=e.regex.exec(t);let o=r+e.url;if(s(a))for(let e=0;ea[e]?a[e]:""));return o.replace(/\?$/,"")},B=(e,t)=>{var r;const a=k.extend({},t);if(!a.source&&(k.extend(a,T(null!==(r=a.embed)&&void 0!==r?r:"",e.schema)),!a.source))return"";a.altsource||(a.altsource=""),a.poster||(a.poster=""),a.source=e.convertURL(a.source,"source"),a.altsource=e.convertURL(a.altsource,"source"),a.sourcemime=z(a.source),a.altsourcemime=z(a.altsource),a.poster=e.convertURL(a.poster,"poster");const o=(e=>{const t=L.filter((t=>t.regex.test(e)));return t.length>0?k.extend({},t[0],{url:I(t[0],e)}):null})(a.source);if(o&&(a.source=o.url,a.type=o.type,a.allowfullscreen=o.allowFullscreen,a.width=a.width||String(o.w),a.height=a.height||String(o.h)),a.embed)return E(a.embed,a,!0,e.schema);{const t=g(e),r=b(e),o=w(e);return a.width=a.width||"300",a.height=a.height||"150",k.each(a,((t,r)=>{a[r]=e.dom.encode(""+t)})),"iframe"===a.type?((e,t)=>{if(t)return t(e);{const t=e.allowfullscreen?' allowFullscreen="1"':"";return'"}})(a,o):"application/x-shockwave-flash"===a.sourcemime?(e=>{let t='';return e.poster&&(t+=''),t+="",t})(a):-1!==a.sourcemime.indexOf("audio")?((e,t)=>t?t(e):'")(a,t):"script"===a.type?(e=>' '; + const directionality = editor.getBody().dir; + const dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : ''; + const previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + ''; + return previewHtml; + }; + + const open = editor => { + const content = getPreviewHtml(editor); + const dataApi = editor.windowManager.open({ + title: 'Preview', + size: 'large', + body: { + type: 'panel', + items: [{ + name: 'preview', + type: 'iframe', + sandboxed: true, + transparent: false + }] + }, + buttons: [{ + type: 'cancel', + name: 'close', + text: 'Close', + primary: true + }], + initialData: { preview: content } + }); + dataApi.focus('close'); + }; + + const register$1 = editor => { + editor.addCommand('mcePreview', () => { + open(editor); + }); + }; + + const register = editor => { + const onAction = () => editor.execCommand('mcePreview'); + editor.ui.registry.addButton('preview', { + icon: 'preview', + tooltip: 'Preview', + onAction + }); + editor.ui.registry.addMenuItem('preview', { + icon: 'preview', + text: 'Preview', + onAction + }); + }; + + var Plugin = () => { + global$2.add('preview', editor => { + register$1(editor); + register(editor); + }); + }; + + Plugin(); + +})(); diff --git a/pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js b/pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js new file mode 100644 index 0000000000..81d853d70f --- /dev/null +++ b/pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.4.1 (2023-03-29) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=e=>t=>t.options.get(e),i=n("content_style"),s=n("content_css_cors"),c=n("body_class"),r=n("body_id");e.add("preview",(e=>{(e=>{e.addCommand("mcePreview",(()=>{(e=>{const n=(e=>{var n;let l="";const a=e.dom.encode,d=null!==(n=i(e))&&void 0!==n?n:"";l+='';const m=s(e)?' crossorigin="anonymous"':"";o.each(e.contentCSS,(t=>{l+='"})),d&&(l+='");const y=r(e),u=c(e),v=' '; + const directionality = editor.getBody().dir; + const dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : ''; + html = '' + '' + '' + '' + contentCssEntries + preventClicksOnLinksScript + '' + '' + parseAndSerialize(editor, html) + '' + ''; + } + return replaceTemplateValues(html, getPreviewReplaceValues(editor)); + }; + const open = (editor, templateList) => { + const createTemplates = () => { + if (!templateList || templateList.length === 0) { + const message = editor.translate('No templates defined.'); + editor.notificationManager.open({ + text: message, + type: 'info' + }); + return Optional.none(); + } + return Optional.from(global$2.map(templateList, (template, index) => { + const isUrlTemplate = t => t.url !== undefined; + return { + selected: index === 0, + text: template.title, + value: { + url: isUrlTemplate(template) ? Optional.from(template.url) : Optional.none(), + content: !isUrlTemplate(template) ? Optional.from(template.content) : Optional.none(), + description: template.description + } + }; + })); + }; + const createSelectBoxItems = templates => map(templates, t => ({ + text: t.text, + value: t.text + })); + const findTemplate = (templates, templateTitle) => find(templates, t => t.text === templateTitle); + const loadFailedAlert = api => { + editor.windowManager.alert('Could not load the specified template.', () => api.focus('template')); + }; + const getTemplateContent = t => t.value.url.fold(() => Promise.resolve(t.value.content.getOr('')), url => fetch(url).then(res => res.ok ? res.text() : Promise.reject())); + const onChange = (templates, updateDialog) => (api, change) => { + if (change.name === 'template') { + const newTemplateTitle = api.getData().template; + findTemplate(templates, newTemplateTitle).each(t => { + api.block('Loading...'); + getTemplateContent(t).then(previewHtml => { + updateDialog(api, t, previewHtml); + }).catch(() => { + updateDialog(api, t, ''); + api.setEnabled('save', false); + loadFailedAlert(api); + }); + }); + } + }; + const onSubmit = templates => api => { + const data = api.getData(); + findTemplate(templates, data.template).each(t => { + getTemplateContent(t).then(previewHtml => { + editor.execCommand('mceInsertTemplate', false, previewHtml); + api.close(); + }).catch(() => { + api.setEnabled('save', false); + loadFailedAlert(api); + }); + }); + }; + const openDialog = templates => { + const selectBoxItems = createSelectBoxItems(templates); + const buildDialogSpec = (bodyItems, initialData) => ({ + title: 'Insert Template', + size: 'large', + body: { + type: 'panel', + items: bodyItems + }, + initialData, + buttons: [ + { + type: 'cancel', + name: 'cancel', + text: 'Cancel' + }, + { + type: 'submit', + name: 'save', + text: 'Save', + primary: true + } + ], + onSubmit: onSubmit(templates), + onChange: onChange(templates, updateDialog) + }); + const updateDialog = (dialogApi, template, previewHtml) => { + const content = getPreviewContent(editor, previewHtml); + const bodyItems = [ + { + type: 'selectbox', + name: 'template', + label: 'Templates', + items: selectBoxItems + }, + { + type: 'htmlpanel', + html: `

${ htmlEscape(template.value.description) }

` + }, + { + label: 'Preview', + type: 'iframe', + name: 'preview', + sandboxed: false, + transparent: false + } + ]; + const initialData = { + template: template.text, + preview: content + }; + dialogApi.unblock(); + dialogApi.redial(buildDialogSpec(bodyItems, initialData)); + dialogApi.focus('template'); + }; + const dialogApi = editor.windowManager.open(buildDialogSpec([], { + template: '', + preview: '' + })); + dialogApi.block('Loading...'); + getTemplateContent(templates[0]).then(previewHtml => { + updateDialog(dialogApi, templates[0], previewHtml); + }).catch(() => { + updateDialog(dialogApi, templates[0], ''); + dialogApi.setEnabled('save', false); + loadFailedAlert(dialogApi); + }); + }; + const optTemplates = createTemplates(); + optTemplates.each(openDialog); + }; + + const showDialog = editor => templates => { + open(editor, templates); + }; + const register$1 = editor => { + editor.addCommand('mceInsertTemplate', curry(insertTemplate, editor)); + editor.addCommand('mceTemplate', createTemplateList(editor, showDialog(editor))); + }; + + const setup = editor => { + editor.on('PreProcess', o => { + const dom = editor.dom, dateFormat = getMdateFormat(editor); + global$2.each(dom.select('div', o.node), e => { + if (dom.hasClass(e, 'mceTmpl')) { + global$2.each(dom.select('*', e), e => { + if (hasAnyClasses(dom, e, getModificationDateClasses(editor))) { + e.innerHTML = getDateTime(editor, dateFormat); + } + }); + replaceVals(editor, e); + } + }); + }); + }; + + const register = editor => { + const onAction = () => editor.execCommand('mceTemplate'); + editor.ui.registry.addButton('template', { + icon: 'template', + tooltip: 'Insert template', + onAction + }); + editor.ui.registry.addMenuItem('template', { + icon: 'template', + text: 'Insert template...', + onAction + }); + }; + + var Plugin = () => { + global$3.add('template', editor => { + register$2(editor); + register(editor); + register$1(editor); + setup(editor); + }); + }; + + Plugin(); + +})(); diff --git a/pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js b/pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js new file mode 100644 index 0000000000..b97aaf72cc --- /dev/null +++ b/pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js @@ -0,0 +1,4 @@ +/** + * TinyMCE version 6.4.1 (2023-03-29) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(a=n=e,(r=String).prototype.isPrototypeOf(a)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var a,n,r,s})(t)===e,a=t("string"),n=t("object"),r=t("array"),s=("function",e=>"function"==typeof e);const l=(!1,()=>false);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");const c=e=>t=>t.options.get(e),i=c("template_cdate_classes"),u=c("template_mdate_classes"),m=c("template_selected_content_classes"),p=c("template_preview_replace_values"),d=c("template_replace_values"),h=c("templates"),g=c("template_cdate_format"),v=c("template_mdate_format"),y=c("content_style"),f=c("content_css_cors"),_=c("body_class"),b=(e,t)=>{if((e=""+e).length{const n="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),r="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),s="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),l="January February March April May June July August September October November December".split(" ");return(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",b(a.getMonth()+1,2))).replace("%d",b(a.getDate(),2))).replace("%H",""+b(a.getHours(),2))).replace("%M",""+b(a.getMinutes(),2))).replace("%S",""+b(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(l[a.getMonth()]))).replace("%b",""+e.translate(s[a.getMonth()]))).replace("%A",""+e.translate(r[a.getDay()]))).replace("%a",""+e.translate(n[a.getDay()]))).replace("%%","%")};class T{constructor(e,t){this.tag=e,this.value=t}static some(e){return new T(!0,e)}static none(){return T.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?T.some(e(this.value)):T.none()}bind(e){return this.tag?e(this.value):T.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:T.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?T.none():T.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}T.singletonNone=new T(!1);const x=Object.hasOwnProperty;var S=tinymce.util.Tools.resolve("tinymce.html.Serializer");const w={'"':""","<":"<",">":">","&":"&","'":"'"},C=e=>e.replace(/["'<>&]/g,(e=>{return(t=w,a=e,((e,t)=>x.call(e,t))(t,a)?T.from(t[a]):T.none()).getOr(e);var t,a})),O=(e,t,a)=>((a,n)=>{for(let n=0,s=a.length;nS({validate:!0},e.schema).serialize(e.parser.parse(t,{insert:!0})),D=(e,t)=>(o.each(t,((t,a)=>{s(t)&&(t=t(a)),e=e.replace(new RegExp("\\{\\$"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\}","g"),t)})),e),I=(e,t)=>{const a=e.dom,n=d(e);o.each(a.select("*",t),(e=>{o.each(n,((t,n)=>{a.hasClass(e,n)&&s(t)&&t(e)}))}))},N=(e,t,a)=>{const n=e.dom,r=e.selection.getContent();a=D(a,d(e));let s=n.create("div",{},A(e,a));const l=n.select(".mceTmpl",s);l&&l.length>0&&(s=n.create("div"),s.appendChild(l[0].cloneNode(!0))),o.each(n.select("*",s),(t=>{O(n,t,i(e))&&(t.innerHTML=M(e,g(e))),O(n,t,u(e))&&(t.innerHTML=M(e,v(e))),O(n,t,m(e))&&(t.innerHTML=r)})),I(e,s),e.execCommand("mceInsertContent",!1,s.innerHTML),e.addVisual()};var k=tinymce.util.Tools.resolve("tinymce.Env");const P=(e,t)=>{const a=(e,t)=>((e,t,a)=>{for(let n=0,r=e.length;ne.text===t),l),n=t=>{e.windowManager.alert("Could not load the specified template.",(()=>t.focus("template")))},r=e=>e.value.url.fold((()=>Promise.resolve(e.value.content.getOr(""))),(e=>fetch(e).then((e=>e.ok?e.text():Promise.reject())))),s=(e,t)=>(s,l)=>{if("template"===l.name){const l=s.getData().template;a(e,l).each((e=>{s.block("Loading..."),r(e).then((a=>{t(s,e,a)})).catch((()=>{t(s,e,""),s.setEnabled("save",!1),n(s)}))}))}},c=t=>s=>{const l=s.getData();a(t,l.template).each((t=>{r(t).then((t=>{e.execCommand("mceInsertTemplate",!1,t),s.close()})).catch((()=>{s.setEnabled("save",!1),n(s)}))}))};(()=>{if(!t||0===t.length){const t=e.translate("No templates defined.");return e.notificationManager.open({text:t,type:"info"}),T.none()}return T.from(o.map(t,((e,t)=>{const a=e=>void 0!==e.url;return{selected:0===t,text:e.title,value:{url:a(e)?T.from(e.url):T.none(),content:a(e)?T.none():T.from(e.content),description:e.description}}})))})().each((t=>{const a=(e=>((e,t)=>{const a=e.length,n=new Array(a);for(let t=0;t({title:"Insert Template",size:"large",body:{type:"panel",items:e},initialData:a,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:c(t),onChange:s(t,i)}),i=(t,n,r)=>{const s=((e,t)=>{var a;if(-1===t.indexOf("")){let n="";const r=null!==(a=y(e))&&void 0!==a?a:"",s=f(e)?' crossorigin="anonymous"':"";o.each(e.contentCSS,(t=>{n+='"})),r&&(n+='");const l=_(e),c=e.dom.encode,i='