diff --git a/.gitignore b/.gitignore index b25c15b8..7b73bdb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ *~ +/vendor/ +.idea +composer.lock diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 00000000..2e7d5043 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 748b8c4f..d3b7ad32 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -17,59 +17,112 @@ class Configuration implements ConfigurationInterface */ public function getConfigTreeBuilder(): TreeBuilder { - $defaults = $this->getTinymceDefaults(); - - $treeBuilder = new TreeBuilder(); + $treeBuilder = new TreeBuilder("TinyMCEBundle"); return $treeBuilder - ->root('stfalcon_tinymce', 'array') + ->root('tinymce', 'array') ->children() - // Include jQuery (true) library or not (false) - ->booleanNode('include_jquery')->defaultFalse()->end() - // Use jQuery (true) or standalone (false) build of the TinyMCE - ->booleanNode('tinymce_jquery')->defaultFalse()->end() + // Default language for all instances of the editor + ->scalarNode('language')->defaultNull()->end() + // Default config name + ->scalarNode('config_name')->defaultValue('default')->end() + // Selector + ->scalarNode('selector')->defaultValue('[data-tinymce]')->end() // Set init to true to use callback on the event init ->booleanNode('use_callback_tinymce_init')->defaultFalse()->end() - // Selector - ->scalarNode('selector')->defaultValue('.tinymce')->end() // base url for content ->scalarNode('base_url')->end() // asset packageName ->scalarNode('asset_package_name')->end() - // Default language for all instances of the editor - ->scalarNode('language')->defaultNull()->end() - ->arrayNode('theme') - ->useAttributeAsKey('name') - ->prototype('array') - ->useAttributeAsKey('name') - ->prototype('variable')->end() + // content style + ->scalarNode('content_style')->defaultValue('')->end() + // valid html elements + ->scalarNode('valid_elements')->end() + // plugins + ->scalarNode('plugins')->defaultValue('')->end() + // character encoding + ->scalarNode('entity_encoding')->defaultValue('raw')->end() + // extended valid elements (tags) + ->scalarNode('extended_valid_elements')->defaultValue('')->end() + // extended valid elements for tags (tags in tags) + ->scalarNode('valid_children')->defaultValue('')->end() + // toolbar + ->scalarNode('toolbar')->defaultValue('undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent')->end() + ->scalarNode('quickbars_selection_toolbar')->defaultValue('')->end() + ->scalarNode('quickbars_insert_toolbar')->defaultValue('')->end() + ->booleanNode('relative_urls')->defaultFalse()->end() + ->booleanNode('remove_script_host')->defaultFalse()->end() + ->booleanNode('convert_urls')->defaultFalse()->end() + ->booleanNode('browser_spellcheck')->defaultTrue()->end() + ->arrayNode('file_picker') + ->children() + ->scalarNode('engine')->defaultNull()->end() + ->scalarNode('name')->defaultNull()->end() + ->scalarNode('route')->defaultNull()->end() + ->arrayNode('route_parameters') + ->prototype('scalar')->end() + ->end() ->end() - // Add default theme if it doesn't set - ->defaultValue($defaults) ->end() - // Configure custom TinyMCE buttons - ->arrayNode('tinymce_buttons') - ->useAttributeAsKey('name') - ->prototype('array') - ->addDefaultsIfNotSet() - ->children() - ->scalarNode('text')->defaultNull()->end() - ->scalarNode('title')->defaultNull()->end() - ->scalarNode('image')->defaultNull()->end() - ->scalarNode('icon')->defaultNull()->end() + ->arrayNode('file_browser') + ->children() + ->scalarNode('engine')->defaultNull()->end() + ->scalarNode('name')->defaultNull()->end() + ->scalarNode('route')->defaultNull()->end() + ->arrayNode('route_parameters') + ->prototype('scalar')->end() + ->end() + ->end() + ->end() + ->scalarNode('variable_prefix')->defaultValue('{{')->end() + ->scalarNode('variable_suffix')->defaultValue('}}')->end() + // allow paste images into editor + ->booleanNode('paste_data_images')->defaultTrue()->end() + ->arrayNode('variables') + ->children() + ->scalarNode('title')->defaultNull()->end() + ->arrayNode('list') + ->prototype('scalar')->end() ->end() ->end() ->end() - // Configure external TinyMCE plugins - ->arrayNode('external_plugins') + ->arrayNode('theme') ->useAttributeAsKey('name') - ->prototype('array') + ->prototype('array') ->addDefaultsIfNotSet() ->children() - ->scalarNode('url')->isRequired()->end() + ->scalarNode('toolbar')->defaultNull()->end() + ->scalarNode('quickbars_selection_toolbar')->defaultNull()->end() + ->scalarNode('quickbars_insert_toolbar')->defaultNull()->end() ->end() ->end() ->end() + + // Configure custom TinyMCE buttons + ->arrayNode('tinymce_buttons') + ->useAttributeAsKey('name') + ->prototype('array') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('text')->defaultNull()->end() + ->scalarNode('tooltip')->defaultNull()->end() + ->scalarNode('icon')->defaultNull()->end() + ->end() + ->end() + ->end() + + //custom icons svg + ->arrayNode('tinymce_icons') + ->useAttributeAsKey('name') + ->prototype('array') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('name_icon')->defaultNull()->end() + ->scalarNode('svg_data')->defaultNull()->end() + ->end() + ->end() + ->end() + ->end() ->end(); } diff --git a/Form/Type/TinyMCEType.php b/Form/Type/TinyMCEType.php new file mode 100644 index 00000000..2b0e8355 --- /dev/null +++ b/Form/Type/TinyMCEType.php @@ -0,0 +1,163 @@ +configManager = $configManager; + } + + /** + * @param bool|null $isEnable + * @return bool + */ + public function isEnable($isEnable = null) + { + if(is_bool($isEnable)) { + $this->enable = $isEnable; + } + + return $this->enable; + } + + /** + * {@inheritdoc} + */ + public function buildView(FormView $view, FormInterface $form, array $options) + { + $config = $form->getConfig(); + $view->vars['enable'] = $config->getAttribute('enable'); + + if (!$view->vars['enable']) { + return; + } + + if(!isset($view->vars['attr'])) { + $view->vars['attr'] = []; + } + if(!isset($view->vars['attr']['class'])) { + $view->vars['attr']['class'] = ''; + } + + $view->vars['attr']['class'] .= ' tinymce'; + $view->vars['attr']['data-tinymce'] = '' . (self::$id ++); + } + + /** + * {@inheritdoc} + */ + public function buildForm(FormBuilderInterface $builder, array $options) + { + $builder->setAttribute('enable', $options['enable']); + if($this->configManager->hasConfig('config')) { + $config = $this->configManager->getConfig('config'); + } else { + $config = []; + } + + $checkTypes = [ + 'config_name', 'language', 'selector', 'plugins', 'extended_valid_elements', + 'toolbar', 'quickbars_selection_toolbar', 'quickbars_insert_toolbar', + 'valid_elements', 'file_picker', 'variables', 'valid_children', 'entity_encoding ', + 'content_style', + ]; + + foreach ($checkTypes as $type) { + if(isset($options[$type]) && $options[$type] !== null) { + $config[$type] = $options[$type]; + } + } + + $this->configManager->setConfig('config', $config); + if (!$options['enable']) { + return; + } + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver) + { + $resolver + ->setDefaults([ + 'config_name' => $this->configManager->getDefaultConfig(), + 'language' => null, + 'selector' => null, + 'plugins' => null, + 'toolbar' => null, + 'quickbars_selection_toolbar' => null, + 'quickbars_insert_toolbar' => null, + 'valid_elements' => null, + 'valid_children' => null, + 'entity_encoding ' => 'raw', + 'extended_valid_elements' => null, + 'file_picker' => null, + 'enable' => $this->enable, + 'variables' => null, + 'content_style' => '', + ]) + ->setAllowedTypes('config_name', ['string', 'null']) + ->setAllowedTypes('language', ['string', 'null']) + ->setAllowedTypes('selector', ['string', 'null']) + ->setAllowedTypes('plugins', ['string', 'null']) + ->setAllowedTypes('toolbar', ['string', 'null']) + ->setAllowedTypes('quickbars_selection_toolbar', ['string', 'null']) + ->setAllowedTypes('quickbars_insert_toolbar', ['string', 'null']) + ->setAllowedTypes('valid_elements', ['string', 'null']) + ->setAllowedTypes('valid_children', ['string', 'null']) + ->setAllowedTypes('entity_encoding ', ['string']) + ->setAllowedTypes('extended_valid_elements', ['string', 'null']) + ->setAllowedTypes('file_picker', ['array', 'null']) + ->setAllowedTypes('variables', ['array', 'null']) + ->setAllowedTypes('enable', 'bool') + ; + } + + /** + * {@inheritdoc} + */ + public function getParent() + { + return method_exists(AbstractType::class, 'getBlockPrefix') ? TextareaType::class : 'textarea'; + } + + /** + * @return string + */ + public function getName() + { + return $this->getBlockPrefix(); + } + + /** + * {@inheritdoc} + */ + public function getBlockPrefix() + { + return 'tinymce'; + } +} diff --git a/Helper/LocaleHelper.php b/Helper/LocaleHelper.php index e2720ef2..c55becf5 100644 --- a/Helper/LocaleHelper.php +++ b/Helper/LocaleHelper.php @@ -26,7 +26,7 @@ class LocaleHelper * * @return string */ - public static function getLanguage($locale): string + public static function getLanguage(string $locale): string { return self::$locales[$locale] ?? $locale; } diff --git a/Model/ConfigManager.php b/Model/ConfigManager.php new file mode 100644 index 00000000..161c80ba --- /dev/null +++ b/Model/ConfigManager.php @@ -0,0 +1,117 @@ +setConfigs($configs); + + if ($defaultConfig !== null) { + $this->setDefaultConfig($defaultConfig); + } + } + + /** + * {@inheritdoc} + */ + public function getDefaultConfig() + { + return $this->defaultConfig; + } + + /** + * {@inheritdoc} + */ + public function setDefaultConfig($defaultConfig) + { + if (!$this->hasConfig($defaultConfig)) { + throw new RuntimeException($defaultConfig); + } + + $this->defaultConfig = $defaultConfig; + } + + /** + * {@inheritdoc} + */ + public function hasConfigs() + { + return !empty($this->configs); + } + + /** + * {@inheritdoc} + */ + public function getConfigs() + { + return $this->configs; + } + + /** + * {@inheritdoc} + */ + public function setConfigs(array $configs) + { + foreach ($configs as $name => $config) { + $this->setConfig($name, $config); + } + } + + /** + * {@inheritdoc} + */ + public function hasConfig($name) + { + return isset($this->configs[$name]); + } + + /** + * {@inheritdoc} + */ + public function getConfig($name) + { + if (!$this->hasConfig($name)) { + throw new RuntimeException($name); + } + + return $this->configs[$name]; + } + + /** + * {@inheritdoc} + */ + public function setConfig($name, array $config) + { + $this->configs[$name] = $config; + } + + /** + * {@inheritdoc} + */ + public function mergeConfig($name, array $config) + { + $this->configs[$name] = array_merge($this->getConfig($name), $config); + } +} diff --git a/Model/ConfigManagerInterface.php b/Model/ConfigManagerInterface.php new file mode 100644 index 00000000..f5ecbc4f --- /dev/null +++ b/Model/ConfigManagerInterface.php @@ -0,0 +1,66 @@ + ``` -If you want to use jQuery version of the editor set the following parameters: - -```yaml - stfalcon_tinymce: - include_jquery: true - tinymce_jquery: true - ... -``` - -The option `include_jquery` allows you to load external jQuery library from the Google CDN. Set it to `true` if you haven't included jQuery on your page. - If you are using FormBuilder, use an array to add the class, you can also use the `theme` option to change the used theme to something other than 'simple' (i.e. on of the other defined themes in your config - the example above defined 'bbcode'). e.g.: @@ -112,8 +101,6 @@ You can change the language of your TinyMCE editor by adding language selector i ```yaml // app/config/config.yml stfalcon_tinymce: - include_jquery: true - tinymce_jquery: true selector: ".tinymce" language: %locale% theme: @@ -136,8 +123,6 @@ According to the TinyMCE documentation you can configure your editor as you wish ```yaml // app/config/config.yml stfalcon_tinymce: - include_jquery: true - tinymce_jquery: true selector: ".tinymce" base_url: "http://yourdomain.com/" # this parameter may be included if you need to override the assets_base_urls for your template engine (to override a CDN base url) # Get current language from the parameters.ini @@ -251,8 +236,6 @@ If you specify a relative path, it is resolved in relation to the URL of the (HT ## Init Event -As $(document).ready() in jQuery you can listen to the init event as well in Tinymce. - To do so you must edit your config and set `use_callback_tinymce_init` to true. `app/config/config.yml`: @@ -278,13 +261,3 @@ function callback_tinymce_init(editor) { ## How to init TinyMCE for dynamically loaded elements To initialize TinyMCE for new loaded textareas you should just call `initTinyMCE()` function. - -#### Example for Sonata Admin Bundle - -```javascript - jQuery(document).ready(function() { - $('form').on('sonata.add_element', function(){ - initTinyMCE(); - }); - }); -``` diff --git a/Resources/config/service.xml b/Resources/config/service.xml index 5ecbce11..5bcd8d97 100644 --- a/Resources/config/service.xml +++ b/Resources/config/service.xml @@ -12,8 +12,16 @@ + + + + + + + + - \ No newline at end of file + diff --git a/Resources/public/js/elfinder.js b/Resources/public/js/elfinder.js new file mode 100644 index 00000000..26f01e06 --- /dev/null +++ b/Resources/public/js/elfinder.js @@ -0,0 +1,32 @@ +function getBrowser(browser, browserTitle) { + return (callback, value, meta) => { + + tinymce.activeEditor.activeWindow = tinymce.activeEditor.windowManager.openUrl({ + url: browser, + title: browserTitle + }); + tinymce.activeEditor.getFileCallback = (url, name, size, mime) => { + let info; + + // Make file info + info = name + ' (' + humanFileSize(size) + ')'; + + // Provide file and text for the link dialog + if (mime.substr(0, 4) === 'file') { + callback(url, {text: info, title: info}); + } + + // Provide image and alt text for the image dialog + if (mime.substr(0, 5) === 'image') { + callback(url, {alt: info}); + } + + // Provide alternative source and posted for the media dialog + if (mime.substr(0, 5) === 'media') { + callback(url); + } + }; + + return false; + }; +} diff --git a/Resources/public/js/init.jquery.js b/Resources/public/js/init.jquery.js deleted file mode 100644 index 0f08658b..00000000 --- a/Resources/public/js/init.jquery.js +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Initialize standard build of the TinyMCE - * - * @param options - */ -function initTinyMCE(options) { - if (typeof options == 'undefined') options = stfalcon_tinymce_config; - (function($, undefined) { - $(function() { - var textareas = $('textarea'); - - if (options.selector) { - textareas = $('textarea' + options.selector); - } - textareas.each(function() { - var textarea = $(this), - theme = textarea.attr('data-theme') || 'simple'; - - // Get selected theme options - var settings = (typeof options.theme[theme] != 'undefined') - ? options.theme[theme] - : options.theme['simple']; - - settings.script_url = options.jquery_script_url; - settings.external_plugins = settings.external_plugins || {}; - // workaround for an incompatibility with html5-validation - if (textarea.is('[required]')) { - textarea.prop('required', false); - } - settings.setup = function(ed) { - // Add custom buttons to current editor - $.each(options.tinymce_buttons || {}, function(id, opts) { - opts = $.extend({}, opts, { - onclick: function() { - var callback = window['tinymce_button_' + id]; - if (typeof callback == 'function') { - callback(ed); - } else { - alert('You have to create callback function: "tinymce_button_' + id + '"'); - } - } - }); - ed.addButton(id, opts); - }); - // Load external plugins - $.each(options.external_plugins || {}, function(id, opts) { - var url = opts.url || null; - if (url) { - settings.external_plugins[id] = url; - tinymce.PluginManager.load(id, url); - } - }); - //Init Event - if (options.use_callback_tinymce_init) { - ed.on('init', function() { - var callback = window['callback_tinymce_init']; - if (typeof callback == 'function') { - callback(ed); - } else { - alert('You have to create callback function: callback_tinymce_init'); - } - }); - } - }; - textarea.tinymce(settings); - }); - }); - }(jQuery)); -} \ No newline at end of file diff --git a/Resources/public/js/init.standard.js b/Resources/public/js/init.standard.js index 055eba24..fe840001 100644 --- a/Resources/public/js/init.standard.js +++ b/Resources/public/js/init.standard.js @@ -3,38 +3,67 @@ * * @param options */ -function initTinyMCE(options) { +async function initTinyMCE(options) { if (typeof tinymce == 'undefined') return false; - if (typeof options == 'undefined') options = stfalcon_tinymce_config; + let resolver = () => {}; + let rejector = () => {}; + let editors = []; + const prom = new Promise((resolve, reject) => { + resolver = resolve; + rejector = reject; + }); + + const defaults = { + plugins: 'importcss searchreplace autolink directionality fullscreen image link media table charmap hr anchor advlist lists wordcount textpattern noneditable help charmap quickbars code', + + language: options.language, + selector: options.selector, + variable_prefix: '{', + variable_suffix: '}', + menu: {}, + content_style: '', + menubar: false, + browser_spellcheck: true, + entity_encoding: 'raw', + toolbar: 'undo redo | formatselect | bold italic underline strikethrough | removeformat | numlist bullist | alignleft aligncenter alignright alignjustify | ' + + ' link unlink anchor blockquote | image media table | fullscreen code', + + // image_advtab: true, + content_css: options.content_css, + importcss_append: true, + quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable', + // noneditable_noneditable_class: "mceNonEditable", + toolbar_mode: 'sliding', + spellchecker_whitelist: ['Ephox', 'Moxiecode'], + + contextmenu: "link image imagetools table configurepermanentpen", + }; + // Load when DOM is ready domready(function() { - var i, t = tinymce.editors, textareas = []; + let i, t = tinymce.editors, textareas = []; for (i in t) { if (t.hasOwnProperty(i)) t[i].remove(); } - switch (options.selector.substring(0, 1)) { - case "#": - var _t = document.getElementById(options.selector.substring(1)); - if (_t) textareas.push(_t); - break; - case ".": - textareas = document.getElementsByClassName(options.selector.substring(1)); - break; - default : - textareas = document.getElementsByTagName('textarea'); + if(!(options.selector instanceof Array)) { + options.selector = [options.selector]; } + options.selector.forEach(function(selector) { + textareas = processSelector(selector, textareas); + }); if (!textareas.length) { + rejector('TinyMCE error: no target found from selector'); return false; } - var externalPlugins = []; + const externalPlugins = []; // Load external plugins if (typeof options.external_plugins == 'object') { - for (var pluginId in options.external_plugins) { + for (const pluginId in options.external_plugins) { if (!options.external_plugins.hasOwnProperty(pluginId)) { continue; } - var opts = options.external_plugins[pluginId], + const opts = options.external_plugins[pluginId], url = opts.url || null; if (url) { externalPlugins.push({ @@ -47,49 +76,74 @@ function initTinyMCE(options) { } for (i = 0; i < textareas.length; i++) { - // Get editor's theme from the textarea data - var theme = textareas[i].getAttribute("data-theme") || 'simple'; - // Get selected theme options - var settings = (typeof options.theme[theme] != 'undefined') - ? options.theme[theme] - : options.theme['simple']; - + // Get selected options + let settings = {...defaults, ...options}; + settings.content_style += '.variable,[data-original-variable]{\n' + + ' cursor: default;\n' + + ' background-color: #65b9dd;\n' + + ' color: #FFF;\n' + + ' padding: 2px 8px;\n' + + ' border-radius: 3px;\n' + + ' font-weight: bold;\n' + + ' font-style: normal;\n' + + ' display: inline-block;\n' + + '}'; settings.external_plugins = settings.external_plugins || {}; - for (var p = 0; p < externalPlugins.length; p++) { + for (let p = 0; p < externalPlugins.length; p++) { settings.external_plugins[externalPlugins[p]['id']] = externalPlugins[p]['url']; } + // workaround for an incompatibility with html5-validation if (textareas[i].getAttribute("required") !== '') { textareas[i].removeAttribute("required") } - var textAreaId = textareas[i].getAttribute('id'); + const textAreaId = textareas[i].getAttribute('id'); if (textAreaId === '' || textAreaId === null) { textareas[i].setAttribute("id", "tinymce_" + Math.random().toString(36).substr(2)); } + // Add custom buttons to current editor if (typeof options.tinymce_buttons == 'object') { settings.setup = function(editor) { - for (var buttonId in options.tinymce_buttons) { + + //icons; + for (const iconId in options.tinymce_icons) { + if (!options.tinymce_icons.hasOwnProperty(iconId)) continue; + + (function (id, opts) { + editor.ui.registry.addIcon(opts.name_icon, opts.svg_data); + })(iconId, clone(options.tinymce_icons[iconId])); + } + + ///buttons + for (const buttonId in options.tinymce_buttons) { if (!options.tinymce_buttons.hasOwnProperty(buttonId)) continue; // Some tricky function to isolate variables values - (function(id, opts) { - opts.onclick = function() { - var callback = window['tinymce_button_' + id]; + (function (id, opts) { + opts.onAction = function () { + const callback = window['tinymce_button_' + id + '_action']; if (typeof callback == 'function') { callback(editor); } else { - alert('You have to create callback function: "tinymce_button_' + id + '"'); + alert('You have to create callback function: "tinymce_button_' + id + '_action"'); + } + }; + opts.onSetup = function (buttonApi) { + const callback = window['tinymce_button_' + id + '_setup']; + if (typeof callback == 'function') { + callback(buttonApi, editor); } } - editor.addButton(id, opts); + + editor.ui.registry.addButton(id, opts); })(buttonId, clone(options.tinymce_buttons[buttonId])); } //Init Event if (options.use_callback_tinymce_init) { editor.on('init', function() { - var callback = window['callback_tinymce_init']; + const callback = window['callback_tinymce_init']; if (typeof callback == 'function') { callback(editor); } else { @@ -99,48 +153,87 @@ function initTinyMCE(options) { } } } + // Initialize textarea by its ID attribute - tinymce - .createEditor(textareas[i].getAttribute('id'), settings) - .render(); + const editor = tinymce + .createEditor(textareas[i].getAttribute('id'), settings); + editor.render(); + editors.push(editor); } + resolver(editors.length > 1 ? editors : editors[0]); }); + + return prom; } /** - * Get elements by class name - * - * @param classname - * @param node + * @param selector + * @param textareas */ -function getElementsByClassName(classname, node) { - var elements = document.getElementsByTagName(node), - array = [], - re = new RegExp('\\b' + classname + '\\b'); - for (var i = 0, j = elements.length; i < j; i++) { - if (re.test(elements[i].className)) array.push(elements[i]); +function processSelector(selector, textareas) { + let elements; + if(typeof selector === "string") { + switch (selector.substring(0, 1)) { + case "#": + const _t = document.getElementById(selector.substring(1)); + if (_t) textareas.push(_t); + break; + case ".": + elements = document.getElementsByClassName(selector.substring(1)); + for (element of elements) { + textareas.push(element); + } + break; + default: + elements = document.querySelectorAll(selector); + for (element of elements) { + textareas.push(element); + } + } + } else { + textareas.push(selector); } - return array; + return textareas; } /** * Clone object * - * @param o + * @param obj */ -function clone(o) { - if (!o || "object" !== typeof o) { - return o; +function clone(obj) { + if (!obj || "object" !== typeof obj) { + return obj; } - var c = "function" === typeof o.pop ? [] : {}, p, v; - for (p in o) { - if (o.hasOwnProperty(p)) { - v = o[p]; - if (v && "object" === typeof v) { - c[p] = clone(v); + let objToReturn = "function" === typeof obj.pop ? [] : {}; + for (const property in obj) { + if (obj.hasOwnProperty(property)) { + const value = obj[property]; + if (value && "object" === typeof value) { + objToReturn[property] = clone(value); } - else c[p] = v; + else objToReturn[property] = value; } } - return c; + return objToReturn; +} + +function humanFileSize(bytes, si = false, dp = 1) { + const thresh = si ? 1000 : 1024; + + if (Math.abs(bytes) < thresh) { + return bytes + ' B'; + } + + const units = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + let u = -1; + const r = 10**dp; + + do { + bytes /= thresh; + ++u; + } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1); + + + return bytes.toFixed(dp) + ' ' + units[u]; } diff --git a/Resources/public/vendor/tinymce/changelog.txt b/Resources/public/vendor/tinymce/changelog.txt index cba0afaf..e5fe6b6b 100644 --- a/Resources/public/vendor/tinymce/changelog.txt +++ b/Resources/public/vendor/tinymce/changelog.txt @@ -1,676 +1,1603 @@ +Version 5.3.2 (2020-06-10) + Fixed a regression introduced in 5.3.0, where `images_dataimg_filter` was no-longer called #TINY-6086 +Version 5.3.1 (2020-05-27) + Fixed the image upload error alert also incorrectly closing the image dialog #TINY-6020 + Fixed editor content scrolling incorrectly on focus in Firefox by reverting default content CSS html and body heights added in 5.3.0 #TINY-6019 +Version 5.3.0 (2020-05-21) + Added html and body height styles to the default oxide content CSS #TINY-5978 + Added `uploadUri` and `blobInfo` to the data returned by `editor.uploadImages()` #TINY-4579 + Added a new function to the `BlobCache` API to lookup a blob based on the base64 data and mime type #TINY-5988 + Added the ability to search and replace within a selection #TINY-4549 + Added the ability to set the list start position for ordered lists and added new `lists` context menu item #TINY-3915 + Added `icon` as an optional config option to the toggle menu item API #TINY-3345 + Added `auto` mode for `toolbar_location` which positions the toolbar and menu bar at the bottom if there is no space at the top #TINY-3161 + Changed the default `toolbar_location` to `auto` #TINY-3161 + Changed toggle menu items and choice menu items to have a dedicated icon with the checkmark displayed on the far right side of the menu item #TINY-3345 + Changed the `link`, `image`, and `paste` plugins to use Promises to reduce the bundle size #TINY-4710 + Changed the default icons to be lazy loaded during initialization #TINY-4729 + Changed the parsing of content so base64 encoded urls are converted to blob urls #TINY-4727 + Changed context toolbars so they concatenate when more than one is suitable for the current selection #TINY-4495 + Changed inline style element formats (strong, b, em, i, u, strike) to convert to a span on format removal if a `style` or `class` attribute is present #TINY-4741 + Fixed the `selection.setContent()` API not running parser filters #TINY-4002 + Fixed formats incorrectly applied or removed when table cells were selected #TINY-4709 + Fixed the `quickimage` button not restricting the file types to images #TINY-4715 + Fixed search and replace ignoring text in nested contenteditable elements #TINY-5967 + Fixed resize handlers displaying in the wrong location sometimes for remote images #TINY-4732 + Fixed table picker breaking in Firefox on low zoom levels #TINY-4728 + Fixed issue with loading or pasting contents with large base64 encoded images on Safari #TINY-4715 + Fixed supplementary special characters being truncated when inserted into the editor. Patch contributed by mlitwin. #TINY-4791 + Fixed toolbar buttons not set to disabled when the editor is in readonly mode #TINY-4592 + Fixed the editor selection incorrectly changing when removing caret format containers #TINY-3438 + Fixed bug where title, width, and height would be set to empty string values when updating an image and removing those attributes using the image dialog #TINY-4786 + Fixed `ObjectResized` event firing when an object wasn't resized #TINY-4161 + Fixed `ObjectResized` and `ObjectResizeStart` events incorrectly fired when adding or removing table rows and columns #TINY-4829 + Fixed the placeholder not hiding when pasting content into the editor #TINY-4828 + Fixed an issue where the editor would fail to load if local storage was disabled #TINY-5935 + Fixed an issue where an uploaded image would reuse a cached image with a different mime type #TINY-5988 + Fixed bug where toolbars and dialogs would not show if the body element was replaced (e.g. with Turbolinks). Patch contributed by spohlenz #GH-5653 + Fixed an issue where multiple formats would be removed when removing a single format at the end of lines or on empty lines #TINY-1170 + Fixed zero-width spaces incorrectly included in the `wordcount` plugin character count #TINY-5991 + Fixed a regression introduced in 5.2.0 whereby the desktop `toolbar_mode` setting would incorrectly override the mobile default setting #TINY-5998 + Fixed an issue where deleting all content in a single cell table would delete the entire table #TINY-1044 +Version 5.2.2 (2020-04-23) + Fixed an issue where anchors could not be inserted on empty lines #TINY-2788 + Fixed text decorations (underline, strikethrough) not consistently inheriting the text color #TINY-4757 + Fixed `format` menu alignment buttons inconsistently applying to images #TINY-4057 + Fixed the floating toolbar drawer height collapsing when the editor is rendered in modal dialogs or floating containers #TINY-4837 + Fixed `media` embed content not processing safely in some cases #TINY-4857 +Version 5.2.1 (2020-03-25) + Fixed the "is decorative" checkbox in the image dialog clearing after certain dialog events #FOAM-11 + Fixed possible uncaught exception when a `style` attribute is removed using a content filter on `setContent` #TINY-4742 + Fixed the table selection not functioning correctly in Microsoft Edge 44 or higher #TINY-3862 + Fixed the table resize handles not functioning correctly in Microsoft Edge 44 or higher #TINY-4160 + Fixed the floating toolbar drawer disconnecting from the toolbar when adding content in inline mode #TINY-4725 #TINY-4765 + Fixed `readonly` mode not returning the appropriate boolean value #TINY-3948 + Fixed the `forced_root_block_attrs` setting not applying attributes to new blocks consistently #TINY-4564 + Fixed the editor incorrectly stealing focus during initialization in Microsoft Internet Explorer #TINY-4697 + Fixed dialogs stealing focus when opening an alert or confirm dialog using an `onAction` callback #TINY-4014 + Fixed inline dialogs incorrectly closing when clicking on an opened alert or confirm dialog #TINY-4012 + Fixed the context toolbar overlapping the menu bar and toolbar #TINY-4586 + Fixed notification and inline dialog positioning issues when using `toolbar_location: 'bottom'` #TINY-4586 + Fixed the `colorinput` popup appearing offscreen on mobile devices #TINY-4711 + Fixed special characters not being found when searching by "whole words only" #TINY-4522 + Fixed an issue where dragging images could cause them to be duplicated #TINY-4195 + Fixed context toolbars activating without the editor having focus #TINY-4754 + Fixed an issue where removing the background color of text did not always work #TINY-4770 + Fixed an issue where new rows and columns in a table did not retain the style of the previous row or column #TINY-4788 +Version 5.2.0 (2020-02-13) + Added the ability to apply formats to spaces #TINY-4200 + Added new `toolbar_location` setting to allow for positioning the menu and toolbar at the bottom of the editor #TINY-4210 + Added new `toolbar_groups` setting to allow a custom floating toolbar group to be added to the toolbar when using `floating` toolbar mode #TINY-4229 + Added new `link_default_protocol` setting to `link` and `autolink` plugin to allow a protocol to be used by default #TINY-3328 + Added new `placeholder` setting to allow a placeholder to be shown when the editor is empty #TINY-3917 + Added new `tinymce.dom.TextSeeker` API to allow searching text across different DOM nodes #TINY-4200 + Added a drop shadow below the toolbar while in sticky mode and introduced Oxide variables to customize it when creating a custom skin #TINY-4343 + Added `quickbars_image_toolbar` setting to allow for the image quickbar to be turned off #TINY-4398 + Added iframe and img `loading` attribute to the default schema. Patch contributed by ataylor32. #GH-5112 + Added new `getNodeFilters`/`getAttributeFilters` functions to the `editor.serializer` instance #TINY-4344 + Added new `a11y_advanced_options` setting to allow additional accessibility options to be added #FOAM-11 + Added new accessibility options and behaviours to the image dialog using `a11y_advanced_options` #FOAM-11 + Added the ability to use the window `PrismJS` instance for the `codesample` plugin instead of the bundled version to allow for styling custom languages #TINY-4504 + Added error message events that fire when a resource loading error occurs #TINY-4509 + Changed the default schema to disallow `onchange` for select elements #TINY-4614 + Changed default `toolbar_mode` value from false to `wrap`. The value false has been deprecated #TINY-4617 + Changed `toolbar_drawer` setting to `toolbar_mode`. `toolbar_drawer` has been deprecated #TINY-4416 + Changed iframe mode to set selection on content init if selection doesn't exist #TINY-4139 + Changed table related icons to align them with the visual style of the other icons #TINY-4341 + Changed and improved the visual appearance of the color input field #TINY-2917 + Changed fake caret container to use `forced_root_block` when possible #TINY-4190 + Changed the `requireLangPack` API to wait until the plugin has been loaded before loading the language pack #TINY-3716 + Changed the formatter so `style_formats` are registered before the initial content is loaded into the editor #TINY-4238 + Changed media plugin to use https protocol for media urls by default #TINY-4577 + Changed the parser to treat CDATA nodes as bogus HTML comments to match the HTML parsing spec. A new `preserve_cdata` setting has been added to preserve CDATA nodes if required #TINY-4625 + Fixed incorrect parsing of malformed/bogus HTML comments #TINY-4625 + Fixed `quickbars` selection toolbar appearing on non-editable elements #TINY-4359 + Fixed bug with alignment toolbar buttons sometimes not changing state correctly #TINY-4139 + Fixed the `codesample` toolbar button not toggling when selecting code samples other than HTML #TINY-4504 + Fixed content incorrectly scrolling to the top or bottom when pressing enter if when the content was already in view #TINY-4162 + Fixed `scrollIntoView` potentially hiding elements behind the toolbar #TINY-4162 + Fixed editor not respecting the `resize_img_proportional` setting due to legacy code #TINY-4236 + Fixed flickering floating toolbar drawer in inline mode #TINY-4210 + Fixed an issue where the template plugin dialog would be indefinitely blocked on a failed template load #TINY-2766 + Fixed the `mscontrolselect` event not being unbound on IE/Edge #TINY-4196 + Fixed Confirm dialog footer buttons so only the "Yes" button is highlighted #TINY-4310 + Fixed `file_picker_callback` functionality for Image, Link and Media plugins #TINY-4163 + Fixed issue where floating toolbar drawer sometimes would break if the editor is resized while the drawer is open #TINY-4439 + Fixed incorrect `external_plugins` loading error message #TINY-4503 + Fixed resize handler was not hidden for ARIA purposes. Patch contributed by Parent5446. #GH-5195 + Fixed an issue where content could be lost if a misspelled word was selected and spellchecking was disabled #TINY-3899 + Fixed validation errors in the CSS where certain properties had the wrong default value #TINY-4491 + Fixed an issue where forced root block attributes were not applied when removing a list #TINY-4272 + Fixed an issue where the element path isn't being cleared when there are no parents #TINY-4412 + Fixed an issue where width and height in svg icons containing `rect` elements were overridden by the CSS reset #TINY-4408 + Fixed an issue where uploading images with `images_reuse_filename` enabled and that included a query parameter would generate an invalid URL #TINY-4638 + Fixed the `closeButton` property not working when opening notifications #TINY-4674 + Fixed keyboard flicker when opening a context menu on mobile #TINY-4540 + Fixed issue where plus icon svg contained strokes #TINY-4681 +Version 5.1.6 (2020-01-28) + Fixed `readonly` mode not blocking all clicked links #TINY-4572 + Fixed legacy font sizes being calculated inconsistently for the `FontSize` query command value #TINY-4555 + Fixed changing a tables row from `Header` to `Body` incorrectly moving the row to the bottom of the table #TINY-4593 + Fixed the context menu not showing in certain cases with hybrid devices #TINY-4569 + Fixed the context menu opening in the wrong location when the target is the editor body #TINY-4568 + Fixed the `image` plugin not respecting the `automatic_uploads` setting when uploading local images #TINY-4287 + Fixed security issue related to parsing HTML comments and CDATA #TINY-4544 +Version 5.1.5 (2019-12-19) + Fixed the UI not working with hybrid devices that accept both touch and mouse events #TNY-4521 + Fixed the `charmap` dialog initially focusing the first tab of the dialog instead of the search input field #TINY-4342 + Fixed an exception being raised when inserting content if the caret was directly before or after a `contenteditable="false"` element #TINY-4528 + Fixed a bug with pasting image URLs when paste as text is enabled #TINY-4523 +Version 5.1.4 (2019-12-11) + Fixed dialog contents disappearing when clicking a checkbox for right-to-left languages #TINY-4518 + Fixed the `legacyoutput` plugin registering legacy formats after editior initialization, causing legacy content to be stripped on the initial load #TINY-4447 + Fixed search and replace not cycling through results when searching using special characters #TINY-4506 + Fixed the `visualchars` plugin converting HTML-like text to DOM elements in certain cases #TINY-4507 + Fixed an issue with the `paste` plugin not sanitizing content in some cases #TINY-4510 + Fixed HTML comments incorrectly being parsed in certain cases #TINY-4511 +Version 5.1.3 (2019-12-04) + Fixed sticky toolbar not undocking when fullscreen mode is activated #TINY-4390 + Fixed the "Current Window" target not applying when updating links using the link dialog #TINY-4063 + Fixed disabled menu items not highlighting when focused #TINY-4339 + Fixed touch events passing through dialog collection items to the content underneath on Android devices #TINY-4431 + Fixed keyboard navigation of the Help dialog's Keyboard Navigation tab #TINY-4391 + Fixed search and replace dialog disappearing when finding offscreen matches on iOS devices #TINY-4350 + Fixed performance issues where sticky toolbar was jumping while scrolling on slower browsers #TINY-4475 +Version 5.1.2 (2019-11-19) + Fixed desktop touch devices using `mobile` configuration overrides #TINY-4345 + Fixed unable to disable the new scrolling toolbar feature #TINY-4345 + Fixed touch events passing through any pop-up items to the content underneath on Android devices #TINY-4367 + Fixed the table selector handles throwing JavaScript exceptions for non-table selections #TINY-4338 + Fixed `cut` operations not removing selected content on Android devices when the `paste` plugin is enabled #TINY-4362 + Fixed inline toolbar not constrained to the window width by default #TINY-4314 + Fixed context toolbar split button chevrons pointing right when they should be pointing down #TINY-4257 + Fixed unable to access the dialog footer in tabbed dialogs on small screens #TINY-4360 + Fixed mobile table selectors were hard to select with touch by increasing the size #TINY-4366 + Fixed mobile table selectors moving when moving outside the editor #TINY-4366 + Fixed inline toolbars collapsing when using sliding toolbars #TINY-4389 + Fixed block textpatterns not treating NBSPs as spaces #TINY-4378 + Fixed backspace not merging blocks when the last element in the preceding block was a `contenteditable="false"` element #TINY-4235 + Fixed toolbar buttons that only contain text labels overlapping on mobile devices #TINY-4395 + Fixed quickbars quickimage picker not working on mobile #TINY-4377 + Fixed fullscreen not resizing in an iOS WKWebView component #TINY-4413 +Version 5.1.1 (2019-10-28) + Fixed font formats containing spaces being wrapped in `"` entities instead of single quotes #TINY-4275 + Fixed alert and confirm dialogs losing focus when clicked #TINY-4248 + Fixed clicking outside a modal dialog focusing on the document body #TINY-4249 + Fixed the context toolbar not hiding when scrolled out of view #TINY-4265 +Version 5.1.0 (2019-10-17) + Added touch selector handles for table selections on touch devices #TINY-4097 + Added border width field to Table Cell dialog #TINY-4028 + Added touch event listener to media plugin to make embeds playable #TINY-4093 + Added oxide styling options to notifications and tweaked the default variables #TINY-4153 + Added additional padding to split button chevrons on touch devices, to make them easier to interact with #TINY-4223 + Added new platform detection functions to `Env` and deprecated older detection properties #TINY-4184 + Added `inputMode` config field to specify inputmode attribute of `input` dialog components #TINY-4062 + Added new `inputMode` property to relevant plugins/dialogs #TINY-4102 + Added new `toolbar_sticky` setting to allow the iframe menubar/toolbar to stick to the top of the window when scrolling #TINY-3982 + Changed default setting for `toolbar_drawer` to `floating` #TINY-3634 + Changed mobile phones to use the `silver` theme by default #TINY-3634 + Changed some editor settings to default to `false` on touch devices: + - `menubar`(phones only) #TINY-4077 + - `table_grid` #TINY-4075 + - `resize` #TINY-4157 + - `object_resizing` #TINY-4157 + Changed toolbars and context toolbars to sidescroll on mobile #TINY-3894 #TINY-4107 + Changed context menus to render as horizontal menus on touch devices #TINY-4107 + Changed the editor to use the `VisualViewport` API of the browser where possible #TINY-4078 + Changed visualblocks toolbar button icon and renamed `paragraph` icon to `visualchars` #TINY-4074 + Changed Oxide default for `@toolbar-button-chevron-color` to follow toolbar button icon color #TINY-4153 + Changed the `urlinput` dialog component to use the `url` type attribute #TINY-4102 + Fixed Safari desktop visual viewport fires resize on fullscreen breaking the restore function #TINY-3976 + Fixed scroll issues on mobile devices #TINY-3976 + Fixed context toolbar unable to refresh position on iOS12 #TINY-4107 + Fixed ctrl+left click not opening links on readonly mode and the preview dialog #TINY-4138 + Fixed Slider UI component not firing `onChange` event on touch devices #TINY-4092 + Fixed notifications overlapping instead of stacking #TINY-3478 + Fixed inline dialogs positioning incorrectly when the page is scrolled #TINY-4018 + Fixed inline dialogs and menus not repositioning when resizing #TINY-3227 + Fixed inline toolbar incorrectly stretching to the full width when a width value was provided #TINY-4066 + Fixed menu chevrons color to follow the menu text color #TINY-4153 + Fixed table menu selection grid from staying black when using dark skins, now follows border color #TINY-4153 + Fixed Oxide using the wrong text color variable for menubar button focused state #TINY-4146 + Fixed the autoresize plugin not keeping the selection in view when resizing #TINY-4094 + Fixed textpattern plugin throwing exceptions when using `forced_root_block: false` #TINY-4172 + Fixed missing CSS fill styles for toolbar button icon active state #TINY-4147 + Fixed an issue where the editor selection could end up inside a short ended element (such as `br`) #TINY-3999 + Fixed browser selection being lost in inline mode when opening split dropdowns #TINY-4197 + Fixed backspace throwing an exception when using `forced_root_block: false` #TINY-4099 + Fixed floating toolbar drawer expanding outside the bounds of the editor #TINY-3941 + Fixed the autocompleter not activating immediately after a `br` or `contenteditable=false` element #TINY-4194 + Fixed an issue where the autocompleter would incorrectly close on IE 11 in certain edge cases #TINY-4205 +Version 5.0.16 (2019-09-24) + Added new `referrer_policy` setting to add the `referrerpolicy` attribute when loading scripts or stylesheets #TINY-3978 + Added a slight background color to dialog tab links when focused to aid keyboard navigation #TINY-3877 + Fixed media poster value not updating on change #TINY-4013 + Fixed openlink was not registered as a toolbar button #TINY-4024 + Fixed failing to initialize if a script tag was used inside a SVG #TINY-4087 + Fixed double top border showing on toolbar without menubar when toolbar_drawer is enabled #TINY-4118 + Fixed unable to drag inline dialogs to the bottom of the screen when scrolled #TINY-4154 + Fixed notifications appearing on top of the toolbar when scrolled in inline mode #TINY-4159 + Fixed notifications displaying incorrectly on IE 11 #TINY-4169 +Version 5.0.15 (2019-09-02) + Added a dark `content_css` skin to go with the dark UI skin #TINY-3743 + Changed the enabled state on toolbar buttons so they don't get the hover effect #TINY-3974 + Fixed missing CSS active state on toolbar buttons #TINY-3966 + Fixed `onChange` callback not firing for the colorinput dialog component #TINY-3968 + Fixed context toolbars not showing in fullscreen mode #TINY-4023 +Version 5.0.14 (2019-08-19) + Added an API to reload the autocompleter menu with additional fetch metadata #MENTIONS-17 + Fixed missing toolbar button border styling options #TINY-3965 + Fixed image upload progress notification closing before the upload is complete #TINY-3963 + Fixed inline dialogs not closing on escape when no dialog component is in focus #TINY-3936 + Fixed plugins not being filtered when defaulting to mobile on phones #TINY-3537 + Fixed toolbar more drawer showing the content behind it when transitioning between opened and closed states #TINY-3878 + Fixed focus not returning to the dialog after pressing the "Replace all" button in the search and replace dialog #TINY-3961 + Removed Oxide variable `@menubar-select-disabled-border-color` and replaced it with `@menubar-select-disabled-border` #TINY-3965 +Version 5.0.13 (2019-08-06) + Changed modal dialogs to prevent dragging by default and added new `draggable_modal` setting to restore dragging #TINY-3873 + Changed the nonbreaking plugin to insert nbsp characters wrapped in spans to aid in filtering. This can be disabled using the `nonbreaking_wrap` setting #TINY-3647 + Changed backspace behaviour in lists to outdent nested list items when the cursor is at the start of the list item #TINY-3651 + Fixed sidebar growing beyond editor bounds in IE 11 #TINY-3937 + Fixed issue with being unable to keyboard navigate disabled toolbar buttons #TINY-3350 + Fixed issues with backspace and delete in nested contenteditable true and false elements #TINY-3868 + Fixed issue with losing keyboard navigation in dialogs due to disabled buttons #TINY-3914 + Fixed `MouseEvent.mozPressure is deprecated` warning in Firefox #TINY-3919 + Fixed `default_link_target` not being respected when `target_list` is disabled #TINY-3757 + Fixed mobile plugin filter to only apply to the mobile theme, rather than all mobile platforms #TINY-3405 + Fixed focus switching to another editor during mode changes #TINY-3852 + Fixed an exception being thrown when clicking on an uninitialized inline editor #TINY-3925 + Fixed unable to keyboard navigate to dialog menu buttons #TINY-3933 + Fixed dialogs being able to be dragged outside the window viewport #TINY-3787 + Fixed inline dialogs appearing above modal dialogs #TINY-3932 +Version 5.0.12 (2019-07-18) + Added ability to utilize UI dialog panels inside other panels #TINY-3305 + Added help dialog tab explaining keyboard navigation of the editor #TINY-3603 + Changed the "Find and Replace" design to an inline dialog #TINY-3054 + Fixed issue where autolink spacebar event was not being fired on Edge #TINY-3891 + Fixed table selection missing the background color #TINY-3892 + Fixed removing shortcuts not working for function keys #TINY-3871 + Fixed non-descriptive UI component type names #TINY-3349 + Fixed UI registry components rendering as the wrong type when manually specifying a different type #TINY-3385 + Fixed an issue where dialog checkbox, input, selectbox, textarea and urlinput components couldn't be disabled #TINY-3708 + Fixed the context toolbar not using viable screen space in inline/distraction free mode #TINY-3717 + Fixed the context toolbar overlapping the toolbar in various conditions #TINY-3205 + Fixed IE11 edge case where items were being inserted into the wrong location #TINY-3884 +Version 5.0.11 (2019-07-04) + Fixed packaging errors caused by a rollup treeshaking bug (https://github.com/rollup/rollup/issues/2970) #TINY-3866 + Fixed the customeditor component not able to get data from the dialog api #TINY-3866 + Fixed collection component tooltips not being translated #TINY-3855 +Version 5.0.10 (2019-07-02) + Added support for all HTML color formats in `color_map` setting #TINY-3837 + Changed backspace key handling to outdent content in appropriate circumstances #TINY-3685 + Changed default palette for forecolor and backcolor to include some lighter colors suitable for highlights #TINY-2865 + Changed the search and replace plugin to cycle through results #TINY-3800 + Fixed inconsistent types causing some properties to be unable to be used in dialog components #TINY-3778 + Fixed an issue in the Oxide skin where dialog content like outlines and shadows were clipped because of overflow hidden #TINY-3566 + Fixed the search and replace plugin not resetting state when changing the search query #TINY-3800 + Fixed backspace in lists not creating an undo level #TINY-3814 + Fixed the editor to cancel loading in quirks mode where the UI is not supported #TINY-3391 + Fixed applying fonts not working when the name contained spaces and numbers #TINY-3801 + Fixed so that initial content is retained when initializing on list items #TINY-3796 + Fixed inefficient font name and font size current value lookup during rendering #TINY-3813 + Fixed mobile font copied into the wrong folder for the oxide-dark skin #TINY-3816 + Fixed an issue where resizing the width of tables would produce inaccurate results #TINY-3827 + Fixed a memory leak in the Silver theme #TINY-3797 + Fixed alert and confirm dialogs using incorrect markup causing inconsistent padding #TINY-3835 + Fixed an issue in the Table plugin with `table_responsive_width` not enforcing units when resizing #TINY-3790 + Fixed leading, trailing and sequential spaces being lost when pasting plain text #TINY-3726 + Fixed exception being thrown when creating relative URIs #TINY-3851 + Fixed focus is no longer set to the editor content during mode changes unless the editor already had focus #TINY-3852 +Version 5.0.9 (2019-06-26) + Fixed print plugin not working in Firefox #TINY-3834 +Version 5.0.8 (2019-06-18) + Added back support for multiple toolbars #TINY-2195 + Added support for .m4a files to the media plugin #TINY-3750 + Added new base_url and suffix editor init options #TINY-3681 + Fixed incorrect padding for select boxes with visible values #TINY-3780 + Fixed selection incorrectly changing when programmatically setting selection on contenteditable false elements #TINY-3766 + Fixed sidebar background being transparent #TINY-3727 + Fixed the build to remove duplicate iife wrappers #TINY-3689 + Fixed bogus autocompleter span appearing in content when the autocompleter menu is shown #TINY-3752 + Fixed toolbar font size select not working with legacyoutput plugin #TINY-2921 + Fixed the legacyoutput plugin incorrectly aligning images #TINY-3660 + Fixed remove color not working when using the legacyoutput plugin #TINY-3756 + Fixed the font size menu applying incorrect sizes when using the legacyoutput plugin #TINY-3773 + Fixed scrollIntoView not working when the parent window was out of view #TINY-3663 + Fixed the print plugin printing from the wrong window in IE11 #TINY-3762 + Fixed content CSS loaded over CORS not loading in the preview plugin with content_css_cors enabled #TINY-3769 + Fixed the link plugin missing the default "None" option for link list #TINY-3738 + Fixed small dot visible with menubar and toolbar disabled in inline mode #TINY-3623 + Fixed space key properly inserts a nbsp before/after block elements #TINY-3745 + Fixed native context menu not showing with images in IE11 #TINY-3392 + Fixed inconsistent browser context menu image selection #TINY-3789 +Version 5.0.7 (2019-06-05) + Added new toolbar button and menu item for inserting tables via dialog #TINY-3636 + Added new API for adding/removing/changing tabs in the Help dialog #TINY-3535 + Added highlighting of matched text in autocompleter items #TINY-3687 + Added the ability for autocompleters to work with matches that include spaces #TINY-3704 + Added new `imagetools_fetch_image` callback to allow custom implementations for cors loading of images #TINY-3658 + Added `'http'` and `https` options to `link_assume_external_targets` to prepend `http://` or `https://` prefixes when URL does not contain a protocol prefix. Patch contributed by francoisfreitag. #GH-4335 + Changed annotations navigation to work the same as inline boundaries #TINY-3396 + Changed tabpanel API by adding a `name` field and changing relevant methods to use it #TINY-3535 + Fixed text color not updating all color buttons when choosing a color #TINY-3602 + Fixed the autocompleter not working with fragmented text #TINY-3459 + Fixed the autosave plugin no longer overwrites window.onbeforeunload #TINY-3688 + Fixed infinite loop in the paste plugin when IE11 takes a long time to process paste events. Patch contributed by lRawd. #GH-4987 + Fixed image handle locations when using `fixed_toolbar_container`. Patch contributed by t00. #GH-4966 + Fixed the autoresize plugin not firing `ResizeEditor` events #TINY-3587 + Fixed editor in fullscreen mode not extending to the bottom of the screen #TINY-3701 + Fixed list removal when pressing backspace after the start of the list item #TINY-3697 + Fixed autocomplete not triggering from compositionend events #TINY-3711 + Fixed `file_picker_callback` could not set the caption field on the insert image dialog #TINY-3172 + Fixed the autocompleter menu showing up after a selection had been made #TINY-3718 + Fixed an exception being thrown when a file or number input has focus during initialization. Patch contributed by t00 #GH-2194 +Version 5.0.6 (2019-05-22) + Added `icons_url` editor settings to enable icon packs to be loaded from a custom url #TINY-3585 + Added `image_uploadtab` editor setting to control the visibility of the upload tab in the image dialog #TINY-3606 + Added new api endpoints to the wordcount plugin and improved character count logic #TINY-3578 + Changed plugin, language and icon loading errors to log in the console instead of a notification #TINY-3585 + Fixed the textpattern plugin not working with fragmented text #TINY-3089 + Fixed various toolbar drawer accessibility issues and added an animation #TINY-3554 + Fixed issues with selection and ui components when toggling readonly mode #TINY-3592 + Fixed so readonly mode works with inline editors #TINY-3592 + Fixed docked inline toolbar positioning when scrolled #TINY-3621 + Fixed initial value not being set on bespoke select in quickbars and toolbar drawer #TINY-3591 + Fixed so that nbsp entities aren't trimmed in white-space: pre-line elements #TINY-3642 + Fixed `mceInsertLink` command inserting spaces instead of url encoded characters #GH-4990 + Fixed text content floating on top of dialogs in IE11 #TINY-3640 +Version 5.0.5 (2019-05-09) + Added menu items to match the forecolor/backcolor toolbar buttons #TINY-2878 + Added default directionality based on the configured language #TINY-2621 + Added styles, icons and tests for rtl mode #TINY-2621 + Fixed autoresize not working with floating elements or when media elements finished loading #TINY-3545 + Fixed incorrect vertical caret positioning in IE 11 #TINY-3188 + Fixed submenu anchoring hiding overflowed content #TINY-3564 + Removed unused and hidden validation icons to avoid displaying phantom tooltips #TINY-2329 +Version 5.0.4 (2019-04-23) + Added back URL dialog functionality, which is now available via `editor.windowManager.openUrl()` #TINY-3382 + Added the missing throbber functionality when calling `editor.setProgressState(true)` #TINY-3453 + Added function to reset the editor content and undo/dirty state via `editor.resetContent()` #TINY-3435 + Added the ability to set menu buttons as active #TINY-3274 + Added `editor.mode` API, featuring a custom editor mode API #TINY-3406 + Added better styling to floating toolbar drawer #TINY-3479 + Added the new premium plugins to the Help dialog plugins tab #TINY-3496 + Added the linkchecker context menu items to the default configuration #TINY-3543 + Fixed image context menu items showing on placeholder images #TINY-3280 + Fixed dialog labels and text color contrast within notifications/alert banners to satisfy WCAG 4.5:1 contrast ratio for accessibility #TINY-3351 + Fixed selectbox and colorpicker items not being translated #TINY-3546 + Fixed toolbar drawer sliding mode to correctly focus the editor when tabbing via keyboard navigation #TINY-3533 + Fixed positioning of the styleselect menu in iOS while using the mobile theme #TINY-3505 + Fixed the menubutton `onSetup` callback to be correctly executed when rendering the menu buttons #TINY-3547 + Fixed `default_link_target` setting to be correctly utilized when creating a link #TINY-3508 + Fixed colorpicker floating marginally outside its container #TINY-3026 + Fixed disabled menu items displaying as active when hovered #TINY-3027 + Removed redundant mobile wrapper #TINY-3480 +Version 5.0.3 (2019-03-19) + Changed empty nested-menu items within the style formats menu to be disabled or hidden if the value of `style_formats_autohide` is `true` #TINY-3310 + Changed the entire phrase 'Powered by Tiny' in the status bar to be a link instead of just the word 'Tiny' #TINY-3366 + Changed `formatselect`, `styleselect` and `align` menus to use the `mceToggleFormat` command internally #TINY-3428 + Fixed toolbar keyboard navigation to work as expected when `toolbar_drawer` is configured #TINY-3432 + Fixed text direction buttons to display the correct pressed state in selections that have no explicit `dir` property #TINY-3138 + Fixed the mobile editor to clean up properly when removed #TINY-3445 + Fixed quickbar toolbars to add an empty box to the screen when it is set to `false` #TINY-3439 + Fixed an issue where pressing the **Delete/Backspace** key at the edge of tables was creating incorrect selections #TINY-3371 + Fixed an issue where dialog collection items (emoticon and special character dialogs) couldn't be selected with touch devices #TINY-3444 + Fixed a type error introduced in TinyMCE version 5.0.2 when calling `editor.getContent()` with nested bookmarks #TINY-3400 + Fixed an issue that prevented default icons from being overridden #TINY-3449 + Fixed an issue where **Home/End** keys wouldn't move the caret correctly before or after `contenteditable=false` inline elements #TINY-2995 + Fixed styles to be preserved in IE 11 when editing via the `fullpage` plugin #TINY-3464 + Fixed the `link` plugin context toolbar missing the open link button #TINY-3461 + Fixed inconsistent dialog component spacing #TINY-3436 +Version 5.0.2 (2019-03-05) + Added presentation and document presets to `htmlpanel` dialog component #TINY-2694 + Added missing fixed_toolbar_container setting has been reimplemented in the Silver theme #TINY-2712 + Added a new toolbar setting `toolbar_drawer` that moves toolbar groups which overflow the editor width into either a `sliding` or `floating` toolbar section #TINY-2874 + Updated the build process to include package lock files in the dev distribution archive #TINY-2870 + Fixed inline dialogs did not have aria attributes #TINY-2694 + Fixed default icons are now available in the UI registry, allowing use outside of toolbar buttons #TINY-3307 + Fixed a memory leak related to select toolbar items #TINY-2874 + Fixed a memory leak due to format changed listeners that were never unbound #TINY-3191 + Fixed an issue where content may have been lost when using permanent bookmarks #TINY-3400 + Fixed the quicklink toolbar button not rendering in the quickbars plugin #TINY-3125 + Fixed an issue where menus were generating invalid HTML in some cases #TINY-3323 + Fixed an issue that could cause the mobile theme to show a blank white screen when the editor was inside an `overflow:hidden` element #TINY-3407 + Fixed mobile theme using a transparent background and not taking up the full width on iOS #TINY-3414 + Fixed the template plugin dialog missing the description field #TINY-3337 + Fixed input dialog components using an invalid default type attribute #TINY-3424 + Fixed an issue where backspace/delete keys after/before pagebreak elements wouldn't move the caret #TINY-3097 + Fixed an issue in the table plugin where menu items and toolbar buttons weren't showing correctly based on the selection #TINY-3423 + Fixed inconsistent button focus styles in Firefox #TINY-3377 + Fixed the resize icon floating left when all status bar elements were disabled #TINY-3340 + Fixed the resize handle to not show in fullscreen mode #TINY-3404 +Version 5.0.1 (2019-02-21) + Removed paste as text notification banner and paste_plaintext_inform setting #POW-102 + Fixed an issue where adding links to images would replace the image with text #TINY-3356 + Fixed an issue where the inline editor could use fractional pixels for positioning #TINY-3202 + Fixed an issue where uploading non-image files in the Image Plugin upload tab threw an error. #TINY-3244 + Added H1-H6 toggle button registration to the silver theme #TINY-3070 + Fixed an issue in the media plugin that was causing the source url and height/width to be lost in certain circumstances #TINY-2858 + Fixed an issue with the Context Toolbar not being removed when clicking outside of the editor #TINY-2804 + Fixed an issue where clicking 'Remove link' wouldn't remove the link in certain circumstances #TINY-3199 + Added code sample toolbar button will now toggle on when the cursor is in a code section #TINY-3040 + Fixed an issue where the media plugin would fail when parsing dialog data #TINY-3218 + Fixed an issue where retrieving the selected content as text didn't create newlines #TINY-3197 + Fixed incorrect keyboard shortcuts in the Help dialog for Windows #TINY-3292 + Fixed an issue where JSON serialization could produce invalid JSON #TINY-3281 + Fixed production CSS including references to source maps #TINY-3920 + Fixed development CSS was not included in the development zip #TINY-3920 + Fixed the autocompleter matches predicate not matching on the start of words by default #TINY-3306 + Added new settings to the emoticons plugin to allow additional emoticons to be added #TINY-3088 + Fixed an issue where the page could be scrolled with modal dialogs open #TINY-2252 + Fixed an issue where autocomplete menus would show an icon margin when no items had icons #TINY-3329 + Fixed an issue in the quickbars plugin where images incorrectly showed the text selection toolbar #TINY-3338 + Fixed an issue that caused the inline editor to fail to render when the target element already had focus #TINY-3353 +Version 5.0.0 (2019-02-04) + Full documentation for the version 5 features and changes is available at https://www.tiny.cloud/docs/release-notes/ + + Changes since RC2: + Fixed an issue where tab panel heights weren't sizing properly on smaller screens and weren't updating on resize #TINY-3242 + Added links and registered names with * to denote premium plugins in Plugins tab of Help dialog #TINY-3223 + Changed Tiny 5 mobile skin to look more uniform with desktop #TINY-2650 + Fixed image tools not having any padding between the label and slider #TINY-3220 + Blacklisted table, th and td as inline editor target #TINY-717 + Fixed context toolbar toggle buttons not showing the correct state #TINY-3022 + Fixed missing separators in the spellchecker context menu between the suggestions and actions #TINY-3217 + Fixed notification icon positioning in alert banners #TINY-2196 + Fixed a typo in the word count plugin name #TINY-3062 + Fixed charmap and emoticons dialogs not having a primary button #TINY-3233 + Fixed an issue where resizing wouldn't work correctly depending on the box-sizing model #TINY-3278 +Version 5.0.0-rc-2 (2019-01-22) + Fixed the link dialog such that it will now retain class attributes when updating links #TINY-2825 + Added screen reader accessibility for sidebar and statusbar #TINY-2699 + Updated Emoticons and Charmap dialogs to be screen reader accessible #TINY-2693 + Fixed "Find and replace" not showing in the "Edit" menu by default #TINY-3061 + Updated the textpattern plugin to properly support nested patterns and to allow running a command with a value for a pattern with a start and an end #TINY-2991 + Removed unnecessary 'flex' and unused 'colspan' properties from the new dialog APIs #TINY-2973 + Changed checkboxes to use a boolean for its state, instead of a string #TINY-2848 + Fixed dropdown buttons missing the 'type' attribute, which could cause forms to be incorrectly submitted #TINY-2826 + Fixed emoticon and charmap search not returning expected results in certain cases #TINY-3084 + Changed formatting menus so they are registered and made the align toolbar button use an icon instead of text #TINY-2880 + Fixed blank rel_list values throwing an exception in the link plugin #TINY-3149 +Version 5.0.0-rc-1 (2019-01-08) + Updated the font select dropdown logic to try to detect the system font stack and show "System Font" as the font name #TINY-2710 + Fixed readonly mode not fully disabling editing content #TINY-2287 + Updated the autocompleter to only show when it has matched items #TINY-2350 + Added editor settings functionality to specify title attributes for toolbar groups #TINY-2690 + Added icons instead of button text to improve Search and Replace dialog footer appearance #TINY-2654 + Added `tox-dialog__table` instead of `mce-table-striped` class to enhance Help dialog appearance #TINY-2360 + Added title attribute to iframes so, screen readers can announce iframe labels #TINY-2692 + Updated SizeInput labels to "Height" and "Width" instead of Dimensions #TINY-2833 + Fixed accessibility issues with the font select, font size, style select and format select toolbar dropdowns #TINY-2713 + Fixed accessibility issues with split dropdowns #TINY-2697 + Added a wordcount menu item, that defaults to appearing in the tools menu #TINY-2877 + Fixed the legacyoutput plugin to be compatible with TinyMCE 5.0 #TINY-2301 + Updated the build process to minify and generate ASCII only output for the emoticons database #TINY-2744 + Fixed icons not showing correctly in the autocompleter popup #TINY-3029 + Fixed an issue where preview wouldn't show anything in Edge under certain circumstances #TINY-3035 + Fixed the height being incorrectly calculated for the autoresize plugin #TINY-2807 +Version 5.0.0-beta-1 (2018-11-30) + Changed the name of the "inlite" plugin to "quickbars" #TINY-2831 + Fixed an inline mode issue where the save plugin upon saving can cause content loss #TINY-2659 + Changed the background color icon to highlight background icon #TINY-2258 + Added a new `addNestedMenuItem()` UI registry function and changed all nested menu items to use the new registry functions #TINY-2230 + Changed Help dialog to be accessible to screen readers #TINY-2687 + Changed the color swatch to save selected custom colors to local storage for use across sessions #TINY-2722 + Added title attribute to color swatch colors #TINY-2669 + Added anchorbar component to anchor inline toolbar dialogs to instead of the toolbar #TINY-2040 + Added support for toolbar and toolbar array config options to be squashed into a single toolbar and not create multiple toolbars #TINY-2195 + Added error handling for when forced_root_block config option is set to true #TINY-2261 + Added functionality for the removed_menuitems config option #TINY-2184 + Fixed an issue in IE 11 where calling selection.getContent() would return an empty string when the editor didn't have focus #TINY-2325 + Added the ability to use a string to reference menu items in menu buttons and submenu items #TINY-2253 + Removed compat3x plugin #TINY-2815 + Changed `WindowManager` API - methods `getParams`, `setParams` and `getWindows`, and the legacy `windows` property, have been removed. `alert` and `confirm` dialogs are no longer tracked in the window list. #TINY-2603 +Version 5.0.0-preview-4 (2018-11-12) + Fixed distraction free plugin #AP-470 + Removed the tox-custom-editor class that was added to the wrapping element of codemirror #TINY-2211 + Fixed contents of the input field being selected on focus instead of just recieving an outline highlight #AP-464 + Added width and height placeholder text to image and media dialog dimensions input #AP-296 + Fixed styling issues with dialogs and menus in IE 11 #AP-456 + Fixed custom style format control not honoring custom formats #AP-393 + Fixed context menu not appearing when clicking an image with a caption #AP-382 + Fixed directionality of UI when using an RTL language #AP-423 + Fixed page responsiveness with multiple inline editors #AP-430 + Added the ability to keyboard navigate through menus, toolbars, sidebar and the status bar sequentially #AP-381 + Fixed empty toolbar groups appearing through invalid configuration of the `toolbar` property #AP-450 + Fixed text not being retained when updating links through the link dialog #AP-293 + Added translation capability back to the editor's UI #AP-282 + Fixed edit image context menu, context toolbar and toolbar items being incorrectly enabled when selecting invalid images #AP-323 + Fixed emoji type ahead being shown when typing URLs #AP-366 + Fixed toolbar configuration properties incorrectly expecting string arrays instead of strings #AP-342 + Changed the editor resize handle so that it should be disabled when the autoresize plugin is turned on #AP-424 + Fixed the block formatting toolbar item not showing a "Formatting" title when there is no selection #AP-321 + Fixed clicking disabled toolbar buttons hiding the toolbar in inline mode #AP-380 + Fixed `EditorResize` event not being fired upon editor resize #AP-327 + Fixed tables losing styles when updating through the dialog #AP-368 + Fixed context toolbar positioning to be more consistent near the edges of the editor #AP-318 + Added `label` component type for dialogs to group components under a label + Fixed table of contents plugin now works with v5 toolbar APIs correctly #AP-347 + Fixed the `link_context_toolbar` configuration not disabling the context toolbar #AP-458 + Fixed the link context toolbar showing incorrect relative links #AP-435 + Fixed the alignment of the icon in alert banner dialog components #TINY-2220 + Changed UI text for microcopy improvements #TINY-2281 + Fixed the visual blocks and visual char menu options not displaying their toggled state #TINY-2238 + Fixed the editor not displaying as fullscreen when toggled #TINY-2237 +Version 5.0.0-preview-3 (2018-10-18) + Changed editor layout to use modern CSS properties over manually calculating dimensions #AP-324 + Changed `autoresize_min_height` and `autoresize_max_height` configurations to `min_height` and `max_height` #AP-324 + Fixed bugs with editor width jumping when resizing and the iframe not resizing to smaller than 150px in height #AP-324 + Fixed mobile theme bug that prevented the editor from loading #AP-404 + Fixed long toolbar groups extending outside of the editor instead of wrapping + Changed `Whole word` label in Search and Replace dialog to `Find whole words only` #AP-387 + Fixed dialog titles so they are now proper case #AP-384 + Fixed color picker default to be #000000 instead of #ff00ff #AP-216 + Fixed "match case" option on the Find and Replace dialog is no longer selected by default #AP-298 + Fixed vertical alignment of toolbar icons #DES-134 + Fixed toolbar icons not appearing on IE11 #DES-133 +Version 5.0.0-preview-2 (2018-10-10) + Changed configuration of color options has been simplified to `color_map`, `color_cols`, and `custom_colors` #AP-328 + Added swatch is now shown for colorinput fields, instead of the colorpicker directly #AP-328 + Removed `colorpicker` plugin, it is now in the theme #AP-328 + Removed `textcolor` plugin, it is now in the theme #AP-328 + Fixed styleselect not updating the displayed item as the cursor moved #AP-388 + Changed `height` configuration to apply to the editor frame (including menubar, toolbar, status bar) instead of the content area #AP-324 + Added fontformats and fontsizes menu items #AP-390 + Fixed preview iframe not expanding to the dialog size #AP-252 + Fixed 'meta' shortcuts not translated into platform-specific text #AP-270 + Fixed tabbed dialogs (Charmap and Emoticons) shrinking when no search results returned + Fixed a bug where alert banner icons were not retrieved from icon pack. #AP-330 + Fixed component styles to flex so they fill large dialogs. #AP-252 + Fixed editor flashing unstyled during load (still in progress). #AP-349 +Version 5.0.0-preview-1 (2018-10-01) + Developer preview 1 + Initial list of features and changes is available at https://tiny.cloud/docs-preview/release-notes/new-features/ +Version 4.9.3 (2019-01-31) + Added a visualchars_default_state setting to the Visualchars Plugin. Patch contributed by mat3e. + Fixed a bug where scrolling on a page with more than one editor would cause a ResizeWindow event to fire. #TINY-3247 + Fixed a bug where if a plugin threw an error during initialisation the whole editor would fail to load. #TINY-3243 + Fixed a bug where getContent would include bogus elements when valid_elements setting was set up in a specific way. #TINY-3213 + Fixed a bug where only a few function key names could be used when creating keyboard shortcuts. #TINY-3146 + Fixed a bug where it wasn't possible to enter spaces into an editor after pressing shift+enter. #TINY-3099 + Fixed a bug where no caret would be rendered after backspacing to a contenteditable false element. #TINY-2998 + Fixed a bug where deletion to/from indented lists would leave list fragments in the editor. #TINY-2981 +Version 4.9.2 (2018-12-17) + Fixed a bug with pressing the space key on IE 11 would result in nbsp characters being inserted between words at the end of a block. #TINY-2996 + Fixed a bug where character composition using quote and space on US International keyboards would produce a space instead of a quote. #TINY-2999 + Fixed a bug where remove format wouldn't remove the inner most inline element in some situations. #TINY-2982 + Fixed a bug where outdenting an list item would affect attributes on other list items within the same list. #TINY-2971 + Fixed a bug where the DomParser filters wouldn't be applied for elements created when parsing invalid html. #TINY-2978 + Fixed a bug where setProgressState wouldn't automatically close floating ui elements like menus. #TINY-2896 + Fixed a bug where it wasn't possible to navigate out of a figcaption element using the arrow keys. #TINY-2894 + Fixed a bug where enter key before an image inside a link would remove the image. #TINY-2780 +Version 4.9.1 (2018-12-04) + Added functionality to insert html to the replacement feature of the Textpattern Plugin. #TINY-2839 + Fixed a bug where `editor.selection.getContent({format: 'text'})` didn't work as expected in IE11 on an unfocused editor. #TINY-2862 + Fixed a bug in the Textpattern Plugin where the editor would get an incorrect selection after inserting a text pattern on Safari. #TINY-2838 + Fixed a bug where the space bar didn't work correctly in editors with the forced_root_block setting set to false. #TINY-2816 +Version 4.9.0 (2018-11-27) + Added a replace feature to the Textpattern Plugin. #TINY-1908 + Added functionality to the Lists Plugin that improves the indentation logic. #TINY-1790 + Fixed a bug where it wasn't possible to delete/backspace when the caret was between a contentEditable=false element and a BR. #TINY-2372 + Fixed a bug where copying table cells without a text selection would fail to copy anything. #TINY-1789 + Implemented missing `autosave_restore_when_empty` functionality in the Autosave Plugin. Patch contributed by gzzo. #GH-4447 + Reduced insertion of unnecessary nonbreaking spaces in the editor. #TINY-1879 +Version 4.8.5 (2018-10-30) + Added a content_css_cors setting to the editor that adds the crossorigin="anonymous" attribute to link tags added by the StyleSheetLoader. #TINY-1909 + Fixed a bug where trying to remove formatting with a collapsed selection range would throw an exception. #GH-4636 + Fixed a bug in the image plugin that caused updating figures to split contenteditable elements. #GH-4563 + Fixed a bug that was causing incorrect viewport calculations for fixed position UI elements. #TINY-1897 + Fixed a bug where inline formatting would cause the delete key to do nothing. #TINY-1900 +Version 4.8.4 (2018-10-23) + Added support for the HTML5 `main` element. #TINY-1877 + Changed the keyboard shortcut to move focus to contextual toolbars to Ctrl+F9. #TINY-1812 + Fixed a bug where content css could not be loaded from another domain. #TINY-1891 + Fixed a bug on FireFox where the cursor would get stuck between two contenteditable false inline elements located inside of the same block element divided by a BR. #TINY-1878 + Fixed a bug with the insertContent method where nonbreaking spaces would be inserted incorrectly. #TINY-1868 + Fixed a bug where the toolbar of the inline editor would not be visible in some scenarios. #TINY-1862 + Fixed a bug where removing the editor while more than one notification was open would throw an error. #TINY-1845 + Fixed a bug where the menubutton would be rendered on top of the menu if the viewport didn't have enough height. #TINY-1678 + Fixed a bug with the annotations api where annotating collapsed selections caused problems. #TBS-2449 + Fixed a bug where wbr elements were being transformed into whitespace when using the Paste Plugin's paste as text setting. #GH-4638 + Fixed a bug where the Search and Replace didn't replace spaces correctly. #GH-4632 + Fixed a bug with sublist items not persisting selection. #GH-4628 + Fixed a bug with mceInsertRawHTML command not working as expected. #GH-4625 +Version 4.8.3 (2018-09-13) + Fixed a bug where the Wordcount Plugin didn't correctly count words within tables on IE11. #TINY-1770 + Fixed a bug where it wasn't possible to move the caret out of a table on IE11 and Firefox. #TINY-1682 + Fixed a bug where merging empty blocks didn't work as expected, sometimes causing content to be deleted. #TINY-1781 + Fixed a bug where the Textcolor Plugin didn't show the correct current color. #TINY-1810 + Fixed a bug where clear formatting with a collapsed selection would sometimes clear formatting from more content than expected. #TINY-1813 #TINY-1821 + Fixed a bug with the Table Plugin where it wasn't possible to keyboard navigate to the caption. #TINY-1818 +Version 4.8.2 (2018-08-09) + Moved annotator from "experimental" to "annotator" object on editor. #TBS-2398 + Improved the multiclick normalization across browsers. #TINY-1788 + Fixed a bug where running getSelectedBlocks with a collapsed selection between block elements would produce incorrect results. #TINY-1787 + Fixed a bug where the ScriptLoaders loadScript method would not work as expected in FireFox when loaded on the same page as a ShadowDOM polyfill. #TINY-1786 + Removed reference to ShadowDOM event.path as Blink based browsers now support event.composedPath. #TINY-1785 + Fixed a bug where a reference to localStorage would throw an "access denied" error in IE11 with strict security settings. #TINY-1782 + Fixed a bug where pasting using the toolbar button on an inline editor in IE11 would cause a looping behaviour. #TINY-1768 +Version 4.8.1 (2018-07-26) + Fixed a bug where the content of inline editors was being cleaned on every call of `editor.save()`. #TINY-1783 + Fixed a bug where the arrow of the Inlite Theme toolbar was being rendered incorrectly in RTL mode. #TINY-1776 + Fixed a bug with the Paste Plugin where pasting after inline contenteditable false elements moved the caret to the end of the line. #TINY-1758 +Version 4.8.0 (2018-06-27) + Added new "experimental" object in editor, with initial Annotator API. #TBS-2374 + Fixed a bug where deleting paragraphs inside of table cells would delete the whole table cell. #TINY-1759 + Fixed a bug in the Table Plugin where removing row height set on the row properties dialog did not update the table. #TINY-1730 + Fixed a bug with the font select toolbar item didn't update correctly. #TINY-1683 + Fixed a bug where all bogus elements would not be deleted when removing an inline editor. #TINY-1669 +Version 4.7.13 (2018-05-16) + Fixed a bug where Edge 17 wouldn't be able to select images or tables. #TINY-1679 + Fixed issue where whitespace wasn't preserved when the editor was initialized on pre elements. #TINY-1649 + Fixed a bug with the fontselect dropdowns throwing an error if the editor was hidden in Firefox. #TINY-1664 + Fixed a bug where it wasn't possible to merge table cells on IE 11. #TINY-1671 + Fixed a bug where textcolor wasn't applying properly on IE 11 in some situations. #TINY-1663 + Fixed a bug where the justifyfull command state wasn't working correctly. #TINY-1677 + Fixed a bug where the styles wasn't updated correctly when resizing some tables. #TINY-1668 + Added missing code menu item from the default menu config. #TINY-1648 + Added new align button for combining the separate align buttons into a menu button. #TINY-1652 +Version 4.7.12 (2018-05-03) + Added an option to filter out image svg data urls. + Added support for html5 details and summary elements. + Changed so the mce-abs-layout-item css rule targets html instead of body. Patch contributed by nazar-pc. + Fixed a bug where the "read" step on the mobile theme was still present on android mobile browsers. + Fixed a bug where all images in the editor document would reload on any editor change. + Fixed a bug with the Table Plugin where ObjectResized event wasn't being triggered on column resize. + Fixed so the selection is set to the first suitable caret position after editor.setContent called. + Fixed so links with xlink:href attributes are filtered correctly to prevent XSS. + Fixed a bug on IE11 where pasting content into an inline editor initialized on a heading element would create new editable elements. + Fixed a bug where readonly mode would not work as expected when the editor contained contentEditable=true elements. + Fixed a bug where the Link Plugin would throw an error when used together with the webcomponents polyfill. Patch contributed by 4esnog. + Fixed a bug where the "Powered by TinyMCE" branding link would break on XHTML pages. Patch contributed by tistre. + Fixed a bug where the same id would be used in the blobcache for all pasted images. Patch contributed by thorn0. +Version 4.7.11 (2018-04-11) + Added a new imagetools_credentials_hosts option to the Imagetools Plugin. + Fixed a bug where toggling a list containing empty LIs would throw an error. Patch contributed by bradleyke. + Fixed a bug where applying block styles to a text with the caret at the end of the paragraph would select all text in the paragraph. + Fixed a bug where toggling on the Spellchecker Plugin would trigger isDirty on the editor. + Fixed a bug where it was possible to enter content into selection bookmark spans. + Fixed a bug where if a non paragraph block was configured in forced_root_block the editor.getContent method would return incorrect values with an empty editor. + Fixed a bug where dropdown menu panels stayed open and fixed in position when dragging dialog windows. + Fixed a bug where it wasn't possible to extend table cells with the space button in Safari. + Fixed a bug where the setupeditor event would thrown an error when using the Compat3x Plugin. + Fixed a bug where an error was thrown in FontInfo when called on a detached element. +Version 4.7.10 (2018-04-03) + Removed the "read" step from the mobile theme. + Added normalization of triple clicks across browsers in the editor. + Added a `hasFocus` method to the editor that checks if the editor has focus. + Added correct icon to the Nonbreaking Plugin menu item. + Fixed so the `getContent`/`setContent` methods work even if the editor is not initialized. + Fixed a bug with the Media Plugin where query strings were being stripped from youtube links. + Fixed a bug where image styles were changed/removed when opening and closing the Image Plugin dialog. + Fixed a bug in the Table Plugin where some table cell styles were not correctly added to the content html. + Fixed a bug in the Spellchecker Plugin where it wasn't possible to change the spellchecker language. + Fixed so the the unlink action in the Link Plugin has a menu item and can be added to the contextmenu. + Fixed a bug where it wasn't possible to keyboard navigate to the start of an inline element on a new line within the same block element. + Fixed a bug with the Text Color Plugin where if used with an inline editor located at the bottom of the screen the colorpicker could appear off screen. + Fixed a bug with the UndoManager where undo levels were being added for nbzwsp characters. + Fixed a bug with the Table Plugin where the caret would sometimes be lost when keyboard navigating up through a table. + Fixed a bug where FontInfo.getFontFamily would throw an error when called on a removed editor. + Fixed a bug in Firefox where undo levels were not being added correctly for some specific operations. + Fixed a bug where initializing an inline editor inside of a table would make the whole table resizeable. + Fixed a bug where the fake cursor that appears next to tables on Firefox was positioned incorrectly when switching to fullscreen. + Fixed a bug where zwsp's weren't trimmed from the output from `editor.getContent({ format: 'text' })`. + Fixed a bug where the fontsizeselect/fontselect toolbar items showed the body info rather than the first possible caret position info on init. + Fixed a bug where it wasn't possible to select all content if the editor only contained an inline boundary element. + Fixed a bug where `content_css` urls with query strings wasn't working. + Fixed a bug in the Table Plugin where some table row styles were removed when changing other styles in the row properties dialog. +Version 4.7.9 (2018-02-27) + Fixed a bug where the editor target element didn't get the correct style when removing the editor. +Version 4.7.8 (2018-02-26) + Fixed an issue with the Help Plugin where the menuitem name wasn't lowercase. + Fixed an issue on MacOS where text and bold text did not have the same line-height in the autocomplete dropdown in the Link Plugin dialog. + Fixed a bug where the "paste as text" option in the Paste Plugin didn't work. + Fixed a bug where dialog list boxes didn't get positioned correctly in documents with scroll. + Fixed a bug where the Inlite Theme didn't use the Table Plugin api to insert correct tables. + Fixed a bug where the Inlite Theme panel didn't hide on blur in a correct way. + Fixed a bug where placing the cursor before a table in Firefox would scroll to the bottom of the table. + Fixed a bug where selecting partial text in table cells with rowspans and deleting would produce faulty tables. + Fixed a bug where the Preview Plugin didn't work on Safari due to sandbox security. + Fixed a bug where table cell selection using the keyboard threw an error. + Fixed so the font size and font family doesn't toggle the text but only sets the selected format on the selected text. + Fixed so the built-in spellchecking on Chrome and Safari creates an undo level when replacing words. +Version 4.7.7 (2018-02-19) + Added a border style selector to the advanced tab of the Image Plugin. + Added better controls for default table inserted by the Table Plugin. + Added new `table_responsive_width` option to the Table Plugin that controls whether to use pixel or percentage widths. + Fixed a bug where the Link Plugin text didn't update when a URL was pasted using the context menu. + Fixed a bug with the Spellchecker Plugin where using "Add to dictionary" in the context menu threw an error. + Fixed a bug in the Media Plugin where the preview node for iframes got default width and height attributes that interfered with width/height styles. + Fixed a bug where backslashes were being added to some font family names in Firefox in the fontselect toolbar item. + Fixed a bug where errors would be thrown when trying to remove an editor that had not yet been fully initialized. + Fixed a bug where the Imagetools Plugin didn't update the images atomically. + Fixed a bug where the Fullscreen Plugin was throwing errors when being used on an inline editor. + Fixed a bug where drop down menus weren't positioned correctly in inline editors on scroll. + Fixed a bug with a semicolon missing at the end of the bundled javascript files. + Fixed a bug in the Table Plugin with cursor navigation inside of tables where the cursor would sometimes jump into an incorrect table cells. + Fixed a bug where indenting a table that is a list item using the "Increase indent" button would create a nested table. + Fixed a bug where text nodes containing only whitespace were being wrapped by paragraph elements. + Fixed a bug where whitespace was being inserted after br tags inside of paragraph tags. + Fixed a bug where converting an indented paragraph to a list item would cause the list item to have extra padding. + Fixed a bug where Copy/Paste in an editor with a lot of content would cause the editor to scroll to the top of the content in IE11. + Fixed a bug with a memory leak in the DragHelper. Path contributed by ben-mckernan. + Fixed a bug where the advanced tab in the Media Plugin was being shown even if it didn't contain anything. Patch contributed by gabrieeel. + Fixed an outdated eventname in the EventUtils. Patch contributed by nazar-pc. + Fixed an issue where the Json.parse function would throw an error when being used on a page with strict CSP settings. + Fixed so you can place the curser before and after table elements within the editor in Firefox and Edge/IE. +Version 4.7.6 (2018-01-29) + Fixed a bug in the jquery integration where it threw an error saying that "global is not defined". + Fixed a bug where deleting a table cell whose previous sibling was set to contenteditable false would create a corrupted table. + Fixed a bug where highlighting text in an unfocused editor did not work correctly in IE11/Edge. + Fixed a bug where the table resize handles were not being repositioned when activating the Fullscreen Plugin. + Fixed a bug where the Imagetools Plugin dialog didn't honor editor RTL settings. + Fixed a bug where block elements weren't being merged correctly if you deleted from after a contenteditable false element to the beginning of another block element. + Fixed a bug where TinyMCE didn't work with module loaders like webpack. +Version 4.7.5 (2018-01-22) + Fixed bug with the Codesample Plugin where it wasn't possible to edit codesamples when the editor was in inline mode. + Fixed bug where focusing on the status bar broke the keyboard navigation functionality. + Fixed bug where an error would be thrown on Edge by the Table Plugin when pasting using the PowerPaste Plugin. + Fixed bug in the Table Plugin where selecting row border style from the dropdown menu in advanced row properties would throw an error. + Fixed bug with icons being rendered incorrectly on Chrome on Mac OS. + Fixed bug in the Textcolor Plugin where the font color and background color buttons wouldn't trigger an ExecCommand event. + Fixed bug in the Link Plugin where the url field wasn't forced LTR. + Fixed bug where the Nonbreaking Plugin incorrectly inserted spaces into tables. + Fixed bug with the inline theme where the toolbar wasn't repositioned on window resize. +Version 4.7.4 (2017-12-05) + Fixed bug in the Nonbreaking Plugin where the nonbreaking_force_tab setting was being ignored. + Fixed bug in the Table Plugin where changing row height incorrectly converted column widths to pixels. + Fixed bug in the Table Plugin on Edge and IE11 where resizing the last column after resizing the table would cause invalid column heights. + Fixed bug in the Table Plugin where keyboard navigation was not normalized between browsers. + Fixed bug in the Table Plugin where the colorpicker button would show even without defining the colorpicker_callback. + Fixed bug in the Table Plugin where it wasn't possible to set the cell background color. + Fixed bug where Firefox would throw an error when intialising an editor on an element that is hidden or not yet added to the DOM. + Fixed bug where Firefox would throw an error when intialising an editor inside of a hidden iframe. +Version 4.7.3 (2017-11-23) + Added functionality to open the Codesample Plugin dialog when double clicking on a codesample. Patch contributed by dakuzen. + Fixed bug where undo/redo didn't work correctly with some formats and caret positions. + Fixed bug where the color picker didn't show up in Table Plugin dialogs. + Fixed bug where it wasn't possible to change the width of a table through the Table Plugin dialog. + Fixed bug where the Charmap Plugin couldn't insert some special characters. + Fixed bug where editing a newly inserted link would not actually edit the link but insert a new link next to it. + Fixed bug where deleting all content in a table cell made it impossible to place the caret into it. + Fixed bug where the vertical alignment field in the Table Plugin cell properties dialog didn't do anything. + Fixed bug where an image with a caption showed two sets of resize handles in IE11. + Fixed bug where pressing the enter button inside of an h1 with contenteditable set to true would sometimes produce a p tag. + Fixed bug with backspace not working as expected before a noneditable element. + Fixed bug where operating on tables with invalid rowspans would cause an error to be thrown. + Fixed so a real base64 representation of the image is available on the blobInfo that the images_upload_handler gets called with. + Fixed so the image upload tab is available when the images_upload_handler is defined (and not only when the images_upload_url is defined). +Version 4.7.2 (2017-11-07) + Added newly rewritten Table Plugin. + Added support for attributes with colon in valid_elements and addValidElements. + Added support for dailymotion short url in the Media Plugin. Patch contributed by maat8. + Added support for converting to half pt when converting font size from px to pt. Patch contributed by danny6514. + Added support for location hash to the Autosave plugin to make it work better with SPAs using hash routing. + Added support for merging table cells when pasting a table into another table. + Changed so the language packs are only loaded once. Patch contributed by 0xor1. + Simplified the css for inline boundaries selection by switching to an attribute selector. + Fixed bug where an error would be thrown on editor initialization if the window.getSelection() returned null. + Fixed bug where holding down control or alt keys made the keyboard navigation inside an inline boundary not work as expected. + Fixed bug where applying formats in IE11 produced extra, empty paragraphs in the editor. + Fixed bug where the Word Count Plugin didn't count some mathematical operators correctly. + Fixed bug where removing an inline editor removed the element that the editor had been initialized on. + Fixed bug where setting the selection to the end of an editable container caused some formatting problems. + Fixed bug where an error would be thrown sometimes when an editor was removed because of the selection bookmark was being stored asynchronously. + Fixed a bug where an editor initialized on an empty list did not contain any valid cursor positions. + Fixed a bug with the Context Menu Plugin and webkit browsers on Mac where right-clicking inside a table would produce an incorrect selection. + Fixed bug where the Image Plugin constrain proportions setting wasn't working as expected. + Fixed bug where deleting the last character in a span with decorations produced an incorrect element when typing. + Fixed bug where focusing on inline editors made the toolbar flicker when moving between elements quickly. + Fixed bug where the selection would be stored incorrectly in inline editors when the mouseup event was fired outside the editor body. + Fixed bug where toggling bold at the end of an inline boundary would toggle off the whole word. + Fixed bug where setting the skin to false would not stop the loading of some skin css files. + Fixed bug in mobile theme where pinch-to-zoom would break after exiting the editor. + Fixed bug where sublists of a fully selected list would not be switched correctly when changing list style. + Fixed bug where inserting media by source would break the UndoManager. + Fixed bug where inserting some content into the editor with a specific selection would replace some content incorrectly. + Fixed bug where selecting all content with ctrl+a in IE11 caused problems with untoggling some formatting. + Fixed bug where the Search and Replace Plugin left some marker spans in the editor when undoing and redoing after replacing some content. + Fixed bug where the editor would not get a scrollbar when using the Fullscreen and Autoresize plugins together. + Fixed bug where the font selector would stop working correctly after selecting fonts three times. + Fixed so pressing the enter key inside of an inline boundary inserts a br after the inline boundary element. + Fixed a bug where it wasn't possible to use tab navigation inside of a table that was inside of a list. + Fixed bug where end_container_on_empty_block would incorrectly remove elements. + Fixed bug where content_styles weren't added to the Preview Plugin iframe. + Fixed so the beforeSetContent/beforeGetContent events are preventable. + Fixed bug where changing height value in Table Plugin advanced tab didn't do anything. + Fixed bug where it wasn't possible to remove formatting from content in beginning of table cell. +Version 4.7.1 (2017-10-09) + Fixed bug where theme set to false on an inline editor produced an extra div element after the target element. + Fixed bug where the editor drag icon was misaligned with the branding set to false. + Fixed bug where doubled menu items were not being removed as expected with the removed_menuitems setting. + Fixed bug where the Table of contents plugin threw an error when initialized. + Fixed bug where it wasn't possible to add inline formats to text selected right to left. + Fixed bug where the paste from plain text mode did not work as expected. + Fixed so the style previews do not set color and background color when selected. + Fixed bug where the Autolink plugin didn't work as expected with some formats applied on an empty editor. + Fixed bug where the Textpattern plugin were throwing errors on some patterns. + Fixed bug where the Save plugin saved all editors instead of only the active editor. Patch contributed by dannoe. +Version 4.7.0 (2017-10-03) + Added new mobile ui that is specifically designed for mobile devices. + Updated the default skin to be more modern and white since white is preferred by most implementations. + Restructured the default menus to be more similar to common office suites like Google Docs. + Fixed so theme can be set to false on both inline and iframe editor modes. + Fixed bug where inline editor would add/remove the visualblocks css multiple times. + Fixed bug where selection wouldn't be properly restored when editor lost focus and commands where invoked. + Fixed bug where toc plugin would generate id:s for headers even though a toc wasn't inserted into the content. + Fixed bug where is wasn't possible to drag/drop contents within the editor if paste_data_images where set to true. + Fixed bug where getParam and close in WindowManager would get the first opened window instead of the last opened window. + Fixed bug where delete would delete between cells inside a table in Firefox. +Version 4.6.7 (2017-09-18) + Fixed bug where paste wasn't working in IOS. + Fixed bug where the Word Count Plugin didn't count some mathematical operators correctly. + Fixed bug where inserting a list in a table caused the cell to expand in height. + Fixed bug where pressing enter in a list located inside of a table deleted list items instead of inserting new list item. + Fixed bug where copy and pasting table cells produced inconsistent results. + Fixed bug where initializing an editor with an ID of 'length' would throw an exception. + Fixed bug where it was possible to split a non merged table cell. + Fixed bug where copy and pasting a list with a very specific selection into another list would produce a nested list. + Fixed bug where copy and pasting ordered lists sometimes produced unordered lists. + Fixed bug where padded elements inside other elements would be treated as empty. + Added some missing translations to Image, Link and Help plugins. + Fixed so you can resize images inside a figure element. + Fixed bug where an inline TinyMCE editor initialized on a table did not set selection on load in Chrome. + Fixed the positioning of the inlite toolbar when the target element wasn't big enough to fit the toolbar. +Version 4.6.6 (2017-08-30) + Fixed so that notifications wrap long text content instead of bleeding outside the notification element. + Fixed so the content_style css is added after the skin and custom stylesheets. + Fixed bug where it wasn't possible to remove a table with the Cut button. + Fixed bug where the center format wasn't getting the same font size as the other formats in the format preview. + Fixed bug where the wordcount plugin wasn't counting hyphenated words correctly. + Fixed bug where all content pasted into the editor was added to the end of the editor. + Fixed bug where enter keydown on list item selection only deleted content and didn't create a new line. + Fixed bug where destroying the editor while the content css was still loading caused error notifications on Firefox. + Fixed bug where undoing cut operation in IE11 left some unwanted html in the editor content. + Fixed bug where enter keydown would throw an error in IE11. + Fixed bug where duplicate instances of an editor were added to the editors array when using the createEditor API. + Fixed bug where the formatter applied formats on the wrong content when spellchecker was activated. + Fixed bug where switching formats would reset font size on child nodes. + Fixed bug where the table caption element weren't always the first descendant to the table tag. + Fixed bug where pasting some content into the editor on chrome some newlines were removed. + Fixed bug where it wasn't possible to remove a list if a list item was a table element. + Fixed bug where copy/pasting partial selections of tables wouldn't produce a proper table. + Fixed bug where the searchreplace plugin could not find consecutive spaces. + Fixed bug where background color wasn't applied correctly on some partially selected contents. +Version 4.6.5 (2017-08-02) + Added new inline_boundaries_selector that allows you to specify the elements that should have boundaries. + Added new local upload feature this allows the user to upload images directly from the image dialog. + Added a new api for providing meta data for plugins. It will show up in the help dialog if it's provided. + Fixed so that the notifications created by the notification manager are more screen reader accessible. + Fixed bug where changing the list format on multiple selected lists didn't change all of the lists. + Fixed bug where the nonbreaking plugin would insert multiple undo levels when pressing the tab key. + Fixed bug where delete/backspace wouldn't render a caret when all editor contents where deleted. + Fixed bug where delete/backspace wouldn't render a caret if the deleted element was a single contentEditable false element. + Fixed bug where the wordcount plugin wouldn't count words correctly if word where typed after applying a style format. + Fixed bug where the wordcount plugin would count mathematical formulas as multiple words for example 1+1=2. + Fixed bug where formatting of triple clicked blocks on Chrome/Safari would result in styles being added outside the visual selection. + Fixed bug where paste would add the contents to the end of the editor area when inline mode was used. + Fixed bug where toggling off bold formatting on text entered in a new paragraph would add an extra line break. + Fixed bug where autolink plugin would only produce a link on every other consecutive link on Firefox. + Fixed bug where it wasn't possible to select all contents if the content only had one pre element. + Fixed bug where sizzle would produce lagging behavior on some sites due to repaints caused by feature detection. + Fixed bug where toggling off inline formats wouldn't include the space on selected contents with leading or trailing spaces. + Fixed bug where the cut operation in UI wouldn't work in Chrome. + Fixed bug where some legacy editor initialization logic would throw exceptions about editor settings not being defined. + Fixed bug where it wasn't possible to apply text color to links if they where part of a non collapsed selection. + Fixed bug where an exception would be thrown if the user selected a video element and then moved the focus outside the editor. + Fixed bug where list operations didn't work if there where block elements inside the list items. + Fixed bug where applying block formats to lists wrapped in block elements would apply to all elements in that wrapped block. +Version 4.6.4 (2017-06-13) + Fixed bug where the editor would move the caret when clicking on the scrollbar next to a content editable false block. + Fixed bug where the text color select dropdowns wasn't placed correctly when they didn't fit the width of the screen. + Fixed bug where the default editor line height wasn't working for mixed font size contents. + Fixed bug where the content css files for inline editors were loaded multiple times for multiple editor instances. + Fixed bug where the initial value of the font size/font family dropdowns wasn't displayed. + Fixed bug where the I18n api was not supporting arrays as the translation replacement values. + Fixed bug where chrome would display "The given range isn't in document." errors for invalid ranges passed to setRng. + Fixed bug where the compat3x plugin wasn't working since the global tinymce references wasn't resolved correctly. + Fixed bug where the preview plugin wasn't encoding the base url passed into the iframe contents producing a xss bug. + Fixed bug where the dom parser/serializer wasn't handling some special elements like noframes, title and xmp. + Fixed bug where the dom parser/serializer wasn't handling cdata sections with comments inside. + Fixed bug where the editor would scroll to the top of the editable area if a dialog was closed in inline mode. + Fixed bug where the link dialog would not display the right rel value if rel_list was configured. + Fixed bug where the context menu would select images on some platforms but not others. + Fixed bug where the filenames of images were not retained on dragged and drop into the editor from the desktop. + Fixed bug where the paste plugin would misrepresent newlines when pasting plain text and having forced_root_block configured. + Fixed so that the error messages for the imagetools plugin is more human readable. + Fixed so the internal validate setting for the parser/serializer can't be set from editor initialization settings. +Version 4.6.3 (2017-05-30) + Fixed bug where the arrow keys didn't work correctly when navigating on nested inline boundary elements. + Fixed bug where delete/backspace didn't work correctly on nested inline boundary elements. + Fixed bug where image editing didn't work on subsequent edits of the same image. + Fixed bug where charmap descriptions wouldn't properly wrap if they exceeded the width of the box. + Fixed bug where the default image upload handler only accepted 200 as a valid http status code. + Fixed so rel on target=_blank links gets forced with only noopener instead of both noopener and noreferrer. +Version 4.6.2 (2017-05-23) + Fixed bug where the SaxParser would run out of memory on very large documents. + Fixed bug with formatting like font size wasn't applied to del elements. + Fixed bug where various api calls would be throwing exceptions if they where invoked on a removed editor instance. + Fixed bug where the branding position would be incorrect if the editor was inside a hidden tab and then later showed. + Fixed bug where the color levels feature in the imagetools dialog wasn't working properly. + Fixed bug where imagetools dialog wouldn't pre-load images from CORS domains, before trying to prepare them for editing. + Fixed bug where the tab key would move the caret to the next table cell if being pressed inside a list inside a table. + Fixed bug where the cut/copy operations would loose parent context like the current format etc. + Fixed bug with format preview not working on invalid elements excluded by valid_elements. + Fixed bug where blocks would be merged in incorrect order on backspace/delete. + Fixed bug where zero length text nodes would cause issues with the undo logic if there where iframes present. + Fixed bug where the font size/family select lists would throw errors if the first node was a comment. + Fixed bug with csp having to allow local script evaluation since it was used to detect global scope. + Fixed bug where CSP required a relaxed option for javascript: URLs in unsupported legacy browsers. + Fixed bug where a fake caret would be rendered for td with the contenteditable=false. + Fixed bug where typing would be blocked on IE 11 when within a nested contenteditable=true/false structure. +Version 4.6.1 (2017-05-10) + Added configuration option to list plugin to disable tab indentation. + Fixed bug where format change on very specific content could cause the selection to change. + Fixed bug where TinyMCE could not be lazyloaded through jquery integration. + Fixed bug where entities in style attributes weren't decoded correctly on paste in webkit. + Fixed bug where fontsize_formats option had been renamed incorrectly. + Fixed bug with broken backspace/delete behaviour between contenteditable=false blocks. + Fixed bug where it wasn't possible to backspace to the previous line with the inline boundaries functionality turned on. + Fixed bug where is wasn't possible to move caret left and right around a linked image with the inline boundaries functionality turned on. + Fixed bug where pressing enter after/before hr element threw exception. Patch contributed bradleyke. + Fixed so the CSS in the visualblocks plugin doesn't overwrite background color. Patch contributed by Christian Rank. + Fixed bug where multibyte characters weren't encoded correctly. Patch contributed by James Tarkenton. + Fixed bug where shift-click to select within contenteditable=true fields wasn't working. +Version 4.6.0 (2017-05-04) + Dropped support for IE 8-10 due to market share and lack of support from Microsoft. See tinymce docs for details. + Added an inline boundary caret position feature that makes it easier to type at the beginning/end of links/code elements. + Added a help plugin that adds a button and a dialog showing the editor shortcuts and loaded plugins. + Added an inline_boundaries option that allows you to disable the inline boundary feature if it's not desired. + Added a new ScrollIntoView event that allows you to override the default scroll to element behavior. + Added role and aria- attributes as valid elements in the default valid elements config. + Added new internal flag for PastePreProcess/PastePostProcess this is useful to know if the paste was coming from an external source. + Added new ignore function to UndoManager this works similar to transact except that it doesn't add an undo level by default. + Fixed so that urls gets retained for images when being edited. This url is then passed on to the upload handler. + Fixed so that the editors would be initialized on readyState interactive instead of complete. + Fixed so that the init event of the editor gets fired once all contentCSS files have been properly loaded. + Fixed so that width/height of the editor gets taken from the textarea element if it's explicitly specified in styles. + Fixed so that keep_styles set to false no longer clones class/style from the previous paragraph on enter. + Fixed so that the default line-height is 1.2em to avoid zwnbsp characters from producing text rendering glitches on Windows. + Fixed so that loading errors of content css gets presented by a notification message. + Fixed so figure image elements can be linked when selected this wraps the figure image in a anchor element. + Fixed bug where it wasn't possible to copy/paste rows with colspans by using the table copy/paste feature. + Fixed bug where the protect setting wasn't properly applied to header/footer parts when using the fullpage plugin. + Fixed bug where custom formats that specified upper case element names where not applied correctly. + Fixed bug where some screen readers weren't reading buttons due to an aria specific fix for IE 8. + Fixed bug where cut wasn't working correctly on iOS due to it's clipboard API not working correctly. + Fixed bug where Edge would paste div elements instead of paragraphs when pasting plain text. + Fixed bug where the textpattern plugin wasn't dealing with trailing punctuations correctly. + Fixed bug where image editing would some times change the image format from jpg to png. + Fixed bug where some UI elements could be inserted into the toolbar even if they where not registered. + Fixed bug where it was possible to click the TD instead of the character in the character map and that caused an exception. + Fixed bug where the font size/font family dropdowns would sometimes show an incorrect value due to css not being loaded in time. + Fixed bug with the media plugin inserting undefined instead of retaining size when media_dimensions was set to false. + Fixed bug with deleting images when forced_root_blocks where set to false. + Fixed bug where input focus wasn't properly handled on nested content editable elements. + Fixed bug where Chrome/Firefox would throw an exception when selecting images due to recent change of setBaseAndExtent support. + Fixed bug where malformed blobs would throw exceptions now they are simply ignored. + Fixed bug where backspace/delete wouldn't work properly in some cases where all contents was selected in WebKit. + Fixed bug with Angular producing errors since it was expecting events objects to be patched with their custom properties. + Fixed bug where the formatter would apply formatting to spellchecker errors now all bogus elements are excluded. + Fixed bug with backspace/delete inside table caption elements wouldn't behave properly on IE 11. + Fixed bug where typing after a contenteditable false inline element could move the caret to the end of that element. + Fixed bug where backspace before/after contenteditable false blocks wouldn't properly remove the right element. + Fixed bug where backspace before/after contenteditable false inline elements wouldn't properly empty the current block element. + Fixed bug where vertical caret navigation with a custom line-height would sometimes match incorrect positions. + Fixed bug with paste on Edge where character encoding wasn't handled properly due to a browser bug. + Fixed bug with paste on Edge where extra fragment data was inserted into the contents when pasting. + Fixed bug with pasting contents when having a whole block element selected on WebKit could cause WebKit spans to appear. + Fixed bug where the visualchars plugin wasn't working correctly showing invisible nbsp characters. + Fixed bug where browsers would hang if you tried to load some malformed html contents. + Fixed bug where the init call promise wouldn't resolve if the specified selector didn't find any matching elements. + Fixed bug where the Schema isValidChild function was case sensitive. +Version 4.5.3 (2017-02-01) + Added keyboard navigation for menu buttons when the menu is in focus. + Added api to the list plugin for setting custom classes/attributes on lists. + Added validation for the anchor plugin input field according to W3C id naming specifications. + Fixed bug where media placeholders were removed after resize with the forced_root_block setting set to false. + Fixed bug where deleting selections with similar sibling nodes sometimes deleted the whole document. + Fixed bug with inlite theme where several toolbars would appear scrolling when more than one instance of the editor was in use. + Fixed bug where the editor would throw error with the fontselect plugin on hidden editor instances in Firefox. + Fixed bug where the background color would not stretch to the font size. + Fixed bug where font size would be removed when changing background color. + Fixed bug where the undomanager trimmed away whitespace between nodes on undo/redo. + Fixed bug where media_dimensions=false in media plugin caused the editor to throw an error. + Fixed bug where IE was producing font/u elements within links on paste. + Fixed bug where some button tooltips were broken when compat3x was in use. + Fixed bug where backspace/delete/typeover would remove the caption element. + Fixed bug where powerspell failed to function when compat3x was enabled. + Fixed bug where it wasn't possible to apply sub/sup on text with large font size. + Fixed bug where pre tags with spaces weren't treated as content. + Fixed bug where Meta+A would select the entire document instead of all contents in nested ce=true elements. +Version 4.5.2 (2017-01-04) + Added missing keyboard shortcut description for the underline menu item in the format menu. + Fixed bug where external blob urls wasn't properly handled by editor upload logic. Patch contributed by David Oviedo. + Fixed bug where urls wasn't treated as a single word by the wordcount plugin. + Fixed bug where nbsp characters wasn't treated as word delimiters by the wordcount plugin. + Fixed bug where editor instance wasn't properly passed to the format preview logic. Patch contributed by NullQuery. + Fixed bug where the fake caret wasn't hidden when you moved selection to a cE=false element. + Fixed bug where it wasn't possible to edit existing code sample blocks. + Fixed bug where it wasn't possible to delete editor contents if the selection included an empty block. + Fixed bug where the formatter wasn't expanding words on some international characters. Patch contributed by Martin Larochelle. + Fixed bug where the open link feature wasn't working correctly on IE 11. + Fixed bug where enter before/after a cE=false block wouldn't properly padd the paragraph with an br element. + Fixed so font size and font family select boxes always displays a value by using the runtime style as a fallback. + Fixed so missing plugins will be logged to console as warnings rather than halting the initialization of the editor. + Fixed so splitbuttons become normal buttons in advlist plugin if styles are empty. Patch contributed by René Schleusner. + Fixed so you can multi insert rows/cols by selecting table cells and using insert rows/columns. +Version 4.5.1 (2016-12-07) + Fixed bug where the lists plugin wouldn't initialize without the advlist plugins if served from cdn. + Fixed bug where selectors with "*" would cause the style format preview to throw an error. + Fixed bug with toggling lists off on lists with empty list items would throw an error. + Fixed bug where editing images would produce non existing blob uris. + Fixed bug where the offscreen toc selection would be treated as the real toc element. + Fixed bug where the aria level attribute for element path would have an incorrect start index. + Fixed bug where the offscreen selection of cE=false that where very wide would be shown onscreen. Patch contributed by Steven Bufton. + Fixed so the default_link_target gets applied to links created by the autolink plugin. + Fixed so that the name attribute gets removed by the anchor plugin if editing anchors. +Version 4.5.0 (2016-11-23) + Added new toc plugin allows you to insert table of contents based on editor headings. + Added new auto complete menu to all url fields. Adds history, link to anchors etc. + Added new sidebar api that allows you to add custom sidebar panels and buttons to toggle these. + Added new insert menu button that allows you to have multiple insert functions under the same menu button. + Added new open link feature to ctrl+click, alt+enter and context menu. + Added new media_embed_handler option to allow the media plugin to be populated with custom embeds. + Added new support for editing transparent images using the image tools dialog. + Added new images_reuse_filename option to allow filenames of images to be retained for upload. + Added new security feature where links with target="_blank" will by default get rel="noopener noreferrer". + Added new allow_unsafe_link_target to allow you to opt-out of the target="_blank" security feature. + Added new style_formats_autohide option to automatically hide styles based on context. + Added new codesample_content_css option to specify where the code sample prism css is loaded from. + Added new support for Japanese/Chinese word count following the unicode standards on this. + Added new fragmented undo levels this dramatically reduces flicker on contents with iframes. + Added new live previews for complex elements like table or lists. + Fixed bug where it wasn't possible to properly tab between controls in a dialog with a disabled form item control. + Fixed bug where firefox would generate a rectangle on elements produced after/before a cE=false elements. + Fixed bug with advlist plugin not switching list element format properly in some edge cases. + Fixed bug where col/rowspans wasn't correctly computed by the table plugin in some cases. + Fixed bug where the table plugin would thrown an error if object_resizing was disabled. + Fixed bug where some invalid markup would cause issues when running in XHTML mode. Patch contributed by Charles Bourasseau. + Fixed bug where the fullscreen class wouldn't be removed properly when closing dialogs. + Fixed bug where the PastePlainTextToggle event wasn't fired by the paste plugin when the state changed. + Fixed bug where table the row type wasn't properly updated in table row dialog. Patch contributed by Matthias Balmer. + Fixed bug where select all and cut wouldn't place caret focus back to the editor in WebKit. Patch contributed by Daniel Jalkut. + Fixed bug where applying cell/row properties to multiple cells/rows would reset other unchanged properties. + Fixed bug where some elements in the schema would have redundant/incorrect children. + Fixed bug where selector and target options would cause issues if used together. + Fixed bug where drag/drop of images from desktop on chrome would thrown an error. + Fixed bug where cut on WebKit/Blink wouldn't add an undo level. + Fixed bug where IE 11 would scroll to the cE=false elements when they where selected. + Fixed bug where keys like F5 wouldn't work when a cE=false element was selected. + Fixed bug where the undo manager wouldn't stop the typing state when commands where executed. + Fixed bug where unlink on wrapped links wouldn't work properly. + Fixed bug with drag/drop of images on WebKit where the image would be deleted form the source editor. + Fixed bug where the visual characters mode would be disabled when contents was extracted from the editor. + Fixed bug where some browsers would toggle of formats applied to the caret when clicking in the editor toolbar. + Fixed bug where the custom theme function wasn't working correctly. + Fixed bug where image option for custom buttons required you to have icon specified as well. + Fixed bug where the context menu and contextual toolbars would be visible at the same time and sometimes overlapping. + Fixed bug where the noneditable plugin would double wrap elements when using the noneditable_regexp option. + Fixed bug where tables would get padding instead of margin when you used the indent button. + Fixed bug where the charmap plugin wouldn't properly insert non breaking spaces. + Fixed bug where the color previews in color input boxes wasn't properly updated. + Fixed bug where the list items of previous lists wasn't merged in the right order. + Fixed bug where it wasn't possible to drag/drop inline-block cE=false elements on IE 11. + Fixed bug where some table cell merges would produce incorrect rowspan/colspan. + Fixed so the font size of the editor defaults to 14px instead of 11px this can be overridden by custom css. + Fixed so wordcount is debounced to reduce cpu hogging on larger texts. + Fixed so tinymce global gets properly exported as a module when used with some module bundlers. + Fixed so it's possible to specify what css properties you want to preview on specific formats. + Fixed so anchors are contentEditable=false while within the editor. + Fixed so selected contents gets wrapped in a inline code element by the codesample plugin. + Fixed so conditional comments gets properly stripped independent of case. Patch contributed by Georgii Dolzhykov. + Fixed so some escaped css sequences gets properly handled. Patch contributed by Georgii Dolzhykov. + Fixed so notifications with the same message doesn't get displayed at the same time. + Fixed so F10 can be used as an alternative key to focus to the toolbar. + Fixed various api documentation issues and typos. + Removed layer plugin since it wasn't really ported from 3.x and there doesn't seem to be much use for it. + Removed moxieplayer.swf from the media plugin since it wasn't used by the media plugin. + Removed format state from the advlist plugin to be more consistent with common word processors. +Version 4.4.3 (2016-09-01) + Fixed bug where copy would produce an exception on Chrome. + Fixed bug where deleting lists on IE 11 would merge in correct text nodes. + Fixed bug where deleting partial lists with indentation wouldn't cause proper normalization. +Version 4.4.2 (2016-08-25) + Added new importcss_exclusive option to disable unique selectors per group. + Added new group specific selector_converter option to importcss plugin. + Added new codesample_languages option to apply custom languages to codesample plugin. + Added new codesample_dialog_width/codesample_dialog_height options. + Fixed bug where fullscreen button had an incorrect keyboard shortcut. + Fixed bug where backspace/delete wouldn't work correctly from a block to a cE=false element. + Fixed bug where smartpaste wasn't detecting links with special characters in them like tilde. + Fixed bug where the editor wouldn't get proper focus if you clicked on a cE=false element. + Fixed bug where it wasn't possible to copy/paste table rows that had merged cells. + Fixed bug where merging cells could some times produce invalid col/rowspan attibute values. + Fixed bug where getBody would sometimes thrown an exception now it just returns null if the iframe is clobbered. + Fixed bug where drag/drop of cE=false element wasn't properly constrained to viewport. + Fixed bug where contextmenu on Mac would collapse any selection to a caret. + Fixed bug where rtl mode wasn't rendered properly when loading a language pack with the rtl flag. + Fixed bug where Kamer word bounderies would be stripped from contents. + Fixed bug where lists would sometimes render two dots or numbers on the same line. + Fixed bug where the skin_url wasn't used by the inlite theme. + Fixed so data attributes are ignored when comparing formats in the formatter. + Fixed so it's possible to disable inline toolbars in the inlite theme. + Fixed so template dialog gets resized if it doesn't fit the window viewport. +Version 4.4.1 (2016-07-26) + Added smart_paste option to paste plugin to allow disabling the paste behavior if needed. + Fixed bug where png urls wasn't properly detected by the smart paste logic. + Fixed bug where the element path wasn't working properly when multiple editor instances where used. + Fixed bug with creating lists out of multiple paragraphs would just create one list item instead of multiple. + Fixed bug where scroll position wasn't properly handled by the inlite theme to place the toolbar properly. + Fixed bug where multiple instances of the editor using the inlite theme didn't render the toolbar properly. + Fixed bug where the shortcut label for fullscreen mode didn't match the actual shortcut key. + Fixed bug where it wasn't possible to select cE=false blocks using touch devices on for example iOS. + Fixed bug where it was possible to select the child image within a cE=false on IE 11. + Fixed so inserts of html containing lists doesn't merge with any existing lists unless it's a paste operation. +Version 4.4.0 (2016-06-30) + Added new inlite theme this is a more lightweight inline UI. + Added smarter paste logic that auto detects urls in the clipboard and inserts images/links based on that. + Added a better image resize algorithm for better image quality in the imagetools plugin. + Fixed bug where it wasn't possible to drag/dropping cE=false elements on FF. + Fixed bug where backspace/delete before/after a cE=false block would produce a new paragraph. + Fixed bug where list style type css property wasn't preserved when indenting lists. + Fixed bug where merging of lists where done even if the list style type was different. + Fixed bug where the image_dataimg_filter function wasn't used when pasting images. + Fixed bug where nested editable within a non editable element would cause scroll on focus in Chrome. + Fixed so invalid targets for inline mode is blocked on initialization. We only support elements that can have children. +Version 4.3.13 (2016-06-08) + Added characters with a diacritical mark to charmap plugin. Patch contributed by Dominik Schilling. + Added better error handling if the image proxy service would produce errors. + Fixed issue with pasting list items into list items would produce nested list rather than a merged list. + Fixed bug where table selection could get stuck in selection mode for inline editors. + Fixed bug where it was possible to place the caret inside the resize grid elements. + Fixed bug where it wasn't possible to place in elements horizontally adjacent cE=false blocks. + Fixed bug where multiple notifications wouldn't be properly placed on screen. + Fixed bug where multiple editor instance of the same id could be produces in some specific integrations. +Version 4.3.12 (2016-05-10) + Fixed bug where focus calls couldn't be made inside the editors PostRender event handler. + Fixed bug where some translations wouldn't work as expected due to a bug in editor.translate. + Fixed bug where the node change event could fire with a node out side the root of the editor. + Fixed bug where Chrome wouldn't properly present the keyboard paste clipboard details when paste was clicked. + Fixed bug where merged cells in tables couldn't be selected from right to left. + Fixed bug where insert row wouldn't properly update a merged cells rowspan property. + Fixed bug where the color input boxes preview field wasn't properly set on initialization. + Fixed bug where IME composition inside table cells wouldn't work as expected on IE 11. + Fixed so all shadow dom support is under and experimental flag due to flaky browser support. +Version 4.3.11 (2016-04-25) + Fixed bug where it wasn't possible to insert empty blocks though the API unless they where padded. + Fixed bug where you couldn't type the Euro character on Windows. + Fixed bug where backspace/delete from a cE=false element to a text block didn't work properly. + Fixed bug where the text color default grid would render incorrectly. + Fixed bug where the codesample plugin wouldn't load the css in the editor for multiple editors. + Fixed so the codesample plugin textarea gets focused by default. +Version 4.3.10 (2016-04-12) + Fixed bug where the key "y" on WebKit couldn't be entered due to conflict with keycode for F10 on keypress. +Version 4.3.9 (2016-04-12) + Added support for focusing the contextual toolbars using keyboard. + Added keyboard support for slider UI controls. You can no increase/decrease using arrow keys. + Added url pattern matching for Dailymotion to media plugin. Patch contributed by Bertrand Darbon. + Added body_class to template plugin preview. Patch contributed by Milen Petrinski. + Added options to better override textcolor pickers with custom colors. Patch contributed by Xavier Boubert. + Added visual arrows to inline contextual toolbars so that they point to the element being active. + Fixed so toolbars for tables or other larger elements get better positioned below the scrollable viewport. + Fixed bug where it was possible to click links inside cE=false blocks. + Fixed bug where event targets wasn't properly handled in Safari Technical Preview. + Fixed bug where drag/drop text in FF 45 would make the editor caret invisible. + Fixed bug where the remove state wasn't properly set on editor instances when detected as clobbered. + Fixed bug where offscreen selection of some cE=false elements would render onscreen. Patch contributed by Steven Bufton + Fixed bug where enter would clone styles out side the root on editors inside a span. Patch contributed by ChristophKaser. + Fixed bug where drag/drop of images into the editor didn't work correctly in FF. + Fixed so the first item in panels for the imagetools dialog gets proper keyboard focus. + Changed the Meta+Shift+F shortcut to Ctrl+Shift+F since Czech, Slovak, Polish languages used the first one for input. +Version 4.3.8 (2016-03-15) + Fixed bug where inserting HR at the end of a block element would produce an extra empty block. + Fixed bug where links would be clickable when readonly mode was enabled. + Fixed bug where the formatter would normalize to the wrong node on very specific content. + Fixed bug where some nested list items couldn't be indented properly. + Fixed bug where links where clickable in the preview dialog. + Fixed so the alt attribute doesn't get padded with an empty value by default. + Fixed so nested alignment works more correctly. You will now alter the alignment to the closest block parent. +Version 4.3.7 (2016-03-02) + Fixed bug where incorrect icons would be rendered for imagetools edit and color levels. + Fixed bug where navigation using arrow keys inside a SelectBox didn't move up/down. + Fixed bug where the visualblocks plugin would render borders round internal UI elements. +Version 4.3.6 (2016-03-01) + Added new paste_remember_plaintext_info option to allow a global disable of the plain text mode notification. + Added new PastePlainTextToggle event that fires when plain text mode toggles on/off. + Fixed bug where it wasn't possible to select media elements since the drag logic would snap it to mouse cursor. + Fixed bug where it was hard to place the caret inside nested cE=true elements when the outer cE=false element was focused. + Fixed bug where editors wouldn't properly initialize if both selector and mode where used. + Fixed bug where IME input inside table cells would switch the IME off. + Fixed bug where selection inside the first table cell would cause the whole table cell to get selected. + Fixed bug where error handling of images being uploaded wouldn't properly handle faulty statuses. + Fixed bug where inserting contents before a HR would cause an exception to be thrown. + Fixed bug where copy/paste of Excel data would be inserted as an image. + Fixed caret position issues with copy/paste of inline block cE=false elements. + Fixed issues with various menu item focus bugs in Chrome. Where the focused menu bar item wasn't properly blurred. + Fixed so the notifications have a solid background since it would be hard to read if there where text under it. + Fixed so notifications gets animated similar to the ones used by dialogs. + Fixed so larger images that gets pasted is handled better. + Fixed so the window close button is more uniform on various platform and also increased it's hit area. +Version 4.3.5 (2016-02-11) + Npm version bump due to package not being fully updated. +Version 4.3.4 (2016-02-11) + Added new OpenWindow/CloseWindow events that gets fired when windows open/close. + Added new NewCell/NewRow events that gets fired when table cells/rows are created. + Added new Promise return value to tinymce.init makes it easier to handle initialization. + Removed the jQuery version the jQuery plugin is now moved into the main package. + Removed jscs from build process since eslint can now handle code style checking. + Fixed various bugs with drag/drop of contentEditable:false elements. + Fixed bug where deleting of very specific nested list items would result in an odd list. + Fixed bug where lists would get merged with adjacent lists outside the editable inline root. + Fixed bug where MS Edge would crash when closing a dialog then clicking a menu item. + Fixed bug where table cell selection would add undo levels. + Fixed bug where table cell selection wasn't removed when inline editor where removed. + Fixed bug where table cell selection wouldn't work properly on nested tables. + Fixed bug where table merge menu would be available when merging between thead and tbody. + Fixed bug where table row/column resize wouldn't get properly removed when the editor was removed. + Fixed bug where Chrome would scroll to the editor if there where a empty hash value in document url. + Fixed bug where the cache suffix wouldn't work correctly with the importcss plugin. + Fixed bug where selection wouldn't work properly on MS Edge on Windows Phone 10. + Fixed so adjacent pre blocks gets joined into one pre block since that seems like the user intent. + Fixed so events gets properly dispatched in shadow dom. Patch provided by Nazar Mokrynskyi. +Version 4.3.3 (2016-01-14) + Added new table_resize_bars configuration setting. This setting allows you to disable the table resize bars. + Added new beforeInitialize event to tinymce.util.XHR lets you modify XHR properties before open. Patch contributed by Brent Clintel. + Added new autolink_pattern setting to autolink plugin. Enables you to override the default autolink formats. Patch contributed by Ben Tiedt. + Added new charmap option that lets you override the default charmap of the charmap plugin. + Added new charmap_append option that lets you add new characters to the default charmap of the charmap plugin. + Added new insertCustomChar event that gets fired when a character is inserted by the charmap plugin. + Fixed bug where table cells started with a superfluous   in IE10+. + Fixed bug where table plugin would retain all BR tags when cells were merged. + Fixed bug where media plugin would strip underscores from youtube urls. + Fixed bug where IME input would fail on IE 11 if you typed within a table. + Fixed bug where double click selection of a word would remove the space before the word on insert contents. + Fixed bug where table plugin would produce exceptions when hovering tables with invalid structure. + Fixed bug where fullscreen wouldn't scroll back to it's original position when untoggled. + Fixed so the template plugins templates setting can be a function that gets a callback that can provide templates. +Version 4.3.2 (2015-12-14) + Fixed bug where the resize bars for table cells were not affected by the object_resizing property. + Fixed bug where the contextual table toolbar would appear incorrectly if TinyMCE was initialized inline inside a table. + Fixed bug where resizing table cells did not fire a node change event or add an undo level. + Fixed bug where double click selection of text on IE 11 wouldn't work properly. + Fixed bug where codesample plugin would incorrectly produce br elements inside code elements. + Fixed bug where media plugin would strip dashes from youtube urls. + Fixed bug where it was possible to move the caret into the table resize bars. + Fixed bug where drag/drop into a cE=false element was possible on IE. +Version 4.3.1 (2015-11-30) + Fixed so it's possible to disable the table inline toolbar by setting it to false or an empty string. + Fixed bug where it wasn't possible to resize some tables using the drag handles. + Fixed bug where unique id:s would clash for multiple editor instances and cE=false selections. + Fixed bug where the same plugin could be initialized multiple times. + Fixed bug where the table inline toolbars would be displayed at the same time as the image toolbars. + Fixed bug where the table selection rect wouldn't be removed when selecting another control element. +Version 4.3.0 (2015-11-23) + Added new table column/row resize support. Makes it a lot more easy to resize the columns/rows in a table. + Added new table inline toolbar. Makes it easier to for example add new rows or columns to a table. + Added new notification API. Lets you display floating notifications to the end user. + Added new codesample plugin that lets you insert syntax highlighted pre elements into the editor. + Added new image_caption to images. Lets you create images with captions using a HTML5 figure/figcaption elements. + Added new live previews of embeded videos. Lets you play the video right inside the editor. + Added new setDirty method and "dirty" event to the editor. Makes it easier to track the dirty state change. + Added new setMode method to Editor instances that lets you dynamically switch between design/readonly. + Added new core support for contentEditable=false elements within the editor overrides the browsers broken behavior. + Rewrote the noneditable plugin to use the new contentEditable false core logic. + Fixed so the dirty state doesn't set to false automatically when the undo index is set to 0. + Fixed the Selection.placeCaretAt so it works better on IE when the coordinate is between paragraphs. + Fixed bug where data-mce-bogus="all" element contents where counted by the word count plugin. + Fixed bug where contentEditable=false elements would be indented by the indent buttons. + Fixed bug where images within contentEditable=false would be selected in WebKit on mouse click. + Fixed bug in DOMUntils split method where the replacement parameter wouldn't work on specific cases. + Fixed bug where the importcss plugin would import classes from the skin content css file. + Fixed so all button variants have a wrapping span for it's text to make it easier to skin. + Fixed so it's easier to exit pre block using the arrow keys. + Fixed bug where listboxes with fix widths didn't render correctly. +Version 4.2.8 (2015-11-13) + Fixed bug where it was possible to delete tables as the inline root element if all columns where selected. + Fixed bug where the UI buttons active state wasn't properly updated due to recent refactoring of that logic. +Version 4.2.7 (2015-10-27) + Fixed bug where backspace/delete would remove all formats on the last paragraph character in WebKit/Blink. + Fixed bug where backspace within a inline format element with a bogus caret container would move the caret. + Fixed bug where backspace/delete on selected table cells wouldn't add an undo level. + Fixed bug where script tags embedded within the editor could sometimes get a mce- prefix prepended to them + Fixed bug where validate: false option could produce an error to be thrown from the Serialization step. + Fixed bug where inline editing of a table as the root element could let the user delete that table. + Fixed bug where inline editing of a table as the root element wouldn't properly handle enter key. + Fixed bug where inline editing of a table as the root element would normalize the selection incorrectly. + Fixed bug where inline editing of a list as the root element could let the user delete that list. + Fixed bug where inline editing of a list as the root element could let the user split that list. + Fixed bug where resize handles would be rendered on editable root elements such as table. +Version 4.2.6 (2015-09-28) + Added capability to set request headers when using XHRs. + Added capability to upload local images automatically default delay is set to 30 seconds after editing images. + Added commands ids mceEditImage, mceAchor and mceMedia to be avaiable from execCommand. + Added Edge browser to saucelabs grunt task. Patch contributed by John-David Dalton. + Fixed bug where blob uris not produced by tinymce would produce HTML invalid markup. + Fixed bug where selection of contents of a nearly empty editor in Edge would sometimes fail. + Fixed bug where color styles woudln't be retained on copy/paste in Blink/Webkit. + Fixed bug where the table plugin would throw an error when inserting rows after a child table. + Fixed bug where the template plugin wouldn't handle functions as variable replacements. + Fixed bug where undo/redo sometimes wouldn't work properly when applying formatting collapsed ranges. + Fixed bug where shift+delete wouldn't do a cut operation on Blink/WebKit. + Fixed bug where cut action wouldn't properly store the before selection bookmark for the undo level. + Fixed bug where backspace in side an empty list element on IE would loose editor focus. + Fixed bug where the save plugin wouldn't enable the buttons when a change occurred. + Fixed bug where Edge wouldn't initialize the editor if a document.domain was specified. + Fixed bug where enter key before nested images would sometimes not properly expand the previous block. + Fixed bug where the inline toolbars wouldn't get properly hidden when blurring the editor instance. + Fixed bug where Edge would paste Chinese characters on some Windows 10 installations. + Fixed bug where IME would loose focus on IE 11 due to the double trailing br bug fix. + Fixed bug where the proxy url in imagetools was incorrect. Patch contributed by Wong Ho Wang. +Version 4.2.5 (2015-08-31) + Added fullscreen capability to embedded youtube and vimeo videos. + Fixed bug where the uploadImages call didn't work on IE 10. + Fixed bug where image place holders would be uploaded by uploadImages call. + Fixed bug where images marked with bogus would be uploaded by the uploadImages call. + Fixed bug where multiple calls to uploadImages would result in decreased performance. + Fixed bug where pagebreaks were editable to imagetools patch contributed by Rasmus Wallin. + Fixed bug where the element path could cause too much recursion exception. + Fixed bug for domains containing ".min". Patch contributed by Loïc Février. + Fixed so validation of external links to accept a number after www. Patch contributed by Victor Carvalho. + Fixed so the charmap is exposed though execCommand. Patch contributed by Matthew Will. + Fixed so that the image uploads are concurrent for improved performance. + Fixed various grammar problems in inline documentation. Patches provided by nikolas. +Version 4.2.4 (2015-08-17) + Added picture as a valid element to the HTML 5 schema. Patch contributed by Adam Taylor. + Fixed bug where contents would be duplicated on drag/drop within the same editor. + Fixed bug where floating/alignment of images on Edge wouldn't work properly. + Fixed bug where it wasn't possible to drag images on IE 11. + Fixed bug where image selection on Edge would sometimes fail. + Fixed bug where contextual toolbars icons wasn't rendered properly when using the toolbar_items_size. + Fixed bug where searchreplace dialog doesn't get prefilled with the selected text. + Fixed bug where fragmented matches wouldn't get properly replaced by the searchreplace plugin. + Fixed bug where enter key wouldn't place the caret if was after a trailing space within an inline element. + Fixed bug where the autolink plugin could produce multiple links for the same text on Gecko. + Fixed bug where EditorUpload could sometimes throw an exception if the blob wasn't found. + Fixed xss issues with media plugin not properly filtering out some script attributes. +Version 4.2.3 (2015-07-30) + Fixed bug where image selection wasn't possible on Edge due to incompatible setBaseAndExtend API. + Fixed bug where image blobs urls where not properly destroyed by the imagetools plugin. + Fixed bug where keyboard shortcuts wasn't working correctly on IE 8. + Fixed skin issue where the borders of panels where not visible on IE 8. +Version 4.2.2 (2015-07-22) + Fixed bug where float panels were not being hidden on inline editor blur when fixed_toolbar_container config option was in use. + Fixed bug where combobox states wasn't properly updated if contents where updated without keyboard. + Fixed bug where pasting into textbox or combobox would move the caret to the end of text. + Fixed bug where removal of bogus span elements before block elements would remove whitespace between nodes. + Fixed bug where repositioning of inline toolbars where async and producing errors if the editor was removed from DOM to early. Patch by iseulde. + Fixed bug where element path wasn't working correctly. Patch contributed by iseulde. + Fixed bug where menus wasn't rendered correctly when custom images where added to a menu. Patch contributed by Naim Hammadi. +Version 4.2.1 (2015-06-29) + Fixed bug where back/forward buttons in the browser would render blob images as broken images. + Fixed bug where Firefox would throw regexp to big error when replacing huge base64 chunks. + Fixed bug rendering issues with resize and context toolbars not being placed properly until next animation frame. + Fixed bug where the rendering of the image while cropping would some times not be centered correctly. + Fixed bug where listbox items with submenus would me selected as active. + Fixed bug where context menu where throwing an error when rendering. + Fixed bug where resize both option wasn't working due to resent addClass API change. Patch contributed by Jogai. + Fixed bug where a hideAll call for container rendered inline toolbars would throw an error. + Fixed bug where onclick event handler on combobox could cause issues if element.id was a function by some polluting libraries. + Fixed bug where listboxes wouldn't get proper selected sub menu item when using link_list or image_list. + Fixed so the UI controls are as wide as 4.1.x to avoid wrapping controls in toolbars. + Fixed so the imagetools dialog is adaptive for smaller screen sizes. +Version 4.2.0 (2015-06-25) + Added new flat default skin to make the UI more modern. + Added new imagetools plugin, lets you crop/resize and apply filters to images. + Added new contextual toolbars support to the API lets you add floating toolbars for specific CSS selectors. + Added new promise feature fill as tinymce.util.Promise. + Added new built in image upload feature lets you upload any base64 encoded image within the editor as files. + Fixed bug where resize handles would appear in the right position in the wrong editor when switching between resizable content in different inline editors. + Fixed bug where tables would not be inserted in inline mode due to previous float panel fix. + Fixed bug where floating panels would remain open when focus was lost on inline editors. + Fixed bug where cut command on Chrome would thrown a browser security exception. + Fixed bug where IE 11 sometimes would report an incorrect size for images in the image dialog. + Fixed bug where it wasn't possible to remove inline formatting at the end of block elements. + Fixed bug where it wasn't possible to delete table cell contents when cell selection was vertical. + Fixed bug where table cell wasn't emptied from block elements if delete/backspace where pressed in empty cell. + Fixed bug where cmd+shift+arrow didn't work correctly on Firefox mac when selecting to start/end of line. + Fixed bug where removal of bogus elements would sometimes remove whitespace between nodes. + Fixed bug where the resize handles wasn't updated when the main window was resized. + Fixed so script elements gets removed by default to prevent possible XSS issues in default config implementations. + Fixed so the UI doesn't need manual reflows when using non native layout managers. + Fixed so base64 encoded images doesn't slow down the editor on modern browsers while editing. + Fixed so all UI elements uses touch events to improve mobile device support. + Removed the touch click quirks patch for iOS since it did more harm than good. + Removed the non proportional resize handles since. Unproportional resize can still be done by holding the shift key. +Version 4.1.10 (2015-05-05) + Fixed bug where plugins loaded with compat3x would sometimes throw errors when loading using the jQuery version. + Fixed bug where extra empty paragraphs would get deleted in WebKit/Blink due to recent Quriks fix. + Fixed bug where the editor wouldn't work properly on IE 12 due to some required browser sniffing. + Fixed bug where formatting shortcut keys where interfering with Mac OS X screenshot keys. + Fixed bug where the caret wouldn't move to the next/previous line boundary on Cmd+Left/Right on Gecko. + Fixed bug where it wasn't possible to remove formats from very specific nested contents. + Fixed bug where undo levels wasn't produced when typing letters using the shift or alt+ctrl modifiers. + Fixed bug where the dirty state wasn't properly updated when typing using the shift or alt+ctrl modifiers. + Fixed bug where an error would be thrown if an autofocused editor was destroyed quickly after its initialization. Patch provided by thorn0. + Fixed issue with dirty state not being properly updated on redo operation. + Fixed issue with entity decoder not handling incorrectly written numeric entities. + Fixed issue where some PI element values wouldn't be properly encoded. +Version 4.1.9 (2015-03-10) + Fixed bug where indentation wouldn't work properly for non list elements. + Fixed bug with image plugin not pulling the image dimensions out correctly if a custom document_base_url was used. + Fixed bug where ctrl+alt+[1-9] would conflict with the AltGr+[1-9] on Windows. New shortcuts is ctrl+shift+[1-9]. + Fixed bug with removing formatting on nodes in inline mode would sometimes include nodes outside the editor body. + Fixed bug where extra nbsp:s would be inserted when you replaced a word surrounded by spaces using insertContent. + Fixed bug with pasting from Google Docs would produce extra strong elements and line feeds. +Version 4.1.8 (2015-03-05) + Added new html5 sizes attribute to img elements used together with srcset. + Added new elementpath option that makes it possible to disable the element path but keep the statusbar. + Added new option table_style_by_css for the table plugin to set table styling with css rather than table attributes. + Added new link_assume_external_targets option to prompt the user to prepend http:// prefix if the supplied link does not contain a protocol prefix. + Added new image_prepend_url option to allow a custom base path/url to be added to images. + Added new table_appearance_options option to make it possible to disable some options. + Added new image_title option to make it possible to alter the title of the image, disabled by default. + Fixed bug where selection starting from out side of the body wouldn't produce a proper selection range on IE 11. + Fixed bug where pressing enter twice before a table moves the cursor in the table and causes a javascript error. + Fixed bug where advanced image styles were not respected. + Fixed bug where the less common Shift+Delete didn't produce a proper cut operation on WebKit browsers. + Fixed bug where image/media size constrain logic would produce NaN when handling non number values. + Fixed bug where internal classes where removed by the removeformat command. + Fixed bug with creating links table cell contents with a specific selection would throw a exceptions on WebKit/Blink. + Fixed bug where valid_classes option didn't work as expected according to docs. Patch provided by thorn0. + Fixed bug where jQuery plugin would patch the internal methods multiple times. Patch provided by Drew Martin. + Fixed bug where backspace key wouldn't delete the current selection of newly formatted content. + Fixed bug where type over of inline formatting elements wouldn't properly keep the format on WebKit/Blink. + Fixed bug where selection needed to be properly normalized on modern IE versions. + Fixed bug where Command+Backspace didn't properly delete the whole line of text but the previous word. + Fixed bug where UI active states wheren't properly updated on IE if you placed caret within the current range. + Fixed bug where delete/backspace on WebKit/Blink would remove span elements created by the user. + Fixed bug where delete/backspace would produce incorrect results when deleting between two text blocks with br elements. + Fixed bug where captions where removed when pasting from MS Office. + Fixed bug where lists plugin wouldn't properly remove fully selected nested lists. + Fixed bug where the ttf font used for icons would throw an warning message on Gecko on Mac OS X. + Fixed a bug where applying a color to text did not update the undo/redo history. + Fixed so shy entities gets displayed when using the visualchars plugin. + Fixed so removeformat removes ins/del by default since these might be used for strikethough. + Fixed so multiple language packs can be loaded and added to the global I18n data structure. + Fixed so transparent color selection gets treated as a normal color selection. Patch contributed by Alexander Hofbauer. + Fixed so it's possible to disable autoresize_overflow_padding, autoresize_bottom_margin options by setting them to false. + Fixed so the charmap plugin shows the description of the character in the dialog. Patch contributed by Jelle Hissink. + Removed address from the default list of block formats since it tends to be missused. + Fixed so the pre block format is called preformatted to make it more verbose. + Fixed so it's possible to context scope translation strings this isn't needed most of the time. + Fixed so the max length of the width/height input fields of the media dialog is 5 instead of 3. + Fixed so drag/dropped contents gets properly processed by paste plugin since it's basically a paste. Patch contributed by Greg Fairbanks. + Fixed so shortcut keys for headers is ctrl+alt+[1-9] instead of ctrl+[1-9] since these are for switching tabs in the browsers. + Fixed so "u" doesn't get converted into a span element by the legacy input filter. Since this is now a valid HTML5 element. + Fixed font families in order to provide appropriate web-safe fonts. +Version 4.1.7 (2014-11-27) + Added HTML5 schema support for srcset, source and picture. Patch contributed by mattheu. + Added new cache_suffix setting to enable cache busting by producing unique urls. + Added new paste_convert_word_fake_lists option to enable users to disable the fake lists convert logic. + Fixed so advlist style changes adds undo levels for each change. + Fixed bug where WebKit would sometimes produce an exception when the autolink plugin where looking for URLs. + Fixed bug where IE 7 wouldn't be rendered properly due to aggressive css compression. + Fixed bug where DomQuery wouldn't accept window as constructor element. + Fixed bug where the color picker in 3.x dialogs wouldn't work properly. Patch contributed by Callidior. + Fixed bug where the image plugin wouldn't respect the document_base_url. + Fixed bug where the jQuery plugin would fail to append to elements named array prototype names. +Version 4.1.6 (2014-10-08) + Fixed bug with clicking on the scrollbar of the iframe would cause a JS error to be thrown. + Fixed bug where null would produce an exception if you passed it to selection.setRng. + Fixed bug where Ctrl/Cmd+Tab would indent the current list item if you switched tabs in the browser. + Fixed bug where pasting empty cells from Excel would result in a broken table. + Fixed bug where it wasn't possible to switch back to default list style type. + Fixed issue where the select all quirk fix would fire for other modifiers than Ctrl/Cmd combinations. + Replaced jake with grunt since it is more mainstream and has better plugin support. +Version 4.1.5 (2014-09-09) + Fixed bug where sometimes the resize rectangles wouldn't properly render on images on WebKit/Blink. + Fixed bug in list plugin where delete/backspace would merge empty LI elements in lists incorrectly. + Fixed bug where empty list elements would result in empty LI elements without it's parent container. + Fixed bug where backspace in empty caret formatted element could produce an type error exception of Gecko. + Fixed bug where lists pasted from word with a custom start index above 9 wouldn't be properly handled. + Fixed bug where tabfocus plugin would tab out of the editor instance even if the default action was prevented. + Fixed bug where tabfocus wouldn't tab properly to other adjacent editor instances. + Fixed bug where the DOMUtils setStyles wouldn't properly removed or update the data-mce-style attribute. + Fixed bug where dialog select boxes would be placed incorrectly if document.body wasn't statically positioned. + Fixed bug where pasting would sometimes scroll to the top of page if the user was using the autoresize plugin. + Fixed bug where caret wouldn't be properly rendered by Chrome when clicking on the iframes documentElement. + Fixed so custom images for menubutton/splitbutton can be provided. Patch contributed by Naim Hammadi. + Fixed so the default action of windows closing can be prevented by blocking the default action of the close event. + Fixed so nodeChange and focus of the editor isn't automatically performed when opening sub dialogs. Version 4.1.4 (2014-08-21) - Added new media_filter_html option to media plugin that blocks any conditional comments, scripts etc within a video element. - Added new content_security_policy option allows you to set custom policy for iframe contents. Patch contributed by Francois Chagnon. - Fixed bug where activate/deactivate events wasn't firing properly when switching between editors. - Fixed bug where placing the caret on iOS was difficult due to a WebKit bug with touch events. - Fixed bug where the resize helper wouldn't render properly on older IE versions. - Fixed bug where resizing images inside tables on older IE versions would sometimes fail depending mouse position. - Fixed bug where editor.insertContent would produce an exception when inserting select/option elements. - Fixed bug where extra empty paragraphs would be produced if block elements where inserted inside span elements. - Fixed bug where the spellchecker menu item wouldn't be properly checked if spell checking was started before it was rendered. - Fixed bug where the DomQuery filter function wouldn't remove non elements from collection. - Fixed bug where document with custom document.domain wouldn't properly render the editor. - Fixed bug where IE 8 would throw exception when trying to enter invalid color values into colorboxes. - Fixed bug where undo manager could incorrectly add an extra undo level when custom resize handles was removed. - Fixed bug where it wouldn't be possible to alter cell properties properly on table cells on IE 8. - Fixed so the color picker button in table dialog isn't shown unless you include the colorpicker plugin or add your own custom color picker. - Fixed so activate/deactivate events fire when windowManager opens a window since. - Fixed so the table advtab options isn't separated by an underscore to normalize naming with image_advtab option. - Fixed so the table cell dialog has proper padding when the advanced tab in disabled. + Added new media_filter_html option to media plugin that blocks any conditional comments, scripts etc within a video element. + Added new content_security_policy option allows you to set custom policy for iframe contents. Patch contributed by Francois Chagnon. + Fixed bug where activate/deactivate events wasn't firing properly when switching between editors. + Fixed bug where placing the caret on iOS was difficult due to a WebKit bug with touch events. + Fixed bug where the resize helper wouldn't render properly on older IE versions. + Fixed bug where resizing images inside tables on older IE versions would sometimes fail depending mouse position. + Fixed bug where editor.insertContent would produce an exception when inserting select/option elements. + Fixed bug where extra empty paragraphs would be produced if block elements where inserted inside span elements. + Fixed bug where the spellchecker menu item wouldn't be properly checked if spell checking was started before it was rendered. + Fixed bug where the DomQuery filter function wouldn't remove non elements from collection. + Fixed bug where document with custom document.domain wouldn't properly render the editor. + Fixed bug where IE 8 would throw exception when trying to enter invalid color values into colorboxes. + Fixed bug where undo manager could incorrectly add an extra undo level when custom resize handles was removed. + Fixed bug where it wouldn't be possible to alter cell properties properly on table cells on IE 8. + Fixed so the color picker button in table dialog isn't shown unless you include the colorpicker plugin or add your own custom color picker. + Fixed so activate/deactivate events fire when windowManager opens a window since. + Fixed so the table advtab options isn't separated by an underscore to normalize naming with image_advtab option. + Fixed so the table cell dialog has proper padding when the advanced tab in disabled. Version 4.1.3 (2014-07-29) - Added event binding logic to tinymce.util.XHR making it possible to override headers and settings before any request is made. - Fixed bug where drag events wasn't fireing properly on older IE versions since the event handlers where bound to document. - Fixed bug where drag/dropping contents within the editor on IE would force the contents into plain text mode even if it was internal content. - Fixed bug where IE 7 wouldn't open menus properly due to a resize bug in the browser auto closing them immediately. - Fixed bug where the DOMUtils getPos logic wouldn't produce a valid coordinate inside the body if the body was positioned non static. - Fixed bug where the element path and format state wasn't properly updated if you had the wordcount plugin enabled. - Fixed bug where a comment at the beginning of source would produce an exception in the formatter logic. - Fixed bug where setAttrib/getAttrib on null would throw exception together with any hooked attributes like style. - Fixed bug where table sizes wasn't properly retained when copy/pasting on WebKit/Blink. - Fixed bug where WebKit/Blink would produce colors in RGB format instead of the forced HEX format when deleting contents. - Fixed bug where the width attribute wasn't updated on tables if you changed the size inside the table dialog. - Fixed bug where control selection wasn't properly handled when the caret was placed directly after an image. - Fixed bug where selecting the contents of table cells using the selection.select method wouldn't place the caret properly. - Fixed bug where the selection state for images wasn't removed when placing the caret right after an image on WebKit/Blink. - Fixed bug where all events wasn't properly unbound when and editor instance was removed or destroyed by some external innerHTML call. - Fixed bug where it wasn't possible or very hard to select images on iOS when the onscreen keyboard was visible. - Fixed so auto_focus can take a boolean argument this will auto focus the last initialized editor might be useful for single inits. - Fixed so word auto detect lists logic works better for faked lists that doesn't have specific markup. - Fixed so nodeChange gets fired on mouseup as it used to before 4.1.1 we optimized that event to fire less often. - Removed the finish menu item from spellchecker menu since it's redundant you can stop spellchecking by toggling menu item or button. + Added event binding logic to tinymce.util.XHR making it possible to override headers and settings before any request is made. + Fixed bug where drag events wasn't fireing properly on older IE versions since the event handlers where bound to document. + Fixed bug where drag/dropping contents within the editor on IE would force the contents into plain text mode even if it was internal content. + Fixed bug where IE 7 wouldn't open menus properly due to a resize bug in the browser auto closing them immediately. + Fixed bug where the DOMUtils getPos logic wouldn't produce a valid coordinate inside the body if the body was positioned non static. + Fixed bug where the element path and format state wasn't properly updated if you had the wordcount plugin enabled. + Fixed bug where a comment at the beginning of source would produce an exception in the formatter logic. + Fixed bug where setAttrib/getAttrib on null would throw exception together with any hooked attributes like style. + Fixed bug where table sizes wasn't properly retained when copy/pasting on WebKit/Blink. + Fixed bug where WebKit/Blink would produce colors in RGB format instead of the forced HEX format when deleting contents. + Fixed bug where the width attribute wasn't updated on tables if you changed the size inside the table dialog. + Fixed bug where control selection wasn't properly handled when the caret was placed directly after an image. + Fixed bug where selecting the contents of table cells using the selection.select method wouldn't place the caret properly. + Fixed bug where the selection state for images wasn't removed when placing the caret right after an image on WebKit/Blink. + Fixed bug where all events wasn't properly unbound when and editor instance was removed or destroyed by some external innerHTML call. + Fixed bug where it wasn't possible or very hard to select images on iOS when the onscreen keyboard was visible. + Fixed so auto_focus can take a boolean argument this will auto focus the last initialized editor might be useful for single inits. + Fixed so word auto detect lists logic works better for faked lists that doesn't have specific markup. + Fixed so nodeChange gets fired on mouseup as it used to before 4.1.1 we optimized that event to fire less often. + Removed the finish menu item from spellchecker menu since it's redundant you can stop spellchecking by toggling menu item or button. Version 4.1.2 (2014-07-15) - Added offset/grep to DomQuery class works basically the same as it's jQuery equivalent. - Fixed bug where backspace/delete or setContent with an empty string would remove header data when using the fullpage plugin. - Fixed bug where tinymce.remove with a selector not matching any editors would remove all editors. - Fixed bug where resizing of the editor didn't work since the theme was calling setStyles instead of setStyle. - Fixed bug where IE 7 would fail to append html fragments to iframe document when using DomQuery. - Fixed bug where the getStyle DOMUtils method would produce an exception if it was called with null as it's element. - Fixed bug where the paste plugin would remove the element if the none of the paste_webkit_styles rules matched the current style. - Fixed bug where contextmenu table items wouldn't work properly on IE since it would some times fire an incorrect selection change. - Fixed bug where the padding/border values wasn't used in the size calculation for the body size when using autoresize. Patch contributed by Matt Whelan. - Fixed bug where conditional word comments wouldn't be properly removed when pasting plain text. - Fixed bug where resizing would sometime fail on IE 11 when the mouseup occurred inside the resizable element. - Fixed so the iframe gets initialized without any inline event handlers for better CSP support. Patch contributed by Matt Whelan. - Fixed so the tinymce.dom.Sizzle is the latest version of sizzle this resolves the document context bug. + Added offset/grep to DomQuery class works basically the same as it's jQuery equivalent. + Fixed bug where backspace/delete or setContent with an empty string would remove header data when using the fullpage plugin. + Fixed bug where tinymce.remove with a selector not matching any editors would remove all editors. + Fixed bug where resizing of the editor didn't work since the theme was calling setStyles instead of setStyle. + Fixed bug where IE 7 would fail to append html fragments to iframe document when using DomQuery. + Fixed bug where the getStyle DOMUtils method would produce an exception if it was called with null as it's element. + Fixed bug where the paste plugin would remove the element if the none of the paste_webkit_styles rules matched the current style. + Fixed bug where contextmenu table items wouldn't work properly on IE since it would some times fire an incorrect selection change. + Fixed bug where the padding/border values wasn't used in the size calculation for the body size when using autoresize. Patch contributed by Matt Whelan. + Fixed bug where conditional word comments wouldn't be properly removed when pasting plain text. + Fixed bug where resizing would sometime fail on IE 11 when the mouseup occurred inside the resizable element. + Fixed so the iframe gets initialized without any inline event handlers for better CSP support. Patch contributed by Matt Whelan. + Fixed so the tinymce.dom.Sizzle is the latest version of sizzle this resolves the document context bug. Version 4.1.1 (2014-07-08) - Fixed bug where pasting plain text on some WebKit versions would result in an empty line. - Fixed bug where resizing images inside tables on IE 11 wouldn't work properly. - Fixed bug where IE 11 would sometimes throw "Invalid argument" exception when editor contents was set to an empty string. - Fixed bug where document.activeElement would throw exceptions on IE 9 when that element was hidden or removed from dom. - Fixed bug where WebKit/Blink sometimes produced br elements with the Apple-interchange-newline class. - Fixed bug where table cell selection wasn't properly removed when copy/pasting table cells. - Fixed bug where pasting nested list items from Word wouldn't produce proper semantic nested lists. - Fixed bug where right clicking using the contextmenu plugin on WebKit/Blink on Mac OS X would select the target current word or line. - Fixed bug where it wasn't possible to alter table cell properties on IE 8 using the context menu. - Fixed bug where the resize helper wouldn't be correctly positioned on older IE versions. - Fixed bug where fullpage plugin would produce an error if you didn't specify a doctype encoding. - Fixed bug where anchor plugin would get the name/id of the current element even if it wasn't anchor element. - Fixed bug where visual aids for tables wouldn't be properly disabled when changing the border size. - Fixed bug where some control selection events wasn't properly fired on older IE versions. - Fixed bug where table cell selection on older IE versions would prevent resizing of images. - Fixed bug with paste_data_images paste option not working properly on modern IE versions. - Fixed bug where custom elements with underscores in the name wasn't properly parsed/serialized. - Fixed bug where applying inline formats to nested list elements would produce an incorrect formatting result. - Fixed so it's possible to hide items from elements path by using preventDefault/stopPropagation. - Fixed so inline mode toolbar gets rendered right aligned if the editable element positioned to the documents right edge. - Fixed so empty inline elements inside empty block elements doesn't get removed if configured to be kept intact. - Fixed so DomQuery parentsUntil/prevUntil/nextUntil supports selectors/elements/filters etc. - Fixed so legacyoutput plugin overrides fontselect and fontsizeselect controls and handles font elements properly. + Fixed bug where pasting plain text on some WebKit versions would result in an empty line. + Fixed bug where resizing images inside tables on IE 11 wouldn't work properly. + Fixed bug where IE 11 would sometimes throw "Invalid argument" exception when editor contents was set to an empty string. + Fixed bug where document.activeElement would throw exceptions on IE 9 when that element was hidden or removed from dom. + Fixed bug where WebKit/Blink sometimes produced br elements with the Apple-interchange-newline class. + Fixed bug where table cell selection wasn't properly removed when copy/pasting table cells. + Fixed bug where pasting nested list items from Word wouldn't produce proper semantic nested lists. + Fixed bug where right clicking using the contextmenu plugin on WebKit/Blink on Mac OS X would select the target current word or line. + Fixed bug where it wasn't possible to alter table cell properties on IE 8 using the context menu. + Fixed bug where the resize helper wouldn't be correctly positioned on older IE versions. + Fixed bug where fullpage plugin would produce an error if you didn't specify a doctype encoding. + Fixed bug where anchor plugin would get the name/id of the current element even if it wasn't anchor element. + Fixed bug where visual aids for tables wouldn't be properly disabled when changing the border size. + Fixed bug where some control selection events wasn't properly fired on older IE versions. + Fixed bug where table cell selection on older IE versions would prevent resizing of images. + Fixed bug with paste_data_images paste option not working properly on modern IE versions. + Fixed bug where custom elements with underscores in the name wasn't properly parsed/serialized. + Fixed bug where applying inline formats to nested list elements would produce an incorrect formatting result. + Fixed so it's possible to hide items from elements path by using preventDefault/stopPropagation. + Fixed so inline mode toolbar gets rendered right aligned if the editable element positioned to the documents right edge. + Fixed so empty inline elements inside empty block elements doesn't get removed if configured to be kept intact. + Fixed so DomQuery parentsUntil/prevUntil/nextUntil supports selectors/elements/filters etc. + Fixed so legacyoutput plugin overrides fontselect and fontsizeselect controls and handles font elements properly. Version 4.1.0 (2014-06-18) - Added new file_picker_callback option to replace the old file_browser_callback the latter will still work though. - Added new custom colors to textcolor plugin will be displayed if a color picker is provided also shows the latest colors. - Added new color_picker_callback option to enable you to add custom color pickers to the editor. - Added new advanced tabs to table/cell/row dialogs to enable you to select colors for border/background. - Added new colorpicker plugin that lets you select colors from a hsv color picker. - Added new tinymce.util.Color class to handle color parsing and converting. - Added new colorpicker UI widget element lets you add a hsv color picker to any form/window. - Added new textpattern plugin that allows you to use markdown like text patterns to format contents. - Added new resize helper element that shows the current width & height while resizing. - Added new "once" method to Editor and EventDispatcher enables since callback execution events. - Added new jQuery like class under tinymce.dom.DomQuery it's exposed on editor instances (editor.$) and globally under (tinymce.$). - Fixed so the default resize method for images are proportional shift/ctrl can be used to make an unproportional size. - Fixed bug where the image_dimensions option of the image plugin would cause exceptions when it tried to update the size. - Fixed bug where table cell dialog class field wasn't properly updated when editing an a table cell with an existing class. - Fixed bug where Safari on Mac would produce webkit-fake-url for pasted images so these are now removed. - Fixed bug where the nodeChange event would get fired before the selection was changed when clicking inside the current selection range. - Fixed bug where valid_classes option would cause exception when it removed internal prefixed classes like mce-item-. - Fixed bug where backspace would cause navigation in IE 8 on an inline element and after a caret formatting was applied. - Fixed so placeholder images produced by the media plugin gets selected when inserted/edited. - Fixed so it's possible to drag in images when the paste_data_images option is enabled. Might be useful for mail clients. - Fixed so images doesn't get a width/height applied if the image_dimensions option is set to false useful for responsive contents. - Fixed so it's possible to pass in an optional arguments object for the nodeChanged function to be passed to all nodechange event listeners. - Fixed bug where media plugin embed code didn't update correctly. -Version 4.0.28 (2014-05-27) - Fixed critical issue with empty urls producing an exception when converted into absolute urls due to resent bug fix in tinymce.util.URI. -Version 4.0.27 (2014-05-27) - Added support for definition lists to lists plugin and enter key logic. This can now created by the format menu. - Added cmd option for the style_formats menu enables you to toggle commands on/off using the formats menu for example lists. - Added definition lists to visualblocks plugin so these are properly visualized like other list elements. - Added new paste_merge_formats option that reduces the number of nested text format elements produced on paste. Enabled by default. - Added better support for nested link_list/image_list menu items each item can now have a "menu" item with subitems. - Added "Add to Dictionary" support to spellchecker plugin when the backend tells that this feature is available. - Added new table_default_attributes/table_default_styles options patch contributed by Dan Villiom Podlaski Christiansen. - Added new table_class_list/table_cell_class_list/table_row_class_list options to table plugin. - Added new invalid_styles/valid_classes options to better control what gets returned for the style/class attribute. - Added new file_browser_callback_types option that allows you to specify where to display the picker based on dialog type. - Fixed so the selected state is properly handled on nested menu items in listboxes patch contributed by Jelle Kralt. - Fixed so the invisiblity css value for TinyMCE gets set to inherit instead of visible to better support dialog scripts like reveal. - Fixed bug where Gecko would remove anchors when pasting since the their default built in logic removes empty nodes. - Fixed bug where it wasn't possible to paste on Chrome Andoid since it doesn't properly support the Clipboard API yet. - Fixed bug where user defined type attribute value of text/javascript didn't get properly serialized. - Fixed bug where space in span elements would removed when the element was considered empty. - Fixed bug where the undo/redo button states didn't change if you removed all undo levels using undoManager.clear. - Fixed bug where unencoded links inside query strings or hash values would get processed by the relative urls logic. - Fixed bug where contextmenu would automatically close in inline editing mode on Firefox running on Mac. - Fixed bug where Gecko/IE would produce multiple BR elements when forced_root_block was set to false and a table was the last child of body. - Fixed bug where custom queryCommandState handlers didn't properly handle boolean states. - Fixed bug where auto closing float panels link menus wasn't automatically closed when the window was resized. - Fixed bug where the image plugin wouldn't update image dimensions when the current image was changed using the image_list select box. - Fixed bug with paste plugin not properly removing paste bin on Safari Mac when using the cmd+shift+v keyboard command. - Fixed bug where the paste plugin wouln't properly strip trailing br elements under very specific scenarios. - Fixed bug where enter key wouldn't properly place the caret on Gecko when pressing enter in a text block with a br ended line inside. - Fixed bug where Safari Mac shortcuts like Cmd+Opt+L didn't get passed through to the browser due to a Quirks fix. - Fixed so plain text mode works better when it converts rich text to plain text when pasting from for example Word. - Fixed so numeric keycodes can be used in the shortcut format enabling support for any key to be specified. - Fixed so table cells can be navigated with tab key and new rows gets automatically added when you are at the last cell. - Fixed bug where formatting before cursor gets removed when toggled off for continued content. -Version 4.0.26 (2014-05-06) - Fixed bug in media plugin where changing existing url did not use media regex patterns to create protocol neutral url. - Fixed bug where selection wasn't properly restored on IE 11 due to a browser bug with Element.contains. -Version 4.0.25 (2014-04-30) - Fixed bug where it wasn't possible to submit forms with editor instances on WebKit/Blink. -Version 4.0.24 (2014-04-30) - Added new event_root setting for inline editors. Lets you bind all editor events on a parent container. - Fixed bug where show/hide/isHidden didn't work properly for inline editor instances. - Fixed bug where preview plugin dialog didn't handle relative urls properly. - Fixed bug where the autolink plugin would remove the trailing space after an inserted link. - Fixed bug in paste plugin where pasting in a page with scrollbars would scroll to top of page in webkit browsers. - Fixed bug where the paste plugin on WebKit would remove styles from pasted source code with style attributes. - Fixed so image_list/link_list can be a function that allows custom async calls to populate these lists. -Version 4.0.23 (2014-04-24) - Added isSameOrigin method to tinymce.util.URI it handles default protocol port numbers better. Patch contributed by Matt Whelan. - Fixed bug where IE 11 would add br elements to the end of the editor body element each time it was shown/hidden. - Fixed bug where the autolink plugin would produce an index out of range exception for some very specific HTML. - Fixed bug where the charmap plugin wouldn't properly insert non breaking space characters when selected. - Fixed bug where pasting from Excel 2011 on Mac didn't produce a proper table when using the paste plugin. - Fixed bug where drag/dropping inside a table wouldn't properly end the table cell selection. - Fixed bug where drag/dropping images within tables on Safari on Mac wouldn't work properly. - Fixed bug where editors couldn't be re-initialized if they where externally destroyed. - Fixed bug where inline editors would produce a range index exception when clicking on buttons like bold. - Fixed bug where the preview plugin wouldn't properly handle non encoded upper UTF-8 characters. - Fixed so document.currentScript is used when detecting the current script location. Patch contributed by Mickael Desgranges. - Fixed issue with the paste_webkit_styles option so is disabled by default since it might produce a lot of extra styles. -Version 4.0.22 (2014-04-16) - Added lastLevel to BeforeAddUndo level event so it's easier to block undo level creation based. - Fixed so multiple list elements can be indented properly. Patch contributed by Dan Villiom Podlaski Christiansen. - Fixed bug where the selection would be at the wrong location sometimes for inline editor instances. - Fixed bug where drag/dropping content into an inline editor would fail on WebKit/Blink. - Fixed bug where table grid wouldn't work properly when the UI was rendered in for RTL mode. - Fixed bug where range normalization wouldn't handle mixed contentEditable nodes properly. - Fixed so the media plugin doesn't override the existing element rules you now need to manually whitelist non standard attributes. - Fixed so old language packs get properly loaded when the new longer language code format is used. - Fixed so all track changes junk such as comments, deletes etc gets removed when pasting from Word. - Fixed so non image data urls is blocked by default since they might contain scripts. - Fixed so it's possible to import styles from the current page stylesheets into an inline editor by using the importcss_file_filter. - Fixed bug where the spellchecker plugin wouldn't add undo levels for each suggestion replacement. - Reworked the default spellchecker RPC API to match the new PHP Spellchecker package. Fallback documented in the TinyMCE docs. -Version 4.0.21 (2014-04-01) - Added new getCssText method to formatter to get the preview css text value for a format to be used in UI. - Added new table_grid option that allows you to disable the table grid and use a dialog. - Added new image_description, image_dimensions options to image plugin. Patch contributed by Pat O'Neill. - Added new media_alt_source, media_poster, media_dimensions options to media plugin. Patch contributed by Pat O'Neill. - Added new ability to specify high/low dpi versions custom button images for retina displays. - Added new getWindows method to WindowManager makes it easier to control the currently opened windows. - Added new paste_webkit_styles option to paste plugin to control the styles that gets retained on WebKit. - Added preview of classes for the selectboxes used by the link_class_list/image_class_list options. - Added support for Sauce Labs browser testing using the new saucelabs-tests build target. - Added title input field to link dialog for a11y reasons can be disabled by using the link_title option. - Fixed so the toolbar option handles an array as input for multiple toolbar rows. - Fixed so the editor renders in XHTML mode apparently some people still use this rendering mode. - Fixed so icons gets rendered better on Firefox on Mac OS X by applying -moz-osx-font-smoothing. - Fixed so the auto detected external media sources produced protocol relative urls. Patch contributed by Pat O'Neill. - Fixed so it's possible to update the text of a button after it's been rendered to page DOM. - Fixed bug where iOS 7.1 Safari would open linked when images where inserted into links. - Fixed bug where IE 11 would scroll to the top of inline editable elements when applying formatting. - Fixed bug where tabindex on elements within the editor contents would cause issues on some browsers. - Fixed bug where link text wouldn't be properly updated in gecko if you changed an existing link. - Fixed bug where it wasn't possible to close dialogs with the escape key if the focus was inside a textbox. - Fixed bug where Gecko wouldn't paste rich text contents from Word or other similar word processors. - Fixed bug where binding events after the control had been rendered could fail to produce a valid delegate. - Fixed bug where IE 8 would throw and error when removing editors with a cross domain content_css setting. - Fixed bug where IE 9 wouldn't be able to select text after an editor instance with caret focus was removed. - Fixed bug where the autoresize plugin wouldn't resize the editor if you inserted huge images. - Fixed bug where multiple calls to the same init would produce extra editor instances. - Fixed bug where fullscreen toggle while having the autoresize plugin enabled wouldn't produce scrollbars. - Fixed so screen readers use a dialog instead of the grid for inserting tables. - Fixed so Office 365 Word contents gets filtered the same way as content from desktop Office. - Fixed so it's possible to override the root container for UI elements defaults to document.body. - Fixed bug where tabIndex is set to -1 on inline editable elements. It now keeps the existing tabIndex intact. - Fixed issue where the UndoManager transact method couldn't be nested since it only had one lock. - Fixed issue where headings/heading where labeled incorrectly as headers/header. -Version 4.0.20 (2014-03-18) - Fixed so all unit tests can be executed in a headless phantomjs instance for CI testing. - Fixed so directionality setting gets applied to the preview dialog as well as the editor body element. - Fixed a performance issue with the "is" method in DOMUtils. Patch contributed by Paul Bosselaar. - Fixed bug where paste plugin wouldn't paste plain text properly when pasting using browser menus. - Fixed bug where focusable SVG elements would throw an error since className isn't a proper string. - Fixed bug where the preview plugin didn't properly support the document_base_url setting. - Fixed bug where the focusedEditor wouldn't be set to null when that editor was removed. - Fixed bug where Gecko would throw an exception when editors where removed. - Fixed bug where the FocusManager wouldn't handle selection restoration properly on older IE versions. - Fixed bug where the searchreplace plugin would produce an exception on very specific multiple searches. - Fixed bug where some events wasn't properly unbound when all editors where removed from page. - Fixed bug where tapping links on iOS 7.1 would open the link instead of placing the caret inside. - Fixed bug where holding the finger down on iOS 7.1 would open the link/image callout menu. - Fixed so the jQuery plugin returns null when getting the the tinymce instance of an element before it's initialized. - Fixed so selection normalization gets executed more often to reduce incorrect UI states on Gecko. - Fixed so the default action of closing the window on a form submission can be prevented using "preventDefault". -Version 4.0.19 (2014-03-11) - Added support for CSS selector expressions in object_resizing option. Allows you to control what to resize. - Added addToTop compatibility to compat3x plugin enables more legacy 3.x plugins to work properly. - Fixed bug on IE where it wasn't possible to align images when they where floated left. - Fixed bug where the indent/outdent buttons was enabled though readonly mode was enabled. - Fixed bug where the nodeChanged event was fired when readonly mode was enabled. - Fixed bug where events like blur could be fired to editor instances that where manually removed on IE 11. - Fixed bug where IE 11 would move focus to menubar/toolbar when using the tab key in a form with an editor. - Fixed bug where drag/drop in Safari on Mac didn't work properly due to lack of support for modern dataTransfer object. - Fixed bug where the remove event wasn't properly executed when the editor instances where removed. - Fixed bug where the selection change handler on inline editors would fail if the editor instance was removed. -Version 4.0.18 (2014-02-27) - Fixed bug where images would get class false/undefined when initially created. -Version 4.0.17 (2014-02-26) - Added much better wai-aria accessibility support when it comes to keyboard navigation of complex UI controls. - Added dfn,code,samp,kbd,var,cite,mark,q elements to the default remove formats list. Patch contributed by Naim Hammadi. - Added var,cite,dfn,code,mark,q,sup,sub to the list of elements that gets cloned on enter. Patch contributed by Naim Hammadi. - Added new visual_anchor_class option to specify a custom class for inline anchors. Patch contributed by Naim Hammadi. - Added support for paste_data_images on WebKit/Blink when the user pastes image data. - Added support for highlighting the video icon when a video is added that produces an iframe. Patch contributed by monkeydiane. - Added image_class_list/link_class_list options to image/link dialogs to let the user select classes. - Fixed bug where the ObjectResizeStart event didn't get fired properly by the ControlSelection class. - Fixed bug where the autolink plugin would steal focus when loaded on IE 9+. - Fixed bug where the editor save method would remove the current selection when called on an inline editor. - Fixed bug where the formatter would merge span elements with parent bookmarks if an id format was used. - Fixed bug where WebKit/Blink browsers would scroll to the top of the editor when pasting into an empty element. - Fixed bug where removing the editor would cause an error about wrong document on IE 11 under specific circumstances. - Fixed bug where Gecko would place the caret at an incorrect location when using backspace. - Fixed bug where Gecko would throw "Wrong Document Error" for ranges that pointing to removed nodes. - Fixed bug where it wasn't possible to properly update the title and encoding properties in the fullpage plugin. - Fixed bug where paste plugin would produce an extra undo level on IE. - Fixed bug where the formatter would apply inline formatting outside the current word in if the selection was collapsed. - Fixed bug where it wasn't possible to delete tables on Chrome if you placed the selection within all the contents of the table. - Fixed bug where older IE versions wouldn't properly insert contents into table cells when editor focus was lost. - Fixed bug where older IE versions would fire focus/blur events even though the editor focus didn't change. - Fixed bug where IE 11 would add two trailing BR elements to the editor iframe body if the editor was hidden. - Fixed bug where the visualchars plugin wouldn't display non breaking spaces if they where inserted while the state was enabled. - Fixed bug where the wordcount plugin would be very slow some HTML where to much backtracking occurred. - Fixed so pagebreak elements in the editor breaks pages when printing. Patch contributed by penc. - Fixed so UndoManager events pass though the original event that created the undo level such as a keydown, blur etc. - Fixed so the inserttime button is callsed insertdatetime the same as the menu item and plugin name. - Fixed so the word count plugin handles counting properly on most languages on the planet. - Fixed bug where the auroreize plugin would throw an error if the editor was manually removed within a few seconds. - Fixed bug where the image dialog would get stuck if the src was removed. Patch contribued by monkeydiane. - Fixed bug where there is an extra br tag for IE 9/10 that isn't needed. Patch contributed by monkeydiane. - Fixed bug where drag/drop in a scrolled editor would fail since it didn't use clientX/clientY cordinates. Patch contributed by annettem. -Version 4.0.16 (2014-01-31) - Fixed bug where the editor wouldn't be properly rendered on IE 10 depending on the document.readyState. -Version 4.0.15 (2014-01-31) - Fixed bug where paste in inline mode would produce an exception if the contents was pasted inside non overflow element. -Version 4.0.14 (2014-01-30) - Fixed a bug in the image plugin where images couldn't be inserted if the image_advtab option wasn't set to true. -Version 4.0.13 (2014-01-30) - Added language selection menu to spellchecker button similar to the 3.x functionality. Patch contributed by threebytesfull. - Added new style_formats_merge option that enables you to append to the default formats instead of replaceing them. Patch contributed by PacificMorrowind. - Fixed bug where the DOMUtils getPos API function didn't properly handle the location of the root element. Patch contributed by Andrew Ozz. - Fixed bug where the spellchecker wouldn't properly place the spellchecker suggestions menu. Patch contributed by Andrew Ozz. - Fixed bug where the tabfocus plugin would prevent the user from suing Ctrl+Tab, Patch contributed by Andrew Ozz. - Fixed bug where table resize handles could sometimes be added to elements out side the editable inline element. - Fixed bug where the inline mode editor UI would render incorrectly when the stylesheets didn't finish loading on Chrome. - Fixed bug where IE 8 would insert the image outside the editor unless it was focused first. - Fixed bug where older IE versions would throw an exception on drag/drop since they don't support modern dataTransfer API. - Fixed bug where the blockquote button text wasn't properly translated since it had the wrong English key. - Fixed bug where the importcss plugin didn't import a.class rules properly as selector formats. - Fixed bug where the combobox control couldn't be disabled or set to a specific character size initially. - Fixed bug where the FormItem didn't inherit the disabled state from the control to be wrapped. - Fixed bug where adding a TinyMCE instance within a TinyMCE dialog wouldn't properly delegate the events. - Fixed bug where any overflow parent containers would automatically scroll to the left when pasting in Chrome. - Fixed bug where IE could throw an error when search/replacing contents due to an invalid selection being returned. - Fixed bug where WebKit would fire focus/blur events incorrectly if the editor was empty due to a WebKit focus bug. - Fixed bug where WebKit/Blink would scroll to the top of editor if the height was more than the viewport height. - Fixed bug where blurring and removing the editor could cause an exteption to be thrown by the FocusManager. - Fixed bug where the media plugin would override specified dimensions for url pattern matches. Patch contributed by penc. - Fixed bug where the autoresize plugin wouldn't take margins into account when calculating the body size. Patch contributed by lepoltj. - Fixed bug where the image plugin would throw errors some times on IE 8 when it preloaded the image to get it's dimensions. - Fixed bug where the image plugin wouldn't update the style if the user closed the dialog before focusing out. Patch contributed by jonparrott. - Fixed bug where bindOnReady in EventUtils wouldn't work properly for some edge cases on older IE versions. Patch contributed by Godefroy. - Fixed bug where image selector formats wasn't properly handled by the importcss plugin. - Fixed bug where the dirty state of the editor wasn't set when editing an existing link URL. - Fixed bug where it wasn't possible to prevent paste from happening by blocking the default behavior when the paste plugin was enabled. - Fixed bug where text to display in the insert/edit link dialog wouldn't be properly entity encoded. - Fixed bug where Safari 7 on Mac OS X would delete contents if you pressed Cmd+C since it passes out a charCode for the event. - Fixed bug where bound drop events inside inline editors would get fired on all editor instances instead of the specific instance. - Fixed bug where images outlined selection border would be clipped when the autoresize plugin was enabled. - Fixed bug where image dimension constrains proportions wouldn't work properly if you altered a value and immediately clicked the submit button. - Fixed so you don't need to set language option to false when specifying a custom language_url. - Fixed so the link dialog "text to display" field gets automatically hidden if the selection isn't text contents. Patch contributed by Godefroy. - Fixed so the none option for the target field in the link dialog gets excluded when specifiying the target_list config option. - Fixed so outline styles are displayed by default in the formats preview. Patch contributed by nhammadi. - Fixed so the max characters for width/height is more than 3 in the media and image dialogs. - Fixed so the old mceSpellCheck command toggles the spellchecker on/off. - Fixed so the setupeditor event is fired before the setup callback setting to ease up compatibility with 3.x. - Fixed so auto url link creation in IE 9+ is disabled by default and re-enabled by the autolink plugin. - Removed the custom scrollbars for WebKit since the default browser scrollbars looks a lot better now days. -Version 4.0.12 (2013-12-18) - Added new media_scripts option to the media plugin. This makes it possible to embed videos using script elements. - Fixed bug where WebKit/Blink would produce random span elements and styles when deleting contents inside the editor. - Fixed bug where WebKit/Blink would produce span elements out of link elements when they where removed by the unlink command. - Fixed bug where div block formats in inline mode where applied to all paragraphs within the editor. - Fixed bug where div blocks where marked as an active format in inline mode when doing non collapsed selections. - Fixed bug where the importcss plugin wouldn't append styles if the style_formats option was configured. - Fixed bug where the importcss plugin would import styles into groups multiple times for different format menus. - Fixed bug where the paste plugin wouldn't properly remove the paste bin element on IE if a tried to paste a file. - Fixed bug where selection normalization wouldn't properly handle cases where a range point was after a element node. - Fixed bug where the default time format for the inserttime split button wasn't the first item in the list. - Fixed bug where the default text for the formatselect control wasn't properly translated by the language pack. - Fixed bug where links would be inserted incorrectly when auto detecting absolute urls/emails links in inline mode. - Fixed bug where IE 11 would insert contents in the wrong order due to focus/blur async problems. - Fixed bug where pasting contents on IE sometimes would place the contents at the end of the editor. - Fixed so drag/drop on non IE browsers gets filtered by the paste plugin. IE doesn't have the necessary APIs. - Fixed so the paste plugin better detects Word 2007 contents not marked with -mso junk. - Fixed so image button isn't set to an active state when selecting control/media placeholder items. -Version 4.0.11 (2013-11-20) - Added the possibility to update button icon after it's been rendered. - Added new autosave_prefix option allows you to set the prefix for the local storage keys. - Added new pagebreak_split_block option to make it easier to split block elements with a page break. - Fixed bug where IE would some times produce font elements when typing out side the body root blocks. - Fixed bug where IE wouldn't properly use the configured root block element but instead use the a paragraph. - Fixed bug where IE would throw a stack overflow if control selections non images was made in inline mode. - Fixed bug where IE 8 would render an extra enter element if the contents of the editor was empty. - Fixed bug where the caret wasn't moved to the first suitable element when updating the source. - Fixed bug where protocol relative urls would be forced into http protocol. - Fixed bug where internal images with data urls such as video elements would be removed by the paste_data_images option. - Fixed bug where the autoresize plugin wouldn't properly resize the editor to initial contents some times. - Fixed bug where the templates dialog wouldn't be properly rendered on IE 7. - Fixed bug where updating styles in the advanced tab under the image dialog would remove the style attribute on cancel. - Fixed bug where tinymce.full.min.js bundle script wasn't detected when looking for the tinymce root path. - Fixed bug where the SaxParser would throw a malformed URI sequence for inproperly encoded uris. - Fixed bug where enabling table caption wouldn't properly render the caption element on IE 10 and below. - Fixed bug where the scrollbar would be placed to the left and on top of the text of menu items in RTL mode. - Fixed bug where Firefox on Mac OS X would navigate forward/backward on CMD+Arrow keys. - Fixed bug where fullscreen toggle on fixed sized editors wouldn't be properly full screened. - Fixed bug where the unlink button would remove all links from the body element in inline mode under running in IE. - Fixed bug where iOS wasn't able to place the caret inside an empty editor when clicking below the first line. - Fixed so internal document anchors in Word documents are retained when pasting using the paste from word feature. - Fixed so menu shortcuts gets rendered with the Apple command icon patch contributed by Andy Keller. - Fixed so the CSS compression of styles like "border" is a bit better for mixed values. - Fixed so the template_popup_width/template_popup_height option works properly in the template plugin. - Fixed so the languages parameter for AddOnManager.requireLangPack works the same way as for 3.x. - Fixed so the autosave plugin uses the current page path, query string and editor id as it's default prefix. - Fixed so the fullpage plugin adds/removes any link style sheets to the current iframe document. -Version 4.0.10 (2013-10-28) - Added new forced_root_block_attrs option that allows you to specify attributes for the root block. - Fixed bug where the custom resize handles didn't work properly on IE 11. - Fixed bug where the code plugin would select all contents in IE when content was updated. - Fixed bug where the scroll position wouldn't get applied to floating toolbars. - Fixed bug where focusing in/out of the editor would move the caret to the top of the editor on IE 11. - Fixed bug where the listboxes for link and image lists wasn't updated when the url/src was changed. - Fixed bug where selection bookmark elements would be visible in the elements path list. -Version 4.0.9 (2013-10-24) - Added support for external template files to template plugin just set the templates option to a URL with JSON data. - Added new allow_script_urls option. Enabled by default, trims all script urls from attributes. - Fixed bug where IE would sometimes throw a "Permission denied" error unless the Sizzle doc was properly removed. - Fixed bug where lists plugin would remove outer list items if inline editable element was within a LI parent. - Fixed bug where insert table grid widget would insert a table on item to large when using a RTL language pack. - Fixed bug where fullscreen mode wasn't rendering properly on IE 7. - Fixed bug where resize handlers wasn't moved correctly when scrolling inline editable elements. - Fixed bug where it wasn't possible to paste from Excel and possible other applications due to Clipboard API bugs in browsers. - Fixed bug where Shift+Ctrl+V didn't produce a plain text paste on IE. - Fixed bug where IE would sometimes move the selection to the a previous location. - Fixed bug where the editor wasn't properly scrolled to the content insert location in inline mode. - Fixed bug where some comments would be parsed as HTML by the SaxParser. - Fixed bug where WebKit/Blink would render tables incorrectly if unapplying formats when having multiple table cells selected. - Fixed bug where the paste_data_images option wouldn't strip all kinds of data images. - Fixed bug where the GridLayout didn't render items correctly if the contents overflowed the layout container. - Fixed bug where the Window wasn't properly positioned if the size of the button bar or title bar was wider than the contents. - Fixed bug where psuedo selectors for finding UI controls didn't work properly. - Fixed bug where resized splitbuttons would throw an exception if it didn't contain an icon. - Fixed bug where setContent would move focus into the editor even though it wasn't active. - Fixed bug where IE 11 would sometimes throw an "Invalid function" error when calling setActive on the body element. - Fixed bug where the importcss plugin would import styles from CSS files not present in the content_css array. - Fixed bug where the jQuery plugin will initialize the editors twice if the core was loaded using the script_url option. - Fixed various bugs and issues related to indentation of OL/UL list elements. - Fixed so IE 7 renders the classic mode buttons the same size as other browsers. - Fixed so document.readyState is checked when loading and initializing TinyMCE manually after page load. -Version 4.0.8 (2013-10-10) - Added RTL support so all of the UI is rendered right to left if a language pack has a _dir property set to rtl. - Fixed bug where layout managers wouldn't handle subpixel values properly. When for example the browser was zoomed in. - Fixed bug where the importcss plugin wouldn't import classes from local stylesheets with remote @import rules on Gecko. - Fixed bug where Arabic characters wouldn't be properly counted in wordcount plugin. - Fixed bug where submit event would still fire even if it was unbound on IE 10. Now the event is simply ignored. - Fixed bug where IE 11 would return border-image: none when getting style attributes with borders in them. - Fixed various UI rendering issues on older IE versions. - Fixed so readonly option renderes the editor in inline mode with all UI elements disabled and all events blocked. -Version 4.0.7 (2013-10-02) - Added new importcss_selector_filter option to importcss plugin. Makes it easier to select specific classes to import. - Added new importcss_groups option to importcss plugin. Enables you separate classes into menu groups based on filters. - Added new PastePreProcess/PastePostProcess events and reintroduced paste_preprocess/paste_postprocess paste options. - Added new paste_word_valid_elements option lets you control what elements gets pasted when pasting from Word. - Fixed so panelbutton is easier to use. It's now possible to set the panel contents to any container type. - Fixed so editor.destroy calls editor.remove so that both destroy and remove can be used to remove an editor instance. - Fixed so the searchreplace plugin doesn't move focus into the editor until you close the dialog. - Fixed so the searchreplace plugin search for next item if you hit enter inside the dialog. - Fixed so importcss_selector_converter callback is executed with the scope set to importcss plugin instance. - Fixed so the default selector converter function is exposed in importcss plugin. - Fixed issue with the tabpanel not expanding properly when the tabs where wider than the body of the panel. - Fixed issue with the menubar option producing a JS exception if set to true. - Fixed bug where closing a dialog with an opened listbox would cause errors if new dialogs where opened. - Fixed bug where hidden input elements wasn't removed when inline editor instances where removed. - Fixed bug where editors wouldn't initialize some times due to event logic not working correctly. - Fixed bug where pre elements woudl cause searchreplace and spellchecker plugins to mark incorrect locations. - Fixed bug where embed elements wouldn't be properly resized if they where configured in using the video_template_callback. - Fixed bug where paste from word would remove all BR elements since it was missing in the default paste_word_valid_elements. - Fixed bug where paste filtering wouldn't work properly on old WebKit installations pre Clipboard API. - Fixed bug where linebreaks would be removed by paste plugin on IE since it didn't properly detect Word contents. - Fixed bug where paste plugin would convert some Word paragraphs that looked like lists into lists. - Fixed bug where editors wasn't properly initialized if the document.domain is set to the same as the current domain on IE. - Fixed bug where an exception was thrown when removing an editor after opening the context menu multiple times. - Fixed bug where paste as plain text on Gecko would add extra BR elements when pasting paragraphs. -Version 4.0.6 (2013-09-12) - Added new compat3x plugin that makes it possible to load most 3.x plugins. Only available in the development package. - Added new skin_url option enables you to load local skins when using the CDN version. - Added new theme_url option enables you to load local themes when using the CDN version. - Added new importcss_file_filter option to importcss to enable users to specify what files to import from. - Added new template_preview_replace_values option to template plugin to add example data for variables. - Added image option support for addMenuItem calls. Enables you to provide a custom image for menu items. - Fixed bug where editor.insertContent wouldn't set format and selection type on events. - Fixed bug where inserting BR elements on IE 8 would thrown an exception when the range is at a empty text node. - Fixed bug where outdent of single LI element within another LI would produce an empty list element OL/UL. - Fixed bug where the bullist/numlist buttons wouldn't be deselected when deleting all contents. - Fixed bug where toggling an empty list item off wouldn't produce a new empty block element. - Fixed bug where it wasn't possible to apply lists to mixed text blocks and br lines. - Fixed bug where it wasn't possible to paste contents on iOS when the paste plugin was enabled. - Fixed bug where it wasn't possible to delete HR elements on Gecko. - Fixed bug where scrolling and refocusing using the mouse would place the caret incorrectly on IE. - Fixed bug where you needed to hit the empty paragraph to get editor focus in IE 11. - Fixed bug where activeEditor wasn't set to the correct editor when opening windows. - Fixed bug where dirty state wasn't set to false when undoing to the first undo level. - Fixed bug where pasting in inline mode on Safari on Mac wouldn't work properly. - Fixed bug where content_css wasn't loaded into the insert template dialog. - Fixed bug where setting the contents of the editor to non text contents would produce an incorrect selection range. - Fixed so code dialog height gets smaller that the viewport height if it doesn't fit. - Fixed so inline editable regions scroll when pressing enter/return. - Fixed so inline toolbar gets positioned correctly when inline element is within a scrollable container. - Fixed various memory leaks when removing editor instances dynamically. - Removed CSS for BR elements in visualblocks due to problems with Chrome and IE. -Version 4.0.5 (2013-08-27) - Added visuals for UL, LI and BR to visualblocks plugin. Patch contributed by Dan Ransom. - Added new autosave_restore_when_empty option to autosave plugin. Enabled by default. - Fixed bug where an exception was thrown when inserting images if valid_elements didn't include an ID for the image. - Fixed bug where the advlist plugin wouldn't properly render the splitbutton controls. - Fixed bug where visual blocks menu item wouldn't be marked checked when using the visualblocks_default_state option. - Fixed bug where save button in save plugin wouldn't get properly enabled when contents was changed. - Fixed bug where it was possible to insert images without any value for it's source attribute. - Fixed bug where altering image attributes wouldn't add a new undo level. - Fixed bug where import rules in CSS files wouldn't be properly imported by the importcss plugin. - Fixed bug where selectors could be imported multiple times. Producing duplicate formats. - Fixed bug where IE would throw exception if selection was changed while the editor was hidden. - Fixed so complex rules like .class:before doesn't get imported by default in the importcss plugin. - Fixed so it's possible to remove images by setting the src attribute to a blank value. - Fixed so the save_enablewhendirty setting in the save plugin is enabled by default. - Fixed so block formats drop down for classic mode can be translated properly using language packs. - Fixed so hr menu item and toolbar button gets the same translation string. - Fixed so bullet list toolbar button gets the correct translation from language packs. - Fixed issue with Chrome logging CSS warning about border styling for combo boxes. - Fixed issue with Chrome logging warnings about deprecated keyLocation property. - Fixed issue where custom_elements would not remove the some of the default rules when cloning rules from div and span. -Version 4.0.4 (2013-08-21) - Added new importcss plugin. Lets you auto import classes from CSS files similar to the 3.x behavior. - Fixed bug where resize handles would be positioned incorrectly when inline element parent was using position: relative. - Fixed bug where IE 8 would throw Unknown runtime error if the editor was placed within a P tag. - Fixed bug where removing empty lists wouldn't produce blocks or brs where the old list was in the DOM. - Fixed bug where IE 10 wouldn't properly initialize template dialog due to async loading issues. - Fixed bug where autosave wouldn't properly display the warning about content not being saved due to isDirty changes. - Fixed bug where it wouldn't be possible to type if a touchstart event was bound to the parent document. - Fixed bug where code dialog in code plugin wouldn't wouldn't add a proper undo level. - Fixed issue where resizing the editor in vertical mode would set the iframe width to a pixel value. - Fixed issue with naming of insertdatetime settings. All are now prefixed with the plugin name. - Fixed so an initial change event is fired when the user types the first character into the editor. - Fixed so swf gets mapped to object element in media plugin. Enables embedding of flash with alternative poster. -Version 4.0.3 (2013-08-08) - Added new code_dialog_width/code_dialog_height options to control code dialog size. - Added missing pastetext button that works the same way as the pastetext menu item. - Added missing smaller browse button for the classical smaller toolbars. - Fixed bug where input method would produce new lines when inserting contents to an empty editor. - Fixed bug where pasting single indented list items from Word would cause a JS exception. - Fixed bug where applying block formats inside list elements in inline mode would apply them to whole document. - Fixed bug where link editing in inline mode would cause exception on IE/WebKit. - Fixed bug where IE 10 wouldn't render the last button group properly in inline mode due to wrapping. - Fixed bug where localStorage initialization would fail on Firefox/Chrome with disabled support. - Fixed bug where image elements would get an __mce id when undo/redo:ing to a level with image changes. - Fixed bug where too long template names wouldn't fit the listbox in template plugin. - Fixed bug where alignment format options would be marked disabled when forced_root_block was set to false. - Fixed bug where UI listboxes such as fontsize, fontfamily wouldn't update properly when switching editors in inline mode. - Fixed bug where the formats select box would mark the editable container DIV as a applied format in inline mode. - Fixed bug where IE 7/8 would scroll to empty editors when initialized. - Fixed bug where IE 7/8 wouldn't display previews of format options. - Fixed bug where UI states wasn't properly updated after code was changed in the code dialog. - Fixed bug with setting contents in IE would select all contents within the editor. - Fixed so the undoManages transact function disables any other undo levels from being added while within the transaction. - Fixed so sub/sup elements gets removed when the Clear formatting action is executed. - Fixed so text/javascript type value get removed by default from script elements to match the HTML5 spec. -Version 4.0.2 (2013-07-18) - Fixed bug where formatting using menus or toolbars wasn't possible on Opera 12.15. - Fixed bug where IE 8 keyboard input would break after paste using the paste plugin. - Fixed bug where IE 8 would throw an error when populating image size in image dialog. - Fixed bug where image resizing wouldn't work properly on latest IE 10.0.9 version. - Fixed bug where focus wasn't moved to the hovered menu button in a menubar container. - Fixed bug where paste would produce an extra uneeded undo level on IE and Gecko. - Fixed so anchors gets listed in the link dialog as they where in TinyMCE 3.x. - Fixed so sub, sup and strike though gets passed through when pasting from Word. - Fixed so Ctrl+P can be used to print the current document. Patch contributed by jashua212. -Version 4.0.1 (2013-06-26) - Added new paste_as_text config option to force paste as plaintext mode. - Added new pastetext menu item that lets you toggle paste as plain text mode on/off. - Added new insertdatetime_element option to insertdatetime plugin. Enables HTML5 time element support. - Added new spellchecker_wordchar_pattern option to allow configuration of language specific characters. - Added new marker to formats menu displaying the formats used at the current selection/caret location. - Fixed bug where the position of the text color picker would be wrong if you switched to fullscreen. - Fixed bug where the link plugin would ask to add the mailto: prefix multiple times. - Fixed bug where list outdent operation could produce empty list elements on specific selections. - Fixed bug where element path wouldn't properly select parent elements on IE. - Fixed bug where IE would sometimes throw an exception when extrancting the current selection range. - Fixed bug where line feeds wasn't properly rendered in source view on IE. - Fixed bug where word count wouldn't be properly rendered on IE 7. - Fixed bug where menubuttons/listboxes would have an incorrect height on IE 7. - Fixed bug where browser spellchecking was enabled while editing inline on IE 10. - Fixed bug where spellchecker wouldn't properly find non English words. - Fixed bug where deactivating inline editor instances would force padding-top: 0 on page body. - Fixed bug where jQuery would initialize editors multiple times since it didn't check if the editor already existed. - Fixed bug where it wasn't possible to paste contents on IE 10 in modern UI mode when paste filtering was enabled. - Fixed bug where tabfocus plugin wouldn't work properly on inline editor instances. - Fixed bug where fullpage plugin would clear the existing HTML head if contents where inserted into the editor. - Fixed bug where deleting all table rows/columns in a table would cause an exception to be thrown on IE. - Fixed so color button panels gets toggled on/off when activated/deactivated. - Fixed so format menu items that can't be applied to the current selection gets disabled. - Fixed so the icon parameter for addButton isn't automatically filled if a button text is provided. - Fixed so image size fields gets updated when selecting a new image in the image dialog. - Fixed so it doesn't load any language pack if the language option is set to "en". - Fixed so ctrl+shift+z works as an alternative redo shortcut to match a common Mac OS X shortcut. - Fixed so it's not possible to drag/drop in images in Gecko by default when paste plugin is enabled. - Fixed so format menu item texts gets translated using the specified language pack. - Fixed so the image dialog title is the same as the insert/edit image button text. - Fixed so paste as plain text produces BR:s in PRE block and when forced_root_block is disabled. -Version 4.0 (2013-06-13) - Added new insertdate_dateformat, insertdate_timeformat and insertdate_formats options to insertdatetime. - Added new font_formats, fontsize_formats and block_formats options to configure fontselect, fontsizeselect and formatselect. - Added new table_clone_elements option to table plugin. Enables you to specify what elements to clone when adding columns/rows. - Added new auto detect logic for site and email urls in link plugin to match the logic found in 3.x. - Added new getParams/setParams to WindowManager to make it easier to handle params to iframe based dialogs. Contributed by Ryan Demmer. - Added new textcolor options that enables you to specify the colors you want to display. Contributed by Jennifer Arsenault. - Added new external file support for link_list and image_list options. The file format is a simple JSON file. - Added new "both" mode for the resize option. Enables resizing in both width and height. - Added new paste_data_images option that allows you to enable/disable paste of data images. - Added new fixed_toolbar_container option that allows you to add a fixed container for the inline toolbar. - Fixed so font name, font size and block format select boxes gets updated with the current format. - Fixed so the resizeTo/resizeBy methods for the theme are exposed as it as in 3.x. - Fixed so the textcolor controls are splitbuttons as in 3.x. Patch contributed by toxalot/jashua212. - Fixed bug where the theme content css wasn't loaded into the preview dialog. - Fixed bug where the template description in template dialog wouldn't display the text correctly. - Fixed bug where various UI elements wasn't properly removed when an editor instance was removed. - Fixed bug where editing links in inline mode would fail on WebKit. - Fixed bug where the pagebreak_separator option in the pagebreak plugin wasn't working properly. - Fixed bug where the child panels of the float panel in inline mode wasn't properly placed. - Fixed bug where the float panel children of windows wasn't position fixed. - Fixed bug where the size of the ok button was hardcoded, caused issues with i18n. - Fixed bug where single comment in editor would cause exceptions due to resolve path logic not detecting elements only. - Fixed bug where switching alignment of tables in dialogs wouldn't properly remove existing alignments. - Fixed bug where the table properties dialog would show columns/rows textboxes. - Fixed bug where jQuery wasn't used instead of Sizzle in the jQuery version of TinyMCE. - Fixed bug where setting resize option to false whouldn't properly render the word count. - Fixed bug where table row type change would produce multiple table section elements. - Fixed bug where table row type change on multiple rows would add them in incorrect order. - Fixed bug where fullscreen plugin would maximize the editor on resize after toggling it off. - Fixed bug where context menu would be position at an incorrect coordinate in inline mode. - Fixed bug where inserting lists in inline mode on IE would produce errors since the body would be converted. - Fixed bug where the body couldn't be styled properly in custom content_css files. - Fixed bug where template plugins menu item would override the image menu item. - Fixed bug where IE 7-8 would render the text inside inputs at the wrong vertical location. - Fixed bug where IE configured to IE 7 compatibility mode wouldn't render the icons properly. - Fixed bug where editor.focus wouldn't properly fire the focusin event on WebKit. - Fixed bug where some keyboard shortcuts wouldn't work on IE 8. - Fixed bug where the undo state wasn't updated until the end of a typing level. - Fixed bug where keyboard shortcuts on Mac OS wasn't working correctly. - Fixed bug where empty inline elements would be created when toggling formatting of in empty block. - Fixed bug where applying styles on WebKit would fail in inline mode if the user released the mouse button outside the body. - Fixed bug where the visual aids menu item wasn't selected if the editor was empty. - Fixed so the isDirty/isNotDirty states gets updated to true/false on save() and change events. - Fixed so skins have separate CSS files for inline and iframe mode. - Fixed so menus and tool tips gets constrained to the current viewport. - Fixed so an error is thrown if users load jQuery after the jQuery version of TinyMCE. - Fixed so the filetype for media dialog passes out media instead of image as file type. - Fixed so it's possible to disable the toolbar by setting it to false. - Fixed so autoresize plugin isn't initialized when the editor is in inline mode. - Fixed so the inline editing toolbar will be rendered below elements if it doesn't fit above it. -Version 4.0b3 (2013-05-15) - Added new optional advanced tab for image dialog with hspace, vspace, border and style. - Added new change event that gets fired when undo levels are added to editor instances. - Added new removed_menuitems option enables you to list menu items to remove from menus. - Added new external_plugins option enables you to specify external locations for plugins. - Added new language_url option enables you to specify an external location for the language pack. - Added new table toolbar control that displays a menu for inserting/editing menus. - Fixed bug where IE 10 wouldn't load files properly from cache. - Fixed bug where image dialog wouldn't properly remove width/height if blanked. - Fixed bug where all events wasn't properly unbound when editor instances where removed. - Fixed bug where data- attributes wasn't working properly in the SaxParser. - Fixed bug where Gecko wouldn't properly render broken images. - Fixed bug where Gecko wouldn't produce the same error dialog on paste as other browsers. - Fixed bug where is wasn't possible to prevent execCommands in beforeExecCommand event. - Fixed bug where the fullpage_hide_in_source_view option wasn't working in the fullpage plugin. - Fixed bug where the WindowManager close method wouldn't properly close the top most window. - Fixed bug where it wasn't possible to paste in IE 10 due to JS exception. - Fixed bug where tab key didn't move to the right child control in tabpanels. - Fixed bug where enter inside a form would focus the first button like control in TinyMCE. - Fixed bug where it would match scripts that looked like the tinymce base directory incorrectly. - Fixed bug where the spellchecker wouldn't properly toggle off the spellcheck mode if no errors where found. - Fixed bug in searchreplace plugin where it would remove all spans instead of the marker spans. - Fixed issue where selector wouldn't disable existing mode setting. - Fixed so it's easier to configure the menu and menubar. - Fixed so bodyId/bodyClass is applied to preview as it's done to the editor iframe. -Version 4.0b2 (2013-04-24) - Added new rel_list option to link plugin. Enables you to specify values for a rel drop down. - Added new target_list option to link plugin. Enables you to add to or disable the link targets. - Added new link_list option to link plugin. Enables you to specify a list of links to pick from. - Added new image_list option to image pluigin. Enables you to specify a list of images to pick from. - Added new textcolor plugin. This plugin holds the text color and text background color buttons. - Fixed bug where alignment of images wasn't working properly on Firefox. - Fixed bug where IE 8 would throw error when inserting a table. - Fixed bug where IE 8 wouldn't render the element path properly. - Fixed bug where old IE versions would render a red focus border. - Fixed bug where old IE versions would render a frameborder for iframes. - Fixed bug where WebKit wouldn't properly open the cell properties dialog on edge case selection. - Fixed bug where charmap wouldn't correctly render all characters in grid. - Fixed bug where link dialog wouldn't update the link text properly. - Fixed bug where the focus/blur states on inline editors wasn't handled correctly on IE. - Fixed bug where IE would throw "unknown error" exception sometimes in ForceBlocks logic. - Fixed bug where IE would't properly render disabled buttons in button groups. - Fixed bug where tab key wouldn't properly move to next input field in dialogs. - Fixed bug where resize handles for tables and images would appear at wrong positions on IE 8. - Fixed bug where dialogs would produce stack overflow if title was wider than content. - Fixed bug with table cell/row menu items being enabled even if no cell was selected. - Fixed so the text to display is after the URL field in the link dialog. - Fixed so the width setting applies to the editor panel in modern theme. - Fixed so it's easier to make custom icons for buttons using plain old images. -Version 4.0b1 (2013-04-11) - Added new node.js based build process used uglify, amdlc, jake etc. - Added new package.json to enable easy installation of dependent npm packages used for building. - Added new link, image, charmap, anchor, code, hr plugins since these are now moved out of the theme. - Rewrote all plugins and themes from scratch so they match the new UI framework. - Replaced all events to use the more common .on/off() methods instead of ..add/remove. - Rewrote the TinyMCE core to use AMD style modules. Gets compiled to an inline library using amdlc. - Rewrote all core logic to pass jshint rules. Each file has specific jshint rules. - Removed all IE6 specific logic since 4.x will no longer support such an old browser. - Reworked the file names and directory structure of the whole project to be more similar to other JS projects. - Replaced tinymce.util.Cookie with tinymce.util.LocalStorage. Fallback to userData for IE 7 native localStorage for the rest. - Replaced the old 3.x UI with a new modern UI framework. - Removed "simple" theme and added new "modern" theme. - Removed advhr, advimage, advlink, iespell, inlinepopups, xhtmlxtras and style plugins. - Updated Sizzle to the latest version. + Added new file_picker_callback option to replace the old file_browser_callback the latter will still work though. + Added new custom colors to textcolor plugin will be displayed if a color picker is provided also shows the latest colors. + Added new color_picker_callback option to enable you to add custom color pickers to the editor. + Added new advanced tabs to table/cell/row dialogs to enable you to select colors for border/background. + Added new colorpicker plugin that lets you select colors from a hsv color picker. + Added new tinymce.util.Color class to handle color parsing and converting. + Added new colorpicker UI widget element lets you add a hsv color picker to any form/window. + Added new textpattern plugin that allows you to use markdown like text patterns to format contents. + Added new resize helper element that shows the current width & height while resizing. + Added new "once" method to Editor and EventDispatcher enables since callback execution events. + Added new jQuery like class under tinymce.dom.DomQuery it's exposed on editor instances (editor.$) and globally under (tinymce.$). + Fixed so the default resize method for images are proportional shift/ctrl can be used to make an unproportional size. + Fixed bug where the image_dimensions option of the image plugin would cause exceptions when it tried to update the size. + Fixed bug where table cell dialog class field wasn't properly updated when editing an a table cell with an existing class. + Fixed bug where Safari on Mac would produce webkit-fake-url for pasted images so these are now removed. + Fixed bug where the nodeChange event would get fired before the selection was changed when clicking inside the current selection range. + Fixed bug where valid_classes option would cause exception when it removed internal prefixed classes like mce-item-. + Fixed bug where backspace would cause navigation in IE 8 on an inline element and after a caret formatting was applied. + Fixed so placeholder images produced by the media plugin gets selected when inserted/edited. + Fixed so it's possible to drag in images when the paste_data_images option is enabled. Might be useful for mail clients. + Fixed so images doesn't get a width/height applied if the image_dimensions option is set to false useful for responsive contents. + Fixed so it's possible to pass in an optional arguments object for the nodeChanged function to be passed to all nodechange event listeners. + Fixed bug where media plugin embed code didn't update correctly. diff --git a/Resources/public/vendor/tinymce/icons/default/icons.min.js b/Resources/public/vendor/tinymce/icons/default/icons.min.js new file mode 100644 index 00000000..101606a2 --- /dev/null +++ b/Resources/public/vendor/tinymce/icons/default/icons.min.js @@ -0,0 +1 @@ +tinymce.IconManager.add("default",{icons:{"accessibility-check":'',"action-next":'',"action-prev":'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"arrow-left":'',"arrow-right":'',bold:'',bookmark:'',"border-width":'',brightness:'',browse:'',cancel:'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',cut:'',"document-properties":'',drag:'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',fill:'',"flip-horizontally":'',"flip-vertically":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',"image-options":'',image:'',indent:'',info:'',"insert-character":'',"insert-time":'',invert:'',italic:'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"page-break":'',paragraph:'',"paste-text":'',paste:'',"permanent-pen":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"rotate-left":'',"rotate-right":'',rtl:'',save:'',search:'',"select-all":'',selected:'',settings:'',sharpen:'',"sort-asc":'',"sort-dsc":'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',superscript:'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',template:'',"temporary-placeholder":'',"text-color":'',toc:'',translate:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',upload:'',user:'',visualblocks:'',visualchars:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/jquery.tinymce.min.js b/Resources/public/vendor/tinymce/jquery.tinymce.min.js deleted file mode 100644 index 17c44e6a..00000000 --- a/Resources/public/vendor/tinymce/jquery.tinymce.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){function t(){function t(e){"remove"===e&&this.each(function(e,t){var n=r(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=tinymce.get(t.id.replace(/_parent$/,""));n&&n.remove()})}function i(e){var n,i=this;if(null!=e)t.call(i),i.each(function(t,n){var i;(i=tinymce.get(n.id))&&i.setContent(e)});else if(i.length>0&&(n=tinymce.get(i[0].id)))return n.getContent()}function r(e){var t=null;return e&&e.id&&a.tinymce&&(t=tinymce.get(e.id)),t}function c(e){return!!(e&&e.length&&a.tinymce&&e.is(":tinymce"))}var o={};e.each(["text","html","val"],function(t,a){var u=o[a]=e.fn[a],s="text"===a;e.fn[a]=function(t){var a=this;if(!c(a))return u.apply(a,arguments);if(t!==n)return i.call(a.filter(":tinymce"),t),u.apply(a.not(":tinymce"),arguments),a;var o="",l=arguments;return(s?a:a.eq(0)).each(function(t,n){var i=r(n);o+=i?s?i.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):i.getContent({save:!0}):u.apply(e(n),l)}),o}}),e.each(["append","prepend"],function(t,i){var a=o[i]=e.fn[i],u="prepend"===i;e.fn[i]=function(e){var t=this;return c(t)?e!==n?(t.filter(":tinymce").each(function(t,n){var i=r(n);i&&i.setContent(u?e+i.getContent():i.getContent()+e)}),a.apply(t.not(":tinymce"),arguments),t):void 0:a.apply(t,arguments)}}),e.each(["remove","replaceWith","replaceAll","empty"],function(n,i){var r=o[i]=e.fn[i];e.fn[i]=function(){return t.call(this,i),r.apply(this,arguments)}}),o.attr=e.fn.attr,e.fn.attr=function(t,a){var u=this,s=arguments;if(!t||"value"!==t||!c(u))return a!==n?o.attr.apply(u,s):o.attr.apply(u,s);if(a!==n)return i.call(u.filter(":tinymce"),a),o.attr.apply(u.not(":tinymce"),s),u;var l=u[0],m=r(l);return m?m.getContent({save:!0}):o.attr.apply(e(l),s)}}var n,i,r=[],a=window;e.fn.tinymce=function(n){function c(){var i=[],r=0;l||(t(),l=!0),m.each(function(e,t){var a,c=t.id,o=n.oninit;c||(t.id=c=tinymce.DOM.uniqueId()),tinymce.get(c)||(a=new tinymce.Editor(c,n,tinymce.EditorManager),i.push(a),a.on("init",function(){var e,t=o;m.css("visibility",""),o&&++r==i.length&&("string"==typeof t&&(e=-1===t.indexOf(".")?null:tinymce.resolve(t.replace(/\.\w+$/,"")),t=tinymce.resolve(t)),t.apply(e||tinymce,i))}))}),e.each(i,function(e,t){t.render()})}var o,u,s,l,m=this,p="";if(!m.length)return m;if(!n)return window.tinymce?tinymce.get(m[0].id):null;if(m.css("visibility","hidden"),a.tinymce||i||!(o=n.script_url))1===i?r.push(c):c();else{i=1,u=o.substring(0,o.lastIndexOf("/")),-1!=o.indexOf(".min")&&(p=".min"),a.tinymce=a.tinyMCEPreInit||{base:u,suffix:p},-1!=o.indexOf("gzip")&&(s=n.language||"en",o=o+(/\?/.test(o)?"&":"?")+"js=true&core=true&suffix="+escape(p)+"&themes="+escape(n.theme||"modern")+"&plugins="+escape(n.plugins||"")+"&languages="+(s||""),a.tinyMCE_GZ||(a.tinyMCE_GZ={start:function(){function t(e){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(e))}t("langs/"+s+".js"),t("themes/"+n.theme+"/theme"+p+".js"),t("themes/"+n.theme+"/langs/"+s+".js"),e.each(n.plugins.split(","),function(e,n){n&&(t("plugins/"+n+"/plugin"+p+".js"),t("plugins/"+n+"/langs/"+s+".js"))})},end:function(){}}));var f=document.createElement("script");f.type="text/javascript",f.onload=f.onreadystatechange=function(t){t=t||window.event,2===i||"load"!=t.type&&!/complete|loaded/.test(f.readyState)||(tinymce.dom.Event.domLoaded=1,i=2,n.script_loaded&&n.script_loaded(),c(),e.each(r,function(e,t){t()}))},f.src=o,document.body.appendChild(f)}return m},e.extend(e.expr[":"],{tinymce:function(e){return!!(e.id&&"tinymce"in window&&tinymce.get(e.id))}})}(jQuery); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/langs/pl.js b/Resources/public/vendor/tinymce/langs/pl.js index dbbd1970..90d596cb 100644 --- a/Resources/public/vendor/tinymce/langs/pl.js +++ b/Resources/public/vendor/tinymce/langs/pl.js @@ -187,5 +187,7 @@ tinymce.addI18n('pl',{ "Tools": "Narz\u0119dzia", "View": "Widok", "Table": "Tabela", -"Format": "Format" -}); \ No newline at end of file +"Format": "Format", +"{0} characters": "{0} znaków", +"{0} words": "{0} słów" +}); diff --git a/Resources/public/vendor/tinymce/license.txt b/Resources/public/vendor/tinymce/license.txt index 1837b0ac..b17fc904 100644 --- a/Resources/public/vendor/tinymce/license.txt +++ b/Resources/public/vendor/tinymce/license.txt @@ -1,5 +1,5 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA @@ -10,7 +10,7 @@ as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -112,7 +112,7 @@ modification follow. Pay close attention to the difference between a former contains code derived from the library, whereas the latter must be combined with the library in order to run. - GNU LESSER GENERAL PUBLIC LICENSE + GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other @@ -432,7 +432,7 @@ decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. @@ -455,7 +455,7 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS + END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries diff --git a/Resources/public/vendor/tinymce/plugins/advlist/plugin.min.js b/Resources/public/vendor/tinymce/plugins/advlist/plugin.min.js index e734b1a0..c15325b9 100644 --- a/Resources/public/vendor/tinymce/plugins/advlist/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/advlist/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("advlist",function(t){function e(t,e){var n=[];return tinymce.each(e.split(/[ ,]/),function(t){n.push({text:t.replace(/\-/g," ").replace(/\b\w/g,function(t){return t.toUpperCase()}),data:"default"==t?"":t})}),n}function n(e,n){var o,l=t.dom,a=t.selection;o=l.getParent(a.getNode(),"ol,ul"),o&&o.nodeName==e&&n!==!1||t.execCommand("UL"==e?"InsertUnorderedList":"InsertOrderedList"),n=n===!1?i[e]:n,i[e]=n,o=l.getParent(a.getNode(),"ol,ul"),o&&n&&(l.setStyle(o,"listStyleType",n),o.removeAttribute("data-mce-style")),t.focus()}function o(e){var n=t.dom.getStyle(t.dom.getParent(t.selection.getNode(),"ol,ul"),"listStyleType")||"";e.control.items().each(function(t){t.active(t.settings.data===n)})}var l,a,i={};l=e("OL",t.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),a=e("UL",t.getParam("advlist_bullet_styles","default,circle,disc,square")),t.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:l,onshow:o,onselect:function(t){n("OL",t.control.settings.data)},onclick:function(){n("OL",!1)}}),t.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:a,onshow:o,onselect:function(t){n("UL",t.control.settings.data)},onclick:function(){n("UL",!1)}})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var n,t,e,r=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=tinymce.util.Tools.resolve("tinymce.util.Tools"),c=function(n,t,e){var r="UL"===t?"InsertUnorderedList":"InsertOrderedList";n.execCommand(r,!1,!1===e?null:{"list-style-type":e})},o=function(n){return function(){return n}},u=o(!1),l=o(!0),i=function(){return a},a=(n=function(n){return n.isNone()},{fold:function(n,t){return n()},is:u,isSome:u,isNone:l,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:e,orThunk:t,map:i,each:function(){},bind:i,exists:u,forall:l,filter:i,equals:n,equals_:n,toArray:function(){return[]},toString:o("none()")}),f=function(e){var n=o(e),t=function(){return i},r=function(n){return n(e)},i={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:l,isNone:u,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return f(n(e))},each:function(n){n(e)},bind:r,exists:r,forall:r,filter:function(n){return n(e)?i:a},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(u,function(n){return t(e,n)})}};return i},d=function(n){return null===n||n===undefined?a:f(n)},g=function(n){return n&&/^(TH|TD)$/.test(n.nodeName)},p=function(r){return function(n){return n&&/^(OL|UL|DL)$/.test(n.nodeName)&&(e=n,(t=r).$.contains(t.getBody(),e));var t,e}},m=function(n,t,e){var r=function(n,t){for(var e=0;et&&(t=0),3==n.nodeType){var e=n.data.length;t>e&&(t=e)}return t}function o(n,t){f.setStart(n,i(n,t))}function r(n,t){f.setEnd(n,i(n,t))}var f,d,a,s,c,l,u,g,h,C;if(f=n.selection.getRng(!0).cloneRange(),f.startOffset<5){if(g=f.endContainer.previousSibling,!g){if(!f.endContainer.firstChild||!f.endContainer.firstChild.nextSibling)return;g=f.endContainer.firstChild.nextSibling}if(h=g.length,o(g,h),r(g,h),f.endOffset<5)return;d=f.endOffset,s=g}else{if(s=f.endContainer,3!=s.nodeType&&s.firstChild){for(;3!=s.nodeType&&s.firstChild;)s=s.firstChild;3==s.nodeType&&(o(s,0),r(s,s.nodeValue.length))}d=1==f.endOffset?2:f.endOffset-1-t}a=d;do o(s,d>=2?d-2:0),r(s,d>=1?d-1:0),d-=1,C=f.toString();while(" "!=C&&""!==C&&160!=C.charCodeAt(0)&&d-2>=0&&C!=e);f.toString()==e||160==f.toString().charCodeAt(0)?(o(s,d),r(s,a),d+=1):0===f.startOffset?(o(s,0),r(s,a)):(o(s,d),r(s,a)),l=f.toString(),"."==l.charAt(l.length-1)&&r(s,a-1),l=f.toString(),u=l.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),u&&("www."==u[1]?u[1]="http://www.":/@$/.test(u[1])&&!/^mailto:/.test(u[1])&&(u[1]="mailto:"+u[1]),c=n.selection.getBookmark(),n.selection.setRng(f),n.execCommand("createlink",!1,u[1]+u[2]),n.selection.moveToBookmark(c),n.nodeChanged())}var r;return n.on("keydown",function(t){return 13==t.keyCode?i(n):void 0}),tinymce.Env.ie?void n.on("focus",function(){if(!r){r=!0;try{n.execCommand("AutoUrlDetect",!1,!0)}catch(t){}}}):(n.on("keypress",function(e){return 41==e.keyCode?t(n):void 0}),void n.on("keyup",function(t){return 32==t.keyCode?e(n):void 0}))}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=tinymce.util.Tools.resolve("tinymce.Env"),o=function(e,t){if(t<0&&(t=0),3===e.nodeType){var n=e.data.length;n=d)&&(d=tinymce.Env.ie?g.scrollHeight:tinymce.Env.webkit&&0===g.clientHeight?0:g.offsetHeight),d>n.autoresize_min_height&&(l=d),n.autoresize_max_height&&d>n.autoresize_max_height?(l=n.autoresize_max_height,g.style.overflowY="auto",m.style.overflowY="auto"):(g.style.overflowY="hidden",m.style.overflowY="hidden",g.scrollTop=0),l!==a&&(r=l-a,y.setStyle(e.iframeElement,"height",l+"px"),a=l,tinymce.isWebKit&&0>r&&i(o))}}function o(e,t,n){setTimeout(function(){i({}),e--?o(e,t,n):n&&n()},t)}var n=e.settings,a=0;e.settings.inline||(n.autoresize_min_height=parseInt(e.getParam("autoresize_min_height",e.getElement().offsetHeight),10),n.autoresize_max_height=parseInt(e.getParam("autoresize_max_height",0),10),e.on("init",function(){var t=e.getParam("autoresize_overflow_padding",1);e.dom.setStyles(e.getBody(),{paddingBottom:e.getParam("autoresize_bottom_margin",50),paddingLeft:t,paddingRight:t})}),e.on("nodechange setcontent keyup FullscreenStateChanged",i),e.getParam("autoresize_on_init",!0)&&e.on("init",function(){o(20,100,function(){o(5,1e3)})}),e.addCommand("mceAutoResize",i))}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),h=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),v=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},s=function(e,t,n,i,o){r.setEditorTimeout(e,function(){b(e,t),n--?s(e,t,n,i,o):o&&o()},i)},y=function(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))},p=function(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o},b=function(e,t){var n,i,o,r=e.dom,a=e.getDoc();if(a)if((s=e).plugins.fullscreen&&s.plugins.fullscreen.isFullscreen())y(e,!0);else{var s,u=a.documentElement,g=e.getParam("autoresize_bottom_margin",50,"number");i=v(e);var l=p(r,u,"margin-top",!0),f=p(r,u,"margin-bottom",!0);(o=u.offsetHeight+l+f+g)<0&&(o=0);var c=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;o+c>v(e)&&(i=o+c);var m=e.getParam("max_height",0,"number");if(m&&mm.autosave_retention?(a(!1),!1):!0}function a(t){v.removeItem(c+"draft"),v.removeItem(c+"time"),t!==!1&&e.fire("RemoveDraft")}function r(){!f()&&e.isDirty()&&(v.setItem(c+"draft",e.getContent({format:"raw",no_events:!0})),v.setItem(c+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(v.getItem(c+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function i(){d||(setInterval(function(){e.removed||r()},m.autosave_interval),d=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),i()}function u(){e.undoManager.beforeChange(),o(),a(),e.undoManager.add()}function f(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>(( | |[ ]|]*>)+?|)|
$","i").test(t)}var c,d,m=e.settings,v=tinymce.util.LocalStorage;c=m.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",c=c.replace(/\{path\}/g,document.location.pathname),c=c.replace(/\{query\}/g,document.location.search),c=c.replace(/\{id\}/g,e.id),m.autosave_interval=t(m.autosave_interval,"30s"),m.autosave_retention=t(m.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:u,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:u,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&f()&&o()}),e.on("saveContent",function(){a()})),window.onbeforeunload=tinymce._beforeUnloadHandler,this.hasDraft=n,this.storeDraft=r,this.restoreDraft=o,this.removeDraft=a,this.isEmpty=f}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(r){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.Delay"),o=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),a=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(t,e){var r=t||e,n=/^(\d+)([ms]?)$/.exec(""+r);return(n[2]?{s:1e3,m:6e4}[n[2]]:1)*parseInt(r,10)},u=function(t){var e=r.document.location;return t.getParam("autosave_prefix","tinymce-autosave-{path}{query}{hash}-{id}-").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},s=function(t,e){var r=t.settings.forced_root_block;return""===(e=a.trim(void 0===e?t.getBody().innerHTML:e))||new RegExp("^<"+r+"[^>]*>((\xa0| |[ \t]|]*>)+?|)|
$","i").test(e)},f=function(t){var e=parseInt(o.getItem(u(t)+"time"),10)||0;return!((new Date).getTime()-e>i(t.settings.autosave_retention,"20m"))||(c(t,!1),!1)},c=function(t,e){var r=u(t);o.removeItem(r+"draft"),o.removeItem(r+"time"),!1!==e&&t.fire("RemoveDraft")},m=function(t){var e=u(t);!s(t)&&t.isDirty()&&(o.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),o.setItem(e+"time",(new Date).getTime().toString()),t.fire("StoreDraft"))},l=function(t){var e=u(t);f(t)&&(t.setContent(o.getItem(e+"draft"),{format:"raw"}),t.fire("RestoreDraft"))},v=function(t){var e=i(t.settings.autosave_interval,"30s");n.setInterval(function(){t.removed||m(t)},e)},d=function(t){t.undoManager.transact(function(){l(t),c(t)}),t.focus()},g=tinymce.util.Tools.resolve("tinymce.EditorManager"),y=function(r){return function(t){t.setDisabled(!f(r));var e=function(){return t.setDisabled(!f(r))};return r.on("StoreDraft RestoreDraft RemoveDraft",e),function(){return r.off("StoreDraft RestoreDraft RemoveDraft",e)}}};!function e(){t.add("autosave",function(t){var e,r;return t.editorManager.on("BeforeUnload",function(t){var e;a.each(g.get(),function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e&&(t.preventDefault(),t.returnValue=e)}),v(e=t),e.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:function(){d(e)},onSetup:y(e)}),e.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:function(){d(e)},onSetup:y(e)}),t.on("init",function(){t.getParam("autosave_restore_when_empty",!1)&&t.dom.isEmpty(t.getBody())&&l(t)}),r=t,{hasDraft:function(){return f(r)},storeDraft:function(){return m(r)},restoreDraft:function(){return l(r)},removeDraft:function(t){return c(r,t)},isEmpty:function(t){return s(r,t)}}})}()}(window); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/bbcode/plugin.min.js b/Resources/public/vendor/tinymce/plugins/bbcode/plugin.min.js index 78c37cd1..f585583d 100644 --- a/Resources/public/vendor/tinymce/plugins/bbcode/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/bbcode/plugin.min.js @@ -1 +1,9 @@ -!function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(o){var e=this,t=o.getParam("bbcode_dialect","punbb").toLowerCase();o.on("beforeSetContent",function(o){o.content=e["_"+t+"_bbcode2html"](o.content)}),o.on("postProcess",function(o){o.set&&(o.content=e["_"+t+"_bbcode2html"](o.content)),o.get&&(o.content=e["_"+t+"_html2bbcode"](o.content))})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://www.tinymce.com",infourl:"http://www.tinymce.com/wiki.php/Plugin:bbcode"}},_punbb_html2bbcode:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),e(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),e(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),e(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),e(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),e(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),e(/(.*?)<\/font>/gi,"$1"),e(//gi,"[img]$1[/img]"),e(/(.*?)<\/span>/gi,"[code]$1[/code]"),e(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),e(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),e(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),e(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),e(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),e(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),e(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),e(/<\/(strong|b)>/gi,"[/b]"),e(/<(strong|b)>/gi,"[b]"),e(/<\/(em|i)>/gi,"[/i]"),e(/<(em|i)>/gi,"[i]"),e(/<\/u>/gi,"[/u]"),e(/(.*?)<\/span>/gi,"[u]$1[/u]"),e(//gi,"[u]"),e(/]*>/gi,"[quote]"),e(/<\/blockquote>/gi,"[/quote]"),e(/
/gi,"\n"),e(//gi,"\n"),e(/
/gi,"\n"),e(/

/gi,""),e(/<\/p>/gi,"\n"),e(/ |\u00a0/gi," "),e(/"/gi,'"'),e(/</gi,"<"),e(/>/gi,">"),e(/&/gi,"&"),o},_punbb_bbcode2html:function(o){function e(e,t){o=o.replace(e,t)}return o=tinymce.trim(o),e(/\n/gi,"
"),e(/\[b\]/gi,""),e(/\[\/b\]/gi,""),e(/\[i\]/gi,""),e(/\[\/i\]/gi,""),e(/\[u\]/gi,""),e(/\[\/u\]/gi,""),e(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),e(/\[url\](.*?)\[\/url\]/gi,'$1'),e(/\[img\](.*?)\[\/img\]/gi,''),e(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),e(/\[code\](.*?)\[\/code\]/gi,'$1 '),e(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),o}}),tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)}(); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var o=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(t){t=e.trim(t);var o=function(o,e){t=t.replace(o,e)};return o(/\n/gi,"
"),o(/\[b\]/gi,""),o(/\[\/b\]/gi,""),o(/\[i\]/gi,""),o(/\[\/i\]/gi,""),o(/\[u\]/gi,""),o(/\[\/u\]/gi,""),o(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2'),o(/\[url\](.*?)\[\/url\]/gi,'$1'),o(/\[img\](.*?)\[\/img\]/gi,''),o(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2'),o(/\[code\](.*?)\[\/code\]/gi,'$1 '),o(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 '),t};!function i(){o.add("bbcode",function(o){o.on("BeforeSetContent",function(o){o.content=t(o.content)}),o.on("PostProcess",function(o){o.set&&(o.content=t(o.content)),o.get&&(o.content=function(t){t=e.trim(t);var o=function(o,e){t=t.replace(o,e)};return o(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"),o(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"),o(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"),o(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"),o(/(.*?)<\/font>/gi,"$1"),o(//gi,"[img]$1[/img]"),o(/(.*?)<\/span>/gi,"[code]$1[/code]"),o(/(.*?)<\/span>/gi,"[quote]$1[/quote]"),o(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"),o(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"),o(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"),o(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"),o(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"),o(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"),o(/<\/(strong|b)>/gi,"[/b]"),o(/<(strong|b)>/gi,"[b]"),o(/<\/(em|i)>/gi,"[/i]"),o(/<(em|i)>/gi,"[i]"),o(/<\/u>/gi,"[/u]"),o(/(.*?)<\/span>/gi,"[u]$1[/u]"),o(//gi,"[u]"),o(/]*>/gi,"[quote]"),o(/<\/blockquote>/gi,"[/quote]"),o(/
/gi,"\n"),o(//gi,"\n"),o(/
/gi,"\n"),o(/

/gi,""),o(/<\/p>/gi,"\n"),o(/ |\u00a0/gi," "),o(/"/gi,'"'),o(/</gi,"<"),o(/>/gi,">"),o(/&/gi,"&"),t}(o.content))})})}()}(); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/charmap/plugin.min.js b/Resources/public/vendor/tinymce/plugins/charmap/plugin.min.js index 46fce44b..d1849507 100644 --- a/Resources/public/vendor/tinymce/plugins/charmap/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/charmap/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("charmap",function(e){function a(){function a(e){for(;e;){if("TD"==e.nodeName)return e;e=e.parentNode}}var t,r,o,n;t='';var l=25;for(o=0;10>o;o++){for(t+="",r=0;l>r;r++){var s=i[o*l+r];t+='"}t+=""}t+="";var c={type:"container",html:t,onclick:function(a){var i=a.target;"TD"==i.tagName&&(i=i.firstChild),"DIV"==i.tagName&&(e.execCommand("mceInsertContent",!1,i.firstChild.data),a.ctrlKey||n.close())},onmouseover:function(e){var i=a(e.target);i&&n.find("#preview").text(i.firstChild.firstChild.data)}};n=e.windowManager.open({title:"Special character",spacing:10,padding:10,items:[c,{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:100,minHeight:80}],buttons:[{text:"Close",onclick:function(){n.close()}}]})}var i=[["160","no-break space"],["38","ampersand"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["221","Y - acute"],["376","Y - diaeresis"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"],["173","soft hyphen"]];e.addButton("charmap",{icon:"charmap",tooltip:"Special character",onclick:a}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",onclick:a,context:"insert"})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(s){"use strict";var e,n,r,t,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=function(e,n){var r,t=(r=n,e.fire("insertCustomChar",{chr:r}).chr);e.execCommand("mceInsertContent",!1,t)},i=tinymce.util.Tools.resolve("tinymce.util.Tools"),o=function(e){return function(){return e}},c=o(!1),u=o(!0),g=function(){return m},m=(e=function(e){return e.isNone()},{fold:function(e,n){return e()},is:c,isSome:c,isNone:u,getOr:r=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:o(null),getOrUndefined:o(undefined),or:r,orThunk:n,map:g,each:function(){},bind:g,exists:c,forall:u,filter:g,equals:e,equals_:e,toArray:function(){return[]},toString:o("none()")}),f=function(r){var e=o(r),n=function(){return a},t=function(e){return e(r)},a={fold:function(e,n){return n(r)},is:function(e){return r===e},isSome:u,isNone:c,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return f(e(r))},each:function(e){e(r)},bind:t,exists:t,forall:t,filter:function(e){return e(r)?a:m},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,n){return e.fold(c,function(e){return n(r,e)})}};return a},h={some:f,none:g,from:function(e){return null===e||e===undefined?m:f(e)}},d=(t="array",function(e){return r=typeof(n=e),(null===n?"null":"object"==r&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==r&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":r)===t;var n,r}),p=Array.prototype.push,y=function(e,n){for(var r=e.length,t=new Array(r),a=0;a>>0===o))throw RangeError("Invalid code point: "+o);16383<=(o<=65535?r.push(o):(o-=65536,r.push(55296+(o>>10),o%1024+56320)))&&(t+=String.fromCharCode.apply(null,r),r.length=0)}return t+String.fromCharCode.apply(null,r)},T=function(e,n){var a=[],i=n.toLowerCase();return function(e,n){for(var r=0,t=e.length;r>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c["boolean"]},{}],2:[function(e,n,t){Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(?:true|false)\b/,"function":/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}},{}],3:[function(e,t,n){(function(e){var n=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,C={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof O?new O(e.type,C.util.encode(e.content),e.alias):Array.isArray(e)?e.map(C.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(w instanceof O)){if(g&&b!=n.length-1){if(c.lastIndex=y,!(P=c.exec(e)))break;for(var v=P.index+(p&&P[1]?P[1].length:0),k=P.index+P[0].length,x=b,_=y,F=n.length;x"+t.content+""},!u.document)return u.addEventListener&&(C.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,a=n.code,r=n.immediateClose;u.postMessage(C.highlight(a,C.languages[t],t)),r&&u.close()},!1)),C;var e=C.util.currentScript();if(e&&(C.filename=e.src,e.hasAttribute("data-manual")&&(C.manual=!0)),!C.manual){var t=function(){C.manual||C.highlightAll()},a=document.readyState;"loading"===a||"interactive"===a&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return C}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});void 0!==t&&t.exports&&(t.exports=n),void 0!==e&&(e.Prism=n)}).call(this,void 0!==y?y:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,n,t){Prism.languages.cpp=Prism.languages.extend("c",{"class-name":{pattern:/(\b(?:class|enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+\.?[\da-f']*|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+\.?[\d']*|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]*/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,"boolean":/\b(?:true|false)\b/}),Prism.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}})},{}],5:[function(e,n,t){Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(?:abstract|add|alias|as|ascending|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|descending|do|double|dynamic|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|from|get|global|goto|group|if|implicit|in|int|interface|internal|into|is|join|let|lock|long|namespace|new|null|object|operator|orderby|out|override|params|partial|private|protected|public|readonly|ref|remove|return|sbyte|sealed|select|set|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|value|var|virtual|void|volatile|where|while|yield)\b/,string:[{pattern:/@("|')(?:\1\1|\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*?\1/,greedy:!0}],"class-name":[{pattern:/\b[A-Z]\w*(?:\.\w+)*\b(?=\s+\w+)/,inside:{punctuation:/\./}},{pattern:/(\[)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/(\b(?:class|interface)\s+[A-Z]\w*(?:\.\w+)*\s*:\s*)[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}},{pattern:/((?:\b(?:class|interface|new)\s+)|(?:catch\s+\())[A-Z]\w*(?:\.\w+)*\b/,lookbehind:!0,inside:{punctuation:/\./}}],number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)f?/i,operator:/>>=?|<<=?|[-=]>|([-+&|?])\1|~|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),Prism.languages.insertBefore("csharp","class-name",{"generic-method":{pattern:/\w+\s*<[^>\r\n]+?>\s*(?=\()/,inside:{"function":/^\w+/,"class-name":{pattern:/\b[A-Z]\w*(?:\.\w+)*\b/,inside:{punctuation:/\./}},keyword:Prism.languages.csharp.keyword,punctuation:/[<>(),.:]/}},preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(?:define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}),Prism.languages.dotnet=Prism.languages.cs=Prism.languages.csharp},{}],6:[function(e,n,t){!function(e){var n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+n.source+"|[^\n\r()]*)\\)","i"),inside:{"function":/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+n.source+")*?(?=\\s*\\{)"),string:{pattern:n,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var t=e.languages.markup;t&&(t.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:t.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},t.tag))}(Prism)},{}],7:[function(e,n,t){var a,r,i;a=Prism,r=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,i=/\b[A-Z](?:\w*[a-z]\w*)?\b/,a.languages.java=a.languages.extend("clike",{"class-name":[i,/\b[A-Z]\w*(?=\s+\w+\s*[;,=())])/],keyword:r,"function":[a.languages.clike["function"],{pattern:/(\:\:)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x[\da-f_]*\.?[\da-f_p+-]+\b|(?:\b\d[\d_]*\.?[\d_]*|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),a.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"}}),a.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(?:\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":i,keyword:r,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})},{}],8:[function(e,n,t){Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,"function":/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&|\|\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?[.?]?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*[\s\S]*?\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript},{}],9:[function(e,n,t){function b(e,n){return"___"+e.toUpperCase()+n+"___"}var y;y=Prism,Object.defineProperties(y.languages["markup-templating"]={},{buildPlaceholders:{value:function(a,r,e,i){if(a.language===r){var s=a.tokenStack=[];a.code=a.code.replace(e,function(e){if("function"==typeof i&&!i(e))return e;for(var n,t=s.length;-1!==a.code.indexOf(n=b(r,t));)++t;return s[t]=e,n}),a.grammar=y.languages.markup}}},tokenizePlaceholders:{value:function(p,g){if(p.language===g&&p.tokenStack){p.grammar=y.languages[g];var m=0,f=Object.keys(p.tokenStack);!function h(e){for(var n=0;n=f.length);n++){var t=e[n];if("string"==typeof t||t.content&&"string"==typeof t.content){var a=f[m],r=p.tokenStack[a],i="string"==typeof t?t:t.content,s=b(g,a),o=i.indexOf(s);if(-1/,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i,greedy:!0},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,n){var t={};t["language-"+n]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[n]},t.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:t}};a["language-"+n]={pattern:/[\s\S]+/,inside:Prism.languages[n]};var r={};r[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g,e),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup},{}],11:[function(e,n,t){!function(n){n.languages.php=n.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,"boolean":{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),n.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),n.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),n.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),n.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var e={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:!0,inside:n.languages.php};n.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:e}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:e}}}),delete n.languages.php.string,n.hooks.add("before-tokenize",function(e){if(/<\?/.test(e.code)){n.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}}),n.hooks.add("after-tokenize",function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"php")})}(Prism)},{}],12:[function(e,n,t){Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,"boolean":/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},{}],13:[function(e,n,t){!function(e){e.languages.ruby=e.languages.extend("clike",{comment:[/#.*/,{pattern:/^=begin\s[\s\S]*?^=end/m,greedy:!0}],"class-name":{pattern:/(\b(?:class)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|protected|private|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/});var n={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.languages.ruby}};delete e.languages.ruby["function"],e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,greedy:!0,inside:{interpolation:n}},{pattern:/(^|[^/])\/(?!\/)(?:\[.+?]|\\.|[^/\\\r\n])+\/[gim]{0,3}(?=\s*(?:$|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:{pattern:/(^|[^:]):[a-zA-Z_]\w*(?:[?!]|\b)/,lookbehind:!0},"method-definition":{pattern:/(\bdef\s+)[\w.]+/,lookbehind:!0,inside:{"function":/\w+$/,rest:e.languages.ruby}}}),e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z]\w*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s{(\[<])(?:(?!\1)[^\\]|\\[\s\S])*\1/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,greedy:!0,inside:{interpolation:n}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,greedy:!0,inside:{interpolation:n}},{pattern:/("|')(?:#\{[^}]+\}|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{interpolation:n}}],e.languages.rb=e.languages.ruby}(Prism)},{}],14:[function(e,n,t){var a=e("prismjs/components/prism-core");e("prismjs/components/prism-clike"),e("prismjs/components/prism-markup-templating"),e("prismjs/components/prism-c"),e("prismjs/components/prism-cpp"),e("prismjs/components/prism-csharp"),e("prismjs/components/prism-css"),e("prismjs/components/prism-java"),e("prismjs/components/prism-javascript"),e("prismjs/components/prism-markup"),e("prismjs/components/prism-php"),e("prismjs/components/prism-python"),e("prismjs/components/prism-ruby"),n.exports={boltExport:a}},{"prismjs/components/prism-c":1,"prismjs/components/prism-clike":2,"prismjs/components/prism-core":3,"prismjs/components/prism-cpp":4,"prismjs/components/prism-csharp":5,"prismjs/components/prism-css":6,"prismjs/components/prism-java":7,"prismjs/components/prism-javascript":8,"prismjs/components/prism-markup":10,"prismjs/components/prism-markup-templating":9,"prismjs/components/prism-php":11,"prismjs/components/prism-python":12,"prismjs/components/prism-ruby":13}]},{},[14])(14)});var r=window.Prism;window.Prism=e}(undefined,h,b,undefined);var w=b.exports.boltExport,v=function(e){return f.Prism&&e.getParam("codesample_global_prismjs",!1,"boolean")?f.Prism:w},k=function(e){var n=e.selection?e.selection.getNode():null;return g(n)?d.some(n):d.none()},x=function(i){var e,t,n=i.getParam("codesample_languages")||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}],a=(0===(e=n).length?d.none():d.some(e[0])).fold(function(){return""},function(e){return e.value}),r=(t=a,k(i).fold(function(){return t},function(e){var n=e.className.match(/language-(\w+)/);return n?n[1]:t})),s=k(i).fold(function(){return""},function(e){return e.textContent});i.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"selectbox",name:"language",label:"Language",items:n},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:r,code:s},onSubmit:function(e){var n,t,a,r=e.getData();n=i,t=r.language,a=r.code,n.undoManager.transact(function(){var e=k(n);return a=p.DOM.encode(a),e.fold(function(){n.insertContent('

'+a+"
"),n.selection.select(n.$("#__new").removeAttr("id")[0])},function(e){n.dom.setAttrib(e,"class","language-"+t),e.innerHTML=a,v(n).highlightElement(e),n.selection.select(e)})}),e.close()}})},_=function(a){a.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:function(){return x(a)},onSetup:function(t){var e=function(){var e,n;t.setActive((n=(e=a).selection.getStart(),e.dom.is(n,'pre[class*="language-"]')))};return a.on("NodeChange",e),function(){return a.off("NodeChange",e)}}}),a.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:function(){return x(a)}})};!function F(){r.add("codesample",function(n){var t,r,a;r=(t=n).$,t.on("PreProcess",function(e){r("pre[contenteditable=false]",e.node).filter(m(g)).each(function(e,n){var t=r(n),a=n.textContent;t.attr("class",r.trim(t.attr("class"))),t.removeAttr("contentEditable"),t.empty().append(r("").each(function(){this.textContent=a}))})}),t.on("SetContent",function(){var e=r("pre").filter(m(g)).filter(function(e,n){return"false"!==n.contentEditable});e.length&&t.undoManager.transact(function(){e.each(function(e,n){r(n).find("br").each(function(e,n){n.parentNode.replaceChild(t.getDoc().createTextNode("\n"),n)}),n.contentEditable="false",n.innerHTML=t.dom.encode(n.textContent),v(t).highlightElement(n),n.className=r.trim(n.className)})})}),_(n),(a=n).addCommand("codesample",function(){var e=a.selection.getNode();a.selection.isCollapsed()||g(e)?x(a):a.formatter.toggle("code")}),n.on("dblclick",function(e){g(e.target)&&x(n)})})}()}(window); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/colorpicker/plugin.min.js b/Resources/public/vendor/tinymce/plugins/colorpicker/plugin.min.js index d50c7cc4..511ee714 100644 --- a/Resources/public/vendor/tinymce/plugins/colorpicker/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/colorpicker/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("colorpicker",function(e){function n(n,a){function i(e){var n=new tinymce.util.Color(e),a=n.toRgb();l.fromJSON({r:a.r,g:a.g,b:a.b,hex:n.toHex().substr(1)}),t(n.toHex())}function t(e){l.find("#preview")[0].getEl().style.background=e}var l=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:a,onchange:function(){var e=this.rgb();l&&(l.find("#r").value(e.r),l.find("#g").value(e.g),l.find("#b").value(e.b),l.find("#hex").value(this.value().substr(1)),t(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,n,a=l.find("colorpicker")[0];return e=this.name(),n=this.value(),"hex"==e?(n="#"+n,i(n),void a.value(n)):(n={r:l.find("#r").value(),g:l.find("#g").value(),b:l.find("#b").value()},a.value(n),void i(n))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){n("#"+this.toJSON().hex)}});i(a)}e.settings.color_picker_callback||(e.settings.color_picker_callback=n)}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(o){"use strict";var i=tinymce.util.Tools.resolve("tinymce.PluginManager");!function n(){i.add("colorpicker",function(){o.console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}()}(window); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/contextmenu/plugin.min.js b/Resources/public/vendor/tinymce/plugins/contextmenu/plugin.min.js index e21978e8..342155df 100644 --- a/Resources/public/vendor/tinymce/plugins/contextmenu/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/contextmenu/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("contextmenu",function(e){var t,n=e.settings.contextmenu_never_use_native;e.on("contextmenu",function(o){var i,c=e.getDoc();if(!o.ctrlKey||n){if(o.preventDefault(),tinymce.Env.mac&&tinymce.Env.webkit&&2==o.button&&c.caretRangeFromPoint&&e.selection.setRng(c.caretRangeFromPoint(o.x,o.y)),i=e.settings.contextmenu||"link image inserttable | cell row column deletetable",t)t.show();else{var a=[];tinymce.each(i.split(/[ ,]/),function(t){var n=e.menuItems[t];"|"==t&&(n={text:t}),n&&(n.shortcut="",a.push(n))});for(var r=0;r'}),t+=""}),t+=""}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];t.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:a,onclick:function(e){var a=t.dom.getParent(e.target,"a");a&&(t.insertContent(''+a.getAttribute('),this.hide())}},tooltip:"Emoticons"})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(m){"use strict";var n,t,e,u,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n){return function(){return n}},a=i(!1),c=i(!0),r=function(){return l},l=(n=function(n){return n.isNone()},{fold:function(n,t){return n()},is:a,isSome:a,isNone:c,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:i(null),getOrUndefined:i(undefined),or:e,orThunk:t,map:r,each:function(){},bind:r,exists:a,forall:c,filter:r,equals:n,equals_:n,toArray:function(){return[]},toString:i("none()")}),s=function(e){var n=i(e),t=function(){return r},o=function(n){return n(e)},r={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:c,isNone:a,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return s(n(e))},each:function(n){n(e)},bind:o,exists:o,forall:o,filter:function(n){return n(e)?r:l},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(a,function(n){return t(e,n)})}};return r},g={some:s,none:r,from:function(n){return null===n||n===undefined?l:s(n)}},f=function(n,t){return-1!==n.indexOf(t)},d=function(n,t){return f(n.title.toLowerCase(),t)||function(n,t){for(var e=0,o=n.length;eCould not load emoticons

"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),f.focus(S),f.unblock()}))};!function E(){o.add("emoticons",function(n,t){var e,o,r,i,u,a,c,l=(o=t,(e=n).getParam("emoticons_database_url",o+"/js/emojis"+e.suffix+".js")),s=n.getParam("emoticons_database_id","tinymce.plugins.emoticons","string"),f=L(n,l,s);i=f,u=function(){return N(r,i)},(r=n).ui.registry.addButton("emoticons",{tooltip:"Emoticons",icon:"emoji",onAction:u}),r.ui.registry.addMenuItem("emoticons",{text:"Emoticons...",icon:"emoji",onAction:u}),c=f,(a=n).ui.registry.addAutocompleter("emoticons",{ch:":",columns:"auto",minChars:2,fetch:function(t,e){return c.waitForLoad().then(function(){var n=c.listAll();return y(n,t,g.some(e))})},onAction:function(n,t,e){a.selection.setRng(t),a.insertContent(e),n.hide()}})})}()}(window); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/example/dialog.html b/Resources/public/vendor/tinymce/plugins/example/dialog.html deleted file mode 100644 index 565f06f5..00000000 --- a/Resources/public/vendor/tinymce/plugins/example/dialog.html +++ /dev/null @@ -1,8 +0,0 @@ - - - -

Custom dialog

- Input some text: - - - \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/example/plugin.min.js b/Resources/public/vendor/tinymce/plugins/example/plugin.min.js deleted file mode 100644 index 00a262ef..00000000 --- a/Resources/public/vendor/tinymce/plugins/example/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("example",function(t,e){t.addButton("example",{text:"My button",icon:!1,onclick:function(){t.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(e){t.insertContent("Title: "+e.data.title)}})}}),t.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){t.windowManager.open({title:"TinyMCE site",url:e+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var e=t.windowManager.getWindows()[0];t.insertContent(e.getContentWindow().document.getElementById("content").value),e.close()}},{text:"Close",onclick:"close"}]})}})}); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/example_dependency/plugin.min.js b/Resources/public/vendor/tinymce/plugins/example_dependency/plugin.min.js deleted file mode 100644 index e61bf473..00000000 --- a/Resources/public/vendor/tinymce/plugins/example_dependency/plugin.min.js +++ /dev/null @@ -1 +0,0 @@ -tinymce.PluginManager.add("example_dependency",function(){},["example"]); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/fullpage/plugin.min.js b/Resources/public/vendor/tinymce/plugins/fullpage/plugin.min.js index c0dfa2d3..88c75b74 100644 --- a/Resources/public/vendor/tinymce/plugins/fullpage/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/fullpage/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("fullpage",function(e){function t(){var t=n();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){l(tinymce.extend(t,e.data))}})}function n(){function t(e,t){var n=e.attr(t);return n||""}var n,l,a=i(),r={};return r.fontface=e.getParam("fullpage_default_fontface",""),r.fontsize=e.getParam("fullpage_default_fontsize",""),n=a.firstChild,7==n.type&&(r.xml_pi=!0,l=/encoding="([^"]+)"/.exec(n.value),l&&(r.docencoding=l[1])),n=a.getAll("#doctype")[0],n&&(r.doctype=""),n=a.getAll("title")[0],n&&n.firstChild&&(r.title=n.firstChild.value),s(a.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?r[n.toLowerCase()]=e.attr("content"):"Content-Type"==l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")),t&&(r.docencoding=t[1]))}),n=a.getAll("html")[0],n&&(r.langcode=t(n,"lang")||t(n,"xml:lang")),r.stylesheets=[],tinymce.each(a.getAll("link"),function(e){"stylesheet"==e.attr("rel")&&r.stylesheets.push(e.attr("href"))}),n=a.getAll("body")[0],n&&(r.langdir=t(n,"dir"),r.style=t(n,"style"),r.visited_color=t(n,"vlink"),r.link_color=t(n,"link"),r.active_color=t(n,"alink")),r}function l(t){function n(e,t,n){e.attr(t,n?n:void 0)}function l(e){r.firstChild?r.insert(e,r.firstChild):r.append(e)}var a,r,o,d,u,g=e.dom;a=i(),r=a.getAll("head")[0],r||(d=a.getAll("html")[0],r=new m("head",1),d.firstChild?d.insert(r,d.firstChild,!0):d.append(r)),d=a.firstChild,t.xml_pi?(u='version="1.0"',t.docencoding&&(u+=' encoding="'+t.docencoding+'"'),7!=d.type&&(d=new m("xml",7),a.insert(d,a.firstChild,!0)),d.value=u):d&&7==d.type&&d.remove(),d=a.getAll("#doctype")[0],t.doctype?(d||(d=new m("#doctype",10),t.xml_pi?a.insert(d,a.firstChild):l(d)),d.value=t.doctype.substring(9,t.doctype.length-1)):d&&d.remove(),d=null,s(a.getAll("meta"),function(e){"Content-Type"==e.attr("http-equiv")&&(d=e)}),t.docencoding?(d||(d=new m("meta",1),d.attr("http-equiv","Content-Type"),d.shortEnded=!0,l(d)),d.attr("content","text/html; charset="+t.docencoding)):d&&d.remove(),d=a.getAll("title")[0],t.title?(d?d.empty():(d=new m("title",1),l(d)),d.append(new m("#text",3)).value=t.title):d&&d.remove(),s("keywords,description,author,copyright,robots".split(","),function(e){var n,i,r=a.getAll("meta"),o=t[e];for(n=0;n"))}function i(){return new tinymce.html.DomParser({validate:!1,root_name:"#document"}).parse(c)}function a(t){function n(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}var l,a,o,m,u=t.content,g="",f=e.dom;if(!t.selection&&!("raw"==t.format&&c||t.source_view&&e.getParam("fullpage_hide_in_source_view"))){0!==u.length||t.source_view||(u=tinymce.trim(c)+"\n"+tinymce.trim(u)+"\n"+tinymce.trim(d)),u=u.replace(/<(\/?)BODY/gi,"<$1body"),l=u.indexOf("",l),c=n(u.substring(0,l+1)),a=u.indexOf("\n"),o=i(),s(o.getAll("style"),function(e){e.firstChild&&(g+=e.firstChild.value)}),m=o.getAll("body")[0],m&&f.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""}),f.remove("fullpage_styles");var y=e.getDoc().getElementsByTagName("head")[0];g&&(f.add(y,"style",{id:"fullpage_styles"},g),m=f.get("fullpage_styles"),m.styleSheet&&(m.styleSheet.cssText=g));var h={};tinymce.each(y.getElementsByTagName("link"),function(e){"stylesheet"==e.rel&&e.getAttribute("data-mce-fullpage")&&(h[e.href]=e)}),tinymce.each(o.getAll("link"),function(e){var t=e.attr("href");h[t]||"stylesheet"!=e.attr("rel")||f.add(y,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete h[t]}),tinymce.each(h,function(e){e.parentNode.removeChild(e)})}}function r(){var t,n="",l="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=e.getParam("fullpage_default_encoding"))&&(n+='\n'),(t=e.getParam("fullpage_default_font_family"))&&(l+="font-family: "+t+";"),(t=e.getParam("fullpage_default_font_size"))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"}function o(t){t.selection||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(t.content=tinymce.trim(c)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(d))}var c,d,s=tinymce.each,m=tinymce.html.Node;e.addCommand("mceFullPageProperties",t),e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"}),e.on("BeforeSetContent",a),e.on("GetContent",o)}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(p){"use strict";var s=function(e){var t=e;return{get:function(){return t},set:function(e){t=e}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(){return(u=Object.assign||function(e){for(var t,n=1,l=arguments.length;n"),(n=r.getAll("title")[0])&&n.firstChild&&(a.title=n.firstChild.value),y.each(r.getAll("meta"),function(e){var t,n=e.attr("name"),l=e.attr("http-equiv");n?a[n.toLowerCase()]=e.attr("content"):"Content-Type"===l&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")))&&(a.docencoding=t[1])}),(n=r.getAll("html")[0])&&(a.langcode=s(n,"lang")||s(n,"xml:lang")),a.stylesheets=[],y.each(r.getAll("link"),function(e){"stylesheet"===e.attr("rel")&&a.stylesheets.push(e.attr("href"))}),(n=r.getAll("body")[0])&&(a.langdir=s(n,"dir"),a.style=s(n,"style"),a.visited_color=s(n,"vlink"),a.link_color=s(n,"link"),a.active_color=s(n,"alink")),a);function s(e,t){return e.attr(t)||""}var d=u(u({},{title:"",keywords:"",description:"",robots:"",author:"",docencoding:""}),c);l.windowManager.open({title:"Metadata and Document Properties",size:"normal",body:{type:"panel",items:[{name:"title",type:"input",label:"Title"},{name:"keywords",type:"input",label:"Keywords"},{name:"description",type:"input",label:"Description"},{name:"robots",type:"input",label:"Robots"},{name:"author",type:"input",label:"Author"},{name:"docencoding",type:"input",label:"Encoding"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:d,onSubmit:function(e){var t=e.getData(),n=function(e,o,t){var r,n,l,a,i,c=e.dom;function s(e,t,n){e.attr(t,n||undefined)}function d(e){n.firstChild?n.insert(e,n.firstChild):n.append(e)}r=_(t),(n=r.getAll("head")[0])||(a=r.getAll("html")[0],n=new m("head",1),a.firstChild?a.insert(n,a.firstChild,!0):a.append(n)),a=r.firstChild,o.xml_pi?(i='version="1.0"',o.docencoding&&(i+=' encoding="'+o.docencoding+'"'),7!==a.type&&(a=new m("xml",7),r.insert(a,r.firstChild,!0)),a.value=i):a&&7===a.type&&a.remove(),a=r.getAll("#doctype")[0],o.doctype?(a||(a=new m("#doctype",10),o.xml_pi?r.insert(a,r.firstChild):d(a)),a.value=o.doctype.substring(9,o.doctype.length-1)):a&&a.remove(),a=null,y.each(r.getAll("meta"),function(e){"Content-Type"===e.attr("http-equiv")&&(a=e)}),o.docencoding?(a||((a=new m("meta",1)).attr("http-equiv","Content-Type"),a.shortEnded=!0,d(a)),a.attr("content","text/html; charset="+o.docencoding)):a&&a.remove(),a=r.getAll("title")[0],o.title?(a?a.empty():d(a=new m("title",1)),a.append(new m("#text",3)).value=o.title):a&&a.remove(),y.each("keywords,description,author,copyright,robots".split(","),function(e){var t,n,l=r.getAll("meta"),i=o[e];for(t=0;t"))}(l,y.extend(c,t),i.get());i.set(n),e.close()}})},b=y.each,x=function(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})},k=function(e,t,n,l){var i,o,r,a,c,s,d="",u=e.dom;if(!l.selection&&(c=e.settings.protect,s=l.content,y.each(c,function(e){s=s.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})}),r=s,!("raw"===l.format&&t.get()||l.source_view&&h(e)))){0!==r.length||l.source_view||(r=y.trim(t.get())+"\n"+y.trim(r)+"\n"+y.trim(n.get())),-1!==(i=(r=r.replace(/<(\/?)BODY/gi,"<$1body")).indexOf("",i),t.set(x(r.substring(0,i+1))),-1===(o=r.indexOf("\n")),a=_(t.get()),b(a.getAll("style"),function(e){e.firstChild&&(d+=e.firstChild.value)});var m=a.getAll("body")[0];m&&u.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""}),u.remove("fullpage_styles");var f=e.getDoc().getElementsByTagName("head")[0];if(d)u.add(f,"style",{id:"fullpage_styles"}).appendChild(p.document.createTextNode(d));var g={};y.each(f.getElementsByTagName("link"),function(e){"stylesheet"===e.rel&&e.getAttribute("data-mce-fullpage")&&(g[e.href]=e)}),y.each(a.getAll("link"),function(e){var t=e.attr("href");if(!t)return!0;g[t]||"stylesheet"!==e.attr("rel")||u.add(f,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"}),delete g[t]}),y.each(g,function(e){e.parentNode.removeChild(e)})}},C=function(e){var t,n="",l="";if(e.getParam("fullpage_default_xml_pi")){var i=o(e);n+='\n'}return n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=o(e))&&(n+='\n'),(t=g(e))&&(l+="font-family: "+t+";"),(t=v(e))&&(l+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(l+="color: "+t+";"),n+="\n\n"},A=function(e,t,n,l){l.selection||l.source_view&&h(e)||(l.content=(y.trim(t)+"\n"+y.trim(l.content)+"\n"+y.trim(n)).replace(//g,function(e,t){return unescape(t)}))};!function n(){e.add("fullpage",function(e){var t,n,l,i,o,r,a=s(""),c=s("");n=a,(t=e).addCommand("mceFullPageProperties",function(){d(t,n)}),(l=e).ui.registry.addButton("fullpage",{tooltip:"Metadata and document properties",icon:"document-properties",onAction:function(){l.execCommand("mceFullPageProperties")}}),l.ui.registry.addMenuItem("fullpage",{text:"Metadata and document properties",icon:"document-properties",onAction:function(){l.execCommand("mceFullPageProperties")}}),o=a,r=c,(i=e).on("BeforeSetContent",function(e){k(i,o,r,e)}),i.on("GetContent",function(e){A(i,o.get(),r.get(),e)})})}()}(window); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/fullscreen/plugin.min.js b/Resources/public/vendor/tinymce/plugins/fullscreen/plugin.min.js index 1bb1940d..6539fa4d 100644 --- a/Resources/public/vendor/tinymce/plugins/fullscreen/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/fullscreen/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,l=i.body;return l.offsetWidth&&(e=l.offsetWidth,t=l.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){d.setStyle(a,"height",t().h-(h.clientHeight-a.clientHeight))}var u,h,a,f,m=document.body,g=document.documentElement;s=!s,h=e.getContainer(),u=h.style,a=e.getContentAreaContainer().firstChild,f=a.style,s?(i=f.width,l=f.height,f.width=f.height="100%",c=u.width,o=u.height,u.width=u.height="",d.addClass(m,"mce-fullscreen"),d.addClass(g,"mce-fullscreen"),d.addClass(h,"mce-fullscreen"),d.bind(window,"resize",n),n(),r=n):(f.width=i,f.height=l,c&&(u.width=c),o&&(u.height=o),d.removeClass(m,"mce-fullscreen"),d.removeClass(g,"mce-fullscreen"),d.removeClass(h,"mce-fullscreen"),d.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:s})}var i,l,r,c,o,s=!1,d=tinymce.DOM;return e.settings.inline?void 0:(e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&d.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return s}})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(g){"use strict";var n,t,e,r,c=function(n){var t=n;return{get:function(){return t},set:function(n){t=n}}},o=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(n){return{isFullscreen:function(){return null!==n.get()}}},i=function(){},a=function(n){return function(){return n}},l=a(!1),f=a(!0),d=function(){return s},s=(n=function(n){return n.isNone()},{fold:function(n,t){return n()},is:l,isSome:l,isNone:f,getOr:e=function(n){return n},getOrThunk:t=function(n){return n()},getOrDie:function(n){throw new Error(n||"error: getOrDie called on none.")},getOrNull:a(null),getOrUndefined:a(undefined),or:e,orThunk:t,map:d,each:i,bind:d,exists:l,forall:f,filter:d,equals:n,equals_:n,toArray:function(){return[]},toString:a("none()")}),m=function(e){var n=a(e),t=function(){return o},r=function(n){return n(e)},o={fold:function(n,t){return t(e)},is:function(n){return e===n},isSome:f,isNone:l,getOr:n,getOrThunk:n,getOrDie:n,getOrNull:n,getOrUndefined:n,or:t,orThunk:t,map:function(n){return m(n(e))},each:function(n){n(e)},bind:r,exists:r,forall:r,filter:function(n){return n(e)?o:s},toArray:function(){return[e]},toString:function(){return"some("+e+")"},equals:function(n){return n.is(e)},equals_:function(n,t){return n.fold(l,function(n){return t(e,n)})}};return o},h={some:m,none:d,from:function(n){return null===n||n===undefined?s:m(n)}},p=function(){return n=function(n){n.unbind()},t=c(h.none()),e=function(){t.get().each(n)},{clear:function(){e(),t.set(h.none())},isSet:function(){return t.get().isSome()},set:function(n){e(),t.set(h.some(n))}};var n,t,e},v=function(r){return function(n){return e=typeof(t=n),(null===t?"null":"object"==e&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":e)===r;var t,e}},y=function(t){return function(n){return typeof n===t}},w=v("string"),b=v("array"),S=y("boolean"),T=y("function"),x=y("number"),C=Array.prototype.push,A=function(n,t){for(var e=n.length,r=new Array(e),o=0;o'+e.name+""};return{name:"plugins",title:"Plugins",items:[{type:"htmlpanel",presets:"document",html:[null==(n=e)?"":'
'+function(a){var t,e,n=(e=f((t=a).plugins),t.settings.forced_plugins===undefined?e:function(e,t){for(var n=[],a=0,o=e.length;a"+(t=a,n=e,g(C,function(e){return e.key===n}).fold(function(){var e=t.plugins[n].getMetadata;return"function"==typeof e?s(e()):n},function(e){return s({name:e.name,url:"https://www.tiny.cloud/docs/plugins/"+e.key})}))+"";var t,n}),i=o.length,r=o.join("");return"

"+A.translate(["Plugins installed ({0}):",i])+"

    "+r+"
"}(n)+"
",(t=p(["Accessibility Checker","Advanced Code Editor","Advanced Tables","Case Change","Checklist","Tiny Comments","Tiny Drive","Enhanced Media Embed","Format Painter","Link Checker","Mentions","MoxieManager","Page Embed","Permanent Pen","PowerPaste","Spell Checker Pro"],function(e){return"
  • "+A.translate(e)+"
  • "}).join(""),'

    '+A.translate("Premium plugins:")+"

    ")].join("")}]}},x=tinymce.util.Tools.resolve("tinymce.EditorManager"),M=function(e,t){var n,a,o,i,r,s={name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:p(k,function(e){var t=p(e.shortcuts,w).join(" or ");return[e.action,t]})}]},c={name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:"

    Editor UI keyboard navigation

    \n\n

    Activating keyboard navigation

    \n\n

    The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:

    \n
      \n
    • Focus the menubar: Alt + F9 (Windows) or ⌥F9 (MacOS)
    • \n
    • Focus the toolbar: Alt + F10 (Windows) or ⌥F10 (MacOS)
    • \n
    • Focus the footer: Alt + F11 (Windows) or ⌥F11 (MacOS)
    • \n
    \n\n

    Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline.

    \n\n

    Moving between UI sections

    \n\n

    When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:

    \n
      \n
    • the menubar
    • \n
    • each group of the toolbar
    • \n
    • the sidebar
    • \n
    • the element path in the footer
    • \n
    • the wordcount toggle button in the footer
    • \n
    • the branding link in the footer
    • \n
    \n\n

    Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.

    \n\n

    Moving within UI sections

    \n\n

    Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:

    \n
      \n
    • moving between menus in the menubar
    • \n
    • moving between buttons in a toolbar group
    • \n
    • moving between items in the element path
    • \n
    \n\n

    In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group.

    \n\n

    Executing buttons

    \n\n

    To execute a button, navigate the selection to the desired button and hit space or enter.

    \n\n

    Opening, navigating and closing menus

    \n\n

    When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.

    \n\n

    To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.

    \n\n

    Context toolbars and menus

    \n\n

    To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or ⌃F9 (MacOS).

    \n\n

    Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.

    \n\n

    Dialog navigation

    \n\n

    There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.

    \n\n

    When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.

    \n\n

    When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.

    "}]},l=T(e),u=(i='TinyMCE '+(a=x.majorVersion,o=x.minorVersion,0===a.indexOf("@")?"X.X.X":a+"."+o)+"",{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+A.translate(["You are using {0}",i])+"

    ",presets:"document"}]}),h=m(((n={})[s.name]=s,n[c.name]=c,n[l.name]=l,n[u.name]=u,n),t.get());return r=e,d.from(r.getParam("help_tabs")).fold(function(){return t=f(e=h),-1!==(n=t.indexOf("versions"))&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t};var e,t,n},function(e){return t=h,n={},a=p(e,function(e){return"string"==typeof e?(y(t,e)&&(n[e]=t[e]),e):(n[e.name]=e).name}),{tabs:n,names:a};var t,n,a})},P=function(o,i){return function(){var e=M(o,i),a=e.tabs,t=e.names,n={type:"tabpanel",tabs:function(e){for(var t=[],n=function(e){t.push(e)},a=0;a")}),n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");!function o(){n.add("hr",function(n){var o,t;(o=n).addCommand("InsertHorizontalRule",function(){o.execCommand("mceInsertContent",!1,"
    ")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}})})}()}(); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/image/plugin.min.js b/Resources/public/vendor/tinymce/plugins/image/plugin.min.js index 14e5bbd9..ee21f915 100644 --- a/Resources/public/vendor/tinymce/plugins/image/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/image/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("image",function(e){function t(e,t){function i(e,i){n.parentNode&&n.parentNode.removeChild(n),t({width:e,height:i})}var n=document.createElement("img");n.onload=function(){i(n.clientWidth,n.clientHeight)},n.onerror=function(){i()};var a=n.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left=0,a.width=a.height="auto",document.body.appendChild(n),n.src=e}function i(e,t,i){function n(e,i){return i=i||[],tinymce.each(e,function(e){var a={text:e.text||e.title};e.menu?a.menu=n(e.menu):(a.value=e.value,t(a)),i.push(a)}),i}return n(e,i||[])}function n(t){return function(){var i=e.settings.image_list;"string"==typeof i?tinymce.util.XHR.send({url:i,success:function(e){t(tinymce.util.JSON.parse(e))}}):"function"==typeof i?i(t):t(i)}}function a(n){function a(){var e,t,i,n;e=c.find("#width")[0],t=c.find("#height")[0],e&&t&&(i=e.value(),n=t.value(),c.find("#constrain")[0].checked()&&d&&u&&i&&n&&(d!=i?(n=Math.round(i/d*n),t.value(n)):(i=Math.round(n/u*i),e.value(i))),d=i,u=n)}function l(){function t(t){function i(){t.onload=t.onerror=null,e.selection&&(e.selection.select(t),e.nodeChanged())}t.onload=function(){m.width||m.height||!y||p.setAttribs(t,{width:t.clientWidth,height:t.clientHeight}),i()},t.onerror=i}s(),a(),m=tinymce.extend(m,c.toJSON()),m.alt||(m.alt=""),""===m.width&&(m.width=null),""===m.height&&(m.height=null),m.style||(m.style=null),m={src:m.src,alt:m.alt,width:m.width,height:m.height,style:m.style,"class":m["class"]},e.undoManager.transact(function(){return m.src?(f?p.setAttribs(f,m):(m.id="__mcenew",e.focus(),e.selection.setContent(p.createHTML("img",m)),f=p.get("__mcenew"),p.setAttrib(f,"id",null)),void t(f)):void(f&&(p.remove(f),e.focus(),e.nodeChanged()))})}function o(e){return e&&(e=e.replace(/px$/,"")),e}function r(i){var n=i.meta||{};g&&g.value(e.convertURL(this.value(),"src")),tinymce.each(n,function(e,t){c.find("#"+t).value(e)}),n.width||n.height||t(this.value(),function(e){e.width&&e.height&&y&&(d=e.width,u=e.height,c.find("#width").value(d),c.find("#height").value(u))})}function s(){function t(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e}if(e.settings.image_advtab){var i=c.toJSON(),n=p.parseStyle(i.style);delete n.margin,n["margin-top"]=n["margin-bottom"]=t(i.vspace),n["margin-left"]=n["margin-right"]=t(i.hspace),n["border-width"]=t(i.border),c.find("#style").value(p.serializeStyle(p.parseStyle(p.serializeStyle(n))))}}var c,d,u,g,h,m={},p=e.dom,f=e.selection.getNode(),y=e.settings.image_dimensions!==!1;d=p.getAttrib(f,"width"),u=p.getAttrib(f,"height"),"IMG"!=f.nodeName||f.getAttribute("data-mce-object")||f.getAttribute("data-mce-placeholder")?f=null:m={src:p.getAttrib(f,"src"),alt:p.getAttrib(f,"alt"),"class":p.getAttrib(f,"class"),width:d,height:u},n&&(g={type:"listbox",label:"Image list",values:i(n,function(t){t.value=e.convertURL(t.value||t.url,"src")},[{text:"None",value:""}]),value:m.src&&e.convertURL(m.src,"src"),onselect:function(e){var t=c.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),c.find("#src").value(e.control.value()).fire("change")},onPostRender:function(){g=this}}),e.settings.image_class_list&&(h={name:"class",type:"listbox",label:"Class",values:i(e.settings.image_class_list,function(t){t.value&&(t.textStyle=function(){return e.formatter.getCssText({inline:"img",classes:[t.value]})})})});var b=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:r},g];e.settings.image_description!==!1&&b.push({name:"alt",type:"textbox",label:"Image description"}),y&&b.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:a,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:a,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),b.push(h),e.settings.image_advtab?(f&&(m.hspace=o(f.style.marginLeft||f.style.marginRight),m.vspace=o(f.style.marginTop||f.style.marginBottom),m.border=o(f.style.borderWidth),m.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(f,"style")))),c=e.windowManager.open({title:"Insert/edit image",data:m,bodyType:"tabpanel",body:[{title:"General",type:"form",items:b},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:s},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:l})):c=e.windowManager.open({title:"Insert/edit image",data:m,body:b,onSubmit:l})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(a),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(a),context:"insert",prependToContext:!0}),e.addCommand("mceImage",n(a))}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(m){"use strict";var e,t,n,r,o,a=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(){},l=function(e){return function(){return e}},s=l(!1),u=l(!0),c=function(){return d},d=(e=function(e){return e.isNone()},{fold:function(e,t){return e()},is:s,isSome:s,isNone:u,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:l(null),getOrUndefined:l(undefined),or:n,orThunk:t,map:c,each:i,bind:c,exists:s,forall:u,filter:c,equals:e,equals_:e,toArray:function(){return[]},toString:l("none()")}),g=function(n){var e=l(n),t=function(){return a},r=function(e){return e(n)},a={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:u,isNone:s,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return g(e(n))},each:function(e){e(n)},bind:r,exists:r,forall:r,filter:function(e){return e(n)?a:d},toArray:function(){return[n]},toString:function(){return"some("+n+")"},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(s,function(e){return t(n,e)})}};return a},A={some:g,none:c,from:function(e){return null===e||e===undefined?d:g(e)}},f=function(r){return function(e){return n=typeof(t=e),(null===t?"null":"object"==n&&(Array.prototype.isPrototypeOf(t)||t.constructor&&"Array"===t.constructor.name)?"array":"object"==n&&(String.prototype.isPrototypeOf(t)||t.constructor&&"String"===t.constructor.name)?"string":n)===r;var t,n}},p=function(t){return function(e){return typeof e===t}},S=f("string"),h=f("object"),b=f("array"),v=(r=null,function(e){return r===e}),y=p("boolean"),w=p("number"),D=Array.prototype.push,x=function(e){for(var t=[],n=0,r=e.length;n'+n+"";var i=e.dom.getParent(e.selection.getStart(),"time");if(i)return void e.dom.setOuterHTML(i,n)}e.insertContent(n)}var n,r,i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),d="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),c="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),u=[];e.addCommand("mceInsertDate",function(){a(e.getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){a(e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S")))}),e.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){a(n||r)},menu:u}),tinymce.each(e.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){r||(r=e),u.push({text:t(e),onclick:function(){n=e,a(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:u,context:"insert"})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=function(e){return e.getParam("insertdatetime_timeformat",e.translate("%H:%M:%S"))},c=function(e){return e.getParam("insertdatetime_formats",["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"])},r="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),a="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),i="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),o="January February March April May June July August September October November December".split(" "),m=function(e,t){if((e=""+e).length'+n+"")}else e.insertContent(s(e,t));var i,o,u,c,m},t=function(t){t.addCommand("mceInsertDate",function(){var e;l(t,(e=t).getParam("insertdatetime_dateformat",e.translate("%Y-%m-%d")))}),t.addCommand("mceInsertTime",function(){l(t,u(t))})},d=tinymce.util.Tools.resolve("tinymce.util.Tools"),n=function(n){var e,t,r,a,i=c(n),o=(a=c(r=n),e=0s&&n[d]==i&&(s=d);if(0>o){for(d=0;d-1?(n[s].style.zIndex=a[l],n[l].style.zIndex=a[s]):a[s]>0&&(n[s].style.zIndex=a[s]-1)}else{for(d=0;da[s]){l=d;break}l>-1?(n[s].style.zIndex=a[l],n[l].style.zIndex=a[s]):n[s].style.zIndex=a[s]+1}e.execCommand("mceRepaint")}function n(){var t=e.dom,o=t.getPos(t.getParent(e.selection.getNode(),"*")),d=e.getBody();e.dom.add(d,"div",{style:{position:"absolute",left:o.x,top:o.y>20?o.y:20,width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},e.selection.getContent()||e.getLang("layer.content")),tinymce.Env.ie&&t.setHTML(d,d.innerHTML)}function a(){var o=t(e.selection.getNode());o||(o=e.dom.getParent(e.selection.getNode(),"DIV,P,IMG")),o&&("absolute"==o.style.position.toLowerCase()?(e.dom.setStyles(o,{position:"",left:"",top:"",width:"",height:""}),e.dom.removeClass(o,"mceItemVisualAid"),e.dom.removeClass(o,"mceItemLayer")):(o.style.left||(o.style.left="20px"),o.style.top||(o.style.top="20px"),o.style.width||(o.style.width=o.width?o.width+"px":"100px"),o.style.height||(o.style.height=o.height?o.height+"px":"100px"),o.style.position="absolute",e.dom.setAttrib(o,"data-mce-style",""),e.addVisual(e.getBody())),e.execCommand("mceRepaint"),e.nodeChanged())}e.addCommand("mceInsertLayer",n),e.addCommand("mceMoveForward",function(){d(1)}),e.addCommand("mceMoveBackward",function(){d(-1)}),e.addCommand("mceMakeAbsolute",function(){a()}),e.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"}),e.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"}),e.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"}),e.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"}),e.on("init",function(){tinymce.Env.ie&&e.getDoc().execCommand("2D-Position",!1,!0)}),e.on("mouseup",function(o){var d=t(o.target);d&&e.dom.setAttrib(d,"data-mce-style","")}),e.on("mousedown",function(o){var d,n=o.target,a=e.getDoc();tinymce.Env.gecko&&(t(n)?"on"!==a.designMode&&(a.designMode="on",n=a.body,d=n.parentNode,d.removeChild(n),d.appendChild(n)):"on"==a.designMode&&(a.designMode="off"))}),e.on("NodeChange",o)}); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/legacyoutput/plugin.min.js b/Resources/public/vendor/tinymce/plugins/legacyoutput/plugin.min.js index f2002165..810721ae 100644 --- a/Resources/public/vendor/tinymce/plugins/legacyoutput/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/legacyoutput/plugin.min.js @@ -1 +1,9 @@ -!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t,n,i){t.on("init",function(){var n="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",i=e.explode(t.settings.font_size_style_values),a=t.schema;t.formatter.register({alignleft:{selector:n,attributes:{align:"left"}},aligncenter:{selector:n,attributes:{align:"center"}},alignright:{selector:n,attributes:{align:"right"}},alignjustify:{selector:n,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(i,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){a.addValidElements(e+"[*]")}),a.getElementRule("font")||a.addValidElements("font[face|size|color|style]"),e.each(n.split(","),function(e){var t=a.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})}),t.addButton("fontsizeselect",function(){var e=[],n="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",i=t.settings.fontsize_formats||n;return t.$.each(i.split(" "),function(t,n){var i=n,a=n,o=n.split("=");o.length>1&&(i=o[0],a=o[1]),e.push({text:i,value:a})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:e,fixedWidth:!0,onPostRender:function(){var e=this;t.on("NodeChange",function(){var n;n=t.dom.getParent(t.selection.getNode(),"font"),e.value(n?n.size:"")})},onclick:function(e){e.control.settings.value&&t.execCommand("FontSize",!1,e.control.settings.value)}}}),t.addButton("fontselect",function(){function e(e){e=e.replace(/;$/,"").split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}var n="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",a=[],o=e(t.settings.font_formats||n);return i.each(o,function(e,t){a.push({text:{raw:t[0]},value:t[1],textStyle:-1==t[1].indexOf("dings")?"font-family:"+t[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:a,fixedWidth:!0,onPostRender:function(){var e=this;t.on("NodeChange",function(){var n;n=t.dom.getParent(t.selection.getNode(),"font"),e.value(n?n.face:"")})},onselect:function(e){e.control.settings.value&&t.execCommand("FontName",!1,e.control.settings.value)}}})})}(tinymce); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=function(s){var e,t,i,a;t=!1,(e=s).settings.inline_styles=t,e.getParam("fontsize_formats")||(i="8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7",e.settings.fontsize_formats=i),e.getParam("font_formats")||(a="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",e.settings.font_formats=a),s.on("PreInit",function(){return e=s,t="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table",i=l.explode(e.getParam("font_size_style_values","xx-small,x-small,small,medium,large,x-large,xx-large")),a=e.schema,e.formatter.register({alignleft:{selector:t,attributes:{align:"left"}},aligncenter:{selector:t,attributes:{align:"center"}},alignright:{selector:t,attributes:{align:"right"}},alignjustify:{selector:t,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all",preserve_attributes:["class","style"]},{inline:"strong",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all",preserve_attributes:["class","style"]},{inline:"em",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all",preserve_attributes:["class","style"]},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",toggle:!1,attributes:{face:"%value"}},fontsize:{inline:"font",toggle:!1,attributes:{size:function(e){return String(l.inArray(i,e.value)+1)}}},forecolor:{inline:"font",attributes:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0}}),l.each("b,i,u,strike".split(","),function(e){a.addValidElements(e+"[*]")}),a.getElementRule("font")||a.addValidElements("font[face|size|color|style]"),void l.each(t.split(","),function(e){var t=a.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))});var e,t,i,a})};!function i(){e.add("legacyoutput",function(e){t(e)})}()}(); \ No newline at end of file diff --git a/Resources/public/vendor/tinymce/plugins/link/plugin.min.js b/Resources/public/vendor/tinymce/plugins/link/plugin.min.js index 703d6161..63b3b10c 100644 --- a/Resources/public/vendor/tinymce/plugins/link/plugin.min.js +++ b/Resources/public/vendor/tinymce/plugins/link/plugin.min.js @@ -1 +1,9 @@ -tinymce.PluginManager.add("link",function(t){function e(e){return function(){var n=t.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(t){e(tinymce.util.JSON.parse(t))}}):"function"==typeof n?n(e):e(n)}}function n(t,e,n){function i(t,n){return n=n||[],tinymce.each(t,function(t){var l={text:t.text||t.title};t.menu?l.menu=i(t.menu):(l.value=t.value,e&&e(l)),n.push(l)}),n}return i(t,n||[])}function i(e){function i(t){var e=f.find("#text");(!e.value()||t.lastControl&&e.value()==t.lastControl.text())&&e.value(t.control.text()),f.find("#href").value(t.control.value())}function l(e){var n=[];return tinymce.each(t.dom.select("a:not([href])"),function(t){var i=t.name||t.id;i&&n.push({text:i,value:"#"+i,selected:-1!=e.indexOf("#"+i)})}),n.length?(n.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:n,onselect:i}):void 0}function a(){!c&&0===y.text.length&&d&&this.parent().parent().find("#text")[0].value(this.value())}function o(e){var n=e.meta||{};x&&x.value(t.convertURL(this.value(),"href")),tinymce.each(e.meta,function(t,e){f.find("#"+e).value(t)}),n.text||a.call(this)}function r(t){var e=b.getContent();if(/]+>[^<]+<\/a>$/.test(e)||-1==e.indexOf("href=")))return!1;if(t){var n,i=t.childNodes;if(0===i.length)return!1;for(n=i.length-1;n>=0;n--)if(3!=i[n].nodeType)return!1}return!0}var s,u,c,f,d,g,x,v,h,m,p,k,y={},b=t.selection,_=t.dom;s=b.getNode(),u=_.getParent(s,"a[href]"),d=r(),y.text=c=u?u.innerText||u.textContent:b.getContent({format:"text"}),y.href=u?_.getAttrib(u,"href"):"",(k=_.getAttrib(u,"target"))?y.target=k:t.settings.default_link_target&&(y.target=t.settings.default_link_target),(k=_.getAttrib(u,"rel"))&&(y.rel=k),(k=_.getAttrib(u,"class"))&&(y["class"]=k),(k=_.getAttrib(u,"title"))&&(y.title=k),d&&(g={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){y.text=this.value()}}),e&&(x={type:"listbox",label:"Link list",values:n(e,function(e){e.value=t.convertURL(e.value||e.url,"href")},[{text:"None",value:""}]),onselect:i,value:t.convertURL(y.href,"href"),onPostRender:function(){x=this}}),t.settings.target_list!==!1&&(t.settings.target_list||(t.settings.target_list=[{text:"None",value:""},{text:"New window",value:"_blank"}]),h={name:"target",type:"listbox",label:"Target",values:n(t.settings.target_list)}),t.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:n(t.settings.rel_list)}),t.settings.link_class_list&&(m={name:"class",type:"listbox",label:"Class",values:n(t.settings.link_class_list,function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({inline:"a",classes:[e.value]})})})}),t.settings.link_title!==!1&&(p={name:"title",type:"textbox",label:"Title",value:y.title}),f=t.windowManager.open({title:"Insert link",data:y,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:a},g,p,l(y.href),x,v,h,m],onSubmit:function(e){function n(e,n){var i=t.selection.getRng();window.setTimeout(function(){t.windowManager.confirm(e,function(e){t.selection.setRng(i),n(e)})},0)}function i(){var e={href:l,target:y.target?y.target:null,rel:y.rel?y.rel:null,"class":y["class"]?y["class"]:null,title:y.title?y.title:null};u?(t.focus(),d&&y.text!=c&&("innerText"in u?u.innerText=y.text:u.textContent=y.text),_.setAttribs(u,e),b.select(u),t.undoManager.add()):d?t.insertContent(_.createHTML("a",e,_.encode(y.text))):t.execCommand("mceInsertLink",!1,e)}var l;return y=tinymce.extend(y,e.data),(l=y.href)?l.indexOf("@")>0&&-1==l.indexOf("//")&&-1==l.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(l="mailto:"+l),i()}):/^\s*www\./i.test(l)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(l="http://"+l),i()}):void i():void t.execCommand("unlink")}})}t.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:e(i),stateSelector:"a[href]"}),t.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),t.addShortcut("Ctrl+K","",e(i)),t.addCommand("mceLink",e(i)),this.showDialog=i,t.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:e(i),stateSelector:"a[href]",context:"insert",prependToContext:!0})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(i){"use strict";var n,t,e,r,o=tinymce.util.Tools.resolve("tinymce.PluginManager"),u=tinymce.util.Tools.resolve("tinymce.util.VK"),a=function(r){return function(t){return e=typeof(n=t),(null===n?"null":"object"==e&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==e&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":e)===r;var n,e}},l=function(n){return function(t){return typeof t===n}},c=a("string"),f=a("array"),s=function(t){return n===t},m=l("boolean"),g=l("function"),d=function(t){var n=t.getParam("link_assume_external_targets",!1);return m(n)&&n?1:!c(n)||"http"!==n&&"https"!==n?0:n},h=function(t){return t.getParam("default_link_target")},v=function(t){return t.getParam("target_list",!0)},p=function(t){return t.getParam("rel_list",[],"array")},y=function(t){return t.getParam("allow_unsafe_link_target",!1,"boolean")},k=function(t){var n=i.document.createElement("a");n.target="_blank",n.href=t,n.rel="noreferrer noopener";var e,r,o=i.document.createEvent("MouseEvents");o.initMouseEvent("click",!0,!0,i.window,0,0,0,0,0,!1,!1,!1,!1,0,null),e=n,r=o,i.document.body.appendChild(e),e.dispatchEvent(r),i.document.body.removeChild(e)},x=function(){return(x=Object.assign||function(t){for(var n,e=1,r=arguments.length;e]+>[^<]+<\/a>$/.test(t)||-1===t.indexOf("href=")))},G=function(t){return t&&"FIGURE"===t.nodeName&&/\bimage\b/i.test(t.className)},J=function(t){return n=["title","rel","class","target"],e=function(n,e){return t[e].each(function(t){n[e]=010)||a.appendChild(y.create("br",{"data-mce-bogus":"1"})):i.appendChild(y.create("br")),i}function f(){return tinymce.grep(k.getSelectedBlocks(),function(e){return/^(LI|DT|DD)$/.test(e.nodeName)})}function l(e,t,n){var r,a,o=y.select('span[data-mce-type="bookmark"]',e);n=n||s(t),r=y.createRng(),r.setStartAfter(t),r.setEndAfter(e),a=r.extractContents(),y.isEmpty(a)||y.insertAfter(a,e),y.insertAfter(n,e),y.isEmpty(t.parentNode)&&(tinymce.each(o,function(e){t.parentNode.parentNode.insertBefore(e,t.parentNode)}),y.remove(t.parentNode)),y.remove(t)}function c(e){var n,r;if(n=e.nextSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.appendChild(r);y.remove(n)}if(n=e.previousSibling,n&&t(n)&&n.nodeName==e.nodeName){for(;r=n.firstChild;)e.insertBefore(r,e.firstChild);y.remove(n)}}function p(e){tinymce.each(tinymce.grep(y.select("ol,ul",e)),function(e){var n,r=e.parentNode;"LI"==r.nodeName&&r.firstChild==e&&(n=r.previousSibling,n&&"LI"==n.nodeName&&(n.appendChild(e),y.isEmpty(r)&&y.remove(r))),t(r)&&(n=r.previousSibling,n&&"LI"==n.nodeName&&n.appendChild(e))})}function m(e){function a(e){y.isEmpty(e)&&y.remove(e)}var o,i=e.parentNode,d=i.parentNode;return"DD"==e.nodeName?(y.rename(e,"DT"),!0):n(e)&&r(e)?("LI"==d.nodeName?(y.insertAfter(e,d),a(d),y.remove(i)):t(d)?y.remove(i,!0):(d.insertBefore(s(e),i),y.remove(i)),!0):n(e)?("LI"==d.nodeName?(y.insertAfter(e,d),e.appendChild(i),a(d)):t(d)?d.insertBefore(e,i):(d.insertBefore(s(e),i),y.remove(e)),!0):r(e)?("LI"==d.nodeName?y.insertAfter(e,d):t(d)?y.insertAfter(e,i):(y.insertAfter(s(e),i),y.remove(e)),!0):("LI"==d.nodeName?(i=d,o=s(e,"LI")):o=t(d)?s(e,"LI"):s(e),l(i,e,o),p(i.parentNode),!0)}function u(e){function n(n,r){var a;if(t(n)){for(;a=e.lastChild.firstChild;)r.appendChild(a);y.remove(n)}}var r,a;return"DT"==e.nodeName?(y.rename(e,"DD"),!0):(r=e.previousSibling,r&&t(r)?(r.appendChild(e),!0):r&&"LI"==r.nodeName&&t(r.lastChild)?(r.lastChild.appendChild(e),n(e.lastChild,r.lastChild),!0):(r=e.nextSibling,r&&t(r)?(r.insertBefore(e,r.firstChild),!0):r&&"LI"==r.nodeName&&t(e.lastChild)?!1:(r=e.previousSibling,r&&"LI"==r.nodeName?(a=y.create(e.parentNode.nodeName),r.appendChild(a),a.appendChild(e),n(e.lastChild,a),!0):!1)))}function h(){var t=f();if(t.length){for(var n=i(k.getRng(!0)),r=0;r0))return n;for(var a=new tinymce.dom.TreeWalker(e.startContainer);n=a[t?"next":"prev"]();)if(3==n.nodeType&&n.data.length>0)return n}function r(e,n){var r,a,o=e.parentNode;for(t(n.lastChild)&&(a=n.lastChild),r=n.lastChild,r&&"BR"==r.nodeName&&e.hasChildNodes()&&y.remove(r);r=e.firstChild;)n.appendChild(r);a&&n.appendChild(a),y.remove(e),y.isEmpty(o)&&y.remove(o)}if(k.isCollapsed()){var a=y.getParent(k.getStart(),"LI");if(a){var o=k.getRng(!0),s=y.getParent(n(o,e),"LI");if(s&&s!=a){var f=i(o);return e?r(s,a):r(a,s),d(f),!0}if(!s&&!e&&g(a.parentNode.nodeName))return!0}}},e.addCommand("Indent",function(){return h()?void 0:!0}),e.addCommand("Outdent",function(){return v()?void 0:!0}),e.addCommand("InsertUnorderedList",function(){N("UL")}),e.addCommand("InsertOrderedList",function(){N("OL")}),e.addCommand("InsertDefinitionList",function(){N("DL")}),e.addQueryStateHandler("InsertUnorderedList",L("UL")),e.addQueryStateHandler("InsertOrderedList",L("OL")),e.addQueryStateHandler("InsertDefinitionList",L("DL")),e.on("keydown",function(t){9==t.keyCode&&e.dom.getParent(e.selection.getStart(),"LI,DT,DD")&&(t.preventDefault(),t.shiftKey?v():h())})}),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(){var t=this;e.on("nodechange",function(){for(var r=e.selection.getSelectedBlocks(),a=!1,o=0,i=r.length;!a&&i>o;o++){var d=r[o].nodeName;a="LI"==d&&n(r[o])||"UL"==d||"OL"==d||"DD"==d}t.disabled(a)})}}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?o.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&o.backspaceDelete(!0)&&e.preventDefault()})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(a){"use strict";var e,n,t,r,o,i,u,f=tinymce.util.Tools.resolve("tinymce.PluginManager"),s=function(){},y=function(e){return function(){return e}},c=function(n){return function(e){return!n(e)}},d=y(!1),l=y(!0),m=function(){return p},p=(e=function(e){return e.isNone()},{fold:function(e,n){return e()},is:d,isSome:d,isNone:l,getOr:t=function(e){return e},getOrThunk:n=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:y(null),getOrUndefined:y(undefined),or:t,orThunk:n,map:m,each:s,bind:m,exists:d,forall:l,filter:m,equals:e,equals_:e,toArray:function(){return[]},toString:y("none()")}),g=function(t){var e=y(t),n=function(){return o},r=function(e){return e(t)},o={fold:function(e,n){return n(t)},is:function(e){return t===e},isSome:l,isNone:d,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:n,orThunk:n,map:function(e){return g(e(t))},each:function(e){e(t)},bind:r,exists:r,forall:r,filter:function(e){return e(t)?o:p},toArray:function(){return[t]},toString:function(){return"some("+t+")"},equals:function(e){return e.is(t)},equals_:function(e,n){return e.fold(d,function(e){return n(t,e)})}};return o},v={some:g,none:m,from:function(e){return null===e||e===undefined?p:g(e)}},h=function(r){return function(e){return t=typeof(n=e),(null===n?"null":"object"==t&&(Array.prototype.isPrototypeOf(n)||n.constructor&&"Array"===n.constructor.name)?"array":"object"==t&&(String.prototype.isPrototypeOf(n)||n.constructor&&"String"===n.constructor.name)?"string":t)===r;var n,t}},S=function(n){return function(e){return typeof e===n}},b=h("string"),C=h("array"),O=S("boolean"),N=S("function"),L=S("number"),T=Array.prototype.slice,w=Array.prototype.push,D=function(e,n){for(var t=e.length,r=new Array(t),o=0;oe.length?hn:vn)(t,e,n)},[]),P(r).map(function(e){return e.list}).toArray()},xn=function(a,e,s){var n,t=wn(e,(n=D(Je(a),ge.fromDom),Ne(B(n,c(Sn)),B(R(n),c(Sn)),function(e,n){return{start:e,end:n}})));k(t,function(e){var n,t;n=e.entries,t=s,k(x(n,Cn),function(e){return function(e,n){switch(e){case"Indent":n.depth++;break;case"Outdent":n.depth--;break;case"Flatten":n.depth=0}n.dirty=!0}(t,e)});var r,o,i,u=(r=a,o=e.entries,I(function(e,n){if(0===e.length)return[];for(var t=n(e[0]),r=[],o=[],i=0,u=e.length;i=e.childNodes.length?t.data.length:0}:t.previousSibling&&_e(t.previousSibling)?{container:t.previousSibling,offset:t.previousSibling.data.length}:t.nextSibling&&_e(t.nextSibling)?{container:t.nextSibling,offset:0}:{container:e,offset:n}},Pn=function(e){var n=e.cloneRange(),t=Rn(e.startContainer,e.startOffset);n.setStart(t.container,t.offset);var r=Rn(e.endContainer,e.endOffset);return n.setEnd(r.container,r.offset),n},Mn=function(e,n){var t,r=D(nn(e),ge.fromDom),o=D(x(Je(e),qe),ge.fromDom),i=!1;if(r.length||o.length){var u=e.selection.getBookmark();xn(e,r,n),t=e,k(o,"Indent"===n?In:function(e){return Bn(t,e)}),e.selection.moveToBookmark(u),e.selection.setRng(Pn(e.selection.getRng())),e.nodeChanged(),i=!0}return i},Un=function(e){return Mn(e,"Indent")},_n=function(e){return Mn(e,"Outdent")},Fn=function(e){return Mn(e,"Flatten")},$n=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),Hn=An.DOM,jn=function(o){var i={},e=function(e){var n,t,r;t=o[e?"startContainer":"endContainer"],r=o[e?"startOffset":"endOffset"],1===t.nodeType&&(n=Hn.create("span",{"data-mce-type":"bookmark"}),t.hasChildNodes()?(r=Math.min(r,t.childNodes.length-1),e?t.insertBefore(n,t.childNodes[r]):Hn.insertAfter(n,t.childNodes[r])):t.appendChild(n),t=n,r=0),i[e?"startContainer":"endContainer"]=t,i[e?"startOffset":"endOffset"]=r};return e(!0),o.collapsed||e(),i},qn=function(o){function e(e){var n,t,r;n=r=o[e?"startContainer":"endContainer"],t=o[e?"startOffset":"endOffset"],n&&(1===n.nodeType&&(t=function(e){for(var n=e.parentNode.firstChild,t=0;n;){if(n===e)return t;1===n.nodeType&&"bookmark"===n.getAttribute("data-mce-type")||t++,n=n.nextSibling}return-1}(n),n=n.parentNode,Hn.remove(r),!n.hasChildNodes()&&Hn.isBlock(n)&&n.appendChild(Hn.create("br"))),o[e?"startContainer":"endContainer"]=n,o[e?"startOffset":"endOffset"]=t)}e(!0),e();var n=Hn.createRng();return n.setStart(o.startContainer,o.startOffset),o.endContainer&&n.setEnd(o.endContainer,o.endOffset),Pn(n)},Kn=function(e){return/\btox\-/.test(e.className)},Vn=function(n,t,r){return function(){var e=function(e){var n=E(e.parents,Fe,Ke).filter(function(e){return e.nodeName===t&&!Kn(e)}).isSome();r(n)};return n.on("NodeChange",e),function(){return n.off("NodeChange",e)}}},Wn=function(e){switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},Qn=function(t,e){Pe.each(e,function(e,n){t.setAttribute(n,e)})},Xn=function(e,n,t){var r,o,i,u,a,s,c;r=e,o=n,u=(i=t)["list-style-type"]?i["list-style-type"]:null,r.setStyle(o,"list-style-type",u),a=e,Qn(s=n,(c=t)["list-attributes"]),Pe.each(a.select("li",s),function(e){Qn(e,c["list-item-attributes"])})},zn=function(e,n,t,r){var o,i;for(o=n[t?"startContainer":"endContainer"],i=n[t?"startOffset":"endOffset"],1===o.nodeType&&(o=o.childNodes[Math.min(i,o.childNodes.length-1)]||o),!t&&Ve(o.nextSibling)&&(o=o.nextSibling);o.parentNode!==r;){if(We(e,o))return o;if(/^(TD|TH)$/.test(o.parentNode.nodeName))return o;o=o.parentNode}return o},Yn=function(f,d,l){void 0===l&&(l={});var e,n=f.selection.getRng(!0),m="LI",t=Ze(f,f.selection.getStart(!0)),p=f.dom;"false"!==p.getContentEditable(f.selection.getNode())&&("DL"===(d=d.toUpperCase())&&(m="DT"),e=jn(n),Pe.each(function(t,e,r){for(var o,i=[],u=t.dom,n=zn(t,e,!0,r),a=zn(t,e,!1,r),s=[],c=n;c&&(s.push(c),c!==a);c=c.nextSibling);return Pe.each(s,function(e){if(We(t,e))return i.push(e),void(o=null);if(u.isBlock(e)||Ve(e))return Ve(e)&&u.remove(e),void(o=null);var n=e.nextSibling;$n.isBookmarkNode(e)&&(We(t,n)||!n&&e.parentNode===r)?o=null:(o||(o=u.create("p"),e.parentNode.insertBefore(o,e),i.push(o)),o.appendChild(e))}),i}(f,n,t),function(e){var n,t,r,o,i,u,a,s,c;(t=e.previousSibling)&&Fe(t)&&t.nodeName===d&&(r=t,o=l,i=p.getStyle(r,"list-style-type"),u=o?o["list-style-type"]:"",i===(u=null===u?"":u))?(n=t,e=p.rename(e,m),t.appendChild(e)):(n=p.create(d),e.parentNode.insertBefore(n,e),n.appendChild(e),e=p.rename(e,m)),a=p,s=e,c=["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],Pe.each(c,function(e){var n;return a.setStyle(s,((n={})[e]="",n))}),Xn(p,n,l),Jn(f.dom,n)}),f.selection.setRng(qn(e)))},Gn=function(e,n,t){return s=t,(a=n)&&s&&Fe(a)&&a.nodeName===s.nodeName&&(i=n,u=t,(o=e).getStyle(i,"list-style-type",!0)===o.getStyle(u,"list-style-type",!0))&&(r=t,n.className===r.className);var r,o,i,u,a,s},Jn=function(e,n){var t,r;if(t=n.nextSibling,Gn(e,n,t)){for(;r=t.firstChild;)n.appendChild(r);e.remove(t)}if(t=n.previousSibling,Gn(e,n,t)){for(;r=t.lastChild;)n.insertBefore(r,n.firstChild);e.remove(t)}},Zn=function(n,e,t,r,o){if(e.nodeName!==r||et(o)){var i=jn(n.selection.getRng(!0));Pe.each([e].concat(t),function(e){!function(e,n,t,r){if(n.nodeName!==t){var o=e.dom.rename(n,t);Xn(e.dom,o,r),Ie(e,Wn(t),o)}else Xn(e.dom,n,r),Ie(e,Wn(t),n)}(n,e,r,o)}),n.selection.setRng(qn(i))}else Fn(n)},et=function(e){return"list-style-type"in e},nt=function(e,n,t){var r=Ye(e),o=Ge(e);t=t||{},r&&0=0;o--)t[r]==i[o]&&i.splice(o,1);e.selection.select(i[0]),e.nodeChanged()}})}function a(){var t=e.selection.getNode();return t.getAttribute("data-mce-object")?e.selection.getContent():void 0}function c(o){var a="";if(!o.source1&&(tinymce.extend(o,n(o.embed)),!o.source1))return"";if(o.source2||(o.source2=""),o.poster||(o.poster=""),o.source1=e.convertURL(o.source1,"source"),o.source2=e.convertURL(o.source2,"source"),o.source1mime=i(o.source1),o.source2mime=i(o.source2),o.poster=e.convertURL(o.poster,"poster"),o.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(d,function(e){var t,i,r;if(t=e.regex.exec(o.source1)){for(r=e.url,i=0;t[i];i++)r=r.replace("$"+i,function(){return t[i]});o.source1=r,o.type=e.type,o.width=o.width||e.w,o.height=o.height||e.h}}),o.embed)a=u(o.embed,o,!0);else{var c=r(o.source1);c&&(o.type="script",o.width=c.width,o.height=c.height),o.width=o.width||300,o.height=o.height||150,tinymce.each(o,function(t,i){o[i]=e.dom.encode(t)}),"iframe"==o.type?a+='':"application/x-shockwave-flash"==o.source1mime?(a+='',o.poster&&(a+=''),a+=""):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='":"script"==o.type?a+='':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'"}return a}function n(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function s(t){return t.getAttribute("data-mce-object")?n(e.serializer.serialize(t,{selection:!0})):{}}function m(t){if(e.settings.media_filter_html===!1)return t;var i=new tinymce.html.Writer;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){i.comment(e)},cdata:function(e){i.cdata(e)},text:function(e,t){i.text(e,t)},start:function(e,t,r){if("script"!=e&&"noscript"!=e){for(var o=0;o=c&&(r(n,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,n,s)},end:function(e){if("video"==e&&i)for(var n=1;2>=n;n++)if(t["source"+n]){var s=[];s.map={},n>c&&(r(s,{src:t["source"+n],type:t["source"+n+"mime"]}),a.start("source",s,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var d=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{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"},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&byline=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"'}],l=tinymce.Env.ie&&tinymce.Env.ie<=8?"onChange":"onInput";e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")});var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,n,s,m,u,d,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(d=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,d&&(d.width&&a.attr("width",d.width.toString()),d.height&&a.attr("height",d.height.toString())),m=a.attributes,o=m.length;o--;)n=m[o].name,s=m[o].value,"width"!==n&&"height"!==n&&"style"!==n&&(("data"==n||"src"==n)&&(s=e.convertURL(s,n)),c.attr("data-mce-p-"+n,s));u=a.firstChild&&a.firstChild.value,u&&(c.attr("data-mce-html",escape(u)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,n,s,u=e.length;u--;)if(i=e[u],i.parent){for(s=i.attr(t),r=new tinymce.html.Node(s,1),"audio"!=s&&"script"!=s&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var d=a[o].name;0===d.indexOf("data-mce-p-")&&r.attr(d.substr(11),a[o].value)}"script"==s&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(n=new tinymce.html.Node("#text",3),n.raw=!0,n.value=m(unescape(c)),r.append(n)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(u(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})}); \ No newline at end of file +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + * + * Version: 5.3.2 (2020-06-10) + */ +!function(){"use strict";var e,t,r,n=tinymce.util.Tools.resolve("tinymce.PluginManager"),p=function(){return(p=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"):"application/x-shockwave-flash"===n.sourcemime?(l='',s.poster&&(l+=''),l+=""):-1!==n.sourcemime.indexOf("audio")?(c=n,(u=h)?u(c):'"):"script"===n.type?' -{% endif %} -{% if tinymce_jquery %} - - -{% else %} - - - -{% endif %} - + + +{% for browser in file_browsers %} + +{% endfor %} + + +{% block tinymce_widget_initializer %} + + +{% endblock %} + +{% block tinymce_widget_extra %} +{% endblock %} diff --git a/Resources/views/Script/textarea.html.twig b/Resources/views/Script/textarea.html.twig new file mode 100644 index 00000000..19d04058 --- /dev/null +++ b/Resources/views/Script/textarea.html.twig @@ -0,0 +1,2 @@ + +{{ form_widget(form) }} diff --git a/Twig/Extension/StfalconTinymceExtension.php b/Twig/Extension/StfalconTinymceExtension.php index 6e18c64f..0cf8443a 100644 --- a/Twig/Extension/StfalconTinymceExtension.php +++ b/Twig/Extension/StfalconTinymceExtension.php @@ -3,7 +3,10 @@ use Stfalcon\Bundle\TinymceBundle\Helper\LocaleHelper; use Symfony\Component\Asset\Packages; +use Stfalcon\Bundle\TinymceBundle\Model\ConfigManager; use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\Form\FormView; +use Symfony\Component\Routing\RouterInterface; /** * Twig Extension for TinyMce support. @@ -25,6 +28,17 @@ class StfalconTinymceExtension extends \Twig_Extension * @var String */ protected $baseUrl; + /** + * Trigger of initialization + * + * @var bool + */ + private $initialized = false; + + /** + * @var ConfigManager + */ + private $configManager; /** * @var Packages @@ -32,16 +46,21 @@ class StfalconTinymceExtension extends \Twig_Extension private $packages; /** + * Initialize tinymce helper + * * @param ContainerInterface $container - * @param Packages $packages + * @param ConfigManager $configManager */ - public function __construct(ContainerInterface $container, Packages $packages) + public function __construct(ContainerInterface $container, ConfigManager $configManager, Packages $packages) { $this->container = $container; + $this->configManager = $configManager; $this->packages = $packages; } /** + * Gets a service. + * * @param string $id The service identifier * * @return object The associated service @@ -73,65 +92,122 @@ public function getFunctions() return [ 'tinymce_init' => new \Twig_SimpleFunction( 'tinymce_init', - [$this, 'tinymceInit'], + [$this, 'printIfNotInit'], + ['is_safe' => ['html']] + ), + 'tinymce_simple' => new \Twig_SimpleFunction( + 'tinymce_simple', + [$this, 'initSimple'], ['is_safe' => ['html']] ), ]; } + /** + * Be smart - initialize things only once + * + * @param FormView $form + * @param array $options + * @return string|null + */ + public function printIfNotInit($form, $options = array()) + { + $html = ''; + if(!$this->initialized) { + $this->initialized = true; + $html .= $this->tinymceInit($form, $options); + } + + return $html . $this->getService('templating')->render('StfalconTinymceBundle:Script:textarea.html.twig', ['form' => $form]); + } + /** * TinyMce initializations * + * @param FormView $form * @param array $options * * @return string */ - public function tinymceInit($options = []): string + public function tinymceInit($form, $options = array()): string { $config = $this->getParameter('stfalcon_tinymce.config'); $config = array_merge_recursive($config, $options); - $this->baseUrl = (!isset($config['base_url']) ? null : $config['base_url']); - - // Asset package name - $assetPackageName = (!isset($config['asset_package_name']) ? null : $config['asset_package_name']); - unset($config['asset_package_name']); - - /** @var $assets \Symfony\Component\Templating\Helper\CoreAssetsHelper */ - $assets = $this->packages; + if(!isset($config['variables'])) { + $config['variables'] = []; + } - // Get path to tinymce script for the jQuery version of the editor - if ($config['tinymce_jquery']) { - $config['jquery_script_url'] = $assets->getUrl( - $this->baseUrl.'bundles/stfalcontinymce/vendor/tinymce/tinymce.jquery.min.js', - $assetPackageName - ); + $this->baseUrl = (!isset($config['base_url']) ? null : $config['base_url']); + if($this->configManager->hasConfig('config')) { + foreach ($this->configManager->getConfig('config') as $key => $value) { + if( + isset($config[$key]) + && + ( + is_array($config[$key]) + && $value + || in_array(strtolower(gettype($config[$key])), ['string', 'integer', 'float', 'double', 'boolean']) + && $value !== null + ) + ) { + $config[$key] = is_array($config[$key]) ? array_merge($config[$key], $value) : $value; + } + } } // Get local button's image foreach ($config['tinymce_buttons'] as &$customButton) { - if ($customButton['image']) { - $customButton['image'] = $this->getAssetsUrl($customButton['image']); - } else { - unset($customButton['image']); - } - - if ($customButton['icon']) { + if (array_key_exists('icon', $customButton)) { $customButton['icon'] = $this->getAssetsUrl($customButton['icon']); } else { unset($customButton['icon']); } } - // Update URL to external plugins - foreach ($config['external_plugins'] as &$extPlugin) { - $extPlugin['url'] = $this->getAssetsUrl($extPlugin['url']); + if(isset($config['variables'], $config['variables']['list'], $config['variables']['title']) && $config['variables']) { + $config['variable_mapper'] = $config['variables']['list']; + if(!isset($config['variables']['tag'])) { + $config['variables']['tag'] = 'span'; + } + $config['setup'] = 'ed => { ' . + 'ed.ui.registry.addMenuButton(\'variables\', {' . + 'text: \'' . str_replace(['""', "''"], '', $config['variables']['title']) . '\',' . + 'classes: \'tinymce_erpbox_var\',' . + 'fetch: callback => {' . + 'let items = [];' . + 'for (const key in ed.settings.variable_mapper) {' . + 'items.push({' . + 'type: \'menuitem\',' . + 'text: ed.settings.variable_mapper[key],' . + 'onAction: () => {' . + 'ed.plugins.variable.addVariable(key);' . + '}' . + '});' . + '}' . + 'callback(items);' . + '}' . + '});' . + '}'; + $config['variable_tag'] = $config['variables']['tag']; + unset($config['variables']); + $config['valid_elements'] .= ',*[]'; + } + + // Asset package name + $assetPackageName = (!isset($config['asset_package_name']) ? null : $config['asset_package_name']); + unset($config['asset_package_name']); + $browsers = $this->getFileBrowsers($config); + + // overwrite config + if($config['config_name'] !== 'default' && isset($config['theme'][$config['config_name']])) { + $config = array_merge($config, $config['theme'][$config['config_name']]); } // If the language is not set in the config... if (!isset($config['language']) || empty($config['language'])) { // get it from the request - $config['language'] = $this->container->get('request_stack')->getCurrentRequest()->getLocale(); + $config['language'] = $this->container->get('request')->getLocale(); } $config['language'] = LocaleHelper::getLanguage($config['language']); @@ -139,61 +215,128 @@ public function tinymceInit($options = []): string $langDirectory = __DIR__.'/../../Resources/public/vendor/tinymce/langs/'; // A language code coming from the locale may not match an existing language file - if (!file_exists($langDirectory.$config['language'].'.js')) { + if (!file_exists($langDirectory . $config['language'].'.js')) { unset($config['language']); } - if (isset($config['language']) && $config['language']) { - // TinyMCE does not allow to set different languages to each instance - foreach ($config['theme'] as $themeName => $themeOptions) { - $config['theme'][$themeName]['language'] = $config['language']; - } - } + return $this->getService('twig')->render( + '@StfalconTinymce/Script/init.html.twig', + [ + 'tinymce_config' => $this->getTinyMCEConfiguration($config), + 'asset_package_name' => $assetPackageName, + 'base_url' => $this->baseUrl, + 'form' => $form, + 'file_browsers' => $browsers, + 'initializeFunction' => false, + ] + ); + } - if (isset($config['theme']) && $config['theme']) { - // Parse the content_css of each theme so we can use 'asset[path/to/asset]' in there - foreach ($config['theme'] as $themeName => $themeOptions) { - if (isset($themeOptions['content_css'])) { - // As there may be multiple CSS Files specified we need to parse each of them individually - $cssFiles = $themeOptions['content_css']; - if (!\is_array($themeOptions['content_css'])) { - $cssFiles = explode(',', $themeOptions['content_css']); - } - - foreach ($cssFiles as $idx => $file) { - $cssFiles[$idx] = $this->getAssetsUrl(trim($file)); // we trim to be sure we get the file without spaces. - } - - // After parsing we add them together again. - $config['theme'][$themeName]['content_css'] = implode(',', $cssFiles); - } - } + /** + * Initialize TinyMCE in simple mode + * @param $config + * @param null $initializeFunctionName + * @return string + */ + public function initSimple($config, $initializeFunctionName = null): string + { + $config = array_merge_recursive($this->getParameter('stfalcon_tinymce.config'), $config); + // Asset package name + $assetPackageName = (!isset($config['asset_package_name']) ? null : $config['asset_package_name']); + $browsers = $this->getFileBrowsers($config); + + return $this->getService('templating')->render('StfalconTinymceBundle:Script:init.html.twig', array( + 'tinymce_config' => $this->getTinyMCEConfiguration($config), + 'asset_package_name' => $assetPackageName, + 'base_url' => $this->baseUrl, + 'file_browsers' => $browsers, + 'initializeFunction' => $initializeFunctionName, + )); + } + + /** + * Prepare configuration in JSON + * @param $config + * @return string + */ + private function getTinyMCEConfiguration($config): string + { + unset($config['asset_package_name'], $config['init'], $config['theme']); + + if(isset($config['paste_data_images']) && is_string($config['paste_data_images'])) { + $config['paste_data_images'] = $config['paste_data_images'] === 'true'; } - $tinymceConfiguration = \preg_replace( - [ + return preg_replace( + array( '/"file_browser_callback":"([^"]+)"\s*/', '/"file_picker_callback":"([^"]+)"\s*/', '/"paste_preprocess":"([^"]+)"\s*/', - ], - [ + '/"setup":"([^"]+)"\s*/', + ), + array( 'file_browser_callback:$1', 'file_picker_callback:$1', - '"paste_preprocess":$1', - ], - \json_encode($config) + 'paste_preprocess:$1', + 'setup:$1', + ), + json_encode($config) ); + } - return $this->getService('twig')->render( - '@StfalconTinymce/Script/init.html.twig', - [ - 'tinymce_config' => $tinymceConfiguration, - 'include_jquery' => $config['include_jquery'], - 'tinymce_jquery' => $config['tinymce_jquery'], - 'asset_package_name' => $assetPackageName, - 'base_url' => $this->baseUrl, - ] - ); + /** + * Get all file browsers + * @param $config + * @return array + */ + public function getFileBrowsers(&$config): array + { + $browsers = []; + // set route of filebrowser + if(isset($config['file_browser']) && $config['file_browser'] && $type = $this->getFilePickerType($config['file_browser']['engine'])) { + $browsers[$type] = [ + 'type' => $type, + 'name' => $type . ' with TinyMCE', + ]; + if($config['file_browser']['route']) { + $route = $this->getRouter()->generate( + $config['file_browser']['engine'], + $config['file_browser']['route_parameters'] ?: [] + ); + } else { + $route = ''; + } + $config['file_browser_callback'] = 'getBrowser(\'' . $route . '\', \'' . str_replace( + '"', + '', + $config['file_browser']['name'] ?: $browsers[$type]['name'] + ) . '\')'; + unset($config['file_browser']); + } + + // set route of filepicker + if(isset($config['file_picker']) && $config['file_picker'] && $type = $this->getFilePickerType($config['file_picker']['engine'])) { + $browsers[$type] = [ + 'type' => $type, + 'name' => $type . ' with TinyMCE', + ]; + if($config['file_picker']['route']) { + $route = $this->getRouter()->generate( + $config['file_picker']['engine'], + $config['file_picker']['route_parameters'] ?: [] + ); + } else { + $route = ''; + } + $config['file_picker_callback'] = 'getBrowser(\'' . $route . '\', \'' . str_replace( + '"', + '', + $config['file_picker']['name'] ?: $browsers[$type]['name'] + ) . '\')'; + unset($config['file_picker']); + } + + return $browsers; } /** @@ -225,4 +368,26 @@ protected function getAssetsUrl(string $inputUrl): string return $inputUrl; } + + /** + * @param $filePicker + * @return string + */ + protected function getFilePickerType($filePicker) + { + switch ($filePicker) { + case 'elfinder': + return 'elfinder'; + default: + return ''; + } + } + + /** + * @return RouterInterface + */ + private function getRouter() + { + return $this->container->get('router'); + } } diff --git a/UPGRADE.md b/UPGRADE.md index 77f77d0a..dca22060 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -44,8 +44,6 @@ When upgrading TinyMCE bundle from 0.2.1 to 0.3.0, you need to do the following ```yaml // app/config/config.yml stfalcon_tinymce: - include_jquery: true - tinymce_jquery: true ... theme: # Simple theme: same as default theme @@ -79,8 +77,6 @@ When upgrading TinyMCE bundle from 0.2.1 to 0.3.0, you need to do the following ```yaml // app/config/config.yml stfalcon_tinymce: - include_jquery: true - tinymce_jquery: true ... theme: # Simple theme: same as default theme diff --git a/composer.json b/composer.json index 60cad226..eb1c1605 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "issues": "https://github.com/stfalcon/TinymceBundle/issues" }, "require": { - "php": "^7.1.3", + "php": "^7.4", "symfony/framework-bundle": "^3.4 || ^4.0" }, "autoload": { diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..82c100c7 --- /dev/null +++ b/composer.lock @@ -0,0 +1,1736 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "04f2626bc0a43d1cc42d6a2f4a6acb78", + "packages": [ + { + "name": "doctrine/annotations", + "version": "1.10.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^7.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2020-05-25T17:24:27+00:00" + }, + { + "name": "doctrine/cache", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "reference": "35a4a70cd94e09e2259dfae7488afc6b474ecbd3", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "doctrine/coding-standard": "^6.0", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.0", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "time": "2020-05-27T16:24:54+00:00" + }, + { + "name": "doctrine/collections", + "version": "1.6.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "fc0206348e17e530d09463fef07ba8968406cd6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/fc0206348e17e530d09463fef07ba8968406cd6d", + "reference": "fc0206348e17e530d09463fef07ba8968406cd6d", + "shasum": "" + }, + "require": { + "php": "^7.1.3 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan-shim": "^0.9.2", + "phpunit/phpunit": "^7.0", + "vimeo/psalm": "^3.8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "time": "2020-05-25T19:24:35+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "629572819973f13486371cb611386eb17851e85c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/629572819973f13486371cb611386eb17851e85c", + "reference": "629572819973f13486371cb611386eb17851e85c", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.9@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "time": "2019-11-10T09:48:07+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "doctrine/persistence", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/persistence.git", + "reference": "0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0", + "reference": "0af483f91bada1c9ded6c2cfd26ab7d5ab2094e0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "doctrine/event-manager": "^1.0", + "doctrine/reflection": "^1.2", + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.10@dev" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", + "homepage": "https://doctrine-project.org/projects/persistence.html", + "keywords": [ + "mapper", + "object", + "odm", + "orm", + "persistence" + ], + "time": "2020-03-21T15:13:52+00:00" + }, + { + "name": "doctrine/reflection", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/reflection.git", + "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/reflection/zipball/55e71912dfcd824b2fdd16f2d9afe15684cfce79", + "reference": "55e71912dfcd824b2fdd16f2d9afe15684cfce79", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.0", + "ext-tokenizer": "*", + "php": "^7.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^5.0", + "doctrine/common": "^2.10", + "phpstan/phpstan": "^0.11.0", + "phpstan/phpstan-phpunit": "^0.11.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Reflection project is a simple library used by the various Doctrine projects which adds some additional functionality on top of the reflection functionality that comes with PHP. It allows you to get the reflection information about classes, methods and properties statically.", + "homepage": "https://www.doctrine-project.org/projects/reflection.html", + "keywords": [ + "reflection", + "static" + ], + "time": "2020-03-27T11:06:43+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/link", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "time": "2016-10-28T16:06:13+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "symfony/contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "69e01844e38445cb15631cfe49949ecc08605576" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/69e01844e38445cb15631cfe49949ecc08605576", + "reference": "69e01844e38445cb15631cfe49949ecc08605576", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0" + }, + "replace": { + "symfony/cache-contracts": "self.version", + "symfony/deprecation-contracts": "self.version", + "symfony/event-dispatcher-contracts": "self.version", + "symfony/http-client-contracts": "self.version", + "symfony/service-contracts": "self.version", + "symfony/translation-contracts": "self.version" + }, + "require-dev": { + "symfony/polyfill-intl-idn": "^1.10" + }, + "suggest": { + "symfony/cache-implementation": "", + "symfony/event-dispatcher-implementation": "", + "symfony/http-client-implementation": "", + "symfony/service-implementation": "", + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "files": [ + "Deprecation/function.php" + ], + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2020-05-27T08:34:37+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e094b0770f7833fdf257e6ba4775be4e258230b2", + "reference": "e094b0770f7833fdf257e6ba4775be4e258230b2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "4ef3923e4a86e1b6ef72d42be59dbf7d33a685e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4ef3923e4a86e1b6ef72d42be59dbf7d33a685e3", + "reference": "4ef3923e4a86e1b6ef72d42be59dbf7d33a685e3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/intl": "~2.3|~3.0|~4.0|~5.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/1357b1d168eb7f68ad6a134838e46b0b159444a9", + "reference": "1357b1d168eb7f68ad6a134838e46b0b159444a9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:14:59+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c", + "reference": "fa79b11539418b02fc5e1897267673ba2c19419c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a760d8964ff79ab9bf057613a5808284ec852ccc", + "reference": "a760d8964ff79ab9bf057613a5808284ec852ccc", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/5e30b2799bc1ad68f7feb62b60a73743589438dd", + "reference": "5e30b2799bc1ad68f7feb62b60a73743589438dd", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "6dbf0269e8aeab8253a5059c51c1760fb4034e87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/6dbf0269e8aeab8253a5059c51c1760fb4034e87", + "reference": "6dbf0269e8aeab8253a5059c51c1760fb4034e87", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/symfony", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/symfony.git", + "reference": "b551cb4c4573ea36fd924c1394ed09c453272470" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/symfony/zipball/b551cb4c4573ea36fd924c1394ed09c453272470", + "reference": "b551cb4c4573ea36fd924c1394ed09c453272470", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^1.3", + "ext-xml": "*", + "php": ">=7.2.5", + "psr/cache": "~1.0", + "psr/container": "^1.0", + "psr/event-dispatcher": "^1.0", + "psr/link": "^1.0", + "psr/log": "~1.0", + "symfony/contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.11", + "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-uuid": "^1.15", + "twig/twig": "^2.10|^3.0" + }, + "conflict": { + "masterminds/html5": "<2.6", + "ocramius/proxy-manager": "<2.1", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0", + "phpunit/phpunit": "<5.4.3" + }, + "replace": { + "symfony/amazon-mailer": "self.version", + "symfony/asset": "self.version", + "symfony/browser-kit": "self.version", + "symfony/cache": "self.version", + "symfony/config": "self.version", + "symfony/console": "self.version", + "symfony/css-selector": "self.version", + "symfony/debug-bundle": "self.version", + "symfony/dependency-injection": "self.version", + "symfony/doctrine-bridge": "self.version", + "symfony/dom-crawler": "self.version", + "symfony/dotenv": "self.version", + "symfony/error-handler": "self.version", + "symfony/event-dispatcher": "self.version", + "symfony/expression-language": "self.version", + "symfony/filesystem": "self.version", + "symfony/finder": "self.version", + "symfony/form": "self.version", + "symfony/framework-bundle": "self.version", + "symfony/google-mailer": "self.version", + "symfony/http-client": "self.version", + "symfony/http-foundation": "self.version", + "symfony/http-kernel": "self.version", + "symfony/inflector": "self.version", + "symfony/intl": "self.version", + "symfony/ldap": "self.version", + "symfony/lock": "self.version", + "symfony/mailchimp-mailer": "self.version", + "symfony/mailer": "self.version", + "symfony/mailgun-mailer": "self.version", + "symfony/messenger": "self.version", + "symfony/mime": "self.version", + "symfony/monolog-bridge": "self.version", + "symfony/notifier": "self.version", + "symfony/options-resolver": "self.version", + "symfony/postmark-mailer": "self.version", + "symfony/process": "self.version", + "symfony/property-access": "self.version", + "symfony/property-info": "self.version", + "symfony/proxy-manager-bridge": "self.version", + "symfony/routing": "self.version", + "symfony/security-bundle": "self.version", + "symfony/security-core": "self.version", + "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", + "symfony/security-http": "self.version", + "symfony/sendgrid-mailer": "self.version", + "symfony/serializer": "self.version", + "symfony/stopwatch": "self.version", + "symfony/string": "self.version", + "symfony/templating": "self.version", + "symfony/translation": "self.version", + "symfony/twig-bridge": "self.version", + "symfony/twig-bundle": "self.version", + "symfony/uid": "self.version", + "symfony/validator": "self.version", + "symfony/var-dumper": "self.version", + "symfony/var-exporter": "self.version", + "symfony/web-link": "self.version", + "symfony/web-profiler-bundle": "self.version", + "symfony/workflow": "self.version", + "symfony/yaml": "self.version" + }, + "require-dev": { + "amphp/http-client": "^4.2", + "amphp/http-tunnel": "^1.0", + "async-aws/ses": "^1.0", + "async-aws/sqs": "^1.0", + "cache/integration-tests": "dev-master", + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.6", + "doctrine/collections": "~1.0", + "doctrine/data-fixtures": "1.0.*", + "doctrine/dbal": "~2.4", + "doctrine/doctrine-bundle": "^2.0", + "doctrine/orm": "~2.4,>=2.4.5", + "doctrine/reflection": "~1.0", + "egulias/email-validator": "~1.2,>=1.2.8|~2.0", + "guzzlehttp/promises": "^1.3.1", + "masterminds/html5": "^2.6", + "monolog/monolog": "^1.25.1|^2", + "nyholm/psr7": "^1.0", + "ocramius/proxy-manager": "^2.1", + "paragonie/sodium_compat": "^1.8", + "php-http/httplug": "^1.0|^2.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "predis/predis": "~1.1", + "psr/http-client": "^1.0", + "psr/simple-cache": "^1.0", + "symfony/phpunit-bridge": "^5.0.8", + "symfony/security-acl": "~2.8|~3.0", + "twig/cssinliner-extra": "^2.12", + "twig/inky-extra": "^2.12", + "twig/markdown-extra": "^2.12" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", + "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", + "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", + "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", + "Symfony\\Bundle\\": "src/Symfony/Bundle/", + "Symfony\\Component\\": "src/Symfony/Component/" + }, + "classmap": [ + "src/Symfony/Component/Intl/Resources/stubs" + ], + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "The Symfony PHP framework", + "homepage": "https://symfony.com", + "keywords": [ + "framework" + ], + "time": "2020-06-15T13:51:55+00:00" + }, + { + "name": "twig/twig", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "reference": "3b88ccd180a6b61ebb517aea3b1a8906762a1dc2", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "time": "2020-02-11T15:33:47+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [] +}