UNPKG

790 kBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://wangEditor/webpack/universalModuleDefinition","webpack://wangEditor/webpack/bootstrap","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js","webpack://wangEditor/./src/utils/dom-core.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js","webpack://wangEditor/./node_modules/core-js-pure/internals/export.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/object/set-prototype-of.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js","webpack://wangEditor/./src/utils/util.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/global.js","webpack://wangEditor/./node_modules/core-js-pure/internals/well-known-symbol.js","webpack://wangEditor/./node_modules/core-js-pure/internals/path.js","webpack://wangEditor/./node_modules/core-js-pure/internals/define-well-known-symbol.js","webpack://wangEditor/./node_modules/core-js-pure/internals/fails.js","webpack://wangEditor/./node_modules/core-js-pure/internals/is-object.js","webpack://wangEditor/./node_modules/core-js-pure/internals/descriptors.js","webpack://wangEditor/./node_modules/core-js-pure/internals/has.js","webpack://wangEditor/./node_modules/core-js-pure/internals/create-non-enumerable-property.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-define-property.js","webpack://wangEditor/./node_modules/core-js-pure/internals/entry-virtual.js","webpack://wangEditor/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://wangEditor/./node_modules/css-loader/dist/runtime/api.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/trim.js","webpack://wangEditor/./src/menus/menu-constructors/DropListMenu.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/an-object.js","webpack://wangEditor/./src/menus/menu-constructors/BtnMenu.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/to-indexed-object.js","webpack://wangEditor/./node_modules/core-js-pure/internals/get-built-in.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-method-uses-to-length.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js","webpack://wangEditor/./src/menus/menu-constructors/Panel.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/a-function.js","webpack://wangEditor/./src/utils/const.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/find.js","webpack://wangEditor/./src/menus/menu-constructors/PanelMenu.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/create-property-descriptor.js","webpack://wangEditor/./node_modules/core-js-pure/internals/to-length.js","webpack://wangEditor/./node_modules/core-js-pure/internals/is-pure.js","webpack://wangEditor/./node_modules/core-js-pure/internals/to-object.js","webpack://wangEditor/./node_modules/core-js-pure/internals/iterate.js","webpack://wangEditor/./node_modules/core-js-pure/internals/iterators.js","webpack://wangEditor/./node_modules/core-js-pure/internals/set-to-string-tag.js","webpack://wangEditor/./node_modules/core-js-pure/internals/internal-state.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-iteration.js","webpack://wangEditor/./src/menus/menu-constructors/Tooltip.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/classof-raw.js","webpack://wangEditor/./node_modules/core-js-pure/internals/require-object-coercible.js","webpack://wangEditor/./node_modules/core-js-pure/internals/function-bind-context.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-create.js","webpack://wangEditor/./node_modules/core-js-pure/internals/hidden-keys.js","webpack://wangEditor/./node_modules/core-js-pure/internals/redefine.js","webpack://wangEditor/./node_modules/core-js-pure/modules/web.dom-collections.iterator.js","webpack://wangEditor/./node_modules/core-js-pure/internals/is-array.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-method-has-species-support.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-property-is-enumerable.js","webpack://wangEditor/./node_modules/core-js-pure/internals/to-primitive.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-keys.js","webpack://wangEditor/./node_modules/core-js-pure/internals/to-integer.js","webpack://wangEditor/./node_modules/core-js-pure/internals/shared-key.js","webpack://wangEditor/./node_modules/core-js-pure/internals/uid.js","webpack://wangEditor/./node_modules/core-js-pure/internals/classof.js","webpack://wangEditor/./node_modules/core-js-pure/internals/new-promise-capability.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.string.iterator.js","webpack://wangEditor/./node_modules/core-js-pure/internals/whitespaces.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","webpack://wangEditor/./node_modules/core-js-pure/internals/indexed-object.js","webpack://wangEditor/./node_modules/core-js-pure/internals/document-create-element.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-includes.js","webpack://wangEditor/./node_modules/core-js-pure/internals/to-absolute-index.js","webpack://wangEditor/./node_modules/core-js-pure/internals/enum-bug-keys.js","webpack://wangEditor/./node_modules/core-js-pure/internals/shared.js","webpack://wangEditor/./node_modules/core-js-pure/internals/shared-store.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-get-prototype-of.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-set-prototype-of.js","webpack://wangEditor/./node_modules/core-js-pure/internals/native-symbol.js","webpack://wangEditor/./node_modules/core-js-pure/internals/to-string-tag-support.js","webpack://wangEditor/./node_modules/core-js-pure/internals/an-instance.js","webpack://wangEditor/./node_modules/core-js-pure/internals/engine-user-agent.js","webpack://wangEditor/./node_modules/core-js-pure/internals/engine-is-node.js","webpack://wangEditor/./node_modules/core-js-pure/internals/perform.js","webpack://wangEditor/./node_modules/core-js-pure/internals/engine-v8-version.js","webpack://wangEditor/./node_modules/core-js-pure/internals/define-iterator.js","webpack://wangEditor/./node_modules/core-js-pure/internals/add-to-unscopables.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-species-create.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/bind.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/splice.js","webpack://wangEditor/./node_modules/core-js-pure/internals/create-property.js","webpack://wangEditor/./node_modules/core-js-pure/internals/string-trim.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/helpers/typeof.js","webpack://wangEditor/./node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","webpack://wangEditor/./src/menus/menu-constructors/Menu.ts","webpack://wangEditor/./src/menus/img/upload-img.ts","webpack://wangEditor/./src/utils/data-structure/cache.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/ie8-dom-define.js","webpack://wangEditor/./node_modules/core-js-pure/internals/is-forced.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-keys-internal.js","webpack://wangEditor/./node_modules/core-js-pure/internals/html.js","webpack://wangEditor/./node_modules/core-js-pure/internals/use-symbol-as-uid.js","webpack://wangEditor/./node_modules/core-js-pure/internals/native-promise-constructor.js","webpack://wangEditor/./node_modules/core-js-pure/internals/redefine-all.js","webpack://wangEditor/./node_modules/core-js-pure/internals/set-species.js","webpack://wangEditor/./node_modules/core-js-pure/internals/inspect-source.js","webpack://wangEditor/./node_modules/core-js-pure/internals/species-constructor.js","webpack://wangEditor/./node_modules/core-js-pure/internals/task.js","webpack://wangEditor/./node_modules/core-js-pure/internals/engine-is-ios.js","webpack://wangEditor/./node_modules/core-js-pure/internals/promise-resolve.js","webpack://wangEditor/./node_modules/core-js-pure/internals/iterators-core.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-method-is-strict.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/includes.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/map.js","webpack://wangEditor/./node_modules/core-js-pure/internals/collection.js","webpack://wangEditor/./node_modules/core-js-pure/internals/internal-metadata.js","webpack://wangEditor/./node_modules/core-js-pure/internals/collection-strong.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.iterator.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-get-own-property-names.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-get-own-property-symbols.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js","webpack://wangEditor/./src/config/style.ts","webpack://wangEditor/./src/text/paste/paste-event.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/set.js","webpack://wangEditor/./src/menus/menu-constructors/DropList.ts","webpack://wangEditor/./src/menus/link/is-active.ts","webpack://wangEditor/./src/menus/code/is-active.ts","webpack://wangEditor/./src/wangEditor.ts","webpack://wangEditor/./node_modules/core-js-pure/stable/object/define-property.js","webpack://wangEditor/./node_modules/core-js-pure/es/object/define-property.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.object.define-property.js","webpack://wangEditor/(webpack)/buildin/global.js","webpack://wangEditor/./node_modules/core-js-pure/stable/object/create.js","webpack://wangEditor/./node_modules/core-js-pure/es/object/create.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.object.create.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-define-properties.js","webpack://wangEditor/./node_modules/core-js-pure/internals/set-global.js","webpack://wangEditor/./src/assets/style/common.less?4672","webpack://wangEditor/./src/assets/style/common.less","webpack://wangEditor/./src/assets/style/icon.less?c1d5","webpack://wangEditor/./src/assets/style/icon.less","webpack://wangEditor/./node_modules/css-loader/dist/runtime/getUrl.js","webpack://wangEditor/./src/assets/font/w-e-icon.woff","webpack://wangEditor/./src/assets/style/menus.less?3c63","webpack://wangEditor/./src/assets/style/menus.less","webpack://wangEditor/./src/assets/style/text.less?71cc","webpack://wangEditor/./src/assets/style/text.less","webpack://wangEditor/./src/assets/style/panel.less?63fd","webpack://wangEditor/./src/assets/style/panel.less","webpack://wangEditor/./src/assets/style/droplist.less?4262","webpack://wangEditor/./src/assets/style/droplist.less","webpack://wangEditor/./src/utils/polyfill.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/promise.js","webpack://wangEditor/./node_modules/core-js-pure/stable/promise/index.js","webpack://wangEditor/./node_modules/core-js-pure/es/promise/index.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.aggregate-error.js","webpack://wangEditor/./node_modules/core-js-pure/internals/correct-prototype-getter.js","webpack://wangEditor/./node_modules/core-js-pure/internals/a-possible-prototype.js","webpack://wangEditor/./node_modules/core-js-pure/internals/is-array-iterator-method.js","webpack://wangEditor/./node_modules/core-js-pure/internals/get-iterator-method.js","webpack://wangEditor/./node_modules/core-js-pure/internals/iterator-close.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.promise.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-to-string.js","webpack://wangEditor/./node_modules/core-js-pure/internals/check-correctness-of-iteration.js","webpack://wangEditor/./node_modules/core-js-pure/internals/microtask.js","webpack://wangEditor/./node_modules/core-js-pure/internals/host-report-errors.js","webpack://wangEditor/./node_modules/core-js-pure/internals/native-weak-map.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.promise.all-settled.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.promise.any.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.promise.finally.js","webpack://wangEditor/./node_modules/core-js-pure/internals/string-multibyte.js","webpack://wangEditor/./node_modules/core-js-pure/internals/create-iterator-constructor.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.iterator.js","webpack://wangEditor/./node_modules/core-js-pure/internals/dom-iterables.js","webpack://wangEditor/./src/editor/index.ts","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/for-each.js","webpack://wangEditor/./node_modules/core-js-pure/stable/array/virtual/for-each.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/for-each.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.for-each.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-for-each.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/bind.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/bind.js","webpack://wangEditor/./node_modules/core-js-pure/es/function/virtual/bind.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.function.bind.js","webpack://wangEditor/./node_modules/core-js-pure/internals/function-bind.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/includes.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/includes.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/includes.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.includes.js","webpack://wangEditor/./node_modules/core-js-pure/es/string/virtual/includes.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.string.includes.js","webpack://wangEditor/./node_modules/core-js-pure/internals/not-a-regexp.js","webpack://wangEditor/./node_modules/core-js-pure/internals/is-regexp.js","webpack://wangEditor/./node_modules/core-js-pure/internals/correct-is-regexp-logic.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/filter.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/filter.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/filter.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.filter.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/splice.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/splice.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/splice.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.splice.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/index-of.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/index-of.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/index-of.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.index-of.js","webpack://wangEditor/./node_modules/core-js-pure/stable/map/index.js","webpack://wangEditor/./node_modules/core-js-pure/es/map/index.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.map.js","webpack://wangEditor/./node_modules/core-js-pure/internals/freezing.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/trim.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/trim.js","webpack://wangEditor/./node_modules/core-js-pure/es/string/virtual/trim.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.string.trim.js","webpack://wangEditor/./node_modules/core-js-pure/internals/string-trim-forced.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/map.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/map.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/map.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.map.js","webpack://wangEditor/./node_modules/core-js-pure/stable/array/is-array.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/is-array.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.is-array.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js/symbol/iterator.js","webpack://wangEditor/./node_modules/core-js-pure/features/symbol/iterator.js","webpack://wangEditor/./node_modules/core-js-pure/es/symbol/iterator.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js/symbol.js","webpack://wangEditor/./node_modules/core-js-pure/features/symbol/index.js","webpack://wangEditor/./node_modules/core-js-pure/es/symbol/index.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.concat.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-get-own-property-names-external.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.async-iterator.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.has-instance.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.match.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.match-all.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.replace.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.search.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.species.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.split.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.to-primitive.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.symbol.unscopables.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.json.to-string-tag.js","webpack://wangEditor/./node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","webpack://wangEditor/./node_modules/core-js-pure/modules/esnext.symbol.dispose.js","webpack://wangEditor/./node_modules/core-js-pure/modules/esnext.symbol.observable.js","webpack://wangEditor/./node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","webpack://wangEditor/./node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","webpack://wangEditor/./node_modules/core-js-pure/stable/set-timeout.js","webpack://wangEditor/./node_modules/core-js-pure/modules/web.timers.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/slice.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/slice.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/slice.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.slice.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js","webpack://wangEditor/./node_modules/core-js-pure/stable/parse-int.js","webpack://wangEditor/./node_modules/core-js-pure/es/parse-int.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.parse-int.js","webpack://wangEditor/./node_modules/core-js-pure/internals/number-parse-int.js","webpack://wangEditor/./src/config/index.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/object/assign.js","webpack://wangEditor/./node_modules/core-js-pure/stable/object/assign.js","webpack://wangEditor/./node_modules/core-js-pure/es/object/assign.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.object.assign.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-assign.js","webpack://wangEditor/./src/config/menus.ts","webpack://wangEditor/./src/config/events.ts","webpack://wangEditor/./src/config/paste.ts","webpack://wangEditor/./src/config/cmd.ts","webpack://wangEditor/./src/config/image.ts","webpack://wangEditor/./src/config/text.ts","webpack://wangEditor/./src/config/lang.ts","webpack://wangEditor/./src/config/history.ts","webpack://wangEditor/./src/editor/selection.ts","webpack://wangEditor/./src/editor/selection-range-top-nodes/index.ts","webpack://wangEditor/./src/editor/command.ts","webpack://wangEditor/./src/text/index.ts","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/find.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/find.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/find.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.find.js","webpack://wangEditor/./src/text/event-hooks/index.ts","webpack://wangEditor/./src/text/event-hooks/enter-to-create-p.ts","webpack://wangEditor/./src/text/event-hooks/del-to-keep-p.ts","webpack://wangEditor/./src/text/event-hooks/tab-to-space.ts","webpack://wangEditor/./src/text/event-hooks/paste-text-html.ts","webpack://wangEditor/./src/text/paste/parse-html.ts","webpack://wangEditor/./src/text/paste/tags.ts","webpack://wangEditor/./node_modules/core-js-pure/stable/set/index.js","webpack://wangEditor/./node_modules/core-js-pure/es/set/index.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.set.js","webpack://wangEditor/./src/lib/simplehtmlparser.js","webpack://wangEditor/./src/text/event-hooks/img-click-active.ts","webpack://wangEditor/./src/text/getChildrenJSON.ts","webpack://wangEditor/./src/text/getHtmlByNodeList.ts","webpack://wangEditor/./src/menus/index.ts","webpack://wangEditor/./src/menus/menu-list.ts","webpack://wangEditor/./src/menus/bold/index.ts","webpack://wangEditor/./node_modules/core-js-pure/stable/object/set-prototype-of.js","webpack://wangEditor/./node_modules/core-js-pure/es/object/set-prototype-of.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.object.set-prototype-of.js","webpack://wangEditor/./src/menus/head/index.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/json/stringify.js","webpack://wangEditor/./node_modules/core-js-pure/stable/json/stringify.js","webpack://wangEditor/./node_modules/core-js-pure/es/json/stringify.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.json.stringify.js","webpack://wangEditor/./src/menus/link/index.ts","webpack://wangEditor/./src/menus/link/create-panel-conf.ts","webpack://wangEditor/./src/menus/link/bind-event/index.ts","webpack://wangEditor/./src/menus/link/bind-event/tooltip-event.ts","webpack://wangEditor/./src/menus/italic/index.ts","webpack://wangEditor/./src/menus/underline/index.ts","webpack://wangEditor/./src/menus/strike-through/index.ts","webpack://wangEditor/./src/menus/font-style/index.ts","webpack://wangEditor/./src/menus/font-style/FontStyleList.ts","webpack://wangEditor/./src/menus/font-size/index.ts","webpack://wangEditor/./src/menus/font-size/FontSizeList.ts","webpack://wangEditor/./src/menus/justify/index.ts","webpack://wangEditor/./src/menus/quote/index.ts","webpack://wangEditor/./src/menus/quote/bind-event/index.ts","webpack://wangEditor/./src/menus/quote/create-quote-node.ts","webpack://wangEditor/./src/menus/back-color/index.ts","webpack://wangEditor/./src/menus/font-color/index.ts","webpack://wangEditor/./src/menus/video/index.ts","webpack://wangEditor/./src/menus/video/create-panel-conf.ts","webpack://wangEditor/./src/menus/img/index.ts","webpack://wangEditor/./src/menus/img/create-panel-conf.ts","webpack://wangEditor/./src/editor/upload/upload-core.ts","webpack://wangEditor/./src/editor/upload/progress.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/date/now.js","webpack://wangEditor/./node_modules/core-js-pure/stable/date/now.js","webpack://wangEditor/./node_modules/core-js-pure/es/date/now.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.date.now.js","webpack://wangEditor/./src/menus/img/bind-event/index.ts","webpack://wangEditor/./src/menus/img/bind-event/paste-img.ts","webpack://wangEditor/./src/menus/img/bind-event/drop-img.ts","webpack://wangEditor/./src/menus/img/bind-event/drag-size.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/parse-float.js","webpack://wangEditor/./node_modules/core-js-pure/stable/parse-float.js","webpack://wangEditor/./node_modules/core-js-pure/es/parse-float.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.parse-float.js","webpack://wangEditor/./node_modules/core-js-pure/internals/number-parse-float.js","webpack://wangEditor/./src/assets/style/drag-size.less?198e","webpack://wangEditor/./src/assets/style/drag-size.less","webpack://wangEditor/./src/menus/img/bind-event/tooltip-event.ts","webpack://wangEditor/./src/menus/indent/index.ts","webpack://wangEditor/./src/menus/indent/operate-element.ts","webpack://wangEditor/./src/menus/indent/increase-indent-style.ts","webpack://wangEditor/./src/menus/indent/decrease-indent-style.ts","webpack://wangEditor/./src/menus/emoticon/index.ts","webpack://wangEditor/./src/menus/emoticon/create-panel-conf.ts","webpack://wangEditor/./src/menus/list/index.ts","webpack://wangEditor/./src/menus/lineHeight/index.ts","webpack://wangEditor/./src/menus/lineHeight/lineHeightList.ts","webpack://wangEditor/./src/menus/undo/index.ts","webpack://wangEditor/./src/menus/redo/index.ts","webpack://wangEditor/./src/menus/table/index.ts","webpack://wangEditor/./src/menus/table/create-panel-conf.ts","webpack://wangEditor/./src/assets/style/create-panel-conf.less?d818","webpack://wangEditor/./src/assets/style/create-panel-conf.less","webpack://wangEditor/./src/menus/table/create-table.ts","webpack://wangEditor/./src/menus/table/bind-event/index.ts","webpack://wangEditor/./src/menus/table/bind-event/tooltip-event.ts","webpack://wangEditor/./src/menus/table/bind-event/event/operating-event.ts","webpack://wangEditor/./src/menus/table/bind-event/event/getNode.ts","webpack://wangEditor/./src/menus/code/index.ts","webpack://wangEditor/./src/menus/code/create-panel-conf.ts","webpack://wangEditor/./src/menus/code/bind-event/index.ts","webpack://wangEditor/./src/menus/code/bind-event/tooltip-event.ts","webpack://wangEditor/./src/menus/split-line/index.ts","webpack://wangEditor/./src/menus/split-line/bind-event/index.ts","webpack://wangEditor/./src/menus/split-line/bind-event/tooltip-event.ts","webpack://wangEditor/./src/editor/init-fns/init-dom.ts","webpack://wangEditor/./src/editor/init-fns/init-selection.ts","webpack://wangEditor/./src/editor/init-fns/bind-event.ts","webpack://wangEditor/./src/editor/init-fns/i18next-init.ts","webpack://wangEditor/./src/editor/init-fns/set-full-screen.ts","webpack://wangEditor/./src/assets/style/full-screen.less?b9eb","webpack://wangEditor/./src/assets/style/full-screen.less","webpack://wangEditor/./src/editor/init-fns/scroll-to-head.ts","webpack://wangEditor/./src/editor/z-index/index.ts","webpack://wangEditor/./src/editor/change/index.ts","webpack://wangEditor/./src/utils/observer/mutation.ts","webpack://wangEditor/./src/editor/history/index.ts","webpack://wangEditor/./src/editor/history/data/content.ts","webpack://wangEditor/./src/editor/history/data/node/index.ts","webpack://wangEditor/./src/utils/data-structure/stack.ts","webpack://wangEditor/./src/editor/history/data/node/compile.ts","webpack://wangEditor/./src/editor/history/data/node/decompilation.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/object/entries.js","webpack://wangEditor/./node_modules/core-js-pure/stable/object/entries.js","webpack://wangEditor/./node_modules/core-js-pure/es/object/entries.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.object.entries.js","webpack://wangEditor/./node_modules/core-js-pure/internals/object-to-array.js","webpack://wangEditor/./src/editor/history/data/html/index.ts","webpack://wangEditor/./src/utils/data-structure/chain.ts","webpack://wangEditor/./src/editor/history/data/scroll/index.ts","webpack://wangEditor/./src/editor/history/data/range/index.ts","webpack://wangEditor/./src/editor/disable/index.ts","webpack://wangEditor/./src/assets/style/disable.less?38a7","webpack://wangEditor/./src/assets/style/disable.less"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","obj","AGENT_EVENTS","_styleArrTrim","style","styleArr","resultArr","split","item","arr","length","push","selector","this","elems","dataSource","DomElement","selectorResult","nodeType","Node","HTMLCollection","NodeList","_isDOMList","toArray","Array","tmpSelector","replace","html","div","document","createElement","innerHTML","children","_createElemByHTML","querySelectorAll","_querySelectorAll","id","forEach","fn","elem","clone","deep","cloneList","cloneNode","$","index","first","last","on","type","agentFn","e","target","matches","addEventListener","off","idx","removeEventListener","attr","val","getAttribute","setAttribute","removeAttr","removeAttribute","addClass","className","join","removeClass","hasClass","css","currentStyle","getBoundingClientRect","show","hide","childNodes","replaceChildAll","$children","parent","getNode","hasChildNodes","firstChild","removeChild","append","child","appendChild","remove","parentElement","isContain","$child","contains","getSizeData","getNodeName","nodeName","getClientHeight","clientHeight","find","text","focus","prev","previousElementSibling","next","nextElementSibling","parentUntil","curElem","equal","$elem","HTMLElement","insertBefore","referenceNode","parentNode","insertAfter","anchorNode","nextSibling","data","set","getNodeTop","editor","$parent","$textElem","getOffsetData","$node","top","offsetTop","left","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","scrollTop","scrollTo","arg","global","getOwnPropertyDescriptor","f","isForced","path","createNonEnumerableProperty","has","wrapConstructor","NativeConstructor","Wrapper","a","b","arguments","apply","options","source","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","descriptor","TARGET","GLOBAL","STATIC","stat","PROTO","proto","nativeSource","targetPrototype","forced","noTargetGet","wrap","Function","sham","real","_ua","navigator","userAgent","math","match","isOldEdge","isFirefox","test","isIE","isWebkit","UA","NavUA","prefix","Math","random","toString","fakeArr","interval","flag","args","delay","lastFn","clearTimeout","setTimeout","deepClone","hex","result","exec","colors","it","check","globalThis","self","shared","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wrappedWellKnownSymbolModule","NAME","error","fails","DESCRIPTORS","definePropertyModule","createPropertyDescriptor","IE8_DOM_DEFINE","anObject","toPrimitive","nativeDefineProperty","O","P","Attributes","TypeError","CONSTRUCTOR","memo","isOldIE","Boolean","all","atob","getTarget","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","stylesInDom","getIndexByIdentifier","identifier","modulesToDom","list","idCountMap","identifiers","base","count","concat","media","sourceMap","references","updater","addStyle","insertStyleElement","attributes","nonce","keys","insert","Error","textStore","replaceText","replacement","filter","applyToSingletonTag","styleSheet","cssText","cssNode","createTextNode","applyToTag","btoa","unescape","encodeURIComponent","JSON","stringify","singleton","singletonCounter","update","styleIndex","removeStyleElement","newObj","lastIdentifiers","newList","newLastIdentifiers","_i","_index","splice","useSourceMap","map","content","cssMapping","sourceMapping","base64","sourceURLs","sources","sourceRoot","cssWithMappingToString","mediaQuery","dedupe","alreadyImportedModules","conf","title","i18next","config","lang","dropList","selection","getRange","zIndex","txt","eventHooks","dropListMenuHoverEvents","showTimeoutId","hideTimeoutId","DropListMenu","isObject","String","BtnMenu","IndexedObject","requireObjectCoercible","aFunction","variable","undefined","namespace","method","cache","thrower","METHOD_NAME","ACCESSORS","argument0","argument1","menu","$container","clickEvents","Panel","hideCurAllPanels","toolbarClickEvents","createdMenus","rect","$toolbarElem","menuRect","$closeBtn","$tabTitleContainer","$tabContentContainer","tabs","tabTitleArr","tabContentArr","tab","tabIndex","tpl","$title","$content","stopPropagation","events","event","EMPTY_FN","$inputs","setPanel","add","size","panel","imgRegex","urlRegex","PanelMenu","bitmap","configurable","writable","toInteger","min","argument","isArrayIteratorMethod","toLength","getIteratorMethod","iteratorClose","Result","stopped","iterable","unboundFunction","iterator","iterFn","step","that","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","done","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","wellKnownSymbol","TAG","SET_METHOD","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","store","state","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","TYPE","toObject","arraySpeciesCreate","createMethod","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","$this","callbackfn","specificCreate","boundFunction","some","every","findIndex","filterOut","$targetElem","_show","_isInsertTextContainer","getPositionData","pageScrollTop","documentElement","targetElemRect","textElemRect","targetOffset","targetParentElem","$textContainerElem","targetParentElemHeight","absoluteTop","tooltipHeight","bottom","appendMenus","$wrapper","preventDefault","onClick","Tooltip","slice","activeXDocument","defineProperties","enumBugKeys","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","write","close","temp","parentWindow","NullProtoObjectViaActiveX","display","src","contentWindow","open","F","Properties","DOMIterables","classof","Iterators","COLLECTION_NAME","Collection","CollectionPrototype","isArray","V8_VERSION","SPECIES","array","constructor","foo","nativePropertyIsEnumerable","propertyIsEnumerable","NASHORN_BUG","1","V","input","PREFERRED_STRING","valueOf","internalObjectKeys","ceil","floor","isNaN","postfix","classofRaw","CORRECT_ARGUMENTS","tag","tryGet","callee","PromiseCapability","C","resolve","reject","promise","$$resolve","$$reject","charAt","InternalStateModule","defineIterator","setInternalState","getInternalState","iterated","string","point","propertyIsEnumerableModule","toIndexedObject","nativeGetOwnPropertyDescriptor","EXISTS","toAbsoluteIndex","IS_INCLUDES","el","fromIndex","includes","indexOf","max","integer","IS_PURE","version","copyright","setGlobal","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","getPrototypeOf","aPossiblePrototype","setPrototypeOf","setter","CORRECT_SETTER","__proto__","getOwnPropertySymbols","Constructor","getBuiltIn","process","versions","v8","createIteratorConstructor","setToStringTag","redefine","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","ITERATOR","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","originalArray","propertyKey","whitespace","ltrim","RegExp","rtrim","start","end","trim","_Symbol$iterator","_Symbol","_typeof","_active","menuClickEvents","clickHandler","active","unActive","Menu","insertImg","cmd","linkImgCallback","img","onload","onerror","customAlert","onabort","uploadImg","files","uploadImgServer","uploadImgShowBase64","maxSize","uploadImgMaxSize","maxSizeM","maxLength","uploadImgMaxLength","uploadFileName","uploadImgParams","uploadImgParamsWithUrl","uploadImgHeaders","hooks","uploadImgHooks","timeout","uploadImgTimeout","withCredentials","customUploadImg","resultFiles","errInfos","arrForEach","file","formData","FormData","uploadImgServerArr","uploadImgServerHash","xhr","headers","beforeSend","before","onTimeout","onProgress","percent","progressBar","lengthComputable","loaded","total","onError","status","onFail","resultStr","fail","onSuccess","customInsert","errno","link","success","_this","reader","FileReader","readAsDataURL","UploadImg","isRe","CeilStack","revokeData","resetMaxSize","resetMax","save","clear","instack","revoke","outstack","restore","feature","detection","normalize","POLYFILL","NATIVE","toLowerCase","names","Promise","unsafe","CONSTRUCTOR_NAME","functionToString","inspectSource","defaultConstructor","S","defer","channel","port","IS_IOS","IS_NODE","location","setImmediate","clearImmediate","MessageChannel","Dispatch","counter","queue","run","runner","listener","post","postMessage","protocol","host","nextTick","now","port2","port1","onmessage","importScripts","newPromiseCapability","x","promiseCapability","PrototypeOfArrayIteratorPrototype","arrayIterator","InternalMetadataModule","iterate","anInstance","internalStateGetterFor","wrapper","common","IS_WEAK","ADDER","NativePrototype","exported","collection","IS_ADDER","getConstructor","REQUIRED","setStrong","FREEZING","METADATA","isExtensible","setMetadata","objectID","weakData","meta","fastKey","getWeakData","onFreeze","redefineAll","setSpecies","previous","entry","getEntry","removed","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","kind","defineWellKnownSymbol","getOwnPropertyNames","getPasteText","clipboardData","pasteText","getData","replaceHtmlSymbol","filterStyle","ignoreImg","pasteHtml","items","getAsFile","$list","$li","rendered","$menuELem","menuHeight","DropList","$selectionELem","getSelectionContainerElem","ex","desc","g","D","objectKeys","api","default","locals","___CSS_LOADER_API_IMPORT___","___CSS_LOADER_GET_URL_IMPORT___","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_REPLACEMENT_0___","url","hash","needQuotes","Element","ownerDocument","$AggregateError","errors","message","errorsArray","AggregateError","ArrayPrototype","returnMethod","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","NativePromise","checkCorrectnessOfIteration","speciesConstructor","task","microtask","promiseResolve","hostReportErrors","newPromiseCapabilityModule","perform","PROMISE","getInternalPromiseState","PromiseConstructor","$fetch","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","FakePromise","then","INCORRECT_ITERATION","isThenable","notify","isReject","notified","chain","reactions","ok","exited","reaction","handler","rejection","onHandleUnhandled","enter","exit","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","fetch","capability","$promiseResolve","remaining","alreadyCalled","race","SAFE_CLOSING","called","iteratorWithReturn","from","SKIP_CLOSING","ITERATION_SUPPORT","flush","toggle","node","macrotask","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","observe","characterData","console","allSettled","any","alreadyResolved","alreadyRejected","onFinally","isFunction","CONVERT_TO_STRING","pos","second","position","charCodeAt","codeAt","addToUnscopables","Arguments","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","EDITOR_ID","toolbarSelector","textSelector","beforeDestroyHooks","toolbarElemId","textElemId","isFocus","isComposing","isCompatibleMode","menus","change","history","disable","enable","initSelection","newLine","init","compatibleMode","onchangeTimeout","beforeDestroy","destroy","fullScreen","setFullScreen","unFullScreen","setUnFullScreen","scrollToHead","Editor","own","entryVirtual","$forEach","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","FunctionPrototype","factories","construct","argsLength","partArgs","arrayIncludes","stringIncludes","StringPrototype","$includes","notARegExp","correctIsRegExpLogic","searchString","isRegExp","MATCH","regexp","error1","error2","$filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","createProperty","0","deleteCount","insertCount","actualDeleteCount","A","k","to","len","actualStart","argumentsLength","$indexOf","nativeIndexOf","NEGATIVE_ZERO","searchElement","Map","collectionStrong","preventExtensions","$trim","forcedStringTrimMethod","whitespaces","$map","WrappedWellKnownSymbolModule","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","E","nativeObjectCreate","getOwnPropertyNamesModule","getOwnPropertyNamesExternal","getOwnPropertySymbolsModule","getOwnPropertyDescriptorModule","HIDDEN","TO_PRIMITIVE","$Symbol","$stringify","nativeGetOwnPropertyNames","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","description","symbol","isSymbol","$defineProperty","$defineProperties","properties","$getOwnPropertySymbols","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","replacer","space","$replacer","windowNames","getWindowNames","scheduler","boundArgs","setInterval","nativeSlice","fin","parseInt","parseIntImplementation","$parseInt","radix","defaultConfig","linkCheck","linkImgCheck","assign","nativeAssign","B","chr","T","j","SINA_PATH1","SINA_PATH2","fontNames","fontSizes","small","normal","large","languageType","languageTab","emotions","alt","lineHeights","undoLimit","indentation","onchange","onfocus","onblur","onCatalogChange","alertInfo","alertType","debugInfo","alert","pasteFilterStyle","pasteIgnoreImg","pasteTextHandle","styleWithCSS","showLinkImg","uploadImgAccept","placeholder","zIndexFullScreen","showFullScreen","languages","wangEditor","重置","插入","默认","创建","修改","如","请输入正文","dropListMenu","设置标题","背景颜色","文字颜色","设置字号","设置字体","设置缩进","对齐方式","设置行高","序列","正文","indent","增加缩进","减少缩进","justify","靠左","居中","靠右","两端","无序列表","有序列表","panelMenus","emoticon","新浪","emoji","手势","image","图片链接","上传图片","网络图片","链接","链接文字","取消链接","查看链接","video","插入视频","table","行","列","的","表格","添加行","删除行","添加列","删除列","设置表头","取消表头","插入表格","删除表格","code","删除代码","修改代码","插入代码","validate","张图片","大于","不是图片","返回结果","上传图片超时","上传图片错误","上传图片失败","插入图片错误","一次最多上传","下载链接失败","图片验证未通过","服务器返回状态","上传图片返回结果错误","请替换为支持的图片类型","您插入的网络图片无法识别","您刚才插入的图片链接未通过编辑器校验","en","historyMaxSize","_currentRange","saveRange","_range","getSelection","rangeCount","range","getRangeAt","$containerElem","$last","createRangeByElem","restoreSelection","collapseRange","toStart","collapse","getSelectionText","commonAncestorContainer","getSelectionStartElem","startContainer","getSelectionEndElem","endContainer","isSelectionEmpty","startOffset","endOffset","removeAllRanges","addRange","createEmptyRange","setEnd","isContent","createRange","selectNodeContents","selectNode","getSelectionRangeTopNodes","getSelectionNodes","moveCursor","setStart","SelectionAndRange","$nodeList","$startElem","$endElem","recordSelectionNodes","addNodeList","isEndElem","getNextSibling","SelectionRangeTopNodes","execCommand","insertHTML","insertElem","changeActive","queryCommandSupported","insertNode","deleteContents","queryCommandValue","queryCommandState","Command","changeEvents","dropEvents","keyupEvents","tabUpEvents","tabDownEvents","enterUpEvents","enterDownEvents","deleteUpEvents","deleteDownEvents","pasteEvents","linkClickEvents","codeClickEvents","textScrollEvents","imgClickEvents","imgDragBarMouseDownEvents","tableClickEvents","splitLineEvents","_saveRange","_bindEventHooks","togglePlaceholder","$placeholder","setJSON","nodeList","getJSON","keyCode","ctrlKey","metaKey","shiftKey","throttle","$link","$target","$img","$code","$splitLine","splitLineClickEvents","$dom","Text","$find","SKIPS_HOLES","insertEmptyP","$selectionElem","$p","$parentElem","txtHtml","selectionNodeName","parentNodeName","formatHtml","getPasteHtml","$topElem","topNodeName","isIgnoreTag","IGNORE_TAGS","CUR_TAG","parse","startElement","attrs","EMPTY_TAGS","markTagStart","necessaryAttrKeys","NECESSARY_ATTRS","attrsForTag","attrStrArr","genStartHtml","characters","str","endElement","genEndHtml","comment","regForMatch","filterEmptySpan","TOP_LEVEL_TAGS","Set","SimpleHtmlParser","startTagRe","endTagRe","attrRe","oHandler","contentHandler","lm","rc","treatAsChars","oThis","substring","leftContext","lastMatch","rightContext","parseEndTag","parseStartTag","sTag","sTagName","sRest","parseAttributes","a0","a1","a2","a3","a4","a5","a6","parseAttribute","sAttribute","sName","empty","getChildrenJSON","elemResult","textContent","attrData","attrList","attrListLength","getHtmlByNodeList","getRootNode","menuList","constructorList","extend","menuKey","MenuConstructor","_addToToolbar","menuFind","tryChangeActive","Menus","bold","italic","underline","strikeThrough","fontName","fontSize","quote","backColor","foreColor","lineHeight","undo","redo","splitLine","isSelectEmpty","Bold","dropListConf","command","oldCatalogs","addListenerCatalog","getCatalogs","addUidForSelectionElem","getRandomCode","catalogs","cmdValue","Head","core","re","low","hi","fix","offset","$linkElem","isActive","createPanel","Link","$selectedLink","inputLinkId","getRandom","inputTextId","btnOkId","btnDelId","delBtnDisplay","selectLinkElem","$text","checkLink","insertLink","selectionText","delLink","tooltip","showLinkTooltip","hideLinkTooltip","createShowHideFn","Italic","Underline","StrikeThrough","fontListConf","getItemList","isEmptySelection","isFont","isSameValue","$elems","FontStyle","itemList","fontValue","FontStyleList","isSameSize","FontSize","FontSizeList","justifyLeft","justifyCenter","justifyRight","justifyFull","Justify","topNodeElem","$topNodeElem","getTopNodeName","$quote","delSelectNode","moveNode","$targetELem","selectElem","Quote","$selectElem","$topSelectElem","$newLine","$childElem","colorListConf","color","isSpan","bgColor","backgroundColor","isSameColor","hexToRgb","BackColor","FontColor","Video","inputIFrameId","$video","insertVideo","Image","upTriggerId","upFileId","linkUrlId","linkBtnId","fileMultipleAttr","accepts","tabsConf","fileElem","click","fileList","$linkUrl","log","checkLinkImg","option","XMLHttpRequest","ontimeout","upload","onprogress","setRequestHeader","beforeResult","prevent","msg","onreadystatechange","readyState","responseText","send","$textContainer","$bar","isShow","time","timeoutId","progress","Progress","Date","getTime","pasteImgHandler","_haveTextOrHtml","pastedFiles","getPasteImgs","dataTransfer","setDragStyle","$drag","$imgTarget","createDragBox","hideDrag","firstX","clientX","firstY","clientY","boxRect","imgRect","ratio","setW","setH","$document","mouseMoveHandler","mouseUpHandler","offEvents","ev","toFixed","newImgRect","bindDragEvents","showDrag","rectW","rectH","showDargBox","parseFloat","parseFloatImplementation","$parseFloat","Infinity","trimmedString","showImgTooltip","hideImgTooltip","$selectionStartElem","Indent","lengthRegex","percentRegex","parseIndentation","unit","Number","oldPL","oldVal","newVal","Emoticon","GenerateExpressionStructure","ele","res","con","insertHtml","List","allowArray","st","$selectionAll","dom","styleList","styleStr","arrayDom_a","arrayDom_b","childList","getDom","shift","setRange","styleProcessing","action","selectAllChildren","DOM","getParentNode","html_str","startDom","endDom","star","LineHeight","lineHeightList","Undo","Redo","Table","createTable","colId","rowId","insertBtnId","i18nPrefix","colValue","rowValue","createAction","$ul","$ol","tableDom","createTableHtml","rowStr","colStr","CreateTable","isMoreRowAction","showTableTooltip","getnode","selectDom","$currentRow","getRowNode","getCurrentRowIndex","htmlStr","getTableHtml","newdom","ProcessingRow","trLength","DeleteRow","getCurrentColIndex","ProcessingCol","tdLength","DeleteCol","setTheHeader","hideTableTooltip","removeAndInsertAction","domArray","generateDomAction","childNodesLenght","tr","td","cArray","th","$nodeChild","rowDom","colDom","preArr","formatEnterCode","deleteHighlightCode","replaceSpecialSymbol","insertLineCode","Code","languageId","insertCode","$codeElem","selectCodeElem","language","formatCode","getElementById","highlight","highlightAuto","showCodeTooltip","hideCodeTooltip","$DomElement","$tableDOM","$imgDOM","collapsed","createSplitLine","showSplitLineTooltip","hideSplitLineTooltip","styleSettings","$toolbarSelector","textContainerCliheight","_focusHandler","_bindChange","isChild","isToolbar","isMenu","currentHtml","_blurHandler","activeElement","_bindFocusAndBlur","_bindInput","strArr","lng","defaultNS","resources","$editorParent","$iconElem","currentTarget","targetTop","tier","toolbar","textContainer","baseZIndex","tierName","mutations","observer","tar","attributeName","mutationsFilter","asyncSave","debounce","subtree","attributeOldValue","characterDataOldValue","callback","connect","disconnect","takeRecords","scroll","compile","reset","abs","unshift","compileType","compileValue","complieNodes","addedNodes","removedNodes","compliePosition","previousSibling","childs","removeNode","removeCache","record","oldValue","nodes","replenishNode","replenishData","reference","revokeFns","relative","restoreFns","$entries","TO_ENTRIES","TailChain","insertLast","current","rangeToObject","lastRange","updateLastRange","rangeHandle","selectionchange","handle","$contentDom","$menuDom","isCurtain","textContainerZindexValue","menuZindexValue"],"mappings":"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","file":"wangEditor.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"wangEditor\"] = factory();\n\telse\n\t\troot[\"wangEditor\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 127);\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;","module.exports = require(\"core-js-pure/stable/object/define-property\");","/**\n * @description 封装 DOM 操作\n * @wangfupeng\n */\n\nimport Editor from '../editor/index'\nimport { toArray } from './util'\n\n// 记录元素基于上一个相对&绝对定位的位置信息\ntype OffsetDataType = {\n top: number\n left: number\n width: number\n height: number\n parent: Element | null\n}\n\n// 记录代理事件绑定\ntype listener = (e: Event) => void\ntype EventItem = {\n elem: HTMLElement\n selector: string\n fn: listener\n agentFn: listener\n}\nconst AGENT_EVENTS: EventItem[] = []\n\n/**\n * 根据 html 字符串创建 elem\n * @param {String} html html\n */\nfunction _createElemByHTML(html: string): HTMLElement[] {\n const div = document.createElement('div')\n div.innerHTML = html\n const elems = div.children\n return toArray(elems)\n}\n\n/**\n * 判断是否是 DOM List\n * @param selector DOM 元素或列表\n */\nfunction _isDOMList<T extends HTMLCollection | NodeList>(selector: unknown): selector is T {\n if (!selector) {\n return false\n }\n if (selector instanceof HTMLCollection || selector instanceof NodeList) {\n return true\n }\n return false\n}\n\n/**\n * 封装 querySelectorAll\n * @param selector css 选择器\n */\nfunction _querySelectorAll(selector: string): HTMLElement[] {\n const elems = document.querySelectorAll(selector)\n return toArray(elems)\n}\n\n/**\n * 封装 _styleArrTrim\n * @param styleArr css\n */\nfunction _styleArrTrim(style: string | string[]): string[] {\n let styleArr: string[] = []\n let resultArr: string[] = []\n\n if (!Array.isArray(style)) {\n // 有 style,将 style 按照 `;` 拆分为数组\n styleArr = style.split(';')\n } else {\n styleArr = style\n }\n\n styleArr.forEach(item => {\n // 对每项样式,按照 : 拆分为 key 和 value\n let arr = item.split(':').map(i => {\n return i.trim()\n })\n if (arr.length === 2) {\n resultArr.push(arr[0] + ':' + arr[1])\n }\n })\n return resultArr\n}\n\nexport type DomElementSelector =\n | string\n | DomElement\n | HTMLElement\n | Element\n | Document\n | HTMLCollection\n | Node\n | NodeList\n | HTMLElement[]\n | EventTarget\n | null\n | undefined\n\n// 构造函数\nexport class DomElement<T extends DomElementSelector = DomElementSelector> {\n // 定义属性\n selector!: T\n length: number\n elems: HTMLElement[]\n dataSource: Map<string, any>\n\n /**\n * 构造函数\n * @param selector 任一类型的选择器\n */\n constructor(selector: T) {\n // 初始化属性\n this.elems = []\n this.length = this.elems.length\n this.dataSource = new Map()\n\n if (!selector) {\n return\n }\n\n // 原本就是 DomElement 实例,则直接返回\n if (selector instanceof DomElement) {\n return selector\n }\n\n let selectorResult: HTMLElement[] = [] // 存储查询结果\n const nodeType = selector instanceof Node ? selector.nodeType : -1\n this.selector = selector\n\n if (nodeType === 1 || nodeType === 9) {\n selectorResult = [selector as HTMLElement]\n } else if (_isDOMList(selector)) {\n // DOM List\n selectorResult = toArray(selector)\n } else if (selector instanceof Array) {\n // Element 数组(其他数据类型,暂时忽略)\n selectorResult = selector\n } else if (typeof selector === 'string') {\n // 字符串\n const tmpSelector = selector.replace('/\\n/mg', '').trim()\n if (tmpSelector.indexOf('<') === 0) {\n // 如 <div>\n selectorResult = _createElemByHTML(tmpSelector)\n } else {\n // 如 #id .class\n selectorResult = _querySelectorAll(tmpSelector)\n }\n }\n\n const length = selectorResult.length\n if (!length) {\n // 空数组\n return this\n }\n\n // 加入 DOM 节点\n let i = 0\n for (; i < length; i++) {\n this.elems.push(selectorResult[i])\n }\n this.length = length\n }\n\n /**\n * 获取元素 id\n */\n get id(): string {\n return this.elems[0].id\n }\n\n /**\n * 遍历所有元素,执行回调函数\n * @param fn 回调函数\n */\n forEach(fn: (ele: HTMLElement, index?: number) => boolean | unknown): DomElement {\n for (let i = 0; i < this.length; i++) {\n const elem = this.elems[i]\n const result = fn.call(elem, elem, i)\n if (result === false) {\n break\n }\n }\n return this\n }\n\n /**\n * 克隆元素\n * @param deep 是否深度克隆\n */\n clone(deep: boolean = false): DomElement {\n const cloneList: HTMLElement[] = []\n this.elems.forEach(elem => {\n cloneList.push(elem.cloneNode(!!deep) as HTMLElement)\n })\n return $(cloneList)\n }\n\n /**\n * 获取第几个元素\n * @param index index\n */\n get(index: number = 0): DomElement {\n const length = this.length\n if (index >= length) {\n index = index % length\n }\n return $(this.elems[index])\n }\n\n /**\n * 获取第一个元素\n */\n first(): DomElement {\n return this.get(0)\n }\n\n /**\n * 获取最后一个元素\n */\n last(): DomElement {\n const length = this.length\n return this.get(length - 1)\n }\n\n /**\n * 绑定事件\n * @param type 事件类型\n * @param selector DOM 选择器\n * @param fn 事件函数\n */\n on(type: string, fn: Function): DomElement\n on(type: string, selector: string, fn: Function): DomElement\n on(type: string, selector: string | Function, fn?: Function): DomElement {\n if (!type) return this\n\n // 没有 selector ,只有 type 和 fn\n if (typeof selector === 'function') {\n fn = selector\n selector = ''\n }\n\n return this.forEach(elem => {\n // 没有事件代理\n if (!selector) {\n // 无代理\n elem.addEventListener(type, fn as listener)\n return\n }\n\n // 有事件代理\n const agentFn: listener = function (e) {\n const target = e.target as HTMLElement\n if (target.matches(selector as string)) {\n ;(fn as listener).call(target, e)\n }\n }\n elem.addEventListener(type, agentFn)\n\n // 缓存代理事件\n AGENT_EVENTS.push({\n elem: elem,\n selector: selector as string,\n fn: fn as listener,\n agentFn,\n })\n })\n }\n\n /**\n * 解绑事件\n * @param type 事件类型\n * @param selector DOM 选择器\n * @param fn 事件函数\n */\n off(type: string, fn: Function): DomElement\n off(type: string, selector: string, fn: Function): DomElement\n off(type: string, selector: string | Function, fn?: Function): DomElement {\n if (!type) return this\n\n // 没有 selector ,只有 type 和 fn\n if (typeof selector === 'function') {\n fn = selector\n selector = ''\n }\n\n return this.forEach(function (elem: HTMLElement) {\n // 解绑事件代理\n if (selector) {\n let idx = -1\n for (let i = 0; i < AGENT_EVENTS.length; i++) {\n let item = AGENT_EVENTS[i]\n if (item.selector === selector && item.fn === fn && item.elem === elem) {\n idx = i\n break\n }\n }\n if (idx !== -1) {\n const { agentFn } = AGENT_EVENTS.splice(idx, 1)[0]\n elem.removeEventListener(type, agentFn)\n }\n } else {\n // @ts-ignore\n elem.removeEventListener(type, fn)\n }\n })\n }\n\n /**\n * 设置/获取 属性\n * @param key key\n * @param val value\n */\n attr(key: string): string\n attr(key: string, val: string): DomElement\n attr(key: string, val?: string): DomElement | string {\n if (val == null) {\n // 获取数据\n return this.elems[0].getAttribute(key) || ''\n }\n\n // 否则,设置属性\n return this.forEach(function (elem: HTMLElement) {\n elem.setAttribute(key, val)\n })\n }\n\n /**\n * 删除 属性\n * @param key key\n */\n removeAttr(key: string): void {\n this.forEach(function (elem: HTMLElement) {\n elem.removeAttribute(key)\n })\n }\n\n /**\n * 添加 css class\n * @param className css class\n */\n addClass(className?: string): DomElement {\n if (!className) {\n return this\n }\n\n return this.forEach(function (elem: HTMLElement) {\n if (elem.className) {\n // 当前有 class\n let arr: string[] = elem.className.split(/\\s/)\n arr = arr.filter(item => {\n return !!item.trim()\n })\n // 添加 class\n if (arr.indexOf(className) < 0) {\n arr.push(className)\n }\n // 修改 elem.class\n elem.className = arr.join(' ')\n } else {\n // 当前没有 class\n elem.className = className\n }\n })\n }\n\n /**\n * 添加 css class\n * @param className css class\n */\n removeClass(className?: string): DomElement {\n if (!className) {\n return this\n }\n return this.forEach(function (elem: HTMLElement) {\n if (!elem.className) {\n // 当前无 class\n return\n }\n\n let arr: string[] = elem.className.split(/\\s/)\n arr = arr.filter(item => {\n item = item.trim()\n // 删除 class\n if (!item || item === className) {\n return false\n }\n return true\n })\n // 修改 elem.class\n elem.className = arr.join(' ')\n })\n }\n\n /**\n * 是否有传入的 css class\n * @param className css class\n */\n hasClass(className?: string): boolean {\n if (!className) {\n return false\n }\n const elem = this.elems[0]\n if (!elem.className) {\n // 当前无 class\n return false\n }\n let arr: string[] = elem.className.split(/\\s/)\n return arr.includes(className) // 是否包含\n }\n\n /**\n * 修改 css\n * @param key css key\n * @param val css value\n */\n // css(key: string): string\n css(key: string, val?: string | number): DomElement {\n let currentStyle: string\n if (val == '') {\n currentStyle = ''\n } else {\n currentStyle = `${key}:${val};`\n }\n return this.forEach(elem => {\n const style = (elem.getAttribute('style') || '').trim()\n if (style) {\n // 有 style,将 style 按照 `;` 拆分为数组\n let resultArr: string[] = _styleArrTrim(style)\n\n // 替换现有的 style\n resultArr = resultArr.map(item => {\n if (item.indexOf(key) === 0) {\n return currentStyle\n } else {\n return item\n }\n })\n // 新增 style\n if (currentStyle != '' && resultArr.indexOf(currentStyle) < 0) {\n resultArr.push(currentStyle)\n }\n\n // 去掉 空白\n if (currentStyle == '') {\n resultArr = _styleArrTrim(resultArr)\n }\n\n // 重新设置 style\n elem.setAttribute('style', resultArr.join('; '))\n } else {\n // 当前没有 style\n elem.setAttribute('style', currentStyle)\n }\n })\n }\n\n /**\n * 封装 getBoundingClientRect\n */\n getBoundingClientRect(): DOMRect {\n const elem = this.elems[0]\n return elem.getBoundingClientRect()\n }\n\n /**\n * 显示\n */\n show(): DomElement {\n return this.css('display', 'block')\n }\n\n /**\n * 隐藏\n */\n hide(): DomElement {\n return this.css('display', 'none')\n }\n\n /**\n * 获取子节点(只有 DOM 元素)\n */\n children(): DomElement | null {\n const elem = this.elems[0]\n if (!elem) {\n return null\n }\n\n return $(elem.children)\n }\n\n /**\n * 获取子节点(包括文本节点)\n */\n childNodes(): DomElement | null {\n const elem = this.elems[0]\n if (!elem) {\n return null\n }\n\n return $(elem.childNodes)\n }\n\n /**\n * 将子元素全部替换\n * @param $children 新的child节点\n */\n replaceChildAll($children: DomElement): void {\n const parent = this.getNode()\n const elem = this.elems[0]\n while (elem.hasChildNodes()) {\n parent.firstChild && elem.removeChild(parent.firstChild)\n }\n this.append($children)\n }\n\n /**\n * 增加子节点\n * @param $children 子节点\n */\n append($children: DomElement): DomElement {\n return this.forEach(elem => {\n $children.forEach(function (child: HTMLElement) {\n elem.appendChild(child)\n })\n })\n }\n\n /**\n * 移除当前节点\n */\n remove(): DomElement {\n return this.forEach(elem => {\n if (elem.remove) {\n elem.remove()\n } else {\n const parent = elem.parentElement\n parent && parent.removeChild(elem)\n }\n })\n }\n\n /**\n * 当前元素,是否包含某个子元素\n * @param $child 子元素\n */\n isContain($child: DomElement): boolean {\n const elem = this.elems[0]\n const child = $child.elems[0]\n return elem.contains(child)\n }\n\n /**\n * 获取当前元素的尺寸和位置信息\n */\n getSizeData(): DOMRect {\n const elem = this.elems[0]\n // 可得到 bottom height left right top width 的数据\n return elem.getBoundingClientRect()\n }\n\n /**\n * 获取当前元素 nodeName\n */\n getNodeName(): string {\n const elem = this.elems[0]\n return elem.nodeName\n }\n\n /**\n * 获取当前元素节点\n */\n getNode(): Node {\n const elem = this.elems[0]\n return elem\n }\n\n /**\n * 获取当前元素可视高度\n */\n getClientHeight(): number {\n const elem = this.elems[0]\n return elem.clientHeight\n }\n\n /**\n * 获取当前元素可视宽度\n */\n // getClientWidth(): number {\n // const elem = this.elems[0]\n // return elem.clientWidth\n // }\n\n /**\n * 查询\n * @param selector css 选择器\n */\n find(selector: string): DomElement {\n const elem = this.elems[0]\n return $(elem.querySelectorAll(selector))\n }\n\n /**\n * 获取/设置 元素 text\n * @param val text 值\n */\n text(): string\n text(val: string): DomElement\n text(val?: string): DomElement | string {\n if (!val) {\n // 获取 text\n const elem = this.elems[0]\n\n return elem.innerHTML.replace(/<[^>]+>/g, () => '')\n } else {\n // 设置 text\n return this.forEach(function (elem: HTMLElement) {\n elem.innerHTML = val\n })\n }\n }\n\n /**\n * 设置/获取 元素 html\n * @param val html 值\n */\n html(): string\n html(val: string): DomElement\n html(val?: string): DomElement | string {\n const elem = this.elems[0]\n if (!val) {\n // 获取 html\n return elem.innerHTML\n } else {\n // 设置 html\n elem.innerHTML = val\n return this\n }\n }\n\n /**\n * 获取元素 value\n */\n val(): string {\n const elem = this.elems[0]\n return (elem as any).value.trim() // 暂用 any\n }\n\n /**\n * focus 到当前元素\n */\n focus(): DomElement {\n return this.forEach(elem => {\n elem.focus()\n })\n }\n\n /**\n * 当前元素前一个兄弟节点\n */\n prev(): DomElement {\n const elem = this.elems[0]\n return $(elem.previousElementSibling)\n }\n\n /**\n * 当前元素后一个兄弟节点\n */\n next(): DomElement {\n const elem = this.elems[0]\n return $(elem.nextElementSibling)\n }\n\n /**\n * 获取父元素\n */\n parent(): DomElement {\n const elem = this.elems[0]\n return $(elem.parentElement)\n }\n\n /**\n * 查找父元素,知道满足 selector 条件\n * @param selector css 选择器\n * @param curElem 从哪个元素开始查找,默认为当前元素\n */\n parentUntil(selector: string, curElem?: HTMLElement): DomElement | null {\n const elem = curElem || this.elems[0]\n if (elem.nodeName === 'BODY') {\n return null\n }\n\n const parent = elem.parentElement\n if (parent === null) {\n return null\n }\n\n if (parent.matches(selector)) {\n // 找到,并返回\n return $(parent)\n }\n\n // 继续查找,递归\n return this.parentUntil(selector, parent)\n }\n\n /**\n * 判读是否相等\n * @param $elem 元素\n */\n equal($elem: DomElement | HTMLElement): boolean {\n if ($elem instanceof DomElement) {\n return this.elems[0] === $elem.elems[0]\n } else if ($elem instanceof HTMLElement) {\n return this.elems[0] === $elem\n } else {\n return false\n }\n }\n\n /**\n * 将该元素插入到某个元素前面\n * @param selector css 选择器\n */\n insertBefore(selector: string | DomElement): DomElement {\n const $referenceNode = $(selector)\n const referenceNode = $referenceNode.elems[0]\n if (!referenceNode) {\n return this\n }\n return this.forEach(elem => {\n const parent = referenceNode.parentNode as Node\n parent.insertBefore(elem, referenceNode)\n })\n }\n\n /**\n * 将该元素插入到某个元素后面\n * @param selector css 选择器\n */\n insertAfter(selector: string | DomElement): DomElement {\n const $referenceNode = $(selector)\n const referenceNode = $referenceNode.elems[0]\n const anchorNode = referenceNode && referenceNode.nextSibling\n if (!referenceNode) {\n return this\n }\n return this.forEach(function (elem: HTMLElement) {\n const parent = referenceNode.parentNode as Node\n if (anchorNode) {\n parent.insertBefore(elem, anchorNode)\n } else {\n parent.appendChild(elem)\n }\n })\n }\n\n /**\n * 设置/获取 数据\n * @param key key\n * @param value value\n */\n data<T>(key: string, value?: T): T | undefined {\n if (value != null) {\n // 设置数据\n this.dataSource.set(key, value)\n } else {\n // 获取数据\n return this.dataSource.get(key)\n }\n }\n\n /**\n * 获取当前节点的顶级(段落)\n * @param editor 富文本实例\n */\n getNodeTop(editor: Editor): DomElement {\n if (this.length < 1) {\n return this\n }\n\n const $parent = this.parent()\n if (editor.$textElem.equal($parent)) {\n return this\n }\n\n return $parent.getNodeTop(editor)\n }\n\n /**\n * 获取当前 节点 基与上一个拥有相对或者解决定位的父容器的位置\n * @param editor 富文本实例\n */\n getOffsetData(): OffsetDataType {\n const $node = this.elems[0]\n return {\n top: $node.offsetTop,\n left: $node.offsetLeft,\n width: $node.offsetWidth,\n height: $node.offsetHeight,\n parent: $node.offsetParent,\n }\n }\n\n /**\n * 从上至下进行滚动\n * @param top 滚动的值\n */\n scrollTop(top: number): void {\n const $node = this.elems[0]\n $node.scrollTo({ top })\n }\n}\n\n// new 一个对象\nfunction $(...arg: ConstructorParameters<typeof DomElement>): DomElement {\n return new DomElement(...arg)\n}\n\nexport default $\n","module.exports = require(\"core-js-pure/stable/object/create\");","'use strict';\nvar global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof NativeConstructor) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return NativeConstructor.apply(this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || (path[TARGET] = {});\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && has(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty === typeof sourceProperty) continue;\n\n // bind timers to global for call from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changs in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && typeof sourceProperty == 'function') resultProperty = bind(Function.call, sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n target[key] = resultProperty;\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!has(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n path[VIRTUAL_PROTOTYPE][key] = sourceProperty;\n // export real prototype methods\n if (options.real && targetPrototype && !targetPrototype[key]) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","module.exports = require(\"core-js-pure/stable/object/set-prototype-of\");","module.exports = require(\"core-js-pure/stable/instance/for-each\");","/**\n * @description 工具函数集合\n * @author wangfupeng\n */\n\nclass NavUA {\n public _ua: string\n\n // 是否为旧版 Edge\n public isOldEdge: boolean\n\n // 是否为 Firefox\n public isFirefox: boolean\n\n constructor() {\n this._ua = navigator.userAgent\n\n const math = this._ua.match(/(Edge?)\\/(\\d+)/)\n this.isOldEdge = math && math[1] == 'Edge' && parseInt(math[2]) < 19 ? true : false\n\n this.isFirefox =\n /Firefox\\/\\d+/.test(this._ua) && !/Seamonkey\\/\\d+/.test(this._ua) ? true : false\n }\n\n // 是否为 IE\n public isIE() {\n return 'ActiveXObject' in window\n }\n\n // 是否为 webkit\n public isWebkit() {\n return /webkit/i.test(this._ua)\n }\n}\n\n// 和 UA 相关的属性\nexport const UA = new NavUA()\n\n/**\n * 获取随机字符\n * @param prefix 前缀\n */\nexport function getRandom(prefix: string = ''): string {\n return prefix + Math.random().toString().slice(2)\n}\n\n/**\n * 替换 html 特殊字符\n * @param html html 字符串\n */\nexport function replaceHtmlSymbol(html: string) {\n return html\n .replace(/</gm, '&lt;')\n .replace(/>/gm, '&gt;')\n .replace(/\"/gm, '&quot;')\n .replace(/(\\r\\n|\\r|\\n)/g, '<br/>')\n}\n\nexport function replaceSpecialSymbol(value: string) {\n return value\n .replace(/&lt;/gm, '<')\n .replace(/&gt;/gm, '>')\n .replace(/&quot;/gm, '\"')\n}\n\ninterface Obj {\n [key: string]: unknown\n [key: number]: unknown\n}\ninterface ArrObj {\n length: number\n [key: number]: unknown\n}\n\n/**\n * 遍历对象或数组,执行回调函数\n * @param obj 对象或数组\n * @param fn 回调函数 (key, val) => {...}\n */\nexport function forEach<T extends ArrObj, V = T[Extract<keyof T, number>]>(\n obj: T,\n fn: (key: string, value: V) => boolean | void\n): void\nexport function forEach<T extends Obj>(\n obj: T,\n fn: (key: string, value: T[Extract<keyof T, string | number>]) => boolean | void\n): void\nexport function forEach<T extends unknown[]>(\n obj: T,\n fn: (key: string, value: T[Extract<keyof T, number>]) => boolean | void\n): void\nexport function forEach<T extends unknown[] | Obj | ArrObj>(\n obj: T,\n fn: (\n key: string,\n value: T[Extract<keyof T, number>] | T[Extract<keyof T, string>]\n ) => boolean | void\n): void {\n for (let key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const result = fn(key, obj[key])\n if (result === false) {\n // 提前终止循环\n break\n }\n }\n }\n}\n\n/**\n * 遍历类数组\n * @param fakeArr 类数组\n * @param fn 回调函数\n */\nexport function arrForEach<T extends { length: number; [key: number]: unknown }>(\n fakeArr: T,\n fn: (this: T, item: T[number], index: number) => boolean | unknown\n): void {\n let i, item, result\n const length = fakeArr.length || 0\n for (i = 0; i < length; i++) {\n item = fakeArr[i]\n result = fn.call(fakeArr, item, i)\n if (result === false) {\n break\n }\n }\n}\n\n/**\n * 节流\n * @param fn 函数\n * @param interval 间隔时间,毫秒\n */\n\nexport function throttle<C, T extends unknown[]>(\n fn: (this: C, ...args: T) => unknown,\n interval: number = 200\n) {\n let flag = false\n return function (this: C, ...args: T): void {\n if (!flag) {\n flag = true\n setTimeout(() => {\n flag = false\n fn.call(this, ...args) // this 报语法错误,先用 null\n }, interval)\n }\n }\n}\n\n/**\n * 防抖\n * @param fn 函数\n * @param delay 间隔时间,毫秒\n */\nexport function debounce<C, T extends unknown[]>(\n fn: (this: C, ...args: T) => void,\n delay: number = 200\n): (this: C, ...args: T) => void {\n let lastFn = 0\n return function (...args: T) {\n if (lastFn) {\n window.clearTimeout(lastFn)\n }\n lastFn = window.setTimeout(() => {\n lastFn = 0\n fn.call(this, ...args) // this 报语法错误,先用 null\n }, delay)\n }\n}\n\n/**\n * isFunction 是否是函数\n * @param fn 函数\n */\nexport function isFunction(fn: any): fn is Function {\n return typeof fn === 'function'\n}\n\n/**\n * 引用与非引用值 深拷贝方法\n * @param data\n */\nexport function deepClone<T>(data: T): T {\n if (typeof data !== 'object' || typeof data == 'function' || data === null) {\n return data\n }\n\n let item: any\n if (Array.isArray(data)) {\n item = []\n }\n\n if (!Array.isArray(data)) {\n item = {}\n }\n\n for (let i in data) {\n if (Object.prototype.hasOwnProperty.call(data, i)) {\n item[i] = deepClone(data[i])\n }\n }\n\n return item\n}\n\n/**\n * 将可遍历的对象转换为数组\n * @param data 可遍历的对象\n */\nexport function toArray<T>(data: T) {\n return Array.prototype.slice.call(data)\n}\n\n/**\n * 唯一id生成\n * @param length 随机数长度\n */\nexport function getRandomCode() {\n return Math.random().toString(36).slice(-5)\n}\n\n/**\n * hex color 转换成 rgb\n * @param hex string\n */\nexport function hexToRgb(hex: string) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n\n if (result == null) return null\n\n const colors = result.map(i => parseInt(i, 16))\n const r = colors[1]\n const g = colors[2]\n const b = colors[3]\n\n return `rgb(${r}, ${g}, ${b})`\n}\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n (function () { return this; })() || Function('return this')();\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","module.exports = {};\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n return path[CONSTRUCTOR + 'Prototype'];\n};\n","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","module.exports = require(\"core-js-pure/stable/instance/trim\");","/**\n * @description 下拉菜单 Class\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Menu from './Menu'\nimport DropList, { DropListConf } from './DropList'\n\nclass DropListMenu extends Menu {\n public dropList: DropList\n\n constructor($elem: DomElement, editor: Editor, conf: DropListConf) {\n super($elem, editor)\n\n // 国际化\n conf.title = editor.i18next.t(`menus.dropListMenu.${conf.title}`)\n\n // 非中文模式下 带 icon 的下拉列表居左\n const className: string = editor.config.lang === 'zh-CN' ? '' : 'w-e-drop-list-tl'\n if (className !== '' && conf.type === 'list') {\n conf.list.forEach(item => {\n const $elem = item.$elem\n const $children = $($elem.children())\n if ($children.length > 0) {\n const nodeName = $children?.getNodeName()\n if (nodeName && nodeName === 'I') {\n $elem.addClass(className)\n }\n }\n })\n }\n\n // 初始化 dropList\n const dropList = new DropList(this, conf)\n this.dropList = dropList\n\n // 绑定事件\n $elem\n .on('mouseenter', () => {\n if (editor.selection.getRange() == null) {\n return\n }\n $elem.css('z-index', editor.zIndex.get('menu'))\n // 触发 droplist 悬浮事件\n editor.txt.eventHooks.dropListMenuHoverEvents.forEach(fn => fn())\n // 显示\n dropList.showTimeoutId = window.setTimeout(() => {\n dropList.show()\n }, 200)\n })\n .on('mouseleave', () => {\n $elem.css('z-index', 'auto')\n // 隐藏\n dropList.hideTimeoutId = window.setTimeout(() => {\n dropList.hide()\n })\n })\n }\n}\n\nexport default DropListMenu\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","/**\n * @description 按钮菜单 Class\n * @author wangfupeng\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Menu from './Menu'\n\nclass BtnMenu extends Menu {\n constructor($elem: DomElement, editor: Editor) {\n super($elem, editor)\n }\n}\n\nexport default BtnMenu\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n if (!options) options = {};\n var method = [][METHOD_NAME];\n var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n var argument0 = has(options, 0) ? options[0] : thrower;\n var argument1 = has(options, 1) ? options[1] : undefined;\n\n return cache[METHOD_NAME] = !!method && !fails(function () {\n if (ACCESSORS && !DESCRIPTORS) return true;\n var O = { length: -1 };\n\n if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n else O[1] = 1;\n\n method.call(O, argument0, argument1);\n });\n};\n","module.exports = require(\"core-js-pure/stable/instance/map\");","/**\n * @description panel class\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport PanelMenu from './PanelMenu'\nimport { EMPTY_FN } from '../../utils/const'\n\n// Panel 配置格式\ntype _TabEventConf = {\n selector: string\n type: string\n fn: Function\n}\nexport type PanelTabConf = {\n title: string\n tpl: string\n events: _TabEventConf[]\n}\nexport type PanelConf = {\n width: number | 0\n height: number | 0\n tabs: PanelTabConf[]\n}\n\nclass Panel {\n // 记录已经创建过的 panelMenu\n static createdMenus: Set<PanelMenu> = new Set()\n\n private menu: PanelMenu\n private conf: PanelConf\n public $container: DomElement\n\n constructor(menu: PanelMenu, conf: PanelConf) {\n this.menu = menu\n this.conf = conf\n this.$container = $('<div class=\"w-e-panel-container\"></div>')\n\n // 隐藏 panel\n const editor = menu.editor\n editor.txt.eventHooks.clickEvents.push(Panel.hideCurAllPanels)\n editor.txt.eventHooks.toolbarClickEvents.push(Panel.hideCurAllPanels)\n editor.txt.eventHooks.dropListMenuHoverEvents.push(Panel.hideCurAllPanels)\n }\n\n /**\n * 创建并展示 panel\n */\n public create(): void {\n const menu = this.menu\n if (Panel.createdMenus.has(menu)) {\n // 创建过了\n return\n }\n\n const conf = this.conf\n\n // panel 的容器\n const $container = this.$container\n const width = conf.width || 300 // 默认 300px\n const rect = menu.editor.$toolbarElem.getBoundingClientRect()\n const menuRect = menu.$elem.getBoundingClientRect()\n const top = rect.height + rect.top - menuRect.top\n const left = (rect.width - width) / 2 + rect.left - menuRect.left\n\n $container\n .css('width', width + 'px')\n .css('margin-top', `${top}px`)\n .css('margin-left', `${left}px`)\n .css('z-index', menu.editor.zIndex.get('panel'))\n\n // 添加关闭按钮\n const $closeBtn = $('<i class=\"w-e-icon-close w-e-panel-close\"></i>')\n $container.append($closeBtn)\n $closeBtn.on('click', () => {\n this.remove()\n })\n\n // 准备 tabs 容器\n const $tabTitleContainer = $('<ul class=\"w-e-panel-tab-title\"></ul>')\n const $tabContentContainer = $('<div class=\"w-e-panel-tab-content\"></div>')\n $container.append($tabTitleContainer).append($tabContentContainer)\n\n // 设置高度\n const height = conf.height // height: 0 即不用设置\n if (height) {\n $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto')\n }\n\n // tabs\n const tabs = conf.tabs || []\n const tabTitleArr: DomElement[] = []\n const tabContentArr: DomElement[] = []\n\n tabs.forEach((tab: PanelTabConf, tabIndex: number) => {\n if (!tab) {\n return\n }\n const title = tab.title || ''\n const tpl = tab.tpl || ''\n\n // 添加到 DOM\n const $title = $(`<li class=\"w-e-item\">${title}</li>`)\n $tabTitleContainer.append($title)\n const $content = $(tpl)\n $tabContentContainer.append($content)\n\n // 记录到内存\n tabTitleArr.push($title)\n tabContentArr.push($content)\n\n // 设置 active 项\n if (tabIndex === 0) {\n $title.data('active', true)\n $title.addClass('w-e-active')\n } else {\n $content.hide()\n }\n\n // 绑定 tab 的事件\n $title.on('click', () => {\n if ($title.data('active')) {\n return\n }\n // 隐藏所有的 tab\n tabTitleArr.forEach($title => {\n $title.data('active', false)\n $title.removeClass('w-e-active')\n })\n tabContentArr.forEach($content => {\n $content.hide()\n })\n\n // 显示当前的 tab\n $title.data('active', true)\n $title.addClass('w-e-active')\n $content.show()\n })\n })\n\n // 绑定关闭事件\n $container.on('click', (e: Event) => {\n // 点击时阻止冒泡\n e.stopPropagation()\n })\n\n // 添加到 DOM\n menu.$elem.append($container)\n\n // 绑定 conf events 的事件,只有添加到 DOM 之后才能绑定成功\n tabs.forEach((tab: PanelTabConf, index: number) => {\n if (!tab) {\n return\n }\n const events = tab.events || []\n events.forEach((event: _TabEventConf) => {\n const selector = event.selector\n const type = event.type\n const fn = event.fn || EMPTY_FN\n const $content = tabContentArr[index]\n $content.find(selector).on(type, (e: Event) => {\n e.stopPropagation()\n const needToHide = fn(e)\n // 执行完事件之后,是否要关闭 panel\n if (needToHide) {\n this.remove()\n }\n })\n })\n })\n\n // focus 第一个 elem\n let $inputs = $container.find('input[type=text],textarea')\n if ($inputs.length) {\n $inputs.get(0).focus()\n }\n\n // 隐藏其他 panel\n Panel.hideCurAllPanels()\n\n // 记录该 menu 已经创建了 panel\n menu.setPanel(this)\n Panel.createdMenus.add(menu)\n }\n\n /**\n * 移除 penal\n */\n public remove(): void {\n const menu = this.menu\n const $container = this.$container\n if ($container) {\n $container.remove()\n }\n\n // 将该 menu 记录中移除\n Panel.createdMenus.delete(menu)\n }\n\n /**\n * 隐藏当前所有的 panel\n */\n static hideCurAllPanels(): void {\n if (Panel.createdMenus.size === 0) {\n return\n }\n Panel.createdMenus.forEach(menu => {\n const panel = (menu as PanelMenu).panel\n panel && panel.remove()\n })\n }\n}\n\nexport default Panel\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","/**\n * @description 常量\n * @author wangfupeng\n */\n\nexport function EMPTY_FN() {}\n//用于校验图片链接是否符合规范\nexport const imgRegex = /\\.(gif|jpg|jpeg|png)$/i\n\n//用于校验是否为url格式字符串\nexport const urlRegex = /^(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-.,@?^=%&amp;:/~+#]*[\\w\\-@?^=%&amp;/~+#])?/\n","module.exports = require(\"core-js-pure/stable/instance/find\");","/**\n * @description Modal 菜单 Class\n * @author wangfupeng\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Menu from './Menu'\nimport Panel from './Panel'\n\nclass PanelMenu extends Menu {\n public panel: Panel | undefined\n\n constructor($elem: DomElement, editor: Editor) {\n super($elem, editor)\n }\n\n /**\n * 给 menu 设置 panel\n * @param panel panel 实例\n */\n public setPanel(panel: Panel): void {\n this.panel = panel\n }\n}\n\nexport default PanelMenu\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","module.exports = true;\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","module.exports = {};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!has(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_OUT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterOut\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod(7)\n};\n","/**\n * @description Tooltip class\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\n\ntype PositionDataType = {\n top: number\n left: number\n}\n\nexport type TooltipConfItemType = {\n $elem: DomElement\n onClick: Function\n}\nexport type TooltipConfType = Array<TooltipConfItemType>\n\nclass Tooltip {\n private $container: DomElement\n private $targetElem: DomElement\n private editor: Editor\n private conf: TooltipConfType\n private _show: boolean\n private _isInsertTextContainer: boolean\n\n constructor(editor: Editor, $elem: DomElement, conf: TooltipConfType) {\n this.editor = editor\n this.$targetElem = $elem\n this.conf = conf\n this._show = false\n this._isInsertTextContainer = false\n\n // 定义 container\n const $container = $('<div></div>')\n $container.addClass('w-e-tooltip')\n this.$container = $container\n }\n\n /**\n * 获取 tooltip 定位\n */\n private getPositionData(): PositionDataType {\n const $container = this.$container\n\n let top = 0\n let left = 0\n\n // tooltip 的高度\n const tooltipHeight = 20\n // 网页的 scrollTop\n const pageScrollTop = document.documentElement.scrollTop\n // 目标元素的 rect\n const targetElemRect = this.$targetElem.getBoundingClientRect()\n // 编辑区域的 rect\n const textElemRect = this.editor.$textElem.getBoundingClientRect()\n // 获取基于 textContainerElem 的 位置信息\n const targetOffset = this.$targetElem.getOffsetData()\n const targetParentElem = $(targetOffset.parent)\n // 获取 编辑区域的滚动条信息\n const scrollTop = this.editor.$textElem.elems[0].scrollTop\n // 是否插入 textContainer 中\n this._isInsertTextContainer = targetParentElem.equal(this.editor.$textContainerElem)\n\n if (this._isInsertTextContainer) {\n // 父容器的高度\n const targetParentElemHeight = targetParentElem.getClientHeight()\n // 相对于父容器的位置信息\n const { top: offsetTop, left: offsetLeft, height: offsetHeight } = targetOffset\n // 元素基于父容器的 绝对top信息\n const absoluteTop = offsetTop - scrollTop\n if (absoluteTop > tooltipHeight + 5) {\n // 说明模板元素的顶部空间足够\n top = absoluteTop - tooltipHeight - 15\n $container.addClass('w-e-tooltip-up')\n } else if (absoluteTop + offsetHeight + tooltipHeight < targetParentElemHeight) {\n // 说明模板元素的底部空间足够\n top = absoluteTop + offsetHeight + 10\n $container.addClass('w-e-tooltip-down')\n } else {\n // 其他情况,tooltip 放在目标元素左上角\n top = (absoluteTop > 0 ? absoluteTop : 0) + tooltipHeight + 10\n $container.addClass('w-e-tooltip-down')\n }\n // 计算 left\n if (offsetLeft < 0) {\n left = 0\n } else {\n left = offsetLeft\n }\n } else {\n if (targetElemRect.top < tooltipHeight) {\n // 说明目标元素的顶部,因滑动隐藏在浏览器上方。tooltip 要放在目标元素下面\n top = targetElemRect.bottom + pageScrollTop + 5 // 5px 间距\n $container.addClass('w-e-tooltip-down')\n } else if (targetElemRect.top - textElemRect.top < tooltipHeight) {\n // 说明目标元素的顶部,因滑动隐藏在编辑区域上方。tooltip 要放在目标元素下面\n top = targetElemRect.bottom + pageScrollTop + 5 // 5px 间距\n $container.addClass('w-e-tooltip-down')\n } else {\n // 其他情况,tooltip 放在目标元素上方\n top = targetElemRect.top + pageScrollTop - tooltipHeight - 15 // 减去 toolbar 的高度,还有 15px 间距\n $container.addClass('w-e-tooltip-up')\n }\n // 计算 left\n if (targetElemRect.left < 0) {\n left = 0\n } else {\n left = targetElemRect.left\n }\n }\n\n // 返回结果\n return { top, left }\n }\n\n /**\n * 添加 tooltip 菜单\n */\n private appendMenus(): void {\n const conf = this.conf\n const editor = this.editor\n const $targetElem = this.$targetElem\n const $container = this.$container\n\n conf.forEach((item: TooltipConfItemType, index: number) => {\n // 添加元素\n const $elem = item.$elem\n const $wrapper = $('<div></div>')\n $wrapper.addClass('w-e-tooltip-item-wrapper ')\n $wrapper.append($elem)\n $container.append($wrapper)\n\n // 绑定点击事件\n $elem.on('click', (e: Event) => {\n e.preventDefault()\n const res = item.onClick(editor, $targetElem)\n if (res) this.remove()\n })\n })\n }\n\n /**\n * 创建 tooltip\n */\n public create(): void {\n const editor = this.editor\n const $container = this.$container\n\n // 生成 container 的内容\n this.appendMenus()\n\n // 设置定位\n const { top, left } = this.getPositionData()\n $container.css('top', `${top}px`)\n $container.css('left', `${left}px`)\n\n // 设置 z-index\n $container.css('z-index', editor.zIndex.get('tooltip'))\n\n // 添加到 DOM\n if (this._isInsertTextContainer) {\n this.editor.$textContainerElem.append($container)\n } else {\n $('body').append($container)\n }\n\n this._show = true\n }\n\n /**\n * 移除该 tooltip\n */\n public remove(): void {\n this.$container.remove()\n this._show = false\n }\n\n /**\n * 是否显示\n */\n public get isShow(): boolean {\n return this._show\n }\n}\n\nexport default Tooltip\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","module.exports = {};\n","var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n};\n","require('./es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","module.exports = require(\"core-js-pure/stable/instance/index-of\");","module.exports = require(\"core-js-pure/stable/instance/slice\");","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.8.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","module.exports = function () { /* empty */ };\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","module.exports = require(\"core-js-pure/stable/instance/bind\");","module.exports = require(\"core-js-pure/stable/instance/filter\");","module.exports = require(\"core-js-pure/stable/instance/splice\");","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var _Symbol$iterator = require(\"@babel/runtime-corejs3/core-js/symbol/iterator\");\n\nvar _Symbol = require(\"@babel/runtime-corejs3/core-js/symbol\");\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","/**\n * @description Menu class 父类\n * @author wangfupeng\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport Panel from './Panel'\n\nexport interface MenuActive {\n /**\n * 修改菜单激活状态,菜单是否高亮\n */\n tryChangeActive(): void\n}\n\nclass Menu {\n public key: string | undefined\n public $elem: DomElement\n public editor: Editor\n private _active: boolean // 菜单是否处于激活状态,如选中一段加粗文字时,bold 菜单要被激活(即高亮显示)\n\n constructor($elem: DomElement, editor: Editor) {\n this.$elem = $elem\n this.editor = editor\n this._active = false\n\n // 绑定菜单点击事件\n $elem.on('click', (e: Event) => {\n Panel.hideCurAllPanels() // 隐藏当前的所有 Panel\n\n // 触发菜单点击的钩子\n editor.txt.eventHooks.menuClickEvents.forEach(fn => fn())\n\n e.stopPropagation()\n if (editor.selection.getRange() == null) {\n return\n }\n this.clickHandler(e)\n })\n }\n\n /**\n * 菜单点击事件,子类可重写\n * @param e event\n */\n protected clickHandler(e: Event): void {}\n\n /**\n * 激活菜单,高亮显示\n */\n protected active(): void {\n this._active = true\n this.$elem.addClass('w-e-active')\n }\n\n /**\n * 取消激活,不再高亮显示\n */\n protected unActive(): void {\n this._active = false\n this.$elem.removeClass('w-e-active')\n }\n\n /**\n * 是否处于激活状态\n */\n public get isActive() {\n return this._active\n }\n}\n\nexport default Menu\n","/**\n * @description 上传图片\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { arrForEach, forEach } from '../../utils/util'\nimport post from '../../editor/upload/upload-core'\nimport Progress from '../../editor/upload/progress'\n\nexport type ResType = {\n errno: number | string\n data: string[]\n}\n\nclass UploadImg {\n private editor: Editor\n\n constructor(editor: Editor) {\n this.editor = editor\n }\n\n /**\n * 往编辑区域插入图片\n * @param src 图片地址\n */\n public insertImg(src: string): void {\n const editor = this.editor\n const config = editor.config\n\n const i18nPrefix = 'validate.'\n const t = (text: string, prefix: string = i18nPrefix): string => {\n return editor.i18next.t(prefix + text)\n }\n\n // 先插入图片,无论是否能成功\n editor.cmd.do('insertHTML', `<img src=\"${src}\" style=\"max-width:100%;\"/>`)\n // 执行回调函数\n config.linkImgCallback(src)\n\n // 加载图片\n let img: any = document.createElement('img')\n img.onload = () => {\n img = null\n }\n img.onerror = () => {\n config.customAlert(\n t('插入图片错误'),\n 'error',\n `wangEditor: ${t('插入图片错误')},${t('图片链接')} \"${src}\",${t('下载链接失败')}`\n )\n img = null\n }\n img.onabort = () => (img = null)\n img.src = src\n }\n\n /**\n * 上传图片\n * @param files 文件列表\n */\n public uploadImg(files: FileList | File[]): void {\n if (!files.length) {\n return\n }\n\n const editor = this.editor\n const config = editor.config\n\n // ------------------------------ i18next ------------------------------\n\n const i18nPrefix = 'validate.'\n const t = (text: string): string => {\n return editor.i18next.t(i18nPrefix + text)\n }\n\n // ------------------------------ 获取配置信息 ------------------------------\n\n // 服务端地址\n let uploadImgServer = config.uploadImgServer\n // base64 格式\n const uploadImgShowBase64 = config.uploadImgShowBase64\n // 图片最大体积\n const maxSize = config.uploadImgMaxSize\n const maxSizeM = maxSize / 1024 / 1024\n // 一次最多上传图片数量\n const maxLength = config.uploadImgMaxLength\n // 自定义 fileName\n const uploadFileName = config.uploadFileName\n // 自定义参数\n const uploadImgParams = config.uploadImgParams\n // 参数拼接到 url 中\n const uploadImgParamsWithUrl = config.uploadImgParamsWithUrl\n // 自定义 header\n const uploadImgHeaders = config.uploadImgHeaders\n // 钩子函数\n const hooks = config.uploadImgHooks\n // 上传图片超时时间\n const timeout = config.uploadImgTimeout\n // 跨域带 cookie\n const withCredentials = config.withCredentials\n // 自定义上传图片\n const customUploadImg = config.customUploadImg\n\n if (!customUploadImg) {\n // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传\n if (!uploadImgServer && !uploadImgShowBase64) {\n return\n }\n }\n\n // ------------------------------ 验证文件信息 ------------------------------\n const resultFiles: File[] = []\n const errInfos: string[] = []\n arrForEach(files, file => {\n const name = file.name\n const size = file.size\n\n // chrome 低版本 name === undefined\n if (!name || !size) {\n return\n }\n\n if (/\\.(jpg|jpeg|png|bmp|gif|webp)$/i.test(name) === false) {\n // 后缀名不合法,不是图片\n errInfos.push(`【${name}】${t('不是图片')}`)\n return\n }\n\n if (maxSize < size) {\n // 上传图片过大\n errInfos.push(`【${name}】${t('大于')} ${maxSizeM}M`)\n return\n }\n\n // 验证通过的加入结果列表\n resultFiles.push(file)\n })\n // 抛出验证信息\n if (errInfos.length) {\n config.customAlert(`${t('图片验证未通过')}: \\n` + errInfos.join('\\n'), 'warning')\n return\n }\n if (resultFiles.length > maxLength) {\n config.customAlert(t('一次最多上传') + maxLength + t('张图片'), 'warning')\n return\n }\n\n // ------------------------------ 自定义上传 ------------------------------\n if (customUploadImg && typeof customUploadImg === 'function') {\n customUploadImg(resultFiles, this.insertImg.bind(this))\n\n // 阻止以下代码执行,重要!!!\n return\n }\n\n // ------------------------------ 上传图片 ------------------------------\n\n // 添加图片数据\n const formData = new FormData()\n resultFiles.forEach((file: File, index: number) => {\n let name = uploadFileName || file.name\n if (resultFiles.length > 1) {\n // 多个文件时,filename 不能重复\n name = name + (index + 1)\n }\n formData.append(name, file)\n })\n if (uploadImgServer) {\n // 添加自定义参数\n const uploadImgServerArr = uploadImgServer.split('#')\n uploadImgServer = uploadImgServerArr[0]\n const uploadImgServerHash = uploadImgServerArr[1] || ''\n forEach(uploadImgParams, (key: string, val: string) => {\n // 因使用者反应,自定义参数不能默认 encode ,由 v3.1.1 版本开始注释掉\n // val = encodeURIComponent(val)\n\n // 第一,将参数拼接到 url 中\n if (uploadImgParamsWithUrl) {\n if (uploadImgServer.indexOf('?') > 0) {\n uploadImgServer += '&'\n } else {\n uploadImgServer += '?'\n }\n uploadImgServer = uploadImgServer + key + '=' + val\n }\n\n // 第二,将参数添加到 formData 中\n formData.append(key, val)\n })\n if (uploadImgServerHash) {\n uploadImgServer += '#' + uploadImgServerHash\n }\n\n // 开始上传\n const xhr = post(uploadImgServer, {\n timeout,\n formData,\n headers: uploadImgHeaders,\n withCredentials: !!withCredentials,\n beforeSend: xhr => {\n if (hooks.before) return hooks.before(xhr, editor, resultFiles)\n },\n onTimeout: xhr => {\n config.customAlert(t('上传图片超时'), 'error')\n if (hooks.timeout) hooks.timeout(xhr, editor)\n },\n onProgress: (percent, e) => {\n const progressBar = new Progress(editor)\n if (e.lengthComputable) {\n percent = e.loaded / e.total\n progressBar.show(percent)\n }\n },\n onError: xhr => {\n config.customAlert(\n t('上传图片错误'),\n 'error',\n `${t('上传图片错误')},${t('服务器返回状态')}: ${xhr.status}`\n )\n if (hooks.error) hooks.error(xhr, editor)\n },\n onFail: (xhr, resultStr) => {\n config.customAlert(\n t('上传图片失败'),\n 'error',\n t('上传图片返回结果错误') + `,${t('返回结果')}: ` + resultStr\n )\n if (hooks.fail) hooks.fail(xhr, editor, resultStr)\n },\n onSuccess: (xhr, result: ResType) => {\n if (hooks.customInsert) {\n // 自定义插入图片\n hooks.customInsert(this.insertImg.bind(this), result, editor)\n return\n }\n if (result.errno != '0') {\n // 返回格式不对,应该为 { errno: 0, data: [...] }\n config.customAlert(\n t('上传图片失败'),\n 'error',\n `${t('上传图片返回结果错误')},${t('返回结果')} errno=${result.errno}`\n )\n if (hooks.fail) hooks.fail(xhr, editor, result)\n return\n }\n\n // 成功,插入图片\n const data = result.data\n data.forEach(link => {\n this.insertImg(link)\n })\n\n // 钩子函数\n if (hooks.success) hooks.success(xhr, editor, result)\n },\n })\n if (typeof xhr === 'string') {\n // 上传被阻止\n config.customAlert(xhr, 'error')\n }\n\n // 阻止以下代码执行,重要!!!\n return\n }\n\n // ------------------------------ 显示 base64 格式 ------------------------------\n if (uploadImgShowBase64) {\n arrForEach(files, file => {\n const _this = this\n const reader = new FileReader()\n reader.readAsDataURL(file)\n reader.onload = function () {\n if (!this.result) return\n _this.insertImg(this.result.toString())\n }\n })\n }\n }\n}\n\nexport default UploadImg\n","/**\n * @description 双栈实现撤销恢复\n * @author fangzhicong\n */\n\nimport { CeilStack } from './stack'\n\nexport default class Cache<T> {\n /**\n * 正常操作(用户输入、js代码修改内容、恢复操作)产生的缓存\n */\n protected data: CeilStack<T>\n\n /**\n * 撤销操作产生的缓存(恢复操作时需要这些数据)\n */\n protected revokeData: CeilStack<T>\n\n /**\n * 上一步操作是否为 撤销/恢复\n */\n protected isRe: boolean = false\n\n constructor(protected maxSize: number) {\n this.data = new CeilStack(maxSize)\n this.revokeData = new CeilStack(maxSize)\n }\n\n /**\n * 返回当前栈中的数据长度。格式为:[正常的数据的条数,被撤销的数据的条数]\n */\n public get size() {\n return [this.data.size, this.revokeData.size]\n }\n\n /**\n * 重设数据缓存器的缓存长度(第一次有效)\n */\n public resetMaxSize(maxSize: number) {\n this.data.resetMax(maxSize)\n this.revokeData.resetMax(maxSize)\n }\n\n /**\n * 保存数据\n */\n public save(data: T) {\n if (this.isRe) {\n this.revokeData.clear()\n this.isRe = false\n }\n this.data.instack(data)\n return this\n }\n\n /**\n * 撤销\n * @param fn 撤销时,如果有数据,执行的回调函数\n */\n public revoke(fn: (data: T) => void) {\n !this.isRe && (this.isRe = true)\n let data = this.data.outstack()\n if (data) {\n this.revokeData.instack(data)\n fn(data)\n return true\n }\n return false\n }\n\n /**\n * 恢复\n * @param fn 恢复时,如果有数据,执行的回调函数\n */\n public restore(fn: (data: T) => void) {\n !this.isRe && (this.isRe = true)\n let data = this.revokeData.outstack()\n if (data) {\n this.data.instack(data)\n fn(data)\n return true\n }\n return false\n }\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) {\n if (options && options.unsafe && target[key]) target[key] = src[key];\n else redefine(target, key, src[key], options);\n } return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","module.exports = require(\"core-js-pure/stable/instance/includes\");","module.exports = require(\"core-js-pure/stable/map\");","'use strict';\nvar $ = require('./export');\nvar global = require('../internals/global');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isObject = require('../internals/is-object');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var exported = {};\n var Constructor;\n\n if (!DESCRIPTORS || typeof NativeConstructor != 'function'\n || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n ) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.REQUIRED = true;\n } else {\n Constructor = wrapper(function (target, iterable) {\n setInternalState(anInstance(target, Constructor, CONSTRUCTOR_NAME), {\n type: CONSTRUCTOR_NAME,\n collection: new NativeConstructor()\n });\n if (iterable != undefined) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in NativePrototype && !(IS_WEAK && KEY == 'clear')) {\n createNonEnumerableProperty(Constructor.prototype, KEY, function (a, b) {\n var collection = getInternalState(this).collection;\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n var result = collection[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n }\n });\n\n IS_WEAK || defineProperty(Constructor.prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).collection.size;\n }\n });\n }\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: true }, exported);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar defineProperty = require('../internals/object-define-property').f;\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + ++id, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!has(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar meta = module.exports = {\n REQUIRED: false,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, CONSTRUCTOR_NAME);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(C.prototype, IS_MAP ? {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(C.prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return C;\n },\n setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","module.exports = require(\"core-js-pure/stable/array/is-array\");","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","module.exports = require(\"core-js-pure/stable/set-timeout\");","/**\n * @description 样式配置\n * @author wangfupeng\n */\n\nexport default {\n zIndex: 10000,\n}\n","/**\n * @description 处理粘贴逻辑\n * @author wangfupeng\n */\n\nimport { replaceHtmlSymbol, forEach } from '../../utils/util'\nimport parseHtml from './parse-html'\n\n/**\n * 获取粘贴的纯文本\n * @param e Event 参数\n */\nexport function getPasteText(e: ClipboardEvent): string {\n // const clipboardData = e.clipboardData || (e.originalEvent && e.originalEvent.clipboardData)\n const clipboardData = e.clipboardData // 暂不考虑 originalEvent 的情况\n let pasteText = ''\n if (clipboardData == null) {\n pasteText = (window as any).clipboardData && (window as any).clipboardData.getData('text')\n } else {\n pasteText = clipboardData.getData('text/plain')\n }\n return replaceHtmlSymbol(pasteText)\n}\n\n/**\n * 获取粘贴的 html 字符串\n * @param e Event 参数\n * @param filterStyle 是否过滤 style 样式\n * @param ignoreImg 是否忽略 img 标签\n */\nexport function getPasteHtml(\n e: ClipboardEvent,\n filterStyle: boolean = true,\n ignoreImg: boolean = false\n): string {\n const clipboardData = e.clipboardData // 暂不考虑 originalEvent 的情况\n let pasteHtml = ''\n if (clipboardData) {\n pasteHtml = clipboardData.getData('text/html')\n }\n\n // 无法通过 'text/html' 格式获取 html,则尝试获取 text\n if (!pasteHtml) {\n const text = getPasteText(e)\n if (!text) {\n return '' // 没有找到任何文字,则返回\n }\n pasteHtml = `<p>${text}</p>`\n }\n\n // 剔除多余的标签、属性\n pasteHtml = parseHtml(pasteHtml, filterStyle, ignoreImg)\n\n return pasteHtml\n}\n\n/**\n * 获取粘贴的图片文件\n * @param e Event 参数\n */\nexport function getPasteImgs(e: ClipboardEvent): File[] {\n const result: File[] = []\n const txt = getPasteText(e)\n if (txt) {\n // 有文字,就忽略图片\n return result\n }\n\n const items = e.clipboardData?.items\n\n if (!items) return result\n\n forEach(items, (key, value) => {\n const type = value.type\n if (/image/i.test(type)) {\n result.push(value.getAsFile() as File)\n }\n })\n\n return result\n}\n","module.exports = require(\"core-js-pure/stable/set\");","/**\n * @description 下拉列表 class\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport DropListMenu from './DropListMenu'\nimport { EMPTY_FN } from '../../utils/const'\n\nexport type DropListItem = {\n $elem: DomElement\n value: string\n}\n\n// droplist 的配置数据\nexport type DropListConf = {\n title: string\n list: DropListItem[]\n type: string // 'list' 列表形式(如“标题”菜单); 'inline-block' 块状形式(如“颜色”菜单)\n clickHandler: (value: DropListItem['value']) => void\n width: number | 100\n}\n\nclass DropList {\n private menu: DropListMenu\n private conf: DropListConf\n private $container: DomElement\n private rendered: boolean\n private _show: boolean\n\n public hideTimeoutId: number\n public showTimeoutId: number\n\n constructor(menu: DropListMenu, conf: DropListConf) {\n this.hideTimeoutId = 0\n this.showTimeoutId = 0\n this.menu = menu\n this.conf = conf\n\n // 容器\n const $container = $('<div class=\"w-e-droplist\"></div>')\n\n // 标题\n const $title = $(`<p>${conf.title}</p>`)\n $title.addClass('w-e-dp-title')\n $container.append($title)\n\n // 列表和类型\n const list = conf.list || []\n const type = conf.type || 'list'\n // item 的点击事件\n const clickHandler = conf.clickHandler || EMPTY_FN\n\n // 加入 DOM 并绑定事件\n const $list = $('<ul class=\"' + (type === 'list' ? 'w-e-list' : 'w-e-block') + '\"></ul>')\n list.forEach(item => {\n const $elem = item.$elem\n\n const value = item.value\n const $li = $('<li class=\"w-e-item\"></li>')\n if ($elem) {\n $li.append($elem)\n $list.append($li)\n $li.on('click', () => {\n clickHandler(value)\n\n // item 点击之后,隐藏 list\n this.hideTimeoutId = window.setTimeout(() => {\n this.hide()\n })\n })\n }\n })\n $container.append($list)\n\n // 绑定隐藏事件\n $container.on('mouseleave', () => {\n this.hideTimeoutId = window.setTimeout(() => {\n this.hide()\n })\n })\n\n // 记录属性\n this.$container = $container\n this.rendered = false\n this._show = false\n }\n\n /**\n * 显示 DropList\n */\n public show() {\n if (this.hideTimeoutId) {\n // 清除之前的定时隐藏\n clearTimeout(this.hideTimeoutId)\n }\n\n const menu = this.menu\n const $menuELem = menu.$elem\n const $container = this.$container\n if (this._show) {\n return\n }\n if (this.rendered) {\n // 显示\n $container.show()\n } else {\n // 加入 DOM 之前先定位位置\n const menuHeight = $menuELem.getSizeData().height || 0\n const width = this.conf.width || 100 // 默认为 100\n $container.css('margin-top', menuHeight + 'px').css('width', width + 'px')\n\n // 加入到 DOM\n $menuELem.append($container)\n this.rendered = true\n }\n\n // 修改属性\n this._show = true\n }\n\n /**\n * 隐藏 DropList\n */\n public hide() {\n if (this.showTimeoutId) {\n // 清除之前的定时显示\n clearTimeout(this.showTimeoutId)\n }\n\n const $container = this.$container\n if (!this._show) {\n return\n }\n // 隐藏并需改属性\n $container.hide()\n this._show = false\n }\n\n public get isShow() {\n return this._show\n }\n}\n\nexport default DropList\n","/**\n * @description 检查选区是否在链接中,即菜单是否应该 active\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\n\nfunction isActive(editor: Editor): boolean {\n const $selectionELem = editor.selection.getSelectionContainerElem()\n if (!$selectionELem) {\n return false\n }\n if ($selectionELem.getNodeName() === 'A') {\n return true\n } else {\n return false\n }\n}\n\nexport default isActive\n","/**\n * @description 检查选区是否在代码中,即菜单是否应该 active\n * @author lkw\n */\n\nimport Editor from '../../editor/index'\n\nfunction isActive(editor: Editor): boolean {\n const $selectionELem = editor.selection.getSelectionContainerElem()\n if (!$selectionELem) {\n return false\n }\n if (\n $selectionELem.getNodeName() == 'CODE' ||\n $selectionELem.getNodeName() == 'PRE' ||\n $selectionELem.parent().getNodeName() == 'CODE' ||\n $selectionELem.parent().getNodeName() == 'PRE' ||\n /hljs/.test($selectionELem.parent().attr('class'))\n ) {\n return true\n } else {\n return false\n }\n}\n\nexport default isActive\n","/**\n * @description 入口文件\n * @author wangfupeng\n */\n\nimport './assets/style/common.less'\nimport './assets/style/icon.less'\nimport './assets/style/menus.less'\nimport './assets/style/text.less'\nimport './assets/style/panel.less'\nimport './assets/style/droplist.less'\n\nimport './utils/polyfill'\nimport Editor from './editor/index'\n\nexport * from './menus/menu-constructors/index'\n\n// 检验是否浏览器环境\ntry {\n document\n} catch (ex) {\n throw new Error('请在浏览器环境下运行')\n}\n\nexport default Editor\n","var parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","require('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModile = require('../internals/object-define-property');\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperty: objectDefinePropertyModile.f\n});\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var parent = require('../../es/object/create');\n\nmodule.exports = parent;\n","require('../../modules/es.object.create');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function create(P, D) {\n return Object.create(P, D);\n};\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./common.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-toolbar,\\n.w-e-text-container,\\n.w-e-menu-panel {\\n padding: 0;\\n margin: 0;\\n box-sizing: border-box;\\n background-color: #fff;\\n /*表情菜单样式*/\\n /*分割线样式*/\\n}\\n.w-e-toolbar .eleImg,\\n.w-e-text-container .eleImg,\\n.w-e-menu-panel .eleImg {\\n cursor: pointer;\\n display: inline-block;\\n font-size: 18px;\\n padding: 0 3px;\\n}\\n.w-e-toolbar *,\\n.w-e-text-container *,\\n.w-e-menu-panel * {\\n padding: 0;\\n margin: 0;\\n box-sizing: border-box;\\n}\\n.w-e-toolbar hr,\\n.w-e-text-container hr,\\n.w-e-menu-panel hr {\\n cursor: pointer;\\n display: block;\\n height: 0px;\\n border: 0;\\n border-top: 3px solid #ccc;\\n margin: 20px 0;\\n}\\n.w-e-clear-fix:after {\\n content: \\\"\\\";\\n display: table;\\n clear: both;\\n}\\n.w-e-drop-list-item {\\n position: relative;\\n top: 1px;\\n padding-right: 7px;\\n color: #333 !important;\\n}\\n.w-e-drop-list-tl {\\n padding-left: 10px;\\n text-align: left;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./icon.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_GET_URL_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL_IMPORT_0___ = require(\"../font/w-e-icon.woff?ddq1c7\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\nexports.push([module.id, \"@font-face {\\n font-family: 'w-e-icon';\\n src: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \") format('truetype');\\n font-weight: normal;\\n font-style: normal;\\n}\\n[class^=\\\"w-e-icon-\\\"],\\n[class*=\\\" w-e-icon-\\\"] {\\n /* use !important to prevent issues with browser extensions that change fonts */\\n font-family: 'w-e-icon' !important;\\n speak: none;\\n font-style: normal;\\n font-weight: normal;\\n font-variant: normal;\\n text-transform: none;\\n line-height: 1;\\n /* Better Font Rendering =========== */\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n.w-e-icon-close:before {\\n content: \\\"\\\\f00d\\\";\\n}\\n.w-e-icon-upload2:before {\\n content: \\\"\\\\e9c6\\\";\\n}\\n.w-e-icon-trash-o:before {\\n content: \\\"\\\\f014\\\";\\n}\\n.w-e-icon-header:before {\\n content: \\\"\\\\f1dc\\\";\\n}\\n.w-e-icon-pencil2:before {\\n content: \\\"\\\\e906\\\";\\n}\\n.w-e-icon-paint-brush:before {\\n content: \\\"\\\\f1fc\\\";\\n}\\n.w-e-icon-image:before {\\n content: \\\"\\\\e90d\\\";\\n}\\n.w-e-icon-play:before {\\n content: \\\"\\\\e912\\\";\\n}\\n.w-e-icon-location:before {\\n content: \\\"\\\\e947\\\";\\n}\\n.w-e-icon-undo:before {\\n content: \\\"\\\\e965\\\";\\n}\\n.w-e-icon-redo:before {\\n content: \\\"\\\\e966\\\";\\n}\\n.w-e-icon-quotes-left:before {\\n content: \\\"\\\\e977\\\";\\n}\\n.w-e-icon-list-numbered:before {\\n content: \\\"\\\\e9b9\\\";\\n}\\n.w-e-icon-list2:before {\\n content: \\\"\\\\e9bb\\\";\\n}\\n.w-e-icon-link:before {\\n content: \\\"\\\\e9cb\\\";\\n}\\n.w-e-icon-happy:before {\\n content: \\\"\\\\e9df\\\";\\n}\\n.w-e-icon-bold:before {\\n content: \\\"\\\\ea62\\\";\\n}\\n.w-e-icon-underline:before {\\n content: \\\"\\\\ea63\\\";\\n}\\n.w-e-icon-italic:before {\\n content: \\\"\\\\ea64\\\";\\n}\\n.w-e-icon-strikethrough:before {\\n content: \\\"\\\\ea65\\\";\\n}\\n.w-e-icon-table2:before {\\n content: \\\"\\\\ea71\\\";\\n}\\n.w-e-icon-paragraph-left:before {\\n content: \\\"\\\\ea77\\\";\\n}\\n.w-e-icon-paragraph-center:before {\\n content: \\\"\\\\ea78\\\";\\n}\\n.w-e-icon-paragraph-right:before {\\n content: \\\"\\\\ea79\\\";\\n}\\n.w-e-icon-paragraph-justify:before {\\n content: \\\"\\\\ea7a\\\";\\n}\\n.w-e-icon-terminal:before {\\n content: \\\"\\\\f120\\\";\\n}\\n.w-e-icon-page-break:before {\\n content: \\\"\\\\ea68\\\";\\n}\\n.w-e-icon-cancel-circle:before {\\n content: \\\"\\\\ea0d\\\";\\n}\\n.w-e-icon-font:before {\\n content: \\\"\\\\ea5c\\\";\\n}\\n.w-e-icon-text-heigh:before {\\n content: \\\"\\\\ea5f\\\";\\n}\\n.w-e-icon-paint-format:before {\\n content: \\\"\\\\e90c\\\";\\n}\\n.w-e-icon-indent-increase:before {\\n content: \\\"\\\\ea7b\\\";\\n}\\n.w-e-icon-indent-decrease:before {\\n content: \\\"\\\\ea7c\\\";\\n}\\n.w-e-icon-row-height:before {\\n content: \\\"\\\\e9be\\\";\\n}\\n.w-e-icon-fullscreen_exit:before {\\n content: \\\"\\\\e900\\\";\\n}\\n.w-e-icon-fullscreen:before {\\n content: \\\"\\\\e901\\\";\\n}\\n.w-e-icon-split-line:before {\\n content: \\\"\\\\ea0b\\\";\\n}\\n.w-e-icon-checkbox-checked:before {\\n content: \\\"\\\\ea52\\\";\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n }\n\n return url;\n};","export default \"data:font/woff;base64,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\"","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./menus.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-toolbar {\\n display: flex;\\n padding: 0 6px;\\n flex-wrap: wrap;\\n position: relative;\\n /* 单个菜单 */\\n}\\n.w-e-toolbar .w-e-menu {\\n position: relative;\\n display: flex;\\n width: 40px;\\n height: 40px;\\n align-items: center;\\n justify-content: center;\\n text-align: center;\\n cursor: pointer;\\n}\\n.w-e-toolbar .w-e-menu i {\\n color: #999;\\n}\\n.w-e-toolbar .w-e-menu:hover {\\n background-color: #F6F6F6;\\n}\\n.w-e-toolbar .w-e-menu:hover i {\\n color: #333;\\n}\\n.w-e-toolbar .w-e-active i {\\n color: #1e88e5;\\n}\\n.w-e-toolbar .w-e-active:hover i {\\n color: #1e88e5;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./text.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-text-container {\\n position: relative;\\n}\\n.w-e-text-container .w-e-progress {\\n position: absolute;\\n background-color: #1e88e5;\\n top: 0;\\n left: 0;\\n height: 1px;\\n}\\n.w-e-text-container .placeholder {\\n color: #D4D4D4;\\n position: absolute;\\n font-size: 11pt;\\n line-height: 22px;\\n left: 10px;\\n top: 10px;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n z-index: -1;\\n}\\n.w-e-text {\\n padding: 0 10px;\\n overflow-y: auto;\\n}\\n.w-e-text p,\\n.w-e-text h1,\\n.w-e-text h2,\\n.w-e-text h3,\\n.w-e-text h4,\\n.w-e-text h5,\\n.w-e-text table,\\n.w-e-text pre {\\n margin: 10px 0;\\n line-height: 1.5;\\n}\\n.w-e-text ul,\\n.w-e-text ol {\\n margin: 10px 0 10px 20px;\\n}\\n.w-e-text blockquote {\\n display: block;\\n border-left: 8px solid #d0e5f2;\\n padding: 5px 10px;\\n margin: 10px 0;\\n line-height: 1.4;\\n font-size: 100%;\\n background-color: #f1f1f1;\\n}\\n.w-e-text code {\\n display: inline-block;\\n background-color: #f1f1f1;\\n border-radius: 3px;\\n padding: 3px 5px;\\n margin: 0 3px;\\n}\\n.w-e-text pre code {\\n display: block;\\n}\\n.w-e-text table {\\n border-top: 1px solid #ccc;\\n border-left: 1px solid #ccc;\\n}\\n.w-e-text table td,\\n.w-e-text table th {\\n border-bottom: 1px solid #ccc;\\n border-right: 1px solid #ccc;\\n padding: 3px 5px;\\n min-height: 30px;\\n}\\n.w-e-text table th {\\n border-bottom: 2px solid #ccc;\\n text-align: center;\\n background-color: #f1f1f1;\\n}\\n.w-e-text:focus {\\n outline: none;\\n}\\n.w-e-text img {\\n cursor: pointer;\\n}\\n.w-e-text img:hover {\\n box-shadow: 0 0 5px #333;\\n}\\n.w-e-tooltip {\\n position: absolute;\\n display: flex;\\n color: #f1f1f1;\\n background-color: rgba(0, 0, 0, 0.75);\\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.15);\\n border-radius: 4px;\\n padding: 4px 5px 6px;\\n justify-content: center;\\n align-items: center;\\n}\\n.w-e-tooltip-up::after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 100%;\\n left: 50%;\\n margin-left: -5px;\\n border: 5px solid rgba(0, 0, 0, 0);\\n border-top-color: rgba(0, 0, 0, 0.73);\\n}\\n.w-e-tooltip-down::after {\\n content: \\\"\\\";\\n position: absolute;\\n bottom: 100%;\\n left: 50%;\\n margin-left: -5px;\\n border: 5px solid rgba(0, 0, 0, 0);\\n border-bottom-color: rgba(0, 0, 0, 0.73);\\n}\\n.w-e-tooltip-item-wrapper {\\n cursor: pointer;\\n font-size: 14px;\\n margin: 0 5px;\\n}\\n.w-e-tooltip-item-wrapper:hover {\\n color: #ccc;\\n text-decoration: underline;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./panel.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-menu .w-e-panel-container {\\n position: absolute;\\n top: 0;\\n left: 50%;\\n border: 1px solid #ccc;\\n border-top: 0;\\n box-shadow: 1px 1px 2px #ccc;\\n color: #333;\\n background-color: #fff;\\n text-align: left;\\n /* 为 emotion panel 定制的样式 */\\n /* 上传图片的 panel 定制样式 */\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-close {\\n position: absolute;\\n right: 0;\\n top: 0;\\n padding: 5px;\\n margin: 2px 5px 0 0;\\n cursor: pointer;\\n color: #999;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-close:hover {\\n color: #333;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title {\\n list-style: none;\\n display: flex;\\n font-size: 14px;\\n margin: 2px 10px 0 10px;\\n border-bottom: 1px solid #f1f1f1;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-item {\\n padding: 3px 5px;\\n color: #999;\\n cursor: pointer;\\n margin: 0 3px;\\n position: relative;\\n top: 1px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-title .w-e-active {\\n color: #333;\\n border-bottom: 1px solid #333;\\n cursor: default;\\n font-weight: 700;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content {\\n padding: 10px 15px 10px 15px;\\n font-size: 16px;\\n /* 输入框的样式 */\\n /* 按钮的样式 */\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input:focus,\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus,\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content button:focus {\\n outline: none;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea {\\n width: 100%;\\n border: 1px solid #ccc;\\n padding: 5px;\\n margin-top: 10px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content textarea:focus {\\n border-color: #1e88e5;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text] {\\n border: none;\\n border-bottom: 1px solid #ccc;\\n font-size: 14px;\\n height: 20px;\\n color: #333;\\n text-align: left;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].small {\\n width: 30px;\\n text-align: center;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text].block {\\n display: block;\\n width: 100%;\\n margin: 10px 0;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus {\\n border-bottom: 2px solid #1e88e5;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button {\\n font-size: 14px;\\n color: #1e88e5;\\n border: none;\\n padding: 5px 10px;\\n background-color: #fff;\\n cursor: pointer;\\n border-radius: 3px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left {\\n float: left;\\n margin-right: 10px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right {\\n float: right;\\n margin-left: 10px;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray {\\n color: #999;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red {\\n color: #c24f4a;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover {\\n background-color: #f1f1f1;\\n}\\n.w-e-menu .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after {\\n content: \\\"\\\";\\n display: table;\\n clear: both;\\n}\\n.w-e-menu .w-e-panel-container .w-e-emoticon-container .w-e-item {\\n cursor: pointer;\\n font-size: 18px;\\n padding: 0 3px;\\n display: inline-block;\\n}\\n.w-e-menu .w-e-panel-container .w-e-up-img-container {\\n text-align: center;\\n}\\n.w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn {\\n display: inline-block;\\n color: #999;\\n cursor: pointer;\\n font-size: 60px;\\n line-height: 1;\\n}\\n.w-e-menu .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover {\\n color: #333;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./droplist.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-toolbar .w-e-droplist {\\n position: absolute;\\n left: 0;\\n top: 0;\\n background-color: #fff;\\n border: 1px solid #f1f1f1;\\n border-right-color: #ccc;\\n border-bottom-color: #ccc;\\n}\\n.w-e-toolbar .w-e-droplist .w-e-dp-title {\\n text-align: center;\\n color: #999;\\n line-height: 2;\\n border-bottom: 1px solid #f1f1f1;\\n font-size: 13px;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-list {\\n list-style: none;\\n line-height: 1;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item {\\n color: #333;\\n padding: 5px 0;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover {\\n background-color: #f1f1f1;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-block {\\n list-style: none;\\n text-align: left;\\n padding: 5px;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item {\\n display: inline-block;\\n padding: 3px 5px;\\n}\\n.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover {\\n background-color: #f1f1f1;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * @description polyfill 【注意,js 语法的兼容,都通过 babel transform runtime 支持】\n * @author wangfupeng\n */\n\nif (!Element.prototype.matches) {\n Element.prototype.matches = function (s) {\n let matches: NodeListOf<Element> = this.ownerDocument.querySelectorAll(s)\n let i: number = matches.length\n for (i; i >= 0; i--) {\n if (matches.item(i) === this) break\n }\n return i > -1\n }\n}\n\n// 有的第三方库需要原生 Promise ,而 IE11 又没有原生 Promise ,就报错\nif (!window.Promise) {\n window.Promise = Promise\n}\n","module.exports = require(\"core-js-pure/stable/promise\");","var parent = require('../../es/promise');\n\nmodule.exports = parent;\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","'use strict';\nvar $ = require('../internals/export');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar iterate = require('../internals/iterate');\n\nvar $AggregateError = function AggregateError(errors, message) {\n var that = this;\n if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message);\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', String(message));\n var errorsArray = [];\n iterate(errors, errorsArray.push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\n$AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(5, $AggregateError),\n message: createPropertyDescriptor(5, ''),\n name: createPropertyDescriptor(5, 'AggregateError')\n});\n\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar PromiseConstructor = NativePromise;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar $fetch = getBuiltIn('fetch');\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n if (!GLOBAL_CORE_JS_PROMISE) {\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (V8_VERSION === 66) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n if (!IS_NODE && !NATIVE_REJECTION_EVENT) return true;\n }\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = PromiseConstructor.resolve(1);\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n return !(promise.then(function () { /* empty */ }) instanceof FakePromise);\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\n // `Promise.prototype.then` method\n // https://tc39.github.io/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.github.io/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function') {\n nativeThen = NativePromise.prototype.then;\n\n // wrap native Promise#then for native async functions\n redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // wrap fetch result\n if (typeof $fetch == 'function') $({ global: true, enumerable: true, forced: true }, {\n // eslint-disable-next-line no-unused-vars\n fetch: function fetch(input /* , init */) {\n return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\n }\n });\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.github.io/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.github.io/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.github.io/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.github.io/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n if (!IS_IOS && !IS_NODE && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://github.com/tc39/proposal-promise-allSettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aFunction = require('../internals/a-function');\nvar getBuiltIn = require('../internals/get-built-in');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://github.com/tc39/proposal-promise-any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aFunction(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n errors.push(undefined);\n remaining++;\n promiseResolve.call(C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.github.io/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","/**\n * @description 编辑器 class\n * @author wangfupeng\n */\n\nimport $, { DomElement, DomElementSelector } from '../utils/dom-core'\nimport { deepClone } from '../utils/util'\nimport defaultConfig, { ConfigType } from '../config'\nimport SelectionAndRangeAPI from './selection'\nimport CommandAPI from './command'\nimport Text from '../text/index'\nimport Menus from '../menus/index'\nimport initDom from './init-fns/init-dom'\nimport initSelection from './init-fns/init-selection'\nimport bindEvent from './init-fns/bind-event'\nimport i18nextInit from './init-fns/i18next-init'\nimport initFullScreen, { setUnFullScreen, setFullScreen } from './init-fns/set-full-screen'\nimport scrollToHead from './init-fns/scroll-to-head'\nimport ZIndex from './z-index'\nimport Change from './change/index'\nimport History from './history/index'\nimport disableInit from './disable'\n\n// 创建菜单的 class\nimport BtnMenu from '../menus/menu-constructors/BtnMenu'\nimport DropList from '../menus/menu-constructors/DropList'\nimport DropListMenu from '../menus/menu-constructors/DropListMenu'\nimport Panel from '../menus/menu-constructors/Panel'\nimport PanelMenu from '../menus/menu-constructors/PanelMenu'\nimport Tooltip from '../menus/menu-constructors/Tooltip'\n\nlet EDITOR_ID = 1\n\nclass Editor {\n // 暴露 $\n static $ = $\n\n static BtnMenu = BtnMenu\n static DropList = DropList\n static DropListMenu = DropListMenu\n static Panel = Panel\n static PanelMenu = PanelMenu\n static Tooltip = Tooltip\n\n public id: string\n public toolbarSelector: DomElementSelector\n public textSelector?: DomElementSelector\n public config: ConfigType\n public $toolbarElem: DomElement\n public $textContainerElem: DomElement\n public $textElem: DomElement\n public toolbarElemId: string\n public textElemId: string\n public isFocus: boolean\n public isComposing: boolean\n public isCompatibleMode: boolean\n public selection: SelectionAndRangeAPI\n public cmd: CommandAPI\n public txt: Text\n public menus: Menus\n public i18next: any\n public highlight: any\n public zIndex: ZIndex\n public change: Change\n public history: History\n\n // 实例销毁前需要执行的钩子集合\n private beforeDestroyHooks: Function[] = []\n\n /** 禁用api */\n public disable: Function\n\n /** 启用api */\n public enable: Function\n\n /**\n * 构造函数\n * @param toolbarSelector 工具栏 DOM selector\n * @param textSelector 文本区域 DOM selector\n */\n constructor(toolbarSelector: DomElementSelector, textSelector?: DomElementSelector) {\n // id,用以区分单个页面不同的编辑器对象\n this.id = `wangEditor-${EDITOR_ID++}`\n\n this.toolbarSelector = toolbarSelector\n this.textSelector = textSelector\n\n if (toolbarSelector == null) {\n throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档')\n }\n\n // 属性的默认值,后面可能会再修改\n // 默认配置 - 当一个页面有多个编辑器的时候,因为 JS 的特性(引用类型)会导致多个编辑器的 config 引用是同一个,所以需要 深度克隆 断掉引用\n this.config = deepClone(defaultConfig)\n this.$toolbarElem = $('<div></div>')\n this.$textContainerElem = $('<div></div>')\n this.$textElem = $('<div></div>')\n this.toolbarElemId = ''\n this.textElemId = ''\n this.isFocus = false\n this.isComposing = false\n this.isCompatibleMode = false\n\n this.selection = new SelectionAndRangeAPI(this)\n this.cmd = new CommandAPI(this)\n this.txt = new Text(this)\n this.menus = new Menus(this)\n this.zIndex = new ZIndex()\n this.change = new Change(this)\n this.history = new History(this)\n\n const { disable, enable } = disableInit(this)\n this.disable = disable\n this.enable = enable\n }\n\n /**\n * 初始化选区\n * @param newLine 新建一行\n */\n public initSelection(newLine?: boolean): void {\n initSelection(this, newLine)\n }\n\n /**\n * 创建编辑器实例\n */\n public create(): void {\n // 初始化 ZIndex\n this.zIndex.init(this)\n\n // 确定当前的历史记录模式\n this.isCompatibleMode = this.config.compatibleMode()\n\n // 标准模式下,重置延迟时间\n if (!this.isCompatibleMode) {\n this.config.onchangeTimeout = 30\n }\n\n // 国际化 因为要在创建菜单前使用 所以要最先 初始化\n i18nextInit(this)\n\n // 初始化 DOM\n initDom(this)\n\n // 初始化 text\n this.txt.init()\n\n // 初始化菜单\n this.menus.init()\n\n // 初始化全屏功能\n initFullScreen(this)\n\n // 初始化选区,将光标定位到内容尾部\n this.initSelection(true)\n\n // 绑定事件\n bindEvent(this)\n\n // 绑定监听的目标节点\n this.change.observe()\n\n this.history.observe()\n }\n\n /**\n * 提供给用户添加销毁前的钩子函数\n * @param fn 钩子函数\n */\n public beforeDestroy(fn: Function): Editor {\n this.beforeDestroyHooks.push(fn)\n return this\n }\n\n /**\n * 销毁当前编辑器实例\n */\n public destroy(): void {\n // 调用钩子函数\n this.beforeDestroyHooks.forEach(fn => fn.call(this))\n\n // 销毁 DOM 节点\n this.$toolbarElem.remove()\n this.$textContainerElem.remove()\n }\n\n /**\n * 将编辑器设置为全屏\n */\n public fullScreen(): void {\n setFullScreen(this)\n }\n\n /**\n * 将编辑器退出全屏\n */\n public unFullScreen(): void {\n setUnFullScreen(this)\n }\n\n /**\n * 滚动到指定标题锚点\n * @param id 标题锚点id\n */\n public scrollToHead(id: string): void {\n scrollToHead(this, id)\n }\n}\n\nexport default Editor\n","require('../../modules/web.dom-collections.iterator');\nvar forEach = require('../array/virtual/for-each');\nvar classof = require('../../internals/classof');\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.forEach;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.forEach)\n // eslint-disable-next-line no-prototype-builtins\n || DOMIterables.hasOwnProperty(classof(it)) ? forEach : own;\n};\n","var parent = require('../../../es/array/virtual/for-each');\n\nmodule.exports = parent;\n","require('../../../modules/es.array.for-each');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","var parent = require('../../es/instance/bind');\n\nmodule.exports = parent;\n","var bind = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n var own = it.bind;\n return it === FunctionPrototype || (it instanceof Function && own === FunctionPrototype.bind) ? bind : own;\n};\n","require('../../../modules/es.function.bind');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Function').bind;\n","var $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.github.io/ecma262/#sec-function.prototype.bind\n$({ target: 'Function', proto: true }, {\n bind: bind\n});\n","'use strict';\nvar aFunction = require('../internals/a-function');\nvar isObject = require('../internals/is-object');\n\nvar slice = [].slice;\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!(argsLength in factories)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.github.io/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = slice.call(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = partArgs.concat(slice.call(arguments));\n return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);\n };\n if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;\n return boundFunction;\n};\n","var parent = require('../../es/instance/includes');\n\nmodule.exports = parent;\n","var arrayIncludes = require('../array/virtual/includes');\nvar stringIncludes = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.includes;\n if (it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.includes)) return arrayIncludes;\n if (typeof it === 'string' || it === StringPrototype || (it instanceof String && own === StringPrototype.includes)) {\n return stringIncludes;\n } return own;\n};\n","require('../../../modules/es.array.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').includes;\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: !USES_TO_LENGTH }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","require('../../../modules/es.string.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').includes;\n","'use strict';\nvar $ = require('../internals/export');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","var parent = require('../../es/instance/filter');\n\nmodule.exports = parent;\n","var filter = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.filter;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.filter) ? filter : own;\n};\n","require('../../../modules/es.array.filter');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').filter;\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var parent = require('../../es/instance/splice');\n\nmodule.exports = parent;\n","var splice = require('../array/virtual/splice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.splice;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.splice) ? splice : own;\n};\n","require('../../../modules/es.array.splice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').splice;\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var parent = require('../../es/instance/index-of');\n\nmodule.exports = parent;\n","var indexOf = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.indexOf;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.indexOf) ? indexOf : own;\n};\n","require('../../../modules/es.array.index-of');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').indexOf;\n","'use strict';\nvar $ = require('../internals/export');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });\n\n// `Array.prototype.indexOf` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var parent = require('../../es/map');\n\nmodule.exports = parent;\n","require('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.github.io/ecma262/#sec-map-objects\nmodule.exports = collection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var parent = require('../../es/instance/trim');\n\nmodule.exports = parent;\n","var trim = require('../string/virtual/trim');\n\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.trim;\n return typeof it === 'string' || it === StringPrototype\n || (it instanceof String && own === StringPrototype.trim) ? trim : own;\n};\n","require('../../../modules/es.string.trim');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').trim;\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","var parent = require('../../es/instance/map');\n\nmodule.exports = parent;\n","var map = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.map;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.map) ? map : own;\n};\n","require('../../../modules/es.array.map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').map;\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n// FF49- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('map');\n\n// `Array.prototype.map` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n","require('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n","var $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.github.io/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","module.exports = require(\"core-js-pure/features/symbol/iterator\");","var parent = require('../../es/symbol/iterator');\n\nmodule.exports = parent;\n","require('../../modules/es.symbol.iterator');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","module.exports = require(\"core-js-pure/features/symbol\");","var parent = require('../../es/symbol');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.observable');\nrequire('../../modules/esnext.symbol.pattern-match');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n concat: function concat(arg) { // eslint-disable-line no-unused-vars\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.github.io/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.github.io/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.github.io/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.match` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.search` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.species` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.split` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('asyncDispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('dispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\ndefineWellKnownSymbol('replaceAll');\n","require('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setTimeout;\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\n\nvar wrap = function (scheduler) {\n return function (handler, timeout /* , ...arguments */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : undefined;\n return scheduler(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);\n } : handler, timeout);\n };\n};\n\n// ie9- setTimeout & setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n$({ global: true, bind: true, forced: MSIE }, {\n // `setTimeout` method\n // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n setTimeout: wrap(global.setTimeout),\n // `setInterval` method\n // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n setInterval: wrap(global.setInterval)\n});\n","var parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n","var slice = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.slice;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.slice) ? slice : own;\n};\n","require('../../../modules/es.array.slice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').slice;\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","module.exports = require(\"core-js-pure/stable/parse-int\");","var parent = require('../es/parse-int');\n\nmodule.exports = parent;\n","require('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n","var $ = require('../internals/export');\nvar parseIntImplementation = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != parseIntImplementation }, {\n parseInt: parseIntImplementation\n});\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar hex = /^[+-]?0[Xx]/;\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;\n\n// `parseInt` method\n// https://tc39.github.io/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(String(string));\n return $parseInt(S, (radix >>> 0) || (hex.test(S) ? 16 : 10));\n} : $parseInt;\n","/**\n * @description 编辑器配置\n * @author wangfupeng\n */\n\nimport menusConfig, { EmotionsType, FontSizeConfType, IndentationType } from './menus'\nimport eventsConfig from './events'\nimport styleConfig from './style'\nimport pasteConfig from './paste'\nimport cmdConfig from './cmd'\nimport imageConfig, { UploadImageHooksType } from './image'\nimport textConfig from './text'\nimport langConfig from './lang'\nimport historyConfig from './history'\n\n// 字典类型\nexport type DicType = {\n [key: string]: string\n}\n\n// 定义配置项的类型规范\nexport type ConfigType = {\n height: number\n languageType: string[]\n languageTab: string\n menus: string[]\n fontNames: string[]\n lineHeights: string[]\n indentation: IndentationType\n fontSizes: FontSizeConfType\n colors: string[]\n emotions: EmotionsType[]\n zIndex: number\n onchange: Function\n onfocus: Function\n onblur: Function\n onchangeTimeout: number\n pasteFilterStyle: boolean\n pasteIgnoreImg: boolean\n pasteTextHandle: Function\n styleWithCSS: boolean\n linkImgCallback: Function\n\n placeholder: string\n zIndexFullScreen: number\n showFullScreen: boolean\n showLinkImg: boolean\n uploadImgAccept: string[]\n uploadImgServer: string\n uploadImgShowBase64: boolean\n uploadImgMaxSize: number\n uploadImgMaxLength: number\n uploadFileName: string\n uploadImgParams: DicType\n uploadImgParamsWithUrl: boolean\n uploadImgHeaders: DicType\n uploadImgHooks: UploadImageHooksType\n uploadImgTimeout: number\n withCredentials: boolean\n customUploadImg: Function | null\n customAlert: Function\n\n onCatalogChange: Function | null\n\n lang: string\n languages: typeof langConfig\n\n linkCheck: Function\n linkImgCheck: Function\n compatibleMode: () => boolean\n historyMaxSize: number\n\n focus: boolean\n}\n\nexport type Resource = {\n [language: string]: ResourceLanguage\n}\n\nexport type ResourceLanguage = {\n [namespace: string]: ResourceKey\n}\n\nexport type ResourceKey =\n | string\n | {\n [key: string]: any\n }\n\n// 合并所有的配置信息\nconst defaultConfig = Object.assign(\n {},\n menusConfig,\n eventsConfig,\n styleConfig,\n cmdConfig,\n pasteConfig,\n imageConfig,\n textConfig,\n langConfig,\n historyConfig,\n //链接校验的配置函数\n {\n linkCheck: function (text: string, link: string): string | boolean {\n return true\n },\n },\n //网络图片校验的配置函数\n {\n linkImgCheck: function (src: string): string | boolean {\n return true\n },\n }\n)\n\nexport default defaultConfig\n","module.exports = require(\"core-js-pure/stable/object/assign\");","var parent = require('../../es/object/assign');\n\nmodule.exports = parent;\n","require('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","/**\n * @description 菜单配置\n * @author wangfupeng\n */\n\nconst SINA_PATH1 = 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal'\nconst SINA_PATH2 = 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal'\n\n// 表情菜单数据结构类型\nexport type EmotionsContentType = {\n alt: string\n src: string\n}\nexport type EmotionsType = {\n title: string\n type: string\n content: Array<EmotionsContentType | string>\n}\n\n// font-size 类型\nexport type FontSizeConfType = {\n [key: string]: {\n name: string\n value: string\n }\n}\n\n// indent\nexport interface IndentationOptions {\n value: number\n unit: string\n}\nexport type IndentationType = string | IndentationOptions\n\n/*表情菜单数据结构类型END*/\nexport default {\n menus: [\n 'head',\n 'bold',\n 'fontSize',\n // 'customFontSize',\n 'fontName',\n 'italic',\n 'underline',\n 'strikeThrough',\n 'indent',\n 'lineHeight',\n 'foreColor',\n 'backColor',\n 'link',\n 'list',\n 'justify',\n 'quote',\n 'emoticon',\n 'image',\n 'video',\n 'table',\n 'code',\n 'splitLine',\n 'undo',\n 'redo',\n ],\n\n fontNames: [\n '黑体',\n '仿宋',\n '楷体',\n '标楷体',\n '华文仿宋',\n '华文楷体',\n '宋体',\n '微软雅黑',\n 'Arial',\n 'Tahoma',\n 'Verdana',\n 'Times New Roman',\n 'Courier New',\n ],\n\n fontSizes: {\n 'x-small': {\n name: '10px',\n value: '1',\n },\n small: {\n name: '13px',\n value: '2',\n },\n normal: {\n name: '16px',\n value: '3',\n },\n large: {\n name: '18px',\n value: '4',\n },\n 'x-large': {\n name: '24px',\n value: '5',\n },\n 'xx-large': {\n name: '32px',\n value: '6',\n },\n 'xxx-large': {\n name: '48px',\n value: '7',\n },\n },\n\n // customFontSize: [ // 该菜单暂时不用 - 王福朋 20200924\n // { value: '9px', text: '9' },\n // { value: '10px', text: '10' },\n // { value: '12px', text: '12' },\n // { value: '14px', text: '14' },\n // { value: '16px', text: '16' },\n // { value: '20px', text: '20' },\n // { value: '42px', text: '42' },\n // { value: '72px', text: '72' },\n // ],\n\n colors: [\n '#000000',\n '#eeece0',\n '#1c487f',\n '#4d80bf',\n '#c24f4a',\n '#8baa4a',\n '#7b5ba1',\n '#46acc8',\n '#f9963b',\n '#ffffff',\n ],\n\n //插入代码语言配置\n languageType: [\n 'Bash',\n 'C',\n 'C#',\n 'C++',\n 'CSS',\n 'Java',\n 'JavaScript',\n 'JSON',\n 'TypeScript',\n 'Plain text',\n 'Html',\n 'XML',\n 'SQL',\n 'Go',\n 'Kotlin',\n 'Lua',\n 'Markdown',\n 'PHP',\n 'Python',\n 'Shell Session',\n 'Ruby',\n ],\n\n languageTab: '    ',\n /**\n * 表情配置菜单\n * 如果为emoji表情直接作为元素插入\n * emoticon:Array<EmotionsType>\n */\n emotions: [\n {\n // tab 的标题\n title: '默认',\n // type -> 'emoji' / 'image'\n type: 'image',\n // content -> 数组\n content: [\n {\n alt: '[坏笑]',\n src: `${SINA_PATH1}/50/pcmoren_huaixiao_org.png`,\n },\n {\n alt: '[舔屏]',\n src: `${SINA_PATH1}/40/pcmoren_tian_org.png`,\n },\n {\n alt: '[污]',\n src: `${SINA_PATH1}/3c/pcmoren_wu_org.png`,\n },\n ],\n },\n {\n // tab 的标题\n title: '新浪',\n // type -> 'emoji' / 'image'\n type: 'image',\n // content -> 数组\n content: [\n {\n src: `${SINA_PATH2}/7a/shenshou_thumb.gif`,\n alt: '[草泥马]',\n },\n {\n src: `${SINA_PATH2}/60/horse2_thumb.gif`,\n alt: '[神马]',\n },\n {\n src: `${SINA_PATH2}/bc/fuyun_thumb.gif`,\n alt: '[浮云]',\n },\n ],\n },\n {\n // tab 的标题\n title: 'emoji',\n // type -> 'emoji' / 'image'\n type: 'emoji',\n // content -> 数组\n content: '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😓 😪 😴 🙄 🤔 😬 🤐'.split(/\\s/),\n },\n {\n // tab 的标题\n title: '手势',\n // type -> 'emoji' / 'image'\n type: 'emoji',\n // content -> 数组\n content: [\n '🙌',\n '👏',\n '👋',\n '👍',\n '👎',\n '👊',\n '✊',\n '️👌',\n '✋',\n '👐',\n '💪',\n '🙏',\n '️👆',\n '👇',\n '👈',\n '👉',\n '🖕',\n '🖐',\n '🤘',\n ],\n },\n ],\n\n lineHeights: ['1', '1.15', '1.6', '2', '2.5', '3'],\n\n undoLimit: 20,\n\n indentation: '2em',\n}\n","/**\n * @description 事件配置\n * @author wangfupeng\n */\n\nimport { EMPTY_FN } from '../utils/const'\n\nexport type TCatalog = {\n tag: string\n id: string\n text: string\n}\n\n/**\n * 提示信息\n * @param alertInfo alert info\n * @param alertType 错误提示类型\n * @param debugInfo debug info\n */\nfunction customAlert(alertInfo: string, alertType: string, debugInfo?: string): void {\n window.alert(alertInfo)\n if (debugInfo) {\n console.error('wangEditor: ' + debugInfo)\n }\n}\n\nexport default {\n onchangeTimeout: 200,\n\n onchange: EMPTY_FN,\n onfocus: EMPTY_FN,\n onblur: EMPTY_FN,\n\n onCatalogChange: null,\n customAlert,\n}\n","/**\n * @description 粘贴,配置文件\n * @author wangfupeng\n */\n\nexport default {\n // 粘贴过滤样式,默认开启\n pasteFilterStyle: true,\n\n // 粘贴内容时,忽略图片。默认关闭\n pasteIgnoreImg: false,\n\n // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。\n // IE 暂时不支持\n pasteTextHandle: function (content: string): string {\n // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回\n return content\n },\n}\n","/**\n * @description 命令配置项\n * @author wangfupeng\n */\n\nexport default {\n styleWithCSS: false, // 默认 false\n}\n","/**\n * @description 图片相关的配置\n * @author wangfupeng\n */\n\nimport Editor from '../editor/index'\nimport { EMPTY_FN } from '../utils/const'\nimport { ResType } from '../menus/img/upload-img'\n\nexport type UploadImageHooksType = {\n before?: (\n xhr: XMLHttpRequest,\n editor: Editor,\n files: File[]\n ) => { prevent: boolean; msg: string } | void\n success?: (xhr: XMLHttpRequest, editor: Editor, result: ResType) => void\n fail?: (xhr: XMLHttpRequest, editor: Editor, err: ResType | string) => void\n error?: (xhr: XMLHttpRequest, editor: Editor) => void\n timeout?: (xhr: XMLHttpRequest, editor: Editor) => void\n customInsert?: (\n inserImg: (this: Editor, src: string) => void,\n result: ResType,\n editor: Editor\n ) => void\n}\n\nexport default {\n // 显示“插入网络图片”\n showLinkImg: true,\n\n // 插入图片成功之后的回调函数\n linkImgCallback: EMPTY_FN,\n\n // accept\n uploadImgAccept: ['jpg', 'jpeg', 'png', 'gif', 'bmp'],\n\n // 服务端地址\n uploadImgServer: '',\n\n // 使用 base64 存储图片\n uploadImgShowBase64: false,\n\n // 上传图片的最大体积,默认 5M\n uploadImgMaxSize: 5 * 1024 * 1024,\n\n // 一次最多上传多少个图片\n uploadImgMaxLength: 100,\n\n // 自定义上传图片的名称\n uploadFileName: '',\n\n // 上传图片自定义参数\n uploadImgParams: {},\n\n // 自定义参数拼接到 url 中\n uploadImgParamsWithUrl: false,\n\n // 上传图片自定义 header\n uploadImgHeaders: {},\n\n // 钩子函数\n uploadImgHooks: {},\n\n // 上传图片超时时间 ms\n uploadImgTimeout: 10 * 1000,\n\n // 跨域带 cookie\n withCredentials: false,\n\n // 自定义上传\n customUploadImg: null,\n}\n","/**\n * @description 默认常量配置\n * @author xiaokyo\n */\n\nexport default {\n focus: true,\n height: 300,\n placeholder: '请输入正文',\n zIndexFullScreen: 10002,\n showFullScreen: true,\n}\n","export default {\n lang: 'zh-CN',\n languages: {\n 'zh-CN': {\n wangEditor: {\n 重置: '重置',\n 插入: '插入',\n 默认: '默认',\n 创建: '创建',\n 修改: '修改',\n 如: '如',\n 请输入正文: '请输入正文',\n menus: {\n dropListMenu: {\n 设置标题: '设置标题',\n 背景颜色: '背景颜色',\n 文字颜色: '文字颜色',\n 设置字号: '设置字号',\n 设置字体: '设置字体',\n 设置缩进: '设置缩进',\n 对齐方式: '对齐方式',\n 设置行高: '设置行高',\n 序列: '序列',\n head: {\n 正文: '正文',\n },\n indent: {\n 增加缩进: '增加缩进',\n 减少缩进: '减少缩进',\n },\n justify: {\n 靠左: '靠左',\n 居中: '居中',\n 靠右: '靠右',\n 两端: '两端',\n },\n list: {\n 无序列表: '无序列表',\n 有序列表: '有序列表',\n },\n },\n panelMenus: {\n emoticon: {\n 默认: '默认',\n 新浪: '新浪',\n emoji: 'emoji',\n 手势: '手势',\n },\n image: {\n 图片链接: '图片链接',\n 上传图片: '上传图片',\n 网络图片: '网络图片',\n },\n link: {\n 链接: '链接',\n 链接文字: '链接文字',\n 取消链接: '取消链接',\n 查看链接: '查看链接',\n },\n video: {\n 插入视频: '插入视频',\n },\n table: {\n 行: '行',\n 列: '列',\n 的: '的',\n 表格: '表格',\n 添加行: '添加行',\n 删除行: '删除行',\n 添加列: '添加列',\n 删除列: '删除列',\n 设置表头: '设置表头',\n 取消表头: '取消表头',\n 插入表格: '插入表格',\n 删除表格: '删除表格',\n },\n code: {\n 删除代码: '删除代码',\n 修改代码: '修改代码',\n 插入代码: '插入代码',\n },\n },\n },\n validate: {\n 张图片: '张图片',\n 大于: '大于',\n 图片链接: '图片链接',\n 不是图片: '不是图片',\n 返回结果: '返回结果',\n 上传图片超时: '上传图片超时',\n 上传图片错误: '上传图片错误',\n 上传图片失败: '上传图片失败',\n 插入图片错误: '插入图片错误',\n 一次最多上传: '一次最多上传',\n 下载链接失败: '下载链接失败',\n 图片验证未通过: '图片验证未通过',\n 服务器返回状态: '服务器返回状态',\n 上传图片返回结果错误: '上传图片返回结果错误',\n 请替换为支持的图片类型: '请替换为支持的图片类型',\n 您插入的网络图片无法识别: '您插入的网络图片无法识别',\n 您刚才插入的图片链接未通过编辑器校验: '您刚才插入的图片链接未通过编辑器校验',\n },\n },\n },\n en: {\n wangEditor: {\n 重置: 'reset',\n 插入: 'insert',\n 默认: 'default',\n 创建: 'create',\n 修改: 'edit',\n 如: 'like',\n 请输入正文: 'please enter the text',\n menus: {\n dropListMenu: {\n 设置标题: 'title',\n 背景颜色: 'background',\n 文字颜色: 'font color',\n 设置字号: 'font size',\n 设置字体: 'font family',\n 设置缩进: 'indent',\n 对齐方式: 'align',\n 设置行高: 'line heihgt',\n 序列: 'list',\n head: {\n 正文: 'text',\n },\n indent: {\n 增加缩进: 'indent',\n 减少缩进: 'outdent',\n },\n justify: {\n 靠左: 'left',\n 居中: 'center',\n 靠右: 'right',\n 两端: 'justify',\n },\n list: {\n 无序列表: 'unordered',\n 有序列表: 'ordered',\n },\n },\n panelMenus: {\n emoticon: {\n 默认: 'default',\n 新浪: 'sina',\n emoji: 'emoji',\n 手势: 'gesture',\n },\n image: {\n 图片链接: 'image link',\n 上传图片: 'upload image',\n 网络图片: 'network image',\n },\n link: {\n 链接: 'link',\n 链接文字: 'link text',\n 取消链接: 'unlink',\n 查看链接: 'view links',\n },\n video: {\n 插入视频: 'insert video',\n },\n table: {\n 行: 'rows',\n 列: 'columns',\n 的: ' ',\n 表格: 'table',\n 添加行: 'insert row',\n 删除行: 'delete row',\n 添加列: 'insert column',\n 删除列: 'delete column',\n 设置表头: 'set header',\n 取消表头: 'cancel header',\n 插入表格: 'insert table',\n 删除表格: 'delete table',\n },\n code: {\n 删除代码: 'delete code',\n 修改代码: 'edit code',\n 插入代码: 'insert code',\n },\n },\n },\n validate: {\n 张图片: 'images',\n 大于: 'greater than',\n 图片链接: 'image link',\n 不是图片: 'is not image',\n 返回结果: 'return results',\n 上传图片超时: 'upload image timeout',\n 上传图片错误: 'upload image error',\n 上传图片失败: 'upload image failed',\n 插入图片错误: 'insert image error',\n 一次最多上传: 'once most at upload',\n 下载链接失败: 'download link failed',\n 图片验证未通过: 'image validate failed',\n 服务器返回状态: 'server return status',\n 上传图片返回结果错误: 'upload image return results error',\n 请替换为支持的图片类型: 'please replace with a supported image type',\n 您插入的网络图片无法识别: 'the network picture you inserted is not recognized',\n 您刚才插入的图片链接未通过编辑器校验:\n 'the image link you just inserted did not pass the editor verification',\n },\n },\n },\n },\n}\n","/**\n * @description 历史记录 - 数据缓存的模式\n * @author fangzhicong\n */\n\nimport { UA } from '../utils/util'\n\n/**\n * 是否为兼容模式。返回 true 表示当前使用兼容(内容备份)模式,否则使用标准(差异备份)模式\n */\nfunction compatibleMode() {\n if (UA.isIE() || UA.isOldEdge) {\n return true\n }\n return false\n}\n\nexport default {\n compatibleMode,\n historyMaxSize: 30,\n}\n","/**\n * @description selection range API\n * @author wangfupeng\n */\nimport $, { DomElement } from '../utils/dom-core'\nimport { UA } from '../utils/util'\nimport Editor from './index'\nimport SelectionRangeTopNodes from './selection-range-top-nodes/index'\n\nclass SelectionAndRange {\n public editor: Editor\n private _currentRange: Range | null | undefined = null\n\n constructor(editor: Editor) {\n this.editor = editor\n }\n\n /**\n * 获取当前 range\n */\n public getRange(): Range | null | undefined {\n return this._currentRange\n }\n\n /**\n * 保存选区范围\n * @param _range 选区范围\n */\n public saveRange(_range?: Range): void {\n if (_range) {\n // 保存已有选区\n this._currentRange = _range\n return\n }\n\n // 获取当前的选区\n const selection = window.getSelection() as Selection\n if (selection.rangeCount === 0) {\n return\n }\n const range = selection.getRangeAt(0)\n\n // 获取选区范围的 DOM 元素\n const $containerElem = this.getSelectionContainerElem(range)\n if (!$containerElem) {\n // 当 选区范围内没有 DOM元素 则抛出\n return\n }\n if (\n $containerElem.attr('contenteditable') === 'false' ||\n $containerElem.parentUntil('[contenteditable=false]')\n ) {\n // 这里大体意义上就是个保险\n // 确保 编辑区域 的 contenteditable属性 的值为 true\n return\n }\n\n const editor = this.editor\n const $textElem = editor.$textElem\n if ($textElem.isContain($containerElem)) {\n if ($textElem.elems[0] === $containerElem.elems[0]) {\n if ($textElem.html() === '<p><br></p>') {\n const $children = $textElem.children()\n const $last = $children?.last()\n editor.selection.createRangeByElem($last as DomElement, true, true)\n editor.selection.restoreSelection()\n }\n }\n // 是编辑内容之内的\n this._currentRange = range\n }\n }\n\n /**\n * 折叠选区范围\n * @param toStart true 开始位置,false 结束位置\n */\n public collapseRange(toStart: boolean = false): void {\n const range = this._currentRange\n if (range) {\n range.collapse(toStart)\n }\n }\n\n /**\n * 获取选区范围内的文字\n */\n public getSelectionText(): string {\n const range = this._currentRange\n if (range) {\n return range.toString()\n } else {\n return ''\n }\n }\n\n /**\n * 获取选区范围的 DOM 元素\n * @param range 选区范围\n */\n public getSelectionContainerElem(range?: Range): DomElement | undefined {\n let r: Range | null | undefined\n r = range || this._currentRange\n let elem: Node\n if (r) {\n elem = r.commonAncestorContainer\n return $(elem.nodeType === 1 ? elem : elem.parentNode)\n }\n }\n\n /**\n * 选区范围开始的 DOM 元素\n * @param range 选区范围\n */\n public getSelectionStartElem(range?: Range): DomElement | undefined {\n let r: Range | null | undefined\n r = range || this._currentRange\n let elem: Node\n if (r) {\n elem = r.startContainer\n return $(elem.nodeType === 1 ? elem : elem.parentNode)\n }\n }\n\n /**\n * 选区范围结束的 DOM 元素\n * @param range 选区范围\n */\n public getSelectionEndElem(range?: Range): DomElement | undefined {\n let r: Range | null | undefined\n r = range || this._currentRange\n let elem: Node\n if (r) {\n elem = r.endContainer\n return $(elem.nodeType === 1 ? elem : elem.parentNode)\n }\n }\n\n /**\n * 选区是否为空(没有选择文字)\n */\n public isSelectionEmpty(): boolean {\n const range = this._currentRange\n if (range && range.startContainer) {\n if (range.startContainer === range.endContainer) {\n if (range.startOffset === range.endOffset) {\n return true\n }\n }\n }\n return false\n }\n\n /**\n * 恢复选区范围\n */\n public restoreSelection(): void {\n const selection = window.getSelection()\n const r = this._currentRange\n if (selection && r) {\n selection.removeAllRanges()\n selection.addRange(r)\n }\n }\n\n /**\n * 创建一个空白(即 &#8203 字符)选区\n */\n public createEmptyRange(): void {\n const editor = this.editor\n const range = this.getRange()\n let $elem: DomElement\n\n if (!range) {\n // 当前无 range\n return\n }\n if (!this.isSelectionEmpty()) {\n // 当前选区必须没有内容才可以,有内容就直接 return\n return\n }\n\n try {\n // 目前只支持 webkit 内核\n if (UA.isWebkit()) {\n // 插入 &#8203\n editor.cmd.do('insertHTML', '&#8203;')\n // 修改 offset 位置\n range.setEnd(range.endContainer, range.endOffset + 1)\n // 存储\n this.saveRange(range)\n } else {\n $elem = $('<strong>&#8203;</strong>')\n editor.cmd.do('insertElem', $elem)\n this.createRangeByElem($elem, true)\n }\n } catch (ex) {\n // 部分情况下会报错,兼容一下\n }\n }\n\n /**\n * 根据 DOM 元素设置选区\n * @param $elem DOM 元素\n * @param toStart true 开始位置,false 结束位置\n * @param isContent 是否选中 $elem 的内容\n */\n public createRangeByElem($elem: DomElement, toStart?: boolean, isContent?: boolean): void {\n if (!$elem.length) {\n return\n }\n\n const elem = $elem.elems[0]\n const range = document.createRange()\n\n if (isContent) {\n range.selectNodeContents(elem)\n } else {\n // 如果用户没有传入 isContent 参数,那就默认为 false\n range.selectNode(elem)\n }\n\n if (toStart != null) {\n // 传入了 toStart 参数,折叠选区。如果没传入 toStart 参数,则忽略这一步\n range.collapse(toStart)\n }\n\n // 存储 range\n this.saveRange(range)\n }\n\n /**\n * 获取 当前 选取范围的 顶级(段落) 元素\n * @param $editor\n */\n public getSelectionRangeTopNodes(editor: Editor): DomElement[] {\n const item = new SelectionRangeTopNodes(editor)\n item.init()\n return item.getSelectionNodes()\n }\n\n /**\n * 移动光标位置\n * @param {Node} node 元素节点\n * @param {Boolean} toStart 为true光标在开始位置 为false在结束位置 默认在结束位置\n */\n public moveCursor(node: Node, toStart: boolean = false) {\n const range = this.getRange()\n const pos = toStart ? 0 : node.childNodes.length\n\n if (!range) {\n return\n }\n if (node) {\n range.setStart(node, pos)\n range.setEnd(node, pos)\n this.restoreSelection()\n }\n }\n}\n\nexport default SelectionAndRange\n","/**\n * @description 选取范围所有顶级(段落)节点\n * @author tonghan\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../index'\n\n// 构造函数\nclass SelectionRangeTopNodes {\n // 定义属性\n editor: Editor\n $nodeList: DomElement[]\n $startElem: DomElement | undefined\n $endElem: DomElement | undefined\n\n /**\n * 构造函数\n * @param editor\n */\n constructor(editor: Editor) {\n // 初始化属性\n this.editor = editor\n this.$nodeList = []\n this.$startElem = $(editor.selection.getSelectionStartElem()).getNodeTop(this.editor)\n this.$endElem = $(editor.selection.getSelectionEndElem()).getNodeTop(this.editor)\n }\n\n /**\n * 初始化\n */\n public init(): void {\n this.recordSelectionNodes($(this.$startElem))\n }\n\n /**\n * 添加 节点 到nodeList\n * @param $node 节点\n */\n private addNodeList($node: DomElement | HTMLElement): void {\n this.$nodeList.push($($node))\n }\n\n /**\n * 是否是 选区结束 节点\n * @param $node 节点\n */\n private isEndElem($node: DomElement): boolean | undefined {\n return this.$endElem?.equal($node)\n }\n\n /**\n * 获取当前节点的下一个兄弟节点\n * @param $node 节点\n */\n private getNextSibling($node: DomElement): DomElement {\n return $($node.elems[0].nextSibling)\n }\n\n /**\n * 记录节点 - 从选区开始节点开始 一直到匹配到选区结束节点为止\n * @param $node 节点\n */\n private recordSelectionNodes($node: DomElement): void {\n const $elem = $node.getNodeTop(this.editor)\n if ($elem.length > 0) {\n this.addNodeList($elem)\n if (!this.isEndElem($elem)) {\n this.recordSelectionNodes(this.getNextSibling($elem))\n }\n }\n }\n\n /**\n * 获取 选中节点列表\n */\n public getSelectionNodes(): DomElement[] {\n return this.$nodeList\n }\n}\n\n/**\n * 导出\n */\nexport default SelectionRangeTopNodes\n","/**\n * @description 封装 document.execCommand\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../utils/dom-core'\nimport Editor from './index'\n\nclass Command {\n public editor: Editor\n\n constructor(editor: Editor) {\n this.editor = editor\n }\n\n /**\n * 执行富文本操作的命令\n * @param name name\n * @param value value\n */\n public do(name: string, value?: string | DomElement): void {\n const editor = this.editor\n\n if (editor.config.styleWithCSS) {\n document.execCommand('styleWithCSS', false, 'true')\n }\n\n const selection = editor.selection\n\n // 如果无选区,忽略\n if (!selection.getRange()) {\n return\n }\n\n // 恢复选取\n selection.restoreSelection()\n\n // 执行\n switch (name) {\n case 'insertHTML':\n this.insertHTML(value as string)\n break\n case 'insertElem':\n this.insertElem(value as DomElement)\n break\n default:\n // 默认 command\n this.execCommand(name, value as string)\n break\n }\n\n // 修改菜单状态\n editor.menus.changeActive()\n\n // 最后,恢复选取保证光标在原来的位置闪烁\n selection.saveRange()\n selection.restoreSelection()\n }\n\n /**\n * 插入 html\n * @param html html 字符串\n */\n private insertHTML(html: string): void {\n const editor = this.editor\n const range = editor.selection.getRange()\n if (range == null) return\n\n if (this.queryCommandSupported('insertHTML')) {\n // W3C\n this.execCommand('insertHTML', html)\n } else if (range.insertNode) {\n // IE\n range.deleteContents()\n range.insertNode($(html).elems[0])\n editor.selection.collapseRange()\n }\n // else if (range.pasteHTML) {\n // // IE <= 10\n // range.pasteHTML(html)\n // }\n }\n\n /**\n * 插入 DOM 元素\n * @param $elem DOM 元素\n */\n private insertElem($elem: DomElement): void {\n const editor = this.editor\n const range = editor.selection.getRange()\n if (range == null) return\n\n if (range.insertNode) {\n range.deleteContents()\n range.insertNode($elem.elems[0])\n }\n }\n\n /**\n * 执行 document.execCommand\n * @param name name\n * @param value value\n */\n private execCommand(name: string, value: string): void {\n document.execCommand(name, false, value)\n }\n\n /**\n * 执行 document.queryCommandValue\n * @param name name\n */\n public queryCommandValue(name: string): string {\n return document.queryCommandValue(name)\n }\n\n /**\n * 执行 document.queryCommandState\n * @param name name\n */\n public queryCommandState(name: string): boolean {\n return document.queryCommandState(name)\n }\n\n /**\n * 执行 document.queryCommandSupported\n * @param name name\n */\n public queryCommandSupported(name: string): boolean {\n return document.queryCommandSupported(name)\n }\n}\n\nexport default Command\n","/**\n * @description 编辑区域,入口文件\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../utils/dom-core'\nimport Editor from '../editor/index'\nimport initEventHooks from './event-hooks/index'\nimport { UA, throttle } from '../utils/util'\nimport getChildrenJSON, { NodeListType } from './getChildrenJSON'\nimport getHtmlByNodeList from './getHtmlByNodeList'\n\n/** 按键函数 */\ntype KeyBoardHandler = (event: KeyboardEvent) => unknown\n/** 普通事件回调 */\ntype EventHandler = (event: Event) => unknown\n// 各个事件钩子函数\ntype TextEventHooks = {\n changeEvents: (() => void)[] // 内容修改时\n dropEvents: ((event: DragEvent) => unknown)[]\n clickEvents: EventHandler[]\n keyupEvents: KeyBoardHandler[]\n /** tab 键(keyCode === )Up 时 */\n tabUpEvents: KeyBoardHandler[]\n /** tab 键(keyCode === 9)Down 时 */\n tabDownEvents: KeyBoardHandler[]\n /** enter 键(keyCode === 13)up 时 */\n enterUpEvents: KeyBoardHandler[]\n /** enter 键(keyCode === 13)down 时 */\n enterDownEvents: KeyBoardHandler[]\n /** 删除键(keyCode === 8)up 时 */\n deleteUpEvents: KeyBoardHandler[]\n /** 删除键(keyCode === 8)down 时 */\n deleteDownEvents: KeyBoardHandler[]\n /** 粘贴事件 */\n pasteEvents: ((e: ClipboardEvent) => void)[]\n /** 点击链接事件 */\n linkClickEvents: ((e: DomElement) => void)[]\n /** 点击代码事件 */\n codeClickEvents: ((e: DomElement) => void)[]\n /** 编辑区域滑动事件 */\n textScrollEvents: EventHandler[]\n /** 菜单栏被点击 */\n toolbarClickEvents: EventHandler[]\n /** 图片被点击事件 */\n imgClickEvents: ((e: DomElement) => void)[]\n /** 图片拖拽MouseDown */\n imgDragBarMouseDownEvents: (() => void)[]\n /** 表格点击 */\n tableClickEvents: ((e: DomElement) => void)[]\n /** 每个菜单被点击时,按理说这个不属于 txt 的,先暂时在这放着吧 */\n menuClickEvents: (() => void)[]\n /** droplist 菜单悬浮事件。暂时放这里 */\n dropListMenuHoverEvents: (() => void)[]\n /** 点击分割线时 */\n splitLineEvents: ((e: DomElement) => void)[]\n}\n\nclass Text {\n public editor: Editor\n public eventHooks: TextEventHooks // Text 各个事件的钩子函数,如 keyup 时要执行哪些函数\n\n constructor(editor: Editor) {\n this.editor = editor\n\n this.eventHooks = {\n changeEvents: [],\n dropEvents: [],\n clickEvents: [],\n keyupEvents: [],\n tabUpEvents: [],\n tabDownEvents: [],\n enterUpEvents: [],\n enterDownEvents: [],\n deleteUpEvents: [],\n deleteDownEvents: [],\n pasteEvents: [],\n linkClickEvents: [],\n codeClickEvents: [],\n textScrollEvents: [],\n toolbarClickEvents: [],\n imgClickEvents: [],\n imgDragBarMouseDownEvents: [],\n tableClickEvents: [],\n menuClickEvents: [],\n dropListMenuHoverEvents: [],\n splitLineEvents: [],\n }\n }\n\n /**\n * 初始化\n */\n public init(): void {\n // 实时保存选取范围\n this._saveRange()\n\n // 绑定事件\n this._bindEventHooks()\n\n // 初始化 text 事件钩子函数\n initEventHooks(this)\n }\n\n /**\n * 切换placeholder\n */\n public togglePlaceholder(): void {\n const html = this.html()\n const $placeholder = this.editor.$textContainerElem.find('.placeholder')\n $placeholder.hide()\n if (!html || html === ' ') $placeholder.show()\n }\n\n /**\n * 清空内容\n */\n public clear(): void {\n this.html('<p><br></p>')\n }\n\n /**\n * 设置/获取 html\n * @param val html 字符串\n */\n public html(val?: string): void | string {\n const editor = this.editor\n const $textElem = editor.$textElem\n\n // 没有 val ,则是获取 html\n if (val == null) {\n let html = $textElem.html()\n // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 &#8203 ,这里替换掉\n html = html.replace(/\\u200b/gm, '')\n html = html.replace(/<p><\\/p>/gim, '') // 去掉空行\n html = html.replace(/<p><br\\/?><\\/p>$/gim, '') // 去掉最后的 <p><br><p>\n\n /**\n * 这里的代码为了处理火狐多余的空行标签,但是强制删除空行标签会带来其他问题\n * html()方法返回的的值,\"<p><br></p>\"中pr会被删除,只留下<p>,点不进去,从而产生垃圾数据\n * 目前在末位有多个空行的情况下执行撤销重做操作,会产生一种不记录末尾空行的错觉\n * 暂时注释, 等待进一步的兼容处理\n */\n // html = html.replace(/><br>(?!<)/gi, '>') // 过滤 <p><br>内容</p> 中的br\n // html = html.replace(/(?!>)<br></gi, '<') // 过滤 <p>内容<br></p> 中的br\n\n /**\n * pre标签格式化\n * html()方法理论上应当输出纯净的代码文本,但是对于是否解析html标签还没有良好的判断\n * 如果去除hljs的标签,在解析状态下回显,会造成显示错误并且无法再通过hljs方法渲染\n * 暂且其弃用\n */\n // html = formatCodeHtml(editor, html)\n\n return html\n }\n\n // 有 val ,则是设置 html\n val = val.trim()\n if (val === '') {\n val = `<p><br></p>`\n }\n if (val.indexOf('<') !== 0) {\n // 内容用 p 标签包裹\n val = `<p>${val}</p>`\n }\n\n $textElem.html(val)\n\n // 初始化选区,将光标定位到内容尾部\n editor.initSelection()\n }\n\n /**\n * 将json设置成html至编辑器\n * @param nodeList json格式\n */\n public setJSON(nodeList: NodeListType): void {\n const html = getHtmlByNodeList(nodeList).children()\n const editor = this.editor\n const $textElem = editor.$textElem\n // 没有获取到元素的情况\n if (!html) return\n // 替换文本节点下全部子节点\n $textElem.replaceChildAll(html)\n }\n\n /**\n * 获取 json 格式的数据\n */\n public getJSON(): NodeListType {\n const editor = this.editor\n const $textElem = editor.$textElem\n return getChildrenJSON($textElem)\n }\n\n /**\n * 设置 字符串内容\n * @param val text 字符串\n */\n public text(val: string): void\n /**\n * 获取 字符串内容\n */\n public text(): string\n public text(val?: string): void | string {\n const editor = this.editor\n const $textElem = editor.$textElem\n\n // 没有 val ,是获取 text\n if (val == null) {\n let text = $textElem.text()\n // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 &#8203 ,这里替换掉\n text = text.replace(/\\u200b/gm, '')\n return text\n }\n\n // 有 val ,则是设置 text\n $textElem.text(`<p>${val}</p>`)\n\n // 初始化选区,将光标定位到内容尾部\n editor.initSelection()\n }\n\n /**\n * 追加 html 内容\n * @param html html 字符串\n */\n public append(html: string): void {\n const editor = this.editor\n const $textElem = editor.$textElem\n if (html.indexOf('<') !== 0) {\n // 普通字符串,用 <p> 包裹\n html = `<p>${html}</p>`\n }\n $textElem.append($(html))\n\n // 初始化选区,将光标定位到内容尾部\n editor.initSelection()\n }\n\n /**\n * 每一步操作,都实时保存选区范围\n */\n private _saveRange(): void {\n const editor = this.editor\n const $textElem = editor.$textElem\n\n // 保存当前的选区\n function saveRange() {\n // 随时保存选区\n editor.selection.saveRange()\n // 更新按钮 active 状态\n editor.menus.changeActive()\n }\n\n // 按键后保存\n $textElem.on('keyup', saveRange)\n $textElem.on('mousedown', () => {\n // mousedown 状态下,鼠标滑动到编辑区域外面,也需要保存选区\n $textElem.on('mouseleave', saveRange)\n })\n\n $textElem.on('mouseup', () => {\n const selection = editor.selection\n const range = selection.getRange()\n\n if (range == null) return\n\n const { startOffset, endOffset } = range\n let endContainer: Node | undefined = range?.endContainer\n // 修复当selection结束时,点击编辑器内部,保存选区异常的情况\n if (startOffset !== endOffset && endContainer != null) {\n range?.setStart(endContainer, endOffset)\n }\n\n saveRange()\n\n // 在编辑器区域之内完成点击,取消鼠标滑动到编辑区外面的事件\n $textElem.off('mouseleave', saveRange)\n })\n }\n\n /**\n * 绑定事件,事件会触发钩子函数\n */\n private _bindEventHooks(): void {\n const editor = this.editor\n const $textElem = editor.$textElem\n const eventHooks = this.eventHooks\n\n // click hooks\n $textElem.on('click', (e: Event) => {\n const clickEvents = eventHooks.clickEvents\n clickEvents.forEach(fn => fn(e))\n })\n\n // enter 键 up 时的 hooks\n $textElem.on('keyup', (e: KeyboardEvent) => {\n if (e.keyCode !== 13) return\n const enterUpEvents = eventHooks.enterUpEvents\n enterUpEvents.forEach(fn => fn(e))\n })\n\n // 键盘 up 时的 hooks\n $textElem.on('keyup', (e: KeyboardEvent) => {\n const keyupEvents = eventHooks.keyupEvents\n keyupEvents.forEach(fn => fn(e))\n })\n\n // delete 键 up 时 hooks\n $textElem.on('keyup', (e: KeyboardEvent) => {\n if (e.keyCode !== 8) return\n const deleteUpEvents = eventHooks.deleteUpEvents\n deleteUpEvents.forEach(fn => fn(e))\n })\n\n // delete 键 down 时 hooks\n $textElem.on('keydown', (e: KeyboardEvent) => {\n if (e.keyCode !== 8) return\n const deleteDownEvents = eventHooks.deleteDownEvents\n deleteDownEvents.forEach(fn => fn(e))\n })\n\n // 粘贴\n $textElem.on('paste', (e: ClipboardEvent) => {\n if (UA.isIE()) return // IE 不支持\n\n // 阻止默认行为,使用 execCommand 的粘贴命令\n e.preventDefault()\n\n const pasteEvents = eventHooks.pasteEvents\n pasteEvents.forEach(fn => fn(e))\n })\n\n // 撤销/恢复 快捷键\n $textElem.on('keydown', (e: KeyboardEvent) => {\n if (\n // 编辑器处于聚焦状态下(多编辑器实例) || 当前处于兼容模式(兼容模式撤销/恢复后不聚焦,所以直接过,但会造成多编辑器同时撤销/恢复)\n (editor.isFocus || editor.isCompatibleMode) &&\n (e.ctrlKey || e.metaKey) &&\n e.keyCode === 90\n ) {\n // 取消默认行为\n e.preventDefault()\n // 执行事件\n if (e.shiftKey) {\n // 恢复\n editor.history.restore()\n } else {\n // 撤销\n editor.history.revoke()\n }\n }\n })\n\n // tab up\n $textElem.on('keyup', (e: KeyboardEvent) => {\n if (e.keyCode !== 9) return\n e.preventDefault()\n const tabUpEvents = eventHooks.tabUpEvents\n tabUpEvents.forEach(fn => fn(e))\n })\n\n // tab down\n $textElem.on('keydown', (e: KeyboardEvent) => {\n if (e.keyCode !== 9) return\n e.preventDefault()\n const tabDownEvents = eventHooks.tabDownEvents\n tabDownEvents.forEach(fn => fn(e))\n })\n\n // 文本编辑区域 滚动时触发\n $textElem.on(\n 'scroll',\n // 使用节流\n throttle((e: Event) => {\n const textScrollEvents = eventHooks.textScrollEvents\n textScrollEvents.forEach(fn => fn(e))\n }, 100)\n )\n\n // 拖拽相关的事件\n function preventDefault(e: Event) {\n // 禁用 document 拖拽事件\n e.preventDefault()\n }\n\n $(document)\n .on('dragleave', preventDefault)\n .on('drop', preventDefault)\n .on('dragenter', preventDefault)\n .on('dragover', preventDefault)\n // 全局事件在编辑器实例销毁的时候进行解绑\n editor.beforeDestroy(function () {\n $(document)\n .off('dragleave', preventDefault)\n .off('drop', preventDefault)\n .off('dragenter', preventDefault)\n .off('dragover', preventDefault)\n })\n\n $textElem.on('drop', (e: DragEvent) => {\n e.preventDefault()\n const events = eventHooks.dropEvents\n events.forEach(fn => fn(e))\n })\n\n // link click\n $textElem.on('click', (e: Event) => {\n // 存储链接元素\n let $link: DomElement | null = null\n\n const target = e.target as HTMLElement\n const $target = $(target)\n if ($target.getNodeName() === 'A') {\n // 当前点击的就是一个链接\n $link = $target\n } else {\n // 否则,向父节点中寻找链接\n const $parent = $target.parentUntil('a')\n if ($parent != null) {\n // 找到了\n $link = $parent\n }\n }\n\n if (!$link) return // 没有点击链接,则返回\n\n const linkClickEvents = eventHooks.linkClickEvents\n linkClickEvents.forEach(fn => fn($link as DomElement))\n })\n\n // img click\n $textElem.on('click', (e: Event) => {\n // 存储图片元素\n let $img: DomElement | null = null\n\n const target = e.target as HTMLElement\n const $target = $(target)\n\n //处理图片点击 判断是否是表情 根据 不存在class或者className!==eleImg、没有alt属性\n if (\n $target.getNodeName() === 'IMG' &&\n (!$target.elems[0].getAttribute('class') ||\n $target.elems[0].getAttribute('class') !== 'eleImg') &&\n !$target.elems[0].getAttribute('alt')\n ) {\n // 当前点击的就是img\n e.stopPropagation()\n $img = $target\n }\n if (!$img) return // 没有点击图片,则返回\n\n const imgClickEvents = eventHooks.imgClickEvents\n imgClickEvents.forEach(fn => fn($img as DomElement))\n })\n\n // code click\n $textElem.on('click', (e: Event) => {\n // 存储代码元素\n let $code: DomElement | null = null\n\n const target = e.target as HTMLElement\n const $target = $(target)\n if ($target.getNodeName() === 'PRE') {\n // 当前点击的就是一个链接\n $code = $target\n } else {\n // 否则,向父节点中寻找链接\n const $parent = $target.parentUntil('pre')\n if ($parent !== null) {\n // 找到了\n $code = $parent\n }\n }\n\n if (!$code) return\n\n const codeClickEvents = eventHooks.codeClickEvents\n codeClickEvents.forEach(fn => fn($code as DomElement))\n })\n\n // splitLine click\n $textElem.on('click', (e: Event) => {\n // 存储分割线元素\n let $splitLine: DomElement | null = null\n\n const target = e.target as HTMLElement\n const $target = $(target)\n // 判断当前点击元素\n if ($target.getNodeName() === 'HR') {\n $splitLine = $target\n } else {\n $target == null\n }\n\n if (!$splitLine) return // 没有点击分割线,则返回\n // 设置、恢复选区\n editor.selection.createRangeByElem($splitLine)\n editor.selection.restoreSelection()\n const splitLineClickEvents = eventHooks.splitLineEvents\n splitLineClickEvents.forEach(fn => fn($splitLine as DomElement))\n })\n\n // 菜单栏被点击\n editor.$toolbarElem.on('click', (e: Event) => {\n const toolbarClickEvents = eventHooks.toolbarClickEvents\n toolbarClickEvents.forEach(fn => fn(e))\n })\n\n //mousedown事件\n editor.$textContainerElem.on('mousedown', (e: MouseEvent) => {\n const target = e.target as HTMLElement\n const $target = $(target)\n if ($target.hasClass('w-e-img-drag-rb')) {\n // 点击的元素,是图片拖拽调整大小的 bar\n const imgDragBarMouseDownEvents = eventHooks.imgDragBarMouseDownEvents\n imgDragBarMouseDownEvents.forEach(fn => fn())\n }\n })\n\n //table click\n $textElem.on('click', (e: Event) => {\n // 存储元素\n let $dom: DomElement | null = null\n\n const target = e.target as HTMLElement\n\n //获取最祖父元素\n $dom = $(target).parentUntil('TABLE', target)\n\n // 没有table范围内,则返回\n if (!$dom) return\n\n const tableClickEvents = eventHooks.tableClickEvents\n tableClickEvents.forEach(fn => fn($dom as DomElement))\n })\n\n // enter 键 down\n $textElem.on('keydown', (e: KeyboardEvent) => {\n if (e.keyCode !== 13) return\n const enterDownEvents = eventHooks.enterDownEvents\n enterDownEvents.forEach(fn => fn(e))\n })\n }\n}\n\nexport default Text\n","var parent = require('../../es/instance/find');\n\nmodule.exports = parent;\n","var find = require('../array/virtual/find');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.find;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.find) ? find : own;\n};\n","require('../../../modules/es.array.find');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').find;\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\nvar USES_TO_LENGTH = arrayMethodUsesToLength(FIND);\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","/**\n * @description Text 事件钩子函数。Text 公共的,不是某个菜单独有的\n * @wangfupeng\n */\n\nimport Text from '../index'\nimport enterToCreateP from './enter-to-create-p'\nimport deleteToKeepP from './del-to-keep-p'\nimport tabToSpan from './tab-to-space'\nimport pasteTextHtml from './paste-text-html'\nimport imgClickActive from './img-click-active'\n\n/**\n * 初始化 text 事件钩子函数\n * @param text text 实例\n */\nfunction initTextHooks(text: Text): void {\n const editor = text.editor\n const eventHooks = text.eventHooks\n\n // 回车时,保证生成的是 <p> 标签\n enterToCreateP(editor, eventHooks.enterUpEvents, eventHooks.enterDownEvents)\n\n // 删除时,保留 <p><br></p>\n deleteToKeepP(editor, eventHooks.deleteUpEvents, eventHooks.deleteDownEvents)\n\n // tab 转换为空格\n tabToSpan(editor, eventHooks.tabDownEvents)\n\n // 粘贴 text html\n pasteTextHtml(editor, eventHooks.pasteEvents)\n\n // img click active\n imgClickActive(editor, eventHooks.imgClickEvents)\n}\n\nexport default initTextHooks\n","/**\n * @description 回车时,保证生成的是 <p> 标签\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport $, { DomElement } from '../../utils/dom-core'\n\n/**\n * 回车时,保证生成的是 <p> 标签\n * @param editor 编辑器实例\n * @param enterUpEvents enter 键 up 时的 hooks\n * @param enterDownEvents enter 键 down 时的 hooks\n */\nfunction enterToCreateP(editor: Editor, enterUpEvents: Function[], enterDownEvents: Function[]) {\n function insertEmptyP($selectionElem: DomElement) {\n const $p = $('<p><br></p>')\n $p.insertBefore($selectionElem)\n editor.selection.createRangeByElem($p, true)\n editor.selection.restoreSelection()\n $selectionElem.remove()\n }\n\n // enter up 时\n function fn() {\n const $textElem = editor.$textElem\n const $selectionElem = editor.selection.getSelectionContainerElem() as DomElement\n const $parentElem = $selectionElem.parent()\n\n if ($parentElem.html() === '<code><br></code>') {\n // 回车之前光标所在一个 <p><code>.....</code></p> ,忽然回车生成一个空的 <p><code><br></code></p>\n // 而且继续回车跳不出去,因此只能特殊处理\n insertEmptyP($selectionElem)\n return\n }\n\n if (!$parentElem.equal($textElem)) {\n // 不是顶级标签\n return\n }\n\n const nodeName = $selectionElem.getNodeName()\n if (nodeName === 'P') {\n // 当前的标签是 P ,不用做处理\n return\n }\n\n if ($selectionElem.text()) {\n // 有内容,不做处理\n return\n }\n\n // 插入 <p> ,并将选取定位到 <p>,删除当前标签\n insertEmptyP($selectionElem)\n }\n enterUpEvents.push(fn)\n\n // enter down 时\n function createPWhenEnterText(e: Event) {\n // selection中的range缓存还有问题,更新不及时,此处手动更新range,处理enter的bug\n editor.selection.saveRange(getSelection()?.getRangeAt(0))\n const $selectElem = editor.selection.getSelectionContainerElem() as DomElement\n if ($selectElem.id === editor.textElemId) {\n // 回车时,默认创建了 text 标签(没有 p 标签包裹),父元素直接就是 $textElem\n // 例如,光标放在 table 最后侧,回车时,默认就是这个情况\n e.preventDefault()\n editor.cmd.do('insertHTML', '<p><br></p>')\n }\n }\n enterDownEvents.push(createPWhenEnterText)\n}\n\nexport default enterToCreateP\n","/**\n * @description 删除时保留 <p><br></p>\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\n\n/**\n * 删除时保留 <p><br></p>\n * @param editor 编辑器实例\n * @param deleteUpEvents delete 键 up 时的 hooks\n * @param deleteDownEvents delete 建 down 时的 hooks\n */\nfunction deleteToKeepP(editor: Editor, deleteUpEvents: Function[], deleteDownEvents: Function[]) {\n function upFn() {\n const $textElem = editor.$textElem\n const txtHtml = $textElem.html().toLowerCase().trim()\n\n // firefox 时用 txtHtml === '<br>' 判断,其他用 !txtHtml 判断\n if (!txtHtml || txtHtml === '<br>') {\n // 内容空了\n const $p = $('<p><br/></p>')\n $textElem.html(' ') // 一定要先清空,否则在 firefox 下有问题\n $textElem.append($p)\n editor.selection.createRangeByElem($p, false, true)\n editor.selection.restoreSelection()\n // 设置折叠后的光标位置,在firebox等浏览器下\n // 光标设置在end位置会自动换行\n editor.selection.moveCursor($p.getNode(), true)\n }\n }\n deleteUpEvents.push(upFn)\n\n function downFn(e: Event) {\n const $textElem = editor.$textElem\n const txtHtml = $textElem.html().toLowerCase().trim()\n if (txtHtml === '<p><br></p>') {\n // 最后剩下一个空行,就不再删除了\n e.preventDefault()\n return\n }\n }\n deleteDownEvents.push(downFn)\n}\n\nexport default deleteToKeepP\n","/**\n * @description 编辑区域 tab 的特殊处理\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\n\n/**\n * 编辑区域 tab 的特殊处理,转换为空格\n * @param editor 编辑器实例\n * @param tabDownEvents tab down 事件钩子\n */\nfunction tabHandler(editor: Editor, tabDownEvents: Function[]) {\n // 定义函数\n function fn() {\n if (!editor.cmd.queryCommandSupported('insertHTML')) {\n // 必须原生支持 insertHTML 命令\n return\n }\n const $selectionElem = editor.selection.getSelectionContainerElem()\n if (!$selectionElem) {\n return\n }\n const $parentElem = $selectionElem.parent()\n const selectionNodeName = $selectionElem.getNodeName()\n const parentNodeName = $parentElem.getNodeName()\n\n if (\n selectionNodeName == 'CODE' ||\n parentNodeName === 'CODE' ||\n parentNodeName === 'PRE' ||\n /hljs/.test(parentNodeName)\n ) {\n // <pre><code> 里面\n editor.cmd.do('insertHTML', editor.config.languageTab)\n } else {\n // 普通文字\n editor.cmd.do('insertHTML', '&nbsp;&nbsp;&nbsp;&nbsp;')\n }\n }\n\n // 保留函数\n tabDownEvents.push(fn)\n}\n\nexport default tabHandler\n","/**\n * @description 粘贴 text html\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { getPasteText, getPasteHtml } from '../paste/paste-event'\nimport { isFunction } from '../../utils/util'\nimport { urlRegex } from '../../utils/const'\n\n/**\n * 格式化html\n * @param val 粘贴的html\n * @author liuwei\n */\nfunction formatHtml(val: string) {\n let pasteText = val\n // div 全部替换为 p 标签\n pasteText = pasteText.replace(/<div>/gim, '<p>').replace(/<\\/div>/gim, '</p>')\n // 不允许空行,放在最后\n pasteText = pasteText.replace(/<p><\\/p>/gim, '<p><br></p>')\n // 去除''\n return pasteText.trim()\n}\n\n/**\n * 格式化html\n * @param val 粘贴的html\n * @author liuwei\n */\nfunction formatCode(val: string) {\n let pasteText = val.replace(/<br>|<br\\/>/gm, '\\n').replace(/<[^>]+>/gm, '')\n\n return pasteText\n}\n\n/**\n * 粘贴文本和 html\n * @param editor 编辑器对象\n * @param pasteEvents 粘贴事件列表\n */\nfunction pasteTextHtml(editor: Editor, pasteEvents: Function[]) {\n function fn(e: Event) {\n // 获取配置\n const config = editor.config\n const pasteFilterStyle = config.pasteFilterStyle\n const pasteIgnoreImg = config.pasteIgnoreImg\n const pasteTextHandle = config.pasteTextHandle\n\n // 获取粘贴的文字\n let pasteHtml = getPasteHtml(e as ClipboardEvent, pasteFilterStyle, pasteIgnoreImg)\n let pasteText = getPasteText(e as ClipboardEvent)\n pasteText = pasteText.replace(/\\n/gm, '<br>')\n\n // 当前选区所在的 DOM 节点\n const $selectionElem = editor.selection.getSelectionContainerElem()\n if (!$selectionElem) {\n return\n }\n const nodeName = $selectionElem?.getNodeName()\n const $topElem = $selectionElem?.getNodeTop(editor)\n\n // 当前节点顶级可能没有\n let topNodeName: string = ''\n if ($topElem.elems[0]) {\n topNodeName = $topElem?.getNodeName()\n }\n // code 中只能粘贴纯文本\n if (nodeName === 'CODE' || topNodeName === 'PRE') {\n if (pasteTextHandle && isFunction(pasteTextHandle)) {\n // 用户自定义过滤处理粘贴内容\n pasteText = '' + (pasteTextHandle(pasteText) || '')\n }\n editor.cmd.do('insertHTML', formatCode(pasteText))\n return\n }\n\n // 如果复制进来的是url链接则插入时将它转为链接\n if (urlRegex.test(pasteText)) {\n return editor.cmd.do(\n 'insertHTML',\n `<a href=\"${pasteText}\" target=\"_blank\">${pasteText}</a>`\n )\n }\n\n // table 中(td、th),待开发。。。\n\n if (!pasteHtml) {\n return\n }\n\n try {\n // firefox 中,获取的 pasteHtml 可能是没有 <ul> 包裹的 <li>\n // 因此执行 insertHTML 会报错\n if (pasteTextHandle && isFunction(pasteTextHandle)) {\n // 用户自定义过滤处理粘贴内容\n pasteHtml = '' + (pasteTextHandle(pasteHtml) || '') // html\n }\n editor.cmd.do('insertHTML', `${formatHtml(pasteHtml)}`)\n } catch (ex) {\n // 此时使用 pasteText 来兼容一下\n if (pasteTextHandle && isFunction(pasteTextHandle)) {\n // 用户自定义过滤处理粘贴内容\n pasteText = '' + (pasteTextHandle(pasteText) || '')\n }\n editor.cmd.do('insertHTML', `${formatHtml(pasteText)}`) // text\n }\n }\n\n pasteEvents.push(fn)\n}\n\nexport default pasteTextHtml\n","/**\n * @description 将粘贴的 html 字符串,转换为正确、简洁的 html 代码。剔除不必要的标签和属性。\n * @author wangfupeng\n */\n\nimport { EMPTY_TAGS, IGNORE_TAGS, NECESSARY_ATTRS } from './tags'\nimport HtmlParser from '../../lib/simplehtmlparser.js'\n\ntype AttrType = {\n name: string\n value: string\n}\n\n/**\n * 过滤掉空 span\n * @param html html\n */\nfunction filterEmptySpan(html: string): string {\n const regForReplace = /<span>.*?<\\/span>/gi\n const regForMatch = /<span>(.*?)<\\/span>/\n return html.replace(regForReplace, (s: string): string => {\n // s 是单个 span ,如 <span>文字</span>\n const result = s.match(regForMatch)\n if (result == null) return ''\n return result[1]\n })\n}\n\n/**\n * 是否忽略标签\n * @param tag tag\n * @param ignoreImg 是否忽略 img 标签\n */\nfunction isIgnoreTag(tag: string, ignoreImg: boolean): boolean {\n tag = tag.toLowerCase().trim()\n\n // 忽略的标签\n if (IGNORE_TAGS.has(tag)) {\n return true\n }\n\n // 是否忽略图片\n if (ignoreImg) {\n if (tag === 'img') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * 为 tag 生成 html 字符串,开始部分\n * @param tag tag\n * @param attrs 属性\n */\nfunction genStartHtml(tag: string, attrs: AttrType[]): string {\n let result = ''\n\n // tag < 符号\n result = `<${tag}`\n\n // 拼接属性\n let attrStrArr: string[] = []\n attrs.forEach((attr: AttrType) => {\n attrStrArr.push(`${attr.name}=\"${attr.value}\"`)\n })\n if (attrStrArr.length > 0) {\n result = result + ' ' + attrStrArr.join(' ')\n }\n\n // tag > 符号\n const isEmpty = EMPTY_TAGS.has(tag) // 没有子节点或文本的标签,如 img\n result = result + (isEmpty ? '/' : '') + '>'\n\n return result\n}\n\n/**\n * 为 tag 生成 html 字符串,结尾部分\n * @param tag tag\n */\nfunction genEndHtml(tag: string) {\n return `</${tag}>`\n}\n\n/**\n * 处理粘贴的 html\n * @param html html 字符串\n * @param filterStyle 是否过滤 style 样式\n * @param ignoreImg 是否忽略 img 标签\n */\nfunction parseHtml(html: string, filterStyle: boolean = true, ignoreImg: boolean = false): string {\n let resultArr: string[] = [] // 存储结果,数组形式,最后再 join\n\n // 当前正在处理的标签,以及记录和清除的方法\n let CUR_TAG = ''\n function markTagStart(tag: string): void {\n tag = tag.trim()\n if (!tag) return\n if (EMPTY_TAGS.has(tag)) return // 内容为空的标签,如 img ,不用记录\n CUR_TAG = tag\n }\n function markTagEnd(): void {\n CUR_TAG = ''\n }\n\n // 能通过 'text/html' 格式获取 html\n const htmlParser = new HtmlParser()\n htmlParser.parse(html, {\n startElement(tag: string, attrs: []) {\n // 首先,标记开始\n markTagStart(tag)\n\n // 忽略的标签\n if (isIgnoreTag(tag, ignoreImg)) {\n return\n }\n\n // 找出该标签必须的属性(其他的属性忽略)\n const necessaryAttrKeys = NECESSARY_ATTRS.get(tag) || []\n const attrsForTag: AttrType[] = []\n attrs.forEach((attr: AttrType) => {\n // 属性名\n const name = attr.name\n\n // style 单独处理\n if (name === 'style') {\n // 保留 style 样式\n if (!filterStyle) {\n attrsForTag.push(attr)\n }\n return\n }\n\n // 除了 style 之外的其他属性\n if (necessaryAttrKeys.includes(name) === false) {\n // 不是必须的属性,忽略\n return\n }\n attrsForTag.push(attr)\n })\n\n // 拼接为 HTML 标签\n const html = genStartHtml(tag, attrsForTag)\n resultArr.push(html)\n },\n characters(str: string) {\n str = str.trim()\n if (!str) return\n\n // 忽略的标签\n // 如果复制拿到的内容是 `<body><html>这种形式无法成功粘贴</html></body>`\n if (isIgnoreTag(CUR_TAG, ignoreImg) && /^</.test(str)) {\n return\n }\n\n resultArr.push(str)\n },\n endElement(tag: string) {\n // 忽略的标签\n if (isIgnoreTag(tag, ignoreImg)) {\n return\n }\n\n // 拼接为 HTML 标签\n const html = genEndHtml(tag)\n resultArr.push(html)\n\n // 最后,标记结束\n markTagEnd()\n },\n comment(str: string) {\n /* 注释,不做处理 */\n },\n })\n\n let result = resultArr.join('') // 转换为字符串\n\n // 过滤掉空 span 标签\n result = filterEmptySpan(result)\n\n return result\n}\n\nexport default parseHtml\n","/**\n * @description 粘贴相关的 tags\n * @author wangfupeng\n */\n\n// 忽略的标签\nexport const IGNORE_TAGS = new Set([\n 'doctype',\n '!doctype',\n 'html',\n 'head',\n 'meta',\n 'body',\n 'script',\n 'style',\n 'link',\n 'frame',\n 'iframe',\n 'title',\n 'svg', // 暂时忽略,有需要再修改\n 'center',\n])\n\n// 指定标签必要的属性\nexport const NECESSARY_ATTRS = new Map([\n ['img', ['src', 'alt']],\n ['a', ['href', 'target']],\n ['td', ['colspan', 'rowspan']],\n ['th', ['colspan', 'rowspan']],\n])\n\n// 没有子节点或文本的标签\nexport const EMPTY_TAGS = new Set([\n 'area',\n 'base',\n 'basefont',\n 'br',\n 'col',\n 'hr',\n 'img',\n 'input',\n 'isindex',\n 'embed',\n])\n\n// 编辑区域顶级节点\nexport const TOP_LEVEL_TAGS = new Set([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'p',\n 'ul',\n 'ol',\n 'table',\n 'blockquote', // 引用\n 'pre', // 代码\n 'hr',\n 'form',\n])\n","var parent = require('../../es/set');\n\nmodule.exports = parent;\n","require('../../modules/es.set');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.github.io/ecma262/#sec-set-objects\nmodule.exports = collection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","// Copyright 2004 Erik Arvidsson. All Rights Reserved.\n//\n// This code is triple licensed using Apache Software License 2.0,\n// Mozilla Public License or GNU Public License\n//\n///////////////////////////////////////////////////////////////////////////////\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy\n// of the License at http://www.apache.org/licenses/LICENSE-2.0\n//\n///////////////////////////////////////////////////////////////////////////////\n//\n// The contents of this file are subject to the Mozilla Public License\n// Version 1.1 (the \"License\"); you may not use this file except in\n// compliance with the License. You may obtain a copy of the License at\n// http://www.mozilla.org/MPL/\n//\n// Software distributed under the License is distributed on an \"AS IS\"\n// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the\n// License for the specific language governing rights and limitations\n// under the License.\n//\n// The Original Code is Simple HTML Parser.\n//\n// The Initial Developer of the Original Code is Erik Arvidsson.\n// Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights\n// Reserved.\n//\n///////////////////////////////////////////////////////////////////////////////\n//\n// This program is free software; you can redistribute it and/or\n// modify it under the terms of the GNU General Public License\n// as published by the Free Software Foundation; either version 2\n// of the License, or (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with this program; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n//\n///////////////////////////////////////////////////////////////////////////////\n\n/*\nvar handler ={\n\tstartElement: function (sTagName, oAttrs) {},\n\tendElement: function (sTagName) {},\n characters:\t\tfunction (s) {},\n comment:\t\tfunction (s) {}\n};\n*/\n\nfunction SimpleHtmlParser() {}\n\nSimpleHtmlParser.prototype = {\n handler: null,\n\n // regexps\n\n startTagRe: /^<([^>\\s\\/]+)((\\s+[^=>\\s]+(\\s*=\\s*((\\\"[^\"]*\\\")|(\\'[^']*\\')|[^>\\s]+))?)*)\\s*\\/?\\s*>/m,\n endTagRe: /^<\\/([^>\\s]+)[^>]*>/m,\n attrRe: /([^=\\s]+)(\\s*=\\s*((\\\"([^\"]*)\\\")|(\\'([^']*)\\')|[^>\\s]+))?/gm,\n\n parse: function (s, oHandler) {\n if (oHandler) this.contentHandler = oHandler\n\n var i = 0\n var res, lc, lm, rc, index\n var treatAsChars = false\n var oThis = this\n while (s.length > 0) {\n // Comment\n if (s.substring(0, 4) == '<!--') {\n index = s.indexOf('-->')\n if (index != -1) {\n this.contentHandler.comment(s.substring(4, index))\n s = s.substring(index + 3)\n treatAsChars = false\n } else {\n treatAsChars = true\n }\n }\n\n // end tag\n else if (s.substring(0, 2) == '</') {\n if (this.endTagRe.test(s)) {\n lc = RegExp.leftContext\n lm = RegExp.lastMatch\n rc = RegExp.rightContext\n\n lm.replace(this.endTagRe, function () {\n return oThis.parseEndTag.apply(oThis, arguments)\n })\n\n s = rc\n treatAsChars = false\n } else {\n treatAsChars = true\n }\n }\n // start tag\n else if (s.charAt(0) == '<') {\n if (this.startTagRe.test(s)) {\n lc = RegExp.leftContext\n lm = RegExp.lastMatch\n rc = RegExp.rightContext\n\n lm.replace(this.startTagRe, function () {\n return oThis.parseStartTag.apply(oThis, arguments)\n })\n\n s = rc\n treatAsChars = false\n } else {\n treatAsChars = true\n }\n }\n\n if (treatAsChars) {\n index = s.indexOf('<')\n if (index == -1) {\n this.contentHandler.characters(s)\n s = ''\n } else {\n this.contentHandler.characters(s.substring(0, index))\n s = s.substring(index)\n }\n }\n\n treatAsChars = true\n }\n },\n\n parseStartTag: function (sTag, sTagName, sRest) {\n var attrs = this.parseAttributes(sTagName, sRest)\n this.contentHandler.startElement(sTagName, attrs)\n },\n\n parseEndTag: function (sTag, sTagName) {\n this.contentHandler.endElement(sTagName)\n },\n\n parseAttributes: function (sTagName, s) {\n var oThis = this\n var attrs = []\n s.replace(this.attrRe, function (a0, a1, a2, a3, a4, a5, a6) {\n attrs.push(oThis.parseAttribute(sTagName, a0, a1, a2, a3, a4, a5, a6))\n })\n return attrs\n },\n\n parseAttribute: function (sTagName, sAttribute, sName) {\n var value = ''\n if (arguments[7]) value = arguments[8]\n else if (arguments[5]) value = arguments[6]\n else if (arguments[3]) value = arguments[4]\n\n var empty = !value && !arguments[3]\n return { name: sName, value: empty ? null : value }\n },\n}\n\n// export default SimpleHtmlParser\nmodule.exports = SimpleHtmlParser\n","/**\n * @description 图片点击后选区更新到img的位置\n * @author tonghan\n */\n\nimport Editor from '../../editor/index'\nimport { DomElement } from '../../utils/dom-core'\n\n/**\n * 图片点击后选区更新到img的位置\n * @param editor 编辑器实例\n * @param imgClickEvents delete 键 up 时的 hooks\n */\nfunction imgClickActive(editor: Editor, imgClickEvents: Function[]) {\n function clickFn($img: DomElement) {\n editor.selection.createRangeByElem($img)\n editor.selection.restoreSelection()\n }\n imgClickEvents.push(clickFn)\n}\n\nexport default imgClickActive\n","/**\n * @description 获取子元素的 JSON 格式数据\n * @author wangfupeng\n */\n\nimport { replaceHtmlSymbol } from '../utils/util'\nimport $, { DomElement } from '../utils/dom-core'\n\ntype AttrType = {\n name: string\n value: string\n}\nexport type NodeType = {\n tag: string\n attrs: AttrType[]\n children: NodeListType\n}\nexport type NodeListType = Array<string | NodeType>\n\n/**\n * 获取子元素的 JSON 格式数据\n * @param $elem DOM 节点\n */\nfunction getChildrenJSON($elem: DomElement): NodeListType {\n const result: NodeListType = [] // 存储结果\n\n const $children = $elem.childNodes() || [] // 注意 childNodes() 可以获取文本节点\n $children.forEach((curElem: HTMLElement) => {\n let elemResult\n const nodeType = curElem.nodeType\n\n // 文本节点\n if (nodeType === 3) {\n elemResult = curElem.textContent || ''\n elemResult = replaceHtmlSymbol(elemResult)\n }\n\n // 普通 DOM 节点\n if (nodeType === 1) {\n elemResult = {}\n elemResult = elemResult as NodeType\n\n // tag\n elemResult.tag = curElem.nodeName.toLowerCase()\n // attr\n const attrData = []\n const attrList = curElem.attributes || []\n const attrListLength = attrList.length || 0\n for (let i = 0; i < attrListLength; i++) {\n const attr = attrList[i]\n attrData.push({\n name: attr.name,\n value: attr.value,\n })\n }\n elemResult.attrs = attrData\n // children(递归)\n elemResult.children = getChildrenJSON($(curElem))\n }\n\n if (elemResult) {\n result.push(elemResult)\n }\n })\n return result\n}\n\nexport default getChildrenJSON\n","/**\n * @description 从nodeList json格式中遍历生成dom元素\n * @author zhengwenjian\n */\n\nimport $, { DomElement } from './../utils/dom-core'\nimport { NodeListType } from './getChildrenJSON'\n\nfunction getHtmlByNodeList(\n nodeList: NodeListType,\n parent: Node = document.createElement('div')\n): DomElement {\n // 设置一个父节点存储所有子节点\n let root = parent\n\n // 遍历节点JSON\n nodeList.forEach(item => {\n let elem: Text | Node | undefined\n\n // 当为文本节点时\n if (typeof item === 'string') {\n elem = document.createTextNode(item)\n }\n\n // 当为普通节点时\n if (typeof item === 'object') {\n elem = document.createElement(item.tag)\n item.attrs.forEach(attr => {\n $(elem).attr(attr.name, attr.value)\n })\n\n // 有子节点时递归将子节点加入当前节点\n if (item.children && item.children.length > 0) {\n getHtmlByNodeList(item.children, elem.getRootNode())\n }\n }\n elem && root.appendChild(elem)\n })\n return $(root)\n}\n\nexport default getHtmlByNodeList\n","/**\n * @description Menus 菜单栏 入口文件\n * @author wangfupeng\n */\n\nimport Editor from '../editor/index'\nimport Menu from './menu-constructors/Menu'\nimport MenuConstructorList, { MenuListType } from './menu-list'\n\n// import { MenuActive } from './menu-constructors/Menu'\n\nclass Menus {\n public editor: Editor\n public menuList: Menu[]\n public constructorList: MenuListType\n\n constructor(editor: Editor) {\n this.editor = editor\n this.menuList = []\n this.constructorList = MenuConstructorList // 所有菜单构造函数的列表\n }\n\n /**\n * 自定义添加菜单\n * @param key 菜单 key ,和 editor.config.menus 对应\n * @param Menu 菜单构造函数\n */\n public extend(key: string, Menu: any) {\n if (!Menu || typeof Menu !== 'function') return\n this.constructorList[key] = Menu\n }\n\n // 初始化菜单\n public init(): void {\n // 从用户配置的 menus 入手,看需要初始化哪些菜单\n const config = this.editor.config\n config.menus.forEach(menuKey => {\n const MenuConstructor = this.constructorList[menuKey] // 暂用 any ,后面再替换\n if (MenuConstructor == null || typeof MenuConstructor !== 'function') {\n // 必须是 class\n return\n }\n // 创建 menu 实例,并放到 menuList 中\n const m = new MenuConstructor(this.editor)\n m.key = menuKey\n this.menuList.push(m)\n })\n\n // 渲染 DOM\n this._addToToolbar()\n }\n\n // 添加到菜单栏\n private _addToToolbar(): void {\n const editor = this.editor\n const $toolbarElem = editor.$toolbarElem\n\n // 遍历添加到 DOM\n this.menuList.forEach(menu => {\n const $elem = menu.$elem\n if ($elem) {\n $toolbarElem.append($elem)\n }\n })\n }\n\n /**\n * 获取菜单对象\n * @param 菜单名称 小写\n * @return Menus 菜单对象\n */\n public menuFind(key: string): Menu {\n const menuList = this.menuList\n for (let i = 0, l = menuList.length; i < l; i++) {\n if (menuList[i].key === key) return menuList[i]\n }\n\n return menuList[0]\n }\n\n /**\n * @description 修改菜单激活状态\n */\n public changeActive(): void {\n this.menuList.forEach(menu => {\n setTimeout((menu as any).tryChangeActive.bind(menu), 100) // 暂用 any ,后面再替换\n })\n }\n}\n\nexport default Menus\n","/**\n * @description 所有菜单的构造函数\n * @author wangfupeng\n */\n\nimport Bold from './bold/index'\nimport Head from './head/index'\nimport Link from './link/index'\nimport Italic from './italic/index'\nimport Underline from './underline/index'\nimport StrikeThrough from './strike-through/index'\nimport FontStyle from './font-style/index'\nimport FontSize from './font-size'\nimport Justify from './justify/index'\nimport Quote from './quote/index'\nimport BackColor from './back-color/index'\nimport FontColor from './font-color/index'\nimport Video from './video/index'\nimport Image from './img/index'\nimport Indent from './indent/index'\nimport Emoticon from './emoticon/index'\nimport List from './list/index'\nimport LineHeight from './lineHeight/index'\nimport Undo from './undo/index'\nimport Redo from './redo/index'\nimport Table from './table/index'\nimport Code from './code'\nimport SplitLine from './split-line/index'\n\nexport type MenuListType = {\n [key: string]: any\n}\n\nexport default {\n bold: Bold,\n head: Head,\n italic: Italic,\n link: Link,\n underline: Underline,\n strikeThrough: StrikeThrough,\n fontName: FontStyle,\n fontSize: FontSize,\n justify: Justify,\n quote: Quote,\n backColor: BackColor,\n foreColor: FontColor,\n video: Video,\n image: Image,\n indent: Indent,\n emoticon: Emoticon,\n list: List,\n lineHeight: LineHeight,\n undo: Undo,\n redo: Redo,\n table: Table,\n code: Code,\n splitLine: SplitLine,\n}\n","/**\n * @description 加粗\n * @author wangfupeng\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Bold extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-bold\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n if (isSelectEmpty) {\n // 选区范围是空的,插入并选中一个“空白”\n editor.selection.createEmptyRange()\n }\n\n // 执行 bold 命令\n editor.cmd.do('bold')\n\n if (isSelectEmpty) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n if (editor.cmd.queryCommandState('bold')) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Bold\n","var parent = require('../../es/object/set-prototype-of');\n\nmodule.exports = parent;\n","require('../../modules/es.object.set-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.setPrototypeOf;\n","var $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","/**\n * @description 标题\n * @author wangfupeng\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport { getRandomCode } from '../../utils/util'\nimport { TCatalog } from '../../config/events'\n\nclass Head extends DropListMenu implements MenuActive {\n oldCatalogs: TCatalog[] | undefined\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-header\"></i></div>')\n const dropListConf = {\n width: 100,\n title: '设置标题',\n type: 'list', // droplist 以列表形式展示\n list: [\n { $elem: $('<h1>H1</h1>'), value: '<h1>' },\n { $elem: $('<h2>H2</h2>'), value: '<h2>' },\n { $elem: $('<h3>H3</h3>'), value: '<h3>' },\n { $elem: $('<h4>H4</h4>'), value: '<h4>' },\n { $elem: $('<h5>H5</h5>'), value: '<h5>' },\n {\n $elem: $(`<p>${editor.i18next.t('menus.dropListMenu.head.正文')}</p>`),\n value: '<p>',\n },\n ],\n clickHandler: (value: string) => {\n // 注意 this 是指向当前的 Head 对象\n this.command(value)\n },\n }\n super($elem, editor, dropListConf)\n\n const onCatalogChange = editor.config.onCatalogChange\n // 未配置目录change监听回调时不运行下面操作\n if (onCatalogChange) {\n this.oldCatalogs = []\n this.addListenerCatalog() // 监听文本框编辑时的大纲信息\n this.getCatalogs() // 初始有值的情况获取一遍大纲信息\n }\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const $selectionElem = editor.selection.getSelectionContainerElem()\n if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n // 不能选中多行来设置标题,否则会出现问题\n // 例如选中的是 <p>xxx</p><p>yyy</p> 来设置标题,设置之后会成为 <h1>xxx<br>yyy</h1> 不符合预期\n return\n }\n\n editor.cmd.do('formatBlock', value)\n\n // 标题设置成功且不是<p>正文标签就配置大纲id\n value !== '<p>' && this.addUidForSelectionElem()\n }\n\n /**\n * 为标题设置大纲\n */\n private addUidForSelectionElem() {\n const editor = this.editor\n const tag = editor.selection.getSelectionContainerElem()\n const id = getRandomCode() // 默认五位数id\n $(tag).attr('id', id)\n }\n\n /**\n * 监听change事件来返回大纲信息\n */\n private addListenerCatalog() {\n const editor = this.editor\n editor.txt.eventHooks.changeEvents.push(() => {\n this.getCatalogs()\n })\n }\n\n /**\n * 获取大纲数组\n */\n private getCatalogs() {\n const editor = this.editor\n const $textElem = this.editor.$textElem\n const onCatalogChange = editor.config.onCatalogChange\n const elems = $textElem.find('h1,h2,h3,h4,h5')\n const catalogs: TCatalog[] = []\n elems.forEach((elem, index) => {\n const $elem = $(elem)\n let id = $elem.attr('id')\n const tag = $elem.getNodeName()\n const text = $elem.text()\n if (!id) {\n id = getRandomCode()\n $elem.attr('id', id)\n }\n // 标题为空的情况不生成目录\n if (!text) return\n catalogs.push({\n tag,\n id,\n text,\n })\n })\n // 旧目录和新目录对比是否相等,不相等则运行回调并保存新目录到旧目录变量,以方便下一次对比\n if (JSON.stringify(this.oldCatalogs) !== JSON.stringify(catalogs)) {\n this.oldCatalogs = catalogs\n onCatalogChange && onCatalogChange(catalogs)\n }\n }\n\n /**\n * 尝试改变菜单激活(高亮)状态\n */\n public tryChangeActive() {\n const editor = this.editor\n const reg = /^h/i\n const cmdValue = editor.cmd.queryCommandValue('formatBlock')\n if (reg.test(cmdValue)) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Head\n","module.exports = require(\"core-js-pure/stable/json/stringify\");","var parent = require('../../es/json/stringify');\n\nmodule.exports = parent;\n","require('../../modules/es.json.stringify');\nvar core = require('../../internals/path');\n\nif (!core.JSON) core.JSON = { stringify: JSON.stringify };\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function stringify(it, replacer, space) {\n return core.JSON.stringify.apply(null, arguments);\n};\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar fails = require('../internals/fails');\n\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar re = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar fix = function (match, offset, string) {\n var prev = string.charAt(offset - 1);\n var next = string.charAt(offset + 1);\n if ((low.test(match) && !hi.test(next)) || (hi.test(match) && !low.test(prev))) {\n return '\\\\u' + match.charCodeAt(0).toString(16);\n } return match;\n};\n\nvar FORCED = fails(function () {\n return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nif ($stringify) {\n // https://github.com/tc39/proposal-well-formed-stringify\n $({ target: 'JSON', stat: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars\n stringify: function stringify(it, replacer, space) {\n var result = $stringify.apply(null, arguments);\n return typeof result == 'string' ? result.replace(re, fix) : result;\n }\n });\n}\n","/**\n * @description 链接 菜单\n * @author wangfupeng\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\nimport createPanelConf from './create-panel-conf'\nimport isActive from './is-active'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\n\nclass Link extends PanelMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-link\"></i></div>')\n super($elem, editor)\n\n // 绑定事件,如点击链接时,可以查看链接\n bindEvent(editor)\n }\n\n /**\n * 菜单点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n let $linkElem\n\n if (this.isActive) {\n // 菜单被激活,说明选区在链接里\n $linkElem = editor.selection.getSelectionContainerElem()\n if (!$linkElem) {\n return\n }\n\n // 弹出 panel\n this.createPanel($linkElem.text(), $linkElem.attr('href'))\n } else {\n // 菜单未被激活,说明选区不在链接里\n if (editor.selection.isSelectionEmpty()) {\n // 选区是空的,未选中内容\n this.createPanel('', '')\n } else {\n // 选中内容了\n this.createPanel(editor.selection.getSelectionText(), '')\n }\n }\n }\n\n /**\n * 创建 panel\n * @param text 文本\n * @param link 链接\n */\n private createPanel(text: string, link: string): void {\n const conf = createPanelConf(this.editor, text, link)\n const panel = new Panel(this, conf)\n panel.create()\n }\n\n /**\n * 尝试修改菜单 active 状态\n */\n public tryChangeActive() {\n const editor = this.editor\n if (isActive(editor)) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Link\n","/**\n * @description link 菜单 panel tab 配置\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $, { DomElement } from '../../utils/dom-core'\nimport isActive from './is-active'\n\nexport default function (editor: Editor, text: string, link: string): PanelConf {\n // panel 中需要用到的id\n const inputLinkId = getRandom('input-link')\n const inputTextId = getRandom('input-text')\n const btnOkId = getRandom('btn-ok')\n const btnDelId = getRandom('btn-del')\n\n // 是否显示“取消链接”\n const delBtnDisplay = isActive(editor) ? 'inline-block' : 'none'\n\n let $selectedLink: DomElement\n\n /**\n * 选中整个链接元素\n */\n function selectLinkElem(): void {\n if (!isActive(editor)) return\n\n const $linkElem = editor.selection.getSelectionContainerElem()\n if (!$linkElem) return\n editor.selection.createRangeByElem($linkElem)\n editor.selection.restoreSelection()\n\n $selectedLink = $linkElem // 赋值给函数内全局变量\n }\n\n /**\n * 插入链接\n * @param text 文字\n * @param link 链接\n */\n function insertLink(text: string, link: string): void {\n if (isActive(editor)) {\n // 选区处于链接中,则选中整个菜单,再执行 insertHTML\n selectLinkElem()\n editor.cmd.do('insertHTML', `<a href=\"${link}\" target=\"_blank\">${text}</a>`)\n } else {\n // 选区未处于链接中,直接插入即可\n editor.cmd.do('insertHTML', `<a href=\"${link}\" target=\"_blank\">${text}</a>`)\n }\n }\n\n /**\n * 取消链接\n */\n function delLink(): void {\n if (!isActive(editor)) {\n return\n }\n // 选中整个链接\n selectLinkElem()\n // 用文本替换链接\n const selectionText = $selectedLink.text()\n editor.cmd.do('insertHTML', '<span>' + selectionText + '</span>')\n }\n\n /**\n * 校验链接是否合法\n * @param link 链接\n */\n function checkLink(text: string, link: string): boolean {\n //查看开发者自定义配置的返回值\n const check = editor.config.linkCheck(text, link)\n if (check === undefined) {\n //用户未能通过开发者的校验,且开发者不希望编辑器提示用户\n } else if (check === true) {\n //用户通过了开发者的校验\n return true\n } else {\n //用户未能通过开发者的校验,开发者希望我们提示这一字符串\n editor.config.customAlert(check, 'warning')\n }\n return false\n }\n\n const conf = {\n width: 300,\n height: 0,\n\n // panel 中可包含多个 tab\n tabs: [\n {\n // tab 的标题\n title: editor.i18next.t('menus.panelMenus.link.链接'),\n // 模板\n tpl: `<div>\n <input\n id=\"${inputTextId}\"\n type=\"text\"\n class=\"block\"\n value=\"${text}\"\n placeholder=\"${editor.i18next.t('menus.panelMenus.link.链接文字')}\"/>\n </td>\n <input\n id=\"${inputLinkId}\"\n type=\"text\"\n class=\"block\"\n value=\"${link}\"\n placeholder=\"${editor.i18next.t('如')} https://...\"/>\n </td>\n <div class=\"w-e-button-container\">\n <button id=\"${btnOkId}\" class=\"right\">\n ${editor.i18next.t('插入')}\n </button>\n <button id=\"${btnDelId}\" class=\"gray right\" style=\"display:${delBtnDisplay}\">\n ${editor.i18next.t('menus.panelMenus.link.取消链接')}\n </button>\n </div>\n </div>`,\n // 事件绑定\n events: [\n // 插入链接\n {\n selector: '#' + btnOkId,\n type: 'click',\n fn: () => {\n // 执行插入链接\n const $link = $('#' + inputLinkId)\n const $text = $('#' + inputTextId)\n let link = $link.val().trim()\n let text = $text.val().trim()\n\n // 链接为空,则不插入\n if (!link) return\n // 文本为空,则用链接代替\n if (!text) text = link\n // 校验链接是否满足用户的规则,若不满足则不插入\n if (!checkLink(text, link)) return\n insertLink(text, link)\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true\n },\n },\n // 取消链接\n {\n selector: '#' + btnDelId,\n type: 'click',\n fn: () => {\n // 执行取消链接\n delLink()\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true\n },\n },\n ],\n }, // tab end\n ], // tabs end\n }\n\n return conf\n}\n","/**\n * @description 绑定链接元素的事件,入口\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltipEvent from './tooltip-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor) {\n // tooltip 事件\n bindTooltipEvent(editor)\n}\n\nexport default bindEvent\n","/**\n * @description tooltip 事件\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n let tooltip: Tooltip | null\n\n /**\n * 显示 tooltip\n * @param $link 链接元素\n */\n function showLinkTooltip($link: DomElement) {\n const conf: TooltipConfType = [\n {\n $elem: $(`<span>${editor.i18next.t('menus.panelMenus.link.查看链接')}</span>`),\n onClick: (editor: Editor, $link: DomElement) => {\n const link = $link.attr('href')\n window.open(link, '_target')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n {\n $elem: $(`<span>${editor.i18next.t('menus.panelMenus.link.取消链接')}</span>`),\n onClick: (editor: Editor, $link: DomElement) => {\n // 选中链接元素\n editor.selection.createRangeByElem($link)\n editor.selection.restoreSelection()\n\n // 用文字,替换链接\n const selectionText = $link.text()\n editor.cmd.do('insertHTML', '<span>' + selectionText + '</span>')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n ]\n\n // 创建 tooltip\n tooltip = new Tooltip(editor, $link, conf)\n tooltip.create()\n }\n\n /**\n * 隐藏 tooltip\n */\n function hideLinkTooltip() {\n // 移除 tooltip\n if (tooltip) {\n tooltip.remove()\n tooltip = null\n }\n }\n\n return {\n showLinkTooltip,\n hideLinkTooltip,\n }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nfunction bindTooltipEvent(editor: Editor) {\n const { showLinkTooltip, hideLinkTooltip } = createShowHideFn(editor)\n\n // 点击链接元素是,显示 tooltip\n editor.txt.eventHooks.linkClickEvents.push(showLinkTooltip)\n\n // 点击其他地方,或者滚动时,隐藏 tooltip\n editor.txt.eventHooks.clickEvents.push(hideLinkTooltip)\n editor.txt.eventHooks.keyupEvents.push(hideLinkTooltip)\n editor.txt.eventHooks.toolbarClickEvents.push(hideLinkTooltip)\n editor.txt.eventHooks.menuClickEvents.push(hideLinkTooltip)\n editor.txt.eventHooks.textScrollEvents.push(hideLinkTooltip)\n}\n\nexport default bindTooltipEvent\n","/**\n * @description 斜体\n * @author liuwei\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Italic extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-italic\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n if (isSelectEmpty) {\n // 选区范围是空的,插入并选中一个“空白”\n editor.selection.createEmptyRange()\n }\n\n // 执行 italic 命令\n editor.cmd.do('italic')\n\n if (isSelectEmpty) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n if (editor.cmd.queryCommandState('italic')) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Italic\n","/**\n * @description 下划线 underline\n * @author dyl\n *\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Underline extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-underline\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n if (isSelectEmpty) {\n // 选区范围是空的,插入并选中一个“空白”\n editor.selection.createEmptyRange()\n }\n\n // 执行 Underline 命令\n editor.cmd.do('underline')\n\n if (isSelectEmpty) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n if (editor.cmd.queryCommandState('underline')) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Underline\n","/**\n * @description 删除线\n * @author lkw\n */\n\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass StrikeThrough extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-strikethrough\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const isSelectEmpty = editor.selection.isSelectionEmpty()\n\n if (isSelectEmpty) {\n // 选区范围是空的,插入并选中一个“空白”\n editor.selection.createEmptyRange()\n }\n\n // 执行 strikeThrough 命令\n editor.cmd.do('strikeThrough')\n\n if (isSelectEmpty) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n if (editor.cmd.queryCommandState('strikeThrough')) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default StrikeThrough\n","/**\n * @description 字体样式 FontStyle\n * @author dyl\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport FontStyleList from './FontStyleList'\n\nclass FontStyle extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-font\"></i>\n </div>`\n )\n let fontStyleList = new FontStyleList(editor.config.fontNames)\n const fontListConf = {\n width: 100,\n title: '设置字体',\n type: 'list',\n list: fontStyleList.getItemList(),\n clickHandler: (value: string) => {\n // this 是指向当前的 FontStyle 对象\n this.command(value)\n },\n }\n super($elem, editor, fontListConf)\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const isEmptySelection = editor.selection.isSelectionEmpty()\n\n const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n const isFont = $selectionElem?.nodeName.toLowerCase() !== 'p'\n const isSameValue = $selectionElem?.getAttribute('face') === value\n\n if (isEmptySelection) {\n if (isFont && !isSameValue) {\n const $elems = editor.selection.getSelectionRangeTopNodes(editor)\n editor.selection.createRangeByElem($elems[0])\n editor.selection.moveCursor($elems[0].elems[0])\n }\n // 插入空白选区\n editor.selection.createEmptyRange()\n }\n\n editor.cmd.do('fontName', value)\n\n if (isEmptySelection) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n * ?字体是否需要有激活状态这个操作?\n */\n public tryChangeActive(): void {\n // const editor = this.editor\n // const cmdValue = editor.cmd.queryCommandValue('fontName')\n // if (menusConfig.fontNames.indexOf(cmdValue) >= 0) {\n // this.active()\n // } else {\n // this.unActive()\n // }\n }\n}\n\nexport default FontStyle\n","/**\n * @description 字体 class\n * @author dyl\n */\nimport $ from '../../utils/dom-core'\nimport { DropListItem } from '../menu-constructors/DropList'\n\n/**\n * 封装的一个字体菜单列表数据的组装对象,\n * 原因是因为在constructor函数中,直接执行此流程,会让代码量看起来较多,\n * 如果要在constructor调用外部函数,个人目前发现会有错误提示,\n * 因此,想着顺便研究实践下ts,遍创建了这样一个类\n */\nclass FontStyleList {\n private itemList: DropListItem[]\n\n constructor(list: string[]) {\n this.itemList = []\n list.forEach(fontValue => {\n this.itemList.push({\n $elem: $(`<p style=\"font-family:'${fontValue}'\">${fontValue}</p>`),\n value: fontValue,\n })\n })\n }\n\n public getItemList(): DropListItem[] {\n return this.itemList\n }\n}\n\nexport default FontStyleList\n","/**\n * @description 字号 FontSize\n * @author lkw\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport FontSizeList from './FontSizeList'\n\nclass FontSize extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-text-heigh\"></i>\n </div>`\n )\n let fontStyleList = new FontSizeList(editor.config.fontSizes)\n const fontListConf = {\n width: 160,\n title: '设置字号',\n type: 'list',\n list: fontStyleList.getItemList(),\n clickHandler: (value: string) => {\n // this 是指向当前的 FontSize 对象\n this.command(value)\n },\n }\n super($elem, editor, fontListConf)\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const isEmptySelection = editor.selection.isSelectionEmpty()\n\n const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n const isFont = $selectionElem?.nodeName.toLowerCase() !== 'p'\n const isSameSize = $selectionElem?.getAttribute('size') === value\n\n if (isEmptySelection) {\n if (isFont && !isSameSize) {\n const $elems = editor.selection.getSelectionRangeTopNodes(editor)\n editor.selection.createRangeByElem($elems[0])\n editor.selection.moveCursor($elems[0].elems[0])\n }\n // 插入空白选区\n editor.selection.createEmptyRange()\n }\n\n editor.cmd.do('fontSize', value)\n\n if (isEmptySelection) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n * ?字号是否需要有激活状态这个操作?\n */\n public tryChangeActive(): void {}\n}\n\nexport default FontSize\n","/**\n * @description 字号 class\n * @author lkw\n */\nimport $ from '../../utils/dom-core'\nimport { DropListItem } from '../menu-constructors/DropList'\nimport { FontSizeConfType } from '../../config/menus'\n\n/**\n * FontSizeList 字号配置列表\n */\nclass FontSizeList {\n private itemList: DropListItem[]\n\n constructor(list: FontSizeConfType) {\n this.itemList = []\n for (let key in list) {\n const item = list[key]\n this.itemList.push({\n $elem: $(`<p style=\"font-size:${key}\">${item.name}</p>`),\n value: item.value,\n })\n }\n }\n\n public getItemList(): DropListItem[] {\n return this.itemList\n }\n}\n\nexport default FontSizeList\n","/**\n * @description 对齐方式\n * @author liuwei\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Justify extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-paragraph-left\"></i></div>')\n\n const dropListConf = {\n width: 100,\n title: '对齐方式',\n type: 'list', // droplist 以列表形式展示\n list: [\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-paragraph-left w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.justify.靠左')}\n </p>`\n ),\n value: 'justifyLeft',\n },\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-paragraph-center w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.justify.居中')}\n </p>`\n ),\n value: 'justifyCenter',\n },\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-paragraph-right w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.justify.靠右')}\n </p>`\n ),\n value: 'justifyRight',\n },\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-paragraph-justify w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.justify.两端')}\n </p>`\n ),\n value: 'justifyFull',\n },\n ],\n clickHandler: (value: string) => {\n // 执行对应的value操作\n this.command(value)\n },\n }\n super($elem, editor, dropListConf)\n }\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const selection = editor.selection\n const $selectionElem = selection.getSelectionContainerElem()\n // 保存选区\n selection.saveRange()\n // 定义对齐方式的type\n type justifyType = {\n [key: string]: string\n }\n // 数据项\n const justifyClass: justifyType = {\n justifyLeft: 'left',\n justifyCenter: 'center',\n justifyRight: 'right',\n justifyFull: 'justify',\n }\n // 获取顶级元素\n const $elems = editor.selection.getSelectionRangeTopNodes(editor)\n // 选区等于textElem时表示选择了多个段落\n if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n // 获取在css中对应style的值\n const justifyValue = justifyClass[value]\n $elems.forEach((el: DomElement) => {\n el.css('text-align', justifyValue)\n })\n } else {\n // 如果单行的使用execcommand实现\n editor.cmd.do(value, value)\n }\n //恢复选区\n selection.restoreSelection()\n }\n\n /**\n * 尝试改变菜单激活(高亮)状态\n * 默认左对齐,若选择其他对其方式对active进行高亮否则unActive\n * ?考虑优化的话 是否可以对具体选中的进行高亮\n */\n public tryChangeActive(): void {\n // const editor = this.editor\n // let isjustify = ['justifyCenter', 'justifyRight'].some(e => editor.cmd.queryCommandState(e))\n // if (isjustify) {\n // this.active()\n // } else {\n // this.unActive()\n // }\n }\n}\n\nexport default Justify\n","/**\n * @description 引用\n * @author tonghan\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event'\nimport createQuote from './create-quote-node'\n\nclass Quote extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-quotes-left\"></i>\n </div>`\n )\n super($elem, editor)\n bindEvent(editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const isSelectEmpty = editor.selection.isSelectionEmpty()\n const topNodeElem: DomElement[] = editor.selection.getSelectionRangeTopNodes(editor)\n const $topNodeElem: DomElement = topNodeElem[topNodeElem.length - 1]\n const nodeName = this.getTopNodeName()\n // IE 中不支持 formatBlock <BLOCKQUOTE> ,要用其他方式兼容\n // 兼容firefox无法取消blockquote的问题\n if (nodeName === 'BLOCKQUOTE') {\n // 撤销 quote\n const $targetELem = $($topNodeElem.childNodes())\n const len = $targetELem.length\n let $middle = $topNodeElem\n $targetELem.forEach((elem: Node) => {\n const $elem = $(elem)\n $elem.insertAfter($middle)\n $middle = $elem\n })\n $topNodeElem.remove()\n editor.selection.moveCursor($targetELem.elems[len - 1])\n // 即时更新btn状态\n this.tryChangeActive()\n } else {\n // 将 P 转换为 quote\n const $quote = createQuote(topNodeElem)\n $quote.insertAfter($topNodeElem)\n this.delSelectNode(topNodeElem)\n const moveNode = $quote.childNodes()?.last().getNode() as Node\n // 兼容firefox(firefox下空行情况下选区会在br后,造成自动换行的问题)\n moveNode.textContent\n ? editor.selection.moveCursor(moveNode)\n : editor.selection.moveCursor(moveNode, true)\n // 即时更新btn状态\n this.tryChangeActive()\n // 防止最后一行无法跳出\n $(`<p><br></p>`).insertAfter($quote)\n return\n }\n\n if (isSelectEmpty) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n const cmdValue = editor.selection.getSelectionRangeTopNodes(editor)[0]?.getNodeName()\n if (cmdValue === 'BLOCKQUOTE') {\n this.active()\n } else {\n this.unActive()\n }\n }\n\n /**\n * 获取包裹在最外层的节点(防止内部嵌入多个样式)\n * @param selectionElem 选中的节点\n * @returns {string} 最终要处理的节点名称\n */\n private getTopNodeName(): string {\n const editor = this.editor\n const $topNodeElem = editor.selection.getSelectionRangeTopNodes(editor)[0]\n const nodeName = $topNodeElem?.getNodeName()\n\n return nodeName\n }\n\n /**\n * 删除选中的元素\n * @param selectElem 选中的元素节点数组\n */\n private delSelectNode(selectElem: DomElement[]) {\n selectElem.forEach(node => {\n node.remove()\n })\n }\n}\n\nexport default Quote\n","import Editor from '../../../editor/index'\nimport $, { DomElement } from '../../../utils/dom-core'\nfunction bindEvent(editor: Editor) {\n function quoteEnter(e: Event) {\n const $selectElem = editor.selection.getSelectionContainerElem() as DomElement\n const $topSelectElem = editor.selection.getSelectionRangeTopNodes(editor)[0]\n // 对quote的enter进行特殊处理\n //最后一行为<p><br></p>时再按会出跳出blockquote\n if ($topSelectElem?.getNodeName() === 'BLOCKQUOTE') {\n // firefox下点击引用按钮会选中外容器<blockquote></blockquote>\n if ($selectElem.getNodeName() === 'BLOCKQUOTE') {\n const selectNode = $selectElem.childNodes()?.getNode() as Node\n editor.selection.moveCursor(selectNode)\n }\n if ($selectElem.text() === '') {\n e.preventDefault()\n $selectElem.remove()\n const $newLine = $('<p><br></p>')\n $newLine.insertAfter($topSelectElem)\n // 将光标移动br前面\n editor.selection.moveCursor($newLine.getNode(), true)\n }\n\n // 当blockQuote中没有内容回车后移除blockquote\n if ($topSelectElem.text() === '') {\n $topSelectElem.remove()\n }\n }\n }\n editor.txt.eventHooks.enterDownEvents.push(quoteEnter)\n}\n\nexport default bindEvent\n","import $, { DomElement } from '../../utils/dom-core'\n\n/**\n * 创建一个blockquote元素节点\n * @param editor 编辑器实例\n */\nfunction createQuote($childElem: DomElement[]): DomElement {\n const $targetElem = $(`<blockquote></blockquote>`)\n $childElem.forEach(node => {\n $targetElem.append(node.clone(true))\n })\n return $targetElem\n}\n\nexport default createQuote\n","/**\n * @description 背景颜色 BackColor\n * @author lkw\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport { hexToRgb } from '../../utils/util'\nclass BackColor extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-paint-brush\"></i>\n </div>`\n )\n const colorListConf = {\n width: 120,\n title: '背景颜色',\n // droplist 内容以 block 形式展示\n type: 'inline-block',\n list: editor.config.colors.map(color => {\n return {\n $elem: $(`<i style=\"color:${color};\" class=\"w-e-icon-paint-brush\"></i>`),\n value: color,\n }\n }),\n clickHandler: (value: string) => {\n // this 是指向当前的 BackColor 对象\n this.command(value)\n },\n }\n super($elem, editor, colorListConf)\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const isEmptySelection = editor.selection.isSelectionEmpty()\n const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n const isSpan = $selectionElem?.nodeName.toLowerCase() !== 'p'\n const bgColor = $selectionElem?.style.backgroundColor\n const isSameColor = hexToRgb(value) === bgColor\n\n if (isEmptySelection) {\n if (isSpan && !isSameColor) {\n const $elems = editor.selection.getSelectionRangeTopNodes(editor)\n editor.selection.createRangeByElem($elems[0])\n editor.selection.moveCursor($elems[0].elems[0])\n }\n // 插入空白选区\n editor.selection.createEmptyRange()\n }\n\n editor.cmd.do('backColor', value)\n\n if (isEmptySelection) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {}\n}\n\nexport default BackColor\n","/**\n * @description 文字颜色 FontColor\n * @author lkw\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass FontColor extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-pencil2\"></i>\n </div>`\n )\n const colorListConf = {\n width: 120,\n title: '文字颜色',\n // droplist 内容以 block 形式展示\n type: 'inline-block',\n list: editor.config.colors.map(color => {\n return {\n $elem: $(`<i style=\"color:${color};\" class=\"w-e-icon-pencil2\"></i>`),\n value: color,\n }\n }),\n clickHandler: (value: string) => {\n // this 是指向当前的 BackColor 对象\n this.command(value)\n },\n }\n super($elem, editor, colorListConf)\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const isEmptySelection = editor.selection.isSelectionEmpty()\n const $selectionElem = editor.selection.getSelectionContainerElem()?.elems[0]\n const isFont = $selectionElem?.nodeName.toLowerCase() !== 'p'\n const isSameColor = $selectionElem?.getAttribute('color') === value\n\n if (isEmptySelection) {\n if (isFont && !isSameColor) {\n const $elems = editor.selection.getSelectionRangeTopNodes(editor)\n editor.selection.createRangeByElem($elems[0])\n editor.selection.moveCursor($elems[0].elems[0])\n }\n // 插入空白选区\n editor.selection.createEmptyRange()\n }\n\n editor.cmd.do('foreColor', value)\n\n if (isEmptySelection) {\n // 需要将选区范围折叠起来\n editor.selection.collapseRange()\n editor.selection.restoreSelection()\n }\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {}\n}\n\nexport default FontColor\n","/**\n * @description 视频 菜单\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Panel from '../menu-constructors/Panel'\nimport Editor from '../../editor/index'\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport createPanelConf from './create-panel-conf'\n\nclass Video extends PanelMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-play\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 菜单点击事件\n */\n public clickHandler(): void {\n // 弹出 panel\n this.createPanel('')\n }\n\n /**\n * 创建 panel\n * @param link 链接\n */\n private createPanel(iframe: string): void {\n const conf = createPanelConf(this.editor, iframe)\n const panel = new Panel(this, conf)\n panel.create()\n }\n\n /**\n * 尝试修改菜单 active 状态\n */\n public tryChangeActive() {}\n}\n\nexport default Video\n","/**\n * @description video 菜单 panel tab 配置\n * @author tonghan\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $ from '../../utils/dom-core'\n\nexport default function (editor: Editor, video: string): PanelConf {\n // panel 中需要用到的id\n const inputIFrameId = getRandom('input-iframe')\n const btnOkId = getRandom('btn-ok')\n\n /**\n * 插入链接\n * @param iframe html标签\n */\n function insertVideo(video: string): void {\n editor.cmd.do('insertHTML', video + '<p><br></p>')\n }\n\n const conf = {\n width: 300,\n height: 0,\n\n // panel 中可包含多个 tab\n tabs: [\n {\n // tab 的标题\n title: editor.i18next.t('menus.panelMenus.video.插入视频'),\n // 模板\n tpl: `<div>\n <input \n id=\"${inputIFrameId}\" \n type=\"text\" \n class=\"block\" \n placeholder=\"${editor.i18next.t('如')}:<iframe src=... ></iframe>\"/>\n </td>\n <div class=\"w-e-button-container\">\n <button id=\"${btnOkId}\" class=\"right\">\n ${editor.i18next.t('插入')}\n </button>\n </div>\n </div>`,\n // 事件绑定\n events: [\n // 插入视频\n {\n selector: '#' + btnOkId,\n type: 'click',\n fn: () => {\n // 执行插入视频\n const $video = $('#' + inputIFrameId)\n let video = $video.val().trim()\n\n // 视频为空,则不插入\n if (!video) return\n\n insertVideo(video)\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true\n },\n },\n ],\n }, // tab end\n ], // tabs end\n }\n\n return conf\n}\n","/**\n * @description 插入、上传图片\n * @author wangfupeng\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\nimport createPanelConf from './create-panel-conf'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\n\nclass Image extends PanelMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-image\"></i></div>')\n super($elem, editor)\n\n // 绑定事件,如粘贴图片\n bindEvent(editor)\n }\n\n /**\n * 菜单点击事件\n */\n public clickHandler(): void {\n this.createPanel()\n }\n\n /**\n * 创建 panel\n */\n private createPanel(): void {\n const conf = createPanelConf(this.editor)\n const panel = new Panel(this, conf)\n panel.create()\n }\n\n /**\n * 尝试修改菜单 active 状态\n */\n public tryChangeActive() {}\n}\n\nexport default Image\n","/**\n * @description image 菜单 panel tab 配置\n * @author wangfupeng\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf, PanelTabConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $ from '../../utils/dom-core'\nimport UploadImg from './upload-img'\nimport { imgRegex } from '../../utils/const'\n\nexport default function (editor: Editor): PanelConf {\n const config = editor.config\n const uploadImg = new UploadImg(editor)\n\n // panel 中需要用到的id\n const upTriggerId = getRandom('up-trigger-id')\n const upFileId = getRandom('up-file-id')\n const linkUrlId = getRandom('input-link-url')\n const linkBtnId = getRandom('btn-link')\n\n const i18nPrefix = 'menus.panelMenus.image.'\n const t = (text: string, prefix: string = i18nPrefix): string => {\n return editor.i18next.t(prefix + text)\n }\n\n /**\n * 校验网络图片链接是否合法\n * @param linkImg 网络图片链接\n */\n function checkLinkImg(src: string): boolean {\n //编辑器进行正常校验,图片合规则使指针为true,不合规为false\n let flag = true\n if (!imgRegex.test(src)) {\n flag = false\n }\n\n //查看开发者自定义配置的返回值\n const check = config.linkImgCheck(src)\n if (check === undefined) {\n //用户未能通过开发者的校验,且开发者不希望编辑器提示用户\n if (flag === false) console.log(t('您刚才插入的图片链接未通过编辑器校验', 'validate.'))\n } else if (check === true) {\n //用户通过了开发者的校验\n if (flag === false) {\n config.customAlert(\n `${t('您插入的网络图片无法识别', 'validate.')},${t(\n '请替换为支持的图片类型',\n 'validate.'\n )}:jpg | png | gif ...`,\n 'warning'\n )\n } else return true\n } else {\n //用户未能通过开发者的校验,开发者希望我们提示这一字符串\n config.customAlert(check, 'error')\n }\n return false\n }\n\n // tabs 配置 -----------------------------------------\n const fileMultipleAttr = config.uploadImgMaxLength === 1 ? '' : 'multiple=\"multiple\"'\n const accepts: string = config.uploadImgAccept.map((item: string) => `image/${item}`).join(',')\n const tabsConf: PanelTabConf[] = [\n // first tab\n {\n // 标题\n title: t('上传图片'),\n // 模板\n tpl: `<div class=\"w-e-up-img-container\">\n <div id=\"${upTriggerId}\" class=\"w-e-up-btn\">\n <i class=\"w-e-icon-upload2\"></i>\n </div>\n <div style=\"display:none;\">\n <input id=\"${upFileId}\" type=\"file\" ${fileMultipleAttr} accept=\"${accepts}\"/>\n </div>\n </div>`,\n // 事件绑定\n events: [\n // 触发选择图片\n {\n selector: '#' + upTriggerId,\n type: 'click',\n fn: () => {\n const $file = $('#' + upFileId)\n const fileElem = $file.elems[0]\n if (fileElem) {\n fileElem.click()\n } else {\n // 返回 true 可关闭 panel\n return true\n }\n },\n },\n // 选择图片完毕\n {\n selector: '#' + upFileId,\n type: 'change',\n fn: () => {\n const $file = $('#' + upFileId)\n const fileElem = $file.elems[0]\n if (!fileElem) {\n // 返回 true 可关闭 panel\n return true\n }\n\n // 获取选中的 file 对象列表\n const fileList = (fileElem as any).files\n if (fileList.length) {\n uploadImg.uploadImg(fileList)\n }\n\n // 返回 true 可关闭 panel\n return true\n },\n },\n ],\n }, // first tab end\n // second tab\n {\n title: t('网络图片'),\n tpl: `<div>\n <input\n id=\"${linkUrlId}\"\n type=\"text\"\n class=\"block\"\n placeholder=\"${t('图片链接')}\"/>\n </td>\n <div class=\"w-e-button-container\">\n <button id=\"${linkBtnId}\" class=\"right\">${t('插入', '')}</button>\n </div>\n </div>`,\n events: [\n {\n selector: '#' + linkBtnId,\n type: 'click',\n fn: () => {\n const $linkUrl = $('#' + linkUrlId)\n const url = $linkUrl.val().trim()\n\n //如果url为空则直接返回\n if (!url) return\n //如果不能通过校验也直接返回\n if (!checkLinkImg(url)) return\n\n //插入图片url\n uploadImg.insertImg(url)\n // 返回 true 表示函数执行结束之后关闭 panel\n return true\n },\n },\n ],\n }, // second tab end\n ]\n // tabs end\n\n // 最终的配置 -----------------------------------------\n const conf: PanelConf = {\n width: 300,\n height: 0,\n tabs: [],\n }\n // 显示“上传图片”\n if (\n window.FileReader &&\n (config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg)\n ) {\n conf.tabs.push(tabsConf[0])\n }\n // 显示“插入网络图片”\n if (config.showLinkImg) {\n conf.tabs.push(tabsConf[1])\n }\n\n return conf\n}\n","/**\n * @description 上传的核心方法\n * @author wangfupeng\n */\n\nimport { forEach } from '../../utils/util'\nimport { DicType } from '../../config/index'\n\ntype PostOptionType<T> = {\n timeout?: number\n formData?: FormData\n headers?: DicType\n withCredentials?: boolean\n onTimeout?: (xhr: XMLHttpRequest) => void\n onProgress?: (percent: number, event: ProgressEvent) => void\n beforeSend?: (xhr: XMLHttpRequest) => { prevent: boolean; msg: string } | void\n onError?: (xhr: XMLHttpRequest) => void\n onFail?: (xhr: XMLHttpRequest, msg: string) => void\n onSuccess: (xhr: XMLHttpRequest, result: T) => void\n}\n\n/**\n * 发送 post 请求(用于文件上传)\n * @param url url\n * @param option 配置项\n */\nfunction post<T extends Object>(url: string, option: PostOptionType<T>): XMLHttpRequest | string {\n const xhr = new XMLHttpRequest()\n xhr.open('POST', url)\n\n // 超时,默认 10s\n xhr.timeout = option.timeout || 10 * 1000\n xhr.ontimeout = () => {\n console.error('wangEditor - 请求超时')\n option.onTimeout && option.onTimeout(xhr)\n }\n\n // 进度\n if (xhr.upload) {\n xhr.upload.onprogress = (e: ProgressEvent) => {\n const percent = e.loaded / e.total\n option.onProgress && option.onProgress(percent, e)\n }\n }\n\n // 自定义 header\n if (option.headers) {\n forEach(option.headers, (key: string, val: string) => {\n xhr.setRequestHeader(key, val)\n })\n }\n\n // 跨域传 cookie\n xhr.withCredentials = !!option.withCredentials\n\n // 上传之前的钩子函数,在 xhr.send() 之前执行\n if (option.beforeSend) {\n const beforeResult = option.beforeSend(xhr)\n if (beforeResult && typeof beforeResult === 'object') {\n if (beforeResult.prevent) {\n // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传\n return beforeResult.msg\n }\n }\n }\n\n // 服务端返回之后\n xhr.onreadystatechange = () => {\n if (xhr.readyState !== 4) return\n const status = xhr.status\n if (status < 200) return // 请求发送过程中,尚未返回\n if (status >= 300 && status < 400) return // 重定向\n if (status >= 400) {\n // 40x 50x 报错\n console.error('wangEditor - XHR 报错,状态码 ' + status)\n if (option.onError) option.onError(xhr) // 有,则执行 onError 函数即可\n return\n }\n\n // status = 200 ,得到结果\n const resultStr = xhr.responseText\n let result: T\n if (typeof resultStr !== 'object') {\n try {\n result = JSON.parse(resultStr)\n } catch (ex) {\n console.error('wangEditor - 返回结果不是 JSON 格式', resultStr)\n if (option.onFail) option.onFail(xhr, resultStr)\n return\n }\n } else {\n result = resultStr\n }\n option.onSuccess(xhr, result)\n }\n\n // 发送请求\n xhr.send(option.formData || null)\n\n return xhr\n}\n\nexport default post\n","/**\n * @description 上传进度条\n * @author wangfupeng\n */\n\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\n\nclass Progress {\n private editor: Editor\n private $bar: DomElement\n private $textContainer: DomElement\n private isShow: boolean\n private time: number\n private timeoutId: number\n\n constructor(editor: Editor) {\n this.editor = editor\n this.$textContainer = editor.$textContainerElem\n this.$bar = $('<div class=\"w-e-progress\"></div>')\n\n this.isShow = false\n this.time = 0\n this.timeoutId = 0\n }\n\n /**\n * 显示进度条\n * @param progress 进度百分比\n */\n public show(progress: number): void {\n // 不要重新显示\n if (this.isShow) {\n return\n }\n this.isShow = true\n\n // 渲染 $bar\n const $bar = this.$bar\n const $textContainer = this.$textContainer\n $textContainer.append($bar)\n\n // 改变进度条(防抖,100ms 渲染一次)\n if (Date.now() - this.time > 100) {\n if (progress <= 1) {\n $bar.css('width', progress * 100 + '%')\n this.time = Date.now()\n }\n }\n\n // 500ms 之后隐藏\n let timeoutId = this.timeoutId\n if (timeoutId) {\n clearTimeout(timeoutId)\n }\n this.timeoutId = window.setTimeout(() => {\n this.hide()\n }, 500)\n }\n\n /**\n * 隐藏\n */\n private hide() {\n const $bar = this.$bar\n $bar.remove()\n\n this.isShow = false\n this.time = 0\n this.timeoutId = 0\n }\n}\n\nexport default Progress\n","module.exports = require(\"core-js-pure/stable/date/now\");","var parent = require('../../es/date/now');\n\nmodule.exports = parent;\n","require('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n","var $ = require('../internals/export');\n\n// `Date.now` method\n// https://tc39.github.io/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return new Date().getTime();\n }\n});\n","/**\n * @description 绑定图片的事件\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport bindPasteImg from './paste-img'\nimport bindDropImg from './drop-img'\nimport bindDragImgSize from './drag-size'\nimport bindTooltipImg from './tooltip-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor): void {\n // 粘贴图片\n bindPasteImg(editor)\n\n // 拖拽图片\n bindDropImg(editor)\n\n // 可再扩展其他事件...如图片 tooltip 等\n // 拖拽图片尺寸\n bindDragImgSize(editor)\n\n //Tooltip\n bindTooltipImg(editor)\n}\n\nexport default bindEvent\n","/**\n * @description 粘贴图片\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport { getPasteText, getPasteHtml, getPasteImgs } from '../../../text/paste/paste-event'\nimport UploadImg from '../upload-img'\n\n/**\n * 剪切板是否有 text 或者 html ?\n * @param editor 编辑器对象\n * @param e 粘贴事件参数\n */\nfunction _haveTextOrHtml(editor: Editor, e: ClipboardEvent): boolean {\n const config = editor.config\n const pasteFilterStyle = config.pasteFilterStyle\n const pasteIgnoreImg = config.pasteIgnoreImg\n let pasteHtml = getPasteHtml(e, pasteFilterStyle, pasteIgnoreImg)\n if (pasteHtml) return true\n let pasteText = getPasteText(e)\n if (pasteText) return true\n\n return false // text html 都没有,则返回 false\n}\n\n/**\n * 粘贴图片事件方法\n * @param e 事件参数\n */\nfunction pasteImgHandler(e: ClipboardEvent, editor: Editor): void {\n if (_haveTextOrHtml(editor, e)) {\n // 粘贴过来的有 text 或者 html ,则不执行粘贴图片逻辑\n return\n }\n\n // 获取粘贴的图片列表\n const pastedFiles = getPasteImgs(e)\n if (!pastedFiles.length) {\n return\n }\n\n // code 中忽略(暂不管它)\n\n // 执行上传\n const uploadImg = new UploadImg(editor)\n uploadImg.uploadImg(pastedFiles)\n}\n\n/**\n * 粘贴图片\n * @param editor 编辑器对象\n * @param pasteEvents 粘贴事件列表\n */\nfunction bindPasteImg(editor: Editor): void {\n // 绑定 paste 事件\n editor.txt.eventHooks.pasteEvents.push((e: ClipboardEvent) => {\n pasteImgHandler(e, editor)\n })\n}\n\nexport default bindPasteImg\n","/**\n * @description 拖拽上传图片\n * @author wangfupeng\n */\n\nimport Editor from '../../../editor/index'\nimport UploadImg from '../upload-img'\n\nexport default function bindDropImg(editor: Editor): void {\n /**\n * 拖拽图片的事件\n * @param e 事件参数\n */\n function dropImgHandler(e: any): void {\n const files = e.dataTransfer && e.dataTransfer.files\n if (!files || !files.length) {\n return\n }\n\n // 上传图片\n const uploadImg = new UploadImg(editor)\n uploadImg.uploadImg(files)\n }\n\n // 绑定 drop 事件\n editor.txt.eventHooks.dropEvents.push(dropImgHandler)\n}\n","/**\n * @description 图片拖拽事件绑定\n * @author xiaokyo\n */\n\nimport Editor from '../../../editor'\nimport $, { DomElement } from '../../../utils/dom-core'\nimport '../../../assets/style/drag-size.less'\nimport { UA } from '../../../utils/util'\n\n/**\n * 设置拖拽框的rect\n * @param $drag drag Dom\n * @param width 要设置的宽度\n * @param height 要设置的高度\n * @param left 要设置的左边\n * @param top 要设置的顶部距离\n */\nfunction setDragStyle($drag: DomElement, width: number, height: number, left: number, top: number) {\n $drag.attr('style', `width:${width}px; height:${height}px; left:${left}px; top:${top}px;`)\n}\n\n/**\n * 生成一个图片指定大小的拖拽框\n * @param editor 编辑器实例\n * @param $textContainerElem 编辑框对象\n */\nfunction createDragBox(editor: Editor, $textContainerElem: DomElement): DomElement {\n const $drag = $(\n `<div class=\"w-e-img-drag-mask\">\n <div class=\"w-e-img-drag-show-size\"></div>\n <div class=\"w-e-img-drag-rb\"></div>\n </div>`\n )\n\n $drag.hide()\n $textContainerElem.append($drag)\n return $drag\n}\n\n/**\n * 显示拖拽框并设置宽度\n * @param $textContainerElem 编辑框实例\n * @param $drag 拖拽框对象\n */\nfunction showDargBox($textContainerElem: DomElement, $drag: DomElement, $img: DomElement) {\n const boxRect = $textContainerElem.getBoundingClientRect()\n const rect = $img.getBoundingClientRect()\n const rectW = rect.width.toFixed(2)\n const rectH = rect.height.toFixed(2)\n $drag.find('.w-e-img-drag-show-size').text(`${rectW}px * ${rectH}px`)\n setDragStyle(\n $drag,\n parseFloat(rectW),\n parseFloat(rectH),\n rect.left - boxRect.left,\n rect.top - boxRect.top\n )\n $drag.show()\n}\n\n/**\n * 生成图片拖拽框的 显示/隐藏 函数\n */\nfunction createShowHideFn(editor: Editor) {\n const $textContainerElem = editor.$textContainerElem\n let $imgTarget: DomElement\n\n // 生成拖拽框\n const $drag = createDragBox(editor, $textContainerElem)\n\n /**\n * 设置拖拽事件\n * @param $drag 拖拽框的domElement\n * @param $textContainerElem 编辑器实例\n */\n function bindDragEvents($drag: DomElement, $container: DomElement) {\n $drag.on('click', function (e: Event) {\n e.stopPropagation()\n })\n $drag.on('mousedown', '.w-e-img-drag-rb', (e: MouseEvent) => {\n // e.stopPropagation()\n e.preventDefault()\n\n if (!$imgTarget) return\n\n const firstX = e.clientX\n const firstY = e.clientY\n const boxRect = $container.getBoundingClientRect()\n const imgRect = $imgTarget.getBoundingClientRect()\n const width = imgRect.width\n const height = imgRect.height\n const left = imgRect.left - boxRect.left\n const top = imgRect.top - boxRect.top\n const ratio = width / height\n\n let setW = width\n let setH = height\n const $document = $(document)\n\n function offEvents() {\n $document.off('mousemove', mouseMoveHandler)\n $document.off('mouseup', mouseUpHandler)\n }\n\n function mouseMoveHandler(ev: MouseEvent) {\n ev.stopPropagation()\n ev.preventDefault()\n\n setW = width + (ev.clientX - firstX)\n setH = height + (ev.clientY - firstY)\n\n // 等比计算\n if (setW / setH != ratio) {\n setH = setW / ratio\n }\n\n setW = parseFloat(setW.toFixed(2))\n setH = parseFloat(setH.toFixed(2))\n\n $drag\n .find('.w-e-img-drag-show-size')\n .text(\n `${setW.toFixed(2).replace('.00', '')}px * ${setH\n .toFixed(2)\n .replace('.00', '')}px`\n )\n setDragStyle($drag, setW, setH, left, top)\n }\n $document.on('mousemove', mouseMoveHandler)\n\n function mouseUpHandler() {\n $imgTarget.attr('width', setW + '')\n $imgTarget.attr('height', setH + '')\n const newImgRect = $imgTarget.getBoundingClientRect()\n setDragStyle(\n $drag,\n setW,\n setH,\n newImgRect.left - boxRect.left,\n newImgRect.top - boxRect.top\n )\n\n // 解绑事件\n offEvents()\n }\n $document.on('mouseup', mouseUpHandler)\n\n // 解绑事件\n $document.on('mouseleave', offEvents)\n })\n }\n\n // 显示拖拽框\n function showDrag($target: DomElement) {\n if (UA.isIE()) return false\n if ($target) {\n $imgTarget = $target\n showDargBox($textContainerElem, $drag, $imgTarget)\n }\n }\n\n // 隐藏拖拽框\n function hideDrag() {\n $textContainerElem.find('.w-e-img-drag-mask').hide()\n }\n\n // 事件绑定\n bindDragEvents($drag, $textContainerElem)\n\n // 后期改成 blur 触发\n $(document).on('click', hideDrag)\n editor.beforeDestroy(function () {\n $(document).off('click', hideDrag)\n })\n\n return {\n showDrag,\n hideDrag,\n }\n}\n/**\n * 点击事件委托\n * @param editor 编辑器实例\n */\nexport default function bindDragImgSize(editor: Editor) {\n const { showDrag, hideDrag } = createShowHideFn(editor)\n\n // 显示拖拽框\n editor.txt.eventHooks.imgClickEvents.push(showDrag)\n\n // 隐藏拖拽框\n editor.txt.eventHooks.textScrollEvents.push(hideDrag)\n editor.txt.eventHooks.keyupEvents.push(hideDrag)\n editor.txt.eventHooks.toolbarClickEvents.push(hideDrag)\n editor.txt.eventHooks.menuClickEvents.push(hideDrag)\n editor.txt.eventHooks.changeEvents.push(hideDrag)\n}\n","module.exports = require(\"core-js-pure/stable/parse-float\");","var parent = require('../es/parse-float');\n\nmodule.exports = parent;\n","require('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n","var $ = require('../internals/export');\nvar parseFloatImplementation = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.github.io/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != parseFloatImplementation }, {\n parseFloat: parseFloatImplementation\n});\n","var global = require('../internals/global');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseFloat = global.parseFloat;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;\n\n// `parseFloat` method\n// https://tc39.github.io/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(String(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./drag-size.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-text-container {\\n overflow: hidden;\\n}\\n.w-e-img-drag-mask {\\n position: absolute;\\n z-index: 1;\\n border: 1px dashed #ccc;\\n box-sizing: border-box;\\n}\\n.w-e-img-drag-mask .w-e-img-drag-rb {\\n position: absolute;\\n right: -5px;\\n bottom: -5px;\\n width: 16px;\\n height: 16px;\\n border-radius: 50%;\\n background: #ccc;\\n cursor: se-resize;\\n}\\n.w-e-img-drag-mask .w-e-img-drag-show-size {\\n min-width: 110px;\\n height: 22px;\\n line-height: 22px;\\n font-size: 14px;\\n color: #999;\\n position: absolute;\\n left: 0;\\n top: 0;\\n background-color: #999;\\n color: #fff;\\n border-radius: 2px;\\n padding: 0 5px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * @description tooltip 事件\n * @author lichunlin\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n let tooltip: Tooltip | null\n const t = (text: string, prefix: string = ''): string => {\n return editor.i18next.t(prefix + text)\n }\n\n /**\n * 显示 tooltip\n * @param $node 链接元素\n */\n function showImgTooltip($node: DomElement) {\n const conf: TooltipConfType = [\n {\n $elem: $(\"<span class='w-e-icon-trash-o'></span>\"),\n onClick: (editor: Editor, $node: DomElement) => {\n // 选中img元素\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n editor.cmd.do('delete')\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n {\n $elem: $('<span>30%</span>'),\n onClick: (editor: Editor, $node: DomElement) => {\n $node.attr('width', '30%')\n $node.removeAttr('height')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n {\n $elem: $('<span>50%</span>'),\n onClick: (editor: Editor, $node: DomElement) => {\n $node.attr('width', '50%')\n $node.removeAttr('height')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n {\n $elem: $('<span>100%</span>'),\n onClick: (editor: Editor, $node: DomElement) => {\n $node.attr('width', '100%')\n $node.removeAttr('height')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n {\n $elem: $(`<span>${t('重置')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n $node.removeAttr('width')\n $node.removeAttr('height')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n ]\n\n tooltip = new Tooltip(editor, $node, conf)\n tooltip.create()\n }\n\n /**\n * 隐藏 tooltip\n */\n function hideImgTooltip() {\n // 移除 tooltip\n if (tooltip) {\n tooltip.remove()\n tooltip = null\n }\n }\n\n return {\n showImgTooltip,\n hideImgTooltip,\n }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n const { showImgTooltip, hideImgTooltip } = createShowHideFn(editor)\n\n // 点击图片元素是,显示 tooltip\n editor.txt.eventHooks.imgClickEvents.push(showImgTooltip)\n\n // 点击其他地方,或者滚动时,隐藏 tooltip\n editor.txt.eventHooks.clickEvents.push(hideImgTooltip)\n editor.txt.eventHooks.keyupEvents.push(hideImgTooltip)\n editor.txt.eventHooks.toolbarClickEvents.push(hideImgTooltip)\n editor.txt.eventHooks.menuClickEvents.push(hideImgTooltip)\n editor.txt.eventHooks.textScrollEvents.push(hideImgTooltip)\n editor.txt.eventHooks.imgDragBarMouseDownEvents.push(hideImgTooltip)\n\n // change 时隐藏\n editor.txt.eventHooks.changeEvents.push(hideImgTooltip)\n}\n","/**\n * @description 增加缩进/减少缩进\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport operateElement from './operate-element'\n\nclass Indent extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-indent-increase\"></i>\n </div>`\n )\n const dropListConf = {\n width: 130,\n title: '设置缩进',\n type: 'list',\n list: [\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-indent-increase w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.indent.增加缩进')}\n <p>`\n ),\n value: 'increase',\n },\n\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-indent-decrease w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.indent.减少缩进')}\n <p>`\n ),\n value: 'decrease',\n },\n ],\n clickHandler: (value: string) => {\n // 注意 this 是指向当前的 Indent 对象\n this.command(value)\n },\n }\n\n super($elem, editor, dropListConf)\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n const editor = this.editor\n const $selectionElem = editor.selection.getSelectionContainerElem()\n\n // 判断 当前选区为 textElem 时\n if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n // 当 当前选区 等于 textElem 时\n // 代表 当前选区 可能是一个选择了一个完整的段落或者多个段落\n const $elems = editor.selection.getSelectionRangeTopNodes(editor)\n if ($elems.length > 0) {\n $elems.forEach((item: any) => {\n operateElement($(item), value, editor)\n })\n }\n } else {\n // 当 当前选区 不等于 textElem 时\n // 代表 当前选区要么是一个段落,要么是段落中的一部分\n if ($selectionElem && $selectionElem.length > 0) {\n $selectionElem.forEach((item: any) => {\n operateElement($(item), value, editor)\n })\n }\n }\n\n // 恢复选区\n editor.selection.restoreSelection()\n this.tryChangeActive()\n }\n\n /**\n * 尝试改变菜单激活(高亮)状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n const $selectionElem = editor.selection.getSelectionStartElem()\n const $selectionStartElem = $($selectionElem).getNodeTop(editor)\n\n if ($selectionStartElem.length <= 0) return\n\n if ($selectionStartElem.elems[0].style['paddingLeft'] != '') {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Indent\n","/**\n * @description 对节点 操作 进行封装\n * 获取当前节点的段落\n * 根据type判断是增加还是减少缩进\n * @author tonghan\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { IndentationOptions } from '../../config/menus'\nimport increaseIndentStyle from './increase-indent-style'\nimport decreaseIndentStyle from './decrease-indent-style'\n\nconst lengthRegex = /^(\\d+)(\\w+)$/\nconst percentRegex = /^(\\d+)%$/\n\nfunction parseIndentation(editor: Editor): IndentationOptions {\n const { indentation } = editor.config\n\n if (typeof indentation === 'string') {\n if (lengthRegex.test(indentation)) {\n const [value, unit] = indentation.trim().match(lengthRegex)!.slice(1, 3)\n return {\n value: Number(value),\n unit,\n }\n } else if (percentRegex.test(indentation)) {\n return {\n value: Number(indentation.trim().match(percentRegex)![1]),\n unit: '%',\n }\n }\n } else if (indentation.value !== void 0 && indentation.unit) {\n return indentation\n }\n\n return {\n value: 2,\n unit: 'em',\n }\n}\n\nfunction operateElement($node: DomElement, type: String, editor: Editor): void {\n const $elem = $node.getNodeTop(editor)\n const reg = /^P$/i\n\n if (reg.test($elem.getNodeName())) {\n if (type === 'increase') increaseIndentStyle($elem, parseIndentation(editor))\n else if (type === 'decrease') decreaseIndentStyle($elem, parseIndentation(editor))\n }\n}\n\nexport default operateElement\n","/**\n * @description 增加缩进\n * @author tonghan\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport { IndentationOptions } from '../../config/menus'\n\nfunction increaseIndentStyle($node: DomElement, options: IndentationOptions): void {\n const $elem = $node.elems[0]\n if ($elem.style['paddingLeft'] === '') {\n $node.css('padding-left', options.value + options.unit)\n } else {\n const oldPL = $elem.style['paddingLeft']\n const oldVal = oldPL.slice(0, oldPL.length - options.unit.length)\n const newVal = Number(oldVal) + options.value\n $node.css('padding-left', `${newVal}${options.unit}`)\n }\n}\n\nexport default increaseIndentStyle\n","/**\n * @description 减少缩进\n * @author tonghan\n */\n\nimport { DomElement } from '../../utils/dom-core'\nimport { IndentationOptions } from '../../config/menus'\n\nfunction decreaseIndentStyle($node: DomElement, options: IndentationOptions): void {\n const $elem = $node.elems[0]\n if ($elem.style['paddingLeft'] !== '') {\n const oldPL = $elem.style['paddingLeft']\n const oldVal = oldPL.slice(0, oldPL.length - options.unit.length)\n const newVal = Number(oldVal) - options.value\n if (newVal > 0) {\n $node.css('padding-left', `${newVal}${options.unit}`)\n } else {\n $node.css('padding-left', '')\n }\n }\n}\n\nexport default decreaseIndentStyle\n","/**\n * @description 插入表情\n * @author liuwe\n */\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport createPanelConf from './create-panel-conf'\n\nclass Emoticon extends PanelMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-happy\"></i>\n </div>`\n )\n super($elem, editor)\n }\n /**\n * 创建 panel\n */\n private createPanel(): void {\n const conf = createPanelConf(this.editor)\n const panel = new Panel(this, conf)\n panel.create()\n }\n\n /**\n * 菜单表情点击事件\n */\n public clickHandler(): void {\n this.createPanel()\n }\n\n public tryChangeActive() {}\n}\n\nexport default Emoticon\n","/**\n * @description 表情菜单 panel配置\n * @author liuwei\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf, PanelTabConf } from '../menu-constructors/Panel'\nimport $ from '../../utils/dom-core'\nimport { EmotionsType, EmotionsContentType } from '../../config/menus'\n\nexport default function (editor: Editor): PanelConf {\n // 声明emotions数据结构\n const emotions: Array<EmotionsType> = editor.config.emotions\n\n /* tabs配置项 ==================================================================*/\n\n // 生成表情结构 TODO jele type类型待优化\n function GenerateExpressionStructure(ele: EmotionsType) {\n // 返回为一个数组对象\n let res: string[] = []\n\n // 如果type是image类型则生成一个img标签\n if (ele.type == 'image') {\n res = ele.content.map((con: EmotionsContentType | string) => {\n if (typeof con == 'string') return ''\n return `<span title=\"${con.alt}\">\n <img class=\"eleImg\" style src=\"${con.src}\" alt=\"[${con.alt}]\">\n </span>`\n })\n res = res.filter((s: string) => s !== '')\n }\n //否则直接当内容处理\n else {\n res = ele.content.map((con: EmotionsContentType | string) => {\n return `<span class=\"eleImg\" title=\"${con}\">${con}</span>`\n })\n }\n\n return res.join('').replace(/&nbsp;/g, '')\n }\n\n const tabsConf: PanelTabConf[] = emotions.map((ele: EmotionsType) => {\n return {\n title: editor.i18next.t(`menus.panelMenus.emoticon.${ele.title}`),\n\n // 判断type类型如果是image则以img的形式插入否则以内容\n tpl: `<div>${GenerateExpressionStructure(ele)}</div>`,\n\n events: [\n {\n selector: '.eleImg',\n type: 'click',\n fn: (e: Event) => {\n // e为事件对象\n const $target = $(e.target)\n const nodeName = $target.getNodeName()\n let insertHtml\n\n if (nodeName === 'IMG') {\n // 插入图片\n insertHtml = $target.parent().html().trim()\n } else {\n // 插入 emoji\n insertHtml = '<span>' + $target.html() + '</span>'\n }\n\n editor.cmd.do('insertHTML', insertHtml)\n // 示函数执行结束之后关闭 panel\n return true\n },\n },\n ],\n }\n })\n /* tabs配置项 =================================================================end*/\n\n // 最终的配置 -----------------------------------------\n const conf: PanelConf = {\n width: 300, // Panel容器宽度\n height: 230, // Panel容器高度\n tabs: tabsConf,\n }\n return conf\n}\n","/**\n * @description 无序列表/有序列表\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass List extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-list2\"></i>\n </div>`\n )\n\n const dropListConf = {\n width: 130,\n title: '序列',\n type: 'list',\n list: [\n {\n $elem: $(`\n <p>\n <i class=\"w-e-icon-list2 w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.list.无序列表')}\n <p>`),\n value: 'insertUnorderedList',\n },\n\n {\n $elem: $(\n `<p>\n <i class=\"w-e-icon-list-numbered w-e-drop-list-item\"></i>\n ${editor.i18next.t('menus.dropListMenu.list.有序列表')}\n <p>`\n ),\n value: 'insertOrderedList',\n },\n ],\n clickHandler: (value: string) => {\n // 注意 this 是指向当前的 List 对象\n this.command(value)\n },\n }\n\n super($elem, editor, dropListConf)\n }\n\n public command(value: string): void {\n const editor = this.editor\n const $textElem = editor.$textElem\n editor.selection.restoreSelection()\n\n // 判断是否已经执行了命令\n if (editor.cmd.queryCommandState(value)) {\n return\n }\n\n //禁止在table中添加列表\n let $selectionElem = $(editor.selection.getSelectionContainerElem())\n let $dom = $($selectionElem.elems[0]).parentUntil('TABLE', $selectionElem.elems[0])\n if ($dom && $($dom.elems[0]).getNodeName() === 'TABLE') {\n return\n }\n\n editor.cmd.do(value)\n\n // 验证列表是否被包裹在 <p> 之内\n if ($selectionElem.getNodeName() === 'LI') {\n $selectionElem = $selectionElem.parent()\n }\n\n if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) {\n return\n }\n\n if ($selectionElem.equal($textElem)) {\n // 证明是顶级标签,没有被 <p> 包裹\n return\n }\n\n const $parent = $selectionElem.parent()\n if ($parent.equal($textElem)) {\n // $parent 是顶级标签,不能删除\n return\n }\n\n $selectionElem.insertAfter($parent)\n $parent.remove()\n\n // 恢复选区\n editor.selection.restoreSelection()\n this.tryChangeActive()\n }\n\n public tryChangeActive(): void {}\n}\n\nexport default List\n","/**\n * @description 段落行高 LineHeight\n * @author lichunlin\n *\n */\n\nimport DropListMenu from '../menu-constructors/DropListMenu'\nimport $, { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport lineHeightList from './lineHeightList'\nimport { UA } from '../../utils/util'\n\nclass LineHeight extends DropListMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-row-height\"></i>\n </div>`\n )\n let lineHeightMenu = new lineHeightList(editor, editor.config.lineHeights)\n const DropListMenu = {\n width: 100,\n title: '设置行高',\n type: 'list', // droplist 以列表形式展示\n list: lineHeightMenu.getItemList(),\n clickHandler: (value: string) => {\n //保存焦点\n editor.selection.saveRange()\n this.command(value)\n },\n }\n\n super($elem, editor, DropListMenu)\n }\n\n /**\n * 执行命令\n * @param value value\n */\n public command(value: string): void {\n let selection = window.getSelection ? window.getSelection() : document.getSelection()\n //允许设置dom\n const allowArray: string[] = ['P']\n const editor = this.editor\n let st: string = ''\n //恢复焦点\n editor.selection.restoreSelection()\n const $selectionElem = $(editor.selection.getSelectionContainerElem())\n const $selectionAll = $(editor.selection.getSelectionContainerElem())\n // let dom:HTMLElement= $selectionElem.elems[0]\n let dom: HTMLElement = $(editor.selection.getSelectionStartElem()).elems[0]\n //获取元素的style\n let style: string | null = ''\n let styleList: string[] = []\n //点击默认的时候删除line-height属性 并重新设置 style\n let styleStr: string = ''\n\n //选中多行操作\n if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n let isIE = UA.isIE()\n if (isIE) {\n // ie下禁止多行操作 避免多行造成除第一行外的段落内容都被删除\n return\n }\n //获取range 开头结束的dom在 祖父元素的下标\n let indexStore: Array<number> = []\n let arrayDom_a: Array<HTMLElement> = []\n let arrayDom_b: Array<HTMLElement> = []\n //获取range 开头结束的dom\n const StartElem: DomElement = $(editor.selection.getSelectionStartElem())\n const EndElem: DomElement = $(editor.selection.getSelectionEndElem())\n const childList: NodeListOf<ChildNode> | undefined = editor.selection.getRange()\n ?.commonAncestorContainer.childNodes\n arrayDom_a.push(this.getDom(StartElem.elems[0]))\n childList?.forEach((item, index) => {\n if (item === this.getDom(StartElem.elems[0])) {\n indexStore.push(index)\n }\n if (item === this.getDom(EndElem.elems[0])) {\n indexStore.push(index)\n }\n })\n //遍历 获取头尾之间的dom元素\n let i = 0\n let d: HTMLElement\n arrayDom_b.push(this.getDom(StartElem.elems[0]))\n while (arrayDom_a[i] !== this.getDom(EndElem.elems[0])) {\n d = $(arrayDom_a[i].nextElementSibling).elems[0]\n if (allowArray.indexOf($(d).getNodeName()) !== -1) {\n arrayDom_b.push(d)\n arrayDom_a.push(d)\n } else {\n arrayDom_a.push(d)\n }\n i++\n }\n\n //设置段落选取 全选\n if ($(arrayDom_a[0]).getNodeName() !== 'P') {\n i = 0\n //遍历集合得到第一个p标签的下标\n for (var k = 0; k < arrayDom_a.length; k++) {\n if ($(arrayDom_a[k]).getNodeName() === 'P') {\n i = k\n break\n }\n }\n //i===0 说明选区中没有p段落\n if (i === 0) {\n return\n }\n let _i = 0\n while (_i !== i) {\n arrayDom_a.shift()\n _i++\n }\n }\n //设置替换的选区\n this.setRange(arrayDom_a[0], arrayDom_a[arrayDom_a.length - 1])\n //生成innerHtml html字符串\n arrayDom_a.forEach(item => {\n style = item.getAttribute('style')\n styleList = style ? style.split(';') : []\n styleStr = ''\n if ($(item).getNodeName() === 'P') {\n //判断是否 点击默认\n value\n ? (styleStr = this.styleProcessing(styleList) + `line-height:${value};`)\n : (styleStr = this.styleProcessing(styleList))\n st =\n st +\n `<${$(item).getNodeName().toLowerCase()} style=\"${styleStr}\">${\n item.innerHTML\n }</${$(item).getNodeName().toLowerCase()}>`\n } else {\n styleStr = this.styleProcessing(styleList)\n st =\n st +\n `<${$(item).getNodeName().toLowerCase()} style=\"${styleStr}\">${\n item.innerHTML\n }</${$(item).getNodeName().toLowerCase()}>`\n }\n })\n this.action(st, editor)\n\n //恢复已选择的选区\n dom = $selectionAll.elems[0]\n this.setRange(dom.children[indexStore[0]], dom.children[indexStore[1]])\n return\n }\n\n //遍历dom 获取祖父元素 直到contenteditable属性的div标签\n dom = this.getDom(dom)\n\n //校验允许lineheight设置标签\n if (allowArray.indexOf($(dom).getNodeName()) === -1) {\n return\n }\n style = dom.getAttribute('style')\n styleList = style ? style.split(';') : []\n //全选 dom下所有的内容\n selection?.selectAllChildren(dom)\n //保存range\n editor.selection.saveRange()\n //判断是否存在value 默认 移除line-height\n if (!value) {\n if (style) {\n styleStr = this.styleProcessing(styleList)\n //避免没有其它属性 只留下 ‘style’ 减少代码\n if (styleStr === '') {\n st = `<${$(dom).getNodeName().toLowerCase()}>${dom.innerHTML}</${$(dom)\n .getNodeName()\n .toLowerCase()}>`\n } else {\n st = `<${$(dom).getNodeName().toLowerCase()} style=\"${styleStr}\">${\n dom.innerHTML\n }</${$(dom).getNodeName().toLowerCase()}>`\n }\n this.action(st, editor)\n }\n return\n }\n if (style) {\n //存在style 检索其它style属性\n styleStr = this.styleProcessing(styleList) + `line-height:${value};`\n } else {\n styleStr = `line-height:${value};`\n }\n st = `<${$(dom).getNodeName().toLowerCase()} style=\"${styleStr}\">${dom.innerHTML}</${$(dom)\n .getNodeName()\n .toLowerCase()}>`\n\n //防止BLOCKQUOTE叠加\n if ($(dom).getNodeName() === 'BLOCKQUOTE') {\n $(dom).css('line-height', value)\n } else {\n this.action(st, editor)\n }\n }\n\n /**\n * 遍历dom 获取祖父元素 直到contenteditable属性的div标签\n *\n */\n public getDom(dom: HTMLElement): HTMLElement {\n let DOM: HTMLElement = $(dom).elems[0]\n if (!DOM.parentNode) {\n return DOM\n }\n function getParentNode($node: HTMLElement, editor: Editor): HTMLElement {\n const $parent = $($node.parentNode)\n if (editor.$textElem.equal($parent)) {\n return $node\n } else {\n return getParentNode($parent.elems[0], editor)\n }\n }\n DOM = getParentNode(DOM, this.editor)\n\n return DOM\n }\n\n /**\n * 执行 document.execCommand\n *\n */\n public action(html_str: string, editor: Editor): void {\n editor.cmd.do('insertHTML', html_str)\n }\n\n /**\n * style 处理\n */\n public styleProcessing(styleList: Array<string>): string {\n let styleStr = ''\n styleList.forEach(item => {\n item !== '' && item.indexOf('line-height') === -1\n ? (styleStr = styleStr + item + ';')\n : ''\n })\n return styleStr\n }\n\n /**\n * 段落全选 比如:避免11变成111\n */\n public setRange(startDom: Node, endDom: Node): void {\n const editor = this.editor\n let selection = window.getSelection ? window.getSelection() : document.getSelection()\n //清除所有的选区\n selection?.removeAllRanges()\n const range = document.createRange()\n let star = startDom\n let end = endDom\n range.setStart(star, 0)\n range.setEnd(end, 1)\n selection?.addRange(range)\n //保存设置好的选区\n editor.selection.saveRange()\n //清除所有的选区\n selection?.removeAllRanges()\n //恢复选区\n editor.selection.restoreSelection()\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n const editor = this.editor\n const $selectionElem = editor.selection.getSelectionContainerElem()\n if ($selectionElem && editor.$textElem.equal($selectionElem)) {\n //避免选中多行设置\n return\n }\n let dom: DomElement | HTMLElement = $(editor.selection.getSelectionStartElem())\n dom = this.getDom(dom.elems[0])\n let style: string | null = dom.getAttribute('style') ? dom.getAttribute('style') : ''\n\n //判断当前标签是否具有line-height属性\n if (style && style.indexOf('line-height') !== -1) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default LineHeight\n","/**\n * @description 行高 菜单\n * @author lichunlin\n */\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { DropListItem } from '../menu-constructors/DropList'\n\nclass lineHeightList {\n private itemList: DropListItem[]\n\n constructor(editor: Editor, list: string[]) {\n this.itemList = [{ $elem: $(`<span>${editor.i18next.t('默认')}</span>`), value: '' }]\n list.forEach(item => {\n this.itemList.push({\n $elem: $(`<span>${item}</span>`),\n value: item,\n })\n })\n }\n\n public getItemList(): DropListItem[] {\n return this.itemList\n }\n}\n\nexport default lineHeightList\n","/**\n * @description 撤销\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Undo extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-undo\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n this.editor.history.revoke()\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n // 标准模式下才进行操作\n if (!this.editor.isCompatibleMode) {\n if (this.editor.history.size[0]) {\n this.active()\n } else {\n this.unActive()\n }\n }\n }\n}\n\nexport default Undo\n","/**\n * @description 重做\n * @author tonghan\n */\n\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport { MenuActive } from '../menu-constructors/Menu'\n\nclass Redo extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"w-e-icon-redo\"></i>\n </div>`\n )\n super($elem, editor)\n }\n\n /**\n * 点击事件\n */\n public clickHandler(): void {\n this.editor.history.restore()\n }\n\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {\n // 标准模式下才进行操作\n if (!this.editor.isCompatibleMode) {\n if (this.editor.history.size[1]) {\n this.active()\n } else {\n this.unActive()\n }\n }\n }\n}\n\nexport default Redo\n","/**\n * @description 创建table\n * @author lichunlin\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\nimport createPanelConf from './create-panel-conf'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\n\nclass Table extends PanelMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-table2\"></i></div>')\n super($elem, editor)\n\n // 绑定事件\n bindEvent(editor)\n }\n\n /**\n * 菜单点击事件\n */\n public clickHandler(): void {\n this.createPanel()\n }\n\n /**\n * 创建 panel\n */\n private createPanel(): void {\n const conf = createPanelConf(this.editor)\n const panel = new Panel(this, conf)\n panel.create()\n }\n\n /**\n * 尝试修改菜单 active 状态\n */\n public tryChangeActive() {}\n}\n\nexport default Table\n","/**\n * @description table 菜单 panel tab 配置\n * @author lichunlin\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf, PanelTabConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $ from '../../utils/dom-core'\nimport '../../assets/style/create-panel-conf.less'\nimport CreateTable from './create-table'\n\nexport default function (editor: Editor): PanelConf {\n const createTable = new CreateTable(editor)\n\n // panel 中需要用到的id\n const colId = getRandom('w-col-id')\n const rowId = getRandom('w-row-id')\n const insertBtnId = getRandom('btn-link')\n\n const i18nPrefix = 'menus.panelMenus.table.'\n const t = (text: string): string => {\n return editor.i18next.t(text)\n }\n\n // tabs 配置 -----------------------------------------\n const tabsConf: PanelTabConf[] = [\n {\n title: t(`${i18nPrefix}插入表格`),\n tpl: `<div>\n <div class=\"w-e-table\">\n <span>${t('创建')}</span>\n <input id=\"${rowId}\" type=\"text\" class=\"w-e-table-input\" value=\"5\"/></td>\n <span>${t(`${i18nPrefix}行`)}</span>\n <input id=\"${colId}\" type=\"text\" class=\"w-e-table-input\" value=\"5\"/></td>\n <span>${\n t(`${i18nPrefix}列`) + t(`${i18nPrefix}的`) + t(`${i18nPrefix}表格`)\n }</span>\n </div>\n <div class=\"w-e-button-container\">\n <button id=\"${insertBtnId}\" class=\"right\">${t('插入')}</button>\n </div>\n </div>`,\n events: [\n {\n selector: '#' + insertBtnId,\n type: 'click',\n fn: () => {\n const colValue = Number($('#' + colId).val())\n const rowValue = Number($('#' + rowId).val())\n //校验是否传值\n if (colValue && rowValue) {\n createTable.createAction(rowValue, colValue)\n }\n // 返回 true 表示函数执行结束之后关闭 panel\n return true\n },\n },\n ],\n },\n ]\n // tabs end\n\n // 最终的配置 -----------------------------------------\n const conf: PanelConf = {\n width: 330,\n height: 0,\n tabs: [],\n }\n conf.tabs.push(tabsConf[0])\n\n return conf\n}\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./create-panel-conf.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-table {\\n display: flex;\\n}\\n.w-e-table .w-e-table-input {\\n width: 40px;\\n text-align: center!important;\\n margin: 0 5px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * @description 创建tabel\n * @author lichunlin\n */\n\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\n\nclass CreateTable {\n private editor: Editor\n\n constructor(editor: Editor) {\n this.editor = editor\n }\n\n /**\n * 执行创建\n * @param rowValue 行数\n * @param colValue 列数\n */\n public createAction(rowValue: number, colValue: number) {\n const editor = this.editor\n\n //不允许在有序列表中添加table\n let $selectionElem = $(editor.selection.getSelectionContainerElem())\n const $ul = $($selectionElem.elems[0]).parentUntil('UL', $selectionElem.elems[0])\n const $ol = $($selectionElem.elems[0]).parentUntil('OL', $selectionElem.elems[0])\n if ($ul || $ol) {\n return\n }\n\n const tableDom: string = this.createTableHtml(rowValue, colValue)\n editor.cmd.do('insertHTML', tableDom)\n }\n\n /**\n * 创建table、行、列\n * @param rowValue 行数\n * @param colValue 列数\n */\n public createTableHtml(rowValue: number, colValue: number): string {\n let rowStr: string = ''\n let colStr: string = ''\n for (let i = 0; i < rowValue; i++) {\n colStr = ''\n for (let j = 0; j < colValue; j++) {\n if (i === 0) {\n colStr = colStr + '<th></th>'\n } else {\n colStr = colStr + '<td></td>'\n }\n }\n rowStr = rowStr + '<tr>' + colStr + '</tr>'\n }\n const tableDom =\n `<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tbody>` +\n rowStr +\n '</tbody></table><p><br></p>'\n return tableDom\n }\n}\n\nexport default CreateTable\n","/**\n * @description 绑定点击事件\n * @author lichunlin\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltip from './tooltip-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor): void {\n //Tooltip\n bindTooltip(editor)\n}\n\nexport default bindEvent\n","/**\n * @description tooltip 事件\n * @author lichunlin\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n//操作事件\nimport operatingEvent from './event/operating-event'\n\nimport getNode from './event/getNode'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n let tooltip: Tooltip | null\n\n /**\n * 显示 tooltip\n * @param table元素\n */\n function showTableTooltip($node: DomElement) {\n const getnode = new getNode(editor)\n\n const i18nPrefix = 'menus.panelMenus.table.'\n const t = (text: string, prefix: string = i18nPrefix): string => {\n return editor.i18next.t(prefix + text)\n }\n\n const conf: TooltipConfType = [\n {\n // $elem: $(\"<span class='w-e-icon-trash-o'></span>\"),\n $elem: $(`<span>${t('删除表格')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n // 选中img元素\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n editor.cmd.do('insertHTML', '<p><br></p>')\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n {\n $elem: $(`<span>${t('添加行')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n // 禁止多选操作\n let isMore = isMoreRowAction(editor)\n if (isMore) {\n return true\n }\n //当前元素\n let selectDom = $(editor.selection.getSelectionStartElem())\n //当前行\n let $currentRow = getnode.getRowNode(selectDom.elems[0])\n if (!$currentRow) {\n return true\n }\n //获取当前行的index\n const index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n //生成要替换的html\n let htmlStr = getnode.getTableHtml($node.elems[0])\n //生成新的table\n let newdom: string = getnode.getTableHtml(\n operatingEvent.ProcessingRow($(htmlStr), index).elems[0]\n )\n // 选中table\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n\n editor.cmd.do('insertHTML', newdom)\n\n return true\n },\n },\n {\n $elem: $(`<span>${t('删除行')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n // 禁止多选操作\n let isMore = isMoreRowAction(editor)\n if (isMore) {\n return true\n }\n //当前元素\n let selectDom = $(editor.selection.getSelectionStartElem())\n //当前行\n let $currentRow = getnode.getRowNode(selectDom.elems[0])\n if (!$currentRow) {\n return true\n }\n //获取当前行的index\n const index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n //生成要替换的html\n let htmlStr = getnode.getTableHtml($node.elems[0])\n //获取新生成的table 判断是否是最后一行被删除 是 删除整个table\n const trLength: number = operatingEvent.DeleteRow($(htmlStr), index).elems[0]\n .childNodes[0].childNodes.length\n //生成新的table\n let newdom: string = ''\n // 选中table\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n\n if (trLength === 0) {\n newdom = '<p><br></p>'\n } else {\n newdom = getnode.getTableHtml(\n operatingEvent.DeleteRow($(htmlStr), index).elems[0]\n )\n }\n editor.cmd.do('insertHTML', newdom)\n\n return true\n },\n },\n {\n $elem: $(`<span>${t('添加列')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n // 禁止多选操作\n let isMore = isMoreRowAction(editor)\n if (isMore) {\n return true\n }\n //当前元素\n let selectDom = $(editor.selection.getSelectionStartElem())\n //当前列的index\n const index = getnode.getCurrentColIndex(selectDom.elems[0])\n //生成要替换的html\n let htmlStr = getnode.getTableHtml($node.elems[0])\n //生成新的table\n let newdom: string = getnode.getTableHtml(\n operatingEvent.ProcessingCol($(htmlStr), index).elems[0]\n )\n // 选中table\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n\n editor.cmd.do('insertHTML', newdom)\n\n return true\n },\n },\n {\n $elem: $(`<span>${t('删除列')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n // 禁止多选操作\n let isMore = isMoreRowAction(editor)\n if (isMore) {\n return true\n }\n //当前元素\n let selectDom = $(editor.selection.getSelectionStartElem())\n //当前列的index\n const index = getnode.getCurrentColIndex(selectDom.elems[0])\n //生成要替换的html\n let htmlStr = getnode.getTableHtml($node.elems[0])\n //获取新生成的table 判断是否是最后一列被删除 是 删除整个table\n const tdLength: number = operatingEvent.DeleteCol($(htmlStr), index).elems[0]\n .childNodes[0].childNodes[0].childNodes.length\n //生成新的table\n let newdom: string = ''\n // 选中table\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n\n if (tdLength === 1) {\n newdom = '<p><br></p>'\n } else {\n newdom = getnode.getTableHtml(\n operatingEvent.DeleteCol($(htmlStr), index).elems[0]\n )\n }\n\n editor.cmd.do('insertHTML', newdom)\n\n return true\n },\n },\n {\n $elem: $(`<span>${t('设置表头')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n // 禁止多选操作\n let isMore = isMoreRowAction(editor)\n if (isMore) {\n return true\n }\n //当前元素\n let selectDom = $(editor.selection.getSelectionStartElem())\n //当前行\n let $currentRow = getnode.getRowNode(selectDom.elems[0])\n if (!$currentRow) {\n return true\n }\n //获取当前行的index\n let index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n if (index !== 0) {\n //控制在table的第一行\n index = 0\n }\n //生成要替换的html\n let htmlStr = getnode.getTableHtml($node.elems[0])\n //生成新的table\n let newdom: string = getnode.getTableHtml(\n operatingEvent.setTheHeader($(htmlStr), index, 'th').elems[0]\n )\n // 选中table\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n\n editor.cmd.do('insertHTML', newdom)\n\n return true\n },\n },\n {\n $elem: $(`<span>${t('取消表头')}</span>`),\n onClick: (editor: Editor, $node: DomElement) => {\n //当前元素\n let selectDom = $(editor.selection.getSelectionStartElem())\n //当前行\n let $currentRow = getnode.getRowNode(selectDom.elems[0])\n if (!$currentRow) {\n return true\n }\n //获取当前行的index\n let index = Number(getnode.getCurrentRowIndex($node.elems[0], $currentRow))\n if (index !== 0) {\n //控制在table的第一行\n index = 0\n }\n //生成要替换的html\n let htmlStr = getnode.getTableHtml($node.elems[0])\n //生成新的table\n let newdom: string = getnode.getTableHtml(\n operatingEvent.setTheHeader($(htmlStr), index, 'td').elems[0]\n )\n // 选中table\n editor.selection.createRangeByElem($node)\n editor.selection.restoreSelection()\n\n editor.cmd.do('insertHTML', newdom)\n\n return true\n },\n },\n ]\n\n tooltip = new Tooltip(editor, $node, conf)\n tooltip.create()\n }\n\n /**\n * 隐藏 tooltip\n */\n function hideTableTooltip() {\n // 移除 tooltip\n if (tooltip) {\n tooltip.remove()\n tooltip = null\n }\n }\n\n return {\n showTableTooltip,\n hideTableTooltip,\n }\n}\n\n/**\n * 判断是否是多行\n */\nfunction isMoreRowAction(editor: Editor): boolean {\n const $startElem = editor.selection.getSelectionStartElem()\n const $endElem = editor.selection.getSelectionEndElem()\n if ($startElem?.elems[0] !== $endElem?.elems[0]) {\n return true\n } else {\n return false\n }\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n const { showTableTooltip, hideTableTooltip } = createShowHideFn(editor)\n\n // 点击table元素是,显示 tooltip\n editor.txt.eventHooks.tableClickEvents.push(showTableTooltip)\n\n // 点击其他地方,或者滚动时,隐藏 tooltip\n editor.txt.eventHooks.clickEvents.push(hideTableTooltip)\n editor.txt.eventHooks.keyupEvents.push(hideTableTooltip)\n editor.txt.eventHooks.toolbarClickEvents.push(hideTableTooltip)\n editor.txt.eventHooks.menuClickEvents.push(hideTableTooltip)\n editor.txt.eventHooks.textScrollEvents.push(hideTableTooltip)\n}\n","import $, { DomElement } from '../../../../utils/dom-core'\n\n/**\n * 处理新添加行\n * @param $node 整个table\n * @param _index 行的inde\n */\nfunction ProcessingRow($node: DomElement, _index: number): DomElement {\n //执行获取tbody节点\n let $dom = generateDomAction($node)\n //取出所有的行\n let domArray: Node[] = Array.prototype.slice.apply($dom.childNodes)\n //列的数量\n const childNodesLenght = domArray[0].childNodes.length\n //创建新tr\n let tr = document.createElement('tr')\n for (let i = 0; i < childNodesLenght; i++) {\n const td = document.createElement('td')\n tr.appendChild(td)\n }\n //插入集合中\n domArray.splice(_index + 1, 0, tr)\n //移除、新增节点事件\n removeAndInsertAction($dom, domArray)\n return $($dom.parentNode)\n}\n\n/**\n * 处理新添加列\n * @param $node 整个table\n * @param _index 列的inde\n */\nfunction ProcessingCol($node: DomElement, _index: number): DomElement {\n //执行获取tbody节点\n let $dom = generateDomAction($node)\n //取出所有的行\n let domArray: Node[] = Array.prototype.slice.apply($dom.childNodes)\n //创建td\n for (let i = 0; i < domArray.length; i++) {\n let cArray: Node[] = []\n //取出所有的列\n domArray[i].childNodes.forEach(item => {\n cArray.push(item)\n })\n //移除行的旧的子节点\n while (domArray[i].childNodes.length !== 0) {\n domArray[i].removeChild(domArray[i].childNodes[0])\n }\n //列分th td\n let td =\n $(cArray[0]).getNodeName() !== 'TH'\n ? document.createElement('td')\n : document.createElement('th')\n // let td = document.createElement('td')\n cArray.splice(_index + 1, 0, td)\n //插入新的子节点\n for (let j = 0; j < cArray.length; j++) {\n domArray[i].appendChild(cArray[j])\n }\n }\n //移除、新增节点事件\n removeAndInsertAction($dom, domArray)\n return $($dom.parentNode)\n}\n\n/**\n * 处理删除行\n * @param $node 整个table\n * @param _index 行的inde\n */\nfunction DeleteRow($node: DomElement, _index: number): DomElement {\n //执行获取tbody节点\n let $dom = generateDomAction($node)\n //取出所有的行\n let domArray: Node[] = Array.prototype.slice.apply($dom.childNodes)\n //删除行\n domArray.splice(_index, 1)\n //移除、新增节点事件\n removeAndInsertAction($dom, domArray)\n return $($dom.parentNode)\n}\n\n/**\n * 处理删除列\n * @param $node\n * @param _index\n */\nfunction DeleteCol($node: DomElement, _index: number): DomElement {\n //执行获取tbody节点\n let $dom = generateDomAction($node)\n //取出所有的行\n let domArray: Node[] = Array.prototype.slice.apply($dom.childNodes)\n //创建td\n for (let i = 0; i < domArray.length; i++) {\n let cArray: Node[] = []\n //取出所有的列\n domArray[i].childNodes.forEach(item => {\n cArray.push(item)\n })\n //移除行的旧的子节点\n while (domArray[i].childNodes.length !== 0) {\n domArray[i].removeChild(domArray[i].childNodes[0])\n }\n cArray.splice(_index, 1)\n //插入新的子节点\n for (let j = 0; j < cArray.length; j++) {\n domArray[i].appendChild(cArray[j])\n }\n }\n //移除、新增节点事件\n removeAndInsertAction($dom, domArray)\n return $($dom.parentNode)\n}\n\n/**\n * 处理设置/取消表头\n * @param $node\n * @param _index\n * @type 替换的列 th 还是td\n */\nfunction setTheHeader($node: DomElement, _index: number, type: string): DomElement {\n //执行获取tbody节点\n let $dom = generateDomAction($node)\n //取出所有的行\n let domArray: Node[] = Array.prototype.slice.apply($dom.childNodes)\n //列的数量\n const childNodesLenght = domArray[_index].childNodes\n //创建新tr\n let tr = document.createElement('tr')\n for (let i = 0; i < childNodesLenght.length; i++) {\n //替换td为th\n const th = document.createElement(type)\n childNodesLenght[i].childNodes.forEach(item => {\n th.appendChild(item)\n })\n tr.appendChild(th)\n }\n //插入集合中\n domArray.splice(_index, 1, tr)\n //移除、新增节点事件\n removeAndInsertAction($dom, domArray)\n return $($dom.parentNode)\n}\n\n/**\n * 封装移除、新增节点事件\n * @param $dom tbody节点\n * @param domArray 所有的行\n */\nfunction removeAndInsertAction($dom: ChildNode, domArray: Node[]) {\n //移除所有的旧的子节点\n while ($dom.childNodes.length !== 0) {\n $dom.removeChild($dom.childNodes[0])\n }\n //插入新的子节点\n for (let i = 0; i < domArray.length; i++) {\n $dom.appendChild(domArray[i])\n }\n}\n\n/**\n * 封装判断是否tbody节点\n * 粘贴的table 第一个节点是<colgroup> 最后的节点<tbody>\n * @param dom\n */\nfunction generateDomAction($node: DomElement): ChildNode {\n let $dom: ChildNode = $node.elems[0].childNodes[0]\n if ($dom.nodeName === 'COLGROUP') {\n $dom = $node.elems[0].childNodes[$node.elems[0].childNodes.length - 1]\n }\n return $dom\n}\n\nexport default {\n ProcessingRow,\n ProcessingCol,\n DeleteRow,\n DeleteCol,\n setTheHeader,\n}\n","/**\n * @description 获取dom节点\n * @author lichunlin\n */\n\nimport $ from '../../../../utils/dom-core'\nimport Editor from '../../../../editor/index'\n\nclass getNode {\n public editor: Editor\n constructor(editor: Editor) {\n this.editor = editor\n }\n\n /**\n * 获取焦点所在行\n * @param $node 当前table\n */\n public getRowNode($node: HTMLElement): HTMLElement | null | undefined {\n let DOM: HTMLElement | null | undefined = $($node).elems[0]\n if (!DOM.parentNode) {\n return DOM\n }\n DOM = $(DOM).parentUntil('TR', DOM)?.elems[0]\n return DOM\n }\n\n /**\n * 获取当前行的下标\n * @param $node 当前table\n * @param $dmo 当前行节点\n */\n public getCurrentRowIndex($node: HTMLElement, $dom: HTMLElement): Number {\n let _index: number = 0\n let $nodeChild = $node.childNodes[0]\n //粘贴的table 最后一个节点才是tbody\n if ($nodeChild.nodeName === 'COLGROUP') {\n $nodeChild = $node.childNodes[$node.childNodes.length - 1]\n }\n $nodeChild.childNodes.forEach((item, index) => {\n item === $dom ? (_index = index) : ''\n })\n return _index\n }\n\n /**\n * 获取当前列的下标\n * @param $node 当前点击元素\n */\n public getCurrentColIndex($node: HTMLElement): number {\n //当前行\n let _index: number = 0\n //获取当前列 td或th\n let rowDom =\n $($node).getNodeName() === 'TD' || $($node).getNodeName() === 'TH'\n ? $node\n : $($node).parentUntil('TD', $node)?.elems[0]\n let colDom = $(rowDom).parent()\n colDom.elems[0].childNodes.forEach((item, index) => {\n item === rowDom ? (_index = index) : ''\n })\n return _index\n }\n\n /**\n * 返回元素html字符串\n * @param $node\n */\n public getTableHtml($node: HTMLElement): string {\n const htmlStr = `<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">${$(\n $node\n ).html()}</table>`\n return htmlStr\n }\n}\n\nexport default getNode\n","/**\n * @description 代码 菜单\n * @author lkw\n */\n\nimport PanelMenu from '../menu-constructors/PanelMenu'\nimport Editor from '../../editor/index'\nimport $ from '../../utils/dom-core'\nimport { replaceSpecialSymbol, deepClone } from '../../utils/util'\nimport createPanelConf from './create-panel-conf'\nimport isActive from './is-active'\nimport Panel from '../menu-constructors/Panel'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\n\nexport function formatCodeHtml(editor: Editor, html: string) {\n if (!html) return html\n\n html = deleteHighlightCode(html)\n\n html = formatEnterCode(html)\n\n html = replaceSpecialSymbol(html)\n\n return html\n\n // 格式化换换所产生的code标签\n function formatEnterCode(html: string): string {\n let preArr = html.match(/<pre[\\s|\\S]+?\\/pre>/g)\n\n if (preArr === null) return html\n\n preArr.map(item => {\n //将连续的code标签换为\\n换行\n html = html.replace(item, item.replace(/<\\/code><code>/g, '\\n').replace(/<br>/g, ''))\n })\n\n return html\n }\n\n // highlight格式化方法\n function deleteHighlightCode(html: string): string {\n // 获取所有hljs文本\n let m = html.match(/<span\\sclass=\"hljs[\\s|\\S]+?\\/span>/gm)\n\n // 没有代码渲染文本则退出\n // @ts-ignore\n if (!m || !m.length) return html\n\n // 获取替换文本\n let r = deepClone(m).map((i: string) => {\n i = i.replace(/<span\\sclass=\"hljs[^>]+>/, '')\n return i.replace(/<\\/span>/, '')\n })\n\n // @ts-ignore\n for (let i = 0; i < m.length; i++) {\n html = html.replace(m[i], r[i])\n }\n\n return deleteHighlightCode(html)\n }\n}\n\nclass Code extends PanelMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-terminal\"></i></div>')\n super($elem, editor)\n\n // 绑定事件,如点击链接时,可以查看链接\n bindEvent(editor)\n }\n\n /**\n * 插入行内代码\n * @param text\n * @return null\n */\n private insertLineCode(text: string) {\n let editor = this.editor\n // 行内代码处理\n let $code = $(`<code>${text}</code>`)\n editor.cmd.do('insertElem', $code)\n editor.selection.createRangeByElem($code, false)\n editor.selection.restoreSelection()\n }\n\n /**\n * 菜单点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const selectionText = editor.selection.getSelectionText()\n\n if (this.isActive) {\n return\n } else {\n // 菜单未被激活,说明选区不在链接里\n if (editor.selection.isSelectionEmpty()) {\n // 选区是空的,未选中内容\n this.createPanel('', '')\n } else {\n // 行内代码处理 选中了非代码内容\n this.insertLineCode(selectionText)\n }\n }\n }\n\n /**\n * 创建 panel\n * @param text 代码文本\n * @param languageType 代码类型\n */\n public createPanel(text: string, languageType: string): void {\n const conf = createPanelConf(this.editor, text, languageType)\n const panel = new Panel(this, conf)\n panel.create()\n }\n\n /**\n * 尝试修改菜单 active 状态\n */\n public tryChangeActive() {\n const editor = this.editor\n if (isActive(editor)) {\n this.active()\n } else {\n this.unActive()\n }\n }\n}\n\nexport default Code\n","/**\n * @description code 菜单 panel tab 配置\n * @author lkw\n */\n\nimport Editor from '../../editor/index'\nimport { PanelConf } from '../menu-constructors/Panel'\nimport { getRandom } from '../../utils/util'\nimport $, { DomElement } from '../../utils/dom-core'\nimport isActive from './is-active'\n\nexport default function (editor: Editor, text: string, languageType: string): PanelConf {\n // panel 中需要用到的id\n const inputIFrameId = getRandom('input-iframe')\n const languageId = getRandom('select')\n const btnOkId = getRandom('btn-ok')\n\n /**\n * 插入链接\n * @param text 文字\n * @param code 链接\n */\n function insertCode(text: string): void {\n // 选区处于链接中,则选中整个菜单,再执行 insertHTML\n let active = isActive(editor)\n\n if (active) {\n selectCodeElem()\n }\n\n editor.cmd.do('insertHTML', text)\n\n const $code = editor.selection.getSelectionStartElem()\n const $codeElem = $code?.getNodeTop(editor)\n\n // 通过dom操作添加换行标签\n // @ts-ignore\n $('<p><br></p>').insertAfter($codeElem)\n }\n\n /**\n * 选中整个链接元素\n */\n function selectCodeElem(): void {\n if (!isActive(editor)) return\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let $selectedCode: DomElement\n\n const $code = editor.selection.getSelectionStartElem()\n const $codeElem = $code?.getNodeTop(editor)\n if (!$codeElem) return\n\n editor.selection.createRangeByElem($codeElem)\n editor.selection.restoreSelection()\n\n $selectedCode = $codeElem // 赋值给函数内全局变量\n }\n\n const t = (text: string): string => {\n return editor.i18next.t(text)\n }\n\n // @ts-ignore\n const conf = {\n width: 500,\n height: 0,\n\n // panel 中可包含多个 tab\n tabs: [\n {\n // tab 的标题\n title: t('menus.panelMenus.code.插入代码'),\n // 模板\n tpl: `<div>\n <select name=\"\" id=\"${languageId}\">\n ${editor.config.languageType.map(language => {\n return (\n '<option ' +\n (languageType == language ? 'selected' : '') +\n ' value =\"' +\n language +\n '\">' +\n language +\n '</option>'\n )\n })}\n </select>\n <textarea id=\"${inputIFrameId}\" type=\"text\" class=\"wang-code-textarea\" placeholder=\"\" style=\"height: 160px\">${text.replace(\n /&quot;/g,\n '\"'\n )}</textarea>\n <div class=\"w-e-button-container\">\n <button id=\"${btnOkId}\" class=\"right\">${\n isActive(editor) ? t('修改') : t('插入')\n }</button>\n </div>\n </div>`,\n // 事件绑定\n events: [\n // 插入链接\n {\n selector: '#' + btnOkId,\n type: 'click',\n fn: () => {\n let formatCode, codeDom\n\n const $code = document.getElementById(inputIFrameId)\n const $select = $('#' + languageId)\n\n let languageType = $select.val()\n // @ts-ignore\n let code = $code.value\n\n // 高亮渲染\n if (editor.highlight) {\n formatCode = editor.highlight.highlightAuto(code).value\n } else {\n formatCode = `<xmp>${code}</xmp>`\n }\n\n // 代码为空,则不插入\n if (!code) return\n\n //增加标签\n if (isActive(editor)) {\n return false\n } else {\n //增加pre标签\n codeDom = `<pre type=\"${languageType}\"><code>${formatCode}</code></pre>`\n\n // @ts-ignore\n insertCode(codeDom)\n }\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true\n },\n },\n ],\n }, // tab end\n ], // tabs end\n }\n\n return conf\n}\n","/**\n * @description 绑定链接元素的事件,入口\n * @author lkw\n */\n\nimport Editor from '../../../editor/index'\nimport bindTooltipEvent from './tooltip-event'\n\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor) {\n // tooltip 事件\n bindTooltipEvent(editor)\n}\n\nexport default bindEvent\n","/**\n * @description tooltip 事件\n * @author lkw\n */\n\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n let tooltip: Tooltip | null\n\n /**\n * 显示 tooltip\n * @param $code 链接元素\n */\n function showCodeTooltip($code: DomElement) {\n const i18nPrefix = 'menus.panelMenus.code.'\n const t = (text: string, prefix: string = i18nPrefix): string => {\n return editor.i18next.t(prefix + text)\n }\n\n const conf = [\n {\n $elem: $(`<span>${t('删除代码')}</span>`),\n onClick: (editor: Editor, $code: DomElement) => {\n //dom操作删除\n $code.remove()\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n ]\n\n // 创建 tooltip\n tooltip = new Tooltip(editor, $code, conf)\n tooltip.create()\n }\n\n /**\n * 隐藏 tooltip\n */\n function hideCodeTooltip() {\n // 移除 tooltip\n if (tooltip) {\n tooltip.remove()\n tooltip = null\n }\n }\n\n return {\n showCodeTooltip,\n hideCodeTooltip,\n }\n}\n\n/**\n * preEnterListener是为了统一浏览器 在pre标签内的enter行为而进行的监听\n * 目前并没有使用, 但是在未来处理与Firefox和ie的兼容性时需要用到 暂且放置\n * pre标签内的回车监听\n * @param e\n * @param editor\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction preEnterListener(e: KeyboardEvent, editor: Editor) {\n // 获取当前标签元素\n const $selectionElem = editor.selection.getSelectionContainerElem() as DomElement\n\n // 获取当前节点最顶级标签元素\n const $topElem = $selectionElem?.getNodeTop(editor)\n\n // 获取顶级节点节点名\n const topNodeName = $topElem?.getNodeName()\n\n // 非pre标签退出\n if (topNodeName !== 'PRE') return\n\n // 取消默认行为\n e.preventDefault()\n\n // 执行换行\n editor.cmd.do('insertHTML', '\\n\\r')\n}\n\n/**\n * 绑定 tooltip 事件\n * @param editor 编辑器实例\n */\nexport default function bindTooltipEvent(editor: Editor) {\n const { showCodeTooltip, hideCodeTooltip } = createShowHideFn(editor)\n\n // 点击代码元素时,显示 tooltip\n editor.txt.eventHooks.codeClickEvents.push(showCodeTooltip)\n\n // 点击其他地方,或者滚动时,隐藏 tooltip\n editor.txt.eventHooks.clickEvents.push(hideCodeTooltip)\n editor.txt.eventHooks.toolbarClickEvents.push(hideCodeTooltip)\n editor.txt.eventHooks.menuClickEvents.push(hideCodeTooltip)\n editor.txt.eventHooks.textScrollEvents.push(hideCodeTooltip)\n}\n","/**\n * @description 分割线\n * @author wangqiaoling\n */\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport $ from '../../utils/dom-core'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport bindEvent from './bind-event/index'\nclass splitLine extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $('<div class=\"w-e-menu\"><i class=\"w-e-icon-split-line\"></i></div>')\n super($elem, editor)\n // 绑定事件\n bindEvent(editor)\n }\n /**\n * 菜单点击事件\n */\n public clickHandler(): void {\n const editor = this.editor\n const range = editor.selection.getRange()\n\n const $selectionElem = editor.selection.getSelectionContainerElem()\n if (!$selectionElem) return\n\n const $DomElement = $($selectionElem.elems[0])\n const $tableDOM = $DomElement.parentUntil('TABLE', $selectionElem.elems[0])\n const $imgDOM = $DomElement.children()\n\n // 禁止在代码块中添加分割线\n if ($DomElement.getNodeName() === 'CODE') return\n // 禁止在表格中添加分割线\n if ($tableDOM && $($tableDOM.elems[0]).getNodeName() === 'TABLE') return\n\n // 禁止在图片处添加分割线\n if (\n $imgDOM &&\n $imgDOM.length !== 0 &&\n $($imgDOM.elems[0]).getNodeName() === 'IMG' &&\n !range?.collapsed // 处理光标在 img 后面的情况\n ) {\n return\n }\n\n this.createSplitLine()\n }\n /**\n * 创建 splitLine\n */\n private createSplitLine(): void {\n const splitLineDOM: string = '<hr/>'\n this.editor.cmd.do('insertHTML', splitLineDOM)\n }\n /**\n * 尝试修改菜单激活状态\n */\n public tryChangeActive(): void {}\n}\nexport default splitLine\n","/**\n * @description 绑定分割线元素的事件入口\n * @author wangqiaoling\n */\nimport Editor from '../../../editor/index'\nimport bindTooltipEvent from './tooltip-event'\n/**\n * 绑定事件\n * @param editor 编辑器实例\n */\nfunction bindEvent(editor: Editor) {\n // 分割线的 tooltip 事件\n bindTooltipEvent(editor)\n}\n\nexport default bindEvent\n","/**\n * @description tooltip 事件\n * @author wangqiaoling\n */\nimport $, { DomElement } from '../../../utils/dom-core'\nimport Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'\nimport Editor from '../../../editor/index'\n\n/**\n * 生成 Tooltip 的显示隐藏函数\n */\nfunction createShowHideFn(editor: Editor) {\n let tooltip: Tooltip | null\n\n /**\n * 显示分割线的 tooltip\n * @param $splitLine 分割线元素\n */\n function showSplitLineTooltip($splitLine: DomElement): void {\n // 定义 splitLine tooltip 配置\n const conf: TooltipConfType = [\n {\n $elem: $(`<span>${editor.i18next.t('menus.panelMenus.删除')}</span>`),\n onClick: (editor: Editor, $splitLine: DomElement) => {\n // 选中 分割线 元素\n editor.selection.createRangeByElem($splitLine)\n editor.selection.restoreSelection()\n editor.cmd.do('delete')\n\n // 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。\n return true\n },\n },\n ]\n // 实例化 tooltip\n tooltip = new Tooltip(editor, $splitLine, conf)\n // 创建 tooltip\n tooltip.create()\n }\n\n /**\n * 隐藏分割线的 tooltip\n */\n function hideSplitLineTooltip(): void {\n if (tooltip) {\n tooltip.remove()\n tooltip = null\n }\n }\n\n return {\n showSplitLineTooltip,\n hideSplitLineTooltip,\n }\n}\n\nexport default function bindTooltipEvent(editor: Editor): void {\n const { showSplitLineTooltip, hideSplitLineTooltip } = createShowHideFn(editor)\n\n // 点击分割线时,显示 tooltip\n editor.txt.eventHooks.splitLineEvents.push(showSplitLineTooltip)\n\n // 点击其他地方(工具栏、滚动、keyup)时,隐藏 tooltip\n editor.txt.eventHooks.clickEvents.push(hideSplitLineTooltip)\n editor.txt.eventHooks.keyupEvents.push(hideSplitLineTooltip)\n editor.txt.eventHooks.toolbarClickEvents.push(hideSplitLineTooltip)\n editor.txt.eventHooks.menuClickEvents.push(hideSplitLineTooltip)\n editor.txt.eventHooks.textScrollEvents.push(hideSplitLineTooltip)\n}\n","/**\n * @description 初始化编辑器 DOM 结构\n * @author wangfupeng\n */\n\nimport Editor from '../index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport { getRandom } from '../../utils/util'\n\nconst styleSettings = {\n border: '1px solid #c9d8db',\n toolbarBgColor: '#FFF',\n toolbarBottomBorder: '1px solid #EEE',\n}\n\nexport default function (editor: Editor): void {\n const toolbarSelector = editor.toolbarSelector\n const $toolbarSelector = $(toolbarSelector)\n const textSelector = editor.textSelector\n\n const config = editor.config\n const height = config.height\n const i18next = editor.i18next\n\n let $toolbarElem: DomElement\n let $textContainerElem: DomElement\n let $textElem: DomElement\n let $children: DomElement | null\n\n if (textSelector == null) {\n // 只有 toolbarSelector ,即是容器的选择器或元素,toolbar 和 text 的元素自行创建\n $toolbarElem = $('<div></div>')\n $textContainerElem = $('<div></div>')\n\n // 将编辑器区域原有的内容,暂存起来\n $children = $toolbarSelector.children()\n\n // 添加到 DOM 结构中\n $toolbarSelector.append($toolbarElem).append($textContainerElem)\n\n // 自行创建的,需要配置默认的样式\n $toolbarElem\n .css('background-color', styleSettings.toolbarBgColor)\n .css('border', styleSettings.border)\n .css('border-bottom', styleSettings.toolbarBottomBorder)\n $textContainerElem\n .css('border', styleSettings.border)\n .css('border-top', 'none')\n .css('height', `${height}px`)\n } else {\n // toolbarSelector 和 textSelector 都有\n $toolbarElem = $toolbarSelector\n $textContainerElem = $(textSelector)\n // 将编辑器区域原有的内容,暂存起来\n $children = $textContainerElem.children()\n }\n\n // 编辑区域\n $textElem = $('<div></div>')\n $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%')\n\n // 添加 placeholder\n const $placeholder = $(`<div>${i18next.t(editor.config.placeholder)}</div>`)\n $placeholder.addClass('placeholder')\n\n // 初始化编辑区域内容\n if ($children && $children.length) {\n $textElem.append($children)\n // 编辑器有默认值的时候隐藏placeholder\n $placeholder.hide()\n } else {\n $textElem.append($('<p><br></p>')) // 新增一行,方便继续编辑\n }\n\n // 编辑区域加入DOM\n $textContainerElem.append($textElem)\n\n // 添加placeholder\n $textContainerElem.append($placeholder)\n\n // 设置通用的 class\n $toolbarElem.addClass('w-e-toolbar').css('z-index', editor.zIndex.get('toolbar'))\n $textContainerElem.addClass('w-e-text-container')\n $textContainerElem.css('z-index', editor.zIndex.get())\n $textElem.addClass('w-e-text')\n\n // 添加 ID\n const toolbarElemId = getRandom('toolbar-elem')\n $toolbarElem.attr('id', toolbarElemId)\n const textElemId = getRandom('text-elem')\n $textElem.attr('id', textElemId)\n\n // 判断编辑区与容器高度是否一致\n const textContainerCliheight = $textContainerElem.getClientHeight()\n const textElemClientHeight = $textElem.getClientHeight()\n if (textContainerCliheight !== textElemClientHeight) {\n $textElem.css('min-height', textContainerCliheight + 'px')\n }\n\n // 记录属性\n editor.$toolbarElem = $toolbarElem\n editor.$textContainerElem = $textContainerElem\n editor.$textElem = $textElem\n editor.toolbarElemId = toolbarElemId\n editor.textElemId = textElemId\n}\n","/**\n * @description 初始化编辑器选区,将光标定位到文档末尾\n * @author wangfupeng\n */\n\nimport Editor from '../index'\nimport $ from '../../utils/dom-core'\n\n/**\n * 初始化编辑器选区,将光标定位到文档末尾\n * @param editor 编辑器实例\n * @param newLine 是否新增一行\n */\nfunction initSelection(editor: Editor, newLine?: boolean) {\n const $textElem = editor.$textElem\n const $children = $textElem.children()\n if (!$children || !$children.length) {\n // 如果编辑器区域无内容,添加一个空行,重新设置选区\n $textElem.append($('<p><br></p>'))\n initSelection(editor)\n return\n }\n\n const $last = $children.last()\n\n if (newLine) {\n // 新增一个空行\n const html = $last.html().toLowerCase()\n const nodeName = $last.getNodeName()\n if ((html !== '<br>' && html !== '<br/>') || nodeName !== 'P') {\n // 最后一个元素不是 <p><br></p>,添加一个空行,重新设置选区\n $textElem.append($('<p><br></p>'))\n initSelection(editor)\n return\n }\n }\n\n if (editor.config.focus) {\n editor.selection.createRangeByElem($last, true, true)\n editor.selection.restoreSelection()\n }\n}\n\nexport default initSelection\n","/**\n * @description 绑定编辑器事件 change blur focus\n * @author wangfupeng\n */\n\nimport Editor from '../index'\nimport $ from '../../utils/dom-core'\n\nfunction bindEvent(editor: Editor): void {\n // 绑定 change 事件\n _bindChange(editor)\n\n // 绑定 focus blur 事件\n _bindFocusAndBlur(editor)\n\n // 绑定 input 输入\n _bindInput(editor)\n}\n\n/**\n * 绑定 change 事件\n * @param editor 编辑器实例\n */\nfunction _bindChange(editor: Editor): void {\n const { onchange } = editor.config\n editor.txt.eventHooks.changeEvents.push(function () {\n let html = editor.txt.html() || ''\n onchange(html)\n editor.txt.togglePlaceholder()\n })\n}\n\n/**\n * 绑定 focus blur 事件\n * @param editor 编辑器实例\n */\nfunction _bindFocusAndBlur(editor: Editor): void {\n // 当前编辑器是否是焦点状态\n editor.isFocus = false\n\n function listener(e: Event) {\n const target = e.target\n const $target = $(target)\n const $textElem = editor.$textElem\n const $toolbarElem = editor.$toolbarElem\n\n //判断当前点击元素是否在编辑器内\n const isChild = $textElem.isContain($target)\n\n //判断当前点击元素是否为工具栏\n const isToolbar = $toolbarElem.isContain($target)\n const isMenu = $toolbarElem.elems[0] == e.target ? true : false\n\n if (!isChild) {\n // 若为选择工具栏中的功能,则不视为成 blur 操作\n if (isToolbar && !isMenu) {\n return\n }\n\n if (editor.isFocus) {\n _blurHandler(editor)\n }\n editor.isFocus = false\n } else {\n if (!editor.isFocus) {\n _focusHandler(editor)\n }\n\n editor.isFocus = true\n }\n }\n if (document.activeElement === editor.$textElem.elems[0]) {\n _focusHandler(editor)\n editor.isFocus = true\n }\n $(document).on('click', listener)\n // 全局事件在编辑器实例销毁的时候进行解绑\n editor.beforeDestroy(function () {\n $(document).off('click', listener)\n })\n}\n\n/**\n * 绑定 input 事件\n * @param editor 编辑器实例\n */\nfunction _bindInput(editor: Editor) {\n // 绑定中文输入\n editor.$textElem\n .on('compositionstart', () => {\n editor.isComposing = true\n })\n .on('compositionend', () => {\n editor.isComposing = false\n })\n}\n\n/**\n * blur 事件\n * @param editor 编辑器实例\n */\nfunction _blurHandler(editor: Editor) {\n const config = editor.config\n const onblur = config.onblur\n const currentHtml = editor.txt.html() || ''\n onblur(currentHtml)\n}\n\n/**\n * focus 事件\n * @param editor 编辑器实例\n */\nfunction _focusHandler(editor: Editor) {\n const config = editor.config\n const onfocus = config.onfocus\n const currentHtml = editor.txt.html() || ''\n onfocus(currentHtml)\n}\n\nexport default bindEvent\n","/**\n * @description 国际化 初始化\n * @author tonghan\n * i18next 是使用 JavaScript 编写的国际化框架\n * i18next 提供了标准的i18n功能,例如(复数,上下文,插值,格式)等\n * i18next 文档地址: https://www.i18next.com/overview/getting-started\n */\n\nimport Editor from '../index'\n\nfunction i18nextInit(editor: Editor) {\n const { lang, languages } = editor.config\n\n if (editor.i18next != null) {\n try {\n editor.i18next.init({\n ns: 'wangEditor',\n lng: lang,\n defaultNS: 'wangEditor',\n resources: languages,\n })\n } catch (error) {\n throw new Error('i18next:' + error)\n }\n return\n }\n\n // 没有引入 i18next 的替代品\n editor.i18next = {\n t(str: string) {\n const strArr = str.split('.')\n return strArr[strArr.length - 1]\n },\n }\n}\n\nexport default i18nextInit\n","/**\n * @description 全屏功能\n * @author xiaokyo\n */\n\nimport Editor from '../index'\nimport $ from '../../utils/dom-core'\n\nimport '../../assets/style/full-screen.less'\n\nconst iconFullScreenText = 'w-e-icon-fullscreen' // 全屏icon class\nconst iconExitFullScreenText = 'w-e-icon-fullscreen_exit' // 退出全屏icon class\nconst classfullScreenEditor = 'w-e-full-screen-editor' // 全屏添加至编辑器的class\n\n/**\n * 设置全屏\n * @param editor 编辑器实例\n */\nexport const setFullScreen = (editor: Editor) => {\n const $editorParent = $(editor.toolbarSelector)\n const $textContainerElem = editor.$textContainerElem\n const $toolbarElem = editor.$toolbarElem\n const $iconElem = $toolbarElem.find(`i.${iconFullScreenText}`)\n const config = editor.config\n\n $iconElem.removeClass(iconFullScreenText)\n $iconElem.addClass(iconExitFullScreenText)\n $editorParent.addClass(classfullScreenEditor)\n $editorParent.css('z-index', config.zIndexFullScreen)\n $textContainerElem.css('height', '100%')\n}\n\n/**\n * 取消全屏\n * @param editor 编辑器实例\n */\nexport const setUnFullScreen = (editor: Editor) => {\n const $editorParent = $(editor.toolbarSelector)\n const $textContainerElem = editor.$textContainerElem\n const $toolbarElem = editor.$toolbarElem\n const $iconElem = $toolbarElem.find(`i.${iconExitFullScreenText}`)\n const config = editor.config\n\n $iconElem.removeClass(iconExitFullScreenText)\n $iconElem.addClass(iconFullScreenText)\n $editorParent.removeClass(classfullScreenEditor)\n $editorParent.css('z-index', 'auto')\n $textContainerElem.css('height', config.height + 'px')\n}\n\n/**\n * 初始化全屏功能\n * @param editor 编辑器实例\n */\nconst initFullScreen = (editor: Editor) => {\n // 当textSelector有值的时候,也就是编辑器是工具栏和编辑区域分离的情况, 则不生成全屏功能按钮\n if (editor.textSelector) return\n if (!editor.config.showFullScreen) return\n const $toolbarElem = editor.$toolbarElem\n const $elem = $(\n `<div class=\"w-e-menu\">\n <i class=\"${iconFullScreenText}\"></i>\n </div>`\n )\n $elem.on('click', function (e: MouseEvent) {\n const $elemIcon = $(e.currentTarget).find('i')\n if ($elemIcon.hasClass(iconFullScreenText)) {\n setFullScreen(editor)\n } else {\n setUnFullScreen(editor)\n }\n })\n\n $toolbarElem.append($elem)\n}\n\nexport default initFullScreen\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./full-screen.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-full-screen-editor {\\n position: fixed;\\n width: 100%!important;\\n height: 100%!important;\\n left: 0;\\n top: 0;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/**\n * @description 滚动到指定锚点\n * @author zhengwenjian\n */\n\nimport Editor from '../index'\n\n/**\n * 编辑器滚动到指定锚点\n * @param editor 编辑器实例\n * @param id 标题锚点id\n */\nconst scrollToHead = (editor: Editor, id: string) => {\n const $textElem = editor.$textElem\n const $targetHead = $textElem.find(`[id='${id}']`)\n const targetTop = $targetHead.getOffsetData().top\n $textElem.scrollTop(targetTop)\n}\n\nexport default scrollToHead\n","/**\n * @description z-index 管理器\n * @author fangzhicong\n */\nimport Editor from '../index'\nimport style from '../../config/style'\n\nconst tier = {\n menu: 2, // 显示状态下的菜单栏\n panel: 2,\n toolbar: 1, // 菜单栏父容器\n tooltip: 1, // tooltip\n textContainer: 1, // 编辑区域\n}\n\ntype Tier = typeof tier\n\ntype TierKey = keyof Tier\nexport default class ZIndex {\n // 层级参数\n private tier: Tier = tier\n\n // 默认值\n private baseZIndex = style.zIndex\n\n // 获取 tierName 对应的 z-index 的值。如果 tierName 未定义则返回默认的 z-index 值\n get(tierName?: TierKey): number {\n if (tierName && this.tier[tierName]) {\n return this.baseZIndex + this.tier[tierName]\n }\n return this.baseZIndex\n }\n\n // 初始化\n init(editor: Editor) {\n if (this.baseZIndex == style.zIndex) {\n this.baseZIndex = editor.config.zIndex\n }\n }\n}\n","/**\n * @description 编辑器 change 事件\n * @author fangzhicong\n */\n\nimport Editor from '../index'\nimport Mutation from '../../utils/observer/mutation'\nimport { debounce } from '../../utils/util'\nimport { EMPTY_FN } from '../../utils/const'\n\n/**\n * 剔除编辑区容器的 attribute 变化中的非 contenteditable 变化\n * @param mutations MutationRecord[]\n * @param tar 编辑区容器的 DOM 节点\n */\nfunction mutationsFilter(mutations: MutationRecord[], tar: Node) {\n // 剔除编辑区容器的 attribute 变化中的非 contenteditable 变化\n return mutations.filter(({ type, target, attributeName }) => {\n return (\n type != 'attributes' ||\n (type == 'attributes' && (attributeName == 'contenteditable' || target != tar))\n )\n })\n}\n\n/**\n * Change 实现\n */\nexport default class Change extends Mutation {\n /**\n * 变化的数据集合\n */\n private data: MutationRecord[] = []\n\n /**\n * 异步保存数据\n */\n private asyncSave: Function = EMPTY_FN\n\n constructor(public editor: Editor) {\n super((mutations, observer) => {\n // 数据过滤\n mutations = mutationsFilter(mutations, observer.target as Node)\n\n // 存储数据\n this.data.push(...mutations)\n\n // 标准模式下\n if (!editor.isCompatibleMode) {\n // 在非中文输入状态下时才保存数据\n if (!editor.isComposing) {\n return this.asyncSave()\n }\n }\n // 兼容模式下\n else {\n this.asyncSave()\n }\n })\n }\n\n /**\n * 保存变化的数据并发布 change event\n */\n private save() {\n // 有数据\n if (this.data.length) {\n // 保存变化数据\n this.editor.history.save(this.data)\n\n // 清除缓存\n this.data.length = 0\n\n this.emit()\n }\n }\n\n /**\n * 发布 change event\n */\n public emit() {\n // 执行 onchange 回调\n this.editor.txt.eventHooks.changeEvents.forEach(fn => fn())\n }\n\n // 重写 observe\n public observe() {\n super.observe(this.editor.$textElem.elems[0])\n\n let timeout = this.editor.config.onchangeTimeout\n this.asyncSave = debounce(() => {\n this.save()\n }, timeout)\n\n if (!this.editor.isCompatibleMode) {\n this.editor.$textElem.on('compositionend', () => {\n this.asyncSave()\n })\n }\n }\n}\n","/**\n * @description 封装 MutationObserver\n * @author fangzhicong\n */\n\nexport type callback = (mutations: MutationRecord[], observer: Mutation) => void\n\n/**\n * 封装 MutationObserver,抽离成公共类\n */\nexport default class Mutation {\n /**\n * MutationObserver 实例\n */\n protected observer: MutationObserver\n\n /**\n * 被监听的 Node 节点(可继承的,方便扩展但又不会在外部被修改)\n */\n protected node?: Node\n\n /**\n * 默认的 MutationObserverInit 配置\n */\n protected options: MutationObserverInit = {\n subtree: true,\n childList: true,\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n }\n\n /**\n * MutationCallback\n */\n protected callback: (mutations: MutationRecord[]) => void\n\n /**\n * 构造器\n * @param fn 发生变化时执行的回调函数\n * @param options 自定义配置项\n */\n constructor(fn: callback, options?: MutationObserverInit) {\n this.callback = mutations => {\n fn(mutations, this)\n }\n this.observer = new MutationObserver(this.callback)\n options && (this.options = options)\n }\n\n public get target() {\n return this.node\n }\n\n /**\n * 绑定监听节点(初次绑定有效)\n * @param node 需要被监听的节点\n */\n public observe(node: Node) {\n if (!(this.node instanceof Node)) {\n this.node = node\n this.connect()\n }\n }\n\n /**\n * 连接监听器(开始观察)\n */\n public connect() {\n if (this.node) {\n this.observer.observe(this.node, this.options)\n return this\n }\n throw new Error('还未初始化绑定,请您先绑定有效的 Node 节点')\n }\n\n /**\n * 断开监听器(停止观察)\n */\n public disconnect() {\n let list = this.observer.takeRecords()\n list.length && this.callback(list)\n this.observer.disconnect()\n }\n}\n","/**\n * @description 历史记录\n * @author fangzhicong\n */\n\nimport ContentCache from './data/content'\nimport ScrollCache from './data/scroll'\nimport RangeCache from './data/range'\nimport Editor from '../index'\n\n/**\n * 历史记录(撤销、恢复)\n */\nexport default class History {\n // 数据缓存器实例\n private content: ContentCache\n\n // scroll 缓存\n private scroll: ScrollCache\n\n // Range 缓存\n private range: RangeCache\n\n constructor(public editor: Editor) {\n this.content = new ContentCache(editor)\n this.scroll = new ScrollCache(editor)\n this.range = new RangeCache(editor)\n }\n\n /**\n * 获取缓存中的数据长度。格式为:[正常的数据的条数,被撤销的数据的条数]\n */\n public get size() {\n return this.scroll.size\n }\n\n /**\n * 初始化绑定。在 editor.create() 结尾时调用\n */\n public observe() {\n this.content.observe()\n this.scroll.observe()\n // 标准模式下才进行初始化绑定\n !this.editor.isCompatibleMode && this.range.observe()\n }\n\n /**\n * 保存数据\n */\n public save(mutations: MutationRecord[]) {\n if (mutations.length) {\n this.content.save(mutations)\n this.scroll.save()\n // 标准模式下才进行缓存\n !this.editor.isCompatibleMode && this.range.save()\n }\n }\n\n /**\n * 撤销\n */\n public revoke() {\n this.editor.change.disconnect()\n const res = this.content.revoke()\n if (res) {\n this.scroll.revoke()\n // 标准模式下才执行\n if (!this.editor.isCompatibleMode) {\n this.range.revoke()\n this.editor.$textElem.focus()\n }\n }\n this.editor.change.connect()\n // 如果用户在 onchange 中修改了内容(DOM),那么缓存中的节点数据可能不连贯了,不连贯的数据必将导致恢复失败,所以必须将用户的 onchange 处于监控状态中\n res && this.editor.change.emit()\n }\n\n /**\n * 恢复\n */\n public restore() {\n this.editor.change.disconnect()\n const res = this.content.restore()\n if (res) {\n this.scroll.restore()\n // 标准模式下才执行\n if (!this.editor.isCompatibleMode) {\n this.range.restore()\n this.editor.$textElem.focus()\n }\n }\n this.editor.change.connect()\n // 与 revoke 同理\n res && this.editor.change.emit()\n }\n}\n","/**\n * @description 整合差异备份和内容备份,进行统一管理\n * @author fangzhicong\n */\n\nimport NodeCache from './node'\nimport HtmlCache from './html'\nimport Editor from '../../index'\n\nexport default class ContentCache {\n /**\n * 内容备份的管理器\n */\n public cache?: HtmlCache | NodeCache\n\n constructor(public editor: Editor) {}\n\n /**\n * 初始化绑定\n */\n observe() {\n if (this.editor.isCompatibleMode) {\n // 兼容模式(内容备份)\n this.cache = new HtmlCache(this.editor)\n } else {\n // 标准模式(差异备份/节点备份)\n this.cache = new NodeCache(this.editor)\n }\n this.cache.observe()\n }\n\n /**\n * 保存\n */\n public save(mutations: MutationRecord[]) {\n if (this.editor.isCompatibleMode) {\n ;(this.cache as HtmlCache).save()\n } else {\n ;(this.cache as NodeCache).compile(mutations)\n }\n }\n\n /**\n * 撤销\n */\n public revoke() {\n return this.cache?.revoke()\n }\n\n /**\n * 恢复\n */\n public restore() {\n return this.cache?.restore()\n }\n}\n","/**\n * @description 差异备份\n * @author fangzhicong\n */\n\nimport Cache from '../../../../utils/data-structure/cache'\nimport compile from './compile'\nimport { revoke, restore } from './decompilation'\nimport { Compile } from '../type'\nimport Editor from '../../../index'\n\nexport default class NodeCache extends Cache<Compile[]> {\n constructor(public editor: Editor) {\n super(editor.config.historyMaxSize)\n }\n\n public observe() {\n this.resetMaxSize(this.editor.config.historyMaxSize)\n }\n\n /**\n * 编译并保存数据\n */\n public compile(data: MutationRecord[]) {\n this.save(compile(data))\n return this\n }\n\n /**\n * 撤销\n */\n public revoke() {\n return super.revoke(data => {\n revoke(data)\n })\n }\n\n /**\n * 恢复\n */\n public restore() {\n return super.restore(data => {\n restore(data)\n })\n }\n}\n","/**\n * @description 数据结构 - 栈\n * @author fangzhicong\n */\n\n/**\n * 栈(限制最大数据条数,栈满后可以继续入栈,而先入栈的数据将失效)\n */\n// 取名灵感来自 Math.ceil,向上取有效值\nexport class CeilStack<T> {\n /**\n * 数据缓存\n */\n protected data: T[] = []\n\n /**\n * 栈的最大长度。为零则长度不限\n */\n protected max: number = 0\n\n /**\n * 标识是否重设过 max 值\n */\n protected reset: boolean = false\n\n constructor(max: number = 0) {\n max = Math.abs(max)\n max && (this.max = max)\n }\n\n /**\n * 允许用户重设一次 max 值\n */\n public resetMax(maxSize: number) {\n maxSize = Math.abs(maxSize)\n if (!this.reset && !isNaN(maxSize)) {\n this.max = maxSize\n this.reset = true\n }\n }\n\n /**\n * 当前栈中的数据条数\n */\n public get size() {\n return this.data.length\n }\n\n /**\n * 入栈\n * @param data 入栈的数据\n */\n public instack(data: T) {\n this.data.unshift(data)\n if (this.max && this.size > this.max) {\n this.data.length = this.max\n }\n return this\n }\n\n /**\n * 出栈\n */\n public outstack(): T | undefined {\n return this.data.shift()\n }\n\n /**\n * 清空栈\n */\n public clear() {\n this.data.length = 0\n return this\n }\n}\n","/**\n * @description 数据整理\n * @author fangzhicong\n */\n\nimport { TargetPosition, DiffNodes, Compile } from '../type'\nimport { UA, toArray } from '../../../../utils/util'\n\n/**\n * 数据类型\n */\nfunction compileType(data: string) {\n switch (data) {\n case 'childList':\n return 'node'\n case 'attributes':\n return 'attr'\n default:\n return 'text'\n }\n}\n\n/**\n * 获取当前的文本内容\n */\nfunction compileValue(data: MutationRecord) {\n switch (data.type) {\n case 'attributes':\n return (data.target as Element).getAttribute(data.attributeName as string) || ''\n case 'characterData':\n return data.target.textContent\n default:\n return ''\n }\n}\n\n/**\n * addedNodes/removedNodes\n */\nfunction complieNodes(data: MutationRecord) {\n const temp: DiffNodes = {}\n if (data.addedNodes.length) {\n temp.add = toArray(data.addedNodes)\n }\n if (data.removedNodes.length) {\n temp.remove = toArray(data.removedNodes)\n }\n return temp\n}\n\n/**\n * addedNodes/removedNodes 的相对位置\n */\nfunction compliePosition(data: MutationRecord) {\n let temp: TargetPosition\n if (data.previousSibling) {\n temp = {\n type: 'before',\n target: data.previousSibling,\n }\n } else if (data.nextSibling) {\n temp = {\n type: 'after',\n target: data.nextSibling,\n }\n } else {\n temp = {\n type: 'parent',\n target: data.target,\n }\n }\n return temp\n}\n\n/**\n * 补全 Firefox 数据的特殊标签\n */\nconst tag = ['UL', 'OL', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6']\n\n/**\n * 将 MutationRecord 转换成自定义格式的数据\n */\nexport default function compile(data: MutationRecord[]) {\n const temp: Compile[] = []\n // 以下两个变量是兼容 Firefox 时使用到的\n // 前一次操作为删除元素节点\n let removeNode: Node | false = false\n // 连续的节点删除记录\n const removeCache: Node[] = []\n data.forEach((record, index) => {\n const item: Compile = {\n type: compileType(record.type),\n target: record.target,\n attr: record.attributeName || '',\n value: compileValue(record) || '',\n oldValue: record.oldValue || '',\n nodes: complieNodes(record),\n position: compliePosition(record),\n }\n temp.push(item)\n // 兼容 Firefox,补全数据(这几十行代码写得吐血,跟 IE 有得一拼)\n if (!UA.isFirefox) {\n return\n }\n // 正常的数据:缩进、行高、超链接、对齐方式、引用、插入表情、插入图片、分割线、表格、插入代码\n // 普通的数据补全:标题(纯文本内容)、加粗、斜体、删除线、下划线、颜色、背景色、字体、字号、列表(纯文本内容)\n // 特殊的数据补全:标题(包含 HTMLElement)、列表(包含 HTMLElement 或 ul -> ol 或 ol -> ul 或 Enter)\n if (removeNode && record.addedNodes.length && record.addedNodes[0].nodeType == 1) {\n // 需要被全数据的目标节点\n const replenishNode = record.addedNodes[0]\n const replenishData: Compile = {\n type: 'node',\n target: replenishNode,\n attr: '',\n value: '',\n oldValue: '',\n nodes: {\n add: [removeNode],\n },\n position: {\n type: 'parent',\n target: replenishNode,\n },\n }\n // 特殊的标签:['UL', 'OL', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6']\n if (tag.indexOf(replenishNode.nodeName) != -1) {\n replenishData.nodes.add = toArray(replenishNode.childNodes)\n temp.push(replenishData)\n }\n // 上一个删除元素是文本节点\n else if (removeNode.nodeType == 3) {\n if (contains(replenishNode, removeCache)) {\n replenishData.nodes.add = toArray(replenishNode.childNodes)\n }\n temp.push(replenishData)\n }\n // 上一个删除元素是 Element && 由近到远的删除元素至少有一个是需要补全数据节点的子节点\n else if (\n tag.indexOf(record.target.nodeName) == -1 &&\n contains(replenishNode, removeCache)\n ) {\n replenishData.nodes.add = toArray(replenishNode.childNodes)\n temp.push(replenishData)\n }\n }\n // 记录本次的节点信息\n if (item.type == 'node' && record.removedNodes.length == 1) {\n removeNode = record.removedNodes[0]\n removeCache.push(removeNode)\n } else {\n removeNode = false\n removeCache.length = 0\n }\n })\n return temp\n}\n\n// 删除元素的历史记录中包含有多少个目标节点的子元素\nfunction contains(tar: Node, childs: Node[]) {\n let count = 0\n for (let i = childs.length - 1; i > 0; i--) {\n if (tar.contains(childs[i])) {\n count++\n } else {\n break\n }\n }\n return count\n}\n","/**\n * @description 撤销 - 逆向操作,删除节点\n * @author fangzhicong\n */\nimport { Compile } from '../type'\n\n/**\n * 将节点添加到 DOM 树中\n * @param data 数据项\n * @param list 节点集合(addedNodes 或 removedNodes)\n */\nfunction insertNode(data: Compile, list: Node[]) {\n let reference = data.position.target\n switch (data.position.type) {\n // reference 在这些节点的前面\n case 'before':\n if (reference.nextSibling) {\n reference = reference.nextSibling\n list.forEach((item: Node) => {\n data.target.insertBefore(item, reference)\n })\n } else {\n list.forEach((item: Node) => {\n data.target.appendChild(item)\n })\n }\n break\n // reference 在这些节点的后面\n case 'after':\n list.forEach((item: Node) => {\n data.target.insertBefore(item, reference)\n })\n break\n // parent\n // reference 是这些节点的父节点\n default:\n list.forEach((item: Node) => {\n reference.appendChild(item)\n })\n break\n }\n}\n\n/* ------------------------------------------------------------------ 撤销逻辑 ------------------------------------------------------------------ */\n\nfunction revokeNode(data: Compile) {\n for (let [relative, list] of Object.entries(data.nodes)) {\n switch (relative) {\n // 反向操作,将这些节点从 DOM 中移除\n case 'add':\n list.forEach((item: Node) => {\n data.target.removeChild(item)\n })\n break\n // remove(反向操作,将这些节点添加到 DOM 中)\n default: {\n insertNode(data, list)\n break\n }\n }\n }\n}\n\n/**\n * 撤销 attribute\n */\nfunction revokeAttr(data: Compile) {\n let target = data.target as HTMLElement\n if (data.oldValue == null) {\n target.removeAttribute(data.attr)\n } else {\n target.setAttribute(data.attr, data.oldValue)\n }\n}\n\n/**\n * 撤销文本内容\n */\nfunction revokeText(data: Compile) {\n data.target.textContent = data.oldValue\n}\n\nconst revokeFns = {\n node: revokeNode,\n text: revokeText,\n attr: revokeAttr,\n}\n\n// 撤销 - 对外暴露的接口\nexport function revoke(data: Compile[]) {\n for (let i = data.length - 1; i > -1; i--) {\n let item = data[i]\n revokeFns[item.type](item)\n }\n}\n\n/* ------------------------------------------------------------------ 恢复逻辑 ------------------------------------------------------------------ */\n\nfunction restoreNode(data: Compile) {\n for (let [relative, list] of Object.entries(data.nodes)) {\n switch (relative) {\n case 'add': {\n insertNode(data, list)\n break\n }\n // remove\n default: {\n list.forEach((item: Node) => {\n ;(item.parentNode as Node).removeChild(item)\n })\n break\n }\n }\n }\n}\n\nfunction restoreText(data: Compile) {\n data.target.textContent = data.value\n}\n\nfunction restoreAttr(data: Compile) {\n ;(data.target as HTMLElement).setAttribute(data.attr, data.value)\n}\n\nconst restoreFns = {\n node: restoreNode,\n text: restoreText,\n attr: restoreAttr,\n}\n\n// 恢复 - 对外暴露的接口\nexport function restore(data: Compile[]) {\n for (let item of data) {\n restoreFns[item.type](item)\n }\n}\n","module.exports = require(\"core-js-pure/stable/object/entries\");","var parent = require('../../es/object/entries');\n\nmodule.exports = parent;\n","require('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","var $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.github.io/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.github.io/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.github.io/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","/**\n * @description 完整的内容备份,每次变化都将备份整个编辑器的内容\n * @author fangzhicong\n */\nimport Editor from '../../../index'\nimport { TailChain } from '../../../../utils/data-structure/chain'\n\nexport default class HtmlCache {\n // 缓存数据\n private data: TailChain<string>\n\n constructor(public editor: Editor) {\n this.data = new TailChain()\n }\n\n /**\n * 初始化绑定\n */\n observe() {\n this.data.resetMax(this.editor.config.historyMaxSize)\n // 保存初始化值\n this.data.insertLast(this.editor.$textElem.html())\n }\n\n /**\n * 保存\n */\n public save() {\n this.data.insertLast(this.editor.$textElem.html())\n return this\n }\n\n /**\n * 撤销\n */\n public revoke() {\n let data = this.data.prev()\n if (data) {\n this.editor.$textElem.html(data)\n return true\n }\n return false\n }\n\n /**\n * 恢复\n */\n public restore() {\n let data = this.data.next()\n if (data) {\n this.editor.$textElem.html(data)\n return true\n }\n return false\n }\n}\n","/**\n * @description 数据结构 - 链表\n * @author fangzhicong\n */\n\n/**\n * 特殊链表(数据尾插入、插入前自动清理指针后边的数据、插入后指针永远定位于最后一位元素、可限制链表长度、指针双向移动)\n */\nexport class TailChain<T> {\n /**\n * 链表数据\n */\n protected data: T[] = []\n\n /**\n * 链表最大长度,零表示长度不限\n */\n protected max: number = 0\n\n /**\n * 指针\n */\n protected point = 0\n\n // 当前指针是否人为操作过\n protected isRe = false\n\n /**\n * 允许用户重设一次 max 值\n */\n resetMax(maxSize: number) {\n maxSize = Math.abs(maxSize)\n maxSize && (this.max = maxSize)\n }\n\n /**\n * 当前链表的长度\n */\n get size() {\n return this.data.length\n }\n\n /**\n * 尾插入\n * @param data 插入的数据\n */\n public insertLast<K extends T>(data: K) {\n // 人为操作过指针,清除指针后面的元素\n if (this.isRe) {\n this.data.splice(this.point + 1)\n this.isRe = false\n }\n this.data.push(data)\n // 超出链表最大长度\n while (this.max && this.size > this.max) {\n this.data.shift()\n }\n // 从新定位指针到最后一个元素\n this.point = this.size - 1\n return this\n }\n\n /**\n * 获取当前指针元素\n */\n public current(): T | undefined {\n return this.data[this.point]\n }\n\n /**\n * 获取上一指针元素\n */\n public prev(): T | undefined {\n !this.isRe && (this.isRe = true)\n this.point--\n if (this.point < 0) {\n this.point = 0\n return undefined\n }\n return this.current()\n }\n\n /**\n * 下一指针元素\n */\n public next(): T | undefined {\n !this.isRe && (this.isRe = true)\n this.point++\n if (this.point >= this.size) {\n this.point = this.size - 1\n return undefined\n }\n return this.current()\n }\n}\n","/**\n * @description 记录 scrollTop\n * @author fangzhicong\n */\n\nimport Cache from '../../../../utils/data-structure/cache'\nimport Editor from '../../../index'\nimport { ScrollItem } from '../type'\n\nexport default class ScrollCache extends Cache<ScrollItem> {\n /**\n * 上一次的 scrollTop\n */\n private last: number = 0\n\n /**\n * 编辑区容器元素节点\n */\n private target: Element\n\n constructor(public editor: Editor) {\n super(editor.config.historyMaxSize)\n this.target = editor.$textElem.elems[0]\n }\n\n /**\n * 给编辑区容器绑定 scroll 事件\n */\n public observe() {\n this.target = this.editor.$textElem.elems[0]\n this.editor.$textElem.on('scroll', () => {\n this.last = this.target.scrollTop\n })\n this.resetMaxSize(this.editor.config.historyMaxSize)\n }\n\n /**\n * 保存 scrollTop 值\n */\n public save() {\n super.save([this.last, this.target.scrollTop])\n return this\n }\n\n /**\n * 撤销\n */\n public revoke() {\n return super.revoke(data => {\n this.target.scrollTop = data[0]\n })\n }\n\n /**\n * 恢复\n */\n public restore() {\n return super.restore(data => {\n this.target.scrollTop = data[1]\n })\n }\n}\n","/**\n * @description 记录 range 变化\n * @author fangzhicong\n */\n\nimport Cache from '../../../../utils/data-structure/cache'\nimport Editor from '../../../index'\nimport { RangeItem } from '../type'\nimport $ from '../../../../utils/dom-core'\nimport { debounce } from '../../../../utils/util'\n\n/**\n * 把 Range 对象转换成缓存对象\n * @param range Range 对象\n */\nfunction rangeToObject(range: Range): RangeItem {\n return {\n start: [range.startContainer, range.startOffset],\n end: [range.endContainer, range.endOffset],\n root: range.commonAncestorContainer,\n collapsed: range.collapsed,\n }\n}\n\n/**\n * 编辑区 range 缓存管理器\n */\nexport default class RangeCache extends Cache<[RangeItem, RangeItem]> {\n /**\n * 变化前的 Range 数据\n */\n private lastRange: RangeItem\n\n /**\n * 有效选区的根节点\n */\n private root: Element\n\n public updateLastRange: Function\n\n constructor(public editor: Editor) {\n super(editor.config.historyMaxSize)\n this.lastRange = rangeToObject(document.createRange())\n this.root = editor.$textElem.elems[0]\n this.updateLastRange = debounce(() => {\n this.lastRange = rangeToObject(this.rangeHandle)\n }, editor.config.onchangeTimeout)\n }\n\n /**\n * 获取 Range 对象\n */\n public get rangeHandle() {\n const selection = document.getSelection()\n return selection && selection.rangeCount ? selection.getRangeAt(0) : document.createRange()\n }\n\n /**\n * 初始化绑定\n */\n public observe() {\n const self = this\n // 同步节点数据\n this.root = this.editor.$textElem.elems[0]\n this.resetMaxSize(this.editor.config.historyMaxSize)\n // selection change 回调函数\n function selectionchange() {\n const handle = self.rangeHandle\n if (\n self.root === handle.commonAncestorContainer ||\n self.root.contains(handle.commonAncestorContainer)\n ) {\n // 非中文输入状态下才进行记录\n if (!self.editor.isComposing) {\n self.updateLastRange()\n }\n }\n }\n // backspace 和 delete 手动更新 Range 缓存\n function deletecallback(e: KeyboardEvent) {\n if (e.key == 'Backspace' || e.key == 'Delete') {\n // self.lastRange = rangeToObject(self.rangeHandle)\n self.updateLastRange()\n }\n }\n // 绑定事件(必须绑定在 document 上,不能绑定在 window 上)\n $(document).on('selectionchange', selectionchange)\n // 解除事件绑定\n this.editor.beforeDestroy(function () {\n $(document).off('selectionchange', selectionchange)\n })\n\n // 删除文本时手动更新 range\n self.editor.$textElem.on('keydown', deletecallback)\n }\n\n /**\n * 保存 Range\n */\n public save() {\n let current = rangeToObject(this.rangeHandle)\n super.save([this.lastRange, current])\n this.lastRange = current\n return this\n }\n\n /**\n * 设置 Range,在 撤销/恢复 中调用\n * @param range 缓存的 Range 数据\n */\n public set(range: RangeItem | undefined) {\n if (range) {\n const handle = this.rangeHandle\n handle.setStart(...range.start)\n handle.setEnd(...range.end)\n this.editor.menus.changeActive()\n return true\n }\n return false\n }\n\n /**\n * 撤销\n */\n public revoke() {\n return super.revoke(data => {\n this.set(data[0])\n })\n }\n\n /**\n * 恢复\n */\n public restore() {\n return super.restore(data => {\n this.set(data[1])\n })\n }\n}\n","/**\n * @description disable 内容编辑\n * @author lichunlin\n */\nimport Editor from '../index'\nimport $, { DomElement } from '../../utils/dom-core'\nimport '../../assets/style/disable.less'\n\nexport default function disableInit(editor: Editor) {\n let isCurtain: Boolean = false // 避免重复生成幕布\n let $contentDom: DomElement\n let $menuDom: DomElement\n\n // 禁用期间,通过 js 修改内容后,刷新内容\n editor.txt.eventHooks.changeEvents.push(function () {\n if (isCurtain) {\n $contentDom.find('.w-e-content-preview').html(editor.$textElem.html())\n }\n })\n\n // 创建幕布\n function disable() {\n if (isCurtain) return\n // 隐藏编辑区域\n editor.$textElem.hide()\n // 生成div 渲染编辑内容\n let textContainerZindexValue = editor.zIndex.get('textContainer')\n const content = editor.txt.html()\n $contentDom = $(\n `<div class=\"w-e-content-mantle\" style=\"z-index:${textContainerZindexValue}\">\n <div class=\"w-e-content-preview w-e-text\">${content}</div>\n </div>`\n )\n editor.$textContainerElem.append($contentDom)\n // 生成div 菜单膜布\n let menuZindexValue = editor.zIndex.get('menu')\n $menuDom = $(`<div class=\"w-e-menue-mantle\" style=\"z-index:${menuZindexValue}\"></div>`)\n editor.$toolbarElem.append($menuDom)\n isCurtain = true\n }\n\n // 销毁幕布并显示可编辑区域\n function enable() {\n if (!isCurtain) return\n $contentDom.remove()\n $menuDom.remove()\n editor.$textElem.show()\n isCurtain = false\n }\n\n return { disable, enable }\n}\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/src/index.js!../../../node_modules/less-loader/dist/cjs.js!./disable.less\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".w-e-content-mantle {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n overflow-y: auto;\\n}\\n.w-e-content-mantle .w-e-content-preview {\\n width: 100%;\\n min-height: 100%;\\n padding: 0 10px;\\n line-height: 1.5;\\n}\\n.w-e-content-mantle .w-e-content-preview img {\\n cursor: default;\\n}\\n.w-e-content-mantle .w-e-content-preview img:hover {\\n box-shadow: none;\\n}\\n.w-e-menue-mantle {\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n top: 0;\\n left: 0;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n"],"sourceRoot":""}
\No newline at end of file