UNPKG

830 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/instance/for-each.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/object/set-prototype-of.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/entry-virtual.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/@babel/runtime-corejs3/core-js-stable/instance/trim.js","webpack://wangEditor/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://wangEditor/./node_modules/css-loader/dist/runtime/api.js","webpack://wangEditor/./src/menus/menu-constructors/BtnMenu.ts","webpack://wangEditor/./src/menus/menu-constructors/DropListMenu.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/an-object.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-method-uses-to-length.js","webpack://wangEditor/./src/utils/const.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/@babel/runtime-corejs3/core-js-stable/instance/map.js","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/find.js","webpack://wangEditor/./src/menus/menu-constructors/Panel.ts","webpack://wangEditor/./node_modules/core-js-pure/internals/a-function.js","webpack://wangEditor/./node_modules/core-js-pure/internals/array-iteration.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/@babel/runtime-corejs3/core-js-stable/instance/slice.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/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/engine-user-agent.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/@babel/runtime-corejs3/core-js-stable/instance/filter.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-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/core-js-pure/internals/array-method-is-strict.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/includes.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/core-js-stable/array/is-array.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/menus/todo/util.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/@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/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/menus/todo/todo.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/engine-is-webos-webkit.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/config/video.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/menus/todo/index.ts","webpack://wangEditor/./node_modules/@babel/runtime-corejs3/core-js-stable/instance/every.js","webpack://wangEditor/./node_modules/core-js-pure/stable/instance/every.js","webpack://wangEditor/./node_modules/core-js-pure/es/instance/every.js","webpack://wangEditor/./node_modules/core-js-pure/es/array/virtual/every.js","webpack://wangEditor/./node_modules/core-js-pure/modules/es.array.every.js","webpack://wangEditor/./src/menus/todo/bind-event/index.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","parentUntilEditor","editor","equal","$textContainerElem","$toolbarElem","$elem","HTMLElement","insertBefore","referenceNode","parentNode","insertAfter","anchorNode","nextSibling","data","set","getNodeTop","$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","CONSTRUCTOR","DESCRIPTORS","definePropertyModule","createPropertyDescriptor","IE8_DOM_DEFINE","anObject","toPrimitive","nativeDefineProperty","O","P","Attributes","TypeError","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","BtnMenu","conf","title","i18next","config","lang","dropList","selection","getRange","zIndex","txt","eventHooks","dropListMenuHoverEvents","showTimeoutId","hideTimeoutId","DropListMenu","isObject","String","cache","thrower","METHOD_NAME","method","ACCESSORS","argument0","argument1","undefined","imgRegex","urlRegex","videoRegex","IndexedObject","requireObjectCoercible","aFunction","variable","namespace","menu","$container","clickEvents","Panel","hideCurAllPanels","toolbarClickEvents","createdMenus","rect","menuRect","$closeBtn","$tabTitleContainer","$tabContentContainer","tabs","tabTitleArr","tabContentArr","tab","tabIndex","tpl","$title","$content","stopPropagation","events","event","EMPTY_FN","$inputs","setPanel","add","size","panel","toObject","toLength","arraySpeciesCreate","createMethod","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","$this","callbackfn","that","specificCreate","boundFunction","some","every","findIndex","filterOut","PanelMenu","bitmap","configurable","writable","toInteger","min","argument","isArrayIteratorMethod","getIteratorMethod","iteratorClose","Result","stopped","iterable","unboundFunction","iterator","iterFn","step","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","$targetElem","_show","_isInsertTextContainer","getPositionData","pageScrollTop","documentElement","targetElemRect","textElemRect","targetOffset","targetParentElem","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","getBuiltIn","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","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","isTodo","$topSelectElem","isContains","node","otherNode","nodeValue","dealTextNode","pos","oldContent","isAllTodo","$topSelectElems","getSelectionRangeTopNodes","getCursorNextNode","textNode","newNode","delArr","v","childNode","textContent","isEqualNode","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","$orginElem","template","checked","$todo","init","$input","getInput","$inputContainer","getInputContainer","getTodo","todo","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","macrotask","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","observe","characterData","console","allSettled","any","alreadyResolved","alreadyRejected","onFinally","isFunction","CONVERT_TO_STRING","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","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","onlineVideoCheck","onlineVideoCallback","_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","getSelectionNodes","moveCursor","setStart","getCursorPos","anchorOffset","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","onceClickSaveRange","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","attrData","attrList","attrListLength","getHtmlByNodeList","getRootNode","menuList","constructorList","extend","excludeMenus","menuKey","MenuConstructor","_addToToolbar","_bindMenuTooltips","$tooltipEl","clearShowTimeoutId","$menuEl","tooltipOffset","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","$newLine","$childElem","colorListConf","color","isSpan","bgColor","backgroundColor","isSameColor","hexToRgb","BackColor","FontColor","Video","inputIFrameId","$video","log","checkOnlineVideo","insertVideo","Image","upTriggerId","upFileId","linkUrlId","linkBtnId","fileMultipleAttr","accepts","tabsConf","fileElem","click","fileList","$linkUrl","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","cancelTodo","setTodo","todoNode","$topNodeElems","Todo","$every","selectionNode","rangeChildNodes","startPos","endPos","CursorNextNode","$inputcontainer","todoLiElem","$newTodo","contentSection","prevNode","previousSibling","$newP","styleSettings","$toolbarSelector","textContainerCliheight","_focusHandler","_bindChange","isChild","isToolbar","isMenu","currentHtml","_blurHandler","activeElement","_bindFocusAndBlur","_bindInput","strArr","lng","defaultNS","resources","$editorParent","$iconElem","bar","h","innerHeight","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","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 = 129);\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 * 根据元素位置获取元素节点(默认获取0位置的节点)\n * @param n 元素节点位置\n */\n getNode(n: number = 0): Node {\n let elem: Node\n elem = this.elems[n]\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 * 查找父元素,直到满足 selector 条件,或者 到达 编辑区域容器以及菜单栏容器\n * @param selector css 选择器\n * @param curElem 从哪个元素开始查找,默认为当前元素\n */\n parentUntilEditor(selector: string, editor: Editor, curElem?: HTMLElement): DomElement | null {\n const elem = curElem || this.elems[0]\n if ($(elem).equal(editor.$textContainerElem) || $(elem).equal(editor.$toolbarElem)) {\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.parentUntilEditor(selector, editor, 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 * 将该元素插入到selector元素后面\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/instance/for-each\");","module.exports = require(\"core-js-pure/stable/object/set-prototype-of\");","/**\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// Detect IE8's incomplete defineProperty implementation\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 path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n return path[CONSTRUCTOR + 'Prototype'];\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.es/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","module.exports = require(\"core-js-pure/stable/instance/trim\");","\"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}","/**\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","/**\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","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","/**\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\n//用于校验在线视频是否符合规范\nexport const videoRegex = /((<iframe|video|embed|object)\\s+[\\s\\S]*<\\/(iframe|video|embed|object))>|<(iframe|video|embed|object)\\s+[\\s\\S]*\\/?>/\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","module.exports = require(\"core-js-pure/stable/instance/map\");","module.exports = require(\"core-js-pure/stable/instance/find\");","/**\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","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.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/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 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.es/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.es/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","module.exports = require(\"core-js-pure/stable/instance/slice\");","/**\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.es/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.es/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.es/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\");","'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.es/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.es/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.es/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.es/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","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\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.es/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.es/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","module.exports = require(\"core-js-pure/stable/instance/filter\");","// 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.es/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.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/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.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 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.es/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.es/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 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.es/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","'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/bind\");","module.exports = require(\"core-js-pure/stable/instance/includes\");","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.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","module.exports = require(\"core-js-pure/stable/array/is-array\");","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\n // 如果过滤后文件列表为空直接返回\n if (resultFiles.length === 0) {\n config.customAlert(t('传入的文件不合法'), 'warning')\n return\n }\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","import { DomElement } from '../../utils/dom-core'\nimport Editor from '../../editor'\n\n/**\n * 判断传入的单行顶级选区选取是不是todo\n * @param editor 编辑器对象\n */\nfunction isTodo($topSelectElem: DomElement) {\n return $topSelectElem.attr('class') === 'w-e-todo'\n}\n/**\n * 判断选中的内容是不是都是todo\n * @param editor 编辑器对象\n */\nfunction isAllTodo(editor: Editor): boolean | undefined {\n const $topSelectElems = editor.selection.getSelectionRangeTopNodes(editor)\n // 排除为[]的情况\n if ($topSelectElems.length === 0) return\n\n return $topSelectElems.every($topSelectElem => {\n return isTodo($topSelectElem)\n })\n}\n\n/**\n * 根据所在的文本节点和光标在文本节点的位置获取截断的后节点内容\n * @param node 顶级节点\n * @param textNode 光标所在的文本节点\n * @param pos 光标在文本节点的位置\n */\nfunction getCursorNextNode(node: Node, textNode: Node, pos: number): Node | undefined {\n if (!node.hasChildNodes()) return\n\n const newNode = node.cloneNode() as ChildNode\n // 判断光标是否在末尾\n let end = false\n if (textNode.nodeValue === '') {\n end = true\n }\n\n let delArr: Node[] = []\n node.childNodes.forEach(v => {\n //光标后的内容\n if (!isContains(v, textNode) && end) {\n newNode.appendChild(v.cloneNode(true))\n if (v.nodeName !== 'BR') {\n delArr.push(v)\n }\n }\n // 光标所在的区域\n if (isContains(v, textNode)) {\n if (v.nodeType === 1) {\n const childNode = getCursorNextNode(v, textNode, pos) as Node\n if (childNode && childNode.textContent !== '') newNode?.appendChild(childNode)\n }\n if (v.nodeType === 3) {\n if (textNode.isEqualNode(v)) {\n const textContent = dealTextNode(v, pos)\n newNode.textContent = textContent\n }\n }\n end = true\n }\n })\n // 删除选中后原来的节点\n delArr.forEach(v => {\n const node = v as ChildNode\n node.remove()\n })\n\n return newNode\n}\n\n/**\n * 判断otherNode是否包含在node中\n * @param node 父节点\n * @param otherNode 需要判断是不是被包含的节点\n */\nfunction isContains(node: Node, otherNode: Node) {\n // 兼容ie11中textNode不支持contains方法\n if (node.nodeType === 3) {\n return node.nodeValue === otherNode.nodeValue\n }\n\n return node.contains(otherNode)\n}\n/**\n * 获取新的文本节点\n * @param node 要处理的文本节点\n * @param pos 光标在文本节点所在的位置\n * @param start 设置为true时保留开始位置到光标的内容,设置为false时删去开始的内容\n */\nfunction dealTextNode(node: Node, pos: number, start: boolean = true): string {\n let content = node.nodeValue\n let oldContent = content?.slice(0, pos) as string\n content = content?.slice(pos) as string\n // start为false时替换content和oldContent\n if (!start) {\n let temp = content\n content = oldContent\n oldContent = temp\n }\n node.nodeValue = oldContent\n return content\n}\n\nexport { getCursorNextNode, isTodo, isAllTodo, dealTextNode }\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.es/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.es/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","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","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/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.es/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","import $, { DomElement } from '../../utils/dom-core'\nexport class todo {\n private template: string\n private checked: boolean\n private $todo: DomElement\n private $child: DomElement\n constructor($orginElem?: DomElement) {\n this.template = `<ul class=\"w-e-todo\"><li><span contenteditable=\"false\"><input type=\"checkbox\"></span></li></ul>`\n this.checked = false\n this.$todo = $(this.template)\n this.$child = $orginElem?.childNodes()?.clone(true) as DomElement\n }\n\n public init() {\n const $input = this.getInput()\n const $child = this.$child\n const $inputContainer = this.getInputContainer()\n\n if ($child) {\n $child.insertAfter($inputContainer)\n }\n\n $input.on('click', () => {\n if (this.checked) {\n $input?.removeAttr('checked')\n } else {\n $input?.attr('checked', '')\n }\n this.checked = !this.checked\n })\n }\n\n public getInput(): DomElement {\n const $todo = this.$todo\n const $input = $todo.find('input')\n return $input\n }\n\n public getInputContainer(): DomElement {\n const $inputContainer = this.getInput().parent()\n return $inputContainer\n }\n\n public getTodo(): DomElement {\n return this.$todo\n }\n}\n\nfunction createTodo($orginElem?: DomElement): todo {\n const t = new todo($orginElem)\n t.init()\n return t\n}\n\nexport default createTodo\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.es/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.es/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.es/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 h1,\\n.w-e-text-container h1,\\n.w-e-menu-panel h1 {\\n font-size: 2em !important;\\n}\\n.w-e-toolbar h2,\\n.w-e-text-container h2,\\n.w-e-menu-panel h2 {\\n font-size: 1.5em !important;\\n}\\n.w-e-toolbar h3,\\n.w-e-text-container h3,\\n.w-e-menu-panel h3 {\\n font-size: 1.17em !important;\\n}\\n.w-e-toolbar h4,\\n.w-e-text-container h4,\\n.w-e-menu-panel h4 {\\n font-size: 1em !important;\\n}\\n.w-e-toolbar h5,\\n.w-e-text-container h5,\\n.w-e-menu-panel h5 {\\n font-size: 0.83em !important;\\n}\\n.w-e-toolbar p,\\n.w-e-text-container p,\\n.w-e-menu-panel p {\\n font-size: 1em !important;\\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-text .w-e-todo {\\n margin: 0 0 0 20px;\\n}\\n.w-e-text .w-e-todo li {\\n list-style: none;\\n font-size: 1em;\\n}\\n.w-e-text .w-e-todo li span:nth-child(1) {\\n position: relative;\\n left: -18px;\\n}\\n.w-e-text .w-e-todo li span:nth-child(1) input {\\n position: absolute;\\n top: 0.3em;\\n margin-right: 3px;\\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.w-e-menu-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-menu-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-menu-tooltip-item-wrapper {\\n font-size: 14px;\\n margin: 0 5px;\\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 // eslint-disable-next-line unicorn/error-message\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// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\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.es/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.es/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.es/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.es/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.es/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.es/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.es/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_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\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 // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && 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 userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\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://tc39.es/ecma262/#sec-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://tc39.es/ecma262/#sec-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.es/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.es/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.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/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.es/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.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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.es/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'\nimport videoConfig from './video'\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 excludeMenus: 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 onlineVideoCheck: Function\n onlineVideoCallback: Function\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 videoConfig,\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.es/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.es/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 'todo',\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 title: {\n 标题: '标题',\n 加粗: '加粗',\n 字号: '字号',\n 字体: '字体',\n 斜体: '斜体',\n 下划线: '下划线',\n 删除线: '删除线',\n 缩进: '缩进',\n 行高: '行高',\n 文字颜色: '文字颜色',\n 背景色: '背景色',\n 链接: '链接',\n 序列: '序列',\n 对齐: '对齐',\n 引用: '引用',\n 表情: '表情',\n 图片: '图片',\n 视频: '视频',\n 表格: '表格',\n 代码: '代码',\n 分割线: '分割线',\n 恢复: '恢复',\n 撤销: '撤销',\n 全屏: '全屏',\n 代办事项: '代办事项',\n },\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 title: {\n 标题: 'head',\n 加粗: 'bold',\n 字号: 'font size',\n 字体: 'font family',\n 斜体: 'italic',\n 下划线: 'underline',\n 删除线: 'strikethrough',\n 缩进: 'indent',\n 行高: 'line heihgt',\n 文字颜色: 'font color',\n 背景色: 'background',\n 链接: 'link',\n 序列: 'numbered list',\n 对齐: 'align',\n 引用: 'quote',\n 表情: 'emoticons',\n 图片: 'image',\n 视频: 'media',\n 表格: 'table',\n 代码: 'code',\n 分割线: 'split line',\n 恢复: 'undo',\n 撤销: 'redo',\n 全屏: 'fullscreen',\n 代办事项: 'todo',\n },\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 视频相关的配置\n * @author hutianhao\n */\n\nimport { EMPTY_FN } from '../utils/const'\n\nexport default {\n // 插入网络视频前的回调函数\n onlineVideoCheck: (video: string): string | boolean => {\n return true\n },\n\n // 插入网络视频成功之后的回调函数\n onlineVideoCallback: EMPTY_FN,\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().trim() === '<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 * 有一个特殊情况是firefox下的文本节点会自动补充一个br元素,会导致自动换行\n * 所以默认情况下在firefox下的文本节点会自动移动到br前面\n * @param {Node} node 元素节点\n * @param {number} position 光标的位置\n */\n public moveCursor(node: Node, position?: number): void {\n const range = this.getRange()\n //对文本节点特殊处理\n let len: number =\n node.nodeType === 3 ? (node.nodeValue?.length as number) : node.childNodes.length\n if ((UA.isFirefox || UA.isIE()) && len !== 0) {\n // firefox下在节点为文本节点和节点最后一个元素为文本节点的情况下\n if (node.nodeType === 3 || node.childNodes[len - 1].nodeName === 'BR') {\n len = len - 1\n }\n }\n let pos: number = position ?? len\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 /**\n * 获取光标在当前选区的位置\n */\n public getCursorPos(): number | undefined {\n const selection = window.getSelection()\n\n return selection?.anchorOffset\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\n // 点击后保存,为了避免被多次执行而导致造成浪费,这里对 click 使用一次性绑定\n function onceClickSaveRange() {\n saveRange()\n $textElem.off('click', onceClickSaveRange)\n }\n $textElem.on('click', onceClickSaveRange)\n\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).parentUntilEditor('TABLE', editor, 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.es/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.es/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, 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(), 0)\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 // 当前选区所在的 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 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 // 在群中有用户提到关闭样式粘贴复制的文字进来后链接直接转为文字了,不符合预期,这里优化下\n if (urlRegex.test(pasteText) && pasteFilterStyle) {\n return editor.cmd.do(\n 'insertHTML',\n `<a href=\"${pasteText}\" target=\"_blank\">${pasteText}</a>`\n ) // html\n }\n // table 中(td、th),待开发。。。\n if (!pasteHtml) {\n return\n }\n try {\n // firefox 中,获取的 pasteHtml 可能是没有 <ul> 包裹的 <li>\n // 因此执行 insertHTML 会报错\n if (pasteTextHandle && isFunction(pasteTextHandle)) {\n // 用户自定义过滤处理粘贴内容\n pasteHtml = '' + (pasteTextHandle(pasteHtml) || '') // html\n }\n // 粘贴的html的是否是css的style样式\n let isCssStyle: boolean = /[\\.\\#\\@]?\\w+[^{]+\\{[^}]*\\}/.test(pasteHtml) // eslint-disable-line\n // 经过处理后还是包含暴露的css样式则直接插入它的text\n if (isCssStyle) {\n editor.cmd.do('insertHTML', `${formatHtml(pasteText)}`) // text\n } else {\n editor.cmd.do('insertHTML', `${formatHtml(pasteHtml)}`) // html\n }\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 if (!str) {\n return\n }\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.es/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'\nimport $, { DomElement } from './../utils/dom-core'\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\n // 排除exclude包含的菜单\n let excludeMenus: string[] | any = config.excludeMenus\n if (Array.isArray(excludeMenus) === false) excludeMenus = []\n config.menus = config.menus.filter(key => excludeMenus.includes(key) === false)\n\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 // 添加菜单栏tooltips\n this._bindMenuTooltips()\n }\n\n // 绑定菜单栏tooltips\n private _bindMenuTooltips(): void {\n const editor = this.editor\n const $toolbarElem = editor.$toolbarElem\n const $tooltipEl = $(\n `<div class=\"w-e-menu-tooltip w-e-menu-tooltip-up\">\n <div class=\"w-e-menu-tooltip-item-wrapper\">\n <div></div>\n </div>\n </div>`\n )\n $tooltipEl.css('visibility', 'hidden')\n $toolbarElem.append($tooltipEl)\n // 设置 z-index\n $tooltipEl.css('z-index', editor.zIndex.get('tooltip'))\n\n let showTimeoutId: number = 0 // 定时器,延时200ms显示tooltips\n // 清空计时器\n function clearShowTimeoutId() {\n if (showTimeoutId) {\n clearTimeout(showTimeoutId)\n }\n }\n\n // 隐藏tooltip\n function hide() {\n clearShowTimeoutId()\n $tooltipEl.css('visibility', 'hidden')\n }\n\n // 事件监听\n $toolbarElem\n .on('mouseover', (e: MouseEvent) => {\n const target = e.target as HTMLElement\n const $target = $(target)\n let title: string | undefined\n let $menuEl: DomElement | undefined\n\n if ($target.isContain($toolbarElem)) {\n hide()\n return\n }\n\n if ($target.parentUntil('.w-e-droplist') != null) {\n // 处于droplist中时隐藏\n hide()\n } else {\n if ($target.attr('data-title')) {\n title = $target.attr('data-title')\n $menuEl = $target\n } else {\n const $parent = $target.parentUntil('.w-e-menu')\n if ($parent != null) {\n title = $parent.attr('data-title')\n $menuEl = $parent\n }\n }\n }\n\n if (title && $menuEl) {\n clearShowTimeoutId()\n const targetOffset = $menuEl.getOffsetData()\n $tooltipEl.text(editor.i18next.t('menus.title.' + title))\n const tooltipOffset = $tooltipEl.getOffsetData()\n const left =\n targetOffset.left + targetOffset.width / 2 - tooltipOffset.width / 2\n $tooltipEl.css('left', `${left}px`)\n $tooltipEl.css('top', `${targetOffset.height * -1}px`)\n showTimeoutId = window.setTimeout(() => {\n $tooltipEl.css('visibility', 'visible')\n }, 200)\n } else {\n hide()\n }\n })\n .on('mouseleave', () => {\n hide()\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'\nimport Todo from './todo'\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 todo: Todo,\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\" data-title=\"加粗\">\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.es/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 = $(\n '<div class=\"w-e-menu\" data-title=\"标题\"><i class=\"w-e-icon-header\"></i></div>'\n )\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 // `JSON.stringify` method\n // https://tc39.es/ecma262/#sec-json.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 = $(\n '<div class=\"w-e-menu\" data-title=\"链接\"><i class=\"w-e-icon-link\"></i></div>'\n )\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 type=\"button\" id=\"${btnOkId}\" class=\"right\">\n ${editor.i18next.t('插入')}\n </button>\n <button type=\"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\" data-title=\"斜体\">\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\" data-title=\"下划线\">\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\" data-title=\"删除线\">\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\" data-title=\"字体\">\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\" data-title=\"字号\">\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 = $(\n '<div class=\"w-e-menu\" data-title=\"对齐\"><i class=\"w-e-icon-paragraph-left\"></i></div>'\n )\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 if ($selectionElem) {\n // 获取在css中对应style的值\n const justifyValue = justifyClass[value]\n $elems.forEach((el: DomElement) => {\n el.css('text-align', justifyValue)\n })\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\" data-title=\"引用\">\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, 0)\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(), 0)\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\" data-title=\"背景色\">\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\" data-title=\"文字颜色\">\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\" data-title=\"视频\">\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'\nimport { videoRegex } from '../../utils/const'\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 const i18nPrefix = 'menus.panelMenus.video.'\n const t = (text: string, prefix: string = i18nPrefix): string => {\n return editor.i18next.t(prefix + text)\n }\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 // video添加后的回调\n editor.config.onlineVideoCallback(video)\n }\n\n /**\n * 校验在线视频链接\n * @param video 在线视频链接\n */\n function checkOnlineVideo(video: string): boolean {\n // 编辑器进行正常校验,video 合规则使指针为true,不合规为false\n let flag = true\n if (!videoRegex.test(video)) {\n flag = false\n }\n\n // 查看开发者自定义配置的返回值\n const check = editor.config.onlineVideoCheck(video)\n if (check === undefined) {\n if (flag === false) console.log(t('您刚才插入的视频链接未通过编辑器校验', 'validate.'))\n } else if (check === true) {\n // 用户通过了开发者的校验\n if (flag === false) {\n editor.config.customAlert(\n `${t('您插入的网络视频无法识别', 'validate.')},${t(\n '请替换为正确的网络视频格式',\n 'validate.'\n )}:如<iframe src=...></iframe>`,\n 'warning'\n )\n } else {\n return true\n }\n } else {\n //用户未能通过开发者的校验,开发者希望我们提示这一字符串\n editor.config.customAlert(check, 'error')\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.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 type=\"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 // 对当前用户插入的内容进行判断,插入为空,或者返回false,都停止插入\n if (!checkOnlineVideo(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 = $(\n '<div class=\"w-e-menu\" data-title=\"图片\"><i class=\"w-e-icon-image\"></i></div>'\n )\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 type=\"button\" id=\"${linkBtnId}\" class=\"right\">${t(\n '插入',\n ''\n )}</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.es/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 */\nexport function 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.es/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.es/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 */\nexport function 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\" data-title=\"缩进\">\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\" data-title=\"表情\">\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\" data-title=\"序列\">\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\" data-title=\"行高\">\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\" data-title=\"恢复\">\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\" data-title=\"撤销\">\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 = $(\n '<div class=\"w-e-menu\" data-title=\"表格\"><i class=\"w-e-icon-table2\"></i></div>'\n )\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 type=\"button\" id=\"${insertBtnId}\" class=\"right\">${t(\n '插入'\n )}</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 = $(\n '<div class=\"w-e-menu\" data-title=\"代码\"><i class=\"w-e-icon-terminal\"></i></div>'\n )\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 type=\"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 */\nexport function 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/* istanbul ignore next */\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 = $(\n '<div class=\"w-e-menu\" data-title=\"分割线\"><i class=\"w-e-icon-split-line\"></i></div>'\n )\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","import $, { DomElement } from '../../utils/dom-core'\nimport BtnMenu from '../menu-constructors/BtnMenu'\nimport Editor from '../../editor/index'\nimport { MenuActive } from '../menu-constructors/Menu'\nimport { isAllTodo } from './util'\nimport bindEvent from './bind-event'\nimport createTodo from './todo'\n\nclass Todo extends BtnMenu implements MenuActive {\n constructor(editor: Editor) {\n const $elem = $(\n `<div class=\"w-e-menu\" data-title=\"代办事项\">\n <i class=\"w-e-icon-checkbox-checked\"></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 if (!isAllTodo(editor)) {\n // 设置todolist\n this.setTodo()\n } else {\n // 取消设置todolist\n this.cancelTodo()\n this.tryChangeActive()\n }\n }\n tryChangeActive() {\n if (isAllTodo(this.editor)) {\n this.active()\n } else {\n this.unActive()\n }\n }\n\n /**\n * 设置todo\n */\n private setTodo() {\n const editor = this.editor\n const topNodeElem: DomElement[] = editor.selection.getSelectionRangeTopNodes(editor)\n topNodeElem.forEach($node => {\n const nodeName = $node?.getNodeName()\n if (nodeName === 'P') {\n const todo = createTodo($node)\n const todoNode = todo.getTodo()\n const child = todoNode.children()?.getNode() as Node\n todoNode.insertAfter($node)\n editor.selection.moveCursor(child)\n $node.remove()\n }\n })\n this.tryChangeActive()\n }\n\n /**\n * 取消设置todo\n */\n private cancelTodo() {\n const editor = this.editor\n const $topNodeElems: DomElement[] = editor.selection.getSelectionRangeTopNodes(editor)\n\n $topNodeElems.forEach($topNodeElem => {\n let content = $topNodeElem.childNodes()?.childNodes()?.clone(true) as DomElement\n const $p = $(`<p></p>`)\n $p.append(content)\n $p.insertAfter($topNodeElem)\n // 移除input\n $p.childNodes()?.get(0).remove()\n editor.selection.moveCursor($p.getNode())\n $topNodeElem.remove()\n })\n }\n}\n\nexport default Todo\n","module.exports = require(\"core-js-pure/stable/instance/every\");","var parent = require('../../es/instance/every');\n\nmodule.exports = parent;\n","var every = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.every;\n return it === ArrayPrototype || (it instanceof Array && own === ArrayPrototype.every) ? every : own;\n};\n","require('../../../modules/es.array.every');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').every;\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","import Editor from '../../../editor/index'\nimport $ from '../../../utils/dom-core'\nimport { getCursorNextNode, isAllTodo } from '../util'\nimport createTodo from '../todo'\nimport { dealTextNode, isTodo } from '../util'\n\n/**\n * todolist 内部逻辑\n * @param editor\n */\nfunction bindEvent(editor: Editor) {\n /**\n * todo的自定义回车事件\n * @param e 事件属性\n */\n function todoEnter(e: Event) {\n // 判断是否为todo节点\n if (isAllTodo(editor)) {\n e.preventDefault()\n const selection = editor.selection\n const $topSelectElem = selection.getSelectionRangeTopNodes(editor)[0]\n const $li = $topSelectElem.childNodes()?.get(0)\n const selectionNode = window.getSelection()?.anchorNode as Node\n const range = selection.getRange()\n\n if (!range?.collapsed) {\n const rangeChildNodes = range?.commonAncestorContainer.childNodes\n const startContainer = range?.startContainer as Node\n const endContainer = range?.endContainer as Node\n const startPos = range?.startOffset as number\n const endPos = range?.endOffset as number\n let startElemIndex: number = 0\n let endElemIndex: number = 0\n let delList: ChildNode[] = []\n // 找出startContainer和endContainer在rangeChildNodes中的位置\n rangeChildNodes?.forEach((v, i) => {\n if (v.contains(startContainer)) startElemIndex = i\n if (v.contains(endContainer)) endElemIndex = i\n })\n // 删除两个容器间的内容\n if (endElemIndex - startElemIndex > 1) {\n rangeChildNodes?.forEach((v, i) => {\n if (i <= startElemIndex) return\n if (i >= endElemIndex) return\n delList.push(v)\n })\n delList.forEach(v => {\n v.remove()\n })\n }\n // 删除两个容器里拖蓝的内容\n dealTextNode(startContainer, startPos)\n dealTextNode(endContainer, endPos, false)\n editor.selection.moveCursor(endContainer, 0)\n }\n\n // 回车时内容为空时,删去此行\n if ($topSelectElem.text() === '') {\n const $p = $(`<p><br></p>`)\n $p.insertAfter($topSelectElem)\n selection.moveCursor($p.getNode())\n $topSelectElem.remove()\n return\n }\n\n const pos = selection.getCursorPos() as number\n const CursorNextNode = getCursorNextNode($li?.getNode() as Node, selectionNode, pos)\n const todo = createTodo($(CursorNextNode))\n const $inputcontainer = todo.getInputContainer()\n const todoLiElem = $inputcontainer.parent().getNode()\n const $newTodo = todo.getTodo()\n const contentSection = $inputcontainer.getNode().nextSibling\n // 处理光标在最前面时回车input不显示的问题\n if ($li?.text() === '') {\n $li?.append($(`<br>`))\n }\n $newTodo.insertAfter($topSelectElem)\n // 处理在google中光标在最后面的,input不显示的问题(必须插入之后移动光标)\n if (!contentSection || contentSection?.textContent === '') {\n // 防止多个br出现的情况\n if (contentSection?.nodeName !== 'BR') {\n const $br = $(`<br>`)\n $br.insertAfter($inputcontainer)\n }\n selection.moveCursor(todoLiElem, 1)\n } else {\n selection.moveCursor(todoLiElem)\n }\n }\n }\n\n /**\n * 自定义删除事件,用来处理光标在最前面删除input产生的问题\n */\n function delDown(e: Event) {\n if (isAllTodo(editor)) {\n const selection = editor.selection\n const $topSelectElem = selection.getSelectionRangeTopNodes(editor)[0]\n const $li = $topSelectElem.childNodes()?.getNode()\n const $p = $(`<p></p>`)\n const p = $p.getNode()\n const selectionNode = window.getSelection()?.anchorNode as Node\n const pos = selection.getCursorPos()\n const prevNode = selectionNode.previousSibling\n\n // 处理内容为空的情况\n if ($topSelectElem.text() === '') {\n e.preventDefault()\n const $newP = $(`<p><br></p>`)\n $newP.insertAfter($topSelectElem)\n $topSelectElem.remove()\n selection.moveCursor($newP.getNode(), 0)\n return\n }\n\n // 处理有内容时,光标在最前面的情况\n if (\n prevNode?.nodeName === 'SPAN' &&\n prevNode.childNodes[0].nodeName === 'INPUT' &&\n pos === 0\n ) {\n e.preventDefault()\n $li?.childNodes.forEach((v, index) => {\n if (index === 0) return\n p.appendChild(v.cloneNode(true))\n })\n $p.insertAfter($topSelectElem)\n\n $topSelectElem.remove()\n }\n }\n }\n\n /**\n * 自定义删除键up事件\n */\n function deleteUp() {\n const selection = editor.selection\n const $topSelectElem = selection.getSelectionRangeTopNodes(editor)[0]\n if (isTodo($topSelectElem)) {\n if ($topSelectElem.text() === '') {\n $(`<p><br></p>`).insertAfter($topSelectElem)\n $topSelectElem.remove()\n }\n }\n }\n editor.txt.eventHooks.enterDownEvents.push(todoEnter)\n editor.txt.eventHooks.deleteUpEvents.push(deleteUp)\n editor.txt.eventHooks.deleteDownEvents.push(delDown)\n}\n\nexport default bindEvent\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 let toolbarElemId: string\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 // 当只有 toolbarSelector 时,toolbarElemId 自行创建\n toolbarElemId = getRandom('toolbar-elem')\n } else {\n // toolbarSelector 和 textSelector 都有\n $toolbarElem = $toolbarSelector\n $textContainerElem = $(textSelector)\n // 将编辑器区域原有的内容,暂存起来\n $children = $textContainerElem.children()\n // 都有时,toolbarElemId 使用用户自定义的\n toolbarElemId = $toolbarSelector.attr('id') || getRandom('toolbar-elem')\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 $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 editor.selection.createRangeByElem($last, true, true)\n if (editor.config.focus) {\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 const bar = $toolbarElem.getBoundingClientRect()\n const h = window.innerHeight - bar.height\n $textContainerElem.css('height', `${h}px`)\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\" data-title=\"全屏\">\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 */\nexport function 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 */\nexport function 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 */\nexport function 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 */\nexport function 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.es/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.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/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