plugin.min.js 12.7 KB
Newer Older
Five-菜鸟级's avatar
init  
Five-菜鸟级 已提交
1 2 3 4 5 6 7 8 9
/*! 
* 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.7.0 (2021-02-10)
*  */
!function(r){var t={};function o(e){if(t[e])return t[e].exports;var n=t[e]={i:e,l:!1,exports:{}};return r[e].call(n.exports,n,n.exports,o),n.l=!0,n.exports}o.m=r,o.c=t,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="",o(o.s="./src/js/plugins/importcss/plugin.js")}({"./src/js/plugins/importcss/plugin.js":function(module,exports){eval("/**\n  * Copyright (c) Tiny Technologies, Inc. All rights reserved.\n  * Licensed under the LGPL or a commercial license.\n  * For LGPL see License.txt in the project root for license information.\n  * For commercial licenses see https://www.tiny.cloud/\n  *\n  * Version: 5.7.0 (2021-02-10)\n  */\n (function () {\n    'use strict';\n\n    var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n    var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n    var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n    var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n    var shouldMergeClasses = function (editor) {\n      return editor.getParam('importcss_merge_classes');\n    };\n    var shouldImportExclusive = function (editor) {\n      return editor.getParam('importcss_exclusive');\n    };\n    var getSelectorConverter = function (editor) {\n      return editor.getParam('importcss_selector_converter');\n    };\n    var getSelectorFilter = function (editor) {\n      return editor.getParam('importcss_selector_filter');\n    };\n    var getCssGroups = function (editor) {\n      return editor.getParam('importcss_groups');\n    };\n    var shouldAppend = function (editor) {\n      return editor.getParam('importcss_append');\n    };\n    var getFileFilter = function (editor) {\n      return editor.getParam('importcss_file_filter');\n    };\n    var getSkin = function (editor) {\n      var skin = editor.getParam('skin');\n      return skin !== false ? skin || 'oxide' : false;\n    };\n    var getSkinUrl = function (editor) {\n      return editor.getParam('skin_url');\n    };\n\n    var typeOf = function (x) {\n      var t = typeof x;\n      if (x === null) {\n        return 'null';\n      } else if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n        return 'array';\n      } else if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n        return 'string';\n      } else {\n        return t;\n      }\n    };\n    var isType = function (type) {\n      return function (value) {\n        return typeOf(value) === type;\n      };\n    };\n    var isArray = isType('array');\n\n    var nativePush = Array.prototype.push;\n    var map = function (xs, f) {\n      var len = xs.length;\n      var r = new Array(len);\n      for (var i = 0; i < len; i++) {\n        var x = xs[i];\n        r[i] = f(x, i);\n      }\n      return r;\n    };\n    var flatten = function (xs) {\n      var r = [];\n      for (var i = 0, len = xs.length; i < len; ++i) {\n        if (!isArray(xs[i])) {\n          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n        }\n        nativePush.apply(r, xs[i]);\n      }\n      return r;\n    };\n    var bind = function (xs, f) {\n      return flatten(map(xs, f));\n    };\n\n    var generate = function () {\n      var ungroupedOrder = [];\n      var groupOrder = [];\n      var groups = {};\n      var addItemToGroup = function (groupTitle, itemInfo) {\n        if (groups[groupTitle]) {\n          groups[groupTitle].push(itemInfo);\n        } else {\n          groupOrder.push(groupTitle);\n          groups[groupTitle] = [itemInfo];\n        }\n      };\n      var addItem = function (itemInfo) {\n        ungroupedOrder.push(itemInfo);\n      };\n      var toFormats = function () {\n        var groupItems = bind(groupOrder, function (g) {\n          var items = groups[g];\n          return items.length === 0 ? [] : [{\n              title: g,\n              items: items\n            }];\n        });\n        return groupItems.concat(ungroupedOrder);\n      };\n      return {\n        addItemToGroup: addItemToGroup,\n        addItem: addItem,\n        toFormats: toFormats\n      };\n    };\n\n    var removeCacheSuffix = function (url) {\n      var cacheSuffix = global$3.cacheSuffix;\n      if (typeof url === 'string') {\n        url = url.replace('?' + cacheSuffix, '').replace('&' + cacheSuffix, '');\n      }\n      return url;\n    };\n    var isSkinContentCss = function (editor, href) {\n      var skin = getSkin(editor);\n      if (skin) {\n        var skinUrlBase = getSkinUrl(editor);\n        var skinUrl = skinUrlBase ? editor.documentBaseURI.toAbsolute(skinUrlBase) : global$2.baseURL + '/skins/ui/' + skin;\n        var contentSkinUrlPart = global$2.baseURL + '/skins/content/';\n        return href === skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css' || href.indexOf(contentSkinUrlPart) !== -1;\n      }\n      return false;\n    };\n    var compileFilter = function (filter) {\n      if (typeof filter === 'string') {\n        return function (value) {\n          return value.indexOf(filter) !== -1;\n        };\n      } else if (filter instanceof RegExp) {\n        return function (value) {\n          return filter.test(value);\n        };\n      }\n      return filter;\n    };\n    var isCssImportRule = function (rule) {\n      return rule.styleSheet;\n    };\n    var isCssPageRule = function (rule) {\n      return rule.selectorText;\n    };\n    var getSelectors = function (editor, doc, fileFilter) {\n      var selectors = [], contentCSSUrls = {};\n      var append = function (styleSheet, imported) {\n        var href = styleSheet.href, rules;\n        href = removeCacheSuffix(href);\n        if (!href || !fileFilter(href, imported) || isSkinContentCss(editor, href)) {\n          return;\n        }\n        global$4.each(styleSheet.imports, function (styleSheet) {\n          append(styleSheet, true);\n        });\n        try {\n          rules = styleSheet.cssRules || styleSheet.rules;\n        } catch (e) {\n        }\n        global$4.each(rules, function (cssRule) {\n          if (isCssImportRule(cssRule)) {\n            append(cssRule.styleSheet, true);\n          } else if (isCssPageRule(cssRule)) {\n            global$4.each(cssRule.selectorText.split(','), function (selector) {\n              selectors.push(global$4.trim(selector));\n            });\n          }\n        });\n      };\n      global$4.each(editor.contentCSS, function (url) {\n        contentCSSUrls[url] = true;\n      });\n      if (!fileFilter) {\n        fileFilter = function (href, imported) {\n          return imported || contentCSSUrls[href];\n        };\n      }\n      try {\n        global$4.each(doc.styleSheets, function (styleSheet) {\n          append(styleSheet);\n        });\n      } catch (e) {\n      }\n      return selectors;\n    };\n    var defaultConvertSelectorToFormat = function (editor, selectorText) {\n      var format;\n      var selector = /^(?:([a-z0-9\\-_]+))?(\\.[a-z0-9_\\-\\.]+)$/i.exec(selectorText);\n      if (!selector) {\n        return;\n      }\n      var elementName = selector[1];\n      var classes = selector[2].substr(1).split('.').join(' ');\n      var inlineSelectorElements = global$4.makeMap('a,img');\n      if (selector[1]) {\n        format = { title: selectorText };\n        if (editor.schema.getTextBlockElements()[elementName]) {\n          format.block = elementName;\n        } else if (editor.schema.getBlockElements()[elementName] || inlineSelectorElements[elementName.toLowerCase()]) {\n          format.selector = elementName;\n        } else {\n          format.inline = elementName;\n        }\n      } else if (selector[2]) {\n        format = {\n          inline: 'span',\n          title: selectorText.substr(1),\n          classes: classes\n        };\n      }\n      if (shouldMergeClasses(editor) !== false) {\n        format.classes = classes;\n      } else {\n        format.attributes = { class: classes };\n      }\n      return format;\n    };\n    var getGroupsBySelector = function (groups, selector) {\n      return global$4.grep(groups, function (group) {\n        return !group.filter || group.filter(selector);\n      });\n    };\n    var compileUserDefinedGroups = function (groups) {\n      return global$4.map(groups, function (group) {\n        return global$4.extend({}, group, {\n          original: group,\n          selectors: {},\n          filter: compileFilter(group.filter),\n          item: {\n            text: group.title,\n            menu: []\n          }\n        });\n      });\n    };\n    var isExclusiveMode = function (editor, group) {\n      return group === null || shouldImportExclusive(editor) !== false;\n    };\n    var isUniqueSelector = function (editor, selector, group, globallyUniqueSelectors) {\n      return !(isExclusiveMode(editor, group) ? selector in globallyUniqueSelectors : selector in group.selectors);\n    };\n    var markUniqueSelector = function (editor, selector, group, globallyUniqueSelectors) {\n      if (isExclusiveMode(editor, group)) {\n        globallyUniqueSelectors[selector] = true;\n      } else {\n        group.selectors[selector] = true;\n      }\n    };\n    var convertSelectorToFormat = function (editor, plugin, selector, group) {\n      var selectorConverter;\n      if (group && group.selector_converter) {\n        selectorConverter = group.selector_converter;\n      } else if (getSelectorConverter(editor)) {\n        selectorConverter = getSelectorConverter(editor);\n      } else {\n        selectorConverter = function () {\n          return defaultConvertSelectorToFormat(editor, selector);\n        };\n      }\n      return selectorConverter.call(plugin, selector, group);\n    };\n    var setup = function (editor) {\n      editor.on('init', function (_e) {\n        var model = generate();\n        var globallyUniqueSelectors = {};\n        var selectorFilter = compileFilter(getSelectorFilter(editor));\n        var groups = compileUserDefinedGroups(getCssGroups(editor));\n        var processSelector = function (selector, group) {\n          if (isUniqueSelector(editor, selector, group, globallyUniqueSelectors)) {\n            markUniqueSelector(editor, selector, group, globallyUniqueSelectors);\n            var format = convertSelectorToFormat(editor, editor.plugins.importcss, selector, group);\n            if (format) {\n              var formatName = format.name || global$1.DOM.uniqueId();\n              editor.formatter.register(formatName, format);\n              return global$4.extend({}, {\n                title: format.title,\n                format: formatName\n              });\n            }\n          }\n          return null;\n        };\n        global$4.each(getSelectors(editor, editor.getDoc(), compileFilter(getFileFilter(editor))), function (selector) {\n          if (selector.indexOf('.mce-') === -1) {\n            if (!selectorFilter || selectorFilter(selector)) {\n              var selectorGroups = getGroupsBySelector(groups, selector);\n              if (selectorGroups.length > 0) {\n                global$4.each(selectorGroups, function (group) {\n                  var menuItem = processSelector(selector, group);\n                  if (menuItem) {\n                    model.addItemToGroup(group.title, menuItem);\n                  }\n                });\n              } else {\n                var menuItem = processSelector(selector, null);\n                if (menuItem) {\n                  model.addItem(menuItem);\n                }\n              }\n            }\n          }\n        });\n        var items = model.toFormats();\n        editor.fire('addStyleModifications', {\n          items: items,\n          replace: !shouldAppend(editor)\n        });\n      });\n    };\n\n    var get = function (editor) {\n      var convertSelectorToFormat = function (selectorText) {\n        return defaultConvertSelectorToFormat(editor, selectorText);\n      };\n      return { convertSelectorToFormat: convertSelectorToFormat };\n    };\n\n    function Plugin () {\n      global.add('importcss', function (editor) {\n        setup(editor);\n        return get(editor);\n      });\n    }\n\n    Plugin();\n\n}());\n\n\n//# sourceURL=webpack:///./src/js/plugins/importcss/plugin.js?")}});