{"version":3,"file":"static/js/main.0601ce25.js","mappings":"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","sources":["../node_modules/css-mediaquery/index.js","../node_modules/matchmediaquery/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/suneditor-react/dist/buttons/buttonList.js","../node_modules/suneditor-react/dist/components/SunEditor.js","../node_modules/suneditor-react/dist/data/events.js","../node_modules/suneditor-react/dist/index.js","../node_modules/suneditor-react/dist/lang/getLanguage.js","../node_modules/suneditor/src/lang/ckb.js","../node_modules/suneditor/src/lang/cs.js","../node_modules/suneditor/src/lang/da.js","../node_modules/suneditor/src/lang/de.js","../node_modules/suneditor/src/lang/en.js","../node_modules/suneditor/src/lang/es.js","../node_modules/suneditor/src/lang/fa.js","../node_modules/suneditor/src/lang/fr.js","../node_modules/suneditor/src/lang/he.js","../node_modules/suneditor/src/lang/index.js","../node_modules/suneditor/src/lang/it.js","../node_modules/suneditor/src/lang/ja.js","../node_modules/suneditor/src/lang/ko.js","../node_modules/suneditor/src/lang/lv.js","../node_modules/suneditor/src/lang/nl.js","../node_modules/suneditor/src/lang/pl.js","../node_modules/suneditor/src/lang/pt_br.js","../node_modules/suneditor/src/lang/ro.js","../node_modules/suneditor/src/lang/ru.js","../node_modules/suneditor/src/lang/se.js","../node_modules/suneditor/src/lang/tr.js","../node_modules/suneditor/src/lang/ua.js","../node_modules/suneditor/src/lang/ur.js","../node_modules/suneditor/src/lang/zh_cn.js","../node_modules/suneditor/src/plugins/command/blockquote.js","../node_modules/suneditor/src/plugins/submenu/align.js","../node_modules/suneditor/src/plugins/submenu/font.js","../node_modules/suneditor/src/plugins/submenu/fontSize.js","../node_modules/suneditor/src/plugins/modules/_colorPicker.js","../node_modules/suneditor/src/plugins/submenu/fontColor.js","../node_modules/suneditor/src/plugins/submenu/hiliteColor.js","../node_modules/suneditor/src/plugins/submenu/horizontalRule.js","../node_modules/suneditor/src/plugins/submenu/list.js","../node_modules/suneditor/src/plugins/submenu/table.js","../node_modules/suneditor/src/plugins/submenu/formatBlock.js","../node_modules/suneditor/src/plugins/submenu/lineHeight.js","../node_modules/suneditor/src/plugins/submenu/template.js","../node_modules/suneditor/src/plugins/submenu/paragraphStyle.js","../node_modules/suneditor/src/plugins/submenu/textStyle.js","../node_modules/suneditor/src/plugins/modules/_selectMenu.js","../node_modules/suneditor/src/plugins/modules/_anchor.js","../node_modules/suneditor/src/plugins/dialog/link.js","../node_modules/suneditor/src/plugins/dialog/image.js","../node_modules/suneditor/src/plugins/dialog/video.js","../node_modules/suneditor/src/plugins/dialog/audio.js","../node_modules/suneditor/src/plugins/dialog/math.js","../node_modules/suneditor/src/plugins/fileBrowser/imageGallery.js","../node_modules/suneditor/src/plugins/index.js","../node_modules/suneditor/src/plugins/modules/component.js","../node_modules/suneditor/src/plugins/modules/dialog.js","../node_modules/suneditor/src/plugins/modules/fileBrowser.js","../node_modules/suneditor/src/plugins/modules/fileManager.js","../node_modules/suneditor/src/plugins/modules/resizing.js","../node_modules/suneditor/src/assets/defaultIcons.js","../node_modules/suneditor/src/lib/util.js","../node_modules/suneditor/src/lib/constructor.js","../node_modules/suneditor/src/lib/context.js","../node_modules/suneditor/src/plugins/modules/_notice.js","../node_modules/suneditor/src/suneditor.js","../node_modules/suneditor/src/lib/core.js","../node_modules/suneditor/src/lib/history.js","../node_modules/suneditor/src/lang|/app/client/node_modules/suneditor/src/lang|sync|/^/.//.*/.js$","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","config.js","components/MainPageHero.jsx","components/TransformationCard.jsx","components/GenerativeAITransformView.jsx","components/AutoPod.js","components/TechRadarCards/InfoModal.jsx","components/TechRadarCards/IntelligentInterfacesCard.jsx","../node_modules/react-icons/lib/iconsManifest.mjs","../node_modules/react-icons/lib/iconContext.mjs","../node_modules/react-icons/lib/iconBase.mjs","../node_modules/react-icons/fa/index.mjs","components/TechRadarCards/AssistantsCopilotsCard.jsx","components/TechRadarCards/GenAiCard.jsx","components/TechRadarCards/AgenticWorkflows.jsx","components/TechRadarCards/ReferenceDataCard.jsx","components/TechRadarCards/VectorStoresCard.jsx","components/TechRadarCards/OpenWeight.jsx","components/TechRadarCards/CustomModels.jsx","components/TechRadarCards/ProprietoryModels.jsx","components/TechRadarCards/ProprietaryData.jsx","components/TechRadar.jsx","components/TechRadarCards/Mobile/IIMobileCard.jsx","components/TechRadarCards/Mobile/ACMobileCard.jsx","components/TechRadarCards/Mobile/GenAIMobile.jsx","components/TechRadarCards/Mobile/AgentWMobile.jsx","components/TechRadarCards/Mobile/RefDataMobile.jsx","components/TechRadarCards/Mobile/OWMobile.jsx","components/TechRadarCards/Mobile/PMMobile.jsx","components/TechRadarCards/Mobile/CMMobile.jsx","components/TechRadarCards/Mobile/VSCardMobile.jsx","components/TechRadarCards/Mobile/PDMobileCard.jsx","components/TechRadarResponsive.jsx","components/Home/MediaCard.jsx","../node_modules/framer-motion/dist/es/context/PresenceContext.mjs","../node_modules/framer-motion/dist/es/utils/use-constant.mjs","../node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs","../node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/utils/noop.mjs","../node_modules/framer-motion/dist/es/utils/errors.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs","../node_modules/framer-motion/dist/es/utils/is-browser.mjs","../node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs","../node_modules/framer-motion/dist/es/render/components/create-proxy.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","../node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","../node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","../node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","../node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","../node_modules/framer-motion/dist/es/render/html/utils/transform.mjs","../node_modules/framer-motion/dist/es/utils/time-conversion.mjs","../node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","../node_modules/framer-motion/dist/es/animation/utils/get-value-transition.mjs","../node_modules/framer-motion/dist/es/utils/GlobalConfig.mjs","../node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","../node_modules/framer-motion/dist/es/frameloop/batcher.mjs","../node_modules/framer-motion/dist/es/frameloop/render-step.mjs","../node_modules/framer-motion/dist/es/frameloop/frame.mjs","../node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","../node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","../node_modules/framer-motion/dist/es/easing/back.mjs","../node_modules/framer-motion/dist/es/easing/anticipate.mjs","../node_modules/framer-motion/dist/es/easing/circ.mjs","../node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","../node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","../node_modules/framer-motion/dist/es/utils/clamp.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","../node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","../node_modules/framer-motion/dist/es/render/utils/KeyframesResolver.mjs","../node_modules/framer-motion/dist/es/value/types/utils/sanitize.mjs","../node_modules/framer-motion/dist/es/value/types/utils/float-regex.mjs","../node_modules/framer-motion/dist/es/value/types/utils/single-color-regex.mjs","../node_modules/framer-motion/dist/es/value/types/color/utils.mjs","../node_modules/framer-motion/dist/es/value/types/utils/is-nullish.mjs","../node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","../node_modules/framer-motion/dist/es/value/types/color/hex.mjs","../node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","../node_modules/framer-motion/dist/es/value/types/color/index.mjs","../node_modules/framer-motion/dist/es/value/types/utils/color-regex.mjs","../node_modules/framer-motion/dist/es/value/types/complex/index.mjs","../node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number-browser.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/transform.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","../node_modules/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/is-generator.mjs","../node_modules/framer-motion/dist/es/frameloop/sync-time.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/can-animate.mjs","../node_modules/framer-motion/dist/es/animation/animators/BaseAnimation.mjs","../node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","../node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","../node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","../node_modules/framer-motion/dist/es/easing/ease.mjs","../node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs","../node_modules/framer-motion/dist/es/easing/utils/map.mjs","../node_modules/framer-motion/dist/es/utils/pipe.mjs","../node_modules/framer-motion/dist/es/utils/progress.mjs","../node_modules/framer-motion/dist/es/utils/mix/number.mjs","../node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","../node_modules/framer-motion/dist/es/utils/mix/immediate.mjs","../node_modules/framer-motion/dist/es/utils/mix/color.mjs","../node_modules/framer-motion/dist/es/utils/mix/visibility.mjs","../node_modules/framer-motion/dist/es/utils/mix/complex.mjs","../node_modules/framer-motion/dist/es/utils/mix/index.mjs","../node_modules/framer-motion/dist/es/utils/interpolate.mjs","../node_modules/framer-motion/dist/es/utils/offsets/default.mjs","../node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","../node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","../node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","../node_modules/framer-motion/dist/es/utils/offsets/time.mjs","../node_modules/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs","../node_modules/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs","../node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs","../node_modules/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/linear.mjs","../node_modules/framer-motion/dist/es/utils/memo.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/supports-flags.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/memo-supports.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/supports-linear-easing.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/easing.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/attach-timeline.mjs","../node_modules/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs","../node_modules/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs","../node_modules/framer-motion/dist/es/render/dom/scroll/supports.mjs","../node_modules/framer-motion/dist/es/animation/GroupPlaybackControls.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","../node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs","../node_modules/framer-motion/dist/es/utils/resolve-value.mjs","../node_modules/framer-motion/dist/es/utils/array.mjs","../node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","../node_modules/framer-motion/dist/es/value/index.mjs","../node_modules/framer-motion/dist/es/render/utils/setters.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","../node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs","../node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/add-will-change.mjs","../node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","../node_modules/framer-motion/dist/es/render/utils/get-variant-context.mjs","../node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","../node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","../node_modules/framer-motion/dist/es/motion/features/Feature.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","../node_modules/framer-motion/dist/es/motion/features/animations.mjs","../node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","../node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.mjs","../node_modules/framer-motion/dist/es/events/event-info.mjs","../node_modules/framer-motion/dist/es/events/add-dom-event.mjs","../node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","../node_modules/framer-motion/dist/es/utils/distance.mjs","../node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/lock.mjs","../node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","../node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","../node_modules/framer-motion/dist/es/projection/geometry/models.mjs","../node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","../node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","../node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","../node_modules/framer-motion/dist/es/projection/utils/measure.mjs","../node_modules/framer-motion/dist/es/utils/get-context-window.mjs","../node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","../node_modules/framer-motion/dist/es/gestures/pan/index.mjs","../node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","../node_modules/framer-motion/dist/es/projection/node/state.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","../node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","../node_modules/framer-motion/dist/es/frameloop/microtask.mjs","../node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","../node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","../node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","../node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","../node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","../node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","../node_modules/framer-motion/dist/es/projection/shared/stack.mjs","../node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","../node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","../node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","../node_modules/framer-motion/dist/es/utils/delay.mjs","../node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","../node_modules/framer-motion/dist/es/animation/animate/single-value.mjs","../node_modules/framer-motion/dist/es/projection/styles/transform.mjs","../node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","../node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","../node_modules/framer-motion/dist/es/motion/features/drag.mjs","../node_modules/framer-motion/dist/es/gestures/drag/index.mjs","../node_modules/framer-motion/dist/es/gestures/hover.mjs","../node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs","../node_modules/framer-motion/dist/es/gestures/press.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","../node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","../node_modules/framer-motion/dist/es/motion/features/gestures.mjs","../node_modules/framer-motion/dist/es/gestures/focus.mjs","../node_modules/framer-motion/dist/es/motion/features/layout.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","../node_modules/framer-motion/dist/es/context/LazyContext.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","../node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","../node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","../node_modules/framer-motion/dist/es/motion/features/definitions.mjs","../node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","../node_modules/framer-motion/dist/es/motion/index.mjs","../node_modules/framer-motion/dist/es/motion/features/load-features.mjs","../node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","../node_modules/framer-motion/dist/es/render/html/utils/render.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","../node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","../node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","../node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","../node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","../node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","../node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","../node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","../node_modules/framer-motion/dist/es/render/html/config-motion.mjs","../node_modules/framer-motion/dist/es/render/html/use-props.mjs","../node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","../node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","../node_modules/framer-motion/dist/es/render/svg/use-props.mjs","../node_modules/framer-motion/dist/es/render/dom/use-render.mjs","../node_modules/framer-motion/dist/es/render/components/create-factory.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","../node_modules/framer-motion/dist/es/render/store.mjs","../node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","../node_modules/framer-motion/dist/es/render/VisualElement.mjs","../node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","../node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","../node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","../node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","../node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","../node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs","../node_modules/framer-motion/dist/es/render/components/motion/create.mjs","components/Home/HomeCarousel.jsx","components/Home/DemoSection.jsx","components/Home/LatestInsights.jsx","pages/Home.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","components/NavItem.jsx","components/Header.jsx","components/Mobile/MobileHeader.js","components/HeaderComponent.jsx","components/Blogs/ArticleHeader.jsx","components/Blogs/Mobile/MobileArticleHeader.jsx","../node_modules/react-icons/fa6/index.mjs","components/Blogs/AuthorCard.jsx","components/Blogs/ArticleContent.jsx","components/Blogs/Mobile/MobileArticleContent.jsx","pages/Blogs/ArticlePage.js","pages/Blogs/BlogViewPage.js","components/Loader.js","components/Blogs/AddAuthorModal.jsx","components/Blogs/AuthorInfoModal.jsx","pages/Blogs/BlogAddPage.js","components/BlogListing/BlogListingHero.jsx","../node_modules/hyphenate-style-name/index.js","../node_modules/shallow-equal/src/objects.ts","../node_modules/react-responsive/src/mediaQuery.ts","../node_modules/react-responsive/src/toQuery.ts","../node_modules/react-responsive/src/Context.ts","../node_modules/react-responsive/src/useMediaQuery.ts","components/BlogListing/UpdateCardResponsive.jsx","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/swiper-react.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","components/BlogListing/LatestUpdatesMobile.jsx","components/BlogListing/LatestUpdatesTab.jsx","components/BlogListing/UpdateCard.jsx","components/BlogListing/LatestUpdates.jsx","components/BlogListing/LatestUpdatesResponsive.jsx","components/BlogListing/ShowcaseMobile.jsx","components/BlogListing/ShowcaseTab.jsx","components/BlogListing/Showcase.jsx","components/BlogListing/ShowcaseResponsive.jsx","components/BlogListing/BlogSection.jsx","components/BlogListing/SubscriptionForm.jsx","components/BlogListing/NewsLetter.jsx","pages/BlogListing.js","pages/Blogs/BlogEditPage.js","pages/Blogs/BlogDashboard.js","components/Careers/CareersHero.jsx","components/Careers/CareersIntro.jsx","components/Careers/LifeAtThink41.jsx","components/Careers/Facilities.jsx","components/Careers/Boot41.jsx","components/Careers/CareersCarousel.jsx","components/Careers/Testimonials.jsx","components/Careers/OpenPositions.jsx","pages/CareersPage.js","pages/Blogs/BlogPreviewPage.js","components/Demos/HeroSection.jsx","components/Demos/DemoPopup.jsx","components/Demos/FeatureCard.jsx","components/Demos/FeatureSection.jsx","components/Demos/Mobile/MobileFeatureCard.jsx","components/Demos/Mobile/MobileFeatureSection.jsx","components/Demos/CallToAction.jsx","data/featuresData.js","pages/Demos/DemoPage.js","components/Footer/QuickLinks.jsx","components/Footer/ContactInfo.jsx","components/Footer/SocialLinks.jsx","components/Footer/MapComponent.jsx","components/Footer/Footer.jsx","ProtectedRoute.js","components/ContactUs/ContactUsMobile.jsx","components/ContactUs/ContactUs.jsx","pages/ContactUsPage.js","components/AboutUs/AboutUsHero.jsx","components/AboutUs/AboutUsIntro.jsx","components/AboutUs/FoundersCard.jsx","components/AboutUs/FoundersData.js","components/AboutUs/FoundersSection.jsx","pages/AboutUs.js","App.js","reportWebVitals.js","index.js"],"sourcesContent":["/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n'use strict';\n\nexports.match = matchQuery;\nexports.parse = parseQuery;\n\n// -----------------------------------------------------------------------------\n\nvar RE_MEDIA_QUERY = /(?:(only|not)?\\s*([^\\s\\(\\)]+)(?:\\s*and)?\\s*)?(.+)?/i,\n RE_MQ_EXPRESSION = /\\(\\s*([^\\s\\:\\)]+)\\s*(?:\\:\\s*([^\\s\\)]+))?\\s*\\)/,\n RE_MQ_FEATURE = /^(?:(min|max)-)?(.+)/,\n RE_LENGTH_UNIT = /(em|rem|px|cm|mm|in|pt|pc)?$/,\n RE_RESOLUTION_UNIT = /(dpi|dpcm|dppx)?$/;\n\nfunction matchQuery(mediaQuery, values) {\n return parseQuery(mediaQuery).some(function (query) {\n var inverse = query.inverse;\n\n // Either the parsed or specified `type` is \"all\", or the types must be\n // equal for a match.\n var typeMatch = query.type === 'all' || values.type === query.type;\n\n // Quit early when `type` doesn't match, but take \"not\" into account.\n if ((typeMatch && inverse) || !(typeMatch || inverse)) {\n return false;\n }\n\n var expressionsMatch = query.expressions.every(function (expression) {\n var feature = expression.feature,\n modifier = expression.modifier,\n expValue = expression.value,\n value = values[feature];\n\n // Missing or falsy values don't match.\n if (!value) { return false; }\n\n switch (feature) {\n case 'orientation':\n case 'scan':\n return value.toLowerCase() === expValue.toLowerCase();\n\n case 'width':\n case 'height':\n case 'device-width':\n case 'device-height':\n expValue = toPx(expValue);\n value = toPx(value);\n break;\n\n case 'resolution':\n expValue = toDpi(expValue);\n value = toDpi(value);\n break;\n\n case 'aspect-ratio':\n case 'device-aspect-ratio':\n case /* Deprecated */ 'device-pixel-ratio':\n expValue = toDecimal(expValue);\n value = toDecimal(value);\n break;\n\n case 'grid':\n case 'color':\n case 'color-index':\n case 'monochrome':\n expValue = parseInt(expValue, 10) || 1;\n value = parseInt(value, 10) || 0;\n break;\n }\n\n switch (modifier) {\n case 'min': return value >= expValue;\n case 'max': return value <= expValue;\n default : return value === expValue;\n }\n });\n\n return (expressionsMatch && !inverse) || (!expressionsMatch && inverse);\n });\n}\n\nfunction parseQuery(mediaQuery) {\n return mediaQuery.split(',').map(function (query) {\n query = query.trim();\n\n var captures = query.match(RE_MEDIA_QUERY),\n modifier = captures[1],\n type = captures[2],\n expressions = captures[3] || '',\n parsed = {};\n\n parsed.inverse = !!modifier && modifier.toLowerCase() === 'not';\n parsed.type = type ? type.toLowerCase() : 'all';\n\n // Split expressions into a list.\n expressions = expressions.match(/\\([^\\)]+\\)/g) || [];\n\n parsed.expressions = expressions.map(function (expression) {\n var captures = expression.match(RE_MQ_EXPRESSION),\n feature = captures[1].toLowerCase().match(RE_MQ_FEATURE);\n\n return {\n modifier: feature[1],\n feature : feature[2],\n value : captures[2]\n };\n });\n\n return parsed;\n });\n}\n\n// -- Utilities ----------------------------------------------------------------\n\nfunction toDecimal(ratio) {\n var decimal = Number(ratio),\n numbers;\n\n if (!decimal) {\n numbers = ratio.match(/^(\\d+)\\s*\\/\\s*(\\d+)$/);\n decimal = numbers[1] / numbers[2];\n }\n\n return decimal;\n}\n\nfunction toDpi(resolution) {\n var value = parseFloat(resolution),\n units = String(resolution).match(RE_RESOLUTION_UNIT)[1];\n\n switch (units) {\n case 'dpcm': return value / 2.54;\n case 'dppx': return value * 96;\n default : return value;\n }\n}\n\nfunction toPx(length) {\n var value = parseFloat(length),\n units = String(length).match(RE_LENGTH_UNIT)[1];\n\n switch (units) {\n case 'em' : return value * 16;\n case 'rem': return value * 16;\n case 'cm' : return value * 96 / 2.54;\n case 'mm' : return value * 96 / 2.54 / 10;\n case 'in' : return value * 96;\n case 'pt' : return value * 72;\n case 'pc' : return value * 72 / 12;\n default : return value;\n }\n}\n","'use strict';\n\nvar staticMatch = require('css-mediaquery').match;\nvar dynamicMatch = typeof window !== 'undefined' ? window.matchMedia : null;\n\n// our fake MediaQueryList\nfunction Mql(query, values, forceStatic){\n var self = this;\n var mql;\n\n // matchMedia will return null in FF when it's called in a hidden iframe\n // ref: https://stackoverflow.com/a/12330568\n if(dynamicMatch && !forceStatic) mql = dynamicMatch.call(window, query);\n\n if (mql) {\n this.matches = mql.matches;\n this.media = mql.media;\n // TODO: is there a time it makes sense to remove this listener?\n mql.addListener(update);\n } else {\n this.matches = staticMatch(query, values);\n this.media = query;\n }\n\n this.addListener = addListener;\n this.removeListener = removeListener;\n this.dispose = dispose;\n\n function addListener(listener){\n if(mql){\n mql.addListener(listener);\n }\n }\n\n function removeListener(listener){\n if(mql){\n mql.removeListener(listener);\n }\n }\n\n // update ourselves!\n function update(evt){\n self.matches = evt.matches;\n self.media = evt.media;\n }\n\n function dispose(){\n if(mql){\n mql.removeListener(update);\n }\n }\n}\n\nfunction matchMedia(query, values, forceStatic){\n return new Mql(query, values, forceStatic);\n}\n\nmodule.exports = matchMedia;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatting = exports.complex = exports.basic = void 0;\nexports.basic = [\n [\"font\", \"fontSize\"],\n [\"fontColor\"],\n [\"horizontalRule\"],\n [\"link\", \"image\"],\n];\nexports.complex = [\n [\"undo\", \"redo\"],\n [\"font\", \"fontSize\", \"formatBlock\"],\n [\"bold\", \"underline\", \"italic\", \"strike\", \"subscript\", \"superscript\"],\n [\"removeFormat\"],\n \"/\",\n [\"fontColor\", \"hiliteColor\"],\n [\"outdent\", \"indent\"],\n [\"align\", \"horizontalRule\", \"list\", \"table\"],\n [\"link\", \"image\", \"video\"],\n [\"fullScreen\", \"showBlocks\", \"codeView\"],\n [\"preview\", \"print\"],\n [\"save\", \"template\"],\n];\nexports.formatting = [\n [\"undo\", \"redo\"],\n [\"bold\", \"underline\", \"italic\", \"strike\", \"subscript\", \"superscript\"],\n [\"removeFormat\"],\n [\"outdent\", \"indent\"],\n [\"fullScreen\", \"showBlocks\", \"codeView\"],\n [\"preview\", \"print\"],\n];\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = __importStar(require(\"react\"));\nvar plugins_1 = __importDefault(require(\"suneditor/src/plugins\"));\nvar suneditor_1 = __importDefault(require(\"suneditor\"));\nvar getLanguage_1 = __importDefault(require(\"../lang/getLanguage\"));\nvar events_1 = require(\"../data/events\");\nvar SunEditor = function (props) {\n var name = props.name, lang = props.lang, _a = props.setOptions, setOptions = _a === void 0 ? {} : _a, placeholder = props.placeholder, _b = props.width, width = _b === void 0 ? \"100%\" : _b, height = props.height, defaultValue = props.defaultValue, setContents = props.setContents, setDefaultStyle = props.setDefaultStyle, getSunEditorInstance = props.getSunEditorInstance, appendContents = props.appendContents, _c = props.setAllPlugins, setAllPlugins = _c === void 0 ? true : _c, _d = props.disable, disable = _d === void 0 ? false : _d, _e = props.readOnly, readOnly = _e === void 0 ? false : _e, _f = props.hide, hide = _f === void 0 ? false : _f, _g = props.hideToolbar, hideToolbar = _g === void 0 ? false : _g, _h = props.disableToolbar, disableToolbar = _h === void 0 ? false : _h, onChange = props.onChange, autoFocus = props.autoFocus, onBlur = props.onBlur, onLoad = props.onLoad;\n var txtArea = (0, react_1.useRef)(null);\n var editor = (0, react_1.useRef)(null);\n var initialEffect = (0, react_1.useRef)(true);\n (0, react_1.useEffect)(function () {\n var _a;\n var options = __assign(__assign({}, setOptions), { lang: lang ? (0, getLanguage_1.default)(lang) : setOptions.lang, width: width !== null && width !== void 0 ? width : setOptions.width, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : setOptions.placeholder, plugins: (_a = setOptions.plugins) !== null && _a !== void 0 ? _a : (setAllPlugins ? plugins_1.default : undefined), height: height !== null && height !== void 0 ? height : setOptions.height, value: defaultValue !== null && defaultValue !== void 0 ? defaultValue : setOptions.value, defaultStyle: setDefaultStyle !== null && setDefaultStyle !== void 0 ? setDefaultStyle : setOptions.defaultStyle });\n if (name && options.value)\n txtArea.current.value = options.value;\n editor.current = suneditor_1.default.create(txtArea.current, options);\n if (getSunEditorInstance)\n getSunEditorInstance(editor.current);\n editor.current.onload = function (_, reload) {\n if (reload)\n return onLoad === null || onLoad === void 0 ? void 0 : onLoad(reload);\n if (setContents) {\n editor.current.setContents(setContents);\n editor.current.core.focusEdge(null);\n }\n if (appendContents)\n editor.current.appendContents(appendContents);\n if (editor.current.util.isIE)\n editor.current.core._createDefaultRange();\n if (disable)\n editor.current.disable();\n if (readOnly)\n editor.current.readOnly(true);\n if (hide)\n editor.current.hide();\n if (hideToolbar)\n editor.current.toolbar.hide();\n if (disableToolbar)\n editor.current.toolbar.disable();\n if (autoFocus === false)\n editor.current.core.context.element.wysiwyg.blur();\n else if (autoFocus)\n editor.current.core.context.element.wysiwyg.focus();\n return onLoad === null || onLoad === void 0 ? void 0 : onLoad(reload);\n };\n editor.current.onChange = function (content) {\n if (name && txtArea.current)\n txtArea.current.value = content;\n if (onChange)\n onChange(content);\n };\n if (onBlur) {\n editor.current.onBlur = function (e) {\n return onBlur(e, editor.current.getContents(true));\n };\n }\n events_1.uploadBeforeEvents.forEach(function (event) {\n var value = props[event];\n if (editor.current && value)\n editor.current[event] = function (files, info, _, uploadHandler) { return value(files, info, uploadHandler); };\n });\n events_1.events.forEach(function (event) {\n var value = props[event];\n if (value && editor.current) {\n editor.current[event] = value;\n }\n });\n return function () {\n if (editor.current)\n editor.current.destroy();\n editor.current = null;\n };\n }, []);\n (0, react_1.useEffect)(function () {\n var _a;\n if (initialEffect.current)\n return;\n (_a = editor.current) === null || _a === void 0 ? void 0 : _a.setOptions({\n lang: (0, getLanguage_1.default)(lang),\n });\n }, [lang]);\n (0, react_1.useEffect)(function () {\n var _a;\n if (initialEffect.current)\n return;\n (_a = editor.current) === null || _a === void 0 ? void 0 : _a.setOptions({\n placeholder: placeholder,\n height: height,\n width: width,\n });\n }, [placeholder, height, width]);\n (0, react_1.useEffect)(function () {\n var _a;\n if (setDefaultStyle && !initialEffect.current)\n (_a = editor.current) === null || _a === void 0 ? void 0 : _a.setDefaultStyle(setDefaultStyle);\n }, [setDefaultStyle]);\n (0, react_1.useEffect)(function () {\n var _a, _b;\n if (!initialEffect.current &&\n setContents !== undefined &&\n !((_a = editor.current) === null || _a === void 0 ? void 0 : _a.core.hasFocus)) {\n (_b = editor.current) === null || _b === void 0 ? void 0 : _b.setContents(setContents);\n }\n }, [setContents]);\n (0, react_1.useEffect)(function () {\n var _a, _b, _c;\n if (!initialEffect.current &&\n appendContents !== undefined &&\n !((_a = editor.current) === null || _a === void 0 ? void 0 : _a.core.hasFocus)) {\n (_b = editor.current) === null || _b === void 0 ? void 0 : _b.appendContents(appendContents);\n (_c = editor.current) === null || _c === void 0 ? void 0 : _c.core.focusEdge(null);\n }\n }, [appendContents]);\n (0, react_1.useEffect)(function () {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (initialEffect.current)\n return;\n (_a = editor.current) === null || _a === void 0 ? void 0 : _a.readOnly(readOnly);\n if (hideToolbar)\n (_b = editor.current) === null || _b === void 0 ? void 0 : _b.toolbar.hide();\n else\n (_c = editor.current) === null || _c === void 0 ? void 0 : _c.toolbar.show();\n if (disableToolbar)\n (_d = editor.current) === null || _d === void 0 ? void 0 : _d.toolbar.disable();\n else\n (_e = editor.current) === null || _e === void 0 ? void 0 : _e.toolbar.enable();\n if (disable)\n (_f = editor.current) === null || _f === void 0 ? void 0 : _f.disable();\n else\n (_g = editor.current) === null || _g === void 0 ? void 0 : _g.enable();\n if (hide)\n (_h = editor.current) === null || _h === void 0 ? void 0 : _h.hide();\n else\n (_j = editor.current) === null || _j === void 0 ? void 0 : _j.show();\n }, [disable, hideToolbar, disableToolbar, hide, readOnly]);\n (0, react_1.useEffect)(function () {\n initialEffect.current = false;\n }, []);\n return (react_1.default.createElement(\"textarea\", __assign({ style: { visibility: \"hidden\" }, ref: txtArea }, { name: name })));\n};\nexports.default = SunEditor;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uploadBeforeEvents = exports.events = void 0;\nexports.events = [\n \"onMouseDown\",\n \"onScroll\",\n \"onInput\",\n \"onClick\",\n \"onKeyUp\",\n \"onKeyDown\",\n \"onFocus\",\n \"onImageUpload\",\n \"onAudioUpload\",\n \"onVideoUpload\",\n \"onImageUploadError\",\n \"onVideoUploadError\",\n \"onAudioUploadError\",\n \"onSave\",\n \"onSetToolbarButtons\",\n \"imageUploadHandler\",\n \"toggleCodeView\",\n \"toggleFullScreen\",\n \"showInline\",\n \"showController\",\n \"onCopy\",\n \"onCut\",\n \"onDrop\",\n \"onPaste\",\n];\nexports.uploadBeforeEvents = [\n \"onImageUploadBefore\",\n \"onVideoUploadBefore\",\n \"onAudioUploadBefore\",\n];\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.buttonList = void 0;\nvar SunEditor_1 = __importDefault(require(\"./components/SunEditor\"));\nexports.buttonList = __importStar(require(\"./buttons/buttonList\"));\nexports.default = SunEditor_1.default;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar getLanguage = function (lang) {\n switch (typeof lang) {\n case \"object\":\n return lang;\n case \"string\":\n return require(\"suneditor/src/lang/\".concat(lang, \".js\"));\n default:\n return undefined;\n }\n};\nexports.default = getLanguage;\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'ckb',\n toolbar: {\n default: 'بنه‌ڕه‌ت',\n save: 'پاشه‌كه‌وتكردن',\n font: 'فۆنت',\n formats: 'Formats',\n fontSize: 'قه‌باره‌',\n bold: 'تۆخكردن',\n underline: 'هێڵ به‌ژێردا بێنه‌',\n italic: 'لار',\n strike: 'هێڵ به‌ناودا بێنه‌',\n subscript: 'ژێرسکریپت',\n superscript: 'سەرنووس',\n removeFormat: 'لابردنی فۆرمات',\n fontColor: 'ره‌نگی فۆنت',\n hiliteColor: 'ره‌نگی دیاركراو',\n indent: 'بۆشایی بەجێهێشتن',\n outdent: 'لابردنی بۆشایی',\n align: 'ئاراسته‌',\n alignLeft: 'لای چه‌پ',\n alignRight: 'لای راست',\n alignCenter: 'ناوه‌ند',\n alignJustify: 'به‌رێكی دابه‌ش بكه‌',\n list: 'لیست',\n orderList: 'لیستی ریزكراو',\n unorderList: 'لیستی ریزنه‌كراو',\n horizontalRule: 'هێڵی ئاسۆیی',\n hr_solid: 'پته‌و',\n hr_dotted: 'نوكته‌ نوكته‌',\n hr_dashed: 'داش داش',\n table: 'خشته‌',\n link: 'به‌سته‌ر',\n math: 'بیركاری',\n image: 'وێنه‌',\n video: 'ڤیدیۆ',\n audio: 'ده‌نگ',\n fullScreen: 'پڕ به‌ شاشه‌',\n showBlocks: 'بڵۆك نیشانبده',\n codeView: 'بینینی كۆده‌كان',\n undo: 'وەک خۆی لێ بکەوە',\n redo: 'هەڵگەڕاندنەوە',\n preview: 'پێشبینین',\n print: 'پرینت',\n tag_p: 'په‌ره‌گراف',\n tag_div: 'ی ئاسایی (DIV)',\n tag_h: 'سەرپەڕە',\n tag_blockquote: 'ده‌ق',\n tag_pre: 'كۆد',\n template: 'قاڵب',\n lineHeight: 'بڵندی دێر',\n paragraphStyle: 'ستایلی په‌ره‌گراف',\n textStyle: 'ستایلی نوسین',\n imageGallery: 'گاله‌ری وێنه‌كان',\n dir_ltr: 'من اليسار إلى اليمين',\n dir_rtl: 'من اليمين الى اليسار',\n mention: 'تنويه ب'\n },\n dialogBox: {\n linkBox: {\n title: 'به‌سته‌ر دابنێ',\n url: 'به‌سته‌ر',\n text: 'تێكستی به‌سته‌ر',\n newWindowCheck: 'له‌ په‌نجه‌ره‌یه‌كی نوێ بكه‌ره‌وه‌',\n downloadLinkCheck: 'رابط التحميل',\n bookmark: 'المرجعية'\n },\n mathBox: {\n title: 'بیركاری',\n inputLabel: 'نیشانه‌كانی بیركاری',\n fontSizeLabel: 'قه‌باره‌ی فۆنت',\n previewLabel: 'پێشبینین'\n },\n imageBox: {\n title: 'وێنه‌یه‌ك دابنێ',\n file: 'فایلێك هه‌ڵبژێره‌',\n url: 'به‌سته‌ری وێنه‌',\n altText: 'نوسینی جێگره‌وه‌'\n },\n videoBox: {\n title: 'ڤیدیۆیه‌ك دابنێ',\n file: 'فایلێك هه‌ڵبژێره‌',\n url: 'YouTube/Vimeo به‌سته‌ری له‌ناودانان وه‌ك '\n },\n audioBox: {\n title: 'ده‌نگێك دابنێ',\n file: 'فایلێك هه‌ڵبژێره‌',\n url: 'به‌سته‌ری ده‌نگ'\n },\n browser: {\n tags: 'تاگه‌كان',\n search: 'گه‌ران',\n },\n caption: 'پێناسه‌یه‌ك دابنێ',\n close: 'داخستن',\n submitButton: 'ناردن',\n revertButton: 'بیگەڕێنەوە سەر باری سەرەتایی',\n proportion: 'رێژه‌كان وه‌ك خۆی بهێڵه‌وه‌',\n basic: 'سه‌ره‌تایی',\n left: 'چه‌پ',\n right: 'راست',\n center: 'ناوەڕاست',\n width: 'پانی',\n height: 'به‌رزی',\n size: 'قه‌باره‌',\n ratio: 'رێژه‌'\n },\n controller: {\n edit: 'دەسکاریکردن',\n unlink: 'سڕینەوەی بەستەر',\n remove: 'سڕینه‌وه‌',\n insertRowAbove: 'ریزك له‌ سه‌ره‌وه‌ زیادبكه‌',\n insertRowBelow: 'ریزێك له‌ خواره‌وه‌ زیادبكه‌',\n deleteRow: 'ریز بسره‌وه‌',\n insertColumnBefore: 'ستونێك له‌ پێشه‌وه‌ زیادبكه‌',\n insertColumnAfter: 'ستونێك له‌ دواوه‌ زیادبكه‌',\n deleteColumn: 'ستونێك بسره‌وه‌',\n fixedColumnWidth: 'پانی ستون نه‌گۆربكه‌',\n resize100: 'قه‌باره‌ بگۆره‌ بۆ ١٠٠%',\n resize75: 'قه‌باره‌ بگۆره‌ بۆ ٧٥%',\n resize50: 'قه‌باره‌ بگۆره‌ بۆ ٥٠%',\n resize25: 'قه‌باره‌ بگۆره‌ بۆ ٢٥%',\n autoSize: 'قه‌باره‌ی خۆكارانه‌',\n mirrorHorizontal: 'هه‌ڵگه‌رێنه‌وه‌ به‌ده‌وری ته‌وه‌ره‌ی ئاسۆیی',\n mirrorVertical: 'هه‌ڵگه‌رێنه‌وه‌ به‌ده‌وری ته‌وه‌ره‌ی ستونی',\n rotateLeft: 'بسوڕێنه‌ به‌لای چه‌پدا',\n rotateRight: 'بسورێنه‌ به‌لای راستدا',\n maxSize: 'گه‌وره‌ترین قه‌باره‌',\n minSize: 'بچوكترین قه‌باره‌',\n tableHeader: 'سه‌ردێری خشته‌ك',\n mergeCells: 'خانه‌كان تێكه‌ڵبكه‌',\n splitCells: 'خانه‌كان لێك جیابكه‌وه‌',\n HorizontalSplit: 'جیاكردنه‌وه‌ی ئاسۆیی',\n VerticalSplit: 'جیاكردنه‌وه‌ی ستونی'\n },\n menu: {\n spaced: 'بۆشای هه‌بێت',\n bordered: 'لێواری هه‌بێت',\n neon: 'نیۆن',\n translucent: 'كه‌مێك وه‌ك شووشه‌',\n shadow: 'سێبه‌ر',\n code: 'كۆد'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'ckb', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'cs',\n toolbar: {\n default: 'Výchozí',\n save: 'Uložit',\n font: 'Písmo',\n formats: 'Formáty',\n fontSize: 'Velikost',\n bold: 'Tučné',\n underline: 'Podtržení',\n italic: 'Kurzíva',\n strike: 'Přeškrtnutí',\n subscript: 'Dolní index',\n superscript: 'Horní index',\n removeFormat: 'Odebrat formát',\n fontColor: 'Barva písma',\n hiliteColor: 'Barva zvýraznění',\n indent: 'Odsadit',\n outdent: 'Předsadit',\n align: 'Zarovnat',\n alignLeft: 'Zarovnat vlevo',\n alignRight: 'Zarovnat vpravo',\n alignCenter: 'Zarovnat na střed',\n alignJustify: 'Zarovnat do bloku',\n list: 'Seznam',\n orderList: 'Seřazený seznam',\n unorderList: 'Neřazený seznam',\n horizontalRule: 'Vodorovná čára',\n hr_solid: 'Nepřerušovaná',\n hr_dotted: 'Tečkovaná',\n hr_dashed: 'Čárkovaná',\n table: 'Tabulka',\n link: 'Odkaz',\n math: 'Matematika',\n image: 'Obrázek',\n video: 'Video',\n audio: 'Zvuk',\n fullScreen: 'Celá obrazovka',\n showBlocks: 'Zobrazit bloky',\n codeView: 'Zobrazení kódu',\n undo: 'Zpět',\n redo: 'Opakovat',\n preview: 'Náhled',\n print: 'tisk',\n tag_p: 'Odstavec',\n tag_div: 'Normální (DIV)',\n tag_h: 'Záhlaví',\n tag_blockquote: 'Citovat',\n tag_pre: 'Kód',\n template: 'Šablona',\n lineHeight: 'Výška řádku',\n paragraphStyle: 'Styl odstavce',\n textStyle: 'Styl textu',\n imageGallery: 'Obrázková galerie',\n dir_ltr: 'Zleva doprava',\n dir_rtl: 'Zprava doleva',\n mention: 'Zmínka'\n },\n dialogBox: {\n linkBox: {\n title: 'Vložit odkaz',\n url: 'URL pro odkaz',\n text: 'Text k zobrazení',\n newWindowCheck: 'Otevřít v novém okně',\n downloadLinkCheck: 'Odkaz ke stažení',\n bookmark: 'Záložka'\n },\n mathBox: {\n title: 'Matematika',\n inputLabel: 'Matematická notace',\n fontSizeLabel: 'Velikost písma',\n previewLabel: 'Náhled'\n },\n imageBox: {\n title: 'Vložit obrázek',\n file: 'Vybrat ze souborů',\n url: 'URL obrázku',\n altText: 'Alternativní text'\n },\n videoBox: {\n title: 'Vložit video',\n file: 'Vybrat ze souborů',\n url: 'URL pro vložení médií, YouTube/Vimeo'\n },\n audioBox: {\n title: 'Vložit zvuk',\n file: 'Vybrat ze souborů',\n url: 'Adresa URL zvuku'\n },\n browser: {\n tags: 'Štítky',\n search: 'Hledat',\n },\n caption: 'Vložit popis',\n close: 'Zavřít',\n submitButton: 'Odeslat',\n revertButton: 'Vrátit zpět',\n proportion: 'Omezení proporcí',\n basic: 'Základní',\n left: 'Vlevo',\n right: 'Vpravo',\n center: 'Střed',\n width: 'Šířka',\n height: 'Výška',\n size: 'Velikost',\n ratio: 'Poměr'\n },\n controller: {\n edit: 'Upravit',\n unlink: 'Odpojit',\n remove: 'Odebrat',\n insertRowAbove: 'Vložit řádek výše',\n insertRowBelow: 'Vložit řádek níže',\n deleteRow: 'Smazat řádek',\n insertColumnBefore: 'Vložit sloupec před',\n insertColumnAfter: 'Vložit sloupec za',\n deleteColumn: 'Smazat sloupec',\n fixedColumnWidth: 'Pevná šířka sloupce',\n resize100: 'Změnit velikost 100%',\n resize75: 'Změnit velikost 75%',\n resize50: 'Změnit velikost 50%',\n resize25: 'Změnit velikost 25%',\n autoSize: 'Automatická velikost',\n mirrorHorizontal: 'Zrcadlo, horizontální',\n mirrorVertical: 'Zrcadlo, vertikální',\n rotateLeft: 'Otočit doleva',\n rotateRight: 'Otočit doprava',\n maxSize: 'Max. velikost',\n minSize: 'Min. velikost',\n tableHeader: 'Záhlaví tabulky',\n mergeCells: 'Spojit buňky',\n splitCells: 'Rozdělit buňky',\n HorizontalSplit: 'Vodorovné rozdělení',\n VerticalSplit: 'Svislé rozdělení'\n },\n menu: {\n spaced: 'Rozložené',\n bordered: 'Ohraničené',\n neon: 'Neon',\n translucent: 'Průsvitné',\n shadow: 'Stín',\n code: 'Kód'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'cs', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * \n * Danish translation by davidkonrad at github or gmail\n *\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'da',\n toolbar: {\n default: 'Default',\n save: 'Gem',\n font: 'Skrifttype',\n formats: 'Format',\n fontSize: 'Skriftstørrelse',\n bold: 'Fed',\n underline: 'Understreget',\n italic: 'Skråskrift',\n strike: 'Overstreget',\n subscript: 'Sænket skrift',\n superscript: 'Hævet skrift',\n removeFormat: 'Fjern formatering',\n fontColor: 'Skriftfarve',\n hiliteColor: 'Baggrundsfarve',\n indent: 'Ryk ind',\n outdent: 'Ryk ud',\n align: 'Justering',\n alignLeft: 'Venstrejustering',\n alignRight: 'Højrejustering',\n alignCenter: 'Midterjustering',\n alignJustify: 'Tilpas margin',\n list: 'Lister',\n orderList: 'Nummereret liste',\n unorderList: 'Uordnet liste',\n horizontalRule: 'Horisontal linie',\n hr_solid: 'Almindelig',\n hr_dotted: 'Punkteret',\n hr_dashed: 'Streget',\n table: 'Tabel',\n link: 'Link',\n math: 'Math',\n image: 'Billede',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Fuld skærm',\n showBlocks: 'Vis blokke',\n codeView: 'Vis koder',\n undo: 'Undo',\n redo: 'Redo',\n preview: 'Preview',\n print: 'Print',\n tag_p: 'Paragraph',\n tag_div: 'Normal (DIV)',\n tag_h: 'Overskrift',\n tag_blockquote: 'Citer',\n tag_pre: 'Code',\n template: 'Schablone',\n lineHeight: 'Linjehøjde',\n paragraphStyle: 'Afsnitstil',\n textStyle: 'Tekststil',\n imageGallery: 'Billedgalleri',\n dir_ltr: 'Venstre til højre',\n dir_rtl: 'Højre til venstre',\n mention: 'Nævne'\n },\n dialogBox: {\n linkBox: {\n title: 'Indsæt link',\n url: 'URL til link',\n text: 'Tekst for link',\n newWindowCheck: 'Åben i nyt faneblad',\n downloadLinkCheck: 'Download link',\n bookmark: 'Bogmærke'\n },\n mathBox: {\n title: 'Math',\n inputLabel: 'Matematisk notation',\n fontSizeLabel: 'Skriftstørrelse',\n previewLabel: 'Preview'\n },\n imageBox: {\n title: 'Indsæt billede',\n file: 'Indsæt fra fil',\n url: 'Indsæt fra URL',\n altText: 'Alternativ tekst'\n },\n videoBox: {\n title: 'Indsæt Video',\n file: 'Indsæt fra fil',\n url: 'Indlejr video / YouTube,Vimeo'\n },\n audioBox: {\n title: 'Indsæt Audio',\n file: 'Indsæt fra fil',\n url: 'Indsæt fra URL'\n },\n browser: {\n tags: 'Tags',\n search: 'Søg',\n },\n caption: 'Indsæt beskrivelse',\n close: 'Luk',\n submitButton: 'Gennemfør',\n revertButton: 'Gendan',\n proportion: 'Bevar proportioner',\n basic: 'Basis',\n left: 'Venstre',\n right: 'Højre',\n center: 'Center',\n width: 'Bredde',\n height: 'Højde',\n size: 'Størrelse',\n ratio: 'Forhold'\n },\n controller: {\n edit: 'Rediger',\n unlink: 'Fjern link',\n remove: 'Fjern',\n insertRowAbove: 'Indsæt række foroven',\n insertRowBelow: 'Indsæt række nedenfor',\n deleteRow: 'Slet række',\n insertColumnBefore: 'Indsæt kolonne før',\n insertColumnAfter: 'Indsæt kolonne efter',\n deleteColumn: 'Slet kolonne',\n fixedColumnWidth: 'Fast søjlebredde',\n resize100: 'Forstør 100%',\n resize75: 'Forstør 75%',\n resize50: 'Forstør 50%',\n resize25: 'Forstør 25%',\n autoSize: 'Auto størrelse',\n mirrorHorizontal: 'Spejling, horisontal',\n mirrorVertical: 'Spejling, vertikal',\n rotateLeft: 'Roter til venstre',\n rotateRight: 'Toter til højre',\n maxSize: 'Max størrelse',\n minSize: 'Min størrelse',\n tableHeader: 'Tabel overskrift',\n mergeCells: 'Sammenlæg celler (merge)',\n splitCells: 'Opdel celler',\n HorizontalSplit: 'Opdel horisontalt',\n VerticalSplit: 'Opdel vertikalt'\n },\n menu: {\n spaced: 'Brev Afstand',\n bordered: 'Afgrænsningslinje',\n neon: 'Neon',\n translucent: 'Gennemsigtig',\n shadow: 'Skygge',\n code: 'Code'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'da', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2019 @Gundolf68\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'de',\n toolbar: {\n default: 'Standard',\n save: 'Speichern',\n font: 'Schriftart',\n formats: 'Format',\n fontSize: 'Schriftgröße',\n bold: 'Fett',\n underline: 'Unterstrichen',\n italic: 'Kursiv',\n strike: 'Durchgestrichen',\n subscript: 'Tiefgestellt',\n superscript: 'Hochgestellt',\n removeFormat: 'Format entfernen',\n fontColor: 'Schriftfarbe',\n hiliteColor: 'Farbe für Hervorhebungen',\n indent: 'Einzug vergrößern',\n outdent: 'Einzug verkleinern',\n align: 'Ausrichtung',\n alignLeft: 'Links ausrichten',\n alignRight: 'Rechts ausrichten',\n alignCenter: 'Zentriert ausrichten',\n alignJustify: 'Blocksatz',\n list: 'Liste',\n orderList: 'Nummerierte Liste',\n unorderList: 'Aufzählung',\n horizontalRule: 'Horizontale Linie',\n hr_solid: 'Strich',\n hr_dotted: 'Gepunktet',\n hr_dashed: 'Gestrichelt',\n table: 'Tabelle',\n link: 'Link',\n math: 'Mathematik',\n image: 'Bild',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Vollbild',\n showBlocks: 'Blockformatierungen anzeigen',\n codeView: 'Quelltext anzeigen',\n undo: 'Rückgängig',\n redo: 'Wiederholen',\n preview: 'Vorschau',\n print: 'Drucken',\n tag_p: 'Absatz',\n tag_div: 'Normal (DIV)',\n tag_h: 'Header',\n tag_blockquote: 'Zitat',\n tag_pre: 'Quellcode',\n template: 'Vorlage',\n lineHeight: 'Zeilenhöhe',\n paragraphStyle: 'Absatzstil',\n textStyle: 'Textstil',\n imageGallery: 'Bildergalerie',\n dir_ltr: 'Links nach rechts',\n dir_rtl: 'Rechts nach links',\n mention: 'Erwähnen'\n },\n dialogBox: {\n linkBox: {\n title: 'Link einfügen',\n url: 'Link-URL',\n text: 'Link-Text',\n newWindowCheck: 'In neuem Fenster anzeigen',\n downloadLinkCheck: 'Download-Link',\n bookmark: 'Lesezeichen'\n },\n mathBox: {\n title: 'Mathematik',\n inputLabel: 'Mathematische Notation',\n fontSizeLabel: 'Schriftgröße',\n previewLabel: 'Vorschau'\n },\n imageBox: {\n title: 'Bild einfügen',\n file: 'Datei auswählen',\n url: 'Bild-URL',\n altText: 'Alternativer Text'\n },\n videoBox: {\n title: 'Video einfügen',\n file: 'Datei auswählen',\n url: 'Video-URL, YouTube/Vimeo'\n },\n audioBox: {\n title: 'Audio einfügen',\n file: 'Datei auswählen',\n url: 'Audio-URL'\n },\n browser: {\n tags: 'Stichworte',\n search: 'Suche',\n },\n caption: 'Beschreibung eingeben',\n close: 'Schließen',\n submitButton: 'Übernehmen',\n revertButton: 'Rückgängig',\n proportion: 'Seitenverhältnis beibehalten',\n basic: 'Standard',\n left: 'Links',\n right: 'Rechts',\n center: 'Zentriert',\n width: 'Breite',\n height: 'Höhe',\n size: 'Größe',\n ratio: 'Verhältnis'\n },\n controller: {\n edit: 'Bearbeiten',\n unlink: 'Link entfernen',\n remove: 'Löschen',\n insertRowAbove: 'Zeile oberhalb einfügen',\n insertRowBelow: 'Zeile unterhalb einfügen',\n deleteRow: 'Zeile löschen',\n insertColumnBefore: 'Spalte links einfügen',\n insertColumnAfter: 'Spalte rechts einfügen',\n deleteColumn: 'Spalte löschen',\n fixedColumnWidth: 'Feste Spaltenbreite',\n resize100: 'Zoom 100%',\n resize75: 'Zoom 75%',\n resize50: 'Zoom 50%',\n resize25: 'Zoom 25%',\n autoSize: 'Automatische Größenanpassung',\n mirrorHorizontal: 'Horizontal spiegeln',\n mirrorVertical: 'Vertikal spiegeln',\n rotateLeft: 'Nach links drehen',\n rotateRight: 'Nach rechts drehen',\n maxSize: 'Maximale Größe',\n minSize: 'Mindestgröße',\n tableHeader: 'Tabellenüberschrift',\n mergeCells: 'Zellen verbinden',\n splitCells: 'Zellen teilen',\n HorizontalSplit: 'Horizontal teilen',\n VerticalSplit: 'Vertikal teilen'\n },\n menu: {\n spaced: 'Buchstabenabstand',\n bordered: 'Umrandet',\n neon: 'Neon',\n translucent: 'Durchscheinend',\n shadow: 'Schatten',\n code: 'Quellcode'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'de', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'en',\n toolbar: {\n default: 'Default',\n save: 'Save',\n font: 'Font',\n formats: 'Formats',\n fontSize: 'Size',\n bold: 'Bold',\n underline: 'Underline',\n italic: 'Italic',\n strike: 'Strike',\n subscript: 'Subscript',\n superscript: 'Superscript',\n removeFormat: 'Remove Format',\n fontColor: 'Font Color',\n hiliteColor: 'Highlight Color',\n indent: 'Indent',\n outdent: 'Outdent',\n align: 'Align',\n alignLeft: 'Align left',\n alignRight: 'Align right',\n alignCenter: 'Align center',\n alignJustify: 'Align justify',\n list: 'List',\n orderList: 'Ordered list',\n unorderList: 'Unordered list',\n horizontalRule: 'Horizontal line',\n hr_solid: 'Solid',\n hr_dotted: 'Dotted',\n hr_dashed: 'Dashed',\n table: 'Table',\n link: 'Link',\n math: 'Math',\n image: 'Image',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Full screen',\n showBlocks: 'Show blocks',\n codeView: 'Code view',\n undo: 'Undo',\n redo: 'Redo',\n preview: 'Preview',\n print: 'print',\n tag_p: 'Paragraph',\n tag_div: 'Normal (DIV)',\n tag_h: 'Header',\n tag_blockquote: 'Quote',\n tag_pre: 'Code',\n template: 'Template',\n lineHeight: 'Line height',\n paragraphStyle: 'Paragraph style',\n textStyle: 'Text style',\n imageGallery: 'Image gallery',\n dir_ltr: 'Left to right',\n dir_rtl: 'Right to left',\n mention: 'Mention'\n },\n dialogBox: {\n linkBox: {\n title: 'Insert Link',\n url: 'URL to link',\n text: 'Text to display',\n newWindowCheck: 'Open in new window',\n downloadLinkCheck: 'Download link',\n bookmark: 'Bookmark'\n },\n mathBox: {\n title: 'Math',\n inputLabel: 'Mathematical Notation',\n fontSizeLabel: 'Font Size',\n previewLabel: 'Preview'\n },\n imageBox: {\n title: 'Insert image',\n file: 'Select from files',\n url: 'Image URL',\n altText: 'Alternative text'\n },\n videoBox: {\n title: 'Insert Video',\n file: 'Select from files',\n url: 'Media embed URL, YouTube/Vimeo'\n },\n audioBox: {\n title: 'Insert Audio',\n file: 'Select from files',\n url: 'Audio URL'\n },\n browser: {\n tags: 'Tags',\n search: 'Search',\n },\n caption: 'Insert description',\n close: 'Close',\n submitButton: 'Submit',\n revertButton: 'Revert',\n proportion: 'Constrain proportions',\n basic: 'Basic',\n left: 'Left',\n right: 'Right',\n center: 'Center',\n width: 'Width',\n height: 'Height',\n size: 'Size',\n ratio: 'Ratio'\n },\n controller: {\n edit: 'Edit',\n unlink: 'Unlink',\n remove: 'Remove',\n insertRowAbove: 'Insert row above',\n insertRowBelow: 'Insert row below',\n deleteRow: 'Delete row',\n insertColumnBefore: 'Insert column before',\n insertColumnAfter: 'Insert column after',\n deleteColumn: 'Delete column',\n fixedColumnWidth: 'Fixed column width',\n resize100: 'Resize 100%',\n resize75: 'Resize 75%',\n resize50: 'Resize 50%',\n resize25: 'Resize 25%',\n autoSize: 'Auto size',\n mirrorHorizontal: 'Mirror, Horizontal',\n mirrorVertical: 'Mirror, Vertical',\n rotateLeft: 'Rotate left',\n rotateRight: 'Rotate right',\n maxSize: 'Max size',\n minSize: 'Min size',\n tableHeader: 'Table header',\n mergeCells: 'Merge cells',\n splitCells: 'Split Cells',\n HorizontalSplit: 'Horizontal split',\n VerticalSplit: 'Vertical split'\n },\n menu: {\n spaced: 'Spaced',\n bordered: 'Bordered',\n neon: 'Neon',\n translucent: 'Translucent',\n shadow: 'Shadow',\n code: 'Code'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'en', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n\tif (typeof module === 'object' && typeof module.exports === 'object') {\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error('SUNEDITOR_LANG a window with a document');\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n\tconst lang = {\n\t\tcode: 'es',\n\t\ttoolbar: {\n\t\t\tdefault: 'Valor por defecto',\n\t\t\tsave: 'Guardar',\n\t\t\tfont: 'Fuente',\n\t\t\tformats: 'Formato',\n\t\t\tfontSize: 'Tamaño de fuente',\n\t\t\tbold: 'Negrita',\n\t\t\tunderline: 'Subrayado',\n\t\t\titalic: 'Cursiva',\n\t\t\tstrike: 'Tachado',\n\t\t\tsubscript: 'Subíndice',\n\t\t\tsuperscript: 'Superíndice',\n\t\t\tremoveFormat: 'Eliminar formato',\n\t\t\tfontColor: 'Color de fuente',\n\t\t\thiliteColor: 'Color de resaltado',\n\t\t\tindent: 'Más tabulación',\n\t\t\toutdent: 'Menos tabulación',\n\t\t\talign: 'Alinear',\n\t\t\talignLeft: 'Alinear a la izquierda',\n\t\t\talignRight: 'Alinear a la derecha',\n\t\t\talignCenter: 'Alinear al centro',\n\t\t\talignJustify: 'Justificar',\n\t\t\tlist: 'Lista',\n\t\t\torderList: 'Lista ordenada',\n\t\t\tunorderList: 'Lista desordenada',\n\t\t\thorizontalRule: 'Horizontal line',\n\t\t\thr_solid: 'Línea horizontal solida',\n\t\t\thr_dotted: 'Línea horizontal punteada',\n\t\t\thr_dashed: 'Línea horizontal discontinua',\n\t\t\ttable: 'Tabla',\n\t\t\tlink: 'Link',\n\t\t\tmath: 'Matemáticas',\n\t\t\timage: 'Imagen',\n\t\t\tvideo: 'Video',\n\t\t\taudio: 'Audio',\n\t\t\tfullScreen: 'Pantalla completa',\n\t\t\tshowBlocks: 'Ver bloques',\n\t\t\tcodeView: 'Ver código fuente',\n\t\t\tundo: 'UndoDeshacer última acción',\n\t\t\tredo: 'Rehacer última acción',\n\t\t\tpreview: 'Vista previa',\n\t\t\tprint: 'Imprimir',\n\t\t\ttag_p: 'Párrafo',\n\t\t\ttag_div: 'Normal (DIV)',\n\t\t\ttag_h: 'Header',\n\t\t\ttag_blockquote: 'Cita',\n\t\t\ttag_pre: 'Código',\n\t\t\ttemplate: 'Plantilla',\n\t\t\tlineHeight: 'Altura de la línea',\n\t\t\tparagraphStyle: 'Estilo del parrafo',\n\t\t\ttextStyle: 'Estilo del texto',\n\t\t\timageGallery: 'Galería de imágenes',\n\t\t\tdir_ltr: 'De izquierda a derecha',\n dir_rtl: 'De derecha a izquierda',\n\t\t\tmention: 'Mencionar'\n\t\t},\n\t\tdialogBox: {\n\t\t\tlinkBox: {\n\t\t\t\ttitle: 'Insertar Link',\n\t\t\t\turl: '¿Hacia que URL lleva el link?',\n\t\t\t\ttext: 'Texto para mostrar',\n\t\t\t\tnewWindowCheck: 'Abrir en una nueva ventana',\n\t\t\t\tdownloadLinkCheck: 'Enlace de descarga',\n bookmark: 'Marcador'\n\t\t\t},\n\t\t\tmathBox: {\n title: 'Matemáticas',\n inputLabel: 'Notación Matemática',\n fontSizeLabel: 'Tamaño de fuente',\n previewLabel: 'Vista previa'\n },\n\t\t\timageBox: {\n\t\t\t\ttitle: 'Insertar imagen',\n\t\t\t\tfile: 'Seleccionar desde los archivos',\n\t\t\t\turl: 'URL de la imagen',\n\t\t\t\taltText: 'Texto alternativo'\n\t\t\t},\n\t\t\tvideoBox: {\n\t\t\t\ttitle: 'Insertar Video',\n\t\t\t\tfile: 'Seleccionar desde los archivos',\n\t\t\t\turl: '¿URL del vídeo? Youtube/Vimeo'\n\t\t\t},\n\t\t\taudioBox: {\n title: 'Insertar Audio',\n file: 'Seleccionar desde los archivos',\n url: 'URL de la audio'\n },\n browser: {\n tags: 'Etiquetas',\n search: 'Buscar',\n },\n\t\t\tcaption: 'Insertar descripción',\n\t\t\tclose: 'Cerrar',\n\t\t\tsubmitButton: 'Enviar',\n\t\t\trevertButton: 'revertir',\n\t\t\tproportion: 'Restringir las proporciones',\n\t\t\tbasic: 'Basico',\n\t\t\tleft: 'Izquierda',\n\t\t\tright: 'derecha',\n\t\t\tcenter: 'Centro',\n\t\t\twidth: 'Ancho',\n\t\t\theight: 'Alto',\n\t\t\tsize: 'Tamaño',\n\t\t\tratio: 'Proporción'\n\t\t},\n\t\tcontroller: {\n\t\t\tedit: 'Editar',\n\t\t\tunlink: 'Desvincular',\n\t\t\tremove: 'RemoveQuitar',\n\t\t\tinsertRowAbove: 'Insertar fila arriba',\n\t\t\tinsertRowBelow: 'Insertar fila debajo',\n\t\t\tdeleteRow: 'Eliminar fila',\n\t\t\tinsertColumnBefore: 'Insertar columna antes',\n\t\t\tinsertColumnAfter: 'Insertar columna después',\n\t\t\tdeleteColumn: 'Eliminar columna',\n\t\t\tfixedColumnWidth: 'Ancho de columna fijo',\n\t\t\tresize100: 'Redimensionar 100%',\n\t\t\tresize75: 'Redimensionar 75%',\n\t\t\tresize50: 'Redimensionar 50%',\n\t\t\tresize25: 'Redimensionar 25%',\n\t\t\tautoSize: 'Tamaño automático',\n\t\t\tmirrorHorizontal: 'Espejo, Horizontal',\n\t\t\tmirrorVertical: 'Espejo, Vertical',\n\t\t\trotateLeft: 'Girar a la izquierda',\n\t\t\trotateRight: 'Girar a la derecha',\n\t\t\tmaxSize: 'Tamaño máximo',\n\t\t\tminSize: 'Tamaño minímo',\n\t\t\ttableHeader: 'Encabezado de tabla',\n\t\t\tmergeCells: 'Combinar celdas',\n\t\t\tsplitCells: 'Dividir celdas',\n\t\t\tHorizontalSplit: 'División horizontal',\n\t\t\tVerticalSplit: 'División vertical'\n\t\t},\n\t\tmenu: {\n\t\t\tspaced: 'Espaciado',\n\t\t\tbordered: 'Bordeado',\n\t\t\tneon: 'Neón',\n\t\t\ttranslucent: 'Translúcido',\n\t\t\tshadow: 'Sombreado',\n code: 'Código'\n\t\t}\n\t};\n\n\tif (typeof noGlobal === typeof undefined) {\n\t\tif (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'es', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n\t}\n\n\treturn lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'fa',\n toolbar: {\n default: 'پیش فرض',\n save: 'ذخیره',\n font: 'فونت',\n formats: 'قالب‌ها',\n fontSize: 'اندازه‌ی فونت',\n bold: 'پررنگ کردن',\n underline: 'زیرخطدار کردن',\n italic: 'کج کردن',\n strike: 'خط میان‌دار کردن',\n subscript: 'نوشتن به صورت زیر متن',\n superscript: 'نوشتن به صورت بالای متن',\n removeFormat: 'حذف قالب',\n fontColor: 'رنگ پیش زمینه',\n hiliteColor: 'رنگ پس‌زمینه',\n indent: 'جلو بردن',\n outdent: 'عقب بردن',\n align: 'چیدمان',\n alignLeft: 'چپ‌چین',\n alignRight: 'راست‌چین',\n alignCenter: 'وسط‌چین',\n alignJustify: 'همتراز از هر دو سمت',\n list: 'لیست',\n orderList: 'لیست شمارشی',\n unorderList: 'لیست گلوله‌ای',\n horizontalRule: 'درج خط افقی',\n hr_solid: 'تو پر',\n hr_dotted: 'نقطه‌چین',\n hr_dashed: 'خط تیره',\n table: 'درج جدول',\n link: 'درج لینک',\n math: 'درج فرمول ریاضی',\n image: 'درج تصویر',\n video: 'درج ویدئو',\n audio: 'درج صوت',\n fullScreen: 'تمام صفحه',\n showBlocks: 'نمایش بلاک‌بندی',\n codeView: 'مشاهده‌ی کُد HTML',\n undo: 'برگرداندن تغییر',\n redo: 'تکرار تغییر',\n preview: 'پیش نمایش',\n print: 'چاپ',\n tag_p: 'پاراگراف',\n tag_div: 'عادی (DIV)',\n tag_h: 'هدر',\n tag_blockquote: 'نقل قول',\n tag_pre: 'کُد',\n template: 'درج محتوا بر اساس الگو',\n lineHeight: 'ارتفاع خط',\n paragraphStyle: 'استایل پاراگراف',\n textStyle: 'استایل متن',\n imageGallery: 'گالری تصاویر',\n dir_ltr: 'چپ به راست',\n dir_rtl: 'راست به چپ',\n mention: 'ذکر کردن'\n },\n dialogBox: {\n linkBox: {\n title: 'درج لینک',\n url: 'آدرس لینک',\n text: 'عنوان لینک',\n newWindowCheck: 'در پنجره‌ی جدیدی باز شود',\n downloadLinkCheck: 'لینک دانلود',\n bookmark: 'نشان'\n },\n mathBox: {\n title: 'فرمول ریاضی',\n inputLabel: 'تعریف فرمول',\n fontSizeLabel: 'اندازه‌ی فونت',\n previewLabel: 'پیش نمایش'\n },\n imageBox: {\n title: 'درج تصویر',\n file: 'انتخاب فایل',\n url: 'آدرس Url',\n altText: 'متن جایگزین'\n },\n videoBox: {\n title: 'درج ویدئو',\n file: 'انتخاب فایل',\n url: 'آدرس Url ویدئو, YouTube/Vimeo'\n },\n audioBox: {\n title: 'درج صوت',\n file: 'انتخاب فایل',\n url: 'آدرس Url'\n },\n browser: {\n tags: 'تگ‌ها',\n search: 'جستجو',\n },\n caption: 'توضیح',\n close: 'بستن',\n submitButton: 'درج',\n revertButton: 'برگرداندن تغییرات',\n proportion: 'محدودیت اندازه',\n basic: 'چیدمان پیش فرض',\n left: 'چپ',\n right: 'راست',\n center: 'وسط',\n width: 'پهنا',\n height: 'ارتفاع',\n size: 'اندازه',\n ratio: 'نسبت'\n },\n controller: {\n edit: 'ویرایش',\n unlink: 'حذف لینک',\n remove: 'حذف',\n insertRowAbove: 'درج سطر در بالا',\n insertRowBelow: 'درج سطر در پایین',\n deleteRow: 'حذف سطر',\n insertColumnBefore: 'درج یک ستون به عقب',\n insertColumnAfter: 'درج یک ستون در جلو',\n deleteColumn: 'حذف ستون',\n fixedColumnWidth: 'اندازه ستون ثابت',\n resize100: 'اندازه‌ی 100%',\n resize75: 'اندازه‌ی 75%',\n resize50: 'اندازه‌ی 50%',\n resize25: 'اندازه‌ی 25%',\n autoSize: 'اندازه‌ی خودکار',\n mirrorHorizontal: 'بر عکس کردن در جهت افقی',\n mirrorVertical: 'بر عکس کردن در جهت عمودی',\n rotateLeft: 'دوران به چپ',\n rotateRight: 'دوران به راست',\n maxSize: 'حداکثر اندازه',\n minSize: 'حداقل اندازه',\n tableHeader: 'هدر جدول',\n mergeCells: 'ادغام خانه‌ها',\n splitCells: 'تقسیم خانه به چند خانه',\n HorizontalSplit: 'تقسیم در جهت افقی',\n VerticalSplit: 'تقسیم در جهت عمودی'\n },\n menu: {\n spaced: 'فضادار',\n bordered: 'لبه‌دار',\n neon: 'نئونی',\n translucent: 'نیمه شفاف',\n shadow: 'سایه',\n code: 'کُد'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'fa', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2019 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'fr',\n toolbar: {\n default: 'Défaut',\n save: 'Sauvegarder',\n font: 'Police',\n formats: 'Formats',\n fontSize: 'Taille',\n bold: 'Gras',\n underline: 'Souligné',\n italic: 'Italique',\n strike: 'Barré',\n subscript: 'Indice',\n superscript: 'Exposant',\n removeFormat: 'Effacer le formatage',\n fontColor: 'Couleur du texte',\n hiliteColor: 'Couleur en arrière plan',\n indent: 'Indenter',\n outdent: 'Désindenter',\n align: 'Alignement',\n alignLeft: 'À gauche',\n alignRight: 'À droite',\n alignCenter: 'Centré',\n alignJustify: 'Justifié',\n list: 'Liste',\n orderList: 'Ordonnée',\n unorderList: 'Non-ordonnée',\n horizontalRule: 'Ligne horizontale',\n hr_solid: 'Solide',\n hr_dotted: 'Points',\n hr_dashed: 'Tirets',\n table: 'Table',\n link: 'Lien',\n math: 'Math',\n image: 'Image',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Plein écran',\n showBlocks: 'Voir les blocs',\n codeView: 'Voir le code',\n undo: 'Annuler',\n redo: 'Rétablir',\n preview: 'Prévisualiser',\n print: 'Imprimer',\n tag_p: 'Paragraphe',\n tag_div: 'Normal (DIV)',\n tag_h: 'Titre',\n tag_blockquote: 'Citation',\n tag_pre: 'Code',\n template: 'Template',\n lineHeight: 'Hauteur de la ligne',\n paragraphStyle: 'Style de paragraphe',\n textStyle: 'Style de texte',\n imageGallery: 'Galerie d\\'images',\n dir_ltr: 'De gauche à droite',\n dir_rtl: 'De droite à gauche',\n mention: 'Mention'\n },\n dialogBox: {\n linkBox: {\n title: 'Insérer un lien',\n url: 'Adresse URL du lien',\n text: 'Texte à afficher',\n newWindowCheck: 'Ouvrir dans une nouvelle fenêtre',\n downloadLinkCheck: 'Lien de téléchargement',\n bookmark: 'Signet'\n },\n mathBox: {\n title: 'Math',\n inputLabel: 'Notation mathématique',\n fontSizeLabel: 'Taille',\n previewLabel: 'Prévisualiser'\n },\n imageBox: {\n title: 'Insérer une image',\n file: 'Sélectionner le fichier',\n url: 'Adresse URL du fichier',\n altText: 'Texte Alternatif'\n },\n videoBox: {\n title: 'Insérer une vidéo',\n file: 'Sélectionner le fichier',\n url: 'URL d’intégration du média, YouTube/Vimeo'\n },\n audioBox: {\n title: 'Insérer un fichier audio',\n file: 'Sélectionner le fichier',\n url: 'Adresse URL du fichier'\n },\n browser: {\n tags: 'Mots clés',\n search: 'Chercher',\n },\n caption: 'Insérer une description',\n close: 'Fermer',\n submitButton: 'Appliquer',\n revertButton: 'Revenir en arrière',\n proportion: 'Maintenir le rapport hauteur/largeur',\n basic: 'Basique',\n left: 'Gauche',\n right: 'Droite',\n center: 'Centré',\n width: 'Largeur',\n height: 'Hauteur',\n size: 'Taille',\n ratio: 'Rapport'\n },\n controller: {\n edit: 'Modifier',\n unlink: 'Supprimer un lien',\n remove: 'Effacer',\n insertRowAbove: 'Insérer une ligne en dessous',\n insertRowBelow: 'Insérer une ligne au dessus',\n deleteRow: 'Effacer la ligne',\n insertColumnBefore: 'Insérer une colonne avant',\n insertColumnAfter: 'Insérer une colonne après',\n deleteColumn: 'Effacer la colonne',\n fixedColumnWidth: 'Largeur de colonne fixe',\n resize100: 'Redimensionner à 100%',\n resize75: 'Redimensionner à 75%',\n resize50: 'Redimensionner à 50%',\n resize25: 'Redimensionner à 25%',\n autoSize: 'Taille automatique',\n mirrorHorizontal: 'Mirroir, Horizontal',\n mirrorVertical: 'Mirroir, Vertical',\n rotateLeft: 'Rotation à gauche',\n rotateRight: 'Rotation à droite',\n maxSize: 'Taille max',\n minSize: 'Taille min',\n tableHeader: 'En-tête de table',\n mergeCells: 'Fusionner les cellules',\n splitCells: 'Diviser les Cellules',\n HorizontalSplit: 'Scission horizontale',\n VerticalSplit: 'Scission verticale'\n },\n menu: {\n spaced: 'Espacement',\n bordered: 'Ligne de démarcation',\n neon: 'Néon',\n translucent: 'Translucide',\n shadow: 'Ombre',\n code: 'Code'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'fr', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'he',\n toolbar: {\n default: 'ברירת מחדל',\n save: 'שמור',\n font: 'גופן',\n formats: 'עיצוב',\n fontSize: 'גודל',\n bold: 'מודגש',\n underline: 'קו תחתון',\n italic: 'נטוי',\n strike: 'קו חוצה',\n subscript: 'עילי',\n superscript: 'תחתי',\n removeFormat: 'הסר עיצוב',\n fontColor: 'צבע גופן',\n hiliteColor: 'צבע קו תחתון',\n indent: 'הגדל כניסה',\n outdent: 'הקטן כניסה',\n align: 'יישור',\n alignLeft: 'יישר לשמאל',\n alignRight: 'יישר לימין',\n alignCenter: 'מרכז',\n alignJustify: 'יישר לשני הצדדים',\n list: 'רשימה',\n orderList: 'מספור',\n unorderList: 'תבליטים',\n horizontalRule: 'קו אופקי',\n hr_solid: 'קו',\n hr_dotted: 'נקודות',\n hr_dashed: 'מקפים',\n table: 'טבלה',\n link: 'קישור',\n math: 'מתמטיקה',\n image: 'תמונה',\n video: 'חוזי',\n audio: 'שמע',\n fullScreen: 'מסך מלא',\n showBlocks: 'הצג גושים',\n codeView: 'הצג קוד',\n undo: 'בטל',\n redo: 'חזור',\n preview: 'תצוגה מקדימה',\n print: 'הדפס',\n tag_p: 'פסקה',\n tag_div: 'רגילה (DIV)',\n tag_h: 'כותרת',\n tag_blockquote: 'ציטוט',\n tag_pre: 'קוד',\n template: 'תבנית',\n lineHeight: 'גובה השורה',\n paragraphStyle: 'סגנון פסקה',\n textStyle: 'סגנון גופן',\n imageGallery: 'גלרית תמונות',\n dir_ltr: 'משמאל לימין',\n dir_rtl: 'מימין לשמאל',\n mention: 'הזכר'\n },\n dialogBox: {\n linkBox: {\n title: 'הכנס קשור',\n url: 'כתובת קשור',\n text: 'תיאור',\n newWindowCheck: 'פתח בחלון חדש',\n downloadLinkCheck: 'קישור להורדה',\n bookmark: 'סמניה'\n },\n mathBox: {\n title: 'נוסחה',\n inputLabel: 'סימנים מתמטים',\n fontSizeLabel: 'גודל גופן',\n previewLabel: 'תצוגה מקדימה'\n },\n imageBox: {\n title: 'הכנס תמונה',\n file: 'בחר מקובץ',\n url: 'כתובת URL תמונה',\n altText: 'תיאור (תגית alt)'\n },\n videoBox: {\n title: 'הכנס סרטון',\n file: 'בחר מקובץ',\n url: 'כתובת הטמעה YouTube/Vimeo'\n },\n audioBox: {\n title: 'הכנס שמע',\n file: 'בחר מקובץ',\n url: 'כתובת URL שמע'\n },\n browser: {\n tags: 'תג',\n search: 'חפש',\n },\n caption: 'הכנס תיאור',\n close: 'סגור',\n submitButton: 'שלח',\n revertButton: 'בטל',\n proportion: 'שמר יחס',\n basic: 'בסיסי',\n left: 'שמאל',\n right: 'ימין',\n center: 'מרכז',\n width: 'רוחב',\n height: 'גובה',\n size: 'גודל',\n ratio: 'יחס'\n },\n controller: {\n edit: 'ערוך',\n unlink: 'הסר קישורים',\n remove: 'הסר',\n insertRowAbove: 'הכנס שורה מעל',\n insertRowBelow: 'הכנס שורה מתחת',\n deleteRow: 'מחק שורה',\n insertColumnBefore: 'הכנס עמודה לפני',\n insertColumnAfter: 'הכנס עמודה אחרי',\n deleteColumn: 'מחק עמודה',\n fixedColumnWidth: 'קבע רוחב עמודות',\n resize100: 'ללא הקטנה',\n resize75: 'הקטן 75%',\n resize50: 'הקטן 50%',\n resize25: 'הקטן 25%',\n autoSize: 'הקטן אוטומטית',\n mirrorHorizontal: 'הפוך לרוחב',\n mirrorVertical: 'הפוך לגובה',\n rotateLeft: 'סובב שמאלה',\n rotateRight: 'סובב ימינה',\n maxSize: 'גודל מרבי',\n minSize: 'גודל מזערי',\n tableHeader: 'כותרת טבלה',\n mergeCells: 'מזג תאים',\n splitCells: 'פצל תא',\n HorizontalSplit: 'פצל לגובה',\n VerticalSplit: 'פצל לרוחב'\n },\n menu: {\n spaced: 'מרווח',\n bordered: 'בעל מיתאר',\n neon: 'זוהר',\n translucent: 'שקוף למחצה',\n shadow: 'צל',\n code: 'קוד'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'he', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","'use strict';\n\nimport ckb from './ckb';\nimport cs from './cs';\nimport da from './da';\nimport de from './de';\nimport en from './en';\nimport es from './es';\nimport fr from './fr';\nimport he from './he';\nimport it from './it';\nimport ja from './ja';\nimport ko from './ko';\nimport lv from './lv';\nimport nl from './nl';\nimport pl from './pl';\nimport pt_br from './pt_br';\nimport ro from './ro';\nimport ru from './ru';\nimport se from './se';\nimport ua from './ua';\nimport ur from './ur';\nimport zh_cn from './zh_cn';\n\nexport { ckb, cs, da, de, en, es, fr, he, it, ja, ko, lv, nl, pl, pt_br, ro, ru, se, ua, ur, zh_cn };\nexport default { ckb, cs, da, de, en, es, fr, he, it, ja, ko, lv, nl, pl, pt_br, ro, ru, se, ua, ur, zh_cn };\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG una finestra con un documento');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'it',\n toolbar: {\n default: 'Predefinita',\n save: 'Salva',\n font: 'Font',\n formats: 'Formato',\n fontSize: 'Grandezza',\n bold: 'Grassetto',\n underline: 'Sottolineato',\n italic: 'Corsivo',\n strike: 'Barrato',\n subscript: 'Apice',\n superscript: 'Pedice',\n removeFormat: 'Rimuovi formattazione',\n fontColor: 'Colore testo',\n hiliteColor: 'Colore sottolineatura',\n indent: 'Aumenta rientro',\n outdent: 'Riduci rientro',\n align: 'Allinea',\n alignLeft: 'Allinea a sinistra',\n alignRight: 'Allinea a destra',\n alignCenter: 'Allinea al centro',\n alignJustify: 'Giustifica testo',\n list: 'Elenco',\n orderList: 'Elenco numerato',\n unorderList: 'Elenco puntato',\n horizontalRule: 'Linea orizzontale',\n hr_solid: 'Linea continua',\n hr_dotted: 'Puntini',\n hr_dashed: 'Trattini',\n table: 'Tabella',\n link: 'Collegamento ipertestuale',\n math: 'Formula matematica',\n image: 'Immagine',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'A tutto schermo',\n showBlocks: 'Visualizza blocchi',\n codeView: 'Visualizza codice',\n undo: 'Annulla',\n redo: 'Ripristina',\n preview: 'Anteprima',\n print: 'Stampa',\n tag_p: 'Paragrafo',\n tag_div: 'Normale (DIV)',\n tag_h: 'Titolo',\n tag_blockquote: 'Citazione',\n tag_pre: 'Codice',\n template: 'Modello',\n lineHeight: 'Interlinea',\n paragraphStyle: 'Stile paragrafo',\n textStyle: 'Stile testo',\n imageGallery: 'Galleria di immagini',\n dir_ltr: 'Da sinistra a destra',\n dir_rtl: 'Da destra a sinistra',\n mention: 'Menzione'\n },\n dialogBox: {\n linkBox: {\n title: 'Inserisci un link',\n url: 'Indirizzo',\n text: 'Testo da visualizzare',\n newWindowCheck: 'Apri in una nuova finestra',\n downloadLinkCheck: 'Link per scaricare',\n bookmark: 'Segnalibro'\n },\n mathBox: {\n title: 'Matematica',\n inputLabel: 'Notazione matematica',\n fontSizeLabel: 'Grandezza testo',\n previewLabel: 'Anteprima'\n },\n imageBox: {\n title: 'Inserisci immagine',\n file: 'Seleziona da file',\n url: 'Indirizzo immagine',\n altText: 'Testo alternativo (ALT)'\n },\n videoBox: {\n title: 'Inserisci video',\n file: 'Seleziona da file',\n url: 'Indirizzo video di embed, YouTube/Vimeo'\n },\n audioBox: {\n title: 'Inserisci audio',\n file: 'Seleziona da file',\n url: 'Indirizzo audio'\n },\n browser: {\n tags: 'tag',\n search: 'Ricerca',\n },\n caption: 'Inserisci didascalia',\n close: 'Chiudi',\n submitButton: 'Invia',\n revertButton: 'Annulla',\n proportion: 'Proporzionale',\n basic: 'Da impostazione',\n left: 'Sinistra',\n right: 'Destra',\n center: 'Centrato',\n width: 'Larghezza',\n height: 'Altezza',\n size: 'Dimensioni',\n ratio: 'Rapporto'\n },\n controller: {\n edit: 'Modifica',\n unlink: 'Elimina link',\n remove: 'Rimuovi',\n insertRowAbove: 'Inserisci riga sopra',\n insertRowBelow: 'Inserisci riga sotto',\n deleteRow: 'Cancella riga',\n insertColumnBefore: 'Inserisci colonna prima',\n insertColumnAfter: 'Inserisci colonna dopo',\n deleteColumn: 'Cancella colonna',\n fixedColumnWidth: 'Larghezza delle colonne fissa',\n resize100: 'Ridimensiona 100%',\n resize75: 'Ridimensiona 75%',\n resize50: 'Ridimensiona 50%',\n resize25: 'Ridimensiona 25%',\n autoSize: 'Ridimensione automatica',\n mirrorHorizontal: 'Capovolgi orizzontalmente',\n mirrorVertical: 'Capovolgi verticalmente',\n rotateLeft: 'Ruota a sinistra',\n rotateRight: 'Ruota a destra',\n maxSize: 'Dimensione massima',\n minSize: 'Dimensione minima',\n tableHeader: 'Intestazione tabella',\n mergeCells: 'Unisci celle',\n splitCells: 'Dividi celle',\n HorizontalSplit: 'Separa orizontalmente',\n VerticalSplit: 'Separa verticalmente'\n },\n menu: {\n spaced: 'Spaziato',\n bordered: 'Bordato',\n neon: 'Luminoso',\n translucent: 'Traslucido',\n shadow: 'Ombra',\n code: 'Codice'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'it', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2019 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'ja',\n toolbar: {\n default: 'デフォルト',\n save: '保存',\n font: 'フォント',\n formats: '段落形式',\n fontSize: 'サイズ',\n bold: '太字',\n underline: '下線',\n italic: 'イタリック',\n strike: '取り消し線',\n subscript: '下付き',\n superscript: '上付き',\n removeFormat: '形式を削除',\n fontColor: '文字色',\n hiliteColor: '文字の背景色',\n indent: 'インデント',\n outdent: 'インデント',\n align: 'ソート',\n alignLeft: '左揃え',\n alignRight: '右揃え',\n alignCenter: '中央揃え',\n alignJustify: '両端揃え',\n list: 'リスト',\n orderList: '数値ブリット',\n unorderList: '円形ブリット',\n horizontalRule: '水平線を挿入',\n hr_solid: '実線',\n hr_dotted: '点線',\n hr_dashed: 'ダッシュ',\n table: 'テーブル',\n link: 'リンク',\n math: '数学',\n image: '画像',\n video: '動画',\n audio: 'オーディオ',\n fullScreen: 'フルスクリーン',\n showBlocks: 'ブロック表示',\n codeView: 'HTMLの編集',\n undo: '元に戻す',\n redo: '再実行',\n preview: 'プレビュー',\n print: '印刷',\n tag_p: '本文',\n tag_div: '基本(DIV)',\n tag_h: 'タイトル',\n tag_blockquote: '引用',\n tag_pre: 'コード',\n template: 'テンプレート',\n lineHeight: '行の高さ',\n paragraphStyle: '段落スタイル',\n textStyle: 'テキストスタイル',\n imageGallery: 'イメージギャラリー',\n dir_ltr: '左から右へ',\n dir_rtl: '右から左に',\n mention: '言及する'\n },\n dialogBox: {\n linkBox: {\n title: 'リンクの挿入',\n url: 'インターネットアドレス',\n text: '画面のテキスト',\n newWindowCheck: '別ウィンドウで開く',\n downloadLinkCheck: 'ダウンロードリンク',\n bookmark: 'ブックマーク'\n },\n mathBox: {\n title: '数学',\n inputLabel: '数学表記',\n fontSizeLabel: 'サイズ',\n previewLabel: 'プレビュー'\n },\n imageBox: {\n title: '画像の挿入',\n file: 'ファイルの選択',\n url: 'イメージアドレス',\n altText: '置換文字列'\n },\n videoBox: {\n title: '動画を挿入',\n file: 'ファイルの選択',\n url: 'メディア埋め込みアドレス, YouTube/Vimeo'\n },\n audioBox: {\n title: 'オーディオを挿入',\n file: 'ファイルの選択',\n url: 'オーディオアドレス'\n },\n browser: {\n tags: 'タグ',\n search: '探す',\n },\n caption: '説明付け',\n close: '閉じる',\n submitButton: '確認',\n revertButton: '元に戻す',\n proportion: 'の割合カスタマイズ',\n basic: '基本',\n left: '左',\n right: '右',\n center: '中央',\n width: '横',\n height: '縦',\n size: 'サイズ',\n ratio: '比率'\n },\n controller: {\n edit: '編集',\n unlink: 'リンク解除',\n remove: '削除',\n insertRowAbove: '上に行を挿入',\n insertRowBelow: '下に行を挿入',\n deleteRow: '行の削除',\n insertColumnBefore: '左に列を挿入',\n insertColumnAfter: '右に列を挿入',\n deleteColumn: '列を削除する',\n fixedColumnWidth: '固定列幅',\n resize100: '100% サイズ',\n resize75: '75% サイズ',\n resize50: '50% サイズ',\n resize25: '25% サイズ',\n autoSize: '自動サイズ',\n mirrorHorizontal: '左右反転',\n mirrorVertical: '上下反転',\n rotateLeft: '左に回転',\n rotateRight: '右に回転',\n maxSize: '最大サイズ',\n minSize: '最小サイズ',\n tableHeader: '表のヘッダー',\n mergeCells: 'セルの結合',\n splitCells: 'セルを分割',\n HorizontalSplit: '横分割',\n VerticalSplit: '垂直分割'\n },\n menu: {\n spaced: '文字間隔',\n bordered: '境界線',\n neon: 'ネオン',\n translucent: '半透明',\n shadow: '影',\n code: 'コード'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'ja', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'ko',\n toolbar: {\n default: '기본값',\n save: '저장',\n font: '글꼴',\n formats: '문단 형식',\n fontSize: '크기',\n bold: '굵게',\n underline: '밑줄',\n italic: '기울임',\n strike: '취소선',\n subscript: '아래 첨자',\n superscript: '위 첨자',\n removeFormat: '형식 제거',\n fontColor: '글자색',\n hiliteColor: '배경색',\n indent: '들여쓰기',\n outdent: '내어쓰기',\n align: '정렬',\n alignLeft: '왼쪽 정렬',\n alignRight: '오른쪽 정렬',\n alignCenter: '가운데 정렬',\n alignJustify: '양쪽 정렬',\n list: '리스트',\n orderList: '숫자형 리스트',\n unorderList: '원형 리스트',\n horizontalRule: '가로 줄 삽입',\n hr_solid: '실선',\n hr_dotted: '점선',\n hr_dashed: '대시',\n table: '테이블',\n link: '링크',\n math: '수식',\n image: '이미지',\n video: '동영상',\n audio: '오디오',\n fullScreen: '전체 화면',\n showBlocks: '블록 보기',\n codeView: 'HTML 편집',\n undo: '실행 취소',\n redo: '다시 실행',\n preview: '미리보기',\n print: '인쇄',\n tag_p: '본문',\n tag_div: '기본 (DIV)',\n tag_h: '제목',\n tag_blockquote: '인용문',\n tag_pre: '코드',\n template: '템플릿',\n lineHeight: '줄 높이',\n paragraphStyle: '문단 스타일',\n textStyle: '글자 스타일',\n imageGallery: '이미지 갤러리',\n dir_ltr: '왼쪽에서 오른쪽',\n dir_rtl: '오른쪽에서 왼쪽',\n mention: '멘션'\n },\n dialogBox: {\n linkBox: {\n title: '링크 삽입',\n url: '인터넷 주소',\n text: '화면 텍스트',\n newWindowCheck: '새창으로 열기',\n downloadLinkCheck: '다운로드 링크',\n bookmark: '북마크'\n },\n mathBox: {\n title: '수식',\n inputLabel: '수학적 표기법',\n fontSizeLabel: '글자 크기',\n previewLabel: '미리보기'\n },\n imageBox: {\n title: '이미지 삽입',\n file: '파일 선택',\n url: '이미지 주소',\n altText: '대체 문자열'\n },\n videoBox: {\n title: '동영상 삽입',\n file: '파일 선택',\n url: '미디어 임베드 주소, 유튜브/비메오'\n },\n audioBox: {\n title: '오디오 삽입',\n file: '파일 선택',\n url: '오디오 파일 주소'\n },\n browser: {\n tags: '태그',\n search: '검색',\n },\n caption: '설명 넣기',\n close: '닫기',\n submitButton: '확인',\n revertButton: '되돌리기',\n proportion: '비율 맞춤',\n basic: '기본',\n left: '왼쪽',\n right: '오른쪽',\n center: '가운데',\n width: '가로',\n height: '세로',\n size: '크기',\n ratio: '비율'\n },\n controller: {\n edit: '편집',\n unlink: '링크 해제',\n remove: '삭제',\n insertRowAbove: '위에 행 삽입',\n insertRowBelow: '아래에 행 삽입',\n deleteRow: '행 삭제',\n insertColumnBefore: '왼쪽에 열 삽입',\n insertColumnAfter: '오른쪽에 열 삽입',\n deleteColumn: '열 삭제',\n fixedColumnWidth: '고정 된 열 너비',\n resize100: '100% 크기',\n resize75: '75% 크기',\n resize50: '50% 크기',\n resize25: '25% 크기',\n autoSize: '자동 크기',\n mirrorHorizontal: '좌우 반전',\n mirrorVertical: '상하 반전',\n rotateLeft: '왼쪽으로 회전',\n rotateRight: '오른쪽으로 회전',\n maxSize: '최대화',\n minSize: '최소화',\n tableHeader: '테이블 제목',\n mergeCells: '셀 병합',\n splitCells: '셀 분할',\n HorizontalSplit: '가로 분할',\n VerticalSplit: '세로 분할'\n },\n menu: {\n spaced: '글자 간격',\n bordered: '경계선',\n neon: '네온',\n translucent: '반투명',\n shadow: '그림자',\n code: '코드'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'ko', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'lv',\n toolbar: {\n default: 'Noklusējuma',\n save: 'Saglabāt',\n font: 'Fonts',\n formats: 'Formāti',\n fontSize: 'Fonta lielums',\n bold: 'Treknraksts',\n underline: 'Pasvītrot',\n italic: 'Slīpraksts',\n strike: 'Pārsvītrojums',\n subscript: 'Apakšraksts',\n superscript: 'Augšraksts',\n removeFormat: 'Noņemt formātu',\n fontColor: 'Fonta krāsa',\n hiliteColor: 'Teksta iezīmēšanas krāsa',\n indent: 'Palielināt atkāpi',\n outdent: 'Samazināt atkāpi',\n align: 'Izlīdzināt',\n alignLeft: 'Līdzināt pa kreisi',\n alignRight: 'Līdzināt pa labi',\n alignCenter: 'Centrēt',\n alignJustify: 'Taisnot',\n list: 'Saraksts',\n orderList: 'Numerācija',\n unorderList: 'Aizzimes',\n horizontalRule: 'Horizontāla līnija',\n hr_solid: 'Ciets',\n hr_dotted: 'Punktiņš',\n hr_dashed: 'Braša',\n table: 'Tabula',\n link: 'Saite',\n math: 'Matemātika',\n image: 'Attēls',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Pilnekrāna režīms',\n showBlocks: 'Parādit blokus',\n codeView: 'Koda skats',\n undo: 'Atsaukt',\n redo: 'Atkārtot',\n preview: 'Priekšskatījums',\n print: 'Drukāt',\n tag_p: 'Paragrāfs',\n tag_div: 'Normāli (DIV)',\n tag_h: 'Galvene',\n tag_blockquote: 'Citāts',\n tag_pre: 'Kods',\n template: 'Veidne',\n lineHeight: 'Līnijas augstums',\n paragraphStyle: 'Paragrāfa stils',\n textStyle: 'Teksta stils',\n imageGallery: 'Attēlu galerija',\n dir_ltr: 'No kreisās uz labo',\n dir_rtl: 'No labās uz kreiso',\n mention: 'Pieminēt'\n },\n dialogBox: {\n linkBox: {\n title: 'Ievietot saiti',\n url: 'Saites URL',\n text: 'Parādāmais teksts',\n newWindowCheck: 'Atvērt jaunā logā',\n downloadLinkCheck: 'Lejupielādes saite',\n bookmark: 'Grāmatzīme'\n },\n mathBox: {\n title: 'Matemātika',\n inputLabel: 'Matemātiskā notācija',\n fontSizeLabel: 'Fonta lielums',\n previewLabel: 'Priekšskatījums'\n },\n imageBox: {\n title: 'Ievietot attēlu',\n file: 'Izvēlieties no failiem',\n url: 'Attēla URL',\n altText: 'Alternatīvs teksts'\n },\n videoBox: {\n title: 'Ievietot video',\n file: 'Izvēlieties no failiem',\n url: 'Multivides iegulšanas URL, YouTube/Vimeo'\n },\n audioBox: {\n title: 'Ievietot audio',\n file: 'Izvēlieties no failiem',\n url: 'Audio URL'\n },\n browser: {\n tags: 'Tagi',\n search: 'Meklēt'\n },\n caption: 'Ievietot aprakstu',\n close: 'Aizvērt',\n submitButton: 'Iesniegt',\n revertButton: 'Atjaunot',\n proportion: 'Ierobežo proporcijas',\n basic: 'Nav iesaiņojuma',\n left: 'Pa kreisi',\n right: 'Labajā pusē',\n center: 'Centrs',\n width: 'Platums',\n height: 'Augstums',\n size: 'Izmērs',\n ratio: 'Attiecība'\n },\n controller: {\n edit: 'Rediģēt',\n unlink: 'Atsaistīt',\n remove: 'Noņemt',\n insertRowAbove: 'Ievietot rindu virs',\n insertRowBelow: 'Ievietot rindu zemāk',\n deleteRow: 'Dzēst rindu',\n insertColumnBefore: 'Ievietot kolonnu pirms',\n insertColumnAfter: 'Ievietot kolonnu aiz',\n deleteColumn: 'Dzēst kolonnu',\n fixColumnWidth: 'Fiksēts kolonnas platums',\n resize100: 'Mainīt izmēru 100%',\n resize75: 'Mainīt izmēru 75%',\n resize50: 'Mainīt izmēru 50%',\n resize25: 'Mainīt izmēru 25%',\n autoSize: 'Automātiskais izmērs',\n mirrorHorizontal: 'Spogulis, horizontāls',\n mirrorVertical: 'Spogulis, vertikāls',\n rotateLeft: 'Pagriezt pa kreisi',\n rotateRight: 'Pagriezt pa labi',\n maxSize: 'Maksimālais izmērs',\n minSize: 'Minimālais izmērs',\n tableHeader: 'Tabulas galvene',\n mergeCells: 'Apvienot šūnas',\n splitCells: 'Sadalīt šūnas',\n HorizontalSplit: 'Horizontāls sadalījums',\n VerticalSplit: 'Vertikāls sadalījums'\n },\n menu: {\n spaced: 'Ar atstarpi',\n bordered: 'Robežojās',\n neon: 'Neona',\n translucent: 'Caurspīdīgs',\n shadow: 'Ēna',\n code: 'Kods'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'lv', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'nl',\n toolbar: {\n default: 'Standaard',\n save: 'Opslaan',\n font: 'Lettertype',\n formats: 'Formaten',\n fontSize: 'Lettergrootte',\n bold: 'Vetgedrukt',\n underline: 'Onderstrepen',\n italic: 'Cursief',\n strike: 'Doorstrepen',\n subscript: 'Subscript',\n superscript: 'Superscript',\n removeFormat: 'Opmaak verwijderen',\n fontColor: 'Tekstkleur',\n hiliteColor: 'Tekst markeren',\n indent: 'Inspringen',\n outdent: 'Inspringen ongedaan maken',\n align: 'Uitlijnen',\n alignLeft: 'Links uitlijnen',\n alignRight: 'Rechts uitlijnen',\n alignCenter: 'In het midden uitlijnen',\n alignJustify: 'Uitvullen',\n list: 'Lijst',\n orderList: 'Geordende lijst',\n unorderList: 'Ongeordende lijst',\n horizontalRule: 'Horizontale regel',\n hr_solid: 'Standaard',\n hr_dotted: 'Gestippeld',\n hr_dashed: 'Gestreept',\n table: 'Tabel',\n link: 'Link',\n math: 'Wiskunde',\n image: 'Afbeelding',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Volledig scherm',\n showBlocks: 'Blokken tonen',\n codeView: 'Broncode weergeven',\n undo: 'Ongedaan maken',\n redo: 'Ongedaan maken herstellen',\n preview: 'Voorbeeldweergave',\n print: 'Printen',\n tag_p: 'Alinea',\n tag_div: 'Normaal (div)',\n tag_h: 'Kop',\n tag_blockquote: 'Citaat',\n tag_pre: 'Code',\n template: 'Sjabloon',\n lineHeight: 'Lijnhoogte',\n paragraphStyle: 'Alineastijl',\n textStyle: 'Tekststijl',\n imageGallery: 'Galerij',\n dir_ltr: 'Van links naar rechts',\n dir_rtl: 'Rechts naar links',\n mention: 'Vermelding'\n },\n dialogBox: {\n linkBox: {\n title: 'Link invoegen',\n url: 'URL',\n text: 'Tekst van de link',\n newWindowCheck: 'In een nieuw tabblad openen',\n downloadLinkCheck: 'Downloadlink',\n bookmark: 'Bladwijzer'\n },\n mathBox: {\n title: 'Wiskunde',\n inputLabel: 'Wiskundige notatie',\n fontSizeLabel: 'Lettergrootte',\n previewLabel: 'Voorbeeld'\n },\n imageBox: {\n title: 'Afbeelding invoegen',\n file: 'Selecteer een bestand van uw apparaat',\n url: 'URL',\n altText: 'Alt-tekst'\n },\n videoBox: {\n title: 'Video invoegen',\n file: 'Selecteer een bestand van uw apparaat',\n url: 'Embedded URL (YouTube/Vimeo)'\n },\n audioBox: {\n title: 'Audio invoegen',\n file: 'Selecteer een bestand van uw apparaat',\n url: 'URL'\n },\n browser: {\n tags: 'Tags',\n search: 'Zoeken',\n },\n caption: 'Omschrijving toevoegen',\n close: 'Sluiten',\n submitButton: 'Toepassen',\n revertButton: 'Standaardwaarden herstellen',\n proportion: 'Verhouding behouden',\n basic: 'Standaard',\n left: 'Links',\n right: 'Rechts',\n center: 'Midden',\n width: 'Breedte',\n height: 'Hoogte',\n size: 'Grootte',\n ratio: 'Verhouding'\n },\n controller: {\n edit: 'Bewerken',\n unlink: 'Ontkoppelen',\n remove: 'Verwijderen',\n insertRowAbove: 'Rij hierboven invoegen',\n insertRowBelow: 'Rij hieronder invoegen',\n deleteRow: 'Rij verwijderen',\n insertColumnBefore: 'Kolom links invoegen',\n insertColumnAfter: 'Kolom rechts invoegen',\n deleteColumn: 'Kolom verwijderen',\n fixedColumnWidth: 'Vaste kolombreedte',\n resize100: 'Formaat wijzigen: 100%',\n resize75: 'Formaat wijzigen: 75%',\n resize50: 'Formaat wijzigen: 50%',\n resize25: 'Formaat wijzigen: 25%',\n autoSize: 'Automatische grootte',\n mirrorHorizontal: 'Horizontaal spiegelen',\n mirrorVertical: 'Verticaal spiegelen',\n rotateLeft: 'Naar links draaien',\n rotateRight: 'Naar rechts draaien',\n maxSize: 'Maximale grootte',\n minSize: 'Minimale grootte',\n tableHeader: 'Tabelkoppen',\n mergeCells: 'Cellen samenvoegen',\n splitCells: 'Cellen splitsen',\n HorizontalSplit: 'Horizontaal splitsen',\n VerticalSplit: 'Verticaal splitsen'\n },\n menu: {\n spaced: 'Uit elkaar',\n bordered: 'Omlijnd',\n neon: 'Neon',\n translucent: 'Doorschijnend',\n shadow: 'Schaduw',\n code: 'Code'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'nl', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'pl',\n toolbar: {\n default: 'Domyślne',\n save: 'Zapisz',\n font: 'Czcionka',\n formats: 'Formaty',\n fontSize: 'Rozmiar',\n bold: 'Pogrubienie',\n underline: 'Podkreślenie',\n italic: 'Kursywa',\n strike: 'Przekreślenie',\n subscript: 'Indeks dolny',\n superscript: 'Indeks górny',\n removeFormat: 'Wyczyść formatowanie',\n fontColor: 'Kolor tekstu',\n hiliteColor: 'Kolor tła tekstu',\n indent: 'Zwiększ wcięcie',\n outdent: 'Zmniejsz wcięcie',\n align: 'Wyrównaj',\n alignLeft: 'Do lewej',\n alignRight: 'Do prawej',\n alignCenter: 'Do środka',\n alignJustify: 'Wyjustuj',\n list: 'Lista',\n orderList: 'Lista numerowana',\n unorderList: 'Lista wypunktowana',\n horizontalRule: 'Pozioma linia',\n hr_solid: 'Ciągła',\n hr_dotted: 'Kropkowana',\n hr_dashed: 'Przerywana',\n table: 'Tabela',\n link: 'Odnośnik',\n math: 'Matematyczne',\n image: 'Obraz',\n video: 'Wideo',\n audio: 'Audio',\n fullScreen: 'Pełny ekran',\n showBlocks: 'Pokaż bloki',\n codeView: 'Widok kodu',\n undo: 'Cofnij',\n redo: 'Ponów',\n preview: 'Podgląd', \n print: 'Drukuj',\n tag_p: 'Akapit',\n tag_div: 'Blok (DIV)',\n tag_h: 'Nagłówek H',\n tag_blockquote: 'Cytat',\n tag_pre: 'Kod',\n template: 'Szablon',\n lineHeight: 'Odstęp między wierszami',\n paragraphStyle: 'Styl akapitu',\n textStyle: 'Styl tekstu',\n imageGallery: 'Galeria obrazów',\n dir_ltr: 'Od lewej do prawej',\n dir_rtl: 'Od prawej do lewej',\n mention: 'Wzmianka'\n },\n dialogBox: {\n linkBox: {\n title: 'Wstaw odnośnik',\n url: 'Adres URL',\n text: 'Tekst do wyświetlenia',\n newWindowCheck: 'Otwórz w nowym oknie',\n downloadLinkCheck: 'Link do pobrania',\n bookmark: 'Zakładka'\n },\n mathBox: {\n title: 'Matematyczne',\n inputLabel: 'Zapis matematyczny',\n fontSizeLabel: 'Rozmiar czcionki',\n previewLabel: 'Podgląd'\n },\n imageBox: {\n title: 'Wstaw obraz',\n file: 'Wybierz plik',\n url: 'Adres URL obrazka',\n altText: 'Tekst alternatywny'\n },\n videoBox: {\n title: 'Wstaw wideo',\n file: 'Wybierz plik',\n url: 'Adres URL video, np. YouTube/Vimeo'\n },\n audioBox: {\n title: 'Wstaw audio',\n file: 'Wybierz plik',\n url: 'Adres URL audio'\n },\n browser: {\n tags: 'Tagi',\n search: 'Szukaj',\n },\n caption: 'Wstaw opis',\n close: 'Zamknij',\n submitButton: 'Zatwierdź',\n revertButton: 'Cofnij zmiany',\n proportion: 'Ogranicz proporcje',\n basic: 'Bez wyrównania',\n left: 'Do lewej',\n right: 'Do prawej',\n center: 'Do środka',\n width: 'Szerokość',\n height: 'Wysokość',\n size: 'Rozmiar',\n ratio: 'Proporcje'\n },\n controller: {\n edit: 'Edycja',\n unlink: 'Usuń odnośnik',\n remove: 'Usuń',\n insertRowAbove: 'Wstaw wiersz powyżej',\n insertRowBelow: 'Wstaw wiersz poniżej',\n deleteRow: 'Usuń wiersz',\n insertColumnBefore: 'Wstaw kolumnę z lewej',\n insertColumnAfter: 'Wstaw kolumnę z prawej',\n deleteColumn: 'Usuń kolumnę',\n fixedColumnWidth: 'Stała szerokość kolumny',\n resize100: 'Zmień rozmiar - 100%',\n resize75: 'Zmień rozmiar - 75%',\n resize50: 'Zmień rozmiar - 50%',\n resize25: 'Zmień rozmiar - 25%',\n autoSize: 'Rozmiar automatyczny',\n mirrorHorizontal: 'Odbicie lustrzane w poziomie',\n mirrorVertical: 'Odbicie lustrzane w pionie',\n rotateLeft: 'Obróć w lewo',\n rotateRight: 'Obróć w prawo',\n maxSize: 'Maksymalny rozmiar',\n minSize: 'Minimalny rozmiar',\n tableHeader: 'Nagłówek tabeli',\n mergeCells: 'Scal komórki',\n splitCells: 'Podziel komórki',\n HorizontalSplit: 'Podział poziomy',\n VerticalSplit: 'Podział pionowy'\n },\n menu: {\n spaced: 'Rozstawiony',\n bordered: 'Z obwódką',\n neon: 'Neon',\n translucent: 'Półprzezroczysty',\n shadow: 'Cień',\n code: 'Kod'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'pl', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * Brazilian Portuguese translation by lpeil github\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'pt_br',\n toolbar: {\n default: 'Padrão',\n save: 'Salvar',\n font: 'Fonte',\n formats: 'Formatos',\n fontSize: 'Tamanho',\n bold: 'Negrito',\n underline: 'Sublinhado',\n italic: 'Itálico',\n strike: 'Riscado',\n subscript: 'Subescrito',\n superscript: 'Sobrescrito',\n removeFormat: 'Remover Formatação',\n fontColor: 'Cor da Fonte',\n hiliteColor: 'Cor de destaque',\n indent: 'Recuo',\n outdent: 'Avançar',\n align: 'Alinhar',\n alignLeft: 'Alinhar à esquerda',\n alignRight: 'Alinhar à direita',\n alignCenter: 'Centralizar',\n alignJustify: 'Justificar',\n list: 'Lista',\n orderList: 'Lista ordenada',\n unorderList: 'Lista desordenada',\n horizontalRule: 'Linha horizontal',\n hr_solid: 'sólida',\n hr_dotted: 'pontilhada',\n hr_dashed: 'tracejada',\n table: 'Tabela',\n link: 'Link',\n math: 'Matemática',\n image: 'Imagem',\n video: 'Vídeo',\n audio: 'Áudio',\n fullScreen: 'Tela cheia',\n showBlocks: 'Mostrar blocos',\n codeView: 'Mostrar códigos',\n undo: 'Voltar',\n redo: 'Refazer',\n preview: 'Prever',\n print: 'Imprimir',\n tag_p: 'Paragráfo',\n tag_div: '(DIV) Normal',\n tag_h: 'Cabeçalho',\n tag_blockquote: 'Citar',\n tag_pre: 'Código',\n template: 'Modelo',\n lineHeight: 'Altura da linha',\n paragraphStyle: 'Estilo do parágrafo',\n textStyle: 'Estilo do texto',\n imageGallery: 'Galeria de imagens',\n dir_ltr: 'Esquerda para direita',\n dir_rtl: 'Direita para esquerda',\n mention: 'Menção'\n },\n dialogBox: {\n linkBox: {\n title: 'Inserir link',\n url: 'URL para link',\n text: 'Texto a mostrar',\n newWindowCheck: 'Abrir em nova guia',\n downloadLinkCheck: 'Link para Download',\n bookmark: 'marcar páginas'\n },\n mathBox: {\n title: 'Matemática',\n inputLabel: 'Notação matemática',\n fontSizeLabel: 'Tamanho',\n previewLabel: 'Prever'\n },\n imageBox: {\n title: 'Inserir imagens',\n file: 'Selecionar arquivos',\n url: 'URL da imagem',\n altText: 'Texto alternativo'\n },\n videoBox: {\n title: 'Inserir vídeo',\n file: 'Selecionar arquivos',\n url: 'URL do YouTube/Vimeo'\n },\n audioBox: {\n title: 'Inserir áudio',\n file: 'Selecionar arquivos',\n url: 'URL da áudio'\n },\n browser: {\n tags: 'Tag',\n search: 'Procurar',\n },\n caption: 'Inserir descrição',\n close: 'Fechar',\n submitButton: 'Enviar',\n revertButton: 'Reverter',\n proportion: 'Restringir proporções',\n basic: 'Básico',\n left: 'Esquerda',\n right: 'Direita',\n center: 'Centro',\n width: 'Largura',\n height: 'Altura',\n size: 'Tamanho',\n ratio: 'Proporções'\n },\n controller: {\n edit: 'Editar',\n unlink: 'Remover link',\n remove: 'Remover',\n insertRowAbove: 'Inserir linha acima',\n insertRowBelow: 'Inserir linha abaixo',\n deleteRow: 'Deletar linha',\n insertColumnBefore: 'Inserir coluna antes',\n insertColumnAfter: 'Inserir coluna depois',\n deleteColumn: 'Deletar coluna',\n fixedColumnWidth: 'Largura fixa da coluna',\n resize100: 'Redimensionar para 100%',\n resize75: 'Redimensionar para 75%',\n resize50: 'Redimensionar para 50%',\n resize25: 'Redimensionar para 25%',\n autoSize: 'Tamanho automático',\n mirrorHorizontal: 'Espelho, Horizontal',\n mirrorVertical: 'Espelho, Vertical',\n rotateLeft: 'Girar para esquerda',\n rotateRight: 'Girar para direita',\n maxSize: 'Tam máx',\n minSize: 'Tam mín',\n tableHeader: 'Cabeçalho da tabela',\n mergeCells: 'Mesclar células',\n splitCells: 'Dividir células',\n HorizontalSplit: 'Divisão horizontal',\n VerticalSplit: 'Divisão vertical'\n },\n menu: {\n spaced: 'Espaçado',\n bordered: 'Com borda',\n neon: 'Neon',\n translucent: 'Translúcido',\n shadow: 'Sombreado',\n code: 'Código'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'pt_br', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'ro',\n toolbar: {\n default: 'Default',\n save: 'Salvează',\n font: 'Font',\n formats: 'Format',\n fontSize: 'Dimensiune',\n bold: 'Îngroșat',\n underline: 'Subliniat',\n italic: 'Înclinat',\n strike: 'Tăiat',\n subscript: 'Subscript',\n superscript: 'Superscript',\n removeFormat: 'Șterge formatare',\n fontColor: 'Culoare font',\n hiliteColor: 'Culoare de evidențiere',\n indent: 'Indentează',\n outdent: 'Fără indentare',\n align: 'Aliniere',\n alignLeft: 'Aliniere la stânga',\n alignRight: 'Aliniere la dreapta',\n alignCenter: 'Aliniere la centru',\n alignJustify: 'Aliniere stânga - dreapta',\n list: 'Listă',\n orderList: 'Listă ordonată',\n unorderList: 'Listă neordonată',\n horizontalRule: 'Linie orizontală',\n hr_solid: 'Solid',\n hr_dotted: 'Punctat',\n hr_dashed: 'Punctate',\n table: 'Tabel',\n link: 'Link',\n math: 'Matematică',\n image: 'Imagine',\n video: 'Video',\n audio: 'Audio',\n fullScreen: 'Tot ecranul',\n showBlocks: 'Arată blocuri',\n codeView: 'Vizualizare cod',\n undo: 'Anulează',\n redo: 'Refă',\n preview: 'Previzualizare',\n print: 'printează',\n tag_p: 'Paragraf',\n tag_div: 'Normal (DIV)',\n tag_h: 'Antet',\n tag_blockquote: 'Quote',\n tag_pre: 'Citat',\n template: 'Template',\n lineHeight: 'Înălțime linie',\n paragraphStyle: 'Stil paragraf',\n textStyle: 'Stil text',\n imageGallery: 'Galerie de imagini',\n dir_ltr: 'De la stânga la dreapta',\n dir_rtl: 'De la dreapta la stanga',\n mention: 'Mentiune'\n },\n dialogBox: {\n linkBox: {\n title: 'Inserează Link',\n url: 'Adresă link',\n text: 'Text de afișat',\n newWindowCheck: 'Deschide în fereastră nouă',\n downloadLinkCheck: 'Link de descărcare',\n bookmark: 'Marcaj'\n },\n mathBox: {\n title: 'Matematică',\n inputLabel: 'Notație matematică',\n fontSizeLabel: 'Dimensiune font',\n previewLabel: 'Previzualizare'\n },\n imageBox: {\n title: 'Inserează imagine',\n file: 'Selectează',\n url: 'URL imagine',\n altText: 'text alternativ'\n },\n videoBox: {\n title: 'Inserează video',\n file: 'Selectează',\n url: 'Include URL, youtube/vimeo'\n },\n audioBox: {\n title: 'Inserează Audio',\n file: 'Selectează',\n url: 'URL Audio'\n },\n browser: {\n tags: 'Etichete',\n search: 'Căutareim',\n },\n caption: 'Inserează descriere',\n close: 'Închide',\n submitButton: 'Salvează',\n revertButton: 'Revenire',\n proportion: 'Constrânge proporțiile',\n basic: 'De bază',\n left: 'Stânga',\n right: 'Dreapta',\n center: 'Centru',\n width: 'Lățime',\n height: 'Înălțime',\n size: 'Dimensiune',\n ratio: 'Ratie'\n },\n controller: {\n edit: 'Editează',\n unlink: 'Scoate link',\n remove: 'Elimină',\n insertRowAbove: 'Inserează rând deasupra',\n insertRowBelow: 'Inserează rând dedesupt',\n deleteRow: 'Șterge linie',\n insertColumnBefore: 'Inserează coloană înainte',\n insertColumnAfter: 'Inserează coloană după',\n deleteColumn: 'Șterge coloană',\n fixedColumnWidth: 'Lățime fixă coloană',\n resize100: 'Redimensionare 100%',\n resize75: 'Redimensionare 75%',\n resize50: 'Redimensionare 50%',\n resize25: 'Redimensionare 25%',\n autoSize: 'Dimensiune automată',\n mirrorHorizontal: 'Oglindă, orizontal',\n mirrorVertical: 'Oglindă, vertical',\n rotateLeft: 'Rotește la stânga',\n rotateRight: 'Rotește la dreapta',\n maxSize: 'Dimensiune maximă',\n minSize: 'Dimensiune minimă',\n tableHeader: 'Antet tabel',\n mergeCells: 'Îmbină celule',\n splitCells: 'Divizează celule',\n HorizontalSplit: 'Despicare orizontală',\n VerticalSplit: 'Despicare verticală'\n },\n menu: {\n spaced: 'Spațiat',\n bordered: 'Mărginit',\n neon: 'Neon',\n translucent: 'Translucent',\n shadow: 'Umbră',\n code: 'Citat'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'ro', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'ru',\n toolbar: {\n default: 'По умолчанию',\n save: 'Сохранить',\n font: 'Шрифт',\n formats: 'Стиль абзаца',\n fontSize: 'Размер шрифта',\n bold: 'Полужирный',\n underline: 'Подчёркнутый',\n italic: 'Курсив',\n strike: 'Зачеркнутый',\n subscript: 'Нижний индекс',\n superscript: 'Верхний индекс',\n removeFormat: 'Очистить форматирование',\n fontColor: 'Цвет текста',\n hiliteColor: 'Цвет фона',\n indent: 'Увеличить отступ',\n outdent: 'Уменьшить отступ',\n align: 'Выравнивание',\n alignLeft: 'Слева',\n alignRight: 'Справа',\n alignCenter: 'По центру',\n alignJustify: 'По ширине',\n list: 'Списки',\n orderList: 'Нумерованный',\n unorderList: 'Маркированный',\n horizontalRule: 'Горизонтальная линия',\n hr_solid: 'Сплошная',\n hr_dotted: 'Пунктир',\n hr_dashed: 'Штриховая',\n table: 'Таблица',\n link: 'Ссылка',\n math: 'математический',\n image: 'Изображение',\n video: 'Видео',\n audio: 'Аудио',\n fullScreen: 'Полный экран',\n showBlocks: 'Блочный вид',\n codeView: 'Редактировать HTML',\n undo: 'Отменить',\n redo: 'Вернуть',\n preview: 'Предварительный просмотр',\n print: 'Печать',\n tag_p: 'Текст',\n tag_div: 'Базовый',\n tag_h: 'Заголовок',\n tag_blockquote: 'Цитата',\n tag_pre: 'Код',\n template: 'Шаблон',\n lineHeight: 'Высота линии',\n paragraphStyle: 'Стиль абзаца',\n textStyle: 'Стиль текста',\n imageGallery: 'Галерея',\n dir_ltr: 'Слева направо',\n dir_rtl: 'Справа налево',\n mention: 'Упоминание'\n },\n dialogBox: {\n linkBox: {\n title: 'Вставить ссылку',\n url: 'Ссылка',\n text: 'Текст',\n newWindowCheck: 'Открывать в новом окне',\n downloadLinkCheck: 'Ссылка для скачивания',\n bookmark: 'Закладка'\n },\n mathBox: {\n title: 'математический',\n inputLabel: 'Математическая запись',\n fontSizeLabel: 'Кегль',\n previewLabel: 'Предварительный просмотр'\n },\n imageBox: {\n title: 'Вставить изображение',\n file: 'Выберите файл',\n url: 'Адрес изображения',\n altText: 'Текстовое описание изображения'\n },\n videoBox: {\n title: 'Вставить видео',\n file: 'Выберите файл',\n url: 'Ссылка на видео, Youtube,Vimeo'\n },\n audioBox: {\n title: 'Вставить аудио',\n file: 'Выберите файл',\n url: 'Адрес аудио'\n },\n browser: {\n tags: 'Теги',\n search: 'Поиск',\n },\n caption: 'Добавить подпись',\n close: 'Закрыть',\n submitButton: 'Подтвердить',\n revertButton: 'Сбросить',\n proportion: 'Сохранить пропорции',\n basic: 'Без обтекания',\n left: 'Слева',\n right: 'Справа',\n center: 'По центру',\n width: 'Ширина',\n height: 'Высота',\n size: 'Размер',\n ratio: 'Соотношение'\n },\n controller: {\n edit: 'Изменить',\n unlink: 'Убрать ссылку',\n remove: 'Удалить',\n insertRowAbove: 'Вставить строку выше',\n insertRowBelow: 'Вставить строку ниже',\n deleteRow: 'Удалить строку',\n insertColumnBefore: 'Вставить столбец слева',\n insertColumnAfter: 'Вставить столбец справа',\n deleteColumn: 'Удалить столбец',\n fixedColumnWidth: 'Фиксированная ширина столбца',\n resize100: 'Размер 100%',\n resize75: 'Размер 75%',\n resize50: 'Размер 50%',\n resize25: 'Размер 25%',\n autoSize: 'Авто размер',\n mirrorHorizontal: 'Отразить по горизонтали',\n mirrorVertical: 'Отразить по вертикали',\n rotateLeft: 'Повернуть против часовой стрелки',\n rotateRight: 'Повернуть по часовой стрелке',\n maxSize: 'Ширина по размеру страницы',\n minSize: 'Ширина по содержимому',\n tableHeader: 'Строка заголовков',\n mergeCells: 'Объединить ячейки',\n splitCells: 'Разделить ячейку',\n HorizontalSplit: 'Разделить горизонтально',\n VerticalSplit: 'Разделить вертикально'\n },\n menu: {\n spaced: 'интервал',\n bordered: 'Граничная Линия',\n neon: 'неон',\n translucent: 'полупрозрачный',\n shadow: 'Тень',\n code: 'Код'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'ru', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * \n * Swedish translation by olehrb at github or gmail\n *\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'se',\n toolbar: {\n default: 'Default',\n save: 'Spara',\n font: 'Typsnitt',\n formats: 'Format',\n fontSize: 'Textstorlek',\n bold: 'Fet',\n underline: 'Understruket',\n italic: 'Kursiv',\n strike: 'Överstruket',\n subscript: 'Sänkt skrift',\n superscript: 'Höjd skrift',\n removeFormat: 'Ta bort formattering',\n fontColor: 'Textfärg',\n hiliteColor: 'Bakgrundsfärg',\n indent: 'Minska indrag',\n outdent: 'Öka indrag',\n align: 'Justering',\n alignLeft: 'Vänsterjustering',\n alignRight: 'Högerjustering',\n alignCenter: 'Mittenjusteirng',\n alignJustify: 'Justera indrag',\n list: 'Listor',\n orderList: 'Numrerad lista',\n unorderList: 'Oordnad lista',\n horizontalRule: 'Horisontell linje',\n hr_solid: 'Solid',\n hr_dotted: 'Punkter',\n hr_dashed: 'Prickad',\n table: 'Tabell',\n link: 'Länk',\n math: 'Math',\n image: 'Bild',\n video: 'Video',\n audio: 'Ljud',\n fullScreen: 'Helskärm',\n showBlocks: 'Visa block',\n codeView: 'Visa koder',\n undo: 'Ångra',\n redo: 'Gör om',\n preview: 'Preview',\n print: 'Print',\n tag_p: 'Paragraf',\n tag_div: 'Normal (DIV)',\n tag_h: 'Rubrik',\n tag_blockquote: 'Citer',\n tag_pre: 'Kod',\n template: 'Mall',\n lineHeight: 'Linjehöjd',\n paragraphStyle: 'Stil på stycke',\n textStyle: 'Textstil',\n imageGallery: 'Bildgalleri',\n dir_ltr: 'Vänster till höger',\n dir_rtl: 'Höger till vänster',\n mention: 'Namn'\n },\n dialogBox: {\n linkBox: {\n title: 'Lägg till länk',\n url: 'URL till länk',\n text: 'Länktext',\n newWindowCheck: 'Öppna i nytt fönster',\n downloadLinkCheck: 'Nedladdningslänk',\n bookmark: 'Bokmärke'\n },\n mathBox: {\n title: 'Math',\n inputLabel: 'Matematisk notation',\n fontSizeLabel: 'Textstorlek',\n previewLabel: 'Preview'\n },\n imageBox: {\n title: 'Lägg till bild',\n file: 'Lägg till från fil',\n url: 'Lägg till från URL',\n altText: 'Alternativ text'\n },\n videoBox: {\n title: 'Lägg till video',\n file: 'Lägg till från fil',\n url: 'Bädda in video / YouTube,Vimeo'\n },\n audioBox: {\n title: 'Lägg till ljud',\n file: 'Lägg till från fil',\n url: 'Lägg till från URL'\n },\n browser: {\n tags: 'Tags',\n search: 'Sök',\n },\n caption: 'Lägg till beskrivning',\n close: 'Stäng',\n submitButton: 'Skicka',\n revertButton: 'Återgå',\n proportion: 'Spara proportioner',\n basic: 'Basic',\n left: 'Vänster',\n right: 'Höger',\n center: 'Center',\n width: 'Bredd',\n height: 'Höjd',\n size: 'Storlek',\n ratio: 'Förhållande'\n },\n controller: {\n edit: 'Redigera',\n unlink: 'Ta bort länk',\n remove: 'Ta bort',\n insertRowAbove: 'Lägg till rad över',\n insertRowBelow: 'Lägg till rad under',\n deleteRow: 'Ta bort rad',\n insertColumnBefore: 'Lägg till kolumn före',\n insertColumnAfter: 'Lägg till kolumn efter',\n deleteColumn: 'Ta bort kolumner',\n fixedColumnWidth: 'Fast kolumnbredd',\n resize100: 'Förstora 100%',\n resize75: 'Förstora 75%',\n resize50: 'Förstora 50%',\n resize25: 'Förstora 25%',\n autoSize: 'Autostorlek',\n mirrorHorizontal: 'Spegling, horisontell',\n mirrorVertical: 'Spegling, vertikal',\n rotateLeft: 'Rotera till vänster',\n rotateRight: 'Rotera till höger',\n maxSize: 'Maxstorlek',\n minSize: 'Minsta storlek',\n tableHeader: 'Rubrik tabell',\n mergeCells: 'Sammanfoga celler (merge)',\n splitCells: 'Separera celler',\n HorizontalSplit: 'Separera horisontalt',\n VerticalSplit: 'Separera vertikalt'\n },\n menu: {\n spaced: 'Avstånd',\n bordered: 'Avgränsningslinje',\n neon: 'Neon',\n translucent: 'Genomskinlig',\n shadow: 'Skugga',\n code: 'Kod'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'se', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2023 JiHong Lee.\n *\n * Turkish translation by worm-codes at github.com/worm-codes\n *\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n\tconst lang = {\n\t\tcode: \"tr\",\n\t\ttoolbar: {\n\t\t\tdefault: \"Varsayılan\",\n\t\t\tsave: \"Kaydet\",\n\t\t\tfont: \"Yazı Tipi\",\n\t\t\tformats: \"Biçimlendirmeler\",\n\t\t\tfontSize: \"Boyut\",\n\t\t\tbold: \"Kalın\",\n\t\t\tunderline: \"Alt Çizili\",\n\t\t\titalic: \"İtalik\",\n\t\t\tstrike: \"Üstü Çizili\",\n\t\t\tsubscript: \"Alt Simge\",\n\t\t\tsuperscript: \"Üst Simge\",\n\t\t\tremoveFormat: \"Biçimi Kaldır\",\n\t\t\tfontColor: \"Yazı Tipi Rengi\",\n\t\t\thiliteColor: \"Vurgu Rengi\",\n\t\t\tindent: \"Girinti\",\n\t\t\toutdent: \"Girintiyi Azalt\",\n\t\t\talign: \"Hizala\",\n\t\t\talignLeft: \"Sola Hizala\",\n\t\t\talignRight: \"Sağa Hizala\",\n\t\t\talignCenter: \"Ortaya Hizala\",\n\t\t\talignJustify: \"İki Yana Yasla\",\n\t\t\tlist: \"Liste\",\n\t\t\torderList: \"Sıralı Liste\",\n\t\t\tunorderList: \"Sırasız Liste\",\n\t\t\thorizontalRule: \"Yatay Çizgi\",\n\t\t\thr_solid: \"Düz\",\n\t\t\thr_dotted: \"Noktalı\",\n\t\t\thr_dashed: \"Kesikli\",\n\t\t\ttable: \"Tablo\",\n\t\t\tlink: \"Bağlantı\",\n\t\t\tmath: \"Matematik\",\n\t\t\timage: \"Görsel\",\n\t\t\tvideo: \"Video\",\n\t\t\taudio: \"Ses\",\n\t\t\tfullScreen: \"Tam Ekran\",\n\t\t\tshowBlocks: \"Blokları Göster\",\n\t\t\tcodeView: \"Kod Görünümü\",\n\t\t\tundo: \"Geri Al\",\n\t\t\tredo: \"İleri Al\",\n\t\t\tpreview: \"Önizleme\",\n\t\t\tprint: \"Yazdır\",\n\t\t\ttag_p: \"Paragraf\",\n\t\t\ttag_div: \"Normal (DIV)\",\n\t\t\ttag_h: \"Başlık\",\n\t\t\ttag_blockquote: \"Alıntı\",\n\t\t\ttag_pre: \"Kod\",\n\t\t\ttemplate: \"Şablon\",\n\t\t\tlineHeight: \"Satır Yüksekliği\",\n\t\t\tparagraphStyle: \"Paragraf Stili\",\n\t\t\ttextStyle: \"Metin Stili\",\n\t\t\timageGallery: \"Görüntü Galerisi\",\n\t\t\tdir_ltr: \"Soldan Sağa\",\n\t\t\tdir_rtl: \"Sağdan Sola\",\n\t\t\tmention: \"Belirtmek\"\n\t\t},\n\t\tdialogBox: {\n\t\t\tlinkBox: {\n\t\t\t\ttitle: \"Bağlantı Ekle\",\n\t\t\t\turl: \"Bağlantı URL'si\",\n\t\t\t\ttext: \"Görüntülenecek Metin\",\n\t\t\t\tnewWindowCheck: \"Yeni Pencerede Aç\",\n\t\t\t\tdownloadLinkCheck: \"Bağlantıyı İndir\",\n\t\t\t\tbookmark: \"Bağlantıyı Yer İmlerine Ekle\"\n\t\t\t},\n\t\t\tmathBox: {\n\t\t\t\ttitle: \"Matematik\",\n\t\t\t\tinputLabel: \"Matematiksel Simgeler\",\n\t\t\t\tfontSizeLabel: \"Yazı Tipi Boyutu\",\n\t\t\t\tpreviewLabel: \"Önizleme\"\n\t\t\t},\n\t\t\timageBox: {\n\t\t\t\ttitle: \"Görüntü Ekle\",\n\t\t\t\tfile: \"Dosya Seç\",\n\t\t\t\turl: \"Görüntü URL'si\",\n\t\t\t\taltText: \"Alternatif Metin\"\n\t\t\t},\n\t\t\tvideoBox: {\n\t\t\t\ttitle: \"Video Ekle\",\n\t\t\t\tfile: \"Dosya Seç\",\n\t\t\t\turl: \"Medya Ekleme URL'si (YouTube/Vimeo)\"\n\t\t\t},\n\t\t\taudioBox: {\n\t\t\t\ttitle: \"Ses Ekle\",\n\t\t\t\tfile: \"Dosya Seç\",\n\t\t\t\turl: \"Ses URL'si\"\n\t\t\t},\n\t\t\tbrowser: {\n\t\t\t\ttags: \"Etiketler\",\n\t\t\t\tsearch: \"Ara\"\n\t\t\t},\n\t\t\tcaption: \"Açıklama Giriniz\",\n\t\t\tclose: \"Kapat\",\n\t\t\tsubmitButton: \"Gönder\",\n\t\t\trevertButton: \"Geri Dön\",\n\t\t\tproportion: \"Orantıları Koru\",\n\t\t\tbasic: \"Temel\",\n\t\t\tleft: \"Sola\",\n\t\t\tright: \"Sağa\",\n\t\t\tcenter: \"Ortaya\",\n\t\t\twidth: \"Genişlik\",\n\t\t\theight: \"Yükseklik\",\n\t\t\tsize: \"Boyut\",\n\t\t\tratio: \"Oran\"\n\t\t},\n\t\tcontroller: {\n\t\t\tedit: \"Düzenle\",\n\t\t\tunlink: \"Bağlantıyı Kaldır\",\n\t\t\tremove: \"Kaldır\",\n\t\t\tinsertRowAbove: \"Satır Yukarı Ekle\",\n\t\t\tinsertRowBelow: \"Satır Aşağı Ekle\",\n\t\t\tdeleteRow: \"Satırı Sil\",\n\t\t\tinsertColumnBefore: \"Sütun Önce Ekle\",\n\t\t\tinsertColumnAfter: \"Sütun Sonrası Ekle\",\n\t\t\tdeleteColumn: \"Sütunu Sil\",\n\t\t\tfixedColumnWidth: \"Sabit Sütun Genişliği\",\n\t\t\tresize100: \"%100 Ölçeklendir\",\n\t\t\tresize75: \"%75 Ölçeklendir\",\n\t\t\tresize50: \"%50 Ölçeklendir\",\n\t\t\tresize25: \"%25 Ölçeklendir\",\n\t\t\tautoSize: \"Ölçeğe Otomatik Ayar\",\n\t\t\tmirrorHorizontal: \"Düzlemsel Aynalama (Yatay)\",\n\t\t\tmirrorVertical: \"Düzlemsel Aynalama (Dikey)\",\n\t\t\trotateLeft: \"Saat Yönünde Döndür\",\n\t\t\trotateRight: \"Saat Yönünün Tersine Döndür\",\n\t\t\tmaxSize: \"En Büyük Boyut\",\n\t\t\tminSize: \"En Küçük Boyut\",\n\t\t\ttableHeader: \"Tablo Başlığı\",\n\t\t\tmergeCells: \"Hücreleri Birleştir\",\n\t\t\tsplitCells: \"Hücreleri Ayır\",\n\t\t\tHorizontalSplit: \"Yatay Ayırma\",\n\t\t\tVerticalSplit: \"Dikey Ayırma\"\n\t\t},\n\t\tmenu: {\n\t\t\tspaced: \"Aralıklı\",\n\t\t\tbordered: \"Çerçeveli\",\n\t\t\tneon: \"Neon\",\n\t\t\ttranslucent: \"Yarı Saydam\",\n\t\t\tshadow: \"Gölge\",\n\t\t\tcode: \"Kod\"\n\t\t}\n\t};\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'tr', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n\"use strict\";\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n})(typeof window !== \"undefined\" ? window : this, function(window, noGlobal) {\n const lang = {\n code: \"ua\",\n toolbar: {\n default: \"По замовчуванням\",\n save: \"Зберегти\",\n font: \"Шрифт\",\n formats: \"Стиль абзацу\",\n fontSize: \"Розмір шрифту\",\n bold: \"Жирний\",\n underline: \"Підкреслений\",\n italic: \"Курсив\",\n strike: \"Перекреслити\",\n subscript: \"Нижній індекс\",\n superscript: \"Верхній індекс\",\n removeFormat: \"Очистити форматування\",\n fontColor: \"Колір тексту\",\n hiliteColor: \"Колір виділення\",\n indent: \"Збільшити відступ\",\n outdent: \"Зменшити відступ\",\n align: \"Вирівнювання\",\n alignLeft: \"За лівим краєм\",\n alignRight: \"За правим краєм\",\n alignCenter: \"По центру\",\n alignJustify: \"За шириною\",\n list: \"Список\",\n orderList: \"Нумерований\",\n unorderList: \"Маркований\",\n horizontalRule: \"Горизонтальна лінія\",\n hr_solid: \"Суцільна\",\n hr_dotted: \"Пунктирна\",\n hr_dashed: \"Штрихова\",\n table: \"Таблиця\",\n link: \"Посилання\",\n math: \"Формула\",\n image: \"Зображення\",\n video: \"Відео\",\n audio: \"Аудіо\",\n fullScreen: \"Повний екран\",\n showBlocks: \"Показати блоки\",\n codeView: \"Редагувати як HTML\",\n undo: \"Скасувати\",\n redo: \"Виконати знову\",\n preview: \"Попередній перегляд\",\n print: \"Друк\",\n tag_p: \"Абзац\",\n tag_div: \"Базовий\",\n tag_h: \"Заголовок\",\n tag_blockquote: \"Цитата\",\n tag_pre: \"Код\",\n template: \"Шаблон\",\n lineHeight: \"Висота лінії\",\n paragraphStyle: \"Стиль абзацу\",\n textStyle: \"Стиль тексту\",\n imageGallery: \"Галерея\",\n dir_ltr: 'Зліва направо',\n dir_rtl: 'Справа наліво',\n mention: \"Згадати\"\n },\n dialogBox: {\n linkBox: {\n title: \"Вставити посилання\",\n url: \"Посилання\",\n text: \"Текст\",\n newWindowCheck: \"Відкривати в новому вікні\",\n downloadLinkCheck: 'Посилання для завантаження',\n bookmark: 'Закладка'\n },\n mathBox: {\n title: \"Формула\",\n inputLabel: \"Математична запис\",\n fontSizeLabel: \"Розмір шрифту\",\n previewLabel: \"Попередній перегляд\"\n },\n imageBox: {\n title: \"Вставити зображення\",\n file: \"Виберіть файл\",\n url: \"Посилання на зображення\",\n altText: \"Текстовий опис зображення\"\n },\n videoBox: {\n title: \"Вставити відео\",\n file: \"Виберіть файл\",\n url: \"Посилання на відео, Youtube, Vimeo\"\n },\n audioBox: {\n title: \"Вставити аудіо\",\n file: \"Виберіть файл\",\n url: \"Посилання на аудіо\"\n },\n browser: {\n tags: \"Теги\",\n search: \"Пошук\"\n },\n caption: \"Додати підпис\",\n close: \"Закрити\",\n submitButton: \"Підтвердити\",\n revertButton: \"Скинути\",\n proportion: \"Зберегти пропорції\",\n basic: \"Без обтікання\",\n left: \"Зліва\",\n right: \"Справа\",\n center: \"По центру\",\n width: \"Ширина\",\n height: \"Висота\",\n size: \"Розмір\",\n ratio: \"Співвідношення\"\n },\n controller: {\n edit: \"Змінити\",\n unlink: \"Прибрати посилання\",\n remove: \"Видалити\",\n insertRowAbove: \"Вставити рядок вище\",\n insertRowBelow: \"Вставити рядок нижче\",\n deleteRow: \"Видалити рядок\",\n insertColumnBefore: \"Вставити стовпець зліва\",\n insertColumnAfter: \"Вставити стовпець справа\",\n deleteColumn: \"Видалити стовпець\",\n fixedColumnWidth: \"Фіксована ширина стовпця\",\n resize100: \"Розмір 100%\",\n resize75: \"Розмір 75%\",\n resize50: \"Розмір 50%\",\n resize25: \"Розмір 25%\",\n autoSize: \"Авто розмір\",\n mirrorHorizontal: \"Відобразити по горизонталі\",\n mirrorVertical: \"Відобразити по вертикалі\",\n rotateLeft: \"Повернути проти годинникової стрілки\",\n rotateRight: \"Повернути за годинниковою стрілкою\",\n maxSize: \"Ширина за розміром сторінки\",\n minSize: \"Ширина за вмістом\",\n tableHeader: \"Заголовок таблиці\",\n mergeCells: \"Об'єднати клітинки\",\n splitCells: \"Розділити клітинку\",\n HorizontalSplit: \"Розділити горизонтально\",\n VerticalSplit: \"Розділити вертикально\"\n },\n menu: {\n spaced: \"Інтервал\",\n bordered: \"З лініями\",\n neon: \"Неон\",\n translucent: \"Напівпрозорий\",\n shadow: \"Тінь\",\n code: \"Код\"\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, \"SUNEDITOR_LANG\", {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {},\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, \"ua\", {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang,\n });\n }\n\n return lang;\n});\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'ur',\n toolbar: {\n default: 'طے شدہ',\n save: 'محفوظ کریں',\n font: 'فونٹ',\n formats: 'فارمیٹس',\n fontSize: 'سائز',\n bold: 'بولڈ',\n underline: 'انڈر لائن',\n italic: 'ترچھا',\n strike: 'لکیرہ کردہ',\n subscript: 'ذیلی',\n superscript: 'انتہائی',\n removeFormat: 'فارمیٹ کو حذف دیں',\n fontColor: 'لکھائی کا رنگ',\n hiliteColor: 'نمایاں رنگ',\n indent: 'حاشیہ',\n outdent: 'ہاشیہ واپس',\n align: 'رخ',\n alignLeft: 'بائیں طرف',\n alignRight: 'دائیں طرف',\n alignCenter: 'مرکز میں طرف',\n alignJustify: 'ہر طرف برابر',\n list: 'فہرست',\n orderList: 'ترتیب شدہ فہرست',\n unorderList: 'غیر ترتیب شدہ فہرست',\n horizontalRule: 'لکیر',\n hr_solid: 'ٹھوس',\n hr_dotted: 'نقطے دار',\n hr_dashed: 'ڈیشڈ',\n table: 'میز',\n link: 'لنک',\n math: 'ریاضی',\n image: 'تصویر',\n video: 'ویڈیو',\n audio: 'آواز',\n fullScreen: 'پوری اسکرین',\n showBlocks: 'ڈبے دکھائیں',\n codeView: 'کوڈ کا نظارہ',\n undo: 'واپس کریں',\n redo: 'دوبارہ کریں',\n preview: 'پیشنظر',\n print: 'پرنٹ کریں',\n tag_p: 'پیراگراف',\n tag_div: 'عام (div)',\n tag_h: 'ہیڈر',\n tag_blockquote: 'اقتباس',\n tag_pre: 'کوڈ',\n template: 'سانچہ',\n lineHeight: 'لکیر کی اونچائی',\n paragraphStyle: 'عبارت کا انداز',\n textStyle: 'متن کا انداز',\n imageGallery: 'تصویری نگارخانہ',\n dir_ltr: 'بائیں سے دائیں',\n dir_rtl: 'دائیں سے بائیں',\n mention: 'تذکرہ'\n },\n dialogBox: {\n linkBox: {\n title: 'لنک داخل کریں',\n url: 'لنک کرنے کے لیے URL',\n text: 'ظاہر کرنے کے لیے متن',\n newWindowCheck: 'نئی ونڈو میں کھولیں',\n downloadLinkCheck: 'ڈاؤن لوڈ لنک',\n bookmark: 'بک مارک'\n },\n mathBox: {\n title: 'ریاضی',\n inputLabel: 'ریاضیاتی اشارے',\n fontSizeLabel: 'حرف کا سائز',\n previewLabel: 'پیش نظارہ'\n },\n imageBox: {\n title: 'تصویر داخل کریں',\n file: 'فائلوں سے منتخب کریں',\n url: 'تصویری URL',\n altText: 'متبادل متن'\n },\n videoBox: {\n title: 'ویڈیو داخل کریں',\n file: 'فائلوں سے منتخب کریں',\n url: 'ذرائع ابلاغ کا یو آر ایل، یوٹیوب/ویمیو'\n },\n audioBox: {\n title: 'آواز داخل کریں',\n file: 'فائلوں سے منتخب کریں',\n url: 'آواز URL'\n },\n browser: {\n tags: 'ٹیگز',\n search: 'تلاش کریں',\n },\n caption: 'عنوان',\n close: 'بند کریں',\n submitButton: 'بھیجیں',\n revertButton: 'واپس',\n proportion: 'تناسب کو محدود کریں',\n basic: 'بنیادی',\n left: 'بائیں',\n right: 'دائیں',\n center: 'مرکز',\n width: 'چوڑائی',\n height: 'اونچائی',\n size: 'حجم',\n ratio: 'تناسب'\n },\n controller: {\n edit: 'ترمیم',\n unlink: 'لنک ختم کریں',\n remove: 'حذف',\n insertRowAbove: 'اوپر قطار شامل کریں',\n insertRowBelow: 'نیچے قطار شامل کریں',\n deleteRow: 'قطار کو حذف کریں',\n insertColumnBefore: 'پہلے ستون شامل کریں',\n insertColumnAfter: 'اس کے بعد ستون شامل کریں',\n deleteColumn: 'ستون حذف کریں',\n fixedColumnWidth: 'مقررہ ستون کی چوڑائی',\n resize100: '100% کا حجم تبدیل کریں',\n resize75: '75% کا حجم تبدیل کریں',\n resize50: '50% کا حجم تبدیل کریں',\n resize25: '25% کا حجم تبدیل کریں',\n autoSize: 'ازخود حجم',\n mirrorHorizontal: 'آئینہ، افقی',\n mirrorVertical: 'آئینہ، عمودی',\n rotateLeft: 'بائیں گھومو',\n rotateRight: 'دائیں گھمائیں',\n maxSize: 'زیادہ سے زیادہ سائز',\n minSize: 'کم از کم سائز',\n tableHeader: 'میز کی سرخی',\n mergeCells: 'حجروں کو ضم کریں',\n splitCells: 'حجروں کو علیدہ کرو',\n HorizontalSplit: 'افقی تقسیم',\n VerticalSplit: 'عمودی تقسیم'\n },\n menu: {\n spaced: 'فاصلہ',\n bordered: 'سرحدی',\n neon: 'نیین',\n translucent: 'پارباسی',\n shadow: 'سایہ',\n code: 'کوڈ'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'ur', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2019 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_LANG a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const lang = {\n code: 'zh_cn',\n toolbar: {\n default: '默认',\n save: '保存',\n font: '字体',\n formats: '格式',\n fontSize: '字号',\n bold: '粗体',\n underline: '下划线',\n italic: '斜体',\n strike: '删除线',\n subscript: '下标',\n superscript: '上标',\n removeFormat: '清除格式',\n fontColor: '字体颜色',\n hiliteColor: '背景颜色',\n indent: '增加缩进',\n outdent: '减少缩进',\n align: '对齐方式',\n alignLeft: '左对齐',\n alignRight: '右对齐',\n alignCenter: '居中',\n alignJustify: '两端对齐',\n list: '列表',\n orderList: '有序列表',\n unorderList: '无序列表',\n horizontalRule: '水平线',\n hr_solid: '实线',\n hr_dotted: '点线',\n hr_dashed: '虚线',\n table: '表格',\n link: '超链接',\n math: '数学',\n image: '图片',\n video: '视频',\n audio: '音讯',\n fullScreen: '全屏',\n showBlocks: '显示块区域',\n codeView: '代码视图',\n undo: '撤消',\n redo: '恢复',\n preview: '预览',\n print: '打印',\n tag_p: '段落',\n tag_div: '正文 (DIV)',\n tag_h: '标题',\n tag_blockquote: '引用',\n tag_pre: '代码',\n template: '模板',\n lineHeight: '行高',\n paragraphStyle: '段落样式',\n textStyle: '文字样式',\n imageGallery: '图片库',\n dir_ltr: '左到右',\n dir_rtl: '右到左',\n mention: '提到'\n },\n dialogBox: {\n linkBox: {\n title: '插入超链接',\n url: '网址',\n text: '要显示的文字',\n newWindowCheck: '在新标签页中打开',\n downloadLinkCheck: '下载链接',\n bookmark: '书签'\n },\n mathBox: {\n title: '数学',\n inputLabel: '数学符号',\n fontSizeLabel: '字号',\n previewLabel: '预览'\n },\n imageBox: {\n title: '插入图片',\n file: '上传图片',\n url: '图片网址',\n altText: '替换文字'\n },\n videoBox: {\n title: '插入视频',\n file: '上传图片',\n url: '嵌入网址, Youtube,Vimeo'\n },\n audioBox: {\n title: '插入音频',\n file: '上传图片',\n url: '音频网址'\n },\n browser: {\n tags: '标签',\n search: '搜索',\n },\n caption: '标题',\n close: '取消',\n submitButton: '确定',\n revertButton: '恢复',\n proportion: '比例',\n basic: '基本',\n left: '左',\n right: '右',\n center: '居中',\n width: '宽度',\n height: '高度',\n size: '尺寸',\n ratio: '比'\n },\n controller: {\n edit: '编辑',\n unlink: '去除链接',\n remove: '删除',\n insertRowAbove: '在上方插入',\n insertRowBelow: '在下方插入',\n deleteRow: '删除行',\n insertColumnBefore: '在左侧插入',\n insertColumnAfter: '在右侧插入',\n deleteColumn: '删除列',\n fixedColumnWidth: '固定列宽',\n resize100: '放大 100%',\n resize75: '放大 75%',\n resize50: '放大 50%',\n resize25: '放大 25%',\n mirrorHorizontal: '翻转左右',\n mirrorVertical: '翻转上下',\n rotateLeft: '向左旋转',\n rotateRight: '向右旋转',\n maxSize: '最大尺寸',\n minSize: '最小尺寸',\n tableHeader: '表格标题',\n mergeCells: '合并单元格',\n splitCells: '分割单元格',\n HorizontalSplit: '水平分割',\n VerticalSplit: '垂直分割'\n },\n menu: {\n spaced: '间隔开',\n bordered: '边界线',\n neon: '霓虹灯',\n translucent: '半透明',\n shadow: '阴影',\n code: '代码'\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_LANG) {\n Object.defineProperty(window, 'SUNEDITOR_LANG', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_LANG, 'zh_cn', {\n enumerable: true,\n writable: true,\n configurable: true,\n value: lang\n });\n }\n\n return lang;\n}));\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'blockquote',\n display: 'command',\n add: function (core, targetElement) {\n const context = core.context;\n context.blockquote = {\n targetButton: targetElement,\n tag: core.util.createElement('BLOCKQUOTE')\n };\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n if (!element) {\n this.util.removeClass(this.context.blockquote.targetButton, 'active');\n } else if (/blockquote/i.test(element.nodeName)) {\n this.util.addClass(this.context.blockquote.targetButton, 'active');\n return true;\n }\n \n return false;\n },\n\n /**\n * @Override core\n */\n action: function () {\n const currentBlockquote = this.util.getParentElement(this.getSelectionNode(), 'blockquote');\n\n if (currentBlockquote) {\n this.detachRangeFormatElement(currentBlockquote, null, null, false, false);\n } else {\n this.applyRangeFormatElement(this.context.blockquote.tag.cloneNode(false));\n }\n }\n};","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'align',\n display: 'submenu',\n add: function (core, targetElement) {\n const icons = core.icons;\n const context = core.context;\n context.align = {\n targetButton: targetElement,\n _itemMenu: null,\n _alignList: null,\n currentAlign: '',\n defaultDir: core.options.rtl ? 'right' : 'left',\n icons: {\n justify: icons.align_justify,\n left: icons.align_left,\n right: icons.align_right,\n center: icons.align_center\n }\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n let listUl = context.align._itemMenu = listDiv.querySelector('ul');\n\n /** add event listeners */\n listUl.addEventListener('click', this.pickup.bind(core));\n context.align._alignList = listUl.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null, listUl = null;\n },\n\n setSubmenu: function (core) {\n const lang = core.lang;\n const icons = core.icons;\n const listDiv = core.util.createElement('DIV');\n const alignItems = core.options.alignItems;\n\n let html = '';\n for (let i = 0, item, text; i < alignItems.length; i++) {\n item = alignItems[i];\n text = lang.toolbar['align' + item.charAt(0).toUpperCase() + item.slice(1)];\n html += '
  • ' +\n '' +\n '
  • ';\n }\n\n listDiv.className = 'se-submenu se-list-layer se-list-align';\n listDiv.innerHTML = '' +\n '
    ' +\n '
      ' +\n html +\n '
    ' +\n '
    ';\n\n return listDiv;\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n const alignContext = this.context.align;\n const targetButton = alignContext.targetButton;\n const target = targetButton.firstElementChild;\n\n if (!element) {\n this.util.changeElement(target, alignContext.icons[alignContext.defaultDir]);\n targetButton.removeAttribute('data-focus');\n } else if (this.util.isFormatElement(element)) {\n const textAlign = element.style.textAlign;\n if (textAlign) {\n this.util.changeElement(target, alignContext.icons[textAlign] || alignContext.icons[alignContext.defaultDir]);\n targetButton.setAttribute('data-focus', textAlign);\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const alignContext = this.context.align;\n const alignList = alignContext._alignList;\n const currentAlign = alignContext.targetButton.getAttribute('data-focus') || alignContext.defaultDir;\n\n if (currentAlign !== alignContext.currentAlign) {\n for (let i = 0, len = alignList.length; i < len; i++) {\n if (currentAlign === alignList[i].getAttribute('data-value')) {\n this.util.addClass(alignList[i], 'active');\n } else {\n this.util.removeClass(alignList[i], 'active');\n }\n }\n\n alignContext.currentAlign = currentAlign;\n }\n },\n\n exchangeDir: function () {\n const dir = this.options.rtl ? 'right' : 'left';\n if (!this.context.align || this.context.align.defaultDir === dir) return;\n\n this.context.align.defaultDir = dir;\n let menu = this.context.align._itemMenu;\n let leftBtn = menu.querySelector('[data-value=\"left\"]');\n let rightBtn = menu.querySelector('[data-value=\"right\"]');\n if (leftBtn && rightBtn) {\n const lp = leftBtn.parentElement;\n const rp = rightBtn.parentElement;\n lp.appendChild(rightBtn);\n rp.appendChild(leftBtn);\n }\n },\n\n pickup: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let target = e.target;\n let value = null;\n\n while (!value && !/UL/i.test(target.tagName)) {\n value = target.getAttribute('data-value');\n target = target.parentNode;\n }\n\n if (!value) return;\n\n const defaultDir = this.context.align.defaultDir;\n const selectedFormsts = this.getSelectedElements();\n for (let i = 0, len = selectedFormsts.length; i < len; i++) {\n this.util.setStyle(selectedFormsts[i], 'textAlign', (value === defaultDir ? '' : value));\n }\n\n this.effectNode = null;\n this.submenuOff();\n this.focus();\n \n // history stack\n this.history.push(false);\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'font',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.font = {\n targetText: targetElement.querySelector('.txt'),\n targetTooltip: targetElement.parentNode.querySelector('.se-tooltip-text'),\n _fontList: null,\n currentFont: ''\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n\n /** add event listeners */\n listDiv.querySelector('.se-list-inner').addEventListener('click', this.pickup.bind(core));\n\n context.font._fontList = listDiv.querySelectorAll('ul li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null;\n },\n\n setSubmenu: function (core) {\n const lang = core.lang;\n const listDiv = core.util.createElement('DIV');\n\n listDiv.className = 'se-submenu se-list-layer se-list-font-family';\n\n let font, text, i, len;\n let fontList = core.options.font;\n\n let list = '
    ' +\n '
      ' +\n '
    • ';\n for (i = 0, len = fontList.length; i < len; i++) {\n font = fontList[i];\n text = font.split(',')[0];\n list += '
    • ';\n }\n list += '
    ';\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n const target = this.context.font.targetText;\n const tooltip = this.context.font.targetTooltip;\n\n if (!element) {\n const font = this.hasFocus ? this.wwComputedStyle.fontFamily : this.lang.toolbar.font;\n this.util.changeTxt(target, font);\n this.util.changeTxt(tooltip, this.hasFocus ? this.lang.toolbar.font + (font ? ' (' + font + ')' : '') : font);\n } else if (element.style && element.style.fontFamily.length > 0) {\n const selectFont = element.style.fontFamily.replace(/[\"']/g,'');\n this.util.changeTxt(target, selectFont);\n this.util.changeTxt(tooltip, this.lang.toolbar.font + ' (' + selectFont + ')');\n return true;\n }\n\n return false;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const fontContext = this.context.font;\n const fontList = fontContext._fontList;\n const currentFont = fontContext.targetText.textContent;\n\n if (currentFont !== fontContext.currentFont) {\n for (let i = 0, len = fontList.length; i < len; i++) {\n if (currentFont === (fontList[i].getAttribute('data-value') || '').replace(/'|\"/g, '')) {\n this.util.addClass(fontList[i], 'active');\n } else {\n this.util.removeClass(fontList[i], 'active');\n }\n }\n\n fontContext.currentFont = currentFont;\n }\n },\n\n pickup: function (e) {\n if (!/^BUTTON$/i.test(e.target.tagName)) return false;\n\n e.preventDefault();\n e.stopPropagation();\n\n let value = e.target.getAttribute('data-value');\n\n if (value) {\n const newNode = this.util.createElement('SPAN');\n if (/[\\s\\d\\W]/.test(value) && !/^['\"].*['\"]$/.test(value)) {\n value = '\"' + value + '\"';\n }\n newNode.style.fontFamily = value;\n this.nodeChange(newNode, ['font-family'], null, null);\n } else {\n this.nodeChange(null, ['font-family'], ['span'], true);\n }\n \n this.submenuOff();\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'fontSize',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.fontSize = {\n targetText: targetElement.querySelector('.txt'),\n _sizeList: null,\n currentSize: ''\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n let listUl = listDiv.querySelector('ul');\n\n /** add event listeners */\n listUl.addEventListener('click', this.pickup.bind(core));\n context.fontSize._sizeList = listUl.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null, listUl = null;\n },\n\n setSubmenu: function (core) {\n const option = core.options;\n const lang = core.lang;\n const listDiv = core.util.createElement('DIV');\n\n listDiv.className = 'se-submenu se-list-layer se-list-font-size';\n\n const sizeList = !option.fontSize ? [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72] : option.fontSize;\n\n let list = '
    ' +\n '
      ' +\n '
    • ';\n for (let i = 0, unit = option.fontSizeUnit, len = sizeList.length, size; i < len; i++) {\n size = sizeList[i];\n list += '
    • ';\n }\n list += '
    ';\n\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n if (!element) {\n this.util.changeTxt(this.context.fontSize.targetText, this.hasFocus ? this._convertFontSize.call(this, this.options.fontSizeUnit, this.wwComputedStyle.fontSize) : this.lang.toolbar.fontSize);\n } else if (element.style && element.style.fontSize.length > 0) {\n this.util.changeTxt(this.context.fontSize.targetText, this._convertFontSize.call(this, this.options.fontSizeUnit, element.style.fontSize));\n return true;\n }\n\n return false;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const fontSizeContext = this.context.fontSize;\n const sizeList = fontSizeContext._sizeList;\n const currentSize = fontSizeContext.targetText.textContent;\n\n if (currentSize !== fontSizeContext.currentSize) {\n for (let i = 0, len = sizeList.length; i < len; i++) {\n if (currentSize === sizeList[i].getAttribute('data-value')) {\n this.util.addClass(sizeList[i], 'active');\n } else {\n this.util.removeClass(sizeList[i], 'active');\n }\n }\n\n fontSizeContext.currentSize = currentSize;\n }\n },\n\n pickup: function (e) {\n if (!/^BUTTON$/i.test(e.target.tagName)) return false;\n \n e.preventDefault();\n e.stopPropagation();\n\n const value = e.target.getAttribute('data-value');\n\n if (value) {\n const newNode = this.util.createElement('SPAN');\n newNode.style.fontSize = value;\n this.nodeChange(newNode, ['font-size'], null, null);\n } else {\n this.nodeChange(null, ['font-size'], ['span'], true);\n }\n\n this.submenuOff();\n }\n};\n","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2018 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\nexport default {\r\n name: 'colorPicker',\r\n /**\r\n * @description Constructor\r\n * @param {Object} core Core object \r\n */\r\n add: function (core) {\r\n const context = core.context;\r\n context.colorPicker = {\r\n colorListHTML: '',\r\n _colorInput: '',\r\n _defaultColor: '#000',\r\n _styleProperty: 'color',\r\n _currentColor: '',\r\n _colorList: []\r\n };\r\n\r\n /** set submenu */\r\n context.colorPicker.colorListHTML = this.createColorList(core, this._makeColorList);\r\n },\r\n\r\n /**\r\n * @description Create color list\r\n * @param {Object} core Core object \r\n * @param {Function} makeColor this._makeColorList\r\n * @returns {String} HTML string\r\n */\r\n createColorList: function (core, makeColor) {\r\n const option = core.options;\r\n const lang = core.lang;\r\n const colorList = !option.colorList || option.colorList.length === 0 ?\r\n [\r\n '#ff0000', '#ff5e00', '#ffe400', '#abf200', '#00d8ff', '#0055ff', '#6600ff', '#ff00dd', '#000000',\r\n '#ffd8d8', '#fae0d4', '#faf4c0', '#e4f7ba', '#d4f4fa', '#d9e5ff', '#e8d9ff', '#ffd9fa', '#f1f1f1',\r\n '#ffa7a7', '#ffc19e', '#faed7d', '#cef279', '#b2ebf4', '#b2ccff', '#d1b2ff', '#ffb2f5', '#bdbdbd',\r\n '#f15f5f', '#f29661', '#e5d85c', '#bce55c', '#5cd1e5', '#6699ff', '#a366ff', '#f261df', '#8c8c8c',\r\n '#980000', '#993800', '#998a00', '#6b9900', '#008299', '#003399', '#3d0099', '#990085', '#353535',\r\n '#670000', '#662500', '#665c00', '#476600', '#005766', '#002266', '#290066', '#660058', '#222222'\r\n ] : option.colorList;\r\n\r\n let colorArr = [];\r\n let list = '
    ';\r\n for (let i = 0, len = colorList.length, color; i < len; i++) {\r\n color = colorList[i];\r\n if (!color) continue;\r\n \r\n if (typeof color === 'string') {\r\n colorArr.push(color);\r\n if (i < len - 1) continue;\r\n }\r\n if (colorArr.length > 0) {\r\n list += '
    ' + makeColor(colorArr) + '
    ';\r\n colorArr = [];\r\n }\r\n if (typeof color === 'object') {\r\n list += '
    ' + makeColor(color) + '
    ';\r\n }\r\n }\r\n list += '' +\r\n '
    ' +\r\n '' +\r\n '' +\r\n '' +\r\n '
    ' +\r\n '
    ';\r\n\r\n return list;\r\n },\r\n\r\n /**\r\n * @description Internal function used by this.createColorList\r\n * @param {Array} colorList Color list\r\n * @private\r\n */\r\n _makeColorList: function (colorList) {\r\n let list = '';\r\n\r\n list += '
      ';\r\n for (let i = 0, len = colorList.length, color; i < len; i++) {\r\n color = colorList[i];\r\n if (typeof color === 'string') {\r\n list += '
    • ' +\r\n '' +\r\n '
    • ';\r\n }\r\n }\r\n list += '
    ';\r\n\r\n return list;\r\n },\r\n \r\n /**\r\n * @description Displays or resets the currently selected color at color list.\r\n * @param {Node} node Current Selected node\r\n * @param {String|null} color Color value\r\n */\r\n init: function (node, color) {\r\n const colorPicker = this.plugins.colorPicker;\r\n let fillColor = color ? color : colorPicker.getColorInNode.call(this, node) || this.context.colorPicker._defaultColor;\r\n fillColor = colorPicker.isHexColor(fillColor) ? fillColor : colorPicker.rgb2hex(fillColor) || fillColor;\r\n\r\n const colorList = this.context.colorPicker._colorList;\r\n if (colorList) {\r\n for (let i = 0, len = colorList.length; i < len; i++) {\r\n if (fillColor.toLowerCase() === colorList[i].getAttribute('data-value').toLowerCase()) {\r\n this.util.addClass(colorList[i], 'active');\r\n } else {\r\n this.util.removeClass(colorList[i], 'active');\r\n }\r\n }\r\n }\r\n\r\n colorPicker.setInputText.call(this, colorPicker.colorName2hex.call(this, fillColor));\r\n },\r\n\r\n /**\r\n * @description Store color values\r\n * @param {String} hexColorStr Hax color value\r\n */\r\n setCurrentColor: function (hexColorStr) {\r\n this.context.colorPicker._currentColor = hexColorStr;\r\n this.context.colorPicker._colorInput.style.borderColor = hexColorStr;\r\n },\r\n\r\n /**\r\n * @description Set color at input element\r\n * @param {String} hexColorStr Hax color value\r\n */\r\n setInputText: function (hexColorStr) {\r\n hexColorStr = /^#/.test(hexColorStr) ? hexColorStr : '#' + hexColorStr;\r\n this.context.colorPicker._colorInput.value = hexColorStr;\r\n this.plugins.colorPicker.setCurrentColor.call(this, hexColorStr);\r\n },\r\n\r\n /**\r\n * @description Gets color value at color property of node\r\n * @param {Node} node Selected node \r\n * @returns {String}\r\n */\r\n getColorInNode: function (node) {\r\n let findColor = '';\r\n const styleProperty = this.context.colorPicker._styleProperty;\r\n\r\n while (node && !this.util.isWysiwygDiv(node) && findColor.length === 0) {\r\n if (node.nodeType === 1 && node.style[styleProperty]) findColor = node.style[styleProperty];\r\n node = node.parentNode;\r\n }\r\n\r\n return findColor;\r\n },\r\n\r\n /**\r\n * @description Function to check hex format color\r\n * @param {String} str Color value\r\n */\r\n isHexColor: function (str) {\r\n return /^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(str);\r\n },\r\n\r\n /**\r\n * @description Function to convert hex format to a rgb color\r\n * @param {String} rgb RGB color format\r\n * @returns {String}\r\n */\r\n rgb2hex: function (rgb) {\r\n const rgbMatch = rgb.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\r\n\r\n return (rgbMatch && rgbMatch.length === 4) ? \"#\" +\r\n (\"0\" + parseInt(rgbMatch[1],10).toString(16)).slice(-2) +\r\n (\"0\" + parseInt(rgbMatch[2],10).toString(16)).slice(-2) +\r\n (\"0\" + parseInt(rgbMatch[3],10).toString(16)).slice(-2) : '';\r\n },\r\n\r\n /**\r\n * @description Converts color values of other formats to hex color values and returns.\r\n * @param {String} colorName Color value\r\n * @returns {String}\r\n */\r\n colorName2hex: function (colorName) {\r\n if (/^#/.test(colorName)) return colorName;\r\n var temp = this.util.createElement('div');\r\n temp.style.display = 'none';\r\n temp.style.color = colorName;\r\n var colors = this._w.getComputedStyle(this._d.body.appendChild(temp)).color.match(/\\d+/g).map(function (a) { return parseInt(a,10); });\r\n this.util.removeItem(temp);\r\n return (colors.length >= 3) ? '#' + (((1 << 24) + (colors[0] << 16) + (colors[1] << 8) + colors[2]).toString(16).substr(1)) : false;\r\n }\r\n};","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\nimport colorPicker from '../modules/_colorPicker';\r\n\r\nexport default {\r\n name: 'fontColor',\r\n display: 'submenu',\r\n add: function (core, targetElement) {\r\n core.addModule([colorPicker]);\r\n\r\n const context = core.context;\r\n context.fontColor = {\r\n previewEl: null,\r\n colorInput: null,\r\n colorList: null\r\n };\r\n\r\n /** set submenu */\r\n let listDiv = this.setSubmenu(core);\r\n context.fontColor.colorInput = listDiv.querySelector('._se_color_picker_input');\r\n\r\n /** add event listeners */\r\n context.fontColor.colorInput.addEventListener('keyup', this.onChangeInput.bind(core));\r\n listDiv.querySelector('._se_color_picker_submit').addEventListener('click', this.submit.bind(core));\r\n listDiv.querySelector('._se_color_picker_remove').addEventListener('click', this.remove.bind(core));\r\n listDiv.addEventListener('click', this.pickup.bind(core));\r\n context.fontColor.colorList = listDiv.querySelectorAll('li button');\r\n\r\n /** append target button menu */\r\n core.initMenuTarget(this.name, targetElement, listDiv);\r\n\r\n /** empty memory */\r\n listDiv = null;\r\n },\r\n\r\n setSubmenu: function (core) {\r\n const colorArea = core.context.colorPicker.colorListHTML;\r\n const listDiv = core.util.createElement('DIV');\r\n\r\n listDiv.className = 'se-submenu se-list-layer';\r\n listDiv.innerHTML = colorArea;\r\n\r\n return listDiv;\r\n },\r\n\r\n /**\r\n * @Override submenu\r\n */\r\n on: function () {\r\n const contextPicker = this.context.colorPicker;\r\n const contextFontColor = this.context.fontColor;\r\n\r\n contextPicker._colorInput = contextFontColor.colorInput;\r\n const color = this.wwComputedStyle.color;\r\n contextPicker._defaultColor = color ? this.plugins.colorPicker.isHexColor(color) ? color : this.plugins.colorPicker.rgb2hex(color) : \"#333333\";\r\n contextPicker._styleProperty = 'color';\r\n contextPicker._colorList = contextFontColor.colorList;\r\n \r\n this.plugins.colorPicker.init.call(this, this.getSelectionNode(), null);\r\n },\r\n\r\n /**\r\n * @Override _colorPicker\r\n */\r\n onChangeInput: function (e) {\r\n this.plugins.colorPicker.setCurrentColor.call(this, e.target.value);\r\n },\r\n\r\n submit: function () {\r\n this.plugins.fontColor.applyColor.call(this, this.context.colorPicker._currentColor);\r\n },\r\n\r\n pickup: function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.plugins.fontColor.applyColor.call(this, e.target.getAttribute('data-value'));\r\n },\r\n\r\n remove: function () {\r\n this.nodeChange(null, ['color'], ['span'], true);\r\n this.submenuOff();\r\n },\r\n\r\n applyColor: function (color) {\r\n if (!color) return;\r\n\r\n const newNode = this.util.createElement('SPAN');\r\n newNode.style.color = color;\r\n this.nodeChange(newNode, ['color'], null, null);\r\n\r\n this.submenuOff();\r\n }\r\n};\r\n","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\nimport colorPicker from '../modules/_colorPicker';\r\n\r\nexport default {\r\n name: 'hiliteColor',\r\n display: 'submenu',\r\n add: function (core, targetElement) {\r\n core.addModule([colorPicker]);\r\n\r\n const context = core.context;\r\n context.hiliteColor = {\r\n previewEl: null,\r\n colorInput: null,\r\n colorList: null\r\n };\r\n\r\n /** set submenu */\r\n let listDiv = this.setSubmenu(core);\r\n context.hiliteColor.colorInput = listDiv.querySelector('._se_color_picker_input');\r\n\r\n /** add event listeners */\r\n context.hiliteColor.colorInput.addEventListener('keyup', this.onChangeInput.bind(core));\r\n listDiv.querySelector('._se_color_picker_submit').addEventListener('click', this.submit.bind(core));\r\n listDiv.querySelector('._se_color_picker_remove').addEventListener('click', this.remove.bind(core));\r\n listDiv.addEventListener('click', this.pickup.bind(core));\r\n\r\n context.hiliteColor.colorList = listDiv.querySelectorAll('li button');\r\n\r\n /** append target button menu */\r\n core.initMenuTarget(this.name, targetElement, listDiv);\r\n\r\n /** empty memory */\r\n listDiv = null;\r\n },\r\n\r\n setSubmenu: function (core) {\r\n const colorArea = core.context.colorPicker.colorListHTML;\r\n const listDiv = core.util.createElement('DIV');\r\n\r\n listDiv.className = 'se-submenu se-list-layer';\r\n listDiv.innerHTML = colorArea;\r\n\r\n return listDiv;\r\n },\r\n\r\n /**\r\n * @Override submenu\r\n */\r\n on: function () {\r\n const contextPicker = this.context.colorPicker;\r\n const contextHiliteColor = this.context.hiliteColor;\r\n\r\n contextPicker._colorInput = contextHiliteColor.colorInput;\r\n const color = this.wwComputedStyle.backgroundColor;\r\n contextPicker._defaultColor = color ? this.plugins.colorPicker.isHexColor(color) ? color : this.plugins.colorPicker.rgb2hex(color) : \"#ffffff\";\r\n contextPicker._styleProperty = 'backgroundColor';\r\n contextPicker._colorList = contextHiliteColor.colorList;\r\n \r\n this.plugins.colorPicker.init.call(this, this.getSelectionNode(), null);\r\n },\r\n\r\n /**\r\n * @Override _colorPicker\r\n */\r\n onChangeInput: function (e) {\r\n this.plugins.colorPicker.setCurrentColor.call(this, e.target.value);\r\n },\r\n\r\n submit: function () {\r\n this.plugins.hiliteColor.applyColor.call(this, this.context.colorPicker._currentColor);\r\n },\r\n\r\n pickup: function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.plugins.hiliteColor.applyColor.call(this, e.target.getAttribute('data-value'));\r\n },\r\n\r\n remove: function () {\r\n this.nodeChange(null, ['background-color'], ['span'], true);\r\n this.submenuOff();\r\n },\r\n\r\n applyColor: function (color) {\r\n if (!color) return;\r\n \r\n const newNode = this.util.createElement('SPAN');\r\n newNode.style.backgroundColor = color;\r\n this.nodeChange(newNode, ['background-color'], null, null);\r\n \r\n this.submenuOff();\r\n }\r\n};\r\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'horizontalRule',\n display: 'submenu',\n add: function (core, targetElement) {\n core.context.horizontalRule = {\n currentHR: null,\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n\n /** add event listeners */\n listDiv.querySelector('ul').addEventListener('click', this.horizontalRulePick.bind(core));\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null;\n },\n\n setSubmenu: function (core) {\n const lang = core.lang;\n const listDiv = core.util.createElement('DIV');\n const items = core.options.hrItems || [{name: lang.toolbar.hr_solid, class: '__se__solid'}, {name: lang.toolbar.hr_dashed, class: '__se__dashed'}, {name: lang.toolbar.hr_dotted, class: '__se__dotted'}];\n \n let list = '';\n for (let i = 0, len = items.length; i < len; i++) {\n list += '
  • ' +\n '' +\n '
  • ';\n }\n \n listDiv.className = 'se-submenu se-list-layer se-list-line';\n listDiv.innerHTML = '' +\n '
    ' +\n '
      ' +\n list +\n '
    ' +\n '
    ';\n\n return listDiv;\n },\n\n active: function (element) {\n if (!element) {\n if (this.util.hasClass(this.context.horizontalRule.currentHR, 'on')) {\n this.controllersOff();\n }\n } else if (/HR/i.test(element.nodeName)) {\n this.context.horizontalRule.currentHR = element;\n if (!this.util.hasClass(element, 'on')) {\n this.util.addClass(element, 'on');\n this.controllersOn('hr', this.util.removeClass.bind(this.util, element, 'on'));\n }\n return true;\n }\n\n return false;\n },\n\n appendHr: function (hrTemp) {\n this.focus();\n return this.insertComponent(hrTemp.cloneNode(false), false, true, false);\n },\n\n horizontalRulePick: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let target = e.target;\n let command = target.getAttribute('data-command');\n \n while (!command && !/UL/i.test(target.tagName)) {\n target = target.parentNode;\n command = target.getAttribute('data-command');\n }\n\n if (!command) return;\n\n const oNode = this.plugins.horizontalRule.appendHr.call(this, target.firstElementChild);\n if (oNode) {\n this.setRange(oNode, 0, oNode, 0);\n this.submenuOff();\n }\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'list',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.list = {\n targetButton: targetElement,\n _list: null,\n currentList: '',\n icons: {\n bullets: core.icons.list_bullets,\n number: core.icons.list_number\n }\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n let listUl = listDiv.querySelector('ul');\n\n /** add event listeners */\n listUl.addEventListener('click', this.pickup.bind(core));\n context.list._list = listUl.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null, listUl = null;\n },\n\n setSubmenu: function (core) {\n const lang = core.lang;\n const listDiv = core.util.createElement('DIV');\n\n listDiv.className = 'se-submenu se-list-layer';\n listDiv.innerHTML = '' +\n '
    ' +\n '
      ' +\n '
    • ' +\n '
    • ' +\n '
    ' +\n '
    ';\n\n return listDiv;\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n const button = this.context.list.targetButton;\n const icon = button.firstElementChild;\n const util = this.util;\n\n if (util.isList(element)) {\n const nodeName = element.nodeName;\n button.setAttribute('data-focus', nodeName);\n util.addClass(button, 'active');\n if (/UL/i.test(nodeName)) {\n util.changeElement(icon, this.context.list.icons.bullets);\n } else {\n util.changeElement(icon, this.context.list.icons.number);\n }\n \n return true;\n } else {\n button.removeAttribute('data-focus');\n util.changeElement(icon, this.context.list.icons.number);\n util.removeClass(button, 'active');\n }\n\n return false;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const listContext = this.context.list;\n const list = listContext._list;\n const currentList = listContext.targetButton.getAttribute('data-focus') || '';\n\n if (currentList !== listContext.currentList) {\n for (let i = 0, len = list.length; i < len; i++) {\n if (currentList === list[i].getAttribute('data-command')) {\n this.util.addClass(list[i], 'active');\n } else {\n this.util.removeClass(list[i], 'active');\n }\n }\n\n listContext.currentList = currentList;\n }\n },\n\n editList: function (command, selectedCells, detach) {\n let range = this.getRange();\n let selectedFormats = !selectedCells ? this.getSelectedElementsAndComponents(false) : selectedCells;\n\n if (selectedFormats.length === 0) {\n if (selectedCells) return;\n range = this.getRange_addLine(range, null);\n selectedFormats = this.getSelectedElementsAndComponents(false);\n if (selectedFormats.length === 0) return;\n }\n \n const util = this.util;\n util.sortByDepth(selectedFormats, true);\n\n // merge\n let firstSel = selectedFormats[0];\n let lastSel = selectedFormats[selectedFormats.length - 1];\n let topEl = (util.isListCell(firstSel) || util.isComponent(firstSel)) && !firstSel.previousElementSibling ? firstSel.parentNode.previousElementSibling : firstSel.previousElementSibling;\n let bottomEl = (util.isListCell(lastSel) || util.isComponent(lastSel)) && !lastSel.nextElementSibling ? lastSel.parentNode.nextElementSibling : lastSel.nextElementSibling;\n\n const isCollapsed = range.collapsed;\n const originRange = {\n sc: range.startContainer,\n so: (range.startContainer === range.endContainer && util.onlyZeroWidthSpace(range.startContainer) && range.startOffset === 0 && range.endOffset === 1) ? range.endOffset : range.startOffset,\n ec: range.endContainer,\n eo: range.endOffset\n };\n let afterRange = null;\n let isRemove = true;\n\n for (let i = 0, len = selectedFormats.length; i < len; i++) {\n if (!util.isList(util.getRangeFormatElement(selectedFormats[i], function (current) {\n return this.getRangeFormatElement(current) && current !== selectedFormats[i];\n }.bind(util)))) {\n isRemove = false;\n break;\n }\n }\n\n if (isRemove && (!topEl || (firstSel.tagName !== topEl.tagName || command !== topEl.tagName.toUpperCase())) && (!bottomEl || (lastSel.tagName !== bottomEl.tagName || command !== bottomEl.tagName.toUpperCase()))) {\n if (detach) {\n for (let i = 0, len = selectedFormats.length; i < len; i++) {\n for (let j = i - 1; j >= 0; j--) {\n if (selectedFormats[j].contains(selectedFormats[i])) {\n selectedFormats.splice(i, 1);\n i--; len--;\n break;\n }\n }\n }\n }\n\n const currentFormat = util.getRangeFormatElement(firstSel);\n const cancel = currentFormat && currentFormat.tagName === command;\n let rangeArr, tempList;\n const passComponent = function (current) {\n return !this.isComponent(current);\n }.bind(util);\n \n if (!cancel) tempList = util.createElement(command);\n\n for (let i = 0, len = selectedFormats.length, r, o; i < len; i++) {\n o = util.getRangeFormatElement(selectedFormats[i], passComponent);\n if (!o || !util.isList(o)) continue;\n\n if (!r) {\n r = o;\n rangeArr = {r: r, f: [util.getParentElement(selectedFormats[i], 'LI')]};\n } else {\n if (r !== o) {\n if (detach && util.isListCell(o.parentNode)) {\n this.plugins.list._detachNested.call(this, rangeArr.f);\n } else {\n afterRange = this.detachRangeFormatElement(rangeArr.f[0].parentNode, rangeArr.f, tempList, false, true);\n }\n \n o = selectedFormats[i].parentNode;\n if (!cancel) tempList = util.createElement(command);\n \n r = o;\n rangeArr = {r: r, f: [util.getParentElement(selectedFormats[i], 'LI')]};\n } else {\n rangeArr.f.push(util.getParentElement(selectedFormats[i], 'LI'));\n }\n }\n \n if (i === len - 1) {\n if (detach && util.isListCell(o.parentNode)) {\n this.plugins.list._detachNested.call(this, rangeArr.f);\n } else {\n afterRange = this.detachRangeFormatElement(rangeArr.f[0].parentNode, rangeArr.f, tempList, false, true);\n }\n }\n }\n } else {\n const topElParent = topEl ? topEl.parentNode : topEl;\n const bottomElParent = bottomEl ? bottomEl.parentNode : bottomEl;\n topEl = topElParent && !util.isWysiwygDiv(topElParent) && topElParent.nodeName === command ? topElParent : topEl;\n bottomEl = bottomElParent && !util.isWysiwygDiv(bottomElParent) && bottomElParent.nodeName === command ? bottomElParent : bottomEl;\n\n const mergeTop = topEl && topEl.tagName === command;\n const mergeBottom = bottomEl && bottomEl.tagName === command;\n \n let list = mergeTop ? topEl : util.createElement(command);\n let firstList = null;\n let lastList = null;\n let topNumber = null;\n let bottomNumber = null;\n\n const passComponent = function (current) {\n return !this.isComponent(current) && !this.isList(current);\n }.bind(util);\n \n for (let i = 0, len = selectedFormats.length, newCell, fTag, isCell, next, originParent, nextParent, parentTag, siblingTag, rangeTag; i < len; i++) {\n fTag = selectedFormats[i];\n if (fTag.childNodes.length === 0 && !util._isIgnoreNodeChange(fTag)) {\n util.removeItem(fTag);\n continue;\n }\n next = selectedFormats[i + 1];\n originParent = fTag.parentNode;\n nextParent = next ? next.parentNode : null;\n isCell = util.isListCell(fTag);\n rangeTag = util.isRangeFormatElement(originParent) ? originParent : null;\n parentTag = isCell && !util.isWysiwygDiv(originParent) ? originParent.parentNode : originParent;\n siblingTag = isCell && !util.isWysiwygDiv(originParent) ? (!next || util.isListCell(parentTag)) ? originParent : originParent.nextSibling : fTag.nextSibling;\n\n newCell = util.createElement('LI');\n util.copyFormatAttributes(newCell, fTag);\n\n if (i === 0 && originRange.sc === fTag) {\n originRange.sc = newCell;\n }\n if (i === len - 1 && originRange.ec === fTag) {\n originRange.ec = newCell;\n }\n\n if (util.isComponent(fTag)) {\n const isHR = /^HR$/i.test(fTag.nodeName);\n if (!isHR) newCell.innerHTML = '
    ';\n newCell.innerHTML += fTag.outerHTML;\n if (isHR) newCell.innerHTML += '
    ';\n } else {\n const fChildren = fTag.childNodes;\n while (fChildren[0]) {\n newCell.appendChild(fChildren[0]);\n }\n }\n list.appendChild(newCell);\n\n if (!next) lastList = list;\n if (!next || parentTag !== nextParent || util.isRangeFormatElement(siblingTag)) {\n if (!firstList) firstList = list;\n if ((!mergeTop || !next || parentTag !== nextParent) && !(next && util.isList(nextParent) && nextParent === originParent)) {\n if (list.parentNode !== parentTag) parentTag.insertBefore(list, siblingTag);\n }\n }\n\n util.removeItem(fTag);\n if (mergeTop && topNumber === null) topNumber = list.children.length - 1;\n if (next && (util.getRangeFormatElement(nextParent, passComponent) !== util.getRangeFormatElement(originParent, passComponent) || (util.isList(nextParent) && util.isList(originParent) && util.getElementDepth(nextParent) !== util.getElementDepth(originParent)))) {\n list = util.createElement(command);\n }\n\n if (rangeTag && rangeTag.children.length === 0) util.removeItem(rangeTag);\n }\n\n if (topNumber) {\n firstList = firstList.children[topNumber];\n }\n\n if (mergeBottom) {\n bottomNumber = list.children.length - 1;\n list.innerHTML += bottomEl.innerHTML;\n lastList = list.children[bottomNumber];\n util.removeItem(bottomEl);\n }\n }\n \n this.effectNode = null;\n return !isCollapsed ? originRange : afterRange;\n },\n\n _detachNested: function (cells) {\n const first = cells[0];\n const last = cells[cells.length - 1];\n const next = last.nextElementSibling;\n const originList = first.parentNode;\n const sibling = originList.parentNode.nextElementSibling;\n const parentNode = originList.parentNode.parentNode;\n\n for (let c = 0, cLen = cells.length; c < cLen; c++) {\n parentNode.insertBefore(cells[c], sibling);\n }\n\n if (next && originList.children.length > 0) {\n const newList = originList.cloneNode(false);\n const children = originList.childNodes;\n const index = this.util.getPositionIndex(next);\n while (children[index]) {\n newList.appendChild(children[index]);\n }\n last.appendChild(newList);\n }\n\n if (originList.children.length === 0) this.util.removeItem(originList);\n this.util.mergeSameTags(parentNode);\n\n const edge = this.util.getEdgeChildNodes(first, last);\n\n return {\n cc: first.parentNode,\n sc: edge.sc,\n ec: edge.ec\n };\n },\n\n editInsideList: function (remove, selectedCells) {\n selectedCells = !selectedCells ? this.getSelectedElements().filter(function (el) { return this.isListCell(el); }.bind(this.util)) : selectedCells;\n const cellsLen = selectedCells.length;\n if (cellsLen === 0 || (!remove && (!this.util.isListCell(selectedCells[0].previousElementSibling) && !this.util.isListCell(selectedCells[cellsLen - 1].nextElementSibling)))) {\n return {\n sc: selectedCells[0],\n so: 0,\n ec: selectedCells[cellsLen - 1],\n eo: 1\n };\n }\n\n let originList = selectedCells[0].parentNode;\n let lastCell = selectedCells[cellsLen - 1];\n let range = null;\n\n if (remove) {\n if (originList !== lastCell.parentNode && this.util.isList(lastCell.parentNode.parentNode) && lastCell.nextElementSibling) {\n lastCell = lastCell.nextElementSibling;\n while (lastCell) {\n selectedCells.push(lastCell);\n lastCell = lastCell.nextElementSibling;\n }\n }\n range = this.plugins.list.editList.call(this, originList.nodeName.toUpperCase(), selectedCells, true);\n } else {\n let innerList = this.util.createElement(originList.nodeName);\n let prev = selectedCells[0].previousElementSibling;\n let next = lastCell.nextElementSibling;\n const nodePath = { s: null, e: null, sl: originList, el: originList };\n\n for (let i = 0, len = cellsLen, c; i < len; i++) {\n c = selectedCells[i];\n if (c.parentNode !== originList) {\n this.plugins.list._insiedList.call(this, originList, innerList, prev, next, nodePath);\n originList = c.parentNode;\n innerList = this.util.createElement(originList.nodeName);\n }\n \n prev = c.previousElementSibling;\n next = c.nextElementSibling;\n innerList.appendChild(c);\n }\n \n this.plugins.list._insiedList.call(this, originList, innerList, prev, next, nodePath);\n\n const sc = this.util.getNodeFromPath(nodePath.s, nodePath.sl);\n const ec = this.util.getNodeFromPath(nodePath.e, nodePath.el);\n range = {\n sc: sc,\n so: 0,\n ec: ec,\n eo: ec.textContent.length\n };\n }\n\n return range;\n },\n\n _insiedList: function (originList, innerList, prev, next, nodePath) {\n let insertPrev = false;\n\n if (prev && innerList.tagName === prev.tagName) {\n const children = innerList.children;\n while (children[0]) {\n prev.appendChild(children[0]);\n }\n\n innerList = prev;\n insertPrev = true;\n }\n\n if (next && innerList.tagName === next.tagName) {\n const children = next.children;\n while (children[0]) {\n innerList.appendChild(children[0]);\n }\n\n const temp = next.nextElementSibling;\n next.parentNode.removeChild(next);\n next = temp;\n }\n\n if (!insertPrev) {\n if (this.util.isListCell(prev)) {\n originList = prev;\n next = null;\n }\n\n originList.insertBefore(innerList, next);\n\n if (!nodePath.s) {\n nodePath.s = this.util.getNodePath(innerList.firstElementChild.firstChild, originList, null);\n nodePath.sl = originList;\n }\n\n const slPath = originList.contains(nodePath.sl) ? this.util.getNodePath(nodePath.sl, originList) : null;\n nodePath.e = this.util.getNodePath(innerList.lastElementChild.firstChild, originList, null);\n nodePath.el = originList;\n\n this.util.mergeSameTags(originList, [nodePath.s, nodePath.e, slPath], false);\n this.util.mergeNestedTags(originList);\n if (slPath) nodePath.sl = this.util.getNodeFromPath(slPath, originList);\n }\n\n return innerList;\n },\n\n pickup: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let target = e.target;\n let command = '';\n\n while (!command && !/^UL$/i.test(target.tagName)) {\n command = target.getAttribute('data-command');\n target = target.parentNode;\n }\n\n if (!command) return;\n\n const range = this.plugins.list.editList.call(this, command, null, false);\n if (range) this.setRange(range.sc, range.so, range.ec, range.eo);\n\n this.submenuOff();\n\n // history stack\n this.history.push(false);\n }\n};\n","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\nexport default {\r\n name: 'table',\r\n display: 'submenu',\r\n add: function (core, targetElement) {\r\n const context = core.context;\r\n let contextTable = context.table = {\r\n _element: null,\r\n _tdElement: null,\r\n _trElement: null,\r\n _trElements: null,\r\n _tableXY: [],\r\n _maxWidth: true,\r\n _fixedColumn: false,\r\n _rtl: core.options.rtl,\r\n cellControllerTop: core.options.tableCellControllerPosition === 'top',\r\n resizeText: null,\r\n headerButton: null,\r\n mergeButton: null,\r\n splitButton: null,\r\n splitMenu: null,\r\n maxText: core.lang.controller.maxSize,\r\n minText: core.lang.controller.minSize,\r\n _physical_cellCnt: 0,\r\n _logical_cellCnt: 0,\r\n _rowCnt: 0,\r\n _rowIndex: 0,\r\n _physical_cellIndex: 0,\r\n _logical_cellIndex: 0,\r\n _current_colSpan: 0,\r\n _current_rowSpan: 0,\r\n icons: {\r\n expansion: core.icons.expansion,\r\n reduction: core.icons.reduction\r\n }\r\n };\r\n\r\n /** set submenu */\r\n let listDiv = this.setSubmenu(core);\r\n let tablePicker = listDiv.querySelector('.se-controller-table-picker');\r\n\r\n contextTable.tableHighlight = listDiv.querySelector('.se-table-size-highlighted');\r\n contextTable.tableUnHighlight = listDiv.querySelector('.se-table-size-unhighlighted');\r\n contextTable.tableDisplay = listDiv.querySelector('.se-table-size-display');\r\n if (core.options.rtl) contextTable.tableHighlight.style.left = (10 * 18 - 13) + 'px';\r\n\r\n /** set table controller */\r\n let tableController = this.setController_table(core);\r\n contextTable.tableController = tableController;\r\n contextTable.resizeButton = tableController.querySelector('._se_table_resize');\r\n contextTable.resizeText = tableController.querySelector('._se_table_resize > span > span');\r\n contextTable.columnFixedButton = tableController.querySelector('._se_table_fixed_column');\r\n contextTable.headerButton = tableController.querySelector('._se_table_header');\r\n\r\n /** set resizing */\r\n let resizeDiv = this.setController_tableEditor(core, contextTable.cellControllerTop);\r\n contextTable.resizeDiv = resizeDiv;\r\n contextTable.splitMenu = resizeDiv.querySelector('.se-btn-group-sub');\r\n contextTable.mergeButton = resizeDiv.querySelector('._se_table_merge_button');\r\n contextTable.splitButton = resizeDiv.querySelector('._se_table_split_button');\r\n contextTable.insertRowAboveButton = resizeDiv.querySelector('._se_table_insert_row_a');\r\n contextTable.insertRowBelowButton = resizeDiv.querySelector('._se_table_insert_row_b');\r\n \r\n /** add event listeners */\r\n tablePicker.addEventListener('mousemove', this.onMouseMove_tablePicker.bind(core, contextTable));\r\n tablePicker.addEventListener('click', this.appendTable.bind(core));\r\n resizeDiv.addEventListener('click', this.onClick_tableController.bind(core));\r\n tableController.addEventListener('click', this.onClick_tableController.bind(core));\r\n\r\n /** append target button menu */\r\n core.initMenuTarget(this.name, targetElement, listDiv);\r\n\r\n /** append controller */\r\n context.element.relative.appendChild(resizeDiv);\r\n context.element.relative.appendChild(tableController);\r\n\r\n /** empty memory */\r\n listDiv = null, tablePicker = null, resizeDiv = null, tableController = null, contextTable = null;\r\n },\r\n\r\n setSubmenu: function (core) {\r\n const listDiv = core.util.createElement('DIV');\r\n listDiv.className = 'se-submenu se-selector-table';\r\n listDiv.innerHTML = '' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    1 x 1
    ';\r\n\r\n return listDiv;\r\n },\r\n\r\n setController_table: function (core) {\r\n const lang = core.lang;\r\n const icons = core.icons;\r\n const tableResize = core.util.createElement('DIV');\r\n\r\n tableResize.className = 'se-controller se-controller-table';\r\n tableResize.innerHTML = '' +\r\n '
    ' +\r\n '
    ' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
    ' +\r\n '
    ';\r\n\r\n return tableResize;\r\n },\r\n\r\n setController_tableEditor: function (core, cellControllerTop) {\r\n const lang = core.lang;\r\n const icons = core.icons;\r\n const tableResize = core.util.createElement('DIV');\r\n\r\n tableResize.className = 'se-controller se-controller-table-cell';\r\n tableResize.innerHTML = (cellControllerTop ? '' : '
    ') +\r\n '
    ' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
    ' +\r\n '
    ' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '
    ' +\r\n '
    ' +\r\n '
      ' +\r\n '
    • ' + \r\n lang.controller.VerticalSplit + '
    • ' +\r\n '
    • ' + \r\n lang.controller.HorizontalSplit + '
    • ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ';\r\n\r\n return tableResize;\r\n },\r\n\r\n appendTable: function () {\r\n const oTable = this.util.createElement('TABLE');\r\n const createCells = this.plugins.table.createCells;\r\n\r\n const x = this.context.table._tableXY[0];\r\n let y = this.context.table._tableXY[1];\r\n let tableHTML = '';\r\n while (y > 0) {\r\n tableHTML += '' + createCells.call(this, 'td', x) + '';\r\n --y;\r\n }\r\n tableHTML += '';\r\n oTable.innerHTML = tableHTML;\r\n\r\n const changed = this.insertComponent(oTable, false, true, false);\r\n \r\n if (changed) {\r\n const firstTd = oTable.querySelector('td div');\r\n this.setRange(firstTd, 0, firstTd, 0);\r\n this.plugins.table.reset_table_picker.call(this);\r\n }\r\n },\r\n\r\n createCells: function (nodeName, cnt, returnElement) {\r\n nodeName = nodeName.toLowerCase();\r\n\r\n if (!returnElement) {\r\n let cellsHTML = '';\r\n while (cnt > 0) {\r\n cellsHTML += '<' +nodeName + '>

    ';\r\n cnt--;\r\n }\r\n return cellsHTML;\r\n } else {\r\n const cell = this.util.createElement(nodeName);\r\n cell.innerHTML = '

    ';\r\n return cell;\r\n }\r\n },\r\n\r\n onMouseMove_tablePicker: function (contextTable, e) {\r\n e.stopPropagation();\r\n\r\n let x = this._w.Math.ceil(e.offsetX / 18);\r\n let y = this._w.Math.ceil(e.offsetY / 18);\r\n x = x < 1 ? 1 : x;\r\n y = y < 1 ? 1 : y;\r\n \r\n if (contextTable._rtl) {\r\n contextTable.tableHighlight.style.left = (x * 18 - 13) + 'px';\r\n x = 11 - x;\r\n }\r\n \r\n contextTable.tableHighlight.style.width = x + 'em';\r\n contextTable.tableHighlight.style.height = y + 'em';\r\n\r\n // let x_u = x < 5 ? 5 : (x > 9 ? 10 : x + 1);\r\n // let y_u = y < 5 ? 5 : (y > 9 ? 10 : y + 1);\r\n // contextTable.tableUnHighlight.style.width = x_u + 'em';\r\n // contextTable.tableUnHighlight.style.height = y_u + 'em';\r\n\r\n this.util.changeTxt(contextTable.tableDisplay, x + ' x ' + y);\r\n contextTable._tableXY = [x, y];\r\n },\r\n\r\n reset_table_picker: function () {\r\n if (!this.context.table.tableHighlight) return;\r\n\r\n const highlight = this.context.table.tableHighlight.style;\r\n const unHighlight = this.context.table.tableUnHighlight.style;\r\n\r\n highlight.width = '1em';\r\n highlight.height = '1em';\r\n unHighlight.width = '10em';\r\n unHighlight.height = '10em';\r\n\r\n this.util.changeTxt(this.context.table.tableDisplay, '1 x 1');\r\n this.submenuOff();\r\n },\r\n\r\n init: function () {\r\n const contextTable = this.context.table;\r\n const tablePlugin = this.plugins.table;\r\n\r\n tablePlugin._removeEvents.call(this);\r\n\r\n if (tablePlugin._selectedTable) {\r\n const selectedCells = tablePlugin._selectedTable.querySelectorAll('.se-table-selected-cell');\r\n for (let i = 0, len = selectedCells.length; i < len; i++) {\r\n this.util.removeClass(selectedCells[i], 'se-table-selected-cell');\r\n }\r\n }\r\n\r\n tablePlugin._toggleEditor.call(this, true);\r\n\r\n contextTable._element = null;\r\n contextTable._tdElement = null;\r\n contextTable._trElement = null;\r\n contextTable._trElements = null;\r\n contextTable._tableXY = [];\r\n contextTable._maxWidth = true;\r\n contextTable._fixedColumn = false;\r\n contextTable._physical_cellCnt = 0;\r\n contextTable._logical_cellCnt = 0;\r\n contextTable._rowCnt = 0;\r\n contextTable._rowIndex = 0;\r\n contextTable._physical_cellIndex = 0;\r\n contextTable._logical_cellIndex = 0;\r\n contextTable._current_colSpan = 0;\r\n contextTable._current_rowSpan = 0;\r\n\r\n tablePlugin._shift = false;\r\n tablePlugin._selectedCells = null;\r\n tablePlugin._selectedTable = null;\r\n tablePlugin._ref = null;\r\n\r\n tablePlugin._fixedCell = null;\r\n tablePlugin._selectedCell = null;\r\n tablePlugin._fixedCellName = null;\r\n },\r\n\r\n /** table edit controller */\r\n call_controller_tableEdit: function (tdElement) {\r\n const tablePlugin = this.plugins.table;\r\n const contextTable = this.context.table;\r\n\r\n if (!this.getSelection().isCollapsed && !tablePlugin._selectedCell) {\r\n this.controllersOff();\r\n this.util.removeClass(tdElement, 'se-table-selected-cell');\r\n return;\r\n }\r\n\r\n const tableElement = contextTable._element || this.plugins.table._selectedTable || this.util.getParentElement(tdElement, 'TABLE');\r\n contextTable._maxWidth = this.util.hasClass(tableElement, 'se-table-size-100') || tableElement.style.width === '100%' || (!tableElement.style.width && !this.util.hasClass(tableElement, 'se-table-size-auto'));\r\n contextTable._fixedColumn = this.util.hasClass(tableElement, 'se-table-layout-fixed') || tableElement.style.tableLayout === 'fixed';\r\n tablePlugin.setTableStyle.call(this, contextTable._maxWidth ? 'width|column' : 'width');\r\n \r\n tablePlugin.setPositionControllerTop.call(this, tableElement);\r\n tablePlugin.setPositionControllerDiv.call(this, tdElement, tablePlugin._shift);\r\n \r\n if (!tablePlugin._shift) this.controllersOn(contextTable.resizeDiv, contextTable.tableController, tablePlugin.init.bind(this), tdElement, 'table');\r\n },\r\n\r\n setPositionControllerTop: function (tableElement) {\r\n this.setControllerPosition(this.context.table.tableController, tableElement, 'top', {left: 0, top: 0});\r\n },\r\n\r\n setPositionControllerDiv: function (tdElement, reset) {\r\n const contextTable = this.context.table;\r\n const resizeDiv = contextTable.resizeDiv;\r\n \r\n this.plugins.table.setCellInfo.call(this, tdElement, reset);\r\n \r\n if (contextTable.cellControllerTop) {\r\n this.setControllerPosition(resizeDiv, contextTable._element, 'top', {left: contextTable.tableController.offsetWidth, top: 0});\r\n } else {\r\n this.setControllerPosition(resizeDiv, tdElement, 'bottom', {left: 0, top: 0});\r\n }\r\n },\r\n\r\n setCellInfo: function (tdElement, reset) {\r\n const contextTable = this.context.table;\r\n const table = contextTable._element = this.plugins.table._selectedTable || this.util.getParentElement(tdElement, 'TABLE');\r\n\r\n if (/THEAD/i.test(table.firstElementChild.nodeName)) {\r\n this.util.addClass(contextTable.headerButton, 'active');\r\n } else {\r\n this.util.removeClass(contextTable.headerButton, 'active');\r\n }\r\n\r\n if (reset || contextTable._physical_cellCnt === 0) {\r\n if (contextTable._tdElement !== tdElement) {\r\n contextTable._tdElement = tdElement;\r\n contextTable._trElement = tdElement.parentNode;\r\n }\r\n\r\n const rows = contextTable._trElements = table.rows;\r\n const cellIndex = tdElement.cellIndex;\r\n\r\n let cellCnt = 0;\r\n for (let i = 0, cells = rows[0].cells, len = rows[0].cells.length; i < len; i++) {\r\n cellCnt += cells[i].colSpan;\r\n }\r\n\r\n // row cnt, row index\r\n const rowIndex = contextTable._rowIndex = contextTable._trElement.rowIndex;\r\n contextTable._rowCnt = rows.length;\r\n\r\n // cell cnt, physical cell index\r\n contextTable._physical_cellCnt = contextTable._trElement.cells.length;\r\n contextTable._logical_cellCnt = cellCnt;\r\n contextTable._physical_cellIndex = cellIndex;\r\n\r\n // span\r\n contextTable._current_colSpan = contextTable._tdElement.colSpan - 1;\r\n contextTable._current_rowSpan - contextTable._trElement.cells[cellIndex].rowSpan - 1;\r\n\r\n // find logcal cell index\r\n let rowSpanArr = [];\r\n let spanIndex = [];\r\n for (let i = 0, cells, colSpan; i <= rowIndex; i++) {\r\n cells = rows[i].cells;\r\n colSpan = 0;\r\n for (let c = 0, cLen = cells.length, cell, cs, rs, logcalIndex; c < cLen; c++) {\r\n cell = cells[c];\r\n cs = cell.colSpan - 1;\r\n rs = cell.rowSpan - 1;\r\n logcalIndex = c + colSpan;\r\n\r\n if (spanIndex.length > 0) {\r\n for (let r = 0, arr; r < spanIndex.length; r++) {\r\n arr = spanIndex[r];\r\n if (arr.row > i) continue;\r\n if (logcalIndex >= arr.index) {\r\n colSpan += arr.cs;\r\n logcalIndex += arr.cs;\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n } \r\n } else if (c === cLen - 1) {\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // logcal cell index\r\n if (i === rowIndex && c === cellIndex) {\r\n contextTable._logical_cellIndex = logcalIndex;\r\n break;\r\n }\r\n\r\n if (rs > 0) {\r\n rowSpanArr.push({\r\n index: logcalIndex,\r\n cs: cs + 1,\r\n rs: rs,\r\n row: -1\r\n });\r\n }\r\n \r\n colSpan += cs;\r\n }\r\n\r\n spanIndex = spanIndex.concat(rowSpanArr).sort(function (a, b) {return a.index - b.index;});\r\n rowSpanArr = [];\r\n }\r\n\r\n rowSpanArr = null;\r\n spanIndex = null;\r\n }\r\n },\r\n\r\n editTable: function (type, option) {\r\n const tablePlugin = this.plugins.table;\r\n const contextTable = this.context.table;\r\n const table = contextTable._element;\r\n const isRow = type === 'row';\r\n\r\n if (isRow) {\r\n const tableAttr = contextTable._trElement.parentNode;\r\n if (/^THEAD$/i.test(tableAttr.nodeName)) {\r\n if (option === 'up') {\r\n return;\r\n } else if (!tableAttr.nextElementSibling || !/^TBODY$/i.test(tableAttr.nextElementSibling.nodeName)) {\r\n table.innerHTML += '' + tablePlugin.createCells.call(this, 'td', contextTable._logical_cellCnt, false) + '';\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // multi\r\n if (tablePlugin._ref) {\r\n const positionCell = contextTable._tdElement;\r\n const selectedCells = tablePlugin._selectedCells;\r\n // multi - row\r\n if (isRow) {\r\n // remove row\r\n if (!option) {\r\n let row = selectedCells[0].parentNode;\r\n const removeCells = [selectedCells[0]];\r\n\r\n for (let i = 1, len = selectedCells.length, cell; i < len; i++) {\r\n cell = selectedCells[i];\r\n if (row !== cell.parentNode) {\r\n removeCells.push(cell);\r\n row = cell.parentNode;\r\n }\r\n }\r\n\r\n for (let i = 0, len = removeCells.length; i < len; i++) {\r\n tablePlugin.setCellInfo.call(this, removeCells[i], true);\r\n tablePlugin.editRow.call(this, option);\r\n }\r\n } else { // edit row\r\n tablePlugin.setCellInfo.call(this, option === 'up' ? selectedCells[0] : selectedCells[selectedCells.length - 1], true);\r\n tablePlugin.editRow.call(this, option, positionCell);\r\n }\r\n } else { // multi - cell\r\n const firstRow = selectedCells[0].parentNode;\r\n // remove cell\r\n if (!option) {\r\n const removeCells = [selectedCells[0]];\r\n \r\n for (let i = 1, len = selectedCells.length, cell; i < len; i++) {\r\n cell = selectedCells[i];\r\n if (firstRow === cell.parentNode) {\r\n removeCells.push(cell);\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n for (let i = 0, len = removeCells.length; i < len; i++) {\r\n tablePlugin.setCellInfo.call(this, removeCells[i], true);\r\n tablePlugin.editCell.call(this, option);\r\n }\r\n } else { // edit cell\r\n let rightCell = null;\r\n\r\n for (let i = 0, len = selectedCells.length - 1; i < len; i++) {\r\n if (firstRow !== selectedCells[i + 1].parentNode) {\r\n rightCell = selectedCells[i];\r\n break;\r\n }\r\n }\r\n\r\n tablePlugin.setCellInfo.call(this, option === 'left' ? selectedCells[0] : rightCell || selectedCells[0], true);\r\n tablePlugin.editCell.call(this, option, positionCell);\r\n }\r\n }\r\n\r\n if (!option) tablePlugin.init.call(this);\r\n } // one\r\n else {\r\n tablePlugin[isRow ? 'editRow' : 'editCell'].call(this, option);\r\n }\r\n\r\n // after remove\r\n if (!option) {\r\n const children = table.children;\r\n for (let i = 0; i < children.length; i++) {\r\n if (children[i].children.length === 0) {\r\n this.util.removeItem(children[i]);\r\n i--;\r\n }\r\n }\r\n\r\n if (table.children.length === 0) this.util.removeItem(table);\r\n }\r\n },\r\n\r\n editRow: function (option, positionResetElement) {\r\n const contextTable = this.context.table;\r\n const remove = !option;\r\n\r\n const up = option === 'up';\r\n const originRowIndex = contextTable._rowIndex;\r\n const rowIndex = remove || up ? originRowIndex : originRowIndex + contextTable._current_rowSpan + 1;\r\n const sign = remove ? -1 : 1;\r\n \r\n const rows = contextTable._trElements;\r\n let cellCnt = contextTable._logical_cellCnt;\r\n\r\n for (let i = 0, len = originRowIndex + (remove ? -1 : 0), cell; i <= len; i++) {\r\n cell = rows[i].cells;\r\n if (cell.length === 0) return;\r\n \r\n for (let c = 0, cLen = cell.length, rs, cs; c < cLen; c++) {\r\n rs = cell[c].rowSpan;\r\n cs = cell[c].colSpan;\r\n if (rs < 2 && cs < 2) continue;\r\n\r\n if (rs + i > rowIndex && rowIndex > i) {\r\n cell[c].rowSpan = rs + sign;\r\n cellCnt -= cs;\r\n }\r\n }\r\n }\r\n\r\n if (remove) {\r\n const next = rows[originRowIndex + 1];\r\n if (next) {\r\n const spanCells = [];\r\n let cells = rows[originRowIndex].cells;\r\n let colSpan = 0;\r\n\r\n for (let i = 0, len = cells.length, cell, logcalIndex; i < len; i++) {\r\n cell = cells[i];\r\n logcalIndex = i + colSpan;\r\n colSpan += cell.colSpan - 1;\r\n\r\n if (cell.rowSpan > 1) {\r\n cell.rowSpan -= 1;\r\n spanCells.push({cell: cell.cloneNode(false), index: logcalIndex});\r\n }\r\n }\r\n\r\n if (spanCells.length > 0) {\r\n let spanCell = spanCells.shift();\r\n cells = next.cells;\r\n colSpan = 0;\r\n\r\n for (let i = 0, len = cells.length, cell, logcalIndex; i < len; i++) {\r\n cell = cells[i];\r\n logcalIndex = i + colSpan;\r\n colSpan += cell.colSpan - 1;\r\n \r\n if (logcalIndex >= spanCell.index) {\r\n i--, colSpan--;\r\n colSpan += spanCell.cell.colSpan - 1;\r\n next.insertBefore(spanCell.cell, cell);\r\n spanCell = spanCells.shift();\r\n if (!spanCell) break;\r\n }\r\n }\r\n\r\n if (spanCell) {\r\n next.appendChild(spanCell.cell);\r\n for (let i = 0, len = spanCells.length; i < len; i++) {\r\n next.appendChild(spanCells[i].cell);\r\n }\r\n }\r\n }\r\n }\r\n\r\n contextTable._element.deleteRow(rowIndex);\r\n } else {\r\n const newRow = contextTable._element.insertRow(rowIndex);\r\n newRow.innerHTML = this.plugins.table.createCells.call(this, 'td', cellCnt, false);\r\n }\r\n\r\n if (!remove) {\r\n this.plugins.table.setPositionControllerDiv.call(this, positionResetElement || contextTable._tdElement, true);\r\n } else {\r\n this.controllersOff();\r\n }\r\n },\r\n\r\n editCell: function (option, positionResetElement) {\r\n const contextTable = this.context.table;\r\n const util = this.util;\r\n const remove = !option;\r\n\r\n const left = option === 'left';\r\n const colSpan = contextTable._current_colSpan;\r\n const cellIndex = remove || left ? contextTable._logical_cellIndex : contextTable._logical_cellIndex + colSpan + 1;\r\n\r\n const rows = contextTable._trElements;\r\n let rowSpanArr = [];\r\n let spanIndex = [];\r\n let passCell = 0;\r\n const removeCell = [];\r\n const removeSpanArr = [];\r\n\r\n for (let i = 0, len = contextTable._rowCnt, row, insertIndex, cells, newCell, applySpan, cellColSpan; i < len; i++) {\r\n row = rows[i];\r\n insertIndex = cellIndex;\r\n applySpan = false;\r\n cells = row.cells;\r\n cellColSpan = 0;\r\n\r\n for (let c = 0, cell, cLen = cells.length, rs, cs, removeIndex; c < cLen; c++) {\r\n cell = cells[c];\r\n if (!cell) break;\r\n\r\n rs = cell.rowSpan - 1;\r\n cs = cell.colSpan - 1;\r\n\r\n if (!remove) {\r\n if (c >= insertIndex) break;\r\n if (cs > 0) {\r\n if (passCell < 1 && cs + c >= insertIndex) {\r\n cell.colSpan += 1;\r\n insertIndex = null;\r\n passCell = rs + 1;\r\n break;\r\n }\r\n\r\n insertIndex -= cs;\r\n }\r\n\r\n if (!applySpan) {\r\n for (let r = 0, arr; r < spanIndex.length; r++) {\r\n arr = spanIndex[r];\r\n insertIndex -= arr.cs;\r\n arr.rs -= 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n } \r\n }\r\n applySpan = true;\r\n }\r\n } else {\r\n removeIndex = c + cellColSpan;\r\n\r\n if (spanIndex.length > 0) {\r\n const lastCell = !cells[c + 1];\r\n for (let r = 0, arr; r < spanIndex.length; r++) {\r\n arr = spanIndex[r];\r\n if (arr.row > i) continue;\r\n\r\n if (removeIndex >= arr.index) {\r\n cellColSpan += arr.cs;\r\n removeIndex = c + cellColSpan;\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n } \r\n } else if (lastCell) {\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (rs > 0) {\r\n rowSpanArr.push({\r\n rs: rs,\r\n cs: cs + 1,\r\n index: removeIndex,\r\n row: -1\r\n });\r\n }\r\n\r\n if (removeIndex >= insertIndex && removeIndex + cs <= insertIndex + colSpan) {\r\n removeCell.push(cell);\r\n } else if (removeIndex <= insertIndex + colSpan && removeIndex + cs >= insertIndex) {\r\n cell.colSpan -= util.getOverlapRangeAtIndex(cellIndex, cellIndex + colSpan, removeIndex, removeIndex + cs); \r\n } else if (rs > 0 && (removeIndex < insertIndex || removeIndex + cs > insertIndex + colSpan)) {\r\n removeSpanArr.push({\r\n cell: cell,\r\n i: i,\r\n rs: i + rs\r\n });\r\n }\r\n\r\n cellColSpan += cs;\r\n }\r\n }\r\n\r\n spanIndex = spanIndex.concat(rowSpanArr).sort(function (a, b) {return a.index - b.index;});\r\n rowSpanArr = [];\r\n\r\n if (!remove) {\r\n if (passCell > 0) {\r\n passCell -= 1;\r\n continue;\r\n }\r\n\r\n if (insertIndex !== null && cells.length > 0) {\r\n newCell = this.plugins.table.createCells.call(this, cells[0].nodeName, 0, true);\r\n newCell = row.insertBefore(newCell, cells[insertIndex]);\r\n }\r\n }\r\n }\r\n\r\n if (remove) {\r\n let removeFirst, removeEnd;\r\n for (let r = 0, rLen = removeCell.length, row; r < rLen; r++) {\r\n row = removeCell[r].parentNode;\r\n util.removeItem(removeCell[r]);\r\n if (row.cells.length === 0) {\r\n if (!removeFirst) removeFirst = util.getArrayIndex(rows, row);\r\n removeEnd = util.getArrayIndex(rows, row);\r\n util.removeItem(row);\r\n }\r\n }\r\n\r\n for (let c = 0, cLen = removeSpanArr.length, rowSpanCell; c < cLen; c++) {\r\n rowSpanCell = removeSpanArr[c];\r\n rowSpanCell.cell.rowSpan = util.getOverlapRangeAtIndex(removeFirst, removeEnd, rowSpanCell.i, rowSpanCell.rs);\r\n }\r\n\r\n this.controllersOff();\r\n } else {\r\n this.plugins.table.setPositionControllerDiv.call(this, positionResetElement || contextTable._tdElement, true);\r\n }\r\n },\r\n\r\n _closeSplitMenu: null,\r\n openSplitMenu: function () {\r\n this.util.addClass(this.context.table.splitButton, 'on');\r\n this.context.table.splitMenu.style.display = 'inline-table';\r\n\r\n this.plugins.table._closeSplitMenu = function () {\r\n this.util.removeClass(this.context.table.splitButton, 'on');\r\n this.context.table.splitMenu.style.display = 'none';\r\n this.removeDocEvent('click', this.plugins.table._closeSplitMenu);\r\n this.plugins.table._closeSplitMenu = null;\r\n }.bind(this);\r\n\r\n this.addDocEvent('click', this.plugins.table._closeSplitMenu);\r\n },\r\n\r\n splitCells: function (direction) {\r\n const util = this.util;\r\n const vertical = direction === 'vertical';\r\n const contextTable = this.context.table;\r\n const currentCell = contextTable._tdElement;\r\n const rows = contextTable._trElements;\r\n const currentRow = contextTable._trElement;\r\n const index = contextTable._logical_cellIndex;\r\n const rowIndex = contextTable._rowIndex;\r\n const newCell = this.plugins.table.createCells.call(this, currentCell.nodeName, 0, true);\r\n\r\n // vertical\r\n if (vertical) {\r\n const currentColSpan = currentCell.colSpan;\r\n newCell.rowSpan = currentCell.rowSpan;\r\n\r\n // colspan > 1\r\n if (currentColSpan > 1) {\r\n newCell.colSpan = this._w.Math.floor(currentColSpan/2);\r\n currentCell.colSpan = currentColSpan - newCell.colSpan;\r\n currentRow.insertBefore(newCell, currentCell.nextElementSibling);\r\n } else { // colspan - 1\r\n let rowSpanArr = [];\r\n let spanIndex = [];\r\n\r\n for (let i = 0, len = contextTable._rowCnt, cells, colSpan; i < len; i++) {\r\n cells = rows[i].cells;\r\n colSpan = 0;\r\n for (let c = 0, cLen = cells.length, cell, cs, rs, logcalIndex; c < cLen; c++) {\r\n cell = cells[c];\r\n cs = cell.colSpan - 1;\r\n rs = cell.rowSpan - 1;\r\n logcalIndex = c + colSpan;\r\n\r\n if (spanIndex.length > 0) {\r\n for (let r = 0, arr; r < spanIndex.length; r++) {\r\n arr = spanIndex[r];\r\n if (arr.row > i) continue;\r\n if (logcalIndex >= arr.index) {\r\n colSpan += arr.cs;\r\n logcalIndex += arr.cs;\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n } \r\n } else if (c === cLen - 1) {\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (logcalIndex <= index && rs > 0) {\r\n rowSpanArr.push({\r\n index: logcalIndex,\r\n cs: cs + 1,\r\n rs: rs,\r\n row: -1\r\n });\r\n }\r\n\r\n if (cell !== currentCell && logcalIndex <= index && logcalIndex + cs >= index + currentColSpan - 1) {\r\n cell.colSpan += 1;\r\n break;\r\n }\r\n\r\n if (logcalIndex > index) break;\r\n \r\n colSpan += cs;\r\n }\r\n\r\n spanIndex = spanIndex.concat(rowSpanArr).sort(function (a, b) {return a.index - b.index;});\r\n rowSpanArr = [];\r\n }\r\n\r\n currentRow.insertBefore(newCell, currentCell.nextElementSibling);\r\n }\r\n } else { // horizontal\r\n const currentRowSpan = currentCell.rowSpan;\r\n newCell.colSpan = currentCell.colSpan;\r\n\r\n // rowspan > 1\r\n if (currentRowSpan > 1) {\r\n newCell.rowSpan = this._w.Math.floor(currentRowSpan/2);\r\n const newRowSpan = currentRowSpan - newCell.rowSpan;\r\n\r\n const rowSpanArr = [];\r\n const nextRowIndex = util.getArrayIndex(rows, currentRow) + newRowSpan;\r\n\r\n for (let i = 0, cells, colSpan; i < nextRowIndex; i++) {\r\n cells = rows[i].cells;\r\n colSpan = 0;\r\n for (let c = 0, cLen = cells.length, cell, cs, logcalIndex; c < cLen; c++) {\r\n logcalIndex = c + colSpan;\r\n if (logcalIndex >= index) break;\r\n\r\n cell = cells[c];\r\n cs = cell.rowSpan - 1;\r\n if (cs > 0 && cs + i >= nextRowIndex && logcalIndex < index) {\r\n rowSpanArr.push({\r\n index: logcalIndex,\r\n cs: cell.colSpan\r\n });\r\n }\r\n colSpan += cell.colSpan - 1;\r\n }\r\n }\r\n\r\n const nextRow = rows[nextRowIndex];\r\n const nextCells = nextRow.cells;\r\n let rs = rowSpanArr.shift();\r\n\r\n for (let c = 0, cLen = nextCells.length, colSpan = 0, cell, cs, logcalIndex, insertIndex; c < cLen; c++) {\r\n logcalIndex = c + colSpan;\r\n cell = nextCells[c];\r\n cs = cell.colSpan - 1;\r\n insertIndex = logcalIndex + cs + 1;\r\n\r\n if (rs && insertIndex >= rs.index) {\r\n colSpan += rs.cs;\r\n insertIndex += rs.cs;\r\n rs = rowSpanArr.shift();\r\n }\r\n \r\n if (insertIndex >= index || c === cLen - 1) {\r\n nextRow.insertBefore(newCell, cell.nextElementSibling);\r\n break;\r\n }\r\n\r\n colSpan += cs;\r\n }\r\n\r\n currentCell.rowSpan = newRowSpan;\r\n } else { // rowspan - 1\r\n newCell.rowSpan = currentCell.rowSpan;\r\n const newRow = util.createElement('TR');\r\n newRow.appendChild(newCell);\r\n\r\n for (let i = 0, cells; i < rowIndex; i++) {\r\n cells = rows[i].cells;\r\n if (cells.length === 0) return;\r\n\r\n for (let c = 0, cLen = cells.length; c < cLen; c++) {\r\n if (i + cells[c].rowSpan - 1 >= rowIndex) {\r\n cells[c].rowSpan += 1;\r\n }\r\n }\r\n }\r\n\r\n const physicalIndex = contextTable._physical_cellIndex;\r\n const cells = currentRow.cells;\r\n\r\n for (let c = 0, cLen = cells.length; c < cLen; c++) {\r\n if (c === physicalIndex) continue; \r\n cells[c].rowSpan += 1; \r\n }\r\n\r\n currentRow.parentNode.insertBefore(newRow, currentRow.nextElementSibling);\r\n }\r\n }\r\n\r\n this.focusEdge(currentCell);\r\n this.plugins.table.setPositionControllerDiv.call(this, currentCell, true);\r\n },\r\n\r\n mergeCells: function () {\r\n const tablePlugin = this.plugins.table;\r\n const contextTable = this.context.table;\r\n const util = this.util;\r\n\r\n const ref = tablePlugin._ref;\r\n const selectedCells = tablePlugin._selectedCells;\r\n const mergeCell = selectedCells[0];\r\n \r\n let emptyRowFirst = null;\r\n let emptyRowLast = null;\r\n let cs = (ref.ce - ref.cs) + 1;\r\n let rs = (ref.re - ref.rs) + 1;\r\n let mergeHTML = '';\r\n let row = null;\r\n\r\n for (let i = 1, len = selectedCells.length, cell, ch; i < len; i++) {\r\n cell = selectedCells[i];\r\n if (row !== cell.parentNode) row = cell.parentNode;\r\n\r\n ch = cell.children;\r\n for (let c = 0, cLen = ch.length; c < cLen; c++) {\r\n if (util.isFormatElement(ch[c]) && util.onlyZeroWidthSpace(ch[c].textContent)) {\r\n util.removeItem(ch[c]);\r\n } \r\n }\r\n\r\n mergeHTML += cell.innerHTML;\r\n util.removeItem(cell);\r\n\r\n if (row.cells.length === 0) {\r\n if (!emptyRowFirst) emptyRowFirst = row;\r\n else emptyRowLast = row;\r\n rs -= 1;\r\n }\r\n }\r\n\r\n if (emptyRowFirst) {\r\n const rows = contextTable._trElements;\r\n const rowIndexFirst = util.getArrayIndex(rows, emptyRowFirst);\r\n const rowIndexLast = util.getArrayIndex(rows, emptyRowLast || emptyRowFirst);\r\n const removeRows = [];\r\n \r\n for (let i = 0, cells; i <= rowIndexLast; i++) {\r\n cells = rows[i].cells;\r\n if (cells.length === 0) {\r\n removeRows.push(rows[i]);\r\n continue;\r\n }\r\n \r\n for (let c = 0, cLen = cells.length, cell, rs; c < cLen; c++) {\r\n cell = cells[c];\r\n rs = cell.rowSpan - 1;\r\n if (rs > 0 && i + rs >= rowIndexFirst) {\r\n cell.rowSpan -= util.getOverlapRangeAtIndex(rowIndexFirst, rowIndexLast, i, i + rs);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0, len = removeRows.length; i < len; i++) {\r\n util.removeItem(removeRows[i]);\r\n }\r\n }\r\n\r\n mergeCell.innerHTML += mergeHTML;\r\n mergeCell.colSpan = cs;\r\n mergeCell.rowSpan = rs;\r\n\r\n this.controllersOff();\r\n tablePlugin.setActiveButton.call(this, true, false);\r\n tablePlugin.call_controller_tableEdit.call(this, mergeCell);\r\n\r\n util.addClass(mergeCell, 'se-table-selected-cell');\r\n this.focusEdge(mergeCell);\r\n },\r\n\r\n toggleHeader: function () {\r\n const util = this.util;\r\n const headerButton = this.context.table.headerButton;\r\n const active = util.hasClass(headerButton, 'active');\r\n const table = this.context.table._element;\r\n\r\n if (!active) {\r\n const header = util.createElement('THEAD');\r\n header.innerHTML = '' + this.plugins.table.createCells.call(this, 'th', this.context.table._logical_cellCnt, false) + '';\r\n table.insertBefore(header, table.firstElementChild);\r\n } else {\r\n util.removeItem(table.querySelector('thead'));\r\n }\r\n\r\n util.toggleClass(headerButton, 'active');\r\n\r\n if (/TH/i.test(this.context.table._tdElement.nodeName)) {\r\n this.controllersOff();\r\n } else {\r\n this.plugins.table.setPositionControllerDiv.call(this, this.context.table._tdElement, false);\r\n }\r\n },\r\n\r\n setTableStyle: function (styles) {\r\n const contextTable = this.context.table;\r\n const tableElement = contextTable._element;\r\n let icon, span, sizeIcon, text;\r\n\r\n if (styles.indexOf('width') > -1) {\r\n icon = contextTable.resizeButton.firstElementChild;\r\n span = contextTable.resizeText;\r\n\r\n if (!contextTable._maxWidth) {\r\n sizeIcon = contextTable.icons.expansion;\r\n text = contextTable.maxText;\r\n contextTable.columnFixedButton.style.display = 'none';\r\n this.util.removeClass(tableElement, 'se-table-size-100');\r\n this.util.addClass(tableElement, 'se-table-size-auto');\r\n } else {\r\n sizeIcon = contextTable.icons.reduction;\r\n text = contextTable.minText;\r\n contextTable.columnFixedButton.style.display = 'block';\r\n this.util.removeClass(tableElement, 'se-table-size-auto');\r\n this.util.addClass(tableElement, 'se-table-size-100');\r\n }\r\n \r\n this.util.changeElement(icon, sizeIcon);\r\n this.util.changeTxt(span, text);\r\n }\r\n\r\n if (styles.indexOf('column') > -1) {\r\n if (!contextTable._fixedColumn) {\r\n this.util.removeClass(tableElement, 'se-table-layout-fixed');\r\n this.util.addClass(tableElement, 'se-table-layout-auto');\r\n this.util.removeClass(contextTable.columnFixedButton, 'active');\r\n } else {\r\n this.util.removeClass(tableElement, 'se-table-layout-auto');\r\n this.util.addClass(tableElement, 'se-table-layout-fixed');\r\n this.util.addClass(contextTable.columnFixedButton, 'active');\r\n }\r\n \r\n }\r\n },\r\n\r\n setActiveButton: function (fixedCell, selectedCell) {\r\n const contextTable = this.context.table;\r\n\r\n if (/^TH$/i.test(fixedCell.nodeName)) {\r\n contextTable.insertRowAboveButton.setAttribute('disabled', true);\r\n contextTable.insertRowBelowButton.setAttribute('disabled', true);\r\n } else {\r\n contextTable.insertRowAboveButton.removeAttribute('disabled');\r\n contextTable.insertRowBelowButton.removeAttribute('disabled');\r\n }\r\n\r\n if (!selectedCell || fixedCell === selectedCell) {\r\n contextTable.splitButton.removeAttribute('disabled');\r\n contextTable.mergeButton.setAttribute('disabled', true);\r\n } else {\r\n contextTable.splitButton.setAttribute('disabled', true);\r\n contextTable.mergeButton.removeAttribute('disabled');\r\n }\r\n },\r\n\r\n // multi selecte\r\n _bindOnSelect: null,\r\n _bindOffSelect: null,\r\n _bindOffShift: null,\r\n _selectedCells: null,\r\n _shift: false,\r\n _fixedCell: null,\r\n _fixedCellName: null,\r\n _selectedCell: null,\r\n _selectedTable: null,\r\n _ref: null,\r\n _toggleEditor: function (enabled) {\r\n this.context.element.wysiwyg.setAttribute('contenteditable', enabled);\r\n if (enabled) this.util.removeClass(this.context.element.wysiwyg, 'se-disabled');\r\n else this.util.addClass(this.context.element.wysiwyg, 'se-disabled');\r\n },\r\n\r\n _offCellMultiSelect: function (e) {\r\n e.stopPropagation();\r\n const tablePlugin = this.plugins.table;\r\n\r\n if (!tablePlugin._shift) {\r\n tablePlugin._removeEvents.call(this);\r\n tablePlugin._toggleEditor.call(this, true);\r\n } else if (tablePlugin._initBind) {\r\n this._wd.removeEventListener('touchmove', tablePlugin._initBind);\r\n tablePlugin._initBind = null;\r\n }\r\n\r\n if (!tablePlugin._fixedCell || !tablePlugin._selectedTable) return;\r\n \r\n tablePlugin.setActiveButton.call(this, tablePlugin._fixedCell, tablePlugin._selectedCell);\r\n tablePlugin.call_controller_tableEdit.call(this, tablePlugin._selectedCell || tablePlugin._fixedCell);\r\n\r\n tablePlugin._selectedCells = tablePlugin._selectedTable.querySelectorAll('.se-table-selected-cell');\r\n if (tablePlugin._selectedCell && tablePlugin._fixedCell) this.focusEdge(tablePlugin._selectedCell);\r\n\r\n if (!tablePlugin._shift) {\r\n tablePlugin._fixedCell = null;\r\n tablePlugin._selectedCell = null;\r\n tablePlugin._fixedCellName = null;\r\n }\r\n },\r\n\r\n _onCellMultiSelect: function (e) {\r\n this._antiBlur = true;\r\n const tablePlugin = this.plugins.table;\r\n const target = this.util.getParentElement(e.target, this.util.isCell);\r\n\r\n if (tablePlugin._shift) {\r\n if (target === tablePlugin._fixedCell) tablePlugin._toggleEditor.call(this, true);\r\n else tablePlugin._toggleEditor.call(this, false);\r\n } else if (!tablePlugin._ref) {\r\n if (target === tablePlugin._fixedCell) return;\r\n else tablePlugin._toggleEditor.call(this, false);\r\n }\r\n\r\n if (!target || target === tablePlugin._selectedCell || tablePlugin._fixedCellName !== target.nodeName || \r\n tablePlugin._selectedTable !== this.util.getParentElement(target, 'TABLE')) {\r\n return;\r\n }\r\n\r\n tablePlugin._selectedCell = target;\r\n tablePlugin._setMultiCells.call(this, tablePlugin._fixedCell, target);\r\n },\r\n\r\n _setMultiCells: function (startCell, endCell) {\r\n const tablePlugin = this.plugins.table;\r\n const rows = tablePlugin._selectedTable.rows;\r\n const util = this.util;\r\n\r\n const selectedCells = tablePlugin._selectedTable.querySelectorAll('.se-table-selected-cell');\r\n for (let i = 0, len = selectedCells.length; i < len; i++) {\r\n util.removeClass(selectedCells[i], 'se-table-selected-cell');\r\n }\r\n\r\n if (startCell === endCell) {\r\n util.addClass(startCell, 'se-table-selected-cell');\r\n if (!tablePlugin._shift) return;\r\n }\r\n\r\n let findSelectedCell = true;\r\n let spanIndex = [];\r\n let rowSpanArr = [];\r\n const ref = tablePlugin._ref = {_i: 0, cs: null, ce: null, rs: null, re: null};\r\n\r\n for (let i = 0, len = rows.length, cells, colSpan; i < len; i++) {\r\n cells = rows[i].cells;\r\n colSpan = 0;\r\n\r\n for (let c = 0, cLen = cells.length, cell, logcalIndex, cs, rs; c < cLen; c++) {\r\n cell = cells[c];\r\n cs = cell.colSpan - 1;\r\n rs = cell.rowSpan - 1;\r\n logcalIndex = c + colSpan;\r\n\r\n if (spanIndex.length > 0) {\r\n for (let r = 0, arr; r < spanIndex.length; r++) {\r\n arr = spanIndex[r];\r\n if (arr.row > i) continue;\r\n if (logcalIndex >= arr.index) {\r\n colSpan += arr.cs;\r\n logcalIndex += arr.cs;\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n }\r\n } else if (c === cLen - 1) {\r\n arr.rs -= 1;\r\n arr.row = i + 1;\r\n if (arr.rs < 1) {\r\n spanIndex.splice(r, 1);\r\n r--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (findSelectedCell) {\r\n if (cell === startCell || cell === endCell) {\r\n ref.cs = ref.cs !== null && ref.cs < logcalIndex ? ref.cs : logcalIndex;\r\n ref.ce = ref.ce !== null && ref.ce > logcalIndex + cs ? ref.ce : logcalIndex + cs;\r\n ref.rs = ref.rs !== null && ref.rs < i ? ref.rs : i;\r\n ref.re = ref.re !== null && ref.re > i + rs ? ref.re : i + rs;\r\n ref._i += 1;\r\n }\r\n \r\n if (ref._i === 2) {\r\n findSelectedCell = false;\r\n spanIndex = [];\r\n rowSpanArr = [];\r\n i = -1;\r\n break;\r\n }\r\n } else if (util.getOverlapRangeAtIndex(ref.cs, ref.ce, logcalIndex, logcalIndex + cs) && util.getOverlapRangeAtIndex(ref.rs, ref.re, i, i + rs)) {\r\n const newCs = ref.cs < logcalIndex ? ref.cs : logcalIndex;\r\n const newCe = ref.ce > logcalIndex + cs ? ref.ce : logcalIndex + cs;\r\n const newRs = ref.rs < i ? ref.rs : i;\r\n const newRe = ref.re > i + rs ? ref.re : i + rs;\r\n\r\n if (ref.cs !== newCs || ref.ce !== newCe || ref.rs !== newRs || ref.re !== newRe) {\r\n ref.cs = newCs;\r\n ref.ce = newCe;\r\n ref.rs = newRs;\r\n ref.re = newRe;\r\n i = -1;\r\n\r\n spanIndex = [];\r\n rowSpanArr = [];\r\n break;\r\n }\r\n\r\n util.addClass(cell, 'se-table-selected-cell');\r\n }\r\n\r\n if (rs > 0) {\r\n rowSpanArr.push({\r\n index: logcalIndex,\r\n cs: cs + 1,\r\n rs: rs,\r\n row: -1\r\n });\r\n }\r\n\r\n colSpan += cell.colSpan - 1;\r\n }\r\n\r\n spanIndex = spanIndex.concat(rowSpanArr).sort(function (a, b) {return a.index - b.index;});\r\n rowSpanArr = [];\r\n }\r\n },\r\n\r\n _removeEvents: function () {\r\n const tablePlugin = this.plugins.table;\r\n\r\n if (tablePlugin._initBind) {\r\n this._wd.removeEventListener('touchmove', tablePlugin._initBind);\r\n tablePlugin._initBind = null;\r\n }\r\n\r\n if (tablePlugin._bindOnSelect) {\r\n this._wd.removeEventListener('mousedown', tablePlugin._bindOnSelect);\r\n this._wd.removeEventListener('mousemove', tablePlugin._bindOnSelect);\r\n tablePlugin._bindOnSelect = null;\r\n }\r\n\r\n if (tablePlugin._bindOffSelect) {\r\n this._wd.removeEventListener('mouseup', tablePlugin._bindOffSelect);\r\n tablePlugin._bindOffSelect = null;\r\n }\r\n\r\n if (tablePlugin._bindOffShift) {\r\n this._wd.removeEventListener('keyup', tablePlugin._bindOffShift);\r\n tablePlugin._bindOffShift = null;\r\n }\r\n },\r\n\r\n _initBind: null,\r\n onTableCellMultiSelect: function (tdElement, shift) {\r\n const tablePlugin = this.plugins.table;\r\n\r\n tablePlugin._removeEvents.call(this);\r\n this.controllersOff();\r\n\r\n tablePlugin._shift = shift;\r\n tablePlugin._fixedCell = tdElement;\r\n tablePlugin._fixedCellName = tdElement.nodeName;\r\n tablePlugin._selectedTable = this.util.getParentElement(tdElement, 'TABLE');\r\n\r\n const selectedCells = tablePlugin._selectedTable.querySelectorAll('.se-table-selected-cell');\r\n for (let i = 0, len = selectedCells.length; i < len; i++) {\r\n this.util.removeClass(selectedCells[i], 'se-table-selected-cell');\r\n }\r\n\r\n this.util.addClass(tdElement, 'se-table-selected-cell');\r\n \r\n tablePlugin._bindOnSelect = tablePlugin._onCellMultiSelect.bind(this);\r\n tablePlugin._bindOffSelect = tablePlugin._offCellMultiSelect.bind(this);\r\n\r\n if (!shift) {\r\n this._wd.addEventListener('mousemove', tablePlugin._bindOnSelect, false);\r\n } else {\r\n tablePlugin._bindOffShift = function () {\r\n this.controllersOn(this.context.table.resizeDiv, this.context.table.tableController, this.plugins.table.init.bind(this), tdElement, 'table');\r\n if (!tablePlugin._ref) this.controllersOff();\r\n }.bind(this);\r\n\r\n this._wd.addEventListener('keyup', tablePlugin._bindOffShift, false);\r\n this._wd.addEventListener('mousedown', tablePlugin._bindOnSelect, false);\r\n }\r\n\r\n this._wd.addEventListener('mouseup', tablePlugin._bindOffSelect, false);\r\n tablePlugin._initBind = tablePlugin.init.bind(this);\r\n this._wd.addEventListener('touchmove', tablePlugin._initBind, false);\r\n },\r\n\r\n onClick_tableController: function (e) {\r\n e.stopPropagation();\r\n const target = e.target.getAttribute('data-command') ? e.target : e.target.parentNode;\r\n\r\n if (target.getAttribute('disabled')) return;\r\n\r\n const command = target.getAttribute('data-command');\r\n const value = target.getAttribute('data-value');\r\n const option = target.getAttribute('data-option');\r\n const tablePlugin = this.plugins.table;\r\n \r\n if (typeof tablePlugin._closeSplitMenu === 'function') {\r\n tablePlugin._closeSplitMenu();\r\n if (command === 'onsplit') return;\r\n }\r\n\r\n if (!command) return;\r\n\r\n e.preventDefault();\r\n const contextTable = this.context.table;\r\n\r\n switch (command) {\r\n case 'insert':\r\n case 'delete':\r\n tablePlugin.editTable.call(this, value, option);\r\n break;\r\n case 'header':\r\n tablePlugin.toggleHeader.call(this);\r\n break;\r\n case 'onsplit':\r\n tablePlugin.openSplitMenu.call(this);\r\n break;\r\n case 'split':\r\n tablePlugin.splitCells.call(this, value);\r\n break;\r\n case 'merge':\r\n tablePlugin.mergeCells.call(this);\r\n break;\r\n case 'resize':\r\n contextTable._maxWidth = !contextTable._maxWidth;\r\n tablePlugin.setTableStyle.call(this, 'width');\r\n tablePlugin.setPositionControllerTop.call(this, contextTable._element);\r\n tablePlugin.setPositionControllerDiv.call(this, contextTable._tdElement, tablePlugin._shift);\r\n break;\r\n case 'layout':\r\n contextTable._fixedColumn = !contextTable._fixedColumn;\r\n tablePlugin.setTableStyle.call(this, 'column');\r\n tablePlugin.setPositionControllerTop.call(this, contextTable._element);\r\n tablePlugin.setPositionControllerDiv.call(this, contextTable._tdElement, tablePlugin._shift);\r\n break;\r\n case 'remove':\r\n const emptyDiv = contextTable._element.parentNode;\r\n this.util.removeItem(contextTable._element);\r\n this.controllersOff();\r\n\r\n if (emptyDiv !== this.context.element.wysiwyg) this.util.removeItemAllParents(emptyDiv, function (current) { return current.childNodes.length === 0; }, null);\r\n this.focus();\r\n }\r\n\r\n // history stack\r\n this.history.push(false);\r\n }\r\n};\r\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'formatBlock',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.formatBlock = {\n targetText: targetElement.querySelector('.txt'),\n targetTooltip: targetElement.parentNode.querySelector('.se-tooltip-text'),\n _formatList: null,\n currentFormat: ''\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n\n /** add event listeners */\n listDiv.querySelector('ul').addEventListener('click', this.pickUp.bind(core));\n context.formatBlock._formatList = listDiv.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null;\n },\n\n setSubmenu: function (core) {\n const option = core.options;\n const lang_toolbar = core.lang.toolbar;\n const listDiv = core.util.createElement('DIV');\n listDiv.className = 'se-submenu se-list-layer se-list-format';\n\n const defaultFormats = ['p', 'div', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n const formatList = !option.formats || option.formats.length === 0 ? defaultFormats : option.formats;\n\n let list = '
      ';\n for (let i = 0, len = formatList.length, format, tagName, command, name, h, attrs, className; i < len; i++) {\n format = formatList[i];\n \n if (typeof format === 'string' && defaultFormats.indexOf(format) > -1) {\n tagName = format.toLowerCase();\n command = tagName === 'blockquote' ? 'range' : tagName === 'pre' ? 'free' : 'replace';\n h = /^h/.test(tagName) ? tagName.match(/\\d+/)[0] : '';\n name = lang_toolbar['tag_' + (h ? 'h' : tagName)] + h;\n className = '';\n attrs = '';\n } else {\n tagName = format.tag.toLowerCase();\n command = format.command;\n name = format.name || tagName;\n className = format.class;\n attrs = className ? ' class=\"' + className + '\"' : '';\n }\n\n list += '
    • ' +\n '
    • ';\n }\n list += '
    ';\n\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n let formatTitle = this.lang.toolbar.formats;\n const target = this.context.formatBlock.targetText;\n\n if (!element) {\n this.util.changeTxt(target, formatTitle);\n } else if (this.util.isFormatElement(element)) {\n const formatContext = this.context.formatBlock;\n const formatList = formatContext._formatList;\n const nodeName = element.nodeName.toLowerCase();\n const className = (element.className.match(/(\\s|^)__se__format__[^\\s]+/) || [''])[0].trim();\n\n for (let i = 0, len = formatList.length, f; i < len; i++) {\n f = formatList[i];\n if (nodeName === f.getAttribute('data-value') && className === f.getAttribute('data-class')) {\n formatTitle = f.title;\n break;\n }\n }\n\n this.util.changeTxt(target, formatTitle);\n target.setAttribute('data-value', nodeName);\n target.setAttribute('data-class', className);\n\n return true;\n }\n\n return false;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const formatContext = this.context.formatBlock;\n const formatList = formatContext._formatList;\n const target = formatContext.targetText;\n const currentFormat = (target.getAttribute('data-value') || '') + (target.getAttribute('data-class') || '');\n\n if (currentFormat !== formatContext.currentFormat) {\n for (let i = 0, len = formatList.length, f; i < len; i++) {\n f = formatList[i];\n if (currentFormat === f.getAttribute('data-value') + f.getAttribute('data-class')) {\n this.util.addClass(f, 'active');\n } else {\n this.util.removeClass(f, 'active');\n }\n }\n\n formatContext.currentFormat = currentFormat;\n }\n },\n\n pickUp: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let target = e.target;\n let command = null, value = null, tag = null, className = '';\n \n while (!command && !/UL/i.test(target.tagName)) {\n command = target.getAttribute('data-command');\n value = target.getAttribute('data-value');\n className = target.getAttribute('data-class');\n if (command) {\n tag = target.firstChild;\n break;\n }\n target = target.parentNode;\n }\n\n if (!command) return;\n\n // blockquote\n if (command === 'range') {\n const rangeElement = tag.cloneNode(false);\n this.applyRangeFormatElement(rangeElement);\n }\n // free, replace\n else {\n let range = this.getRange();\n let selectedFormsts = this.getSelectedElementsAndComponents(false);\n\n if (selectedFormsts.length === 0) {\n range = this.getRange_addLine(range, null);\n selectedFormsts = this.getSelectedElementsAndComponents(false);\n if (selectedFormsts.length === 0) return;\n }\n\n const startOffset = range.startOffset;\n const endOffset = range.endOffset;\n\n const util = this.util;\n let first = selectedFormsts[0];\n let last = selectedFormsts[selectedFormsts.length - 1];\n const firstPath = util.getNodePath(range.startContainer, first, null, null);\n const lastPath = util.getNodePath(range.endContainer, last, null, null);\n \n // remove selected list\n const rlist = this.detachList(selectedFormsts, false);\n if (rlist.sc) first = rlist.sc;\n if (rlist.ec) last = rlist.ec;\n\n // change format tag\n this.setRange(util.getNodeFromPath(firstPath, first), startOffset, util.getNodeFromPath(lastPath, last), endOffset);\n const modifiedFormsts = this.getSelectedElementsAndComponents(false);\n\n // free format\n if (command === 'free') {\n const len = modifiedFormsts.length - 1;\n let parentNode = modifiedFormsts[len].parentNode;\n let freeElement = tag.cloneNode(false);\n const focusElement = freeElement;\n \n for (let i = len, f, html, before, next, inner, isComp, first = true; i >= 0; i--) {\n f = modifiedFormsts[i];\n if (f === (!modifiedFormsts[i + 1] ? null : modifiedFormsts[i + 1].parentNode)) continue;\n \n isComp = util.isComponent(f);\n html = isComp ? '' : f.innerHTML.replace(/(?!>)\\s+(?=<)|\\n/g, ' ');\n before = util.getParentElement(f, function (current) {\n return current.parentNode === parentNode;\n });\n \n if (parentNode !== f.parentNode || isComp) {\n if (util.isFormatElement(parentNode)) {\n parentNode.parentNode.insertBefore(freeElement, parentNode.nextSibling);\n parentNode = parentNode.parentNode;\n } else {\n parentNode.insertBefore(freeElement, before ? before.nextSibling : null);\n parentNode = f.parentNode;\n }\n\n next = freeElement.nextSibling;\n if (next && freeElement.nodeName === next.nodeName && util.isSameAttributes(freeElement, next)) {\n freeElement.innerHTML += '
    ' + next.innerHTML;\n util.removeItem(next);\n }\n\n freeElement = tag.cloneNode(false);\n first = true;\n }\n \n inner = freeElement.innerHTML;\n freeElement.innerHTML = ((first || !html || !inner || /
    $/i.test(html)) ? html : html + '
    ') + inner;\n\n if (i === 0) {\n parentNode.insertBefore(freeElement, f);\n next = f.nextSibling;\n if (next && freeElement.nodeName === next.nodeName && util.isSameAttributes(freeElement, next)) {\n freeElement.innerHTML += '
    ' + next.innerHTML;\n util.removeItem(next);\n }\n\n const prev = freeElement.previousSibling;\n if (prev && freeElement.nodeName === prev.nodeName && util.isSameAttributes(freeElement, prev)) {\n prev.innerHTML += '
    ' + freeElement.innerHTML;\n util.removeItem(freeElement);\n }\n }\n\n if (!isComp) util.removeItem(f);\n if (!!html) first = false;\n }\n \n this.setRange(focusElement, 0, focusElement, 0);\n }\n // replace format\n else {\n for (let i = 0, len = modifiedFormsts.length, node, newFormat; i < len; i++) {\n node = modifiedFormsts[i];\n \n if ((node.nodeName.toLowerCase() !== value.toLowerCase() || (node.className.match(/(\\s|^)__se__format__[^\\s]+/) || [''])[0].trim() !== className) && !util.isComponent(node)) {\n newFormat = tag.cloneNode(false);\n util.copyFormatAttributes(newFormat, node);\n newFormat.innerHTML = node.innerHTML;\n \n node.parentNode.replaceChild(newFormat, node);\n }\n \n if (i === 0) first = newFormat || node;\n if (i === len - 1) last = newFormat || node;\n newFormat = null;\n }\n \n this.setRange(util.getNodeFromPath(firstPath, first), startOffset, util.getNodeFromPath(lastPath, last), endOffset);\n }\n\n // history stack\n this.history.push(false);\n }\n\n this.submenuOff();\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 20197 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'lineHeight',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.lineHeight = {\n _sizeList: null,\n currentSize: -1\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n let listUl = listDiv.querySelector('ul');\n\n /** add event listeners */\n listUl.addEventListener('click', this.pickup.bind(core));\n\n context.lineHeight._sizeList = listUl.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null, listUl = null;\n },\n\n setSubmenu: function (core) {\n const option = core.options;\n const lang = core.lang;\n const listDiv = core.util.createElement('DIV');\n\n listDiv.className = 'se-submenu se-list-layer';\n\n const sizeList = !option.lineHeights ? [\n {text: '1', value: 1},\n {text: '1.15', value: 1.15},\n {text: '1.5', value: 1.5},\n {text: '2', value: 2}\n ] : option.lineHeights;\n\n let list = '
    ' +\n '
      ' +\n '
    • ';\n for (let i = 0, len = sizeList.length, size; i < len; i++) {\n size = sizeList[i];\n list += '
    • ';\n }\n list += '
    ';\n\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const lineHeightContext = this.context.lineHeight;\n const sizeList = lineHeightContext._sizeList;\n const format = this.util.getFormatElement(this.getSelectionNode());\n const currentSize = !format ? '' : format.style.lineHeight + '';\n\n if (currentSize !== lineHeightContext.currentSize) {\n for (let i = 0, len = sizeList.length; i < len; i++) {\n if (currentSize === sizeList[i].getAttribute('data-value')) {\n this.util.addClass(sizeList[i], 'active');\n } else {\n this.util.removeClass(sizeList[i], 'active');\n }\n }\n\n lineHeightContext.currentSize = currentSize;\n }\n },\n\n pickup: function (e) {\n if (!/^BUTTON$/i.test(e.target.tagName)) return false;\n \n e.preventDefault();\n e.stopPropagation();\n\n const value = e.target.getAttribute('data-value') || '';\n const formats = this.getSelectedElements();\n\n for (let i = 0, len = formats.length; i < len; i++) {\n formats[i].style.lineHeight = value;\n }\n\n this.submenuOff();\n\n // history stack\n this.history.push(false);\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'template',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.template = {\n selectedIndex: -1\n };\n\n /** set submenu */\n let templateDiv = this.setSubmenu(core);\n\n /** add event listeners */\n templateDiv.querySelector('ul').addEventListener('click', this.pickup.bind(core));\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, templateDiv);\n\n /** empty memory */\n templateDiv = null;\n },\n\n setSubmenu: function (core) {\n const templateList = core.options.templates;\n if (!templateList || templateList.length === 0) {\n throw Error('[SUNEDITOR.plugins.template.fail] To use the \"template\" plugin, please define the \"templates\" option.');\n }\n\n const listDiv = core.util.createElement('DIV');\n listDiv.className = 'se-list-layer';\n\n let list = '
    ' +\n '
      ';\n for (let i = 0, len = templateList.length, t; i < len; i++) {\n t = templateList[i];\n list += '
    • ';\n }\n list += '
    ';\n\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n pickup: function (e) {\n if (!/^BUTTON$/i.test(e.target.tagName)) return false;\n\n e.preventDefault();\n e.stopPropagation();\n\n this.context.template.selectedIndex = e.target.getAttribute('data-value') * 1;\n const temp = this.options.templates[this.context.template.selectedIndex];\n\n if (temp.html) {\n this.setContents(temp.html);\n } else {\n this.submenuOff();\n throw Error('[SUNEDITOR.template.fail] cause : \"templates[i].html not found\"');\n }\n \n this.submenuOff();\n }\n};","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'paragraphStyle',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.paragraphStyle = {\n _classList: null\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n\n /** add event listeners */\n listDiv.querySelector('ul').addEventListener('click', this.pickUp.bind(core));\n\n context.paragraphStyle._classList = listDiv.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null;\n },\n\n setSubmenu: function (core) {\n const option = core.options;\n const listDiv = core.util.createElement('DIV');\n listDiv.className = 'se-submenu se-list-layer se-list-format';\n\n const menuLang = core.lang.menu;\n const defaultList = {\n spaced: {\n name: menuLang.spaced,\n class: '__se__p-spaced',\n _class: ''\n },\n bordered: {\n name: menuLang.bordered,\n class: '__se__p-bordered',\n _class: ''\n },\n neon: {\n name: menuLang.neon,\n class: '__se__p-neon',\n _class: ''\n }\n };\n const paragraphStyles = !option.paragraphStyles || option.paragraphStyles.length === 0 ? ['spaced', 'bordered', 'neon'] : option.paragraphStyles;\n\n let list = '
      ';\n for (let i = 0, len = paragraphStyles.length, p, name, attrs, _class; i < len; i++) {\n p = paragraphStyles[i];\n\n if (typeof p === 'string') {\n const defaultStyle = defaultList[p.toLowerCase()];\n if (!defaultStyle) continue;\n p = defaultStyle;\n }\n\n name = p.name;\n attrs = p.class ? ' class=\"' + p.class + '\"' : '';\n _class = p._class;\n\n list += '
    • ' +\n '
    ' +\n '';\n }\n list += '';\n\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const paragraphContext = this.context.paragraphStyle;\n const paragraphList = paragraphContext._classList;\n const currentFormat = this.util.getFormatElement(this.getSelectionNode());\n\n for (let i = 0, len = paragraphList.length; i < len; i++) {\n if (this.util.hasClass(currentFormat, paragraphList[i].getAttribute('data-value'))) {\n this.util.addClass(paragraphList[i], 'active');\n } else {\n this.util.removeClass(paragraphList[i], 'active');\n }\n }\n },\n\n pickUp: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let target = e.target;\n let value = null;\n \n while (!/^UL$/i.test(target.tagName)) {\n value = target.getAttribute('data-value');\n if (value) break;\n target = target.parentNode;\n }\n\n if (!value) return;\n\n let selectedFormsts = this.getSelectedElements();\n if (selectedFormsts.length === 0) {\n this.getRange_addLine(this.getRange(), null);\n selectedFormsts = this.getSelectedElements();\n if (selectedFormsts.length === 0) return;\n }\n\n // change format class\n const toggleClass = this.util.hasClass(target, 'active') ? this.util.removeClass.bind(this.util) : this.util.addClass.bind(this.util);\n for (let i = 0, len = selectedFormsts.length; i < len; i++) {\n toggleClass(selectedFormsts[i], value);\n }\n\n this.submenuOff();\n\n // history stack\n this.history.push(false);\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'textStyle',\n display: 'submenu',\n add: function (core, targetElement) {\n const context = core.context;\n context.textStyle = {\n _styleList: null\n };\n\n /** set submenu */\n let listDiv = this.setSubmenu(core);\n let listUl = listDiv.querySelector('ul');\n\n /** add event listeners */\n listUl.addEventListener('click', this.pickup.bind(core));\n\n context.textStyle._styleList = listDiv.querySelectorAll('li button');\n\n /** append target button menu */\n core.initMenuTarget(this.name, targetElement, listDiv);\n\n /** empty memory */\n listDiv = null, listUl = null;\n },\n\n setSubmenu: function (core) {\n const option = core.options;\n const listDiv = core.util.createElement('DIV');\n listDiv.className = 'se-submenu se-list-layer se-list-format';\n\n const defaultList = {\n code: {\n name: core.lang.menu.code,\n class: '__se__t-code',\n tag: 'code',\n },\n translucent: {\n name: core.lang.menu.translucent,\n style: 'opacity: 0.5;',\n tag: 'span',\n },\n shadow: {\n name: core.lang.menu.shadow,\n class: '__se__t-shadow',\n tag: 'span',\n }\n };\n const styleList = !option.textStyles ? core._w.Object.keys(defaultList) : option.textStyles;\n\n let list = '
      ';\n for (let i = 0, len = styleList.length, t, tag, name, attrs, command, value, _class; i < len; i++) {\n t = styleList[i];\n attrs = '', value = '', command = [];\n\n if (typeof t === 'string') {\n const defaultStyle = defaultList[t.toLowerCase()];\n if (!defaultStyle) continue;\n t = defaultStyle;\n }\n\n name = t.name;\n tag = t.tag || 'span';\n _class = t._class;\n\n if (t.style) {\n attrs += ' style=\"' + t.style + '\"';\n value += t.style.replace(/:[^;]+(;|$)\\s*/g, ',');\n command.push('style');\n }\n if (t.class) {\n attrs += ' class=\"' + t.class + '\"';\n value += '.' + t.class.trim().replace(/\\s+/g, ',.');\n command.push('class');\n }\n\n value = value.replace(/,$/, '');\n\n list += '
    • ' +\n '
    • ';\n }\n list += '
    ';\n\n listDiv.innerHTML = list;\n\n return listDiv;\n },\n\n /**\n * @Override submenu\n */\n on: function () {\n const util = this.util;\n const textStyleContext = this.context.textStyle;\n const styleButtonList = textStyleContext._styleList;\n const selectionNode = this.getSelectionNode();\n\n for (let i = 0, len = styleButtonList.length, btn, data, active; i < len; i++) {\n btn = styleButtonList[i];\n data = btn.getAttribute('data-value').split(',');\n \n for (let v = 0, node, value; v < data.length; v++) {\n node = selectionNode;\n active = false;\n \n while (node && !util.isFormatElement(node) && !util.isComponent(node)) {\n if (node.nodeName.toLowerCase() === btn.getAttribute('data-command').toLowerCase()) {\n value = data[v];\n if (/^\\./.test(value) ? util.hasClass(node, value.replace(/^\\./, '')) : !!node.style[value]) {\n active = true;\n break;\n }\n }\n node = node.parentNode;\n }\n\n if (!active) break;\n }\n\n active ? util.addClass(btn, 'active') : util.removeClass(btn, 'active');\n }\n\n },\n\n pickup: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n let target = e.target;\n let command = null, tag = null;\n \n while (!command && !/UL/i.test(target.tagName)) {\n command = target.getAttribute('data-command');\n if (command) {\n tag = target.firstChild;\n break;\n }\n target = target.parentNode;\n }\n\n if (!command) return;\n\n const checkStyles = tag.style.cssText.replace(/:.+(;|$)/g, ',').split(',');\n checkStyles.pop();\n\n const classes = tag.classList;\n for (let i = 0, len = classes.length; i < len; i++) {\n checkStyles.push('.' + classes[i]);\n }\n\n const newNode = this.util.hasClass(target, 'active') ? null : tag.cloneNode(false);\n const removeNodes = newNode ? null : [tag.nodeName];\n this.nodeChange(newNode, checkStyles, removeNodes, true);\n\n this.submenuOff();\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2018 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'selectMenu',\n add: function (core) {\n core.context.selectMenu = {\n caller: {},\n callerContext: null\n };\n },\n\n setForm: function () {\n return '
    ';\n },\n\n createList: function (listContext, items, html) {\n listContext.form.innerHTML = '
      ' + html + '
    ';\n listContext.items = items;\n listContext.menus = listContext.form.querySelectorAll('li');\n },\n\n initEvent: function (pluginName, forms) {\n const form = forms.querySelector('.se-select-list');\n const context = this.context.selectMenu.caller[pluginName] = {\n form: form,\n items: [],\n menus: [],\n index: -1,\n item: null,\n clickMethod: null,\n callerName: pluginName\n };\n\n form.addEventListener('mousedown', this.plugins.selectMenu.onMousedown_list);\n form.addEventListener('mousemove', this.plugins.selectMenu.onMouseMove_list.bind(this, context));\n form.addEventListener('click', this.plugins.selectMenu.onClick_list.bind(this, context));\n },\n\n onMousedown_list: function (e) {\n e.preventDefault();\n e.stopPropagation();\n },\n\n onMouseMove_list: function (context, e) {\n this.util.addClass(context.form, '__se_select-menu-mouse-move');\n const index = e.target.getAttribute('data-index');\n if (!index) return;\n context.index = index * 1;\n },\n\n onClick_list: function (context, e) {\n const index = e.target.getAttribute('data-index');\n if (!index) return;\n context.clickMethod.call(this, context.items[index]);\n },\n\n moveItem: function (listContext, num) {\n this.util.removeClass(listContext.form, '__se_select-menu-mouse-move');\n num = listContext.index + num;\n const menus = listContext.menus;\n const len = menus.length;\n const selectIndex = listContext.index = num >= len ? 0 : num < 0 ? len - 1 : num;\n \n for (let i = 0; i < len; i++) {\n if (i === selectIndex) {\n this.util.addClass(menus[i], 'active');\n } else {\n this.util.removeClass(menus[i], 'active');\n }\n }\n\n listContext.item = listContext.items[selectIndex];\n },\n\n getItem: function (listContext, index) {\n index = (!index || index < 0) ? listContext.index : index;\n return listContext.items[index];\n },\n\n on: function (callerName, clickMethod) {\n const listContext = this.context.selectMenu.caller[callerName];\n this.context.selectMenu.callerContext = listContext;\n listContext.clickMethod = clickMethod;\n listContext.callerName = callerName;\n },\n\n open: function (listContext, positionHandler) {\n const form = listContext.form;\n form.style.visibility = 'hidden';\n form.style.display = 'block';\n positionHandler(form);\n form.style.visibility = '';\n },\n\n close: function (listContext) {\n listContext.form.style.display = 'none';\n listContext.items = [];\n listContext.menus = [];\n listContext.index = -1;\n listContext.item = null;\n },\n\n init: function (listContext) {\n if (!listContext) return;\n listContext.items = [];\n listContext.menus = [];\n listContext.index = -1;\n listContext.item = null;\n listContext.callerName = '';\n this.context.selectMenu.callerContext = null;\n }\n};","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport selectMenu from './_selectMenu';\n\nexport default {\n name: 'anchor',\n add: function (core) {\n core.addModule([selectMenu]);\n \n core.context.anchor = {\n caller: {},\n forms: this.setDialogForm(core),\n host: (core._w.location.origin + core._w.location.pathname).replace(/\\/$/, ''),\n callerContext: null\n };\n },\n\n /** dialog */\n setDialogForm: function (core) {\n const lang = core.lang;\n const relList = core.options.linkRel;\n const defaultRel = (core.options.linkRelDefault.default || '').split(' ');\n const icons = core.icons;\n const forms = core.util.createElement('DIV');\n\n let html = '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n core.plugins.selectMenu.setForm() +\n '
    ' +\n '
    ' +\n '' + icons.bookmark + '' +\n '' + icons.download + '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '';\n if (relList.length > 0) {\n html += '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
      ';\n for (let i = 0, len = relList.length, rel; i < len; i++) {\n rel = relList[i];\n html += '
    • ';\n }\n html += '
    ';\n }\n\n html += '
    ';\n\n forms.innerHTML = html;\n return forms;\n },\n\n initEvent: function (pluginName, forms) {\n const anchorPlugin = this.plugins.anchor;\n const context = this.context.anchor.caller[pluginName] = {\n modal: forms,\n urlInput: null,\n linkDefaultRel: this.options.linkRelDefault,\n defaultRel: this.options.linkRelDefault.default || '',\n currentRel: [],\n linkAnchor: null,\n linkValue: '',\n _change: false,\n callerName: pluginName\n };\n\n if (typeof context.linkDefaultRel.default === 'string') context.linkDefaultRel.default = context.linkDefaultRel.default.trim();\n if (typeof context.linkDefaultRel.check_new_window === 'string') context.linkDefaultRel.check_new_window = context.linkDefaultRel.check_new_window.trim();\n if (typeof context.linkDefaultRel.check_bookmark === 'string') context.linkDefaultRel.check_bookmark = context.linkDefaultRel.check_bookmark.trim();\n\n context.urlInput = forms.querySelector('.se-input-url');\n context.anchorText = forms.querySelector('._se_anchor_text');\n context.newWindowCheck = forms.querySelector('._se_anchor_check');\n context.downloadCheck = forms.querySelector('._se_anchor_download');\n context.download = forms.querySelector('._se_anchor_download_icon');\n context.preview = forms.querySelector('.se-link-preview');\n context.bookmark = forms.querySelector('._se_anchor_bookmark_icon');\n context.bookmarkButton = forms.querySelector('._se_bookmark_button');\n\n this.plugins.selectMenu.initEvent.call(this, pluginName, forms);\n const listContext = this.context.selectMenu.caller[pluginName];\n \n /** rel */\n if (this.options.linkRel.length > 0) {\n context.relButton = forms.querySelector('.se-anchor-rel-btn');\n context.relList = forms.querySelector('.se-list-layer');\n context.relPreview = forms.querySelector('.se-anchor-rel-preview');\n context.relButton.addEventListener('click', anchorPlugin.onClick_relButton.bind(this, context));\n context.relList.addEventListener('click', anchorPlugin.onClick_relList.bind(this, context));\n }\n\n context.newWindowCheck.addEventListener('change', anchorPlugin.onChange_newWindowCheck.bind(this, context));\n context.downloadCheck.addEventListener('change', anchorPlugin.onChange_downloadCheck.bind(this, context));\n context.anchorText.addEventListener('input', anchorPlugin.onChangeAnchorText.bind(this, context));\n context.urlInput.addEventListener('input', anchorPlugin.onChangeUrlInput.bind(this, context));\n context.urlInput.addEventListener('keydown', anchorPlugin.onKeyDownUrlInput.bind(this, listContext));\n context.urlInput.addEventListener('focus', anchorPlugin.onFocusUrlInput.bind(this, context, listContext));\n context.urlInput.addEventListener('blur', anchorPlugin.onBlurUrlInput.bind(this, listContext));\n context.bookmarkButton.addEventListener('click', anchorPlugin.onClick_bookmarkButton.bind(this, context));\n },\n\n on: function (contextAnchor, update) {\n const anchorPlugin = this.plugins.anchor;\n\n if (!update) {\n anchorPlugin.init.call(this, contextAnchor);\n contextAnchor.anchorText.value = this.getSelection().toString().trim();\n contextAnchor.newWindowCheck.checked = this.options.linkTargetNewWindow;\n } else if (contextAnchor.linkAnchor) {\n this.context.dialog.updateModal = true;\n const href = contextAnchor.linkAnchor.getAttribute('href');\n contextAnchor.linkValue = contextAnchor.preview.textContent = contextAnchor.urlInput.value = anchorPlugin.selfPathBookmark.call(this, href) ? href.substr(href.lastIndexOf('#')) : href;\n contextAnchor.anchorText.value = contextAnchor.linkAnchor.textContent;\n contextAnchor.newWindowCheck.checked = (/_blank/i.test(contextAnchor.linkAnchor.target) ? true : false);\n contextAnchor.downloadCheck.checked = contextAnchor.linkAnchor.download;\n }\n\n this.context.anchor.callerContext = contextAnchor;\n anchorPlugin.setRel.call(this, contextAnchor, (update && contextAnchor.linkAnchor) ? contextAnchor.linkAnchor.rel : contextAnchor.defaultRel);\n anchorPlugin.setLinkPreview.call(this, contextAnchor, contextAnchor.linkValue);\n this.plugins.selectMenu.on.call(this, contextAnchor.callerName, this.plugins.anchor.setHeaderBookmark);\n },\n\n selfPathBookmark: function(path) {\n const href = this._w.location.href.replace(/\\/$/, '');\n return path.indexOf('#') === 0 || (path.indexOf(href) === 0 && path.indexOf('#') === (href.indexOf(\"#\") === -1 ? href.length : href.substr(0, href.indexOf(\"#\")).length));\n },\n\n _closeRelMenu: null,\n toggleRelList: function (contextAnchor, show) {\n if (!show) {\n if (this.plugins.anchor._closeRelMenu) this.plugins.anchor._closeRelMenu();\n } else {\n const target = contextAnchor.relButton;\n const relList = contextAnchor.relList;\n this.util.addClass(target, 'active');\n relList.style.visibility = 'hidden';\n relList.style.display = 'block';\n if (!this.options.rtl) relList.style.left = (target.offsetLeft + target.offsetWidth + 1) + 'px';\n else relList.style.left = (target.offsetLeft - relList.offsetWidth - 1) + 'px';\n relList.style.top = (target.offsetTop + (target.offsetHeight / 2) - (relList.offsetHeight / 2)) + 'px';\n relList.style.visibility = '';\n\n this.plugins.anchor._closeRelMenu = function (context, target, e) {\n if (e && (context.relButton.contains(e.target) || context.relList.contains(e.target))) return;\n this.util.removeClass(target, 'active');\n context.relList.style.display = 'none';\n this.modalForm.removeEventListener('click', this.plugins.anchor._closeRelMenu);\n this.plugins.anchor._closeRelMenu = null;\n }.bind(this, contextAnchor, target);\n \n this.modalForm.addEventListener('click', this.plugins.anchor._closeRelMenu);\n }\n },\n\n onClick_relButton: function (contextAnchor, e) {\n this.plugins.anchor.toggleRelList.call(this, contextAnchor, !this.util.hasClass(e.target, 'active'));\n },\n\n onClick_relList: function (contextAnchor, e) {\n const target = e.target;\n const cmd = target.getAttribute('data-command');\n if (!cmd) return;\n \n const current = contextAnchor.currentRel;\n const checked = this.util.toggleClass(target, 'se-checked');\n const index = current.indexOf(cmd);\n if (checked) {\n if (index === -1) current.push(cmd);\n } else {\n if (index > -1) current.splice(index, 1);\n }\n\n contextAnchor.relPreview.title = contextAnchor.relPreview.textContent = current.join(' ');\n },\n\n setRel: function (contextAnchor, relAttr) {\n const relListEl = contextAnchor.relList;\n const rels = contextAnchor.currentRel = !relAttr ? [] : relAttr.split(' ');\n if (!relListEl) return;\n\n const checkedRel = relListEl.querySelectorAll('button');\n for (let i = 0, len = checkedRel.length, cmd; i < len; i++) {\n cmd = checkedRel[i].getAttribute('data-command');\n if (rels.indexOf(cmd) > -1) {\n this.util.addClass(checkedRel[i], 'se-checked');\n } else {\n this.util.removeClass(checkedRel[i], 'se-checked');\n }\n }\n\n contextAnchor.relPreview.title = contextAnchor.relPreview.textContent = rels.join(' ');\n },\n\n createHeaderList: function (contextAnchor, contextList, urlValue) {\n const headers = this.util.getListChildren(this.context.element.wysiwyg, function(current) {\n return /h[1-6]/i.test(current.nodeName);\n });\n if (headers.length === 0) return;\n\n const valueRegExp = new this._w.RegExp('^' + urlValue.replace(/^#/, ''), 'i');\n const list = [];\n let html = '';\n for(let i = 0, len = headers.length, h; i < len; i++) {\n h = headers[i];\n if (!valueRegExp.test(h.textContent)) continue;\n list.push(h);\n html += '
  • ' + h.textContent + '
  • ';\n }\n\n if (list.length === 0) {\n this.plugins.selectMenu.close.call(this, contextList);\n } else {\n this.plugins.selectMenu.createList(contextList, list, html);\n this.plugins.selectMenu.open.call(this, contextList, this.plugins.anchor._setMenuListPosition.bind(this, contextAnchor));\n }\n },\n\n _setMenuListPosition: function (contextAnchor, list) {\n list.style.top = (contextAnchor.urlInput.offsetHeight + 1) + 'px';\n },\n\n onKeyDownUrlInput: function (contextList, e) {\n const keyCode = e.keyCode;\n switch (keyCode) {\n case 38: // up\n e.preventDefault();\n e.stopPropagation();\n this.plugins.selectMenu.moveItem.call(this, contextList, -1);\n break;\n case 40: // down\n e.preventDefault();\n e.stopPropagation();\n this.plugins.selectMenu.moveItem.call(this, contextList, 1);\n break;\n case 13: // enter\n if (contextList.index > -1) {\n e.preventDefault();\n e.stopPropagation();\n this.plugins.anchor.setHeaderBookmark.call(this, this.plugins.selectMenu.getItem(contextList, null));\n }\n break;\n }\n },\n\n setHeaderBookmark: function (header) {\n const contextAnchor = this.context.anchor.callerContext;\n const id = header.id || 'h_' + this._w.Math.random().toString().replace(/.+\\./, '');\n header.id = id;\n contextAnchor.urlInput.value = '#' + id;\n\n if (!contextAnchor.anchorText.value.trim() || !contextAnchor._change) {\n contextAnchor.anchorText.value = header.textContent;\n }\n \n this.plugins.anchor.setLinkPreview.call(this, contextAnchor, contextAnchor.urlInput.value);\n this.plugins.selectMenu.close.call(this, this.context.selectMenu.callerContext);\n this.context.anchor.callerContext.urlInput.focus();\n },\n\n onChangeAnchorText: function (contextAnchor, e) {\n contextAnchor._change = !!e.target.value.trim();\n },\n\n onChangeUrlInput: function (contextAnchor, e) {\n const value = e.target.value.trim();\n this.plugins.anchor.setLinkPreview.call(this, contextAnchor, value);\n\n if (this.plugins.anchor.selfPathBookmark.call(this, value)) this.plugins.anchor.createHeaderList.call(this, contextAnchor, this.context.selectMenu.callerContext, value);\n else this.plugins.selectMenu.close.call(this, this.context.selectMenu.callerContext);\n },\n\n onFocusUrlInput: function (contextAnchor, contextLink) {\n const value = contextAnchor.urlInput.value;\n if (this.plugins.anchor.selfPathBookmark.call(this, value)) this.plugins.anchor.createHeaderList.call(this, contextAnchor, contextLink, value);\n },\n\n onBlurUrlInput: function (contextList) {\n this.plugins.selectMenu.close.call(this, contextList);\n },\n\n setLinkPreview: function (context, value) {\n const preview = context.preview;\n const protocol = this.options.linkProtocol;\n const noPrefix = this.options.linkNoPrefix;\n const reservedProtocol = /^(mailto\\:|tel\\:|sms\\:|https*\\:\\/\\/|#)/.test(value) || value.indexOf(protocol) === 0;\n const sameProtocol = !protocol ? false : this._w.RegExp('^' + this.util.escapeStringRegexp(value.substr(0, protocol.length))).test(protocol);\n value = context.linkValue = preview.textContent = !value ? '' : noPrefix ? value : (protocol && !reservedProtocol && !sameProtocol) ? protocol + value : reservedProtocol ? value : /^www\\./.test(value) ? 'http://' + value : this.context.anchor.host + (/^\\//.test(value) ? '' : '/') + value;\n\n if (this.plugins.anchor.selfPathBookmark.call(this, value)) {\n context.bookmark.style.display = 'block';\n this.util.addClass(context.bookmarkButton, 'active');\n } else {\n context.bookmark.style.display = 'none';\n this.util.removeClass(context.bookmarkButton, 'active');\n }\n\n if (!this.plugins.anchor.selfPathBookmark.call(this, value) && context.downloadCheck.checked) {\n context.download.style.display = 'block';\n } else {\n context.download.style.display = 'none';\n }\n },\n\n setCtx: function (anchor, contextAnchor) {\n if (!anchor) return;\n contextAnchor.linkAnchor = anchor;\n contextAnchor.linkValue = anchor.href;\n contextAnchor.currentRel = anchor.rel.split(\" \");\n },\n\n updateAnchor: function (anchor, url, displayText, contextAnchor, notText) {\n // download\n if (!this.plugins.anchor.selfPathBookmark.call(this, url) && contextAnchor.downloadCheck.checked) {\n anchor.setAttribute('download', displayText || url);\n } else {\n anchor.removeAttribute('download');\n }\n\n // new window\n if (contextAnchor.newWindowCheck.checked) anchor.target = '_blank';\n else anchor.removeAttribute('target');\n \n // rel\n const rel = contextAnchor.currentRel.join(' ');\n if (!rel) anchor.removeAttribute('rel');\n else anchor.rel = rel;\n\n // set url\n anchor.href = url;\n if (notText) {\n if (anchor.children.length === 0) anchor.textContent = '';\n } else {\n anchor.textContent = displayText;\n }\n },\n\n createAnchor: function (contextAnchor, notText) {\n if (contextAnchor.linkValue.length === 0) return null;\n \n const url = contextAnchor.linkValue;\n const anchor = contextAnchor.anchorText;\n const displayText = anchor.value.length === 0 ? url : anchor.value;\n\n const oA = contextAnchor.linkAnchor || this.util.createElement('A');\n this.plugins.anchor.updateAnchor.call(this, oA, url, displayText, contextAnchor, notText);\n\n contextAnchor.linkValue = contextAnchor.preview.textContent = contextAnchor.urlInput.value = contextAnchor.anchorText.value = '';\n\n return oA;\n },\n\n onClick_bookmarkButton: function (contextAnchor) {\n let url = contextAnchor.urlInput.value;\n if (this.plugins.anchor.selfPathBookmark.call(this, url)) {\n url = url.substr(1);\n contextAnchor.bookmark.style.display = 'none';\n this.util.removeClass(contextAnchor.bookmarkButton, 'active');\n this.plugins.selectMenu.close.call(this, this.context.selectMenu.callerContext);\n } else {\n url = '#' + url;\n contextAnchor.bookmark.style.display = 'block';\n this.util.addClass(contextAnchor.bookmarkButton, 'active');\n contextAnchor.downloadCheck.checked = false;\n contextAnchor.download.style.display = 'none';\n this.plugins.anchor.createHeaderList.call(this, contextAnchor, this.context.selectMenu.callerContext, url);\n }\n\n contextAnchor.urlInput.value = url;\n this.plugins.anchor.setLinkPreview.call(this, contextAnchor, url);\n contextAnchor.urlInput.focus();\n },\n\n onChange_newWindowCheck: function (contextAnchor, e) {\n if (typeof contextAnchor.linkDefaultRel.check_new_window !== 'string') return;\n if (e.target.checked) {\n this.plugins.anchor.setRel.call(this, contextAnchor, this.plugins.anchor._relMerge.call(this, contextAnchor, contextAnchor.linkDefaultRel.check_new_window));\n } else {\n this.plugins.anchor.setRel.call(this, contextAnchor, this.plugins.anchor._relDelete.call(this, contextAnchor, contextAnchor.linkDefaultRel.check_new_window));\n }\n },\n\n onChange_downloadCheck: function (contextAnchor, e) {\n if (e.target.checked) {\n contextAnchor.download.style.display = 'block';\n contextAnchor.bookmark.style.display = 'none';\n this.util.removeClass(contextAnchor.bookmarkButton, 'active');\n contextAnchor.linkValue = contextAnchor.preview.textContent = contextAnchor.urlInput.value = contextAnchor.urlInput.value.replace(/^\\#+/, '');\n if (typeof contextAnchor.linkDefaultRel.check_bookmark === 'string') {\n this.plugins.anchor.setRel.call(this, contextAnchor, this.plugins.anchor._relMerge.call(this, contextAnchor, contextAnchor.linkDefaultRel.check_bookmark));\n }\n } else {\n contextAnchor.download.style.display = 'none';\n if (typeof contextAnchor.linkDefaultRel.check_bookmark === 'string') {\n this.plugins.anchor.setRel.call(this, contextAnchor, this.plugins.anchor._relDelete.call(this, contextAnchor, contextAnchor.linkDefaultRel.check_bookmark));\n }\n }\n },\n\n _relMerge: function (contextAnchor, relAttr) {\n const current = contextAnchor.currentRel;\n if (!relAttr) return current.join(' ');\n \n if (/^only\\:/.test(relAttr)) {\n relAttr = relAttr.replace(/^only\\:/, '').trim();\n contextAnchor.currentRel = relAttr.split(' ');\n return relAttr;\n }\n\n const rels = relAttr.split(' ');\n for (let i = 0, len = rels.length, index; i < len; i++) {\n index = current.indexOf(rels[i]);\n if (index === -1) current.push(rels[i]);\n }\n\n return current.join(' ');\n },\n\n _relDelete: function (contextAnchor, relAttr) {\n if (!relAttr) return contextAnchor.currentRel.join(' ');\n if (/^only\\:/.test(relAttr)) relAttr = relAttr.replace(/^only\\:/, '').trim();\n\n const rels = contextAnchor.currentRel.join(' ').replace(this._w.RegExp(relAttr + '\\\\s*'), '');\n contextAnchor.currentRel = rels.split(' ');\n return rels;\n },\n\n init: function (contextAnchor) {\n contextAnchor.linkAnchor = null;\n contextAnchor.linkValue = contextAnchor.preview.textContent = contextAnchor.urlInput.value = '';\n contextAnchor.anchorText.value = '';\n contextAnchor.newWindowCheck.checked = false;\n contextAnchor.downloadCheck.checked = false;\n contextAnchor._change = false;\n this.plugins.anchor.setRel.call(this, contextAnchor, contextAnchor.defaultRel);\n if (contextAnchor.relList) {\n this.plugins.anchor.toggleRelList.call(this, contextAnchor, false);\n }\n this.context.anchor.callerContext = null;\n this.plugins.selectMenu.init.call(this, this.context.selectMenu.callerContext);\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport dialog from '../modules/dialog';\nimport anchor from '../modules/_anchor';\n\nexport default {\n name: 'link',\n display: 'dialog',\n add: function (core) {\n core.addModule([dialog, anchor]);\n\n const context = core.context;\n const contextLink = context.link = {\n focusElement: null, // @Override dialog // This element has focus when the dialog is opened.\n _linkAnchor: null,\n anchorCtx: null\n };\n\n /** link dialog */\n let link_dialog = this.setDialog(core);\n contextLink.modal = link_dialog;\n \n /** link controller */\n let link_controller = this.setController_LinkButton(core);\n contextLink.linkController = link_controller;\n\n link_dialog.querySelector('form').addEventListener('submit', this.submit.bind(core));\n link_controller.addEventListener('click', this.onClick_linkController.bind(core));\n\n /** append html */\n context.dialog.modal.appendChild(link_dialog);\n\n /** append controller */\n context.element.relative.appendChild(link_controller);\n\n /** link event */\n core.plugins.anchor.initEvent.call(core, 'link', link_dialog);\n contextLink.focusElement = context.anchor.caller.link.urlInput;\n\n /** empty memory */\n link_dialog = null, link_controller = null;\n },\n\n /** dialog */\n setDialog: function (core) {\n const lang = core.lang;\n const dialog = core.util.createElement('DIV');\n const icons = core.icons;\n\n dialog.className = 'se-dialog-content';\n dialog.style.display = 'none';\n let html = '' +\n '
    ' +\n '
    ' +\n '' +\n '' + lang.dialogBox.linkBox.title + '' +\n '
    ' +\n core.context.anchor.forms.innerHTML +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n\n dialog.innerHTML = html;\n return dialog;\n },\n\n /** modify controller button */\n setController_LinkButton: function (core) {\n const lang = core.lang;\n const icons = core.icons;\n const link_btn = core.util.createElement('DIV');\n\n link_btn.className = 'se-controller se-controller-link';\n link_btn.innerHTML = '' +\n '
    ' +\n '';\n\n return link_btn;\n },\n\n /**\n * @Override dialog\n */\n open: function () {\n this.plugins.dialog.open.call(this, 'link', 'link' === this.currentControllerName);\n },\n\n submit: function (e) {\n this.showLoading();\n\n e.preventDefault();\n e.stopPropagation();\n\n try {\n const oA = this.plugins.anchor.createAnchor.call(this, this.context.anchor.caller.link, false);\n if (oA === null) return;\n \n if (!this.context.dialog.updateModal) {\n const selectedFormats = this.getSelectedElements();\n if (selectedFormats.length > 1) {\n const oFormat = this.util.createElement(selectedFormats[0].nodeName);\n oFormat.appendChild(oA);\n if (!this.insertNode(oFormat, null, true)) return;\n } else {\n if (!this.insertNode(oA, null, true)) return;\n }\n \n this.setRange(oA.childNodes[0], 0, oA.childNodes[0], oA.textContent.length);\n } else {\n // set range\n const textNode = this.context.link._linkAnchor.childNodes[0];\n this.setRange(textNode, 0, textNode, textNode.textContent.length);\n }\n } finally {\n this.plugins.dialog.close.call(this);\n this.closeLoading();\n // history stack\n this.history.push(false);\n }\n\n return false;\n },\n\n /**\n * @Override core\n */\n active: function (element) {\n if (!element) {\n if (this.controllerArray.indexOf(this.context.link.linkController) > -1) {\n this.controllersOff();\n }\n } else if (this.util.isAnchor(element) && element.getAttribute('data-image-link') === null) {\n if (this.controllerArray.indexOf(this.context.link.linkController) < 0) {\n this.plugins.link.call_controller.call(this, element);\n }\n return true;\n }\n\n return false;\n },\n\n /**\n * @Override dialog\n */\n on: function (update) {\n this.plugins.anchor.on.call(this, this.context.anchor.caller.link, update);\n },\n\n call_controller: function (selectionATag) {\n this.editLink = this.context.link._linkAnchor = this.context.anchor.caller.link.linkAnchor = selectionATag;\n const linkBtn = this.context.link.linkController;\n const link = linkBtn.querySelector('a');\n\n link.href = selectionATag.href;\n link.title = selectionATag.textContent;\n link.textContent = selectionATag.textContent;\n\n this.util.addClass(selectionATag, 'on');\n this.setControllerPosition(linkBtn, selectionATag, 'bottom', {left: 0, top: 0});\n this.controllersOn(linkBtn, selectionATag, 'link', this.util.removeClass.bind(this.util, this.context.link._linkAnchor, 'on'));\n },\n\n onClick_linkController: function (e) {\n e.stopPropagation();\n\n const command = e.target.getAttribute('data-command') || e.target.parentNode.getAttribute('data-command');\n if (!command) return;\n\n e.preventDefault();\n\n if (/update/.test(command)) {\n this.plugins.dialog.open.call(this, 'link', true);\n } else if (/unlink/.test(command)) {\n const sc = this.util.getChildElement(this.context.link._linkAnchor, function (current) { return current.childNodes.length === 0 || current.nodeType === 3; }, false);\n const ec = this.util.getChildElement(this.context.link._linkAnchor, function (current) { return current.childNodes.length === 0 || current.nodeType === 3; }, true);\n this.setRange(sc, 0, ec, ec.textContent.length);\n this.nodeChange(null, null, ['A'], false);\n } else {\n /** delete */\n this.util.removeItem(this.context.link._linkAnchor);\n this.context.anchor.caller.link.linkAnchor = null;\n this.focus();\n\n // history stack\n this.history.push(false);\n }\n\n this.controllersOff();\n },\n\n /**\n * @Override dialog\n */\n init: function () {\n this.context.link.linkController.style.display = 'none';\n this.plugins.anchor.init.call(this, this.context.anchor.caller.link);\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport dialog from '../modules/dialog';\nimport anchor from '../modules/_anchor';\nimport component from '../modules/component';\nimport resizing from '../modules/resizing';\nimport fileManager from '../modules/fileManager';\n\nexport default {\n name: 'image',\n display: 'dialog',\n add: function (core) {\n core.addModule([dialog, anchor, component, resizing, fileManager]);\n \n const options = core.options;\n const context = core.context;\n const contextImage = context.image = {\n _infoList: [], // @Override fileManager\n _infoIndex: 0, // @Override fileManager\n _uploadFileLength: 0, // @Override fileManager\n focusElement: null, // @Override dialog // This element has focus when the dialog is opened.\n sizeUnit: options._imageSizeUnit,\n _linkElement: '',\n _altText: '',\n _align: 'none',\n _floatClassRegExp: '__se__float\\\\-[a-z]+',\n _v_src: {_linkValue: ''},\n svgDefaultSize: '30%',\n base64RenderIndex: 0,\n // @require @Override component\n _element: null,\n _cover: null,\n _container: null,\n // @Override resizing properties\n inputX: null,\n inputY: null,\n _element_w: 1,\n _element_h: 1,\n _element_l: 0,\n _element_t: 0,\n _defaultSizeX: 'auto',\n _defaultSizeY: 'auto',\n _origin_w: options.imageWidth === 'auto' ? '' : options.imageWidth,\n _origin_h: options.imageHeight === 'auto' ? '' : options.imageHeight,\n _proportionChecked: true,\n _resizing: options.imageResizing,\n _resizeDotHide: !options.imageHeightShow,\n _rotation: options.imageRotation,\n _alignHide: !options.imageAlignShow,\n _onlyPercentage: options.imageSizeOnlyPercentage,\n _ratio: false,\n _ratioX: 1,\n _ratioY: 1,\n _captionShow: true,\n _captionChecked: false,\n _caption: null,\n captionCheckEl: null\n };\n\n /** image dialog */\n let image_dialog = this.setDialog(core);\n contextImage.modal = image_dialog;\n contextImage.imgInputFile = image_dialog.querySelector('._se_image_file');\n contextImage.imgUrlFile = image_dialog.querySelector('._se_image_url');\n contextImage.focusElement = contextImage.imgInputFile || contextImage.imgUrlFile;\n contextImage.altText = image_dialog.querySelector('._se_image_alt');\n contextImage.captionCheckEl = image_dialog.querySelector('._se_image_check_caption');\n contextImage.previewSrc = image_dialog.querySelector('._se_tab_content_image .se-link-preview');\n\n /** add event listeners */\n image_dialog.querySelector('.se-dialog-tabs').addEventListener('click', this.openTab.bind(core));\n image_dialog.querySelector('form').addEventListener('submit', this.submit.bind(core));\n if (contextImage.imgInputFile) image_dialog.querySelector('.se-file-remove').addEventListener('click', this._removeSelectedFiles.bind(contextImage.imgInputFile, contextImage.imgUrlFile, contextImage.previewSrc));\n if (contextImage.imgUrlFile) contextImage.imgUrlFile.addEventListener('input', this._onLinkPreview.bind(contextImage.previewSrc, contextImage._v_src, options.linkProtocol));\n if (contextImage.imgInputFile && contextImage.imgUrlFile) contextImage.imgInputFile.addEventListener('change', this._fileInputChange.bind(contextImage));\n\n const imageGalleryButton = image_dialog.querySelector('.__se__gallery');\n if (imageGalleryButton) imageGalleryButton.addEventListener('click', this._openGallery.bind(core));\n \n contextImage.proportion = {};\n contextImage.inputX = {};\n contextImage.inputY = {};\n if (options.imageResizing) {\n contextImage.proportion = image_dialog.querySelector('._se_image_check_proportion');\n contextImage.inputX = image_dialog.querySelector('._se_image_size_x');\n contextImage.inputY = image_dialog.querySelector('._se_image_size_y');\n contextImage.inputX.value = options.imageWidth;\n contextImage.inputY.value = options.imageHeight;\n \n contextImage.inputX.addEventListener('keyup', this.setInputSize.bind(core, 'x'));\n contextImage.inputY.addEventListener('keyup', this.setInputSize.bind(core, 'y'));\n\n contextImage.inputX.addEventListener('change', this.setRatio.bind(core));\n contextImage.inputY.addEventListener('change', this.setRatio.bind(core));\n contextImage.proportion.addEventListener('change', this.setRatio.bind(core));\n \n image_dialog.querySelector('.se-dialog-btn-revert').addEventListener('click', this.sizeRevert.bind(core));\n }\n\n /** append html */\n context.dialog.modal.appendChild(image_dialog);\n\n /** link event */\n core.plugins.anchor.initEvent.call(core, 'image', image_dialog.querySelector('._se_tab_content_url'));\n contextImage.anchorCtx = core.context.anchor.caller.image;\n\n /** empty memory */\n image_dialog = null;\n },\n\n /** dialog */\n setDialog: function (core) {\n const option = core.options;\n const lang = core.lang;\n const dialog = core.util.createElement('DIV');\n\n dialog.className = 'se-dialog-content se-dialog-image';\n dialog.style.display = 'none';\n\n let html = '' +\n '
    ' +\n '' +\n '' + lang.dialogBox.imageBox.title + '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n \n if (option.imageFileInput) {\n html += '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' ;\n }\n \n if (option.imageUrlInput) {\n html += '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n ((option.imageGalleryUrl && core.plugins.imageGallery) ? '' : '') +\n '
    ' +\n '' +\n '
    ';\n }\n \n html += '
    ' +\n '
    ' +\n '' +\n '
    ';\n\n if (option.imageResizing) {\n const onlyPercentage = option.imageSizeOnlyPercentage;\n const onlyPercentDisplay = onlyPercentage ? ' style=\"display: none !important;\"' : '';\n const heightDisplay = !option.imageHeightShow ? ' style=\"display: none !important;\"' : '';\n html += '
    ';\n if (onlyPercentage || !option.imageHeightShow) {\n html += '' +\n '
    ' +\n '' +\n '
    ';\n } else {\n html += '' +\n '
    ' +\n '' +\n '' +\n '' +\n '
    ';\n }\n html += '' +\n '' +\n '' +\n '' +\n ' ' + lang.dialogBox.proportion + '' +\n '' +\n '
    ' ;\n }\n\n html += '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n core.context.anchor.forms.innerHTML +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ';\n\n dialog.innerHTML = html;\n\n return dialog;\n },\n\n _fileInputChange: function () {\n if (!this.imgInputFile.value) {\n this.imgUrlFile.removeAttribute('disabled');\n this.previewSrc.style.textDecoration = '';\n } else {\n this.imgUrlFile.setAttribute('disabled', true);\n this.previewSrc.style.textDecoration = 'line-through';\n }\n },\n\n _removeSelectedFiles: function (urlInput, previewSrc) {\n this.value = '';\n if (urlInput) {\n urlInput.removeAttribute('disabled');\n previewSrc.style.textDecoration = '';\n }\n },\n\n _openGallery: function () {\n this.callPlugin('imageGallery', this.plugins.imageGallery.open.bind(this, this.plugins.image._setUrlInput.bind(this.context.image)), null);\n },\n\n _setUrlInput: function (target) {\n this.altText.value = target.alt;\n this._v_src._linkValue = this.previewSrc.textContent = this.imgUrlFile.value = target.getAttribute('data-value') || target.src;\n this.imgUrlFile.focus();\n },\n\n _onLinkPreview: function (context, protocol, e) {\n const value = e.target.value.trim();\n context._linkValue = this.textContent = !value ? '' : (protocol && value.indexOf('://') === -1 && value.indexOf('#') !== 0) ? protocol + value : value.indexOf('://') === -1 ? '/' + value : value;\n },\n\n /**\n * @Override @Required fileManager\n */\n fileTags: ['img'],\n\n /**\n * @Override core, fileManager, resizing\n * @description It is called from core.selectComponent.\n * @param {Element} element Target element\n */\n select: function (element) {\n this.plugins.image.onModifyMode.call(this, element, this.plugins.resizing.call_controller_resize.call(this, element, 'image'));\n },\n\n /**\n * @Override fileManager, resizing\n */\n destroy: function (element) {\n const imageEl = element || this.context.image._element;\n const imageContainer = this.util.getParentElement(imageEl, this.util.isMediaComponent) || imageEl;\n const dataIndex = imageEl.getAttribute('data-index') * 1;\n\n // event\n if (typeof this.functions.onImageDeleteBefore === 'function' && (this.functions.onImageDeleteBefore(imageEl, imageContainer, dataIndex, this) === false)) return;\n\n let focusEl = (imageContainer.previousElementSibling || imageContainer.nextElementSibling);\n \n const emptyDiv = imageContainer.parentNode;\n this.util.removeItem(imageContainer);\n this.plugins.image.init.call(this);\n this.controllersOff();\n\n if (emptyDiv !== this.context.element.wysiwyg) this.util.removeItemAllParents(emptyDiv, function (current) { return current.childNodes.length === 0; }, null);\n\n // focus\n this.focusEdge(focusEl);\n \n // event\n this.plugins.fileManager.deleteInfo.call(this, 'image', dataIndex, this.functions.onImageUpload);\n\n // history stack\n this.history.push(false);\n },\n\n /**\n * @Required @Override dialog\n */\n on: function (update) {\n const contextImage = this.context.image;\n \n if (!update) {\n contextImage.inputX.value = contextImage._origin_w = this.options.imageWidth === contextImage._defaultSizeX ? '' : this.options.imageWidth;\n contextImage.inputY.value = contextImage._origin_h = this.options.imageHeight === contextImage._defaultSizeY ? '' : this.options.imageHeight;\n if (contextImage.imgInputFile && this.options.imageMultipleFile) contextImage.imgInputFile.setAttribute('multiple', 'multiple');\n } else {\n if (contextImage.imgInputFile && this.options.imageMultipleFile) contextImage.imgInputFile.removeAttribute('multiple');\n }\n this.plugins.anchor.on.call(this, contextImage.anchorCtx, update);\n },\n\n /**\n * @Required @Override dialog\n */\n open: function () {\n this.plugins.dialog.open.call(this, 'image', 'image' === this.currentControllerName);\n },\n\n openTab: function (e) {\n const modal = this.context.image.modal;\n const targetElement = (e === 'init' ? modal.querySelector('._se_tab_link') : e.target);\n\n if (!/^BUTTON$/i.test(targetElement.tagName)) {\n return false;\n }\n\n // Declare all variables\n const tabName = targetElement.getAttribute('data-tab-link');\n const contentClassName = '_se_tab_content';\n let i, tabContent, tabLinks;\n\n // Get all elements with class=\"tabcontent\" and hide them\n tabContent = modal.getElementsByClassName(contentClassName);\n for (i = 0; i < tabContent.length; i++) {\n tabContent[i].style.display = 'none';\n }\n\n // Get all elements with class=\"tablinks\" and remove the class \"active\"\n tabLinks = modal.getElementsByClassName('_se_tab_link');\n for (i = 0; i < tabLinks.length; i++) {\n this.util.removeClass(tabLinks[i], 'active');\n }\n\n // Show the current tab, and add an \"active\" class to the button that opened the tab\n modal.querySelector('.' + contentClassName + '_' + tabName).style.display = 'block';\n this.util.addClass(targetElement, 'active');\n\n // focus\n if (tabName === 'image' && this.context.image.focusElement) {\n this.context.image.focusElement.focus();\n } else if (tabName === 'url') {\n this.context.anchor.caller.image.urlInput.focus();\n }\n\n return false;\n },\n\n submit: function (e) {\n const contextImage = this.context.image;\n const imagePlugin = this.plugins.image;\n\n e.preventDefault();\n e.stopPropagation();\n\n contextImage._altText = contextImage.altText.value;\n contextImage._align = contextImage.modal.querySelector('input[name=\"suneditor_image_radio\"]:checked').value;\n contextImage._captionChecked = contextImage.captionCheckEl.checked;\n if (contextImage._resizing) contextImage._proportionChecked = contextImage.proportion.checked;\n\n try {\n if (this.context.dialog.updateModal) {\n imagePlugin.update_image.call(this, false, true, false);\n }\n \n if (contextImage.imgInputFile && contextImage.imgInputFile.files.length > 0) {\n this.showLoading();\n imagePlugin.submitAction.call(this, this.context.image.imgInputFile.files);\n } else if (contextImage.imgUrlFile && contextImage._v_src._linkValue.length > 0) {\n this.showLoading();\n imagePlugin.onRender_imgUrl.call(this, contextImage._v_src._linkValue);\n }\n } catch (error) {\n this.closeLoading();\n throw Error('[SUNEDITOR.image.submit.fail] cause : \"' + error.message + '\"');\n } finally {\n this.plugins.dialog.close.call(this);\n }\n\n return false;\n },\n\n submitAction: function (fileList) {\n if (fileList.length === 0) return;\n\n let fileSize = 0;\n let files = [];\n for (let i = 0, len = fileList.length; i < len; i++) {\n if (/image/i.test(fileList[i].type)) {\n files.push(fileList[i]);\n fileSize += fileList[i].size;\n }\n }\n\n const limitSize = this.options.imageUploadSizeLimit;\n if (limitSize > 0) {\n let infoSize = 0;\n const imagesInfo = this.context.image._infoList;\n for (let i = 0, len = imagesInfo.length; i < len; i++) {\n infoSize += imagesInfo[i].size * 1;\n }\n\n if ((fileSize + infoSize) > limitSize) {\n this.closeLoading();\n const err = '[SUNEDITOR.imageUpload.fail] Size of uploadable total images: ' + (limitSize/1000) + 'KB';\n if (typeof this.functions.onImageUploadError !== 'function' || this.functions.onImageUploadError(err, { 'limitSize': limitSize, 'currentSize': infoSize, 'uploadSize': fileSize }, this)) {\n this.functions.noticeOpen(err);\n }\n return;\n }\n }\n\n const contextImage = this.context.image;\n contextImage._uploadFileLength = files.length;\n \n const anchor = this.plugins.anchor.createAnchor.call(this, contextImage.anchorCtx, true);\n const info = {\n anchor: anchor,\n inputWidth: contextImage.inputX.value,\n inputHeight: contextImage.inputY.value,\n align: contextImage._align,\n isUpdate: this.context.dialog.updateModal,\n alt: contextImage._altText,\n element: contextImage._element\n };\n\n if (typeof this.functions.onImageUploadBefore === 'function') {\n const result = this.functions.onImageUploadBefore(files, info, this, function (data) {\n if (data && this._w.Array.isArray(data.result)) {\n this.plugins.image.register.call(this, info, data);\n } else {\n this.plugins.image.upload.call(this, info, data);\n }\n }.bind(this));\n \n if (typeof result === 'undefined') return;\n if (!result) {\n this.closeLoading();\n return;\n }\n if (this._w.Array.isArray(result) && result.length > 0) files = result;\n }\n\n this.plugins.image.upload.call(this, info, files);\n },\n\n error: function (message, response) {\n this.closeLoading();\n if (typeof this.functions.onImageUploadError !== 'function' || this.functions.onImageUploadError(message, response, this)) {\n this.functions.noticeOpen(message);\n throw Error('[SUNEDITOR.plugin.image.error] response: ' + message);\n }\n },\n\n upload: function (info, files) {\n if (!files) {\n this.closeLoading();\n return;\n }\n if (typeof files === 'string') {\n this.plugins.image.error.call(this, files, null);\n return;\n }\n\n const imageUploadUrl = this.options.imageUploadUrl;\n const filesLen = this.context.dialog.updateModal ? 1 : files.length;\n\n // server upload\n if (typeof imageUploadUrl === 'string' && imageUploadUrl.length > 0) {\n const formData = new FormData();\n for (let i = 0; i < filesLen; i++) {\n formData.append('file-' + i, files[i]);\n }\n this.plugins.fileManager.upload.call(this, imageUploadUrl, this.options.imageUploadHeader, formData, this.plugins.image.callBack_imgUpload.bind(this, info), this.functions.onImageUploadError);\n } else { // base64\n this.plugins.image.setup_reader.call(this, files, info.anchor, info.inputWidth, info.inputHeight, info.align, info.alt, filesLen, info.isUpdate);\n }\n },\n\n callBack_imgUpload: function (info, xmlHttp) {\n if (typeof this.functions.imageUploadHandler === 'function') {\n this.functions.imageUploadHandler(xmlHttp, info, this);\n } else {\n const response = JSON.parse(xmlHttp.responseText);\n if (response.errorMessage) {\n this.plugins.image.error.call(this, response.errorMessage, response);\n } else {\n this.plugins.image.register.call(this, info, response);\n }\n }\n },\n\n register: function (info, response) {\n const fileList = response.result;\n\n for (let i = 0, len = fileList.length, file; i < len; i++) {\n file = { name: fileList[i].name, size: fileList[i].size };\n if (info.isUpdate) {\n this.plugins.image.update_src.call(this, fileList[i].url, info.element, file);\n break;\n } else {\n this.plugins.image.create_image.call(this, fileList[i].url, info.anchor, info.inputWidth, info.inputHeight, info.align, file, info.alt);\n }\n }\n \n this.closeLoading();\n },\n\n setup_reader: function (files, anchor, width, height, align, alt, filesLen, isUpdate) {\n try {\n if (filesLen === 0) {\n this.closeLoading();\n console.warn('[SUNEDITOR.image.base64.fail] cause : No applicable files');\n return;\n }\n\n this.context.image.base64RenderIndex = filesLen;\n const wFileReader = this._w.FileReader;\n const filesStack = [filesLen];\n this.context.image.inputX.value = width;\n this.context.image.inputY.value = height;\n \n for (let i = 0, reader, file; i < filesLen; i++) {\n reader = new wFileReader();\n file = files[i];\n \n reader.onload = function (reader, update, updateElement, file, index) {\n filesStack[index] = { result: reader.result, file: file };\n\n if (--this.context.image.base64RenderIndex === 0) {\n this.plugins.image.onRender_imgBase64.call(this, update, filesStack, updateElement, anchor, width, height, align, alt);\n this.closeLoading();\n }\n }.bind(this, reader, isUpdate, this.context.image._element, file, i);\n\n reader.readAsDataURL(file);\n }\n } catch (e) {\n this.closeLoading();\n throw Error('[SUNEDITOR.image.setup_reader.fail] cause : \"' + e.message + '\"');\n }\n },\n\n onRender_imgBase64: function (update, filesStack, updateElement, anchor, width, height, align, alt) {\n const updateMethod = this.plugins.image.update_src;\n const createMethod = this.plugins.image.create_image;\n \n for (let i = 0, len = filesStack.length; i < len; i++) {\n if (update) {\n this.context.image._element.setAttribute('data-file-name', filesStack[i].file.name);\n this.context.image._element.setAttribute('data-file-size', filesStack[i].file.size);\n updateMethod.call(this, filesStack[i].result, updateElement, filesStack[i].file);\n } else {\n createMethod.call(this, filesStack[i].result, anchor, width, height, align, filesStack[i].file, alt);\n }\n }\n },\n\n onRender_imgUrl: function (url) {\n if (!url) url = this.context.image._v_src._linkValue;\n if (!url) return false;\n const contextImage = this.context.image;\n\n try {\n const file = {name: url.split('/').pop(), size: 0};\n if (this.context.dialog.updateModal) this.plugins.image.update_src.call(this, url, contextImage._element, file);\n else this.plugins.image.create_image.call(this, url, this.plugins.anchor.createAnchor.call(this, contextImage.anchorCtx, true), contextImage.inputX.value, contextImage.inputY.value, contextImage._align, file, contextImage._altText);\n } catch (e) {\n throw Error('[SUNEDITOR.image.URLRendering.fail] cause : \"' + e.message + '\"');\n } finally {\n this.closeLoading();\n }\n },\n\n onRender_link: function (imgTag, anchor) {\n if (anchor) {\n anchor.setAttribute('data-image-link', 'image');\n imgTag.setAttribute('data-image-link', anchor.href);\n anchor.appendChild(imgTag);\n return anchor;\n }\n\n return imgTag;\n },\n\n /**\n * @Override resizing\n * @param {String} xy 'x': width, 'y': height\n * @param {KeyboardEvent} e Event object\n */\n setInputSize: function (xy, e) {\n if (e && e.keyCode === 32) {\n e.preventDefault();\n return;\n }\n\n this.plugins.resizing._module_setInputSize.call(this, this.context.image, xy);\n },\n\n /**\n * @Override resizing\n */\n setRatio: function () {\n this.plugins.resizing._module_setRatio.call(this, this.context.image);\n },\n\n /**\n * @Override fileManager\n */\n checkFileInfo: function () {\n const imagePlugin = this.plugins.image;\n const contextImage = this.context.image;\n\n const modifyHandler = function (tag) {\n imagePlugin.onModifyMode.call(this, tag, null);\n imagePlugin.openModify.call(this, true);\n // get size\n contextImage.inputX.value = contextImage._origin_w;\n contextImage.inputY.value = contextImage._origin_h;\n // get align\n const format = this.util.getFormatElement(tag);\n if (format) contextImage._align = format.style.textAlign || format.style.float;\n // link\n if (this.util.isAnchor(tag.parentNode) && !contextImage.anchorCtx.linkValue) contextImage.anchorCtx.linkValue = ' ';\n \n imagePlugin.update_image.call(this, true, false, true);\n imagePlugin.init.call(this);\n }.bind(this);\n\n this.plugins.fileManager.checkInfo.call(this, 'image', ['img'], this.functions.onImageUpload, modifyHandler, true);\n },\n\n /**\n * @Override fileManager\n */\n resetFileInfo: function () {\n this.plugins.fileManager.resetInfo.call(this, 'image', this.functions.onImageUpload);\n },\n\n create_image: function (src, anchor, width, height, align, file, alt) {\n const imagePlugin = this.plugins.image;\n const contextImage = this.context.image;\n this.context.resizing._resize_plugin = 'image';\n\n let oImg = this.util.createElement('IMG');\n oImg.src = src;\n oImg.alt = alt;\n oImg.setAttribute('data-rotate', '0');\n anchor = imagePlugin.onRender_link.call(this, oImg, anchor ? anchor.cloneNode(false) : null);\n\n if (contextImage._resizing) {\n oImg.setAttribute('data-proportion', contextImage._proportionChecked);\n }\n\n const cover = this.plugins.component.set_cover.call(this, anchor);\n const container = this.plugins.component.set_container.call(this, cover, 'se-image-container');\n\n // caption\n if (contextImage._captionChecked) {\n contextImage._caption = this.plugins.component.create_caption.call(this);\n cover.appendChild(contextImage._caption);\n }\n\n contextImage._element = oImg;\n contextImage._cover = cover;\n contextImage._container = container;\n\n // set size\n imagePlugin.applySize.call(this, width, height);\n\n // align\n imagePlugin.setAlign.call(this, align, oImg, cover, container);\n\n oImg.onload = imagePlugin._image_create_onload.bind(this, oImg, contextImage.svgDefaultSize, container);\n if (this.insertComponent(container, true, true, true)) this.plugins.fileManager.setInfo.call(this, 'image', oImg, this.functions.onImageUpload, file, true);\n this.context.resizing._resize_plugin = '';\n },\n\n _image_create_onload: function (oImg, svgDefaultSize, container) {\n // svg exception handling\n if (oImg.offsetWidth === 0) this.plugins.image.applySize.call(this, svgDefaultSize, '');\n if (this.options.mediaAutoSelect) {\n this.selectComponent(oImg, 'image');\n } else {\n const line = this.appendFormatTag(container, null);\n if (line) this.setRange(line, 0, line, 0);\n }\n },\n\n update_image: function (init, openController, notHistoryPush) {\n const contextImage = this.context.image;\n let imageEl = contextImage._element;\n let cover = contextImage._cover;\n let container = contextImage._container;\n let isNewContainer = false;\n\n if (cover === null) {\n isNewContainer = true;\n imageEl = contextImage._element.cloneNode(true);\n cover = this.plugins.component.set_cover.call(this, imageEl);\n }\n\n if (container === null) {\n cover = cover.cloneNode(true);\n imageEl = cover.querySelector('img');\n isNewContainer = true;\n container = this.plugins.component.set_container.call(this, cover, 'se-image-container');\n } else if (isNewContainer) {\n container.innerHTML = '';\n container.appendChild(cover);\n contextImage._cover = cover;\n contextImage._element = imageEl;\n isNewContainer = false;\n }\n\n // check size\n let changeSize;\n const x = this.util.isNumber(contextImage.inputX.value) ? contextImage.inputX.value + contextImage.sizeUnit : contextImage.inputX.value;\n const y = this.util.isNumber(contextImage.inputY.value) ? contextImage.inputY.value + contextImage.sizeUnit : contextImage.inputY.value;\n if (/%$/.test(imageEl.style.width)) {\n changeSize = x !== container.style.width || y !== container.style.height;\n } else {\n changeSize = x !== imageEl.style.width || y !== imageEl.style.height;\n }\n\n // alt\n imageEl.alt = contextImage._altText;\n \n // caption\n let modifiedCaption = false;\n if (contextImage._captionChecked) {\n if (!contextImage._caption) {\n contextImage._caption = this.plugins.component.create_caption.call(this);\n cover.appendChild(contextImage._caption);\n modifiedCaption = true;\n }\n } else {\n if (contextImage._caption) {\n this.util.removeItem(contextImage._caption);\n contextImage._caption = null;\n modifiedCaption = true;\n }\n }\n\n // link\n let isNewAnchor = null;\n const anchor = this.plugins.anchor.createAnchor.call(this, contextImage.anchorCtx, true);\n if (anchor) {\n if (contextImage._linkElement !== anchor || (isNewContainer && !container.contains(anchor))) {\n contextImage._linkElement = anchor.cloneNode(false);\n cover.insertBefore(this.plugins.image.onRender_link.call(this, imageEl, contextImage._linkElement), contextImage._caption);\n isNewAnchor = contextImage._element;\n } else {\n contextImage._linkElement.setAttribute('data-image-link', 'image');\n }\n } else if (contextImage._linkElement !== null) {\n const imageElement = imageEl;\n imageElement.setAttribute('data-image-link', '');\n if (cover.contains(contextImage._linkElement)) {\n const newEl = imageElement.cloneNode(true);\n cover.removeChild(contextImage._linkElement);\n cover.insertBefore(newEl, contextImage._caption);\n contextImage._element = imageEl = newEl;\n }\n }\n\n let existElement = null;\n if (isNewContainer) {\n existElement = (this.util.isRangeFormatElement(contextImage._element.parentNode) || this.util.isWysiwygDiv(contextImage._element.parentNode)) ? \n contextImage._element : \n this.util.isAnchor(contextImage._element.parentNode) ? contextImage._element.parentNode : this.util.getFormatElement(contextImage._element) || contextImage._element;\n \n if (this.util.getParentElement(contextImage._element, this.util.isNotCheckingNode)) {\n existElement = isNewAnchor ? anchor : contextImage._element;\n existElement.parentNode.replaceChild(container, existElement);\n } else if (this.util.isListCell(existElement)) {\n const refer = this.util.getParentElement(contextImage._element, function (current) { return current.parentNode === existElement; });\n existElement.insertBefore(container, refer);\n this.util.removeItem(contextImage._element);\n this.util.removeEmptyNode(refer, null, true);\n } else if (this.util.isFormatElement(existElement)) {\n const refer = this.util.getParentElement(contextImage._element, function (current) { return current.parentNode === existElement; });\n existElement = this.util.splitElement(existElement, refer);\n existElement.parentNode.insertBefore(container, existElement);\n this.util.removeItem(contextImage._element);\n this.util.removeEmptyNode(existElement, null, true);\n if (existElement.children.length === 0) existElement.innerHTML = this.util.htmlRemoveWhiteSpace(existElement.innerHTML);\n } else {\n if (this.util.isFormatElement(existElement.parentNode)) {\n const formats = existElement.parentNode;\n formats.parentNode.insertBefore(container, existElement.previousSibling ? formats.nextElementSibling : formats);\n if (contextImage.__updateTags.map(function (current) { return existElement.contains(current); }).length === 0) this.util.removeItem(existElement);\n } else {\n existElement = this.util.isFigures(existElement.parentNode) ? existElement.parentNode : existElement;\n existElement.parentNode.replaceChild(container, existElement);\n }\n }\n\n imageEl = container.querySelector('img');\n\n contextImage._element = imageEl;\n contextImage._cover = cover;\n contextImage._container = container;\n }\n\n if (isNewAnchor) {\n if (!isNewContainer) {\n this.util.removeItem(anchor);\n } else {\n this.util.removeItem(isNewAnchor);\n if (this.util.getListChildren(anchor, function (current) { return /IMG/i.test(current.tagName); }).length === 0) {\n this.util.removeItem(anchor);\n }\n }\n }\n\n // transform\n if (modifiedCaption || (!contextImage._onlyPercentage && changeSize)) {\n if (!init && (/\\d+/.test(imageEl.style.height) || (this.context.resizing._rotateVertical && contextImage._captionChecked))) {\n if (/%$/.test(contextImage.inputX.value) || /%$/.test(contextImage.inputY.value)) {\n this.plugins.resizing.resetTransform.call(this, imageEl);\n } else {\n this.plugins.resizing.setTransformSize.call(this, imageEl, this.util.getNumber(contextImage.inputX.value, 0), this.util.getNumber(contextImage.inputY.value, 0));\n }\n }\n }\n\n // size\n if (contextImage._resizing) {\n imageEl.setAttribute('data-proportion', contextImage._proportionChecked);\n if (changeSize) {\n this.plugins.image.applySize.call(this);\n }\n }\n\n // align\n this.plugins.image.setAlign.call(this, null, imageEl, null, null);\n\n // set imagesInfo\n if (init) {\n this.plugins.fileManager.setInfo.call(this, 'image', imageEl, this.functions.onImageUpload, null, true);\n }\n\n if (openController) {\n this.selectComponent(imageEl, 'image');\n }\n\n // history stack\n if (!notHistoryPush) this.history.push(false);\n },\n\n update_src: function (src, element, file) {\n element.src = src;\n this._w.setTimeout(this.plugins.fileManager.setInfo.bind(this, 'image', element, this.functions.onImageUpload, file, true));\n this.selectComponent(element, 'image');\n },\n\n /**\n * @Required @Override fileManager, resizing\n */\n onModifyMode: function (element, size) {\n if (!element) return;\n \n const contextImage = this.context.image;\n contextImage._linkElement = contextImage.anchorCtx.linkAnchor = this.util.isAnchor(element.parentNode) ? element.parentNode : null;\n contextImage._element = element;\n contextImage._cover = this.util.getParentElement(element, 'FIGURE');\n contextImage._container = this.util.getParentElement(element, this.util.isMediaComponent);\n contextImage._caption = this.util.getChildElement(contextImage._cover, 'FIGCAPTION');\n contextImage._align = element.getAttribute('data-align') || element.style.float || 'none';\n element.style.float = '';\n this.plugins.anchor.setCtx(contextImage._linkElement, contextImage.anchorCtx);\n\n if (size) {\n contextImage._element_w = size.w;\n contextImage._element_h = size.h;\n contextImage._element_t = size.t;\n contextImage._element_l = size.l;\n }\n\n let userSize = contextImage._element.getAttribute('data-size') || contextImage._element.getAttribute('data-origin');\n let w, h;\n if (userSize) {\n userSize = userSize.split(',');\n w = userSize[0];\n h = userSize[1];\n } else if (size) {\n w = size.w;\n h = size.h;\n }\n\n contextImage._origin_w = w || element.style.width || element.width || '';\n contextImage._origin_h = h || element.style.height || element.height || '';\n },\n\n /**\n * @Required @Override fileManager, resizing\n */\n openModify: function (notOpen) {\n const contextImage = this.context.image;\n if (contextImage.imgUrlFile) {\n contextImage._v_src._linkValue = contextImage.previewSrc.textContent = contextImage.imgUrlFile.value = contextImage._element.src;\n }\n contextImage._altText = contextImage.altText.value = contextImage._element.alt;\n (contextImage.modal.querySelector('input[name=\"suneditor_image_radio\"][value=\"' + contextImage._align + '\"]') || contextImage.modal.querySelector('input[name=\"suneditor_image_radio\"][value=\"none\"]')).checked = true;\n contextImage._align = contextImage.modal.querySelector('input[name=\"suneditor_image_radio\"]:checked').value;\n contextImage._captionChecked = contextImage.captionCheckEl.checked = !!contextImage._caption;\n \n if (contextImage._resizing) {\n this.plugins.resizing._module_setModifyInputSize.call(this, contextImage, this.plugins.image);\n }\n\n if (!notOpen) this.plugins.dialog.open.call(this, 'image', true);\n },\n\n /**\n * @Override fileManager\n */\n applySize: function (w, h) {\n const contextImage = this.context.image;\n\n if (!w) w = contextImage.inputX.value || this.options.imageWidth;\n if (!h) h = contextImage.inputY.value || this.options.imageHeight;\n \n if ((contextImage._onlyPercentage && !!w) || /%$/.test(w)) {\n this.plugins.image.setPercentSize.call(this, w, h);\n return true;\n } else if ((!w || w === 'auto') && (!h || h === 'auto')) {\n this.plugins.image.setAutoSize.call(this);\n } else {\n this.plugins.image.setSize.call(this, w, h, false);\n }\n\n return false;\n },\n\n /**\n * @Override resizing\n */\n sizeRevert: function () {\n this.plugins.resizing._module_sizeRevert.call(this, this.context.image);\n },\n\n /**\n * @Override resizing\n */\n setSize: function (w, h, notResetPercentage, direction) {\n const contextImage = this.context.image;\n const onlyW = /^(rw|lw)$/.test(direction) && /\\d+/.test(contextImage._element.style.height);\n const onlyH = /^(th|bh)$/.test(direction) && /\\d+/.test(contextImage._element.style.width);\n\n if (!onlyH) {\n contextImage._element.style.width = this.util.isNumber(w) ? w + contextImage.sizeUnit : w;\n this.plugins.image.cancelPercentAttr.call(this);\n }\n if (!onlyW) {\n contextImage._element.style.height = this.util.isNumber(h) ? h + contextImage.sizeUnit : /%$/.test(h) ? '' : h;\n }\n\n if (contextImage._align === 'center') this.plugins.image.setAlign.call(this, null, null, null, null);\n if (!notResetPercentage) contextImage._element.removeAttribute('data-percentage');\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextImage);\n },\n\n /**\n * @Override resizing\n */\n setAutoSize: function () {\n const contextImage = this.context.image;\n\n if (contextImage._caption) contextImage._caption.style.marginTop = '';\n this.plugins.resizing.resetTransform.call(this, contextImage._element);\n this.plugins.image.cancelPercentAttr.call(this);\n\n contextImage._element.style.maxWidth = '';\n contextImage._element.style.width = '';\n contextImage._element.style.height = '';\n contextImage._cover.style.width = '';\n contextImage._cover.style.height = '';\n\n this.plugins.image.setAlign.call(this, null, null, null, null);\n contextImage._element.setAttribute('data-percentage', 'auto,auto');\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextImage);\n },\n \n /**\n * @Override resizing\n */\n setOriginSize: function () {\n const contextImage = this.context.image;\n contextImage._element.removeAttribute('data-percentage');\n\n this.plugins.resizing.resetTransform.call(this, contextImage._element);\n this.plugins.image.cancelPercentAttr.call(this);\n\n const originSize = (contextImage._element.getAttribute('data-origin') || '').split(',');\n const w = originSize[0];\n const h = originSize[1];\n\n if (originSize) {\n if (contextImage._onlyPercentage || (/%$/.test(w) && (/%$/.test(h) || !/\\d/.test(h)))) {\n this.plugins.image.setPercentSize.call(this, w, h);\n } else {\n this.plugins.image.setSize.call(this, w, h);\n }\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextImage);\n }\n },\n\n /**\n * @Override resizing\n */\n setPercentSize: function (w, h) {\n const contextImage = this.context.image;\n h = !!h && !/%$/.test(h) && !this.util.getNumber(h, 0) ? this.util.isNumber(h) ? h + '%' : h : this.util.isNumber(h) ? h + contextImage.sizeUnit : (h || '');\n const heightPercentage = /%$/.test(h);\n\n contextImage._container.style.width = this.util.isNumber(w) ? w + '%' : w;\n contextImage._container.style.height = '';\n contextImage._cover.style.width = '100%';\n contextImage._cover.style.height = !heightPercentage ? '' : h;\n contextImage._element.style.width = '100%';\n contextImage._element.style.height = heightPercentage ? '' : h;\n contextImage._element.style.maxWidth = '';\n\n if (contextImage._align === 'center') this.plugins.image.setAlign.call(this, null, null, null, null);\n\n contextImage._element.setAttribute('data-percentage', w + ',' + h);\n this.plugins.resizing.setCaptionPosition.call(this, contextImage._element);\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextImage);\n },\n\n /**\n * @Override resizing\n */\n cancelPercentAttr: function () {\n const contextImage = this.context.image;\n \n contextImage._cover.style.width = '';\n contextImage._cover.style.height = '';\n contextImage._container.style.width = '';\n contextImage._container.style.height = '';\n\n this.util.removeClass(contextImage._container, this.context.image._floatClassRegExp);\n this.util.addClass(contextImage._container, '__se__float-' + contextImage._align);\n\n if (contextImage._align === 'center') this.plugins.image.setAlign.call(this, null, null, null, null);\n },\n\n /**\n * @Override resizing\n */\n setAlign: function (align, element, cover, container) {\n const contextImage = this.context.image;\n \n if (!align) align = contextImage._align;\n if (!element) element = contextImage._element;\n if (!cover) cover = contextImage._cover;\n if (!container) container = contextImage._container;\n\n if (/%$/.test(element.style.width) && align === 'center') {\n container.style.minWidth = '100%';\n cover.style.width = container.style.width;\n } else {\n container.style.minWidth = '';\n cover.style.width = this.context.resizing._rotateVertical ? (element.style.height || element.offsetHeight) : ((!element.style.width || element.style.width === 'auto') ? '' : element.style.width || '100%');\n }\n\n if (!this.util.hasClass(container, '__se__float-' + align)) {\n this.util.removeClass(container, contextImage._floatClassRegExp);\n this.util.addClass(container, '__se__float-' + align);\n }\n \n element.setAttribute('data-align', align);\n },\n\n /**\n * @Override dialog\n */\n init: function () {\n const contextImage = this.context.image;\n if (contextImage.imgInputFile) contextImage.imgInputFile.value = '';\n if (contextImage.imgUrlFile) contextImage._v_src._linkValue = contextImage.previewSrc.textContent = contextImage.imgUrlFile.value = '';\n if (contextImage.imgInputFile && contextImage.imgUrlFile) {\n contextImage.imgUrlFile.removeAttribute('disabled');\n contextImage.previewSrc.style.textDecoration = '';\n }\n\n contextImage.altText.value = '';\n contextImage.modal.querySelector('input[name=\"suneditor_image_radio\"][value=\"none\"]').checked = true;\n contextImage.captionCheckEl.checked = false;\n contextImage._element = null;\n this.plugins.image.openTab.call(this, 'init');\n\n if (contextImage._resizing) {\n contextImage.inputX.value = this.options.imageWidth === contextImage._defaultSizeX ? '' : this.options.imageWidth;\n contextImage.inputY.value = this.options.imageHeight === contextImage._defaultSizeY ? '' : this.options.imageHeight;\n contextImage.proportion.checked = true;\n contextImage._ratio = false;\n contextImage._ratioX = 1;\n contextImage._ratioY = 1;\n }\n\n this.plugins.anchor.init.call(this, contextImage.anchorCtx);\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport dialog from '../modules/dialog';\nimport component from '../modules/component';\nimport resizing from '../modules/resizing';\nimport fileManager from '../modules/fileManager';\n\nexport default {\n name: 'video',\n display: 'dialog',\n add: function (core) {\n core.addModule([dialog, component, resizing, fileManager]);\n\n const options = core.options;\n const context = core.context;\n const contextVideo = context.video = {\n _infoList: [], // @Override fileManager\n _infoIndex: 0, // @Override fileManager\n _uploadFileLength: 0, // @Override fileManager\n focusElement: null, // @Override dialog // This element has focus when the dialog is opened.\n sizeUnit: options._videoSizeUnit,\n _align: 'none',\n _floatClassRegExp: '__se__float\\\\-[a-z]+',\n _youtubeQuery: options.youtubeQuery,\n _vimeoQuery: options.vimeoQuery,\n _videoRatio: (options.videoRatio * 100) + '%',\n _defaultRatio: (options.videoRatio * 100) + '%',\n _linkValue: '',\n // @require @Override component\n _element: null,\n _cover: null,\n _container: null,\n // @Override resizing properties\n inputX: null,\n inputY: null,\n _element_w: 1,\n _element_h: 1,\n _element_l: 0,\n _element_t: 0,\n _defaultSizeX: '100%',\n _defaultSizeY: (options.videoRatio * 100) + '%',\n _origin_w: options.videoWidth === '100%' ? '' : options.videoWidth,\n _origin_h: options.videoHeight === '56.25%' ? '' : options.videoHeight,\n _proportionChecked: true,\n _resizing: options.videoResizing,\n _resizeDotHide: !options.videoHeightShow,\n _rotation: options.videoRotation,\n _alignHide: !options.videoAlignShow,\n _onlyPercentage: options.videoSizeOnlyPercentage,\n _ratio: false,\n _ratioX: 1,\n _ratioY: 1,\n _captionShow: false\n };\n\n /** video dialog */\n let video_dialog = this.setDialog(core);\n contextVideo.modal = video_dialog;\n contextVideo.videoInputFile = video_dialog.querySelector('._se_video_file');\n contextVideo.videoUrlFile = video_dialog.querySelector('.se-input-url');\n contextVideo.focusElement = contextVideo.videoUrlFile || contextVideo.videoInputFile;\n contextVideo.preview = video_dialog.querySelector('.se-link-preview');\n\n /** add event listeners */\n video_dialog.querySelector('form').addEventListener('submit', this.submit.bind(core));\n if (contextVideo.videoInputFile) video_dialog.querySelector('.se-dialog-files-edge-button').addEventListener('click', this._removeSelectedFiles.bind(contextVideo.videoInputFile, contextVideo.videoUrlFile, contextVideo.preview));\n if (contextVideo.videoInputFile && contextVideo.videoUrlFile) contextVideo.videoInputFile.addEventListener('change', this._fileInputChange.bind(contextVideo));\n if (contextVideo.videoUrlFile) contextVideo.videoUrlFile.addEventListener('input', this._onLinkPreview.bind(contextVideo.preview, contextVideo, options.linkProtocol));\n\n contextVideo.proportion = {};\n contextVideo.videoRatioOption = {};\n contextVideo.inputX = {};\n contextVideo.inputY = {};\n if (options.videoResizing) {\n contextVideo.proportion = video_dialog.querySelector('._se_video_check_proportion');\n contextVideo.videoRatioOption = video_dialog.querySelector('.se-video-ratio');\n contextVideo.inputX = video_dialog.querySelector('._se_video_size_x');\n contextVideo.inputY = video_dialog.querySelector('._se_video_size_y');\n contextVideo.inputX.value = options.videoWidth;\n contextVideo.inputY.value = options.videoHeight;\n\n contextVideo.inputX.addEventListener('keyup', this.setInputSize.bind(core, 'x'));\n contextVideo.inputY.addEventListener('keyup', this.setInputSize.bind(core, 'y'));\n\n contextVideo.inputX.addEventListener('change', this.setRatio.bind(core));\n contextVideo.inputY.addEventListener('change', this.setRatio.bind(core));\n contextVideo.proportion.addEventListener('change', this.setRatio.bind(core));\n contextVideo.videoRatioOption.addEventListener('change', this.setVideoRatio.bind(core));\n\n video_dialog.querySelector('.se-dialog-btn-revert').addEventListener('click', this.sizeRevert.bind(core));\n }\n\n /** append html */\n context.dialog.modal.appendChild(video_dialog);\n\n /** empty memory */\n video_dialog = null;\n },\n\n /** dialog */\n setDialog: function (core) {\n const option = core.options;\n const lang = core.lang;\n const dialog = core.util.createElement('DIV');\n\n dialog.className = 'se-dialog-content';\n dialog.style.display = 'none';\n let html = '' +\n '
    ' +\n '
    ' +\n '' +\n '' + lang.dialogBox.videoBox.title + '' +\n '
    ' +\n '
    ';\n\n if (option.videoFileInput) {\n html += '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' ;\n }\n \n if (option.videoUrlInput) {\n html += '' +\n '
    ' +\n '' +\n '' +\n '' +\n '
    ';\n }\n\n if (option.videoResizing) {\n const ratioList = option.videoRatioList || [{name: '16:9', value: 0.5625}, {name: '4:3', value: 0.75}, {name: '21:9', value: 0.4285}];\n const ratio = option.videoRatio;\n const onlyPercentage = option.videoSizeOnlyPercentage;\n const onlyPercentDisplay = onlyPercentage ? ' style=\"display: none !important;\"' : '';\n const heightDisplay = !option.videoHeightShow ? ' style=\"display: none !important;\"' : '';\n const ratioDisplay = !option.videoRatioShow ? ' style=\"display: none !important;\"' : '';\n const onlyWidthDisplay = !onlyPercentage && !option.videoHeightShow && !option.videoRatioShow ? ' style=\"display: none !important;\"' : '';\n html += '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ';\n }\n\n html += '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ';\n\n dialog.innerHTML = html;\n\n return dialog;\n },\n\n _fileInputChange: function () {\n if (!this.videoInputFile.value) {\n this.videoUrlFile.removeAttribute('disabled');\n this.preview.style.textDecoration = '';\n } else {\n this.videoUrlFile.setAttribute('disabled', true);\n this.preview.style.textDecoration = 'line-through';\n }\n },\n\n _removeSelectedFiles: function (urlInput, preview) {\n this.value = '';\n if (urlInput) {\n urlInput.removeAttribute('disabled');\n preview.style.textDecoration = '';\n }\n },\n\n _onLinkPreview: function (context, protocol, e) {\n const value = e.target.value.trim();\n if (/^$/.test(value)) {\n context._linkValue = value;\n this.textContent = '';\n } else {\n context._linkValue = this.textContent = !value ? '' : (protocol && value.indexOf('://') === -1 && value.indexOf('#') !== 0) ? protocol + value : value.indexOf('://') === -1 ? '/' + value : value;\n }\n },\n\n _setTagAttrs: function (element) {\n element.setAttribute('controls', true);\n\n const attrs = this.options.videoTagAttrs;\n if (!attrs) return;\n\n for (let key in attrs) {\n if (!this.util.hasOwn(attrs, key)) continue;\n element.setAttribute(key, attrs[key]);\n }\n },\n\n createVideoTag: function () {\n const videoTag = this.util.createElement('VIDEO');\n this.plugins.video._setTagAttrs.call(this, videoTag);\n return videoTag;\n },\n\n _setIframeAttrs: function (element) {\n element.frameBorder = '0';\n element.allowFullscreen = true;\n\n const attrs = this.options.videoIframeAttrs;\n if (!attrs) return;\n\n for (let key in attrs) {\n if (!this.util.hasOwn(attrs, key)) continue;\n element.setAttribute(key, attrs[key]);\n }\n },\n\n createIframeTag: function () {\n const iframeTag = this.util.createElement('IFRAME');\n this.plugins.video._setIframeAttrs.call(this, iframeTag);\n return iframeTag;\n },\n\n /**\n * @Override @Required fileManager\n */\n fileTags: ['iframe', 'video'],\n\n /**\n * @Override core, resizing, fileManager\n * @description It is called from core.selectComponent.\n * @param {Element} element Target element\n */\n select: function (element) {\n this.plugins.video.onModifyMode.call(this, element, this.plugins.resizing.call_controller_resize.call(this, element, 'video'));\n },\n\n /**\n * @Override fileManager, resizing\n */\n destroy: function (element) {\n const frame = element || this.context.video._element;\n const container = this.context.video._container;\n const dataIndex = frame.getAttribute('data-index') * 1;\n\n if (typeof this.functions.onVideoDeleteBefore === 'function' && (this.functions.onVideoDeleteBefore(frame, container, dataIndex, this) === false)) return;\n\n let focusEl = (container.previousElementSibling || container.nextElementSibling);\n const emptyDiv = container.parentNode;\n this.util.removeItem(container);\n this.plugins.video.init.call(this);\n this.controllersOff();\n\n if (emptyDiv !== this.context.element.wysiwyg) this.util.removeItemAllParents(emptyDiv, function (current) { return current.childNodes.length === 0; }, null);\n\n // focus\n this.focusEdge(focusEl);\n\n // event\n this.plugins.fileManager.deleteInfo.call(this, 'video', dataIndex, this.functions.onVideoUpload);\n\n // history stack\n this.history.push(false);\n },\n\n /**\n * @Required @Override dialog\n */\n on: function (update) {\n const contextVideo = this.context.video;\n\n if (!update) {\n contextVideo.inputX.value = contextVideo._origin_w = this.options.videoWidth === contextVideo._defaultSizeX ? '' : this.options.videoWidth;\n contextVideo.inputY.value = contextVideo._origin_h = this.options.videoHeight === contextVideo._defaultSizeY ? '' : this.options.videoHeight;\n contextVideo.proportion.disabled = true;\n if (contextVideo.videoInputFile && this.options.videoMultipleFile) contextVideo.videoInputFile.setAttribute('multiple', 'multiple');\n } else {\n if (contextVideo.videoInputFile && this.options.videoMultipleFile) contextVideo.videoInputFile.removeAttribute('multiple');\n }\n\n if (contextVideo._resizing) {\n this.plugins.video.setVideoRatioSelect.call(this, contextVideo._origin_h || contextVideo._defaultRatio);\n }\n },\n\n /**\n * @Required @Override dialog\n */\n open: function () {\n this.plugins.dialog.open.call(this, 'video', 'video' === this.currentControllerName);\n },\n \n setVideoRatio: function (e) {\n const contextVideo = this.context.video;\n const value = e.target.options[e.target.selectedIndex].value;\n\n contextVideo._defaultSizeY = contextVideo._videoRatio = !value ? contextVideo._defaultSizeY : (value * 100) + '%';\n contextVideo.inputY.placeholder = !value ? '' : (value * 100) + '%';\n contextVideo.inputY.value = '';\n },\n\n /**\n * @Override resizing\n * @param {String} xy 'x': width, 'y': height\n * @param {KeyboardEvent} e Event object\n */\n setInputSize: function (xy, e) {\n if (e && e.keyCode === 32) {\n e.preventDefault();\n return;\n }\n\n const contextVideo = this.context.video;\n this.plugins.resizing._module_setInputSize.call(this, contextVideo, xy);\n\n if (xy === 'y') {\n this.plugins.video.setVideoRatioSelect.call(this, e.target.value || contextVideo._defaultRatio);\n }\n },\n\n /**\n * @Override resizing\n */\n setRatio: function () {\n this.plugins.resizing._module_setRatio.call(this, this.context.video);\n },\n\n submit: function (e) {\n const contextVideo = this.context.video;\n const videoPlugin = this.plugins.video;\n\n e.preventDefault();\n e.stopPropagation();\n\n contextVideo._align = contextVideo.modal.querySelector('input[name=\"suneditor_video_radio\"]:checked').value;\n\n try {\n if (contextVideo.videoInputFile && contextVideo.videoInputFile.files.length > 0) {\n this.showLoading();\n videoPlugin.submitAction.call(this, this.context.video.videoInputFile.files);\n } else if (contextVideo.videoUrlFile && contextVideo._linkValue.length > 0) {\n this.showLoading();\n videoPlugin.setup_url.call(this, contextVideo._linkValue);\n }\n } catch (error) {\n this.closeLoading();\n throw Error('[SUNEDITOR.video.submit.fail] cause : \"' + error.message + '\"');\n } finally {\n this.plugins.dialog.close.call(this);\n }\n\n return false;\n },\n\n submitAction: function (fileList) {\n if (fileList.length === 0) return;\n\n let fileSize = 0;\n let files = [];\n for (let i = 0, len = fileList.length; i < len; i++) {\n if (/video/i.test(fileList[i].type)) {\n files.push(fileList[i]);\n fileSize += fileList[i].size;\n }\n }\n\n const limitSize = this.options.videoUploadSizeLimit;\n if (limitSize > 0) {\n let infoSize = 0;\n const videosInfo = this.context.video._infoList;\n for (let i = 0, len = videosInfo.length; i < len; i++) {\n infoSize += videosInfo[i].size * 1;\n }\n\n if ((fileSize + infoSize) > limitSize) {\n this.closeLoading();\n const err = '[SUNEDITOR.videoUpload.fail] Size of uploadable total videos: ' + (limitSize/1000) + 'KB';\n if (typeof this.functions.onVideoUploadError !== 'function' || this.functions.onVideoUploadError(err, { 'limitSize': limitSize, 'currentSize': infoSize, 'uploadSize': fileSize }, this)) {\n this.functions.noticeOpen(err);\n }\n return;\n }\n }\n\n const contextVideo = this.context.video;\n contextVideo._uploadFileLength = files.length;\n\n const info = {\n inputWidth: contextVideo.inputX.value,\n inputHeight: contextVideo.inputY.value,\n align: contextVideo._align,\n isUpdate: this.context.dialog.updateModal,\n element: contextVideo._element\n };\n\n if (typeof this.functions.onVideoUploadBefore === 'function') {\n const result = this.functions.onVideoUploadBefore(files, info, this, function (data) {\n if (data && this._w.Array.isArray(data.result)) {\n this.plugins.video.register.call(this, info, data);\n } else {\n this.plugins.video.upload.call(this, info, data);\n }\n }.bind(this));\n\n if (typeof result === 'undefined') return;\n if (!result) {\n this.closeLoading();\n return;\n }\n if (typeof result === 'object' && result.length > 0) files = result;\n }\n\n this.plugins.video.upload.call(this, info, files);\n },\n\n error: function (message, response) {\n this.closeLoading();\n if (typeof this.functions.onVideoUploadError !== 'function' || this.functions.onVideoUploadError(message, response, this)) {\n this.functions.noticeOpen(message);\n throw Error('[SUNEDITOR.plugin.video.error] response: ' + message);\n }\n },\n\n upload: function (info, files) {\n if (!files) {\n this.closeLoading();\n return;\n }\n if (typeof files === 'string') {\n this.plugins.video.error.call(this, files, null);\n return;\n }\n\n const videoUploadUrl = this.options.videoUploadUrl;\n const filesLen = this.context.dialog.updateModal ? 1 : files.length;\n\n // server upload\n if (typeof videoUploadUrl === 'string' && videoUploadUrl.length > 0) {\n const formData = new FormData();\n for (let i = 0; i < filesLen; i++) {\n formData.append('file-' + i, files[i]);\n }\n this.plugins.fileManager.upload.call(this, videoUploadUrl, this.options.videoUploadHeader, formData, this.plugins.video.callBack_videoUpload.bind(this, info), this.functions.onVideoUploadError);\n } else {\n throw Error('[SUNEDITOR.videoUpload.fail] cause : There is no \"videoUploadUrl\" option.');\n }\n },\n\n callBack_videoUpload: function (info, xmlHttp) {\n if (typeof this.functions.videoUploadHandler === 'function') {\n this.functions.videoUploadHandler(xmlHttp, info, this);\n } else {\n const response = JSON.parse(xmlHttp.responseText);\n if (response.errorMessage) {\n this.plugins.video.error.call(this, response.errorMessage, response);\n } else {\n this.plugins.video.register.call(this, info, response);\n }\n }\n },\n\n register: function (info, response) {\n const fileList = response.result;\n const videoTag = this.plugins.video.createVideoTag.call(this);\n\n for (let i = 0, len = fileList.length, file; i < len; i++) {\n file = { name: fileList[i].name, size: fileList[i].size };\n this.plugins.video.create_video.call(this, (info.isUpdate ? info.element : videoTag.cloneNode(false)), fileList[i].url, info.inputWidth, info.inputHeight, info.align, file, info.isUpdate);\n }\n\n this.closeLoading();\n },\n\n setup_url: function (url) {\n try {\n const contextVideo = this.context.video;\n if (!url) url = contextVideo._linkValue;\n if (!url) return false;\n\n /** iframe source */\n if (/^$/.test(url)) {\n const oIframe = (new this._w.DOMParser()).parseFromString(url, 'text/html').querySelector('iframe');\n url = oIframe.src;\n if (url.length === 0) return false;\n }\n \n /** youtube */\n if (/youtu\\.?be/.test(url)) {\n if (!/^http/.test(url)) url = 'https://' + url;\n url = url.replace('watch?v=', '');\n if (!/^\\/\\/.+\\/embed\\//.test(url)) {\n url = url.replace(url.match(/\\/\\/.+\\//)[0], '//www.youtube.com/embed/').replace('&', '?&');\n }\n\n if (contextVideo._youtubeQuery.length > 0) {\n if (/\\?/.test(url)) {\n const splitUrl = url.split('?');\n url = splitUrl[0] + '?' + contextVideo._youtubeQuery + '&' + splitUrl[1];\n } else {\n url += '?' + contextVideo._youtubeQuery;\n }\n }\n } else if (/vimeo\\.com/.test(url)) {\n if (url.endsWith('/')) {\n url = url.slice(0, -1);\n }\n url = 'https://player.vimeo.com/video/' + url.slice(url.lastIndexOf('/') + 1);\n\n if (contextVideo._vimeoQuery.length > 0) {\n if (/\\?/.test(url)) {\n const splitUrl = url.split('?');\n url = splitUrl[0] + '?' + contextVideo._vimeoQuery + '&' + splitUrl[1];\n } else {\n url += '?' + contextVideo._vimeoQuery;\n }\n }\n }\n\n this.plugins.video.create_video.call(this, this.plugins.video[(!/embed|iframe|player|\\/e\\/|\\.php|\\.html?/.test(url) && !/vimeo\\.com/.test(url) ? \"createVideoTag\" : \"createIframeTag\")].call(this), url, contextVideo.inputX.value, contextVideo.inputY.value, contextVideo._align, null, this.context.dialog.updateModal);\n } catch (error) {\n throw Error('[SUNEDITOR.video.upload.fail] cause : \"' + error.message + '\"');\n } finally {\n this.closeLoading();\n }\n },\n\n create_video: function (oFrame, src, width, height, align, file, isUpdate) {\n this.context.resizing._resize_plugin = 'video';\n const contextVideo = this.context.video;\n \n let cover = null;\n let container = null;\n let init = false;\n\n /** update */\n if (isUpdate) {\n oFrame = contextVideo._element;\n if (oFrame.src !== src) {\n init = true;\n const isYoutube = /youtu\\.?be/.test(src);\n const isVimeo = /vimeo\\.com/.test(src);\n if ((isYoutube || isVimeo) && !/^iframe$/i.test(oFrame.nodeName)) {\n const newTag = this.plugins.video.createIframeTag.call(this);\n newTag.src = src;\n oFrame.parentNode.replaceChild(newTag, oFrame);\n contextVideo._element = oFrame = newTag;\n } else if (!isYoutube && !isVimeo && !/^video$/i.test(oFrame.nodeName)) {\n const newTag = this.plugins.video.createVideoTag.call(this);\n newTag.src = src;\n oFrame.parentNode.replaceChild(newTag, oFrame);\n contextVideo._element = oFrame = newTag;\n } else {\n oFrame.src = src;\n }\n }\n container = contextVideo._container;\n cover = this.util.getParentElement(oFrame, 'FIGURE');\n }\n /** create */\n else {\n init = true;\n oFrame.src = src;\n contextVideo._element = oFrame;\n cover = this.plugins.component.set_cover.call(this, oFrame);\n container = this.plugins.component.set_container.call(this, cover, 'se-video-container');\n }\n\n /** rendering */\n contextVideo._cover = cover;\n contextVideo._container = container;\n\n const inputUpdate = (this.plugins.resizing._module_getSizeX.call(this, contextVideo) !== (width || contextVideo._defaultSizeX)) || (this.plugins.resizing._module_getSizeY.call(this, contextVideo) !== (height || contextVideo._videoRatio));\n const changeSize = !isUpdate || inputUpdate;\n\n if (contextVideo._resizing) {\n this.context.video._proportionChecked = contextVideo.proportion.checked;\n oFrame.setAttribute('data-proportion', contextVideo._proportionChecked);\n }\n\n // size\n let isPercent = false;\n if (changeSize) {\n isPercent = this.plugins.video.applySize.call(this);\n }\n\n // align\n if (!(isPercent && align === 'center')) {\n this.plugins.video.setAlign.call(this, null, oFrame, cover, container);\n }\n\n let changed = true;\n if (!isUpdate) {\n changed = this.insertComponent(container, false, true, !this.options.mediaAutoSelect);\n if (!this.options.mediaAutoSelect) {\n const line = this.appendFormatTag(container, null);\n if (line) this.setRange(line, 0, line, 0);\n }\n } else if (contextVideo._resizing && this.context.resizing._rotateVertical && changeSize) {\n this.plugins.resizing.setTransformSize.call(this, oFrame, null, null);\n }\n\n if (changed) {\n if (init) {\n this.plugins.fileManager.setInfo.call(this, 'video', oFrame, this.functions.onVideoUpload, file, true);\n }\n if (isUpdate) {\n this.selectComponent(oFrame, 'video');\n // history stack\n this.history.push(false);\n }\n }\n\n this.context.resizing._resize_plugin = '';\n },\n\n _update_videoCover: function (oFrame) {\n if (!oFrame) return;\n\n const contextVideo = this.context.video;\n \n if (/^video$/i.test(oFrame.nodeName)) this.plugins.video._setTagAttrs.call(this, oFrame);\n else this.plugins.video._setIframeAttrs.call(this, oFrame);\n \n let existElement = (this.util.isRangeFormatElement(oFrame.parentNode) || this.util.isWysiwygDiv(oFrame.parentNode)) ? \n oFrame : this.util.getFormatElement(oFrame) || oFrame;\n\n const prevFrame = oFrame;\n contextVideo._element = oFrame = oFrame.cloneNode(true);\n const cover = contextVideo._cover = this.plugins.component.set_cover.call(this, oFrame);\n const container = contextVideo._container = this.plugins.component.set_container.call(this, cover, 'se-video-container');\n\n try {\n const figcaption = existElement.querySelector('figcaption');\n let caption = null;\n if (!!figcaption) {\n caption = this.util.createElement('DIV');\n caption.innerHTML = figcaption.innerHTML;\n this.util.removeItem(figcaption);\n }\n\n // size\n const size = (oFrame.getAttribute('data-size') || oFrame.getAttribute('data-origin') || '').split(',');\n this.plugins.video.applySize.call(this, (size[0] || prevFrame.style.width || prevFrame.width || ''), (size[1] || prevFrame.style.height || prevFrame.height || ''));\n\n // align\n const format = this.util.getFormatElement(prevFrame);\n if (format) contextVideo._align = format.style.textAlign || format.style.float;\n this.plugins.video.setAlign.call(this, null, oFrame, cover, container);\n\n if (this.util.getParentElement(prevFrame, this.util.isNotCheckingNode)) {\n prevFrame.parentNode.replaceChild(container, prevFrame);\n } else if (this.util.isListCell(existElement)) {\n const refer = this.util.getParentElement(prevFrame, function (current) { return current.parentNode === existElement; });\n existElement.insertBefore(container, refer);\n this.util.removeItem(prevFrame);\n this.util.removeEmptyNode(refer, null, true);\n } else if (this.util.isFormatElement(existElement)) {\n const refer = this.util.getParentElement(prevFrame, function (current) { return current.parentNode === existElement; });\n existElement = this.util.splitElement(existElement, refer);\n existElement.parentNode.insertBefore(container, existElement);\n this.util.removeItem(prevFrame);\n this.util.removeEmptyNode(existElement, null, true);\n if (existElement.children.length === 0) existElement.innerHTML = this.util.htmlRemoveWhiteSpace(existElement.innerHTML);\n } else {\n existElement.parentNode.replaceChild(container, existElement);\n }\n\n if (!!caption) existElement.parentNode.insertBefore(caption, container.nextElementSibling);\n } catch (error) {\n console.warn('[SUNEDITOR.video.error] Maybe the video tag is nested.', error);\n }\n\n this.plugins.fileManager.setInfo.call(this, 'video', oFrame, this.functions.onVideoUpload, null, true);\n this.plugins.video.init.call(this);\n },\n\n /**\n * @Required @Override fileManager, resizing\n */\n onModifyMode: function (element, size) {\n const contextVideo = this.context.video;\n contextVideo._element = element;\n contextVideo._cover = this.util.getParentElement(element, 'FIGURE');\n contextVideo._container = this.util.getParentElement(element, this.util.isMediaComponent);\n contextVideo._align = element.style.float || element.getAttribute('data-align') || 'none';\n element.style.float = '';\n\n if (size) {\n contextVideo._element_w = size.w;\n contextVideo._element_h = size.h;\n contextVideo._element_t = size.t;\n contextVideo._element_l = size.l;\n }\n\n let origin = contextVideo._element.getAttribute('data-size') || contextVideo._element.getAttribute('data-origin');\n let w, h;\n if (origin) {\n origin = origin.split(',');\n w = origin[0];\n h = origin[1];\n } else if (size) {\n w = size.w;\n h = size.h;\n }\n\n contextVideo._origin_w = w || element.style.width || element.width || '';\n contextVideo._origin_h = h || element.style.height || element.height || '';\n },\n\n /**\n * @Required @Override fileManager, resizing\n */\n openModify: function (notOpen) {\n const contextVideo = this.context.video;\n\n if (contextVideo.videoUrlFile) contextVideo._linkValue = contextVideo.preview.textContent = contextVideo.videoUrlFile.value = (contextVideo._element.src || (contextVideo._element.querySelector('source') || '').src || '');\n (contextVideo.modal.querySelector('input[name=\"suneditor_video_radio\"][value=\"' + contextVideo._align + '\"]') || contextVideo.modal.querySelector('input[name=\"suneditor_video_radio\"][value=\"none\"]')).checked = true;\n\n if (contextVideo._resizing) {\n this.plugins.resizing._module_setModifyInputSize.call(this, contextVideo, this.plugins.video);\n \n const y = contextVideo._videoRatio = this.plugins.resizing._module_getSizeY.call(this, contextVideo);\n const ratioSelected = this.plugins.video.setVideoRatioSelect.call(this, y);\n if (!ratioSelected) contextVideo.inputY.value = contextVideo._onlyPercentage ? this.util.getNumber(y, 2) : y;\n }\n\n if (!notOpen) this.plugins.dialog.open.call(this, 'video', true);\n },\n \n setVideoRatioSelect: function (value) {\n let ratioSelected = false;\n const contextVideo = this.context.video;\n const ratioOptions = contextVideo.videoRatioOption.options;\n\n if (/%$/.test(value) || contextVideo._onlyPercentage) value = (this.util.getNumber(value, 2) / 100) + '';\n else if (!this.util.isNumber(value) || (value * 1) >= 1) value = '';\n\n contextVideo.inputY.placeholder = '';\n for (let i = 0, len = ratioOptions.length; i < len; i++) {\n if (ratioOptions[i].value === value) {\n ratioSelected = ratioOptions[i].selected = true;\n contextVideo.inputY.placeholder = !value ? '' : (value * 100) + '%';\n }\n else ratioOptions[i].selected = false;\n }\n\n return ratioSelected;\n },\n\n /**\n * @Override fileManager\n */\n checkFileInfo: function () {\n this.plugins.fileManager.checkInfo.call(this, 'video', ['iframe', 'video'], this.functions.onVideoUpload, this.plugins.video._update_videoCover.bind(this), true);\n },\n\n /**\n * @Override fileManager\n */\n resetFileInfo: function () {\n this.plugins.fileManager.resetInfo.call(this, 'video', this.functions.onVideoUpload);\n },\n\n /**\n * @Override fileManager\n */\n applySize: function (w, h) {\n const contextVideo = this.context.video;\n\n if (!w) w = contextVideo.inputX.value || this.options.videoWidth;\n if (!h) h = contextVideo.inputY.value || this.options.videoHeight;\n \n if (contextVideo._onlyPercentage || /%$/.test(w) || !w) {\n this.plugins.video.setPercentSize.call(this, (w || '100%'), (h || (/%$/.test(contextVideo._videoRatio) ? contextVideo._videoRatio : contextVideo._defaultRatio)));\n return true;\n } else if ((!w || w === 'auto') && (!h || h === 'auto')) {\n this.plugins.video.setAutoSize.call(this);\n } else {\n this.plugins.video.setSize.call(this, w, (h || contextVideo._videoRatio || contextVideo._defaultRatio), false);\n }\n\n return false;\n },\n\n /**\n * @Override resizing\n */\n sizeRevert: function () {\n this.plugins.resizing._module_sizeRevert.call(this, this.context.video);\n },\n\n /**\n * @Override resizing\n */\n setSize: function (w, h, notResetPercentage, direction) {\n const contextVideo = this.context.video;\n const onlyW = /^(rw|lw)$/.test(direction);\n const onlyH = /^(th|bh)$/.test(direction);\n\n if (!onlyH) w = this.util.getNumber(w, 0);\n if (!onlyW) h = this.util.isNumber(h) ? h + contextVideo.sizeUnit : !h ? '' : h;\n w = w ? w + contextVideo.sizeUnit : '';\n\n if (!onlyH) contextVideo._element.style.width = w;\n if (!onlyW) contextVideo._cover.style.paddingBottom = contextVideo._cover.style.height = h;\n\n if (!onlyH && !/%$/.test(w)) {\n contextVideo._cover.style.width = w;\n contextVideo._container.style.width = '';\n }\n\n if (!onlyW && !/%$/.test(h)) {\n contextVideo._element.style.height = h;\n } else {\n contextVideo._element.style.height = '';\n }\n\n if (!notResetPercentage) contextVideo._element.removeAttribute('data-percentage');\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextVideo);\n },\n\n /**\n * @Override resizing\n */\n setAutoSize: function () {\n this.plugins.video.setPercentSize.call(this, 100, this.context.video._defaultRatio);\n },\n\n /**\n * @Override resizing\n */\n setOriginSize: function (dataSize) {\n const contextVideo = this.context.video;\n contextVideo._element.removeAttribute('data-percentage');\n\n this.plugins.resizing.resetTransform.call(this, contextVideo._element);\n this.plugins.video.cancelPercentAttr.call(this);\n\n const originSize = ((dataSize ? contextVideo._element.getAttribute('data-size') : '') || contextVideo._element.getAttribute('data-origin') || '').split(',');\n \n if (originSize) {\n const w = originSize[0];\n const h = originSize[1];\n\n if (contextVideo._onlyPercentage || (/%$/.test(w) && (/%$/.test(h) || !/\\d/.test(h)))) {\n this.plugins.video.setPercentSize.call(this, w, h);\n } else {\n this.plugins.video.setSize.call(this, w, h);\n }\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextVideo);\n }\n },\n\n /**\n * @Override resizing\n */\n setPercentSize: function (w, h) {\n const contextVideo = this.context.video;\n h = !!h && !/%$/.test(h) && !this.util.getNumber(h, 0) ? this.util.isNumber(h) ? h + '%' : h : this.util.isNumber(h) ? h + contextVideo.sizeUnit : (h || contextVideo._defaultRatio);\n\n contextVideo._container.style.width = this.util.isNumber(w) ? w + '%' : w;\n contextVideo._container.style.height = '';\n contextVideo._cover.style.width = '100%';\n contextVideo._cover.style.height = h;\n contextVideo._cover.style.paddingBottom = h;\n contextVideo._element.style.width = '100%';\n contextVideo._element.style.height = '100%';\n contextVideo._element.style.maxWidth = '';\n\n if (contextVideo._align === 'center') this.plugins.video.setAlign.call(this, null, null, null, null);\n contextVideo._element.setAttribute('data-percentage', w + ',' + h);\n\n // save current size\n this.plugins.resizing._module_saveCurrentSize.call(this, contextVideo);\n },\n\n /**\n * @Override resizing\n */\n cancelPercentAttr: function () {\n const contextVideo = this.context.video;\n \n contextVideo._cover.style.width = '';\n contextVideo._cover.style.height = '';\n contextVideo._cover.style.paddingBottom = '';\n contextVideo._container.style.width = '';\n contextVideo._container.style.height = '';\n\n this.util.removeClass(contextVideo._container, this.context.video._floatClassRegExp);\n this.util.addClass(contextVideo._container, '__se__float-' + contextVideo._align);\n\n if (contextVideo._align === 'center') this.plugins.video.setAlign.call(this, null, null, null, null);\n },\n\n /**\n * @Override resizing\n */\n setAlign: function (align, element, cover, container) {\n const contextVideo = this.context.video;\n \n if (!align) align = contextVideo._align;\n if (!element) element = contextVideo._element;\n if (!cover) cover = contextVideo._cover;\n if (!container) container = contextVideo._container;\n\n if (/%$/.test(element.style.width) && align === 'center') {\n container.style.minWidth = '100%';\n cover.style.width = container.style.width;\n cover.style.height = cover.style.height;\n cover.style.paddingBottom = !/%$/.test(cover.style.height) ? cover.style.height : this.util.getNumber((this.util.getNumber(cover.style.height, 2) / 100) * this.util.getNumber(cover.style.width, 2), 2) + '%';\n } else {\n container.style.minWidth = '';\n cover.style.width = this.context.resizing._rotateVertical ? (element.style.height || element.offsetHeight) : (element.style.width || '100%');\n cover.style.paddingBottom = cover.style.height;\n }\n\n if (!this.util.hasClass(container, '__se__float-' + align)) {\n this.util.removeClass(container, contextVideo._floatClassRegExp);\n this.util.addClass(container, '__se__float-' + align);\n }\n \n element.setAttribute('data-align', align);\n },\n\n /**\n * @Override dialog\n */\n init: function () {\n const contextVideo = this.context.video;\n if (contextVideo.videoInputFile) contextVideo.videoInputFile.value = '';\n if (contextVideo.videoUrlFile) contextVideo._linkValue = contextVideo.preview.textContent = contextVideo.videoUrlFile.value = '';\n if (contextVideo.videoInputFile && contextVideo.videoUrlFile) {\n contextVideo.videoUrlFile.removeAttribute('disabled');\n contextVideo.preview.style.textDecoration = '';\n }\n\n contextVideo._origin_w = this.options.videoWidth;\n contextVideo._origin_h = this.options.videoHeight;\n contextVideo.modal.querySelector('input[name=\"suneditor_video_radio\"][value=\"none\"]').checked = true;\n \n if (contextVideo._resizing) {\n contextVideo.inputX.value = this.options.videoWidth === contextVideo._defaultSizeX ? '' : this.options.videoWidth;\n contextVideo.inputY.value = this.options.videoHeight === contextVideo._defaultSizeY ? '' : this.options.videoHeight;\n contextVideo.proportion.checked = true;\n contextVideo.proportion.disabled = true;\n this.plugins.video.setVideoRatioSelect.call(this, contextVideo._defaultRatio);\n }\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport dialog from '../modules/dialog';\nimport component from '../modules/component';\nimport fileManager from '../modules/fileManager';\n\nexport default {\n name: 'audio',\n display: 'dialog',\n add: function (core) {\n core.addModule([dialog, component, fileManager]);\n\n const context = core.context;\n const contextAudio = context.audio = {\n _infoList: [], // @Override fileManager\n _infoIndex: 0, // @Override fileManager\n _uploadFileLength: 0, // @Override fileManager\n focusElement: null, // @Override dialog // This element has focus when the dialog is opened.\n targetSelect: null,\n _origin_w: core.options.audioWidth,\n _origin_h: core.options.audioHeight,\n _linkValue: '',\n // @require @Override component\n _element: null,\n _cover: null,\n _container: null,\n };\n\n /** dialog */\n let audio_dialog = this.setDialog(core);\n contextAudio.modal = audio_dialog;\n contextAudio.audioInputFile = audio_dialog.querySelector('._se_audio_files');\n contextAudio.audioUrlFile = audio_dialog.querySelector('.se-input-url');\n contextAudio.focusElement = contextAudio.audioInputFile || contextAudio.audioUrlFile;\n contextAudio.preview = audio_dialog.querySelector('.se-link-preview');\n\n /** controller */\n let audio_controller = this.setController(core);\n contextAudio.controller = audio_controller;\n\n /** add event listeners */\n audio_dialog.querySelector('form').addEventListener('submit', this.submit.bind(core));\n if (contextAudio.audioInputFile) audio_dialog.querySelector('.se-dialog-files-edge-button').addEventListener('click', this._removeSelectedFiles.bind(contextAudio.audioInputFile, contextAudio.audioUrlFile, contextAudio.preview));\n if (contextAudio.audioInputFile && contextAudio.audioUrlFile) contextAudio.audioInputFile.addEventListener('change', this._fileInputChange.bind(contextAudio));\n audio_controller.addEventListener('click', this.onClick_controller.bind(core));\n if (contextAudio.audioUrlFile) contextAudio.audioUrlFile.addEventListener('input', this._onLinkPreview.bind(contextAudio.preview, contextAudio, core.options.linkProtocol));\n\n /** append html */\n context.dialog.modal.appendChild(audio_dialog);\n\n /** append controller */\n context.element.relative.appendChild(audio_controller);\n\n /** empty memory */\n audio_dialog = null, audio_controller = null;\n },\n\n /** HTML - dialog */\n setDialog: function (core) {\n const option = core.options;\n const lang = core.lang;\n const dialog = core.util.createElement('DIV');\n\n dialog.className = 'se-dialog-content';\n dialog.style.display = 'none';\n let html = '' +\n '
    ' +\n '
    ' +\n '' +\n '' + lang.dialogBox.audioBox.title + '' +\n '
    ' +\n '
    ';\n\n if (option.audioFileInput) {\n html += '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ';\n }\n \n if (option.audioUrlInput) {\n html += '' +\n '
    ' +\n '' +\n '' +\n '' +\n '
    ';\n }\n \n html += '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n\n dialog.innerHTML = html;\n\n return dialog;\n },\n\n /** HTML - controller */\n setController: function (core) {\n const lang = core.lang;\n const icons = core.icons;\n const link_btn = core.util.createElement('DIV');\n\n link_btn.className = 'se-controller se-controller-link';\n link_btn.innerHTML = '' +\n '
    ' +\n '';\n\n return link_btn;\n },\n\n // Disable url input when uploading files\n _fileInputChange: function () {\n if (!this.audioInputFile.value) {\n this.audioUrlFile.removeAttribute('disabled');\n this.preview.style.textDecoration = '';\n } else {\n this.audioUrlFile.setAttribute('disabled', true);\n this.preview.style.textDecoration = 'line-through';\n }\n },\n\n // Disable url input when uploading files\n _removeSelectedFiles: function (urlInput, preview) {\n this.value = '';\n if (urlInput) {\n urlInput.removeAttribute('disabled');\n preview.style.textDecoration = '';\n }\n },\n\n // create new audio tag\n _createAudioTag: function () {\n const oAudio = this.util.createElement('AUDIO');\n this.plugins.audio._setTagAttrs.call(this, oAudio);\n\n const w = this.context.audio._origin_w;\n const h = this.context.audio._origin_h;\n oAudio.setAttribute('origin-size', w + ',' + h);\n oAudio.style.cssText = (w ? ('width:' + w + '; ') : '') + (h ? ('height:' + h + ';') : '');\n\n return oAudio;\n },\n\n _setTagAttrs: function (element) {\n element.setAttribute('controls', true);\n\n const attrs = this.options.audioTagAttrs;\n if (!attrs) return;\n\n for (let key in attrs) {\n if (!this.util.hasOwn(attrs, key)) continue;\n element.setAttribute(key, attrs[key]);\n }\n },\n\n _onLinkPreview: function (context, protocol, e) {\n const value = e.target.value.trim();\n context._linkValue = this.textContent = !value ? '' : (protocol && value.indexOf('://') === -1 && value.indexOf('#') !== 0) ? protocol + value : value.indexOf('://') === -1 ? '/' + value : value;\n },\n\n /**\n * @Required @Override fileManager\n */\n fileTags: ['audio'],\n\n /**\n * @Override core, fileManager, resizing\n * @description It is called from core.selectComponent.\n * @param {Element} element Target element\n */\n select: function (element) {\n this.plugins.audio.onModifyMode.call(this, element);\n },\n\n /**\n * @Override fileManager, resizing \n */\n destroy: function (element) {\n element = element || this.context.audio._element;\n const container = this.util.getParentElement(element, this.util.isComponent) || element;\n const dataIndex = element.getAttribute('data-index') * 1;\n \n if (typeof this.functions.onAudioDeleteBefore === 'function' && (this.functions.onAudioDeleteBefore(element, container, dataIndex, this) === false)) return;\n \n const focusEl = (container.previousElementSibling || container.nextElementSibling);\n const emptyDiv = container.parentNode;\n this.util.removeItem(container);\n this.plugins.audio.init.call(this);\n this.controllersOff();\n\n if (emptyDiv !== this.context.element.wysiwyg) this.util.removeItemAllParents(emptyDiv, function (current) { return current.childNodes.length === 0; }, null);\n\n // focus\n this.focusEdge(focusEl);\n\n // fileManager event\n this.plugins.fileManager.deleteInfo.call(this, 'audio', dataIndex, this.functions.onAudioUpload);\n\n // history stack\n this.history.push(false);\n },\n\n /**\n * @Override fileManager\n */\n checkFileInfo: function () {\n this.plugins.fileManager.checkInfo.call(this, 'audio', ['audio'], this.functions.onAudioUpload, this.plugins.audio.updateCover.bind(this), false);\n },\n\n /**\n * @Override fileManager\n */\n resetFileInfo: function () {\n this.plugins.fileManager.resetInfo.call(this, 'audio', this.functions.onAudioUpload);\n },\n\n /**\n * @Required @Override dialog\n */\n on: function (update) {\n const contextAudio = this.context.audio;\n\n if (!update) {\n this.plugins.audio.init.call(this);\n if (contextAudio.audioInputFile && this.options.audioMultipleFile) contextAudio.audioInputFile.setAttribute('multiple', 'multiple');\n } else if (contextAudio._element) {\n this.context.dialog.updateModal = true;\n contextAudio._linkValue = contextAudio.preview.textContent = contextAudio.audioUrlFile.value = contextAudio._element.src;\n if (contextAudio.audioInputFile && this.options.audioMultipleFile) contextAudio.audioInputFile.removeAttribute('multiple');\n } else {\n if (contextAudio.audioInputFile && this.options.audioMultipleFile) contextAudio.audioInputFile.removeAttribute('multiple');\n }\n },\n\n /**\n * @Required @Override dialog\n */\n open: function () {\n this.plugins.dialog.open.call(this, 'audio', 'audio' === this.currentControllerName);\n },\n\n submit: function (e) {\n const contextAudio = this.context.audio;\n\n e.preventDefault();\n e.stopPropagation();\n\n try {\n if (contextAudio.audioInputFile && contextAudio.audioInputFile.files.length > 0) {\n this.showLoading();\n this.plugins.audio.submitAction.call(this, contextAudio.audioInputFile.files);\n } else if (contextAudio.audioUrlFile && contextAudio._linkValue.length > 0) {\n this.showLoading();\n this.plugins.audio.setupUrl.call(this, contextAudio._linkValue);\n }\n } catch (error) {\n this.closeLoading();\n throw Error('[SUNEDITOR.audio.submit.fail] cause : \"' + error.message + '\"');\n } finally {\n this.plugins.dialog.close.call(this);\n }\n\n return false;\n },\n\n submitAction: function (fileList) {\n if (fileList.length === 0) return;\n\n let fileSize = 0;\n let files = [];\n for (let i = 0, len = fileList.length; i < len; i++) {\n if (/audio/i.test(fileList[i].type)) {\n files.push(fileList[i]);\n fileSize += fileList[i].size;\n }\n }\n\n const limitSize = this.options.audioUploadSizeLimit;\n if (limitSize > 0) {\n let infoSize = 0;\n const audiosInfo = this.context.audio._infoList;\n for (let i = 0, len = audiosInfo.length; i < len; i++) {\n infoSize += audiosInfo[i].size * 1;\n }\n\n if ((fileSize + infoSize) > limitSize) {\n this.closeLoading();\n const err = '[SUNEDITOR.audioUpload.fail] Size of uploadable total audios: ' + (limitSize/1000) + 'KB';\n if (typeof this.functions.onAudioUploadError !== 'function' || this.functions.onAudioUploadError(err, { 'limitSize': limitSize, 'currentSize': infoSize, 'uploadSize': fileSize }, this)) {\n this.functions.noticeOpen(err);\n }\n return;\n }\n }\n\n const contextAudio = this.context.audio;\n contextAudio._uploadFileLength = files.length;\n\n const info = {\n isUpdate: this.context.dialog.updateModal,\n element: contextAudio._element\n };\n\n if (typeof this.functions.onAudioUploadBefore === 'function') {\n const result = this.functions.onAudioUploadBefore(files, info, this, function (data) {\n if (data && this._w.Array.isArray(data.result)) {\n this.plugins.audio.register.call(this, info, data);\n } else {\n this.plugins.audio.upload.call(this, info, data);\n }\n }.bind(this));\n\n if (typeof result === 'undefined') return;\n if (!result) {\n this.closeLoading();\n return;\n }\n if (typeof result === 'object' && result.length > 0) files = result;\n }\n\n this.plugins.audio.upload.call(this, info, files);\n },\n\n error: function (message, response) {\n this.closeLoading();\n if (typeof this.functions.onAudioUploadError !== 'function' || this.functions.onAudioUploadError(message, response, this)) {\n this.functions.noticeOpen(message);\n throw Error('[SUNEDITOR.plugin.audio.exception] response: ' + message);\n }\n },\n\n upload: function (info, files) {\n if (!files) {\n this.closeLoading();\n return;\n }\n if (typeof files === 'string') {\n this.plugins.audio.error.call(this, files, null);\n return;\n }\n\n const audioUploadUrl = this.options.audioUploadUrl;\n const filesLen = this.context.dialog.updateModal ? 1 : files.length;\n\n // create formData\n const formData = new FormData();\n for (let i = 0; i < filesLen; i++) {\n formData.append('file-' + i, files[i]);\n }\n\n // server upload\n this.plugins.fileManager.upload.call(this, audioUploadUrl, this.options.audioUploadHeader, formData, this.plugins.audio.callBack_upload.bind(this, info), this.functions.onAudioUploadError);\n },\n\n callBack_upload: function (info, xmlHttp) {\n if (typeof this.functions.audioUploadHandler === 'function') {\n this.functions.audioUploadHandler(xmlHttp, info, this);\n } else {\n const response = JSON.parse(xmlHttp.responseText);\n if (response.errorMessage) {\n this.plugins.audio.error.call(this, response.errorMessage, response);\n } else {\n this.plugins.audio.register.call(this, info, response);\n }\n }\n },\n\n register: function (info, response) {\n const fileList = response.result;\n\n for (let i = 0, len = fileList.length, file, oAudio; i < len; i++) {\n if (info.isUpdate) oAudio = info.element;\n else oAudio = this.plugins.audio._createAudioTag.call(this);\n\n file = { name: fileList[i].name, size: fileList[i].size };\n this.plugins.audio.create_audio.call(this, oAudio, fileList[i].url, file, info.isUpdate);\n }\n\n this.closeLoading();\n },\n\n setupUrl: function (src) {\n try {\n if (src.length === 0) return false;\n this.plugins.audio.create_audio.call(this, this.plugins.audio._createAudioTag.call(this), src, null, this.context.dialog.updateModal);\n } catch (error) {\n throw Error('[SUNEDITOR.audio.audio.fail] cause : \"' + error.message + '\"');\n } finally {\n this.closeLoading();\n }\n },\n\n create_audio: function (element, src, file, isUpdate) {\n const contextAudio = this.context.audio;\n \n // create new tag\n if (!isUpdate) {\n element.src = src;\n const cover = this.plugins.component.set_cover.call(this, element);\n const container = this.plugins.component.set_container.call(this, cover, '');\n if (!this.insertComponent(container, false, true, !this.options.mediaAutoSelect)) {\n this.focus();\n return;\n }\n if (!this.options.mediaAutoSelect) {\n const line = this.appendFormatTag(container, null);\n if (line) this.setRange(line, 0, line, 0);\n }\n } // update\n else {\n if (contextAudio._element) element = contextAudio._element;\n if (element && element.src !== src) {\n element.src = src;\n this.selectComponent(element, 'audio');\n } else {\n this.selectComponent(element, 'audio');\n return;\n }\n }\n\n this.plugins.fileManager.setInfo.call(this, 'audio', element, this.functions.onAudioUpload, file, false);\n if (isUpdate) this.history.push(false);\n },\n\n updateCover: function (element) {\n const contextAudio = this.context.audio;\n this.plugins.audio._setTagAttrs.call(this, element);\n \n // find component element\n let existElement = (this.util.isRangeFormatElement(element.parentNode) || this.util.isWysiwygDiv(element.parentNode)) ? \n element : this.util.getFormatElement(element) || element;\n\n // clone element\n const prevElement = element;\n contextAudio._element = element = element.cloneNode(false);\n const cover = this.plugins.component.set_cover.call(this, element);\n const container = this.plugins.component.set_container.call(this, cover, 'se-audio-container');\n\n try {\n if (this.util.getParentElement(prevElement, this.util.isNotCheckingNode)) {\n prevElement.parentNode.replaceChild(container, prevElement);\n } else if (this.util.isListCell(existElement)) {\n const refer = this.util.getParentElement(prevElement, function (current) { return current.parentNode === existElement; });\n existElement.insertBefore(container, refer);\n this.util.removeItem(prevElement);\n this.util.removeEmptyNode(refer, null, true);\n } else if (this.util.isFormatElement(existElement)) {\n const refer = this.util.getParentElement(prevElement, function (current) { return current.parentNode === existElement; });\n existElement = this.util.splitElement(existElement, refer);\n existElement.parentNode.insertBefore(container, existElement);\n this.util.removeItem(prevElement);\n this.util.removeEmptyNode(existElement, null, true);\n if (existElement.children.length === 0) existElement.innerHTML = this.util.htmlRemoveWhiteSpace(existElement.innerHTML);\n } else {\n existElement.parentNode.replaceChild(container, existElement);\n }\n } catch (error) {\n console.warn('[SUNEDITOR.audio.error] Maybe the audio tag is nested.', error);\n }\n\n this.plugins.fileManager.setInfo.call(this, 'audio', element, this.functions.onAudioUpload, null, false);\n this.plugins.audio.init.call(this);\n },\n\n /**\n * @Required @Override fileManager, resizing\n */\n onModifyMode: function (selectionTag) {\n const contextAudio = this.context.audio;\n \n this.setControllerPosition(contextAudio.controller, selectionTag, 'bottom', {left: 0, top: 0});\n this.controllersOn(contextAudio.controller, selectionTag, this.plugins.audio.onControllerOff.bind(this, selectionTag), 'audio');\n\n this.util.addClass(selectionTag, 'active');\n contextAudio._element = selectionTag;\n contextAudio._cover = this.util.getParentElement(selectionTag, 'FIGURE');\n contextAudio._container = this.util.getParentElement(selectionTag, this.util.isComponent);\n },\n\n /**\n * @Required @Override fileManager, resizing\n */\n openModify: function (notOpen) {\n if (this.context.audio.audioUrlFile) {\n const contextAudio = this.context.audio;\n contextAudio._linkValue = contextAudio.preview.textContent = contextAudio.audioUrlFile.value = contextAudio._element.src;\n }\n if (!notOpen) this.plugins.dialog.open.call(this, 'audio', true);\n },\n\n onClick_controller: function (e) {\n e.stopPropagation();\n\n const command = e.target.getAttribute('data-command');\n if (!command) return;\n\n e.preventDefault();\n\n if (/update/.test(command)) {\n this.plugins.audio.openModify.call(this, false);\n }\n else { /** delete */\n this.plugins.audio.destroy.call(this, this.context.audio._element);\n }\n\n this.controllersOff();\n },\n\n onControllerOff: function (selectionTag) {\n this.util.removeClass(selectionTag, 'active');\n this.context.audio.controller.style.display = 'none';\n },\n\n /**\n * @Required @Override dialog\n */\n init: function () {\n if (this.context.dialog.updateModal) return;\n const contextAudio = this.context.audio;\n\n if (contextAudio.audioInputFile) contextAudio.audioInputFile.value = '';\n if (contextAudio.audioUrlFile) contextAudio._linkValue = contextAudio.preview.textContent = contextAudio.audioUrlFile.value = '';\n if (contextAudio.audioInputFile && contextAudio.audioUrlFile) {\n contextAudio.audioUrlFile.removeAttribute('disabled');\n contextAudio.preview.style.textDecoration = '';\n }\n\n contextAudio._element = null;\n }\n};","'use strict';\n\nimport dialog from '../modules/dialog';\n\nconst KATEX_WEBSITE = \"https://katex.org/docs/supported.html\";\n\nexport default {\n name: 'math',\n display: 'dialog',\n add: function (core) {\n core.addModule([dialog]);\n\n const context = core.context;\n context.math = {\n focusElement: null, // @Override dialog // This element has focus when the dialog is opened.\n previewElement: null,\n fontSizeElement: null,\n defaultFontSize: '',\n _mathExp: null\n };\n\n /** math dialog */\n let math_dialog = this.setDialog(core);\n context.math.modal = math_dialog;\n context.math.focusElement = math_dialog.querySelector('.se-math-exp');\n context.math.previewElement = math_dialog.querySelector('.se-math-preview');\n context.math.fontSizeElement = math_dialog.querySelector('.se-math-size');\n context.math.focusElement.addEventListener('paste', function (e) {\n if (typeof core.functions.onPasteMath === 'function') {\n core.functions.onPasteMath(e, core);\n }\n }, false);\n context.math.focusElement.addEventListener(core.util.isIE ? 'textinput' : 'input', this._renderMathExp.bind(core, context.math), false);\n context.math.fontSizeElement.addEventListener('change', function (e) { this.fontSize = e.target.value; }.bind(context.math.previewElement.style), false);\n\n /** math controller */\n let math_controller = this.setController_MathButton(core);\n context.math.mathController = math_controller;\n context.math._mathExp = null;\n\n /** add event listeners */\n math_dialog.querySelector('form').addEventListener('submit', this.submit.bind(core), false);\n math_controller.addEventListener('click', this.onClick_mathController.bind(core));\n context.math.previewElement.style.fontSize = context.math.defaultFontSize;\n\n /** append html */\n context.dialog.modal.appendChild(math_dialog);\n context.element.relative.appendChild(math_controller);\n\n /** empty memory */\n math_dialog = null, math_controller = null;\n },\n\n /** dialog */\n setDialog: function (core) {\n const lang = core.lang;\n const dialog = core.util.createElement('DIV');\n const fontSize = core.options.mathFontSize;\n let defaultFontSize = fontSize[0].value;\n\n dialog.className = 'se-dialog-content';\n dialog.style.display = 'none';\n let html = '' +\n '
    ' +\n '
    ' +\n '' +\n '' + lang.dialogBox.mathBox.title + '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '

    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n\n core.context.math.defaultFontSize = defaultFontSize;\n dialog.innerHTML = html;\n return dialog;\n },\n\n /** modify controller button */\n setController_MathButton: function (core) {\n const lang = core.lang;\n const math_btn = core.util.createElement('DIV');\n\n math_btn.className = 'se-controller se-controller-link';\n math_btn.innerHTML = '' +\n '
    ' +\n '' +\n '';\n\n return math_btn;\n },\n\n /**\n * @Required @Override dialog\n */\n open: function () {\n this.plugins.dialog.open.call(this, 'math', 'math' === this.currentControllerName);\n },\n\n /**\n * @Override core - managedTagsInfo\n */\n managedTags: function () {\n return {\n className: 'katex',\n method: function (element) {\n if (!element.getAttribute('data-exp') || !this.options.katex) return;\n const dom = this._d.createRange().createContextualFragment(this.plugins.math._renderer.call(this, this.util.HTMLDecoder(element.getAttribute('data-exp'))));\n element.innerHTML = dom.querySelector('.katex').innerHTML;\n element.setAttribute('contenteditable', false);\n }\n };\n },\n\n _renderer: function (exp) {\n let result = '';\n try {\n this.util.removeClass(this.context.math.focusElement, 'se-error');\n result = this.options.katex.src.renderToString(exp, {throwOnError: true, displayMode: true});\n } catch(error) {\n this.util.addClass(this.context.math.focusElement, 'se-error');\n result = 'Katex syntax error. (Refer KaTeX)';\n console.warn('[SUNEDITOR.math.Katex.error] ', error);\n }\n return result;\n },\n\n _renderMathExp: function (contextMath, e) {\n contextMath.previewElement.innerHTML = this.plugins.math._renderer.call(this, e.target.value);\n },\n\n submit: function (e) {\n this.showLoading();\n\n e.preventDefault();\n e.stopPropagation();\n\n const submitAction = function () {\n if (this.context.math.focusElement.value.trim().length === 0) return false;\n\n const contextMath = this.context.math;\n const mathExp = contextMath.focusElement.value;\n const katexEl = contextMath.previewElement.querySelector('.katex');\n\n if (!katexEl) return false;\n katexEl.className = '__se__katex ' + katexEl.className;\n katexEl.setAttribute('contenteditable', false);\n katexEl.setAttribute('data-exp', this.util.HTMLEncoder(mathExp));\n katexEl.setAttribute('data-font-size', contextMath.fontSizeElement.value);\n katexEl.style.fontSize = contextMath.fontSizeElement.value;\n\n if (!this.context.dialog.updateModal) {\n const selectedFormats = this.getSelectedElements();\n\n if (selectedFormats.length > 1) {\n const oFormat = this.util.createElement(selectedFormats[0].nodeName);\n oFormat.appendChild(katexEl);\n if (!this.insertNode(oFormat, null, true)) return false;\n } else {\n if (!this.insertNode(katexEl, null, true)) return false;\n }\n\n const empty = this.util.createTextNode(this.util.zeroWidthSpace);\n katexEl.parentNode.insertBefore(empty, katexEl.nextSibling);\n this.setRange(katexEl, 0, katexEl, 1);\n } else {\n const containerEl = this.util.getParentElement(contextMath._mathExp, '.katex');\n containerEl.parentNode.replaceChild(katexEl, containerEl);\n this.setRange(katexEl, 0, katexEl, 1);\n }\n\n contextMath.focusElement.value = '';\n contextMath.fontSizeElement.value = '1em';\n contextMath.previewElement.style.fontSize = '1em';\n contextMath.previewElement.innerHTML = '';\n\n return true;\n }.bind(this);\n\n try {\n if (submitAction()) {\n this.plugins.dialog.close.call(this);\n // history stack\n this.history.push(false);\n }\n } catch (e) {\n this.plugins.dialog.close.call(this);\n } finally {\n this.closeLoading();\n }\n\n return false;\n },\n\n active: function (element) {\n if (!element) {\n if (this.controllerArray.indexOf(this.context.math.mathController) > -1) {\n this.controllersOff();\n }\n } else if (element.getAttribute('data-exp')) {\n if (this.controllerArray.indexOf(this.context.math.mathController) < 0) {\n this.setRange(element, 0, element, 1);\n this.plugins.math.call_controller.call(this, element);\n }\n return true;\n }\n\n return false;\n },\n\n on: function (update) {\n if (!update) {\n this.plugins.math.init.call(this);\n } else {\n const contextMath = this.context.math;\n if (contextMath._mathExp) {\n const exp = this.util.HTMLDecoder(contextMath._mathExp.getAttribute('data-exp'));\n const fontSize = contextMath._mathExp.getAttribute('data-font-size') || '1em';\n this.context.dialog.updateModal = true;\n contextMath.focusElement.value = exp;\n contextMath.fontSizeElement.value = fontSize;\n contextMath.previewElement.innerHTML = this.plugins.math._renderer.call(this, exp);\n contextMath.previewElement.style.fontSize = fontSize;\n }\n }\n },\n\n call_controller: function (mathTag) {\n this.context.math._mathExp = mathTag;\n const mathBtn = this.context.math.mathController;\n\n this.setControllerPosition(mathBtn, mathTag, 'bottom', {left: 0, top: 0});\n this.controllersOn(mathBtn, mathTag, 'math');\n },\n\n onClick_mathController: function (e) {\n e.stopPropagation();\n\n const command = e.target.getAttribute('data-command') || e.target.parentNode.getAttribute('data-command');\n if (!command) return;\n\n e.preventDefault();\n\n if (/update/.test(command)) {\n this.context.math.focusElement.value = this.util.HTMLDecoder(this.context.math._mathExp.getAttribute('data-exp'));\n this.plugins.dialog.open.call(this, 'math', true);\n } else {\n /** delete */\n this.util.removeItem(this.context.math._mathExp);\n this.context.math._mathExp = null;\n this.focus();\n\n // history stack\n this.history.push(false);\n }\n\n this.controllersOff();\n },\n\n init: function () {\n const contextMath = this.context.math;\n contextMath.mathController.style.display = 'none';\n contextMath._mathExp = null;\n contextMath.focusElement.value = '';\n contextMath.previewElement.innerHTML = '';\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport fileBrowser from '../modules/fileBrowser';\n\nexport default {\n name: 'imageGallery',\n /**\n * @description Constructor\n * @param {Object} core Core object \n */\n add: function (core) {\n core.addModule([fileBrowser]);\n\n const context = core.context;\n context.imageGallery = {\n title: core.lang.toolbar.imageGallery, // @Required @Override fileBrowser - File browser window title.\n url: core.options.imageGalleryUrl, // @Required @Override fileBrowser - File server url.\n header: core.options.imageGalleryHeader, // @Required @Override fileBrowser - File server http header.\n listClass: 'se-image-list', // @Required @Override fileBrowser - Class name of list div.\n itemTemplateHandler: this.drawItems, // @Required @Override fileBrowser - Function that defines the HTML of an file item.\n selectorHandler: this.setImage.bind(core), // @Required @Override fileBrowser - Function that action when item click.\n columnSize: 4 // @Option @Override fileBrowser - Number of \"div.se-file-item-column\" to be created (default: 4)\n };\n },\n \n /**\n * @Required @Override fileBrowser\n * @description Open a file browser.\n * @param {Function|null} selectorHandler When the function comes as an argument value, it substitutes \"context.selectorHandler\".\n */\n open: function (selectorHandler) {\n this.plugins.fileBrowser.open.call(this, 'imageGallery', selectorHandler);\n },\n\n /**\n * @Required @Override fileBrowser\n * @description Define the HTML of the item to be put in \"div.se-file-item-column\".\n * Format: [\n * { src: \"image src\", name: \"name(@option)\", alt: \"image alt(@option)\", tag: \"tag name(@option)\" }\n * ]\n * @param {Object} item Item of the response data's array\n */\n drawItems: function (item) {\n const srcName = item.src.split('/').pop();\n return '
    \"'' +\n '
    ' +\n '
    ' + (item.name || srcName) + '
    ' +\n '
    ';\n },\n\n setImage: function (target, fileName) {\n this.callPlugin('image', function () {\n const file = {name: fileName, size: 0};\n this.plugins.image.create_image.call(this, target.getAttribute('data-value'), null, this.context.image._origin_w, this.context.image._origin_h, 'none', file, target.alt);\n }.bind(this), null);\n }\n};","'use strict';\n\n// command\nimport blockquote from './command/blockquote';\n\n// submenu\nimport align from './submenu/align';\nimport font from './submenu/font';\nimport fontSize from './submenu/fontSize';\nimport fontColor from './submenu/fontColor';\nimport hiliteColor from './submenu/hiliteColor';\nimport horizontalRule from './submenu/horizontalRule';\nimport list from './submenu/list';\nimport table from './submenu/table';\nimport formatBlock from './submenu/formatBlock';\nimport lineHeight from './submenu/lineHeight';\nimport template from './submenu/template';\nimport paragraphStyle from './submenu/paragraphStyle';\nimport textStyle from './submenu/textStyle';\n\n// dialog\nimport link from './dialog/link';\nimport image from './dialog/image';\nimport video from './dialog/video';\nimport audio from './dialog/audio';\nimport math from './dialog/math';\n\n// file browser\nimport imageGallery from './fileBrowser/imageGallery';\n\nexport { blockquote, align, font, fontSize, fontColor, hiliteColor, horizontalRule, list, table, formatBlock, lineHeight, template, paragraphStyle, textStyle, link, image, video, audio, math, imageGallery };\nexport default { blockquote, align, font, fontSize, fontColor, hiliteColor, horizontalRule, list, table, formatBlock, lineHeight, template, paragraphStyle, textStyle, link, image, video, audio, math, imageGallery };\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_MODULES a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const component = {\n name: 'component',\n /**\n * @description Create a container for the resizing component and insert the element.\n * @param {Element} cover Cover element (FIGURE)\n * @param {String} className Class name of container (fixed: se-component)\n * @returns {Element} Created container element\n */\n set_container: function (cover, className) {\n const container = this.util.createElement('DIV');\n container.className = 'se-component ' + className;\n container.appendChild(cover);\n \n return container;\n },\n\n /**\n * @description Cover the target element with a FIGURE element.\n * @param {Element} element Target element\n */\n set_cover: function (element) {\n const cover = this.util.createElement('FIGURE');\n cover.appendChild(element);\n \n return cover;\n },\n\n /**\n * @description Return HTML string of caption(FIGCAPTION) element\n * @returns {String}\n */\n create_caption: function () {\n const caption = this.util.createElement('FIGCAPTION');\n caption.innerHTML = '
    ' + this.lang.dialogBox.caption + '
    ';\n return caption;\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_MODULES) {\n Object.defineProperty(window, 'SUNEDITOR_MODULES', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_MODULES, 'component', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: component\n });\n }\n\n return component;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_MODULES a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const dialog = {\n name: 'dialog',\n /**\n * @description Constructor\n * @param {Object} core Core object \n */\n add: function (core) {\n const context = core.context;\n context.dialog = {\n kind: '',\n updateModal: false,\n _closeSignal: false\n };\n\n /** dialog */\n let dialog_div = core.util.createElement('DIV');\n dialog_div.className = 'se-dialog sun-editor-common';\n\n let dialog_back = core.util.createElement('DIV');\n dialog_back.className = 'se-dialog-back';\n dialog_back.style.display = 'none';\n\n let dialog_area = core.util.createElement('DIV');\n dialog_area.className = 'se-dialog-inner';\n dialog_area.style.display = 'none';\n\n dialog_div.appendChild(dialog_back);\n dialog_div.appendChild(dialog_area);\n\n context.dialog.modalArea = dialog_div;\n context.dialog.back = dialog_back;\n context.dialog.modal = dialog_area;\n\n /** add event listeners */\n context.dialog.modal.addEventListener('mousedown', this._onMouseDown_dialog.bind(core));\n context.dialog.modal.addEventListener('click', this._onClick_dialog.bind(core));\n \n /** append html */\n context.element.relative.appendChild(dialog_div);\n \n /** empty memory */\n dialog_div = null, dialog_back = null, dialog_area = null;\n },\n\n /**\n * @description Event to control the behavior of closing the dialog\n * @param {MouseEvent} e Event object\n * @private\n */\n _onMouseDown_dialog: function (e) {\n if (/se-dialog-inner/.test(e.target.className)) {\n this.context.dialog._closeSignal = true;\n } else {\n this.context.dialog._closeSignal = false;\n }\n },\n\n /**\n * @description Event to close the window when the outside area of the dialog or close button is click\n * @param {MouseEvent} e Event object\n * @private\n */\n _onClick_dialog: function (e) {\n if (/close/.test(e.target.getAttribute('data-command')) || this.context.dialog._closeSignal) {\n this.plugins.dialog.close.call(this);\n }\n },\n\n /**\n * @description Open a Dialog plugin\n * @param {String} kind Dialog plugin name\n * @param {Boolean} update Whether it will open for update ('image' === this.currentControllerName)\n */\n open: function (kind, update) {\n if (this.modalForm) return false;\n if (this.plugins.dialog._bindClose) {\n this._d.removeEventListener('keydown', this.plugins.dialog._bindClose);\n this.plugins.dialog._bindClose = null;\n }\n\n this.plugins.dialog._bindClose = function (e) {\n if (!/27/.test(e.keyCode)) return;\n this.plugins.dialog.close.call(this);\n }.bind(this);\n this._d.addEventListener('keydown', this.plugins.dialog._bindClose);\n\n this.context.dialog.updateModal = update;\n\n if (this.options.popupDisplay === 'full') {\n this.context.dialog.modalArea.style.position = 'fixed';\n } else {\n this.context.dialog.modalArea.style.position = 'absolute';\n }\n\n this.context.dialog.kind = kind;\n this.modalForm = this.context[kind].modal;\n const focusElement = this.context[kind].focusElement;\n\n if (typeof this.plugins[kind].on === 'function') this.plugins[kind].on.call(this, update);\n\n this.context.dialog.modalArea.style.display = 'block';\n this.context.dialog.back.style.display = 'block';\n this.context.dialog.modal.style.display = 'block';\n this.modalForm.style.display = 'block';\n\n if (focusElement) focusElement.focus();\n },\n\n _bindClose: null,\n \n /**\n * @description Close a Dialog plugin\n * The plugin's \"init\" method is called.\n */\n close: function () {\n if (this.plugins.dialog._bindClose) {\n this._d.removeEventListener('keydown', this.plugins.dialog._bindClose);\n this.plugins.dialog._bindClose = null;\n }\n\n const kind = this.context.dialog.kind;\n this.modalForm.style.display = 'none';\n this.context.dialog.back.style.display = 'none';\n this.context.dialog.modalArea.style.display = 'none';\n this.context.dialog.updateModal = false;\n if (typeof this.plugins[kind].init === 'function') this.plugins[kind].init.call(this);\n this.context.dialog.kind = '';\n this.modalForm = null;\n this.focus();\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_MODULES) {\n Object.defineProperty(window, 'SUNEDITOR_MODULES', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_MODULES, 'dialog', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: dialog\n });\n }\n\n return dialog;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_MODULES a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const fileBrowser = {\n name: 'fileBrowser',\n _xmlHttp: null,\n _loading: null,\n\n /**\n * @description Constructor\n * @param {Object} core Core object \n */\n add: function (core) {\n const context = core.context;\n context.fileBrowser = {\n _closeSignal: false,\n area: null,\n header: null,\n tagArea: null,\n body: null,\n list: null,\n tagElements: null,\n items: [],\n selectedTags: [],\n selectorHandler: null,\n contextPlugin: '',\n columnSize: 4\n };\n\n /** fileBrowser */\n let browser_div = core.util.createElement('DIV');\n browser_div.className = 'se-file-browser sun-editor-common';\n\n let back = core.util.createElement('DIV');\n back.className = 'se-file-browser-back';\n\n let content = core.util.createElement('DIV');\n content.className = 'se-file-browser-inner';\n content.innerHTML = this.set_browser(core);\n\n browser_div.appendChild(back);\n browser_div.appendChild(content);\n this._loading = browser_div.querySelector('.se-loading-box');\n\n context.fileBrowser.area = browser_div;\n context.fileBrowser.header = content.querySelector('.se-file-browser-header');\n context.fileBrowser.titleArea = content.querySelector('.se-file-browser-title');\n context.fileBrowser.tagArea = content.querySelector('.se-file-browser-tags');\n context.fileBrowser.body = content.querySelector('.se-file-browser-body');\n context.fileBrowser.list = content.querySelector('.se-file-browser-list');\n\n /** add event listeners */\n context.fileBrowser.tagArea.addEventListener('click', this.onClickTag.bind(core));\n context.fileBrowser.list.addEventListener('click', this.onClickFile.bind(core));\n content.addEventListener('mousedown', this._onMouseDown_browser.bind(core));\n content.addEventListener('click', this._onClick_browser.bind(core));\n \n /** append html */\n context.element.relative.appendChild(browser_div);\n \n /** empty memory */\n browser_div = null, back = null, content = null;\n },\n\n set_browser: function (core) {\n const lang = core.lang;\n\n return '
    ' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n },\n\n /**\n * @description Event to control the behavior of closing the browser\n * @param {MouseEvent} e Event object\n * @private\n */\n _onMouseDown_browser: function (e) {\n if (/se-file-browser-inner/.test(e.target.className)) {\n this.context.fileBrowser._closeSignal = true;\n } else {\n this.context.fileBrowser._closeSignal = false;\n }\n },\n\n /**\n * @description Event to close the window when the outside area of the browser or close button is click\n * @param {MouseEvent} e Event object\n * @private\n */\n _onClick_browser: function (e) {\n e.stopPropagation();\n\n if (/close/.test(e.target.getAttribute('data-command')) || this.context.fileBrowser._closeSignal) {\n this.plugins.fileBrowser.close.call(this);\n }\n },\n\n /**\n * @description Open a file browser plugin\n * @param {String} pluginName Plugin name using the file browser\n * @param {Function|null} selectorHandler When the function comes as an argument value, it substitutes \"context.selectorHandler\".\n */\n open: function (pluginName, selectorHandler) {\n if (this.plugins.fileBrowser._bindClose) {\n this._d.removeEventListener('keydown', this.plugins.fileBrowser._bindClose);\n this.plugins.fileBrowser._bindClose = null;\n }\n\n this.plugins.fileBrowser._bindClose = function (e) {\n if (!/27/.test(e.keyCode)) return;\n this.plugins.fileBrowser.close.call(this);\n }.bind(this);\n this._d.addEventListener('keydown', this.plugins.fileBrowser._bindClose);\n\n const fileBrowserContext = this.context.fileBrowser;\n fileBrowserContext.contextPlugin = pluginName;\n fileBrowserContext.selectorHandler = selectorHandler;\n \n const pluginContext = this.context[pluginName];\n const listClassName = pluginContext.listClass;\n if (!this.util.hasClass(fileBrowserContext.list, listClassName)) {\n fileBrowserContext.list.className = 'se-file-browser-list ' + listClassName;\n }\n\n if (this.options.popupDisplay === 'full') {\n fileBrowserContext.area.style.position = 'fixed';\n } else {\n fileBrowserContext.area.style.position = 'absolute';\n }\n \n fileBrowserContext.titleArea.textContent = pluginContext.title;\n fileBrowserContext.area.style.display = 'block';\n\n this.plugins.fileBrowser._drawFileList.call(this, this.context[pluginName].url, this.context[pluginName].header);\n },\n\n _bindClose: null,\n \n /**\n * @description Close a fileBrowser plugin\n * The plugin's \"init\" method is called.\n */\n close: function () {\n const fileBrowserPlugin = this.plugins.fileBrowser;\n\n if (fileBrowserPlugin._xmlHttp) {\n fileBrowserPlugin._xmlHttp.abort();\n }\n\n if (fileBrowserPlugin._bindClose) {\n this._d.removeEventListener('keydown', fileBrowserPlugin._bindClose);\n fileBrowserPlugin._bindClose = null;\n }\n\n const fileBrowserContext = this.context.fileBrowser;\n fileBrowserContext.area.style.display = 'none';\n fileBrowserContext.selectorHandler = null;\n fileBrowserContext.selectedTags = [];\n fileBrowserContext.items = [];\n fileBrowserContext.list.innerHTML = fileBrowserContext.tagArea.innerHTML = fileBrowserContext.titleArea.textContent = '';\n\n if (typeof this.plugins[fileBrowserContext.contextPlugin].init === 'function') this.plugins[fileBrowserContext.contextPlugin].init.call(this);\n fileBrowserContext.contextPlugin = '';\n },\n\n /**\n * @description Show file browser loading box\n */\n showBrowserLoading: function () {\n this._loading.style.display = 'block';\n },\n\n /**\n * @description Close file browser loading box\n */\n closeBrowserLoading: function () {\n this._loading.style.display = 'none';\n },\n\n _drawFileList: function (url, browserHeader) {\n const fileBrowserPlugin = this.plugins.fileBrowser;\n\n const xmlHttp = fileBrowserPlugin._xmlHttp = this.util.getXMLHttpRequest();\n xmlHttp.onreadystatechange = fileBrowserPlugin._callBackGet.bind(this, xmlHttp);\n xmlHttp.open('get', url, true);\n if(browserHeader !== null && typeof browserHeader === 'object' && this._w.Object.keys(browserHeader).length > 0){\n for(let key in browserHeader){\n xmlHttp.setRequestHeader(key, browserHeader[key]);\n }\n }\n xmlHttp.send(null);\n\n this.plugins.fileBrowser.showBrowserLoading();\n },\n\n _callBackGet: function (xmlHttp) {\n if (xmlHttp.readyState === 4) {\n this.plugins.fileBrowser._xmlHttp = null;\n if (xmlHttp.status === 200) {\n try {\n const res = JSON.parse(xmlHttp.responseText);\n if (res.result.length > 0) {\n this.plugins.fileBrowser._drawListItem.call(this, res.result, true);\n } else if (res.nullMessage) {\n this.context.fileBrowser.list.innerHTML = res.nullMessage;\n }\n } catch (e) {\n throw Error('[SUNEDITOR.fileBrowser.drawList.fail] cause : \"' + e.message + '\"');\n } finally {\n this.plugins.fileBrowser.closeBrowserLoading();\n this.context.fileBrowser.body.style.maxHeight = (this._w.innerHeight - this.context.fileBrowser.header.offsetHeight - 50) + 'px';\n }\n } else { // exception\n this.plugins.fileBrowser.closeBrowserLoading();\n if (xmlHttp.status !== 0) {\n const res = !xmlHttp.responseText ? xmlHttp : JSON.parse(xmlHttp.responseText);\n const err = '[SUNEDITOR.fileBrowser.get.serverException] status: ' + xmlHttp.status + ', response: ' + (res.errorMessage || xmlHttp.responseText);\n throw Error(err);\n }\n }\n }\n },\n\n _drawListItem: function (items, update) {\n const fileBrowserContext = this.context.fileBrowser;\n const pluginContext = this.context[fileBrowserContext.contextPlugin];\n\n const _tags = [];\n const len = items.length;\n const columnSize = pluginContext.columnSize || fileBrowserContext.columnSize;\n const splitSize = columnSize <= 1 ? 1 : (Math.round(len/columnSize) || 1);\n const drawItemHandler = pluginContext.itemTemplateHandler;\n \n let tagsHTML = '';\n let listHTML = '
    ';\n let columns = 1;\n for (let i = 0, item, tags; i < len; i++) {\n item = items[i];\n tags = !item.tag ? [] : typeof item.tag === 'string' ? item.tag.split(',') : item.tag;\n tags = item.tag = tags.map(function (v) { return v.trim(); });\n listHTML += drawItemHandler(item);\n\n if ((i + 1) % splitSize === 0 && columns < columnSize && (i + 1) < len) {\n columns++;\n listHTML += '
    ';\n }\n \n if (update && tags.length > 0) {\n for (let t = 0, tLen = tags.length, tag; t < tLen; t++) {\n tag = tags[t];\n if (tag && _tags.indexOf(tag) === -1) {\n _tags.push(tag);\n tagsHTML += '' + tag + '';\n }\n }\n }\n }\n listHTML += '
    ';\n\n fileBrowserContext.list.innerHTML = listHTML;\n\n if (update) {\n fileBrowserContext.items = items;\n fileBrowserContext.tagArea.innerHTML = tagsHTML;\n fileBrowserContext.tagElements = fileBrowserContext.tagArea.querySelectorAll('A');\n }\n },\n\n onClickTag: function (e) {\n const target = e.target;\n if (!this.util.isAnchor(target)) return;\n\n const tagName = target.textContent;\n const fileBrowserPlugin = this.plugins.fileBrowser;\n const fileBrowserContext = this.context.fileBrowser;\n\n const selectTag = fileBrowserContext.tagArea.querySelector('a[title=\"' + tagName + '\"]');\n const selectedTags = fileBrowserContext.selectedTags;\n const sTagIndex = selectedTags.indexOf(tagName);\n\n if (sTagIndex > -1){\n selectedTags.splice(sTagIndex, 1);\n this.util.removeClass(selectTag, 'on');\n } else {\n selectedTags.push(tagName);\n this.util.addClass(selectTag, 'on');\n }\n\n fileBrowserPlugin._drawListItem.call(this,\n selectedTags.length === 0 ?\n fileBrowserContext.items :\n fileBrowserContext.items.filter(function (item) {\n return item.tag.some(function (tag) {\n return selectedTags.indexOf(tag) > -1;\n });\n }), false);\n },\n\n onClickFile: function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n const fileBrowserContext = this.context.fileBrowser;\n const listEl = fileBrowserContext.list;\n let target = e.target;\n let command = null;\n\n if (target === listEl) return;\n\n while (listEl !== target.parentNode) {\n command = target.getAttribute('data-command');\n if (command) break;\n target = target.parentNode;\n }\n\n if (!command) return;\n\n const handler = (fileBrowserContext.selectorHandler || this.context[fileBrowserContext.contextPlugin].selectorHandler);\n handler(target, target.parentNode.querySelector('.__se__img_name').textContent);\n this.plugins.fileBrowser.close.call(this);\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_MODULES) {\n Object.defineProperty(window, 'SUNEDITOR_MODULES', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_MODULES, 'fileBrowser', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: fileBrowser\n });\n }\n\n return fileBrowser;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_MODULES a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const fileManager = {\n name: 'fileManager',\n _xmlHttp: null,\n\n _checkMediaComponent: function (tag) {\n if (/IMG/i.test(tag)) {\n return !/FIGURE/i.test(tag.parentElement.nodeName) || !/FIGURE/i.test(tag.parentElement.parentElement.nodeName);\n }\n return true;\n },\n\n /**\n * @description Upload the file to the server.\n * @param {String} uploadUrl Upload server url\n * @param {Object|null} uploadHeader Request header\n * @param {FormData} formData FormData in body\n * @param {Function|null} callBack Success call back function\n * @param {Function|null} errorCallBack Error call back function\n * @example this.plugins.fileManager.upload.call(this, imageUploadUrl, this.options.imageUploadHeader, formData, this.plugins.image.callBack_imgUpload.bind(this, info), this.functions.onImageUploadError);\n */\n upload: function (uploadUrl, uploadHeader, formData, callBack, errorCallBack) {\n this.showLoading();\n const filePlugin = this.plugins.fileManager;\n const xmlHttp = filePlugin._xmlHttp = this.util.getXMLHttpRequest();\n\n xmlHttp.onreadystatechange = filePlugin._callBackUpload.bind(this, xmlHttp, callBack, errorCallBack);\n xmlHttp.open('post', uploadUrl, true);\n if(uploadHeader !== null && typeof uploadHeader === 'object' && this._w.Object.keys(uploadHeader).length > 0){\n for(let key in uploadHeader){\n xmlHttp.setRequestHeader(key, uploadHeader[key]);\n }\n }\n xmlHttp.send(formData);\n },\n\n _callBackUpload: function (xmlHttp, callBack, errorCallBack) {\n if (xmlHttp.readyState === 4) {\n if (xmlHttp.status === 200) {\n try {\n callBack(xmlHttp);\n } catch (e) {\n throw Error('[SUNEDITOR.fileManager.upload.callBack.fail] cause : \"' + e.message + '\"');\n } finally {\n this.closeLoading();\n }\n } else { // exception\n this.closeLoading();\n const res = !xmlHttp.responseText ? xmlHttp : JSON.parse(xmlHttp.responseText);\n if (typeof errorCallBack !== 'function' || errorCallBack('', res, this)) {\n const err = '[SUNEDITOR.fileManager.upload.serverException] status: ' + xmlHttp.status + ', response: ' + (res.errorMessage || xmlHttp.responseText);\n this.functions.noticeOpen(err);\n throw Error(err);\n }\n }\n }\n },\n \n /**\n * @description Checke the file's information and modify the tag that does not fit the format.\n * @param {String} pluginName Plugin name\n * @param {Array} tagNames Tag array to check\n * @param {Function|null} uploadEventHandler Event handler to process updated file info after checking (used in \"setInfo\")\n * @param {Function} modifyHandler A function to modify a tag that does not fit the format (Argument value: Tag element)\n * @param {Boolean} resizing True if the plugin is using a resizing module\n * @example \n * const modifyHandler = function (tag) {\n * imagePlugin.onModifyMode.call(this, tag, null);\n * imagePlugin.openModify.call(this, true);\n * imagePlugin.update_image.call(this, true, false, true);\n * }.bind(this);\n * this.plugins.fileManager.checkInfo.call(this, 'image', ['img'], this.functions.onImageUpload, modifyHandler, true);\n */\n checkInfo: function (pluginName, tagNames, uploadEventHandler, modifyHandler, resizing) {\n let tags = [];\n for (let i = 0, len = tagNames.length; i < len; i++) {\n tags = tags.concat([].slice.call(this.context.element.wysiwyg.querySelectorAll(tagNames[i] + ':not([data-se-embed=\"true\"])')));\n }\n\n const fileManagerPlugin = this.plugins.fileManager;\n const context = this.context[pluginName];\n const infoList = context._infoList;\n const setFileInfo = fileManagerPlugin.setInfo.bind(this);\n\n if (tags.length === infoList.length) {\n // reset\n if (this._componentsInfoReset) {\n for (let i = 0, len = tags.length; i < len; i++) {\n setFileInfo(pluginName, tags[i], uploadEventHandler, null, resizing);\n }\n return ;\n } else {\n let infoUpdate = false;\n for (let i = 0, len = infoList.length, info; i < len; i++) {\n info = infoList[i];\n if (tags.filter(function (t) { return info.src === t.src && info.index.toString() === t.getAttribute('data-index'); }).length === 0) {\n infoUpdate = true;\n break;\n }\n }\n // pass\n if (!infoUpdate) return;\n }\n }\n\n // check\n const _resize_plugin = resizing ? this.context.resizing._resize_plugin : '';\n if (resizing) this.context.resizing._resize_plugin = pluginName;\n const currentTags = [];\n const infoIndex = [];\n for (let i = 0, len = infoList.length; i < len; i++) {\n infoIndex[i] = infoList[i].index;\n }\n context.__updateTags = tags;\n\n while (tags.length > 0) {\n const tag = tags.shift();\n if (!this.util.getParentElement(tag, this.util.isMediaComponent) || !fileManagerPlugin._checkMediaComponent(tag)) {\n currentTags.push(context._infoIndex);\n modifyHandler(tag);\n } else if (!tag.getAttribute('data-index') || infoIndex.indexOf(tag.getAttribute('data-index') * 1) < 0) {\n currentTags.push(context._infoIndex);\n tag.removeAttribute('data-index');\n setFileInfo(pluginName, tag, uploadEventHandler, null, resizing);\n } else {\n currentTags.push(tag.getAttribute('data-index') * 1);\n }\n }\n\n for (let i = 0, dataIndex; i < infoList.length; i++) {\n dataIndex = infoList[i].index;\n if (currentTags.indexOf(dataIndex) > -1) continue;\n\n infoList.splice(i, 1);\n if (typeof uploadEventHandler === 'function') uploadEventHandler(null, dataIndex, 'delete', null, 0, this);\n i--;\n }\n\n if (resizing) this.context.resizing._resize_plugin = _resize_plugin;\n },\n\n /**\n * @description Create info object of file and add it to \"_infoList\" (this.context[pluginName]._infoList[])\n * @param {String} pluginName Plugin name \n * @param {Element} element \n * @param {Function|null} uploadEventHandler Event handler to process updated file info (created in setInfo)\n * @param {Object|null} file \n * @param {Boolean} resizing True if the plugin is using a resizing module\n * @example \n * uploadCallBack {.. file = { name: fileList[i].name, size: fileList[i].size };\n * this.plugins.fileManager.setInfo.call(this, 'image', oImg, this.functions.onImageUpload, file, true);\n */\n setInfo: function (pluginName, element, uploadEventHandler, file, resizing) {\n const _resize_plugin = resizing ? this.context.resizing._resize_plugin : '';\n if (resizing) this.context.resizing._resize_plugin = pluginName;\n \n const plguin = this.plugins[pluginName];\n const context = this.context[pluginName];\n const infoList = context._infoList;\n let dataIndex = element.getAttribute('data-index');\n let info = null;\n let state = '';\n\n if (!file) {\n file = {\n 'name': element.getAttribute('data-file-name') || (typeof element.src === 'string' ? element.src.split('/').pop() : ''),\n 'size': element.getAttribute('data-file-size') || 0\n };\n }\n \n // create\n if (!dataIndex || this._componentsInfoInit) {\n state = 'create';\n dataIndex = context._infoIndex++;\n \n element.setAttribute('data-index', dataIndex);\n element.setAttribute('data-file-name', file.name);\n element.setAttribute('data-file-size', file.size);\n \n info = {\n src: element.src,\n index: dataIndex * 1,\n name: file.name,\n size: file.size\n };\n \n infoList.push(info);\n } else { // update\n state = 'update';\n dataIndex *= 1;\n \n for (let i = 0, len = infoList.length; i < len; i++) {\n if (dataIndex === infoList[i].index) {\n info = infoList[i];\n break;\n }\n }\n \n if (!info) {\n dataIndex = context._infoIndex++;\n info = { index: dataIndex };\n infoList.push(info);\n }\n \n info.src = element.src;\n info.name = element.getAttribute(\"data-file-name\");\n info.size = element.getAttribute(\"data-file-size\") * 1;\n }\n \n // method bind\n info.element = element;\n info.delete = plguin.destroy.bind(this, element);\n info.select = function (element) {\n element.scrollIntoView(true);\n this._w.setTimeout(plguin.select.bind(this, element));\n }.bind(this, element);\n \n if (resizing) {\n if (!element.getAttribute('origin-size') && element.naturalWidth) {\n element.setAttribute('origin-size', element.naturalWidth + ',' + element.naturalHeight);\n }\n \n if (!element.getAttribute('data-origin')) {\n const container = this.util.getParentElement(element, this.util.isMediaComponent);\n const cover = this.util.getParentElement(element, 'FIGURE');\n \n const w = this.plugins.resizing._module_getSizeX.call(this, context, element, cover, container);\n const h = this.plugins.resizing._module_getSizeY.call(this, context, element, cover, container);\n element.setAttribute('data-origin', w + ',' + h);\n element.setAttribute('data-size', w + ',' + h);\n }\n \n if (!element.style.width) {\n const size = (element.getAttribute('data-size') || element.getAttribute('data-origin') || '').split(',');\n plguin.onModifyMode.call(this, element, null);\n plguin.applySize.call(this, size[0], size[1]);\n }\n \n this.context.resizing._resize_plugin = _resize_plugin;\n }\n\n if (typeof uploadEventHandler === 'function') uploadEventHandler(element, dataIndex, state, info, --context._uploadFileLength < 0 ? 0 : context._uploadFileLength, this);\n },\n\n /**\n * @description Delete info object at \"_infoList\"\n * @param {String} pluginName Plugin name \n * @param {Number} index index of info object (this.context[pluginName]._infoList[].index)\n * @param {Function|null} uploadEventHandler Event handler to process updated file info (created in setInfo)\n */\n deleteInfo: function (pluginName, index, uploadEventHandler) {\n if (index >= 0) {\n const infoList = this.context[pluginName]._infoList;\n \n for (let i = 0, len = infoList.length; i < len; i++) {\n if (index === infoList[i].index) {\n infoList.splice(i, 1);\n if (typeof uploadEventHandler === 'function') uploadEventHandler(null, index, 'delete', null, 0, this);\n return;\n }\n }\n }\n },\n\n /**\n * @description Reset info object and \"_infoList = []\", \"_infoIndex = 0\"\n * @param {String} pluginName Plugin name \n * @param {Function|null} uploadEventHandler Event handler to process updated file info (created in setInfo)\n */\n resetInfo: function (pluginName, uploadEventHandler) {\n const context = this.context[pluginName];\n\n if (typeof uploadEventHandler === 'function') {\n const infoList = context._infoList;\n for (let i = 0, len = infoList.length; i < len; i++) {\n uploadEventHandler(null, infoList[i].index, 'delete', null, 0, this);\n }\n }\n\n context._infoList = [];\n context._infoIndex = 0;\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_MODULES) {\n Object.defineProperty(window, 'SUNEDITOR_MODULES', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_MODULES, 'fileManager', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: fileManager\n });\n }\n\n return fileManager;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\n(function (global, factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = global.document ?\n factory(global, true) :\n function (w) {\n if (!w.document) {\n throw new Error('SUNEDITOR_MODULES a window with a document');\n }\n return factory(w);\n };\n } else {\n factory(global);\n }\n}(typeof window !== 'undefined' ? window : this, function (window, noGlobal) {\n const resizing = {\n name: 'resizing',\n /**\n * @description Constructor\n * Require context properties when resizing module\n inputX: Element,\n inputY: Element,\n _container: null,\n _cover: null,\n _element: null,\n _element_w: 1,\n _element_h: 1,\n _element_l: 0,\n _element_t: 0,\n _defaultSizeX: 'auto',\n _defaultSizeY: 'auto',\n _origin_w: core.options.imageWidth === 'auto' ? '' : core.options.imageWidth,\n _origin_h: core.options.imageHeight === 'auto' ? '' : core.options.imageHeight,\n _proportionChecked: true,\n // -- select function --\n _resizing: core.options.imageResizing,\n _resizeDotHide: !core.options.imageHeightShow,\n _rotation: core.options.imageRotation,\n _onlyPercentage: core.options.imageSizeOnlyPercentage,\n _ratio: false,\n _ratioX: 1,\n _ratioY: 1\n _captionShow: true,\n // -- when used caption (_captionShow: true) --\n _caption: null,\n _captionChecked: false,\n captionCheckEl: null,\n * @param {Object} core Core object \n */\n add: function (core) {\n const icons = core.icons;\n const context = core.context;\n context.resizing = {\n _resizeClientX: 0,\n _resizeClientY: 0,\n _resize_plugin: '',\n _resize_w: 0,\n _resize_h: 0,\n _origin_w: 0,\n _origin_h: 0,\n _rotateVertical: false,\n _resize_direction: '',\n _move_path: null,\n _isChange: false,\n alignIcons: {\n basic: icons.align_justify,\n left: icons.align_left,\n right: icons.align_right,\n center: icons.align_center\n }\n };\n\n /** resize controller, button */\n let resize_div_container = this.setController_resize(core);\n context.resizing.resizeContainer = resize_div_container;\n\n context.resizing.resizeDiv = resize_div_container.querySelector('.se-modal-resize');\n context.resizing.resizeDot = resize_div_container.querySelector('.se-resize-dot');\n context.resizing.resizeDisplay = resize_div_container.querySelector('.se-resize-display');\n\n let resize_button = this.setController_button(core);\n context.resizing.resizeButton = resize_button;\n\n let resize_handles = context.resizing.resizeHandles = context.resizing.resizeDot.querySelectorAll('span');\n context.resizing.resizeButtonGroup = resize_button.querySelector('._se_resizing_btn_group');\n context.resizing.rotationButtons = resize_button.querySelectorAll('._se_resizing_btn_group ._se_rotation');\n context.resizing.percentageButtons = resize_button.querySelectorAll('._se_resizing_btn_group ._se_percentage');\n\n context.resizing.alignMenu = resize_button.querySelector('.se-resizing-align-list');\n context.resizing.alignMenuList = context.resizing.alignMenu.querySelectorAll('button');\n\n context.resizing.alignButton = resize_button.querySelector('._se_resizing_align_button');\n context.resizing.autoSizeButton = resize_button.querySelector('._se_resizing_btn_group ._se_auto_size');\n context.resizing.captionButton = resize_button.querySelector('._se_resizing_caption_button');\n\n /** add event listeners */\n resize_div_container.addEventListener('mousedown', function (e) { e.preventDefault(); });\n resize_handles[0].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[1].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[2].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[3].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[4].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[5].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[6].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_handles[7].addEventListener('mousedown', this.onMouseDown_resize_handle.bind(core));\n resize_button.addEventListener('click', this.onClick_resizeButton.bind(core));\n\n /** append html */\n context.element.relative.appendChild(resize_div_container);\n context.element.relative.appendChild(resize_button);\n\n /** empty memory */\n resize_div_container = null, resize_button = null, resize_handles = null;\n },\n\n /** resize controller, button (image, iframe, video) */\n setController_resize: function (core) {\n const resize_container = core.util.createElement('DIV');\n\n resize_container.className = 'se-controller se-resizing-container';\n resize_container.style.display = 'none';\n resize_container.innerHTML = '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ';\n\n return resize_container;\n },\n\n setController_button: function (core) {\n const lang = core.lang;\n const icons = core.icons;\n const resize_button = core.util.createElement(\"DIV\");\n\n resize_button.className = \"se-controller se-controller-resizing\";\n resize_button.innerHTML = '' +\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 '' +\n '
    ';\n\n return resize_button;\n },\n\n /**\n * @description Gets the width size\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n * @param {Element} element Target element\n * @param {Element} cover Cover element (FIGURE)\n * @param {Element} container Container element (DIV.se-component)\n * @returns {String}\n */\n _module_getSizeX: function (contextPlugin, element, cover, container) {\n if (!element) element = contextPlugin._element;\n if (!cover) cover = contextPlugin._cover;\n if (!container) container = contextPlugin._container;\n\n if (!element) return '';\n\n return !/%$/.test(element.style.width) ? element.style.width : ((container && this.util.getNumber(container.style.width, 2)) || 100) + '%';\n },\n\n /**\n * @description Gets the height size\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n * @param {Element} element Target element\n * @param {Element} cover Cover element (FIGURE)\n * @param {Element} container Container element (DIV.se-component)\n * @returns {String}\n */\n _module_getSizeY: function (contextPlugin, element, cover, container) {\n if (!element) element = contextPlugin._element;\n if (!cover) cover = contextPlugin._cover;\n if (!container) container = contextPlugin._container;\n\n if (!container || !cover) return (element && element.style.height) || '';\n\n return this.util.getNumber(cover.style.paddingBottom, 0) > 0 && !this.context.resizing._rotateVertical ? cover.style.height : (!/%$/.test(element.style.height) || !/%$/.test(element.style.width) ? element.style.height : ((container && this.util.getNumber(container.style.height, 2)) || 100) + '%');\n },\n\n /**\n * @description Called at the \"openModify\" to put the size of the current target into the size input element.\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n * @param {Object} pluginObj Plugin object\n */\n _module_setModifyInputSize: function (contextPlugin, pluginObj) {\n const percentageRotation = contextPlugin._onlyPercentage && this.context.resizing._rotateVertical;\n contextPlugin.proportion.checked = contextPlugin._proportionChecked = contextPlugin._element.getAttribute('data-proportion') !== 'false';\n\n let x = percentageRotation ? '' : this.plugins.resizing._module_getSizeX.call(this, contextPlugin);\n if (x === contextPlugin._defaultSizeX) x = '';\n if (contextPlugin._onlyPercentage) x = this.util.getNumber(x, 2);\n contextPlugin.inputX.value = x;\n pluginObj.setInputSize.call(this, 'x');\n\n if (!contextPlugin._onlyPercentage) {\n let y = percentageRotation ? '' : this.plugins.resizing._module_getSizeY.call(this, contextPlugin);\n if (y === contextPlugin._defaultSizeY) y = '';\n if (contextPlugin._onlyPercentage) y = this.util.getNumber(y, 2);\n contextPlugin.inputY.value = y;\n }\n\n contextPlugin.inputX.disabled = percentageRotation ? true : false;\n contextPlugin.inputY.disabled = percentageRotation ? true : false;\n contextPlugin.proportion.disabled = percentageRotation ? true : false;\n\n pluginObj.setRatio.call(this);\n },\n\n /**\n * @description It is called in \"setInputSize\" (input tag keyupEvent), \n * checks the value entered in the input tag, \n * calculates the ratio, and sets the calculated value in the input tag of the opposite size.\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n * @param {String} xy 'x': width, 'y': height\n */\n _module_setInputSize: function (contextPlugin, xy) {\n if (contextPlugin._onlyPercentage) {\n if (xy === 'x' && contextPlugin.inputX.value > 100) contextPlugin.inputX.value = 100;\n return;\n }\n\n if (contextPlugin.proportion.checked && contextPlugin._ratio && /\\d/.test(contextPlugin.inputX.value) && /\\d/.test(contextPlugin.inputY.value)) {\n const xUnit = contextPlugin.inputX.value.replace(/\\d+|\\./g, '') || contextPlugin.sizeUnit;\n const yUnit = contextPlugin.inputY.value.replace(/\\d+|\\./g, '') || contextPlugin.sizeUnit;\n\n if (xUnit !== yUnit) return;\n\n const dec = xUnit === '%' ? 2 : 0;\n\n if (xy === 'x') {\n contextPlugin.inputY.value = this.util.getNumber(contextPlugin._ratioY * this.util.getNumber(contextPlugin.inputX.value, dec), dec) + yUnit;\n } else {\n contextPlugin.inputX.value = this.util.getNumber(contextPlugin._ratioX * this.util.getNumber(contextPlugin.inputY.value, dec), dec) + xUnit;\n }\n }\n },\n\n /**\n * @description It is called in \"setRatio\" (input and proportionCheck tags changeEvent), \n * checks the value of the input tag, calculates the ratio, and resets it in the input tag.\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n */\n _module_setRatio: function (contextPlugin) {\n const xValue = contextPlugin.inputX.value;\n const yValue = contextPlugin.inputY.value;\n\n if (contextPlugin.proportion.checked && /\\d+/.test(xValue) && /\\d+/.test(yValue)) {\n const xUnit = xValue.replace(/\\d+|\\./g, '') || contextPlugin.sizeUnit;\n const yUnit = yValue.replace(/\\d+|\\./g, '') || contextPlugin.sizeUnit;\n\n if (xUnit !== yUnit) {\n contextPlugin._ratio = false;\n } else if (!contextPlugin._ratio) {\n const x = this.util.getNumber(xValue, 0);\n const y = this.util.getNumber(yValue, 0);\n\n contextPlugin._ratio = true;\n contextPlugin._ratioX = x / y;\n contextPlugin._ratioY = y / x;\n }\n } else {\n contextPlugin._ratio = false;\n }\n },\n\n /**\n * @description Revert size of element to origin size (plugin._origin_w, plugin._origin_h)\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n */\n _module_sizeRevert: function (contextPlugin) {\n if (contextPlugin._onlyPercentage) {\n contextPlugin.inputX.value = contextPlugin._origin_w > 100 ? 100 : contextPlugin._origin_w;\n } else {\n contextPlugin.inputX.value = contextPlugin._origin_w;\n contextPlugin.inputY.value = contextPlugin._origin_h;\n }\n },\n\n /**\n * @description Save the size data (element.setAttribute(\"data-size\"))\n * Used at the \"setSize\" method\n * @param {Object} contextPlugin context object of plugin (core.context[plugin])\n */\n _module_saveCurrentSize: function (contextPlugin) {\n const x = this.plugins.resizing._module_getSizeX.call(this, contextPlugin);\n const y = this.plugins.resizing._module_getSizeY.call(this, contextPlugin);\n // add too width, height attribute\n contextPlugin._element.setAttribute('width', x.replace('px', ''));\n contextPlugin._element.setAttribute('height', y.replace('px', ''));\n contextPlugin._element.setAttribute('data-size', x + ',' + y);\n if (!!contextPlugin._videoRatio) contextPlugin._videoRatio = y;\n },\n\n /**\n * @description Call the resizing module\n * @param {Element} targetElement Resizing target element\n * @param {string} plugin Plugin name\n * @returns {Object} Size of resizing div {w, h, t, l}\n */\n call_controller_resize: function (targetElement, plugin) {\n const contextResizing = this.context.resizing;\n const contextPlugin = this.context[plugin];\n contextResizing._resize_plugin = plugin;\n\n const resizeContainer = contextResizing.resizeContainer;\n const resizeDiv = contextResizing.resizeDiv;\n const offset = this.util.getOffset(targetElement, this.context.element.wysiwygFrame);\n\n const isVertical = contextResizing._rotateVertical = /^(90|270)$/.test(Math.abs(targetElement.getAttribute('data-rotate')).toString());\n\n const w = isVertical ? targetElement.offsetHeight : targetElement.offsetWidth;\n const h = isVertical ? targetElement.offsetWidth : targetElement.offsetHeight;\n const t = offset.top;\n const l = offset.left - this.context.element.wysiwygFrame.scrollLeft;\n\n resizeContainer.style.top = t + 'px';\n resizeContainer.style.left = l + 'px';\n resizeContainer.style.width = w + 'px';\n resizeContainer.style.height = h + 'px';\n\n resizeDiv.style.top = '0px';\n resizeDiv.style.left = '0px';\n resizeDiv.style.width = w + 'px';\n resizeDiv.style.height = h + 'px';\n\n let align = targetElement.getAttribute('data-align') || 'basic';\n align = align === 'none' ? 'basic' : align;\n\n // text\n const container = this.util.getParentElement(targetElement, this.util.isComponent);\n const cover = this.util.getParentElement(targetElement, 'FIGURE');\n const displayX = this.plugins.resizing._module_getSizeX.call(this, contextPlugin, targetElement, cover, container) || 'auto';\n const displayY = contextPlugin._onlyPercentage && plugin === 'image' ? '' : ', ' + (this.plugins.resizing._module_getSizeY.call(this, contextPlugin, targetElement, cover, container) || 'auto');\n this.util.changeTxt(contextResizing.resizeDisplay, this.lang.dialogBox[align] + ' (' + displayX + displayY + ')');\n\n // resizing display\n contextResizing.resizeButtonGroup.style.display = contextPlugin._resizing ? '' : 'none';\n const resizeDotShow = contextPlugin._resizing && !contextPlugin._resizeDotHide && !contextPlugin._onlyPercentage ? 'flex' : 'none';\n const resizeHandles = contextResizing.resizeHandles;\n for (let i = 0, len = resizeHandles.length; i < len; i++) {\n resizeHandles[i].style.display = resizeDotShow;\n }\n\n if (contextPlugin._resizing) {\n const rotations = contextResizing.rotationButtons;\n rotations[0].style.display = rotations[1].style.display = contextPlugin._rotation ? '' : 'none';\n }\n\n // align icon\n if (contextPlugin._alignHide) {\n contextResizing.alignButton.style.display = 'none';\n } else {\n contextResizing.alignButton.style.display = '';\n const alignList = contextResizing.alignMenuList;\n this.util.changeElement(contextResizing.alignButton.firstElementChild, contextResizing.alignIcons[align]);\n for (let i = 0, len = alignList.length; i < len; i++) {\n if (alignList[i].getAttribute('data-value') === align) this.util.addClass(alignList[i], 'on');\n else this.util.removeClass(alignList[i], 'on');\n }\n }\n\n // percentage active\n const pButtons = contextResizing.percentageButtons;\n const value = /%$/.test(targetElement.style.width) && /%$/.test(container.style.width) ? (this.util.getNumber(container.style.width, 0) / 100) + '' : '' ;\n for (let i = 0, len = pButtons.length; i < len; i++) {\n if (pButtons[i].getAttribute('data-value') === value) {\n this.util.addClass(pButtons[i], 'active');\n } else {\n this.util.removeClass(pButtons[i], 'active');\n }\n }\n\n // caption display, active\n if (!contextPlugin._captionShow) {\n contextResizing.captionButton.style.display = 'none';\n } else {\n contextResizing.captionButton.style.display = '';\n if (this.util.getChildElement(targetElement.parentNode, 'figcaption')) {\n this.util.addClass(contextResizing.captionButton, 'active');\n contextPlugin._captionChecked = true;\n } else {\n this.util.removeClass(contextResizing.captionButton, 'active');\n contextPlugin._captionChecked = false;\n }\n }\n\n resizeContainer.style.display = 'block';\n\n const addOffset = {left: 0, top: 50};\n if (this.options.iframe) {\n addOffset.left -= this.context.element.wysiwygFrame.parentElement.offsetLeft;\n addOffset.top -= this.context.element.wysiwygFrame.parentElement.offsetTop;\n }\n\n this.setControllerPosition(contextResizing.resizeButton, resizeContainer, 'bottom', addOffset);\n const onControlsOff = function () {\n this.util.setDisabledButtons.call(this.util, false, this.resizingDisabledButtons);\n this.history._resetCachingButton();\n };\n this.controllersOn(resizeContainer, contextResizing.resizeButton, onControlsOff.bind(this), targetElement, plugin);\n this.util.setDisabledButtons(true, this.resizingDisabledButtons);\n\n contextResizing._resize_w = w;\n contextResizing._resize_h = h;\n\n const originSize = (targetElement.getAttribute('origin-size') || '').split(',');\n contextResizing._origin_w = originSize[0] || targetElement.naturalWidth;\n contextResizing._origin_h = originSize[1] || targetElement.naturalHeight;\n\n return {\n w: w,\n h: h,\n t: t,\n l: l\n };\n },\n\n _closeAlignMenu: null,\n\n /**\n * @description Open align submenu of module\n */\n openAlignMenu: function () {\n const alignButton = this.context.resizing.alignButton;\n this.util.addClass(alignButton, 'on');\n this.context.resizing.alignMenu.style.top = (alignButton.offsetTop + alignButton.offsetHeight) + 'px';\n this.context.resizing.alignMenu.style.left = (alignButton.offsetLeft - alignButton.offsetWidth / 2) + 'px';\n this.context.resizing.alignMenu.style.display = 'block';\n\n this.plugins.resizing._closeAlignMenu = function () {\n this.util.removeClass(this.context.resizing.alignButton, 'on');\n this.context.resizing.alignMenu.style.display = 'none';\n this.removeDocEvent('click', this.plugins.resizing._closeAlignMenu);\n this.plugins.resizing._closeAlignMenu = null;\n }.bind(this);\n\n this.addDocEvent('click', this.plugins.resizing._closeAlignMenu);\n },\n\n /**\n * @description Click event of resizing toolbar\n * Performs the action of the clicked toolbar button.\n * @param {MouseEvent} e Event object\n */\n onClick_resizeButton: function (e) {\n e.stopPropagation();\n\n const target = e.target;\n const command = target.getAttribute('data-command') || target.parentNode.getAttribute('data-command');\n\n if (!command) return;\n\n const value = target.getAttribute('data-value') || target.parentNode.getAttribute('data-value');\n\n const pluginName = this.context.resizing._resize_plugin;\n const currentContext = this.context[pluginName];\n const contextEl = currentContext._element;\n const currentModule = this.plugins[pluginName];\n\n e.preventDefault();\n\n if (typeof this.plugins.resizing._closeAlignMenu === 'function') {\n this.plugins.resizing._closeAlignMenu();\n if (command === 'onalign') return;\n }\n\n switch (command) {\n case 'auto':\n this.plugins.resizing.resetTransform.call(this, contextEl);\n currentModule.setAutoSize.call(this);\n this.selectComponent(contextEl, pluginName);\n break;\n case 'percent':\n let percentY = this.plugins.resizing._module_getSizeY.call(this, currentContext);\n if (this.context.resizing._rotateVertical) {\n const percentage = contextEl.getAttribute('data-percentage');\n if (percentage) percentY = percentage.split(',')[1];\n }\n\n this.plugins.resizing.resetTransform.call(this, contextEl);\n currentModule.setPercentSize.call(this, (value * 100), (this.util.getNumber(percentY, 0) === null || !/%$/.test(percentY)) ? '' : percentY);\n this.selectComponent(contextEl, pluginName);\n break;\n case 'mirror':\n const r = contextEl.getAttribute('data-rotate') || '0';\n let x = contextEl.getAttribute('data-rotateX') || '';\n let y = contextEl.getAttribute('data-rotateY') || '';\n\n if ((value === 'h' && !this.context.resizing._rotateVertical) || (value === 'v' && this.context.resizing._rotateVertical)) {\n y = y ? '' : '180';\n } else {\n x = x ? '' : '180';\n }\n\n contextEl.setAttribute('data-rotateX', x);\n contextEl.setAttribute('data-rotateY', y);\n\n this.plugins.resizing._setTransForm(contextEl, r, x, y);\n break;\n case 'rotate':\n const contextResizing = this.context.resizing;\n const slope = (contextEl.getAttribute('data-rotate') * 1) + (value * 1);\n const deg = this._w.Math.abs(slope) >= 360 ? 0 : slope;\n\n contextEl.setAttribute('data-rotate', deg);\n contextResizing._rotateVertical = /^(90|270)$/.test(this._w.Math.abs(deg).toString());\n this.plugins.resizing.setTransformSize.call(this, contextEl, null, null);\n\n this.selectComponent(contextEl, pluginName);\n break;\n case 'onalign':\n this.plugins.resizing.openAlignMenu.call(this);\n return;\n case 'align':\n const alignValue = value === 'basic' ? 'none' : value;\n currentModule.setAlign.call(this, alignValue, null, null, null);\n this.selectComponent(contextEl, pluginName);\n break;\n case 'caption':\n const caption = !currentContext._captionChecked;\n currentModule.openModify.call(this, true);\n currentContext._captionChecked = currentContext.captionCheckEl.checked = caption;\n\n currentModule.update_image.call(this, false, false, false);\n\n if (caption) {\n const captionText = this.util.getChildElement(currentContext._caption, function (current) {\n return current.nodeType === 3;\n });\n\n if (!captionText) {\n currentContext._caption.focus();\n } else {\n this.setRange(captionText, 0, captionText, captionText.textContent.length);\n }\n\n this.controllersOff();\n } else {\n this.selectComponent(contextEl, pluginName);\n currentModule.openModify.call(this, true);\n }\n\n break;\n case 'revert':\n currentModule.setOriginSize.call(this);\n this.selectComponent(contextEl, pluginName);\n break;\n case 'update':\n currentModule.openModify.call(this);\n this.controllersOff();\n break;\n case 'delete':\n currentModule.destroy.call(this);\n break;\n }\n\n // history stack\n this.history.push(false);\n },\n\n /**\n * @description Initialize the transform style (rotation) of the element.\n * @param {Element} element Target element\n */\n resetTransform: function (element) {\n const size = (element.getAttribute('data-size') || element.getAttribute('data-origin') || '').split(',');\n this.context.resizing._rotateVertical = false;\n\n element.style.maxWidth = '';\n element.style.transform = '';\n element.style.transformOrigin = '';\n element.setAttribute('data-rotate', '');\n element.setAttribute('data-rotateX', '');\n element.setAttribute('data-rotateY', '');\n\n this.plugins[this.context.resizing._resize_plugin].setSize.call(this, size[0] ? size[0] : 'auto', size[1] ? size[1] : '', true);\n },\n\n /**\n * @description Set the transform style (rotation) of the element.\n * @param {Element} element Target element\n * @param {Number|null} width Element's width size\n * @param {Number|null} height Element's height size\n */\n setTransformSize: function (element, width, height) {\n let percentage = element.getAttribute('data-percentage');\n const isVertical = this.context.resizing._rotateVertical;\n const deg = element.getAttribute('data-rotate') * 1;\n let transOrigin = '';\n\n if (percentage && !isVertical) {\n percentage = percentage.split(',');\n if (percentage[0] === 'auto' && percentage[1] === 'auto') {\n this.plugins[this.context.resizing._resize_plugin].setAutoSize.call(this);\n } else {\n this.plugins[this.context.resizing._resize_plugin].setPercentSize.call(this, percentage[0], percentage[1]);\n }\n } else {\n const cover = this.util.getParentElement(element, 'FIGURE');\n\n const offsetW = width || element.offsetWidth;\n const offsetH = height || element.offsetHeight;\n const w = (isVertical ? offsetH : offsetW) + 'px';\n const h = (isVertical ? offsetW : offsetH) + 'px';\n\n this.plugins[this.context.resizing._resize_plugin].cancelPercentAttr.call(this);\n this.plugins[this.context.resizing._resize_plugin].setSize.call(this, offsetW + 'px', offsetH + 'px', true);\n\n cover.style.width = w;\n cover.style.height = (!!this.context[this.context.resizing._resize_plugin]._caption ? '' : h);\n\n if (isVertical) {\n let transW = (offsetW / 2) + 'px ' + (offsetW / 2) + 'px 0';\n let transH = (offsetH / 2) + 'px ' + (offsetH / 2) + 'px 0';\n transOrigin = deg === 90 || deg === -270 ? transH : transW;\n }\n }\n\n element.style.transformOrigin = transOrigin;\n this.plugins.resizing._setTransForm(element, deg.toString(), element.getAttribute('data-rotateX') || '', element.getAttribute('data-rotateY') || '');\n\n if (isVertical) element.style.maxWidth = 'none';\n else element.style.maxWidth = '';\n\n this.plugins.resizing.setCaptionPosition.call(this, element);\n },\n\n _setTransForm: function (element, r, x, y) {\n let width = (element.offsetWidth - element.offsetHeight) * (/-/.test(r) ? 1 : -1);\n let translate = '';\n\n if (/[1-9]/.test(r) && (x || y)) {\n translate = x ? 'Y' : 'X';\n\n switch (r) {\n case '90':\n translate = x && y ? 'X' : y ? translate : '';\n break;\n case '270':\n width *= -1;\n translate = x && y ? 'Y' : x ? translate : '';\n break;\n case '-90':\n translate = x && y ? 'Y' : x ? translate : '';\n break;\n case '-270':\n width *= -1;\n translate = x && y ? 'X' : y ? translate : '';\n break;\n default:\n translate = '';\n }\n }\n\n if (r % 180 === 0) {\n element.style.maxWidth = '';\n }\n\n element.style.transform = 'rotate(' + r + 'deg)' + (x ? ' rotateX(' + x + 'deg)' : '') + (y ? ' rotateY(' + y + 'deg)' : '') + (translate ? ' translate' + translate + '(' + width + 'px)' : '');\n },\n\n /**\n * @description The position of the caption is set automatically.\n * @param {Element} element Target element (not caption element)\n */\n setCaptionPosition: function (element) {\n const figcaption = this.util.getChildElement(this.util.getParentElement(element, 'FIGURE'), 'FIGCAPTION');\n if (figcaption) {\n figcaption.style.marginTop = (this.context.resizing._rotateVertical ? element.offsetWidth - element.offsetHeight : 0) + 'px';\n }\n },\n\n /**\n * @description Mouse down event of resize handles\n * @param {MouseEvent} e Event object \n */\n onMouseDown_resize_handle: function (e) {\n e.stopPropagation();\n e.preventDefault();\n\n const contextResizing = this.context.resizing;\n const direction = contextResizing._resize_direction = e.target.classList[0];\n\n contextResizing._resizeClientX = e.clientX;\n contextResizing._resizeClientY = e.clientY;\n this.context.element.resizeBackground.style.display = 'block';\n contextResizing.resizeButton.style.display = 'none';\n contextResizing.resizeDiv.style.float = /l/.test(direction) ? 'right' : /r/.test(direction) ? 'left' : 'none';\n\n const closureFunc_bind = function closureFunc(e) {\n if (e.type === 'keydown' && e.keyCode !== 27) return;\n\n const change = contextResizing._isChange;\n contextResizing._isChange = false;\n\n this.removeDocEvent('mousemove', resizing_element_bind);\n this.removeDocEvent('mouseup', closureFunc_bind);\n this.removeDocEvent('keydown', closureFunc_bind);\n\n if (e.type === 'keydown') {\n this.controllersOff();\n this.context.element.resizeBackground.style.display = 'none';\n this.plugins[this.context.resizing._resize_plugin].init.call(this);\n } else {\n // element resize\n this.plugins.resizing.cancel_controller_resize.call(this, direction);\n // history stack\n if (change) this.history.push(false);\n }\n }.bind(this);\n\n const resizing_element_bind = this.plugins.resizing.resizing_element.bind(this, contextResizing, direction, this.context[contextResizing._resize_plugin]);\n this.addDocEvent('mousemove', resizing_element_bind);\n this.addDocEvent('mouseup', closureFunc_bind);\n this.addDocEvent('keydown', closureFunc_bind);\n },\n\n /**\n * @description Mouse move event after call \"onMouseDown_resize_handle\" of resize handles\n * The size of the module's \"div\" is adjusted according to the mouse move event.\n * @param {Object} contextResizing \"core.context.resizing\" object (binding argument)\n * @param {String} direction Direction (\"tl\", \"tr\", \"bl\", \"br\", \"lw\", \"th\", \"rw\", \"bh\") (binding argument)\n * @param {Object} plugin \"core.context[currentPlugin]\" object (binding argument)\n * @param {MouseEvent} e Event object\n */\n resizing_element: function (contextResizing, direction, plugin, e) {\n const clientX = e.clientX;\n const clientY = e.clientY;\n\n let resultW = plugin._element_w;\n let resultH = plugin._element_h;\n\n const w = plugin._element_w + (/r/.test(direction) ? clientX - contextResizing._resizeClientX : contextResizing._resizeClientX - clientX);\n const h = plugin._element_h + (/b/.test(direction) ? clientY - contextResizing._resizeClientY : contextResizing._resizeClientY - clientY);\n const wh = ((plugin._element_h / plugin._element_w) * w);\n\n if (/t/.test(direction)) contextResizing.resizeDiv.style.top = (plugin._element_h - (/h/.test(direction) ? h : wh)) + 'px';\n if (/l/.test(direction)) contextResizing.resizeDiv.style.left = (plugin._element_w - w) + 'px';\n\n if (/r|l/.test(direction)) {\n contextResizing.resizeDiv.style.width = w + 'px';\n resultW = w;\n }\n\n if (/^(t|b)[^h]$/.test(direction)) {\n contextResizing.resizeDiv.style.height = wh + 'px';\n resultH = wh;\n }\n else if (/^(t|b)h$/.test(direction)) {\n contextResizing.resizeDiv.style.height = h + 'px';\n resultH = h;\n }\n\n contextResizing._resize_w = resultW;\n contextResizing._resize_h = resultH;\n this.util.changeTxt(contextResizing.resizeDisplay, this._w.Math.round(resultW) + ' x ' + this._w.Math.round(resultH));\n contextResizing._isChange = true;\n },\n\n /**\n * @description Resize the element to the size of the \"div\" adjusted in the \"resizing_element\" method.\n * Called at the mouse-up event registered in \"onMouseDown_resize_handle\".\n * @param {String} direction Direction (\"tl\", \"tr\", \"bl\", \"br\", \"lw\", \"th\", \"rw\", \"bh\")\n */\n cancel_controller_resize: function (direction) {\n const isVertical = this.context.resizing._rotateVertical;\n this.controllersOff();\n this.context.element.resizeBackground.style.display = 'none';\n\n let w = this._w.Math.round(isVertical ? this.context.resizing._resize_h : this.context.resizing._resize_w);\n let h = this._w.Math.round(isVertical ? this.context.resizing._resize_w : this.context.resizing._resize_h);\n\n if (!isVertical && !/%$/.test(w)) {\n const padding = 16;\n const limit = this.context.element.wysiwygFrame.clientWidth - (padding * 2) - 2;\n\n if (this.util.getNumber(w, 0) > limit) {\n h = this._w.Math.round((h / w) * limit);\n w = limit;\n }\n }\n\n const pluginName = this.context.resizing._resize_plugin;\n this.plugins[pluginName].setSize.call(this, w, h, false, direction);\n if (isVertical) this.plugins.resizing.setTransformSize.call(this, this.context[this.context.resizing._resize_plugin]._element, w, h);\n\n this.selectComponent(this.context[pluginName]._element, pluginName);\n }\n };\n\n if (typeof noGlobal === typeof undefined) {\n if (!window.SUNEDITOR_MODULES) {\n Object.defineProperty(window, 'SUNEDITOR_MODULES', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: {}\n });\n }\n\n Object.defineProperty(window.SUNEDITOR_MODULES, 'resizing', {\n enumerable: true,\n writable: false,\n configurable: false,\n value: resizing\n });\n }\n\n return resizing;\n}));","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2020 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n // rtl icon\n rtl: {\n italic: '',\n indent: '',\n outdent: '',\n list_bullets: '',\n list_number: '',\n link: '',\n unlink: ''\n },\n // common, ltr icon\n redo: '',\n undo: '',\n bold: '',\n underline: '',\n italic: '',\n strike: '',\n subscript: '',\n superscript: '',\n erase: '',\n indent: '',\n outdent: '',\n expansion: '',\n reduction: '',\n code_view: '',\n preview: '',\n print: '',\n template: '',\n line_height: '',\n paragraph_style: '',\n text_style: '',\n save: '',\n blockquote: '',\n arrow_down: '',\n align_justify: '',\n align_left: '',\n align_right: '',\n align_center: '',\n font_color: '',\n highlight_color:'',\n list_bullets: '',\n list_number: '',\n table: '',\n horizontal_rule: '',\n show_blocks: '',\n cancel: '',\n image: '',\n video: '',\n link: '',\n math: '',\n unlink: '',\n table_header: '',\n merge_cell: '',\n split_cell: '',\n caption: '',\n edit: '',\n delete: '',\n modify: '',\n revert: '',\n auto_size: '',\n insert_row_below: '',\n insert_row_above: '',\n insert_column_left: '',\n insert_column_right: '',\n delete_row: '',\n delete_column: '',\n fixed_column_width: '',\n rotate_left: '',\n rotate_right: '',\n mirror_horizontal: '',\n mirror_vertical: '',\n checked: '',\n line_break: '',\n audio: '',\n image_gallery: '',\n bookmark: '',\n download: '',\n dir_ltr: '',\n dir_rtl: '',\n // Error\n alert_outline: '',\n // More icons\n more_text: '',\n more_paragraph: '',\n more_plus: '',\n more_horizontal: '',\n more_vertical: '',\n // Not currently used\n attachment: '',\n map: '',\n magic_stick: '',\n empty_file: ''\n};\n","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\n/**\r\n * @description utility function\r\n */\r\nconst util = {\r\n _d: null,\r\n _w: null,\r\n isIE: null,\r\n isIE_Edge: null,\r\n isOSX_IOS: null,\r\n isChromium: null,\r\n isMobile: null,\r\n isResizeObserverSupported: null,\r\n _propertiesInit: function () {\r\n if (this._d) return;\r\n this._d = document;\r\n this._w = window;\r\n this.isIE = navigator.userAgent.indexOf('Trident') > -1;\r\n this.isIE_Edge = (navigator.userAgent.indexOf('Trident') > -1) || (navigator.appVersion.indexOf('Edge') > -1);\r\n this.isOSX_IOS = /(Mac|iPhone|iPod|iPad)/.test(navigator.platform);\r\n this.isChromium = !!window.chrome;\r\n this.isResizeObserverSupported = (typeof ResizeObserver === 'function');\r\n this.isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\r\n },\r\n\r\n _allowedEmptyNodeList: '.se-component, pre, blockquote, hr, li, table, img, iframe, video, audio, canvas',\r\n\r\n /**\r\n * @description HTML Reserved Word Converter.\r\n * @param {String} contents \r\n * @returns {String} HTML string\r\n * @private\r\n */\r\n _HTMLConvertor: function (contents) {\r\n const ec = {'&': '&', '\\u00A0': ' ', '\\'': ''', '\"': '"', '<': '<', '>': '>'};\r\n return contents.replace(/&|\\u00A0|'|\"|<|>/g, function (m) {\r\n return (typeof ec[m] === 'string') ? ec[m] : m;\r\n });\r\n },\r\n\r\n /**\r\n * @description Unicode Character 'ZERO WIDTH SPACE' (\\u200B)\r\n */\r\n zeroWidthSpace: String.fromCharCode(8203),\r\n\r\n /**\r\n * @description Regular expression to find 'zero width space' (/\\u200B/g)\r\n */\r\n zeroWidthRegExp: new RegExp(String.fromCharCode(8203), 'g'),\r\n\r\n /**\r\n * @description Regular expression to find only 'zero width space' (/^\\u200B+$/)\r\n */\r\n onlyZeroWidthRegExp: new RegExp('^' + String.fromCharCode(8203) + '+$'),\r\n\r\n fontValueMap: {\r\n 'xx-small': 1,\r\n 'x-small': 2,\r\n 'small': 3,\r\n 'medium': 4,\r\n 'large': 5,\r\n 'x-large': 6,\r\n 'xx-large': 7\r\n },\r\n\r\n /**\r\n * @description A method that checks If the text is blank or to see if it contains 'ZERO WIDTH SPACE' or empty (util.zeroWidthSpace)\r\n * @param {String|Node} text String value or Node\r\n * @returns {Boolean}\r\n */\r\n onlyZeroWidthSpace: function (text) {\r\n if (text === null || text === undefined) return false;\r\n if (typeof text !== 'string') text = text.textContent;\r\n return text === '' || this.onlyZeroWidthRegExp.test(text);\r\n },\r\n\r\n /**\r\n * @description Gets XMLHttpRequest object\r\n * @returns {XMLHttpRequest|ActiveXObject}\r\n */\r\n getXMLHttpRequest: function () {\r\n /** IE */\r\n if (this._w.ActiveXObject) {\r\n try {\r\n return new ActiveXObject('Msxml2.XMLHTTP');\r\n } catch (e) {\r\n try {\r\n return new ActiveXObject('Microsoft.XMLHTTP');\r\n } catch (e1) {\r\n return null;\r\n }\r\n }\r\n }\r\n /** netscape */\r\n else if (this._w.XMLHttpRequest) {\r\n return new XMLHttpRequest();\r\n }\r\n /** fail */\r\n else {\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * @description Object.values\r\n * @param {Object|null} obj Object parameter.\r\n * @returns {Array}\r\n */\r\n getValues: function (obj) {\r\n return !obj ? [] : this._w.Object.keys(obj).map(function (i) {\r\n return obj[i];\r\n });\r\n },\r\n\r\n /**\r\n * @description Convert the CamelCase To the KebabCase.\r\n * @param {String|Array} param [Camel string]\r\n * @returns {String|Array}\r\n */\r\n camelToKebabCase: function (param) {\r\n if (typeof param === 'string') {\r\n return param.replace(/[A-Z]/g, function (letter) { return \"-\" + letter.toLowerCase(); });\r\n } else {\r\n return param.map(function(str) { return util.camelToKebabCase(str); });\r\n }\r\n },\r\n\r\n /**\r\n * @description Convert the KebabCase To the CamelCase.\r\n * @param {String|Array} param [KebabCase string]\r\n * @returns {String|Array}\r\n */\r\n kebabToCamelCase: function (param) {\r\n if (typeof param === 'string') {\r\n return param.replace(/-[a-zA-Z]/g, function (letter) { return letter.replace('-', '').toUpperCase(); });\r\n } else {\r\n return param.map(function(str) { return util.camelToKebabCase(str); });\r\n }\r\n },\r\n\r\n /**\r\n * @description Create Element node\r\n * @param {String} elementName Element name\r\n * @returns {Element}\r\n */\r\n createElement: function (elementName) {\r\n return this._d.createElement(elementName);\r\n },\r\n\r\n /**\r\n * @description Create text node\r\n * @param {String} text text contents\r\n * @returns {Node}\r\n */\r\n createTextNode: function (text) {\r\n return this._d.createTextNode(text || '');\r\n },\r\n\r\n /**\r\n * @description The editor checks tags by string.\r\n * If there is \"<\" or \">\" in the attribute of tag, HTML is broken when checking the tag.\r\n * When using an attribute with \"<\" or \">\", use \"HTMLEncoder\" to save. (ex: math(katex))\r\n * @param {String} contents HTML or Text string\r\n * @returns {String}\r\n */\r\n HTMLEncoder: function (contents) {\r\n const ec = {'<': '$lt;', '>': '$gt;'};\r\n return contents.replace(/<|>/g, function (m) {\r\n return (typeof ec[m] === 'string') ? ec[m] : m;\r\n });\r\n },\r\n\r\n /**\r\n * @description The editor checks tags by string.\r\n * If there is \"<\" or \">\" in the attribute of tag, HTML is broken when checking the tag.\r\n * Decoder of data stored as \"HTMLEncoder\" (ex: math(katex))\r\n * @param {String} contents HTML or Text string\r\n * @returns {String}\r\n */\r\n HTMLDecoder: function (contents) {\r\n const ec = {'$lt;': '<', '$gt;': '>'};\r\n return contents.replace(/\\$lt;|\\$gt;/g, function (m) {\r\n return (typeof ec[m] === 'string') ? ec[m] : m;\r\n });\r\n },\r\n\r\n /**\r\n * @description This method run Object.prototype.hasOwnProperty.call(obj, key)\r\n * @param {Object} obj Object\r\n * @param {String} key obj.key\r\n * @returns {Boolean}\r\n */\r\n hasOwn: function (obj, key) {\r\n return this._hasOwn.call(obj, key);\r\n },\r\n _hasOwn: Object.prototype.hasOwnProperty,\r\n\r\n /**\r\n * @deprecated\r\n * @description Get the the tag path of the arguments value\r\n * If not found, return the first found value\r\n * @param {Array} nameArray File name array\r\n * @param {String} extension js, css\r\n * @returns {String}\r\n */\r\n getIncludePath: function (nameArray, extension) {\r\n let path = '';\r\n const pathList = [];\r\n const tagName = extension === 'js' ? 'script' : 'link';\r\n const src = extension === 'js' ? 'src' : 'href';\r\n\r\n let fileName = '(?:';\r\n for (let i = 0, len = nameArray.length; i < len; i++) {\r\n fileName += nameArray[i] + (i < len - 1 ? '|' : ')');\r\n }\r\n\r\n const regExp = new this._w.RegExp('(^|.*[\\\\/])' + fileName + '(\\\\.[^\\\\/]+)?\\.' + extension + '(?:\\\\?.*|;.*)?$', 'i');\r\n const extRegExp = new this._w.RegExp('.+\\\\.' + extension + '(?:\\\\?.*|;.*)?$', 'i');\r\n\r\n for (let c = this._d.getElementsByTagName(tagName), i = 0; i < c.length; i++) {\r\n if (extRegExp.test(c[i][src])) {\r\n pathList.push(c[i]);\r\n }\r\n }\r\n\r\n for (let i = 0; i < pathList.length; i++) {\r\n let editorTag = pathList[i][src].match(regExp);\r\n if (editorTag) {\r\n path = editorTag[0];\r\n break;\r\n }\r\n }\r\n\r\n if (path === '') path = pathList.length > 0 ? pathList[0][src] : '';\r\n\r\n -1 === path.indexOf(':/') && '//' !== path.slice(0, 2) && (path = 0 === path.indexOf('/') ? location.href.match(/^.*?:\\/\\/[^\\/]*/)[0] + path : location.href.match(/^[^\\?]*\\/(?:)/)[0] + path);\r\n\r\n if (!path) throw '[SUNEDITOR.util.getIncludePath.fail] The SUNEDITOR installation path could not be automatically detected. (name: +' + name + ', extension: ' + extension + ')';\r\n\r\n return path;\r\n },\r\n\r\n /**\r\n * @deprecated\r\n * @description Returns the CSS text that has been applied to the current page.\r\n * @param {Document|null} doc To get the CSS text of an document(core._wd). If null get the current document.\r\n * @returns {String} Styles string\r\n */\r\n getPageStyle: function (doc) {\r\n let cssText = '';\r\n const sheets = (doc || this._d).styleSheets;\r\n\r\n for (let i = 0, len = sheets.length, rules; i < len; i++) {\r\n try {\r\n rules = sheets[i].cssRules;\r\n } catch (e) {\r\n continue;\r\n }\r\n\r\n if (rules) {\r\n for (let c = 0, cLen = rules.length; c < cLen; c++) {\r\n cssText += rules[c].cssText;\r\n }\r\n }\r\n }\r\n\r\n return cssText;\r\n },\r\n\r\n /**\r\n * @description Get the argument iframe's document object\r\n * @param {Element} iframe Iframe element (context.element.wysiwygFrame)\r\n * @returns {Document}\r\n */\r\n getIframeDocument: function (iframe) {\r\n let wDocument = iframe.contentWindow || iframe.contentDocument;\r\n if (wDocument.document) wDocument = wDocument.document;\r\n return wDocument;\r\n },\r\n\r\n /**\r\n * @description Get attributes of argument element to string ('class=\"---\" name=\"---\" ')\r\n * @param {Element} element Element object\r\n * @param {Array|null} exceptAttrs Array of attribute names to exclude from the result\r\n * @returns {String}\r\n */\r\n getAttributesToString: function (element, exceptAttrs) {\r\n if (!element.attributes) return '';\r\n\r\n const attrs = element.attributes;\r\n let attrString = '';\r\n\r\n for (let i = 0, len = attrs.length; i < len; i++) {\r\n if (exceptAttrs && exceptAttrs.indexOf(attrs[i].name) > -1) continue;\r\n attrString += attrs[i].name + '=\"' + attrs[i].value + '\" ';\r\n }\r\n\r\n return attrString;\r\n },\r\n\r\n /**\r\n * @descriptionGets Get the length in bytes of a string.\r\n * referencing code: \"https://github.com/shaan1974/myrdin/blob/master/expressions/string.js#L11\"\r\n * @param {String} text String text\r\n * @returns {Number}\r\n */\r\n getByteLength: function(text) {\r\n if (!text || !text.toString) return 0;\r\n text = text.toString();\r\n\r\n const encoder = this._w.encodeURIComponent;\r\n let cr, cl;\r\n if (this.isIE_Edge) {\r\n cl = this._w.unescape(encoder(text)).length;\r\n cr = 0;\r\n\r\n if (encoder(text).match(/(%0A|%0D)/gi) !== null) {\r\n cr = encoder(text).match(/(%0A|%0D)/gi).length;\r\n }\r\n\r\n return cl + cr;\r\n } else {\r\n cl = (new this._w.TextEncoder('utf-8').encode(text)).length;\r\n cr = 0;\r\n\r\n if (encoder(text).match(/(%0A|%0D)/gi) !== null) {\r\n cr = encoder(text).match(/(%0A|%0D)/gi).length;\r\n }\r\n\r\n return cl + cr;\r\n }\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the edit region top div element or iframe's body tag.\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isWysiwygDiv: function (element) {\r\n return element && element.nodeType === 1 && (this.hasClass(element, 'se-wrapper-wysiwyg') || /^BODY$/i.test(element.nodeName));\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the contenteditable property is false.\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isNonEditable: function (element) {\r\n return element && element.nodeType === 1 && element.getAttribute('contenteditable') === 'false';\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is a node related to the text style.\r\n * (strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code)\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isTextStyleElement: function (element) {\r\n return element && element.nodeType !== 3 && /^(strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code|summary)$/i.test(element.nodeName);\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the input element (INPUT, TEXTAREA)\r\n * @param {Node} element The node to check\r\n * @returns \r\n */\r\n isInputElement: function (element) {\r\n return element && element.nodeType === 1 && /^(INPUT|TEXTAREA)$/i.test(element.nodeName);\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the format element (P, DIV, H[1-6], PRE, LI | class=\"__se__format__replace_xxx\")\r\n * Format element also contain \"free format Element\"\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isFormatElement: function (element) {\r\n return element && element.nodeType === 1 && (/^(P|DIV|H[1-6]|PRE|LI|TH|TD|DETAILS)$/i.test(element.nodeName) || this.hasClass(element, '(\\\\s|^)__se__format__replace_.+(\\\\s|$)|(\\\\s|^)__se__format__free_.+(\\\\s|$)')) && !this.isComponent(element) && !this.isWysiwygDiv(element);\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the range format element. (BLOCKQUOTE, OL, UL, FIGCAPTION, TABLE, THEAD, TBODY, TR, TH, TD | class=\"__se__format__range_xxx\")\r\n * Range format element is wrap the \"format element\" and \"component\"\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isRangeFormatElement: function (element) {\r\n return element && element.nodeType === 1 && (/^(BLOCKQUOTE|OL|UL|FIGCAPTION|TABLE|THEAD|TBODY|TR|TH|TD|DETAILS)$/i.test(element.nodeName) || this.hasClass(element, '(\\\\s|^)__se__format__range_.+(\\\\s|$)'));\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the closure range format element. (TH, TD | class=\"__se__format__range__closure_xxx\")\r\n * Closure range format elements is included in the range format element.\r\n * - Closure range format element is wrap the \"format element\" and \"component\"\r\n * ※ You cannot exit this format with the Enter key or Backspace key.\r\n * ※ Use it only in special cases. ([ex] format of table cells)\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isClosureRangeFormatElement: function (element) {\r\n return element && element.nodeType === 1 && (/^(TH|TD)$/i.test(element.nodeName) || this.hasClass(element, '(\\\\s|^)__se__format__range__closure_.+(\\\\s|$)'));\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the free format element. (PRE | class=\"__se__format__free_xxx\")\r\n * Free format elements is included in the format element.\r\n * Free format elements's line break is \"BR\" tag.\r\n * ※ Entering the Enter key in the space on the last line ends \"Free Format\" and appends \"Format\".\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isFreeFormatElement: function (element) {\r\n return element && element.nodeType === 1 && (/^PRE$/i.test(element.nodeName) || this.hasClass(element, '(\\\\s|^)__se__format__free_.+(\\\\s|$)')) && !this.isComponent(element) && !this.isWysiwygDiv(element);\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the closure free format element. (class=\"__se__format__free__closure_xxx\")\r\n * Closure free format elements is included in the free format element.\r\n * - Closure free format elements's line break is \"BR\" tag.\r\n * ※ You cannot exit this format with the Enter key or Backspace key.\r\n * ※ Use it only in special cases. ([ex] format of table cells)\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isClosureFreeFormatElement: function (element) {\r\n return element && element.nodeType === 1 && this.hasClass(element, '(\\\\s|^)__se__format__free__closure_.+(\\\\s|$)');\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the component[img, iframe, video, audio, table] cover(class=\"se-component\") and table, hr\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isComponent: function (element) {\r\n return element && (/se-component/.test(element.className) || /^(TABLE|HR)$/.test(element.nodeName));\r\n },\r\n\r\n /**\r\n * @description Checks for \"__se__uneditable\" in the class list.\r\n * Components with class \"__se__uneditable\" cannot be modified.\r\n * @param {Element} element The element to check\r\n * @returns {Boolean}\r\n */\r\n isUneditableComponent: function (element) {\r\n return element && this.hasClass(element, '__se__uneditable');\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the component [img, iframe] cover(class=\"se-component\")\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isMediaComponent: function (element) {\r\n return element && /se-component/.test(element.className);\r\n },\r\n\r\n /**\r\n * @description It is judged whether it is the not checking node. (class=\"katex\", \"__se__tag\")\r\n * @param {Node} element The node to check\r\n * @returns {Boolean}\r\n */\r\n isNotCheckingNode: function (element) {\r\n return element && /katex|__se__tag/.test(element.className);\r\n },\r\n\r\n /**\r\n * @description If a parent node that contains an argument node finds a format node (util.isFormatElement), it returns that node.\r\n * @param {Node} element Reference node.\r\n * @param {Function|null} validation Additional validation function.\r\n * @returns {Element|null}\r\n */\r\n getFormatElement: function (element, validation) {\r\n if (!element) return null;\r\n if (!validation) {\r\n validation = function () { return true; };\r\n }\r\n\r\n while (element) {\r\n if (this.isWysiwygDiv(element)) return null;\r\n if (this.isRangeFormatElement(element)) element.firstElementChild;\r\n if (this.isFormatElement(element) && validation(element)) return element;\r\n\r\n element = element.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * @description If a parent node that contains an argument node finds a format node (util.isRangeFormatElement), it returns that node.\r\n * @param {Node} element Reference node.\r\n * @param {Function|null} validation Additional validation function.\r\n * @returns {Element|null}\r\n */\r\n getRangeFormatElement: function (element, validation) {\r\n if (!element) return null;\r\n if (!validation) {\r\n validation = function () { return true; };\r\n }\r\n\r\n while (element) {\r\n if (this.isWysiwygDiv(element)) return null;\r\n if (this.isRangeFormatElement(element) && !/^(THEAD|TBODY|TR)$/i.test(element.nodeName) && validation(element)) return element;\r\n element = element.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * @description If a parent node that contains an argument node finds a free format node (util.isFreeFormatElement), it returns that node.\r\n * @param {Node} element Reference node.\r\n * @param {Function|null} validation Additional validation function.\r\n * @returns {Element|null}\r\n */\r\n getFreeFormatElement: function (element, validation) {\r\n if (!element) return null;\r\n if (!validation) {\r\n validation = function () { return true; };\r\n }\r\n\r\n while (element) {\r\n if (this.isWysiwygDiv(element)) return null;\r\n if (this.isFreeFormatElement(element) && validation(element)) return element;\r\n\r\n element = element.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * @description If a parent node that contains an argument node finds a closure free format node (util.isClosureFreeFormatElement), it returns that node.\r\n * @param {Node} element Reference node.\r\n * @param {Function|null} validation Additional validation function.\r\n * @returns {Element|null}\r\n */\r\n getClosureFreeFormatElement: function (element, validation) {\r\n if (!element) return null;\r\n if (!validation) {\r\n validation = function () { return true; };\r\n }\r\n\r\n while (element) {\r\n if (this.isWysiwygDiv(element)) return null;\r\n if (this.isClosureFreeFormatElement(element) && validation(element)) return element;\r\n\r\n element = element.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * @description Add style and className of copyEl to originEl\r\n * @param {Element} originEl Origin element\r\n * @param {Element} copyEl Element to copy\r\n * @param {Array|null} blacklist Blacklist array(LowerCase)\r\n */\r\n copyTagAttributes: function (originEl, copyEl, blacklist) {\r\n if (copyEl.style.cssText) {\r\n const copyStyles = copyEl.style;\r\n for (let i = 0, len = copyStyles.length; i < len; i++) {\r\n originEl.style[copyStyles[i]] = copyStyles[copyStyles[i]];\r\n }\r\n }\r\n\r\n const attrs = copyEl.attributes;\r\n for (let i = 0, len = attrs.length, name; i < len; i++) {\r\n name = attrs[i].name.toLowerCase();\r\n if ((blacklist && blacklist.indexOf(name) > -1) || !attrs[i].value) originEl.removeAttribute(name);\r\n else if (name !== 'style') originEl.setAttribute(attrs[i].name, attrs[i].value);\r\n }\r\n },\r\n\r\n /**\r\n * @description Copy and apply attributes of format tag that should be maintained. (style, class) Ignore \"__se__format__\" class\r\n * @param {Element} originEl Origin element\r\n * @param {Element} copyEl Element to copy\r\n */\r\n copyFormatAttributes: function (originEl, copyEl) {\r\n copyEl = copyEl.cloneNode(false);\r\n copyEl.className = copyEl.className.replace(/(\\s|^)__se__format__[^\\s]+/g, '');\r\n this.copyTagAttributes(originEl, copyEl);\r\n },\r\n\r\n /**\r\n * @description Get the item from the array that matches the condition.\r\n * @param {Array|HTMLCollection|NodeList} array Array to get item\r\n * @param {Function|null} validation Conditional function\r\n * @param {Boolean} multi If true, returns all items that meet the criteria otherwise, returns an empty array.\r\n * If false, returns only one item that meet the criteria otherwise return null.\r\n * @returns {Array|Node|null}\r\n */\r\n getArrayItem: function (array, validation, multi) {\r\n if (!array || array.length === 0) return null;\r\n\r\n validation = validation || function () { return true; };\r\n const arr = [];\r\n\r\n for (let i = 0, len = array.length, a; i < len; i++) {\r\n a = array[i];\r\n if (validation(a)) {\r\n if (!multi) return a;\r\n else arr.push(a);\r\n }\r\n }\r\n\r\n return !multi ? null : arr;\r\n },\r\n\r\n /**\r\n * @description Check if an array contains an element \r\n * @param {Array|HTMLCollection|NodeList} array element array\r\n * @param {Node} element The element to check for\r\n * @returns {Boolean}\r\n */\r\n arrayIncludes: function(array, element) {\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] === element) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * @description Get the index of the argument value in the element array\r\n * @param {Array|HTMLCollection|NodeList} array element array\r\n * @param {Node} element The element to find index\r\n * @returns {Number}\r\n */\r\n getArrayIndex: function (array, element) {\r\n let idx = -1;\r\n for (let i = 0, len = array.length; i < len; i++) {\r\n if (array[i] === element) {\r\n idx = i;\r\n break;\r\n }\r\n }\r\n\r\n return idx;\r\n },\r\n\r\n /**\r\n * @description Get the next index of the argument value in the element array\r\n * @param {Array|HTMLCollection|NodeList} array element array\r\n * @param {Node} item The element to find index\r\n * @returns {Number}\r\n */\r\n nextIdx: function (array, item) {\r\n let idx = this.getArrayIndex(array, item);\r\n if (idx === -1) return -1;\r\n return idx + 1;\r\n },\r\n\r\n /**\r\n * @description Get the previous index of the argument value in the element array\r\n * @param {Array|HTMLCollection|NodeList} array Element array\r\n * @param {Node} item The element to find index\r\n * @returns {Number}\r\n */\r\n prevIdx: function (array, item) {\r\n let idx = this.getArrayIndex(array, item);\r\n if (idx === -1) return -1;\r\n return idx - 1;\r\n },\r\n\r\n /**\r\n * @description Returns the index compared to other sibling nodes.\r\n * @param {Node} node The Node to find index\r\n * @returns {Number}\r\n */\r\n getPositionIndex: function (node) {\r\n let idx = 0;\r\n while ((node = node.previousSibling)) {\r\n idx += 1;\r\n }\r\n return idx;\r\n },\r\n\r\n /**\r\n * @description Returns the position of the \"node\" in the \"parentNode\" in a numerical array.\r\n * ex)

    aabb

    : getNodePath(node: \"bb\", parentNode: \"

    \") -> [1, 0]\r\n * @param {Node} node The Node to find position path\r\n * @param {Node|null} parentNode Parent node. If null, wysiwyg div area\r\n * @param {Object|null} _newOffsets If you send an object of the form \"{s: 0, e: 0}\", the text nodes that are attached together are merged into one, centered on the \"node\" argument.\r\n * \"_newOffsets.s\" stores the length of the combined characters after \"node\" and \"_newOffsets.e\" stores the length of the combined characters before \"node\".\r\n * Do not use unless absolutely necessary.\r\n * @returns {Array}\r\n */\r\n getNodePath: function (node, parentNode, _newOffsets) {\r\n const path = [];\r\n let finds = true;\r\n\r\n this.getParentElement(node, function (el) {\r\n if (el === parentNode) finds = false;\r\n if (finds && !this.isWysiwygDiv(el)) {\r\n // merge text nodes\r\n if (_newOffsets && el.nodeType === 3) {\r\n let temp = null, tempText = null;\r\n _newOffsets.s = _newOffsets.e = 0;\r\n\r\n let previous = el.previousSibling;\r\n while (previous && previous.nodeType === 3) {\r\n tempText = previous.textContent.replace(this.zeroWidthRegExp, '');\r\n _newOffsets.s += tempText.length;\r\n el.textContent = tempText + el.textContent;\r\n temp = previous;\r\n previous = previous.previousSibling;\r\n this.removeItem(temp);\r\n }\r\n\r\n let next = el.nextSibling;\r\n while (next && next.nodeType === 3) {\r\n tempText = next.textContent.replace(this.zeroWidthRegExp, '');\r\n _newOffsets.e += tempText.length;\r\n el.textContent += tempText;\r\n temp = next;\r\n next = next.nextSibling;\r\n this.removeItem(temp);\r\n }\r\n }\r\n\r\n // index push\r\n path.push(el);\r\n }\r\n return false;\r\n }.bind(this));\r\n\r\n return path.map(this.getPositionIndex).reverse();\r\n },\r\n\r\n /**\r\n * @description Returns the node in the location of the path array obtained from \"util.getNodePath\".\r\n * @param {Array} offsets Position array, array obtained from \"util.getNodePath\"\r\n * @param {Node} parentNode Base parent element\r\n * @returns {Node}\r\n */\r\n getNodeFromPath: function (offsets, parentNode) {\r\n let current = parentNode;\r\n let nodes;\r\n\r\n for (let i = 0, len = offsets.length; i < len; i++) {\r\n nodes = current.childNodes;\r\n if (nodes.length === 0) break;\r\n if (nodes.length <= offsets[i]) {\r\n current = nodes[nodes.length - 1];\r\n } else {\r\n current = nodes[offsets[i]];\r\n }\r\n }\r\n\r\n return current;\r\n },\r\n\r\n /**\r\n * @description Compares the style and class for equal values.\r\n * Returns true if both are text nodes.\r\n * @param {Node} a Node to compare\r\n * @param {Node} b Node to compare\r\n * @returns {Boolean}\r\n */\r\n isSameAttributes: function (a, b) {\r\n if (a.nodeType === 3 && b.nodeType === 3) return true;\r\n if (a.nodeType === 3 || b.nodeType === 3) return false;\r\n\r\n const style_a = a.style;\r\n const style_b = b.style;\r\n let compStyle = 0;\r\n\r\n for (let i = 0, len = style_a.length; i < len; i++) {\r\n if (style_a[style_a[i]] === style_b[style_a[i]]) compStyle++;\r\n }\r\n\r\n const class_a = a.classList;\r\n const class_b = b.classList;\r\n const reg = this._w.RegExp;\r\n let compClass = 0;\r\n\r\n for (let i = 0, len = class_a.length; i < len; i++) {\r\n if (reg('(\\s|^)' + class_a[i] + '(\\s|$)').test(class_b.value)) compClass++;\r\n }\r\n\r\n return (compStyle === style_b.length && compStyle === style_a.length) && (compClass === class_b.length && compClass === class_a.length);\r\n },\r\n\r\n /**\r\n * @description Check the line element(util.isFormatElement) is empty.\r\n * @param {Element} element Format element node\r\n * @returns {Boolean}\r\n */\r\n isEmptyLine: function (element) {\r\n return !element || !element.parentNode || (!element.querySelector('IMG, IFRAME, AUDIO, VIDEO, CANVAS, TABLE') && element.children.length === 0 && this.onlyZeroWidthSpace(element.textContent));\r\n },\r\n\r\n /**\r\n * @description Check the span's attributes are empty.\r\n * @param {Element|null} element Element node\r\n * @returns {Boolean}\r\n */\r\n isSpanWithoutAttr: function (element) {\r\n return !!element && element.nodeType === 1 && /^SPAN$/i.test(element.nodeName) && !element.className && !element.style.cssText;\r\n },\r\n\r\n /**\r\n * @description Check the node is a list (ol, ul)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isList: function (node) {\r\n return node && /^(OL|UL)$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n /**\r\n * @description Check the node is a list cell (li)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isListCell: function (node) {\r\n return node && /^LI$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n /**\r\n * @description Check the node is a table (table, thead, tbody, tr, th, td)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isTable: function (node) {\r\n return node && /^(TABLE|THEAD|TBODY|TR|TH|TD)$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n /**\r\n * @description Check the node is a table cell (td, th)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isCell: function (node) {\r\n return node && /^(TD|TH)$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n /**\r\n * @description Check the node is a break node (BR)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isBreak: function (node) {\r\n return node && /^BR$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n\r\n /**\r\n * @description Check the node is a anchor node (A)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isAnchor: function (node) {\r\n return node && /^A$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n /**\r\n * @description Check the node is a media node (img, iframe, audio, video, canvas)\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isMedia: function (node) {\r\n return node && /^(IMG|IFRAME|AUDIO|VIDEO|CANVAS)$/i.test(typeof node === 'string' ? node : node.nodeName);\r\n },\r\n\r\n /**\r\n * @description Check the node is a figure tag or util.isMedia()\r\n * @param {Node|String} node The element or element name to check\r\n * @returns {Boolean}\r\n */\r\n isFigures: function (node) {\r\n return node && (this.isMedia(node) || /^(FIGURE)$/i.test(typeof node === 'string' ? node : node.nodeName));\r\n },\r\n\r\n /**\r\n * @description Checks for numeric (with decimal point).\r\n * @param {String|Number} text Text string or number\r\n * @returns {Boolean}\r\n */\r\n isNumber: function (text) {\r\n return !!text && /^-?\\d+(\\.\\d+)?$/.test(text + '');\r\n },\r\n\r\n /**\r\n * @description Get a number.\r\n * @param {String|Number} text Text string or number\r\n * @param {Number} maxDec Maximum number of decimal places (-1 : Infinity)\r\n * @returns {Number}\r\n */\r\n getNumber: function (text, maxDec) {\r\n if (!text) return 0;\r\n\r\n let number = (text + '').match(/-?\\d+(\\.\\d+)?/);\r\n if (!number || !number[0]) return 0;\r\n\r\n number = number[0];\r\n return maxDec < 0 ? number * 1 : maxDec === 0 ? this._w.Math.round(number * 1) : (number * 1).toFixed(maxDec) * 1;\r\n },\r\n\r\n /**\r\n * @description Get all \"children\" of the argument value element (Without text nodes)\r\n * @param {Element} element element to get child node\r\n * @param {Function|null} validation Conditional function\r\n * @returns {Array}\r\n */\r\n getListChildren: function (element, validation) {\r\n const children = [];\r\n if (!element || !element.children || element.children.length === 0) return children;\r\n\r\n validation = validation || function () { return true; };\r\n\r\n (function recursionFunc(current) {\r\n if (element !== current && validation(current)) {\r\n children.push(current);\r\n }\r\n\r\n if (!!current.children) {\r\n for (let i = 0, len = current.children.length; i < len; i++) {\r\n recursionFunc(current.children[i]);\r\n }\r\n }\r\n })(element);\r\n\r\n return children;\r\n },\r\n\r\n /**\r\n * @description Get all \"childNodes\" of the argument value element (Include text nodes)\r\n * @param {Node} element element to get child node\r\n * @param {Function|null} validation Conditional function\r\n * @returns {Array}\r\n */\r\n getListChildNodes: function (element, validation) {\r\n const children = [];\r\n if (!element || element.childNodes.length === 0) return children;\r\n\r\n validation = validation || function () { return true; };\r\n\r\n (function recursionFunc(current) {\r\n if (element !== current && validation(current)) {\r\n children.push(current);\r\n }\r\n\r\n for (let i = 0, len = current.childNodes.length; i < len; i++) {\r\n recursionFunc(current.childNodes[i]);\r\n }\r\n })(element);\r\n\r\n return children;\r\n },\r\n\r\n /**\r\n * @description Returns the number of parents nodes.\r\n * \"0\" when the parent node is the WYSIWYG area.\r\n * \"-1\" when the element argument is the WYSIWYG area.\r\n * @param {Node} element The element to check\r\n * @returns {Number}\r\n */\r\n getElementDepth: function (element) {\r\n if (!element || this.isWysiwygDiv(element)) return -1;\r\n\r\n let depth = 0;\r\n element = element.parentNode;\r\n\r\n while (element && !this.isWysiwygDiv(element)) {\r\n depth += 1;\r\n element = element.parentNode;\r\n }\r\n\r\n return depth;\r\n },\r\n\r\n /**\r\n * @description Compares two elements to find a common ancestor, and returns the order of the two elements.\r\n * @param {Node} a Node to compare.\r\n * @param {Node} b Node to compare.\r\n * @returns {Object} { ancesstor, a, b, result: (a > b ? 1 : a < b ? -1 : 0) };\r\n */\r\n compareElements: function (a, b) {\r\n let aNode = a, bNode = b;\r\n while (aNode && bNode && aNode.parentNode !== bNode.parentNode) {\r\n aNode = aNode.parentNode;\r\n bNode = bNode.parentNode;\r\n }\r\n\r\n if (!aNode || !bNode) return { ancestor: null, a: a, b: b, result: 0 };\r\n\r\n const children = aNode.parentNode.childNodes;\r\n const aIndex = this.getArrayIndex(children, aNode);\r\n const bIndex = this.getArrayIndex(children, bNode);\r\n\r\n return {\r\n ancestor: aNode.parentNode,\r\n a: aNode,\r\n b: bNode,\r\n result: aIndex > bIndex ? 1 : aIndex < bIndex ? -1 : 0\r\n };\r\n },\r\n\r\n /**\r\n * @description Get the parent element of the argument value.\r\n * A tag that satisfies the query condition is imported.\r\n * Returns null if not found.\r\n * @param {Node} element Reference element\r\n * @param {String|Function} query Query String (nodeName, .className, #ID, :name) or validation function.\r\n * Not use it like jquery.\r\n * Only one condition can be entered at a time.\r\n * @returns {Element|null}\r\n */\r\n getParentElement: function (element, query) {\r\n let check;\r\n\r\n if (typeof query === 'function') {\r\n check = query;\r\n } else {\r\n let attr;\r\n if (/^\\./.test(query)) {\r\n attr = 'className';\r\n query = query.split('.')[1];\r\n } else if (/^#/.test(query)) {\r\n attr = 'id';\r\n query = '^' + query.split('#')[1] + '$';\r\n } else if (/^:/.test(query)) {\r\n attr = 'name';\r\n query = '^' + query.split(':')[1] + '$';\r\n } else {\r\n attr = 'nodeName';\r\n query = '^' + query + '$';\r\n }\r\n\r\n const regExp = new this._w.RegExp(query, 'i');\r\n check = function (el) {\r\n return regExp.test(el[attr]);\r\n };\r\n }\r\n\r\n while (element && !check(element)) {\r\n if (this.isWysiwygDiv(element)) {\r\n return null;\r\n }\r\n element = element.parentNode;\r\n }\r\n\r\n return element;\r\n },\r\n\r\n /**\r\n * @description Gets the previous sibling last child. If there is no sibling, then it'll take it from the closest ancestor with child\r\n * Returns null if not found.\r\n * @param {Node} node Reference element\r\n * @param {Node|null} ceiling Highest boundary allowed\r\n * @returns {Node|null}\r\n */\r\n getPreviousDeepestNode: function (node, ceiling) {\r\n let previousNode = node.previousSibling;\r\n if (!previousNode) {\r\n for (let parentNode = node.parentNode; parentNode; parentNode = parentNode.parentNode) {\r\n if (parentNode === ceiling) return null;\r\n if (parentNode.previousSibling) {\r\n previousNode = parentNode.previousSibling;\r\n break;\r\n }\r\n }\r\n if (!previousNode) return null;\r\n }\r\n while (previousNode.lastChild) previousNode = previousNode.lastChild;\r\n\r\n return previousNode;\r\n },\r\n\r\n /**\r\n * @description Gets the next sibling first child. If there is no sibling, then it'll take it from the closest ancestor with child\r\n * Returns null if not found.\r\n * @param {Node} node Reference element\r\n * @param {Node|null} ceiling Highest boundary allowed\r\n * @returns {Node|null}\r\n */\r\n getNextDeepestNode: function (node, ceiling) {\r\n let nextNode = node.nextSibling;\r\n if (!nextNode) {\r\n for (let parentNode = node.parentNode; parentNode; parentNode = parentNode.parentNode) {\r\n if (parentNode === ceiling) return null;\r\n if (parentNode.nextSibling) {\r\n nextNode = parentNode.nextSibling;\r\n break;\r\n }\r\n }\r\n if (!nextNode) return null;\r\n }\r\n while (nextNode.firstChild) nextNode = nextNode.firstChild;\r\n\r\n return nextNode;\r\n },\r\n\r\n /**\r\n * @description Get the child element of the argument value.\r\n * A tag that satisfies the query condition is imported.\r\n * Returns null if not found.\r\n * @param {Node} element Reference element\r\n * @param {String|Function} query Query String (nodeName, .className, #ID, :name) or validation function.\r\n * @param {Boolean} last If true returns the last node among the found child nodes. (default: first node)\r\n * Not use it like jquery.\r\n * Only one condition can be entered at a time.\r\n * @returns {Element|null}\r\n */\r\n getChildElement: function (element, query, last) {\r\n let check;\r\n\r\n if (typeof query === 'function') {\r\n check = query;\r\n } else {\r\n let attr;\r\n if (/^\\./.test(query)) {\r\n attr = 'className';\r\n query = query.split('.')[1];\r\n } else if (/^#/.test(query)) {\r\n attr = 'id';\r\n query = '^' + query.split('#')[1] + '$';\r\n } else if (/^:/.test(query)) {\r\n attr = 'name';\r\n query = '^' + query.split(':')[1] + '$';\r\n } else {\r\n attr = 'nodeName';\r\n query = '^' + (query === 'text' ? '#' + query : query) + '$';\r\n }\r\n\r\n const regExp = new this._w.RegExp(query, 'i');\r\n check = function (el) {\r\n return regExp.test(el[attr]);\r\n };\r\n }\r\n\r\n const childList = this.getListChildNodes(element, function (current) {\r\n return check(current);\r\n });\r\n\r\n return childList[last ? childList.length - 1 : 0];\r\n },\r\n\r\n /**\r\n * @description 1. The first node of all the child nodes of the \"first\" element is returned.\r\n * 2. The last node of all the child nodes of the \"last\" element is returned.\r\n * 3. When there is no \"last\" element, the first and last nodes of all the children of the \"first\" element are returned.\r\n * { sc: \"first\", ec: \"last\" }\r\n * @param {Node} first First element\r\n * @param {Node|null} last Last element\r\n * @returns {Object}\r\n */\r\n getEdgeChildNodes: function (first, last) {\r\n if (!first) return;\r\n if (!last) last = first;\r\n\r\n while (first && first.nodeType === 1 && first.childNodes.length > 0 && !this.isBreak(first)) first = first.firstChild;\r\n while (last && last.nodeType === 1 && last.childNodes.length > 0 && !this.isBreak(last)) last = last.lastChild;\r\n\r\n return {\r\n sc: first,\r\n ec: last || first\r\n };\r\n },\r\n\r\n /**\r\n * @description Returns the position of the left and top of argument. {left:0, top:0}\r\n * @param {Node} element Target node\r\n * @param {Element|null} wysiwygFrame When use iframe option, iframe object should be sent (context.element.wysiwygFrame)\r\n * @returns {Object}\r\n */\r\n getOffset: function (element, wysiwygFrame) {\r\n let offsetLeft = 0;\r\n let offsetTop = 0;\r\n let offsetElement = element.nodeType === 3 ? element.parentElement : element;\r\n const wysiwyg = this.getParentElement(element, this.isWysiwygDiv.bind(this));\r\n\r\n while (offsetElement && !this.hasClass(offsetElement, 'se-container') && offsetElement !== wysiwyg) {\r\n offsetLeft += offsetElement.offsetLeft;\r\n offsetTop += offsetElement.offsetTop;\r\n offsetElement = offsetElement.offsetParent;\r\n }\r\n\r\n const iframe = wysiwygFrame && /iframe/i.test(wysiwygFrame.nodeName);\r\n\r\n return {\r\n left: offsetLeft + (iframe ? wysiwygFrame.parentElement.offsetLeft : 0),\r\n top: (offsetTop - (wysiwyg ? wysiwyg.scrollTop : 0)) + (iframe ? wysiwygFrame.parentElement.offsetTop : 0)\r\n };\r\n },\r\n\r\n /**\r\n * @description It compares the start and end indexes of \"a\" and \"b\" and returns the number of overlapping indexes in the range.\r\n * ex) 1, 5, 4, 6 => \"2\" (4 ~ 5)\r\n * @param {Number} aStart Start index of \"a\"\r\n * @param {Number} aEnd End index of \"a\"\r\n * @param {Number} bStart Start index of \"b\"\r\n * @param {Number} bEnd Start index of \"b\"\r\n * @returns {Number}\r\n */\r\n getOverlapRangeAtIndex: function (aStart, aEnd, bStart, bEnd) {\r\n if (aStart <= bEnd ? aEnd < bStart : aEnd > bStart) return 0;\r\n\r\n const overlap = (aStart > bStart ? aStart : bStart) - (aEnd < bEnd ? aEnd : bEnd);\r\n return (overlap < 0 ? overlap * -1 : overlap) + 1;\r\n },\r\n\r\n /**\r\n * @description Set the text content value of the argument value element\r\n * @param {Node} element Element to replace text content\r\n * @param {String} txt Text to be applied\r\n */\r\n changeTxt: function (element, txt) {\r\n if (!element || !txt) return;\r\n element.textContent = txt;\r\n },\r\n\r\n /**\r\n * @description Replace element\r\n * @param {Element} element Target element\r\n * @param {String|Element} newElement String or element of the new element to apply\r\n */\r\n changeElement: function (element, newElement) {\r\n if (typeof newElement === 'string') {\r\n if (element.outerHTML) {\r\n element.outerHTML = newElement;\r\n } else {\r\n const doc = this.createElement('DIV');\r\n doc.innerHTML = newElement;\r\n newElement = doc.firstChild;\r\n element.parentNode.replaceChild(newElement, element);\r\n }\r\n } else if (newElement.nodeType === 1) {\r\n element.parentNode.replaceChild(newElement, element);\r\n }\r\n },\r\n\r\n /**\r\n * @description Set style, if all styles are deleted, the style properties are deleted.\r\n * @param {Element} element Element to set style\r\n * @param {String} styleName Style attribute name (marginLeft, textAlign...)\r\n * @param {String|Number} value Style value\r\n */\r\n setStyle: function (element, styleName, value) {\r\n element.style[styleName] = value;\r\n\r\n if (!value && !element.style.cssText) {\r\n element.removeAttribute('style');\r\n }\r\n },\r\n\r\n /**\r\n * @description Determine whether any of the matched elements are assigned the given class\r\n * @param {Element} element Elements to search class name\r\n * @param {String} className Class name to search for\r\n * @returns {Boolean}\r\n */\r\n hasClass: function (element, className) {\r\n if (!element) return;\r\n\r\n return (new this._w.RegExp(className)).test(element.className);\r\n },\r\n\r\n /**\r\n * @description Append the className value of the argument value element\r\n * @param {Element} element Elements to add class name\r\n * @param {String} className Class name to be add\r\n */\r\n addClass: function (element, className) {\r\n if (!element) return;\r\n\r\n const check = new this._w.RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n if (check.test(element.className)) return;\r\n\r\n element.className += (element.className.length > 0 ? ' ' : '') + className;\r\n },\r\n\r\n /**\r\n * @description Delete the className value of the argument value element\r\n * @param {Element} element Elements to remove class name\r\n * @param {String} className Class name to be remove\r\n */\r\n removeClass: function (element, className) {\r\n if (!element) return;\r\n\r\n const check = new this._w.RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n element.className = element.className.replace(check, ' ').trim();\r\n\r\n if (!element.className.trim()) element.removeAttribute('class');\r\n },\r\n\r\n /**\r\n * @description Argument value If there is no class name, insert it and delete the class name if it exists\r\n * @param {Element} element Elements to replace class name\r\n * @param {String} className Class name to be change\r\n * @returns {Boolean|undefined}\r\n */\r\n toggleClass: function (element, className) {\r\n if (!element) return;\r\n let result = false;\r\n\r\n const check = new this._w.RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n if (check.test(element.className)) {\r\n element.className = element.className.replace(check, ' ').trim();\r\n } else {\r\n element.className += ' ' + className;\r\n result = true;\r\n }\r\n\r\n if (!element.className.trim()) element.removeAttribute('class');\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * @description Checks if element can't be easily enabled\r\n * @param {Element} element Element to check for\r\n */\r\n isImportantDisabled: function (element) {\r\n return element.hasAttribute('data-important-disabled');\r\n },\r\n\r\n /**\r\n * @description In the predefined code view mode, the buttons except the executable button are changed to the 'disabled' state.\r\n * core.codeViewDisabledButtons (An array of buttons whose class name is not \"se-code-view-enabled\")\r\n * core.resizingDisabledButtons (An array of buttons whose class name is not \"se-resizing-enabled\")\r\n * @param {Boolean} disabled Disabled value\r\n * @param {Array|HTMLCollection|NodeList} buttonList Button array\r\n * @param {Boolean} important If priveleged mode should be used (Necessary to switch importantDisabled buttons)\r\n */\r\n setDisabledButtons: function (disabled, buttonList, important) {\r\n for (let i = 0, len = buttonList.length; i < len; i++) {\r\n let button = buttonList[i];\r\n if (important || !this.isImportantDisabled(button)) button.disabled = disabled;\r\n if (important) {\r\n if (disabled) {\r\n button.setAttribute('data-important-disabled', '');\r\n } else {\r\n button.removeAttribute('data-important-disabled');\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description Delete argumenu value element\r\n * @param {Node} item Node to be remove\r\n */\r\n removeItem: function (item) {\r\n if (!item) return;\r\n\r\n if(typeof item.remove === 'function') item.remove();\r\n else if (item.parentNode) item.parentNode.removeChild(item);\r\n },\r\n\r\n /**\r\n * @description Delete all parent nodes that match the condition.\r\n * Returns an {sc: previousSibling, ec: nextSibling}(the deleted node reference) or null.\r\n * @param {Node} item Node to be remove\r\n * @param {Function|null} validation Validation function. default(Deleted if it only have breakLine and blanks)\r\n * @param {Element|null} stopParent Stop when the parent node reaches stopParent\r\n * @returns {Object|null} {sc: previousSibling, ec: nextSibling}\r\n */\r\n removeItemAllParents: function (item, validation, stopParent) {\r\n if (!item) return null;\r\n let cc = null;\r\n if (!validation) {\r\n validation = function (current) {\r\n if (current === stopParent || this.isComponent(current)) return false;\r\n const text = current.textContent.trim();\r\n return text.length === 0 || /^(\\n|\\u200B)+$/.test(text);\r\n }.bind(this);\r\n }\r\n\r\n (function recursionFunc (element) {\r\n if (!util.isWysiwygDiv(element)) {\r\n const parent = element.parentNode;\r\n if (parent && validation(element)) {\r\n cc = {\r\n sc: element.previousElementSibling,\r\n ec: element.nextElementSibling\r\n };\r\n util.removeItem(element);\r\n recursionFunc(parent);\r\n }\r\n }\r\n }(item));\r\n\r\n return cc;\r\n },\r\n\r\n /**\r\n * @description Detach Nested all nested lists under the \"baseNode\".\r\n * Returns a list with nested removed.\r\n * @param {Node} baseNode Element on which to base.\r\n * @param {Boolean} all If true, it also detach all nested lists of a returned list.\r\n * @returns {Element}\r\n */\r\n detachNestedList: function (baseNode, all) {\r\n const rNode = this._deleteNestedList(baseNode);\r\n let rangeElement, cNodes;\r\n\r\n if (rNode) {\r\n rangeElement = rNode.cloneNode(false);\r\n cNodes = rNode.childNodes;\r\n const index = this.getPositionIndex(baseNode);\r\n while (cNodes[index]) {\r\n rangeElement.appendChild(cNodes[index]);\r\n }\r\n } else {\r\n rangeElement = baseNode;\r\n }\r\n\r\n let rChildren;\r\n if (!all) {\r\n const depth = this.getElementDepth(baseNode) + 2;\r\n rChildren = this.getListChildren(baseNode, function (current) { return this.isListCell(current) && !current.previousElementSibling && this.getElementDepth(current) === depth; }.bind(this));\r\n } else {\r\n rChildren = this.getListChildren(rangeElement, function (current) { return this.isListCell(current) && !current.previousElementSibling; }.bind(this));\r\n }\r\n\r\n for (let i = 0, len = rChildren.length; i < len; i++) {\r\n this._deleteNestedList(rChildren[i]);\r\n }\r\n\r\n if (rNode) {\r\n rNode.parentNode.insertBefore(rangeElement, rNode.nextSibling);\r\n if (cNodes && cNodes.length === 0) this.removeItem(rNode);\r\n }\r\n\r\n return rangeElement === baseNode ? rangeElement.parentNode : rangeElement;\r\n },\r\n\r\n /**\r\n * @description Sub function of util.detachNestedList method.\r\n * @private\r\n */\r\n _deleteNestedList: function (baseNode) {\r\n const baseParent = baseNode.parentNode;\r\n let sibling = baseParent;\r\n let parent = sibling.parentNode;\r\n let liSibling, liParent, child, index, c;\r\n\r\n while (this.isListCell(parent)) {\r\n index = this.getPositionIndex(baseNode);\r\n liSibling = parent.nextElementSibling;\r\n liParent = parent.parentNode;\r\n child = sibling;\r\n while(child) {\r\n sibling = sibling.nextSibling;\r\n if (this.isList(child)) {\r\n c = child.childNodes;\r\n while (c[index]) {\r\n liParent.insertBefore(c[index], liSibling);\r\n }\r\n if (c.length === 0) this.removeItem(child);\r\n } else {\r\n liParent.appendChild(child);\r\n }\r\n child = sibling;\r\n }\r\n sibling = liParent;\r\n parent = liParent.parentNode;\r\n }\r\n\r\n if (baseParent.children.length === 0) this.removeItem(baseParent);\r\n\r\n return liParent;\r\n },\r\n\r\n /**\r\n * @description Split all tags based on \"baseNode\"\r\n * Returns the last element of the splited tag.\r\n * @param {Node} baseNode Element or text node on which to base\r\n * @param {Number|Node|null} offset Text offset of \"baseNode\" (Only valid when \"baseNode\" is a text node)\r\n * @param {Number} depth The nesting depth of the element being split. (default: 0)\r\n * @returns {Element}\r\n */\r\n splitElement: function (baseNode, offset, depth) {\r\n if (this.isWysiwygDiv(baseNode)) return baseNode;\r\n\r\n if (offset && !this.isNumber(offset)) {\r\n const children = baseNode.childNodes;\r\n let index = this.getPositionIndex(offset);\r\n const prev = baseNode.cloneNode(false);\r\n const next = baseNode.cloneNode(false);\r\n for (let i = 0, len = children.length; i < len; i++) {\r\n if (i < index) prev.appendChild(children[i]);\r\n else if (i > index) next.appendChild(children[i]);\r\n else continue;\r\n i--;\r\n len--;\r\n index--;\r\n }\r\n\r\n if (prev.childNodes.length > 0) baseNode.parentNode.insertBefore(prev, baseNode);\r\n if (next.childNodes.length > 0) baseNode.parentNode.insertBefore(next, baseNode.nextElementSibling);\r\n\r\n return baseNode;\r\n }\r\n\r\n const bp = baseNode.parentNode;\r\n let index = 0;\r\n let suffixIndex = 1;\r\n let next = true;\r\n let newEl, children, temp;\r\n if (!depth || depth < 0) depth = 0;\r\n\r\n if (baseNode.nodeType === 3) {\r\n index = this.getPositionIndex(baseNode);\r\n if (offset >= 0 && baseNode.length !== offset) {\r\n baseNode.splitText(offset);\r\n const after = this.getNodeFromPath([index + 1], bp);\r\n if (this.onlyZeroWidthSpace(after)) after.data = this.zeroWidthSpace;\r\n }\r\n } else if (baseNode.nodeType === 1) {\r\n if (offset === 0) {\r\n while (baseNode.firstChild) {\r\n baseNode = baseNode.firstChild;\r\n }\r\n if (baseNode.nodeType === 3) {\r\n const after = this.createTextNode(this.zeroWidthSpace);\r\n baseNode.parentNode.insertBefore(after, baseNode);\r\n baseNode = after;\r\n }\r\n }\r\n if (!baseNode.previousSibling) {\r\n if (this.getElementDepth(baseNode) === depth) next = false;\r\n } else {\r\n baseNode = baseNode.previousSibling;\r\n }\r\n }\r\n\r\n if (baseNode.nodeType === 1) suffixIndex = 0;\r\n let depthEl = baseNode;\r\n while (this.getElementDepth(depthEl) > depth) {\r\n index = this.getPositionIndex(depthEl) + suffixIndex;\r\n depthEl = depthEl.parentNode;\r\n\r\n temp = newEl;\r\n newEl = depthEl.cloneNode(false);\r\n children = depthEl.childNodes;\r\n\r\n if (temp) {\r\n if (this.isListCell(newEl) && this.isList(temp) && temp.firstElementChild) {\r\n newEl.innerHTML = temp.firstElementChild.innerHTML;\r\n util.removeItem(temp.firstElementChild);\r\n if (temp.children.length > 0) newEl.appendChild(temp);\r\n } else {\r\n newEl.appendChild(temp);\r\n }\r\n }\r\n\r\n while (children[index]) {\r\n newEl.appendChild(children[index]);\r\n }\r\n }\r\n\r\n if (depthEl.childNodes.length <= 1 && (!depthEl.firstChild || depthEl.firstChild.textContent.length === 0)) depthEl.innerHTML = '
    ';\r\n\r\n const pElement = depthEl.parentNode;\r\n if (next) depthEl = depthEl.nextSibling;\r\n if (!newEl) return depthEl;\r\n\r\n this.mergeSameTags(newEl, null, false);\r\n this.mergeNestedTags(newEl, function (current) { return this.isList(current); }.bind(this));\r\n\r\n if (newEl.childNodes.length > 0) pElement.insertBefore(newEl, depthEl);\r\n else newEl = depthEl;\r\n\r\n if (this.isListCell(newEl) && newEl.children && this.isList(newEl.children[0])) {\r\n newEl.insertBefore(this.createElement('BR'), newEl.children[0]);\r\n }\r\n\r\n if (bp.childNodes.length === 0) this.removeItem(bp);\r\n\r\n return newEl;\r\n },\r\n\r\n /**\r\n * @description Use with \"npdePath (util.getNodePath)\" to merge the same attributes and tags if they are present and modify the nodepath.\r\n * If \"offset\" has been changed, it will return as much \"offset\" as it has been modified.\r\n * An array containing change offsets is returned in the order of the \"nodePathArray\" array.\r\n * @param {Element} element Element\r\n * @param {Array|null} nodePathArray Array of NodePath object ([util.getNodePath(), ..])\r\n * @param {Boolean} onlyText If true, non-text nodes(!util._isIgnoreNodeChange) like 'span', 'strong'.. are ignored.\r\n * @returns {Array} [offset, ..]\r\n */\r\n mergeSameTags: function (element, nodePathArray, onlyText) {\r\n const inst = this;\r\n const nodePathLen = nodePathArray ? nodePathArray.length : 0;\r\n let offsets = null;\r\n\r\n if (nodePathLen) {\r\n offsets = this._w.Array.apply(null, new this._w.Array(nodePathLen)).map(this._w.Number.prototype.valueOf, 0);\r\n }\r\n\r\n (function recursionFunc(current, depth, depthIndex) {\r\n const children = current.childNodes;\r\n\r\n for (let i = 0, len = children.length, child, next; i < len; i++) {\r\n child = children[i];\r\n next = children[i + 1];\r\n if (!child) break;\r\n if((onlyText && inst._isIgnoreNodeChange(child)) || (!onlyText && (inst.isTable(child) || inst.isListCell(child) || (inst.isFormatElement(child) && !inst.isFreeFormatElement(child))))) {\r\n if (inst.isTable(child) || inst.isListCell(child)) {\r\n recursionFunc(child, depth + 1, i);\r\n }\r\n continue;\r\n }\r\n if (len === 1 && current.nodeName === child.nodeName && current.parentNode) {\r\n // update nodePath\r\n if (nodePathLen) {\r\n let path, c, p, cDepth, spliceDepth;\r\n for (let n = 0; n < nodePathLen; n++) {\r\n path = nodePathArray[n];\r\n if (path && path[depth] === i) {\r\n c = child, p = current, cDepth = depth, spliceDepth = true;\r\n while (cDepth >= 0) {\r\n if (inst.getArrayIndex(p.childNodes, c) !== path[cDepth]) {\r\n spliceDepth = false;\r\n break;\r\n }\r\n c = child.parentNode;\r\n p = c.parentNode;\r\n cDepth--;\r\n }\r\n if (spliceDepth) {\r\n path.splice(depth, 1);\r\n path[depth] = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // merge tag\r\n inst.copyTagAttributes(child, current);\r\n current.parentNode.insertBefore(child, current);\r\n inst.removeItem(current);\r\n }\r\n if (!next) {\r\n if (child.nodeType === 1) recursionFunc(child, depth + 1, i);\r\n break;\r\n }\r\n\r\n if (child.nodeName === next.nodeName && inst.isSameAttributes(child, next) && child.href === next.href) {\r\n const childs = child.childNodes;\r\n let childLength = 0;\r\n for (let n = 0, nLen = childs.length; n < nLen; n++) {\r\n if (childs[n].textContent.length > 0) childLength++;\r\n }\r\n\r\n const l = child.lastChild;\r\n const r = next.firstChild;\r\n let addOffset = 0;\r\n if (l && r) {\r\n const textOffset = l.nodeType === 3 && r.nodeType === 3;\r\n addOffset = l.textContent.length;\r\n let tempL = l.previousSibling;\r\n while(tempL && tempL.nodeType === 3) {\r\n addOffset += tempL.textContent.length;\r\n tempL = tempL.previousSibling;\r\n }\r\n\r\n if (childLength > 0 && l.nodeType === 3 && r.nodeType === 3 && (l.textContent.length > 0 || r.textContent.length > 0)) childLength--;\r\n\r\n if (nodePathLen) {\r\n let path = null;\r\n for (let n = 0; n < nodePathLen; n++) {\r\n path = nodePathArray[n];\r\n if (path && path[depth] > i) {\r\n if (depth > 0 && path[depth - 1] !== depthIndex) continue;\r\n\r\n path[depth] -= 1;\r\n if (path[depth + 1] >= 0 && path[depth] === i) {\r\n path[depth + 1] += childLength;\r\n if (textOffset) {\r\n if (l && l.nodeType === 3 && r && r.nodeType === 3) {\r\n offsets[n] += addOffset;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (child.nodeType === 3) {\r\n addOffset = child.textContent.length;\r\n child.textContent += next.textContent;\r\n if (nodePathLen) {\r\n let path = null;\r\n for (let n = 0; n < nodePathLen; n++) {\r\n path = nodePathArray[n];\r\n if (path && path[depth] > i) {\r\n if (depth > 0 && path[depth - 1] !== depthIndex) continue;\r\n\r\n path[depth] -= 1;\r\n if (path[depth + 1] >= 0 && path[depth] === i) {\r\n path[depth + 1] += childLength;\r\n offsets[n] += addOffset;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n child.innerHTML += next.innerHTML;\r\n }\r\n\r\n inst.removeItem(next);\r\n i--;\r\n } else if (child.nodeType === 1) {\r\n recursionFunc(child, depth + 1, i);\r\n }\r\n }\r\n })(element, 0, 0);\r\n\r\n return offsets;\r\n },\r\n\r\n /**\r\n * @description Remove nested tags without other child nodes.\r\n * @param {Element} element Element object\r\n * @param {Function|String|null} validation Validation function / String(\"tag1|tag2..\") / If null, all tags are applicable.\r\n */\r\n mergeNestedTags: function (element, validation) {\r\n if (typeof validation === 'string') {\r\n validation = function (current) { return this.test(current.tagName); }.bind(new this._w.RegExp('^(' + (validation ? validation : '.+') + ')$', 'i'));\r\n } else if (typeof validation !== 'function') {\r\n validation = function () { return true; };\r\n }\r\n\r\n (function recursionFunc(current) {\r\n let children = current.children;\r\n if (children.length === 1 && children[0].nodeName === current.nodeName && validation(current)) {\r\n const temp = children[0];\r\n children = temp.children;\r\n while (children[0]) {\r\n current.appendChild(children[0]);\r\n }\r\n current.removeChild(temp);\r\n }\r\n\r\n for (let i = 0, len = current.children.length; i < len; i++) {\r\n recursionFunc(current.children[i]);\r\n }\r\n })(element);\r\n },\r\n\r\n /**\r\n * @description Delete a empty child node of argument element.\r\n * @param {Element} element Element node\r\n * @param {Node|null} notRemoveNode Do not remove node\r\n * @param {boolean} forceDelete When all child nodes are deleted, the parent node is also deleted.\r\n */\r\n removeEmptyNode: function (element, notRemoveNode, forceDelete) {\r\n const inst = this;\r\n\r\n if (notRemoveNode) {\r\n notRemoveNode = inst.getParentElement(notRemoveNode, function (current) {\r\n return element === current.parentElement;\r\n });\r\n }\r\n\r\n (function recursionFunc(current) {\r\n if (inst._notTextNode(current) || current === notRemoveNode || inst.isNonEditable(current)) return 0;\r\n if (current !== element && inst.onlyZeroWidthSpace(current.textContent) && (!current.firstChild || !inst.isBreak(current.firstChild)) && !current.querySelector(inst._allowedEmptyNodeList)) {\r\n if (current.parentNode) {\r\n current.parentNode.removeChild(current);\r\n return -1;\r\n }\r\n } else {\r\n const children = current.children;\r\n for (let i = 0, len = children.length, r = 0; i < len; i++) {\r\n if (!children[i + r] || inst.isComponent(children[i + r])) continue;\r\n r += recursionFunc(children[i + r]);\r\n }\r\n }\r\n\r\n return 0;\r\n })(element);\r\n\r\n if (element.childNodes.length === 0) {\r\n if (forceDelete) {\r\n this.removeItem(element);\r\n } else {\r\n element.innerHTML = '
    ';\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description Remove whitespace between tags in HTML string.\r\n * @param {String} html HTML string\r\n * @returns {String}\r\n */\r\n htmlRemoveWhiteSpace: function (html) {\r\n if (!html) return '';\r\n return html.trim().replace(/<\\/?(?!strong|span|font|b|var|i|em|u|ins|s|strike|del|sub|sup|mark|a|label|code|summary)[^>^<]+>\\s+(?=<)/ig, function (m) { return m.replace(/\\n/g, '').replace(/\\s+/, ' '); });\r\n },\r\n\r\n /**\r\n * @description HTML code compression\r\n * @param {string} html HTML string\r\n * @returns {string} HTML string\r\n */\r\n htmlCompress: function (html) {\r\n return html.replace(/\\n/g, '').replace(/(>)(?:\\s+)(<)/g, '$1$2');\r\n },\r\n\r\n /**\r\n * @description Sort a element array by depth of element.\r\n * @param {Array} array Array object\r\n * @param {Boolean} des true: descending order / false: ascending order\r\n */\r\n sortByDepth: function (array, des) {\r\n const t = !des ? -1 : 1;\r\n const f = t * -1;\r\n\r\n array.sort(function (a, b) {\r\n if (!this.isListCell(a) || !this.isListCell(b)) return 0;\r\n a = this.getElementDepth(a);\r\n b = this.getElementDepth(b);\r\n return a > b ? t : a < b ? f : 0;\r\n }.bind(this));\r\n },\r\n \r\n /**\r\n * @description Escape a string for safe use in regular expressions.\r\n * @param {String} string String to escape\r\n * @returns {String}\r\n */\r\n escapeStringRegexp: function (string) {\r\n if (typeof string !== 'string') {\r\n throw new TypeError('Expected a string');\r\n }\r\n\r\n // Escape characters with special meaning either inside or outside character sets.\r\n // Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\r\n return string\r\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\r\n .replace(/-/g, '\\\\x2d');\r\n },\r\n\r\n _isExcludeSelectionElement: function (element) {\r\n return !/FIGCAPTION/i.test(element.nodeName) && (this.isComponent(element) || /FIGURE/i.test(element.nodeName));\r\n },\r\n\r\n /**\r\n * @description Nodes that need to be added without modification when changing text nodes\r\n * @param {Node} element Element to check\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _isIgnoreNodeChange: function (element) {\r\n return element && element.nodeType !== 3 && (this.isNonEditable(element) || !this.isTextStyleElement(element));\r\n },\r\n\r\n /**\r\n * @description Nodes that must remain undetached when changing text nodes (A, Label, Code, Span:font-size)\r\n * @param {Node|String} element Element to check\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _isMaintainedNode: function (element) {\r\n return element && element.nodeType !== 3 && /^(a|label|code|summary)$/i.test(typeof element === 'string' ? element : element.nodeName);\r\n },\r\n\r\n /**\r\n * @description Node with font-size style\r\n * @param {Node} element Element to check\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _isSizeNode: function (element) {\r\n return element && element.nodeType !== 3 && this.isTextStyleElement(element) && !!element.style.fontSize;\r\n },\r\n\r\n /**\r\n * @description Nodes without text\r\n * @param {Node} element Element to check\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _notTextNode: function (element) {\r\n return element && element.nodeType !== 3 && (this.isComponent(element) || /^(br|input|select|canvas|img|iframe|audio|video)$/i.test(typeof element === 'string' ? element : element.nodeName));\r\n },\r\n\r\n /**\r\n * @deprecated\r\n * @description Check disallowed tags\r\n * @param {Node} element Element to check\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _disallowedTags: function (element) {\r\n return /^(meta|script|link|style|[a-z]+\\:[a-z]+)$/i.test(element.nodeName);\r\n },\r\n\r\n /**\r\n * @description Create whitelist RegExp object.\r\n * Return RegExp format: new RegExp(\"<\\\\/?\\\\b(?!\" + list + \")\\\\b[^>^<]*+>\", \"gi\")\r\n * @param {String} list Tags list (\"br|p|div|pre...\")\r\n * @returns {RegExp}\r\n */\r\n createTagsWhitelist: function (list) {\r\n return new RegExp('<\\\\/?\\\\b(?!\\\\b' + (list || '').replace(/\\|/g, '\\\\b|\\\\b') + '\\\\b)[^>]*>', 'gi');\r\n },\r\n\r\n /**\r\n * @description Create blacklist RegExp object.\r\n * Return RegExp format: new RegExp(\"<\\\\/?\\\\b(?:\" + list + \")\\\\b[^>^<]*+>\", \"gi\")\r\n * @param {String} list Tags list (\"br|p|div|pre...\")\r\n * @returns {RegExp}\r\n */\r\n createTagsBlacklist: function (list) {\r\n return new RegExp('<\\\\/?\\\\b(?:\\\\b' + (list || '^').replace(/\\|/g, '\\\\b|\\\\b') + '\\\\b)[^>]*>', 'gi');\r\n },\r\n\r\n /**\r\n * @description Fix tags that do not fit the editor format.\r\n * @param {Element} documentFragment Document fragment \"DOCUMENT_FRAGMENT_NODE\" (nodeType === 11)\r\n * @param {RegExp} htmlCheckWhitelistRegExp Editor tags whitelist (core._htmlCheckWhitelistRegExp)\r\n * @param {RegExp} htmlCheckBlacklistRegExp Editor tags blacklist (core._htmlCheckBlacklistRegExp)\r\n * @param {Function} classNameFilter Class name filter function\r\n * @private\r\n */\r\n _consistencyCheckOfHTML: function (documentFragment, htmlCheckWhitelistRegExp, htmlCheckBlacklistRegExp, classNameFilter) {\r\n /**\r\n * It is can use \".children(util.getListChildren)\" to exclude text nodes, but \"documentFragment.children\" is not supported in IE.\r\n * So check the node type and exclude the text no (current.nodeType !== 1)\r\n */\r\n const removeTags = [], emptyTags = [], wrongList = [], withoutFormatCells = [];\r\n\r\n // wrong position\r\n const wrongTags = this.getListChildNodes(documentFragment, function (current) {\r\n if (current.nodeType !== 1) {\r\n if (this.isList(current.parentElement)) removeTags.push(current);\r\n return false;\r\n }\r\n\r\n // white list\r\n if (htmlCheckBlacklistRegExp.test(current.nodeName) || (!htmlCheckWhitelistRegExp.test(current.nodeName) && current.childNodes.length === 0 && this.isNotCheckingNode(current))) {\r\n removeTags.push(current);\r\n return false;\r\n }\r\n\r\n // empty tags\r\n const nrtag = !this.getParentElement(current, this.isNotCheckingNode);\r\n if ((!this.isTable(current) && !this.isListCell(current) && !this.isAnchor(current)) && (this.isFormatElement(current) || this.isRangeFormatElement(current) || this.isTextStyleElement(current)) && current.childNodes.length === 0 && nrtag) {\r\n emptyTags.push(current);\r\n return false;\r\n }\r\n\r\n // wrong list\r\n if (this.isList(current.parentNode) && !this.isList(current) && !this.isListCell(current)) {\r\n wrongList.push(current);\r\n return false;\r\n }\r\n\r\n // table cells\r\n if (this.isCell(current)) {\r\n const fel = current.firstElementChild;\r\n if (!this.isFormatElement(fel) && !this.isRangeFormatElement(fel) && !this.isComponent(fel)) {\r\n withoutFormatCells.push(current);\r\n return false;\r\n }\r\n }\r\n\r\n // class filter\r\n if (nrtag && current.className) {\r\n const className = new this._w.Array(current.classList).map(classNameFilter).join(' ').trim();\r\n if (className) current.className = className;\r\n else current.removeAttribute('class');\r\n }\r\n\r\n const result = current.parentNode !== documentFragment && nrtag &&\r\n ((this.isListCell(current) && !this.isList(current.parentNode)) ||\r\n ((this.isFormatElement(current) || this.isComponent(current)) && !this.isRangeFormatElement(current.parentNode) && !this.getParentElement(current, this.isComponent)));\r\n\r\n return result;\r\n }.bind(this));\r\n\r\n for (let i = 0, len = removeTags.length; i < len; i++) {\r\n this.removeItem(removeTags[i]);\r\n }\r\n\r\n const checkTags = [];\r\n for (let i = 0, len = wrongTags.length, t, p; i < len; i++) {\r\n t = wrongTags[i];\r\n p = t.parentNode;\r\n if (!p || !p.parentNode) continue;\r\n\r\n if (this.getParentElement(t, this.isListCell)) {\r\n const cellChildren = t.childNodes;\r\n for (let j = cellChildren.length - 1; len >= 0; j--) {\r\n p.insertBefore(t, cellChildren[j]);\r\n }\r\n checkTags.push(t);\r\n } else {\r\n p.parentNode.insertBefore(t, p);\r\n checkTags.push(p);\r\n }\r\n }\r\n\r\n for (let i = 0, len = checkTags.length, t; i < len; i++) {\r\n t = checkTags[i];\r\n if (this.onlyZeroWidthSpace(t.textContent.trim())) {\r\n this.removeItem(t);\r\n }\r\n }\r\n\r\n for (let i = 0, len = emptyTags.length; i < len; i++) {\r\n this.removeItem(emptyTags[i]);\r\n }\r\n\r\n for (let i = 0, len = wrongList.length, t, tp, children, p; i < len; i++) {\r\n t = wrongList[i];\r\n p = t.parentNode;\r\n if (!p) continue;\r\n\r\n tp = this.createElement('LI');\r\n\r\n if (this.isFormatElement(t)) {\r\n children = t.childNodes;\r\n while (children[0]) {\r\n tp.appendChild(children[0]);\r\n }\r\n p.insertBefore(tp, t);\r\n this.removeItem(t);\r\n } else {\r\n t = t.nextSibling;\r\n tp.appendChild(wrongList[i]);\r\n p.insertBefore(tp, t);\r\n }\r\n }\r\n\r\n for (let i = 0, len = withoutFormatCells.length, t, f; i < len; i++) {\r\n t = withoutFormatCells[i];\r\n f = this.createElement('DIV');\r\n f.innerHTML = (t.textContent.trim().length === 0 && t.children.length === 0) ? '
    ' : t.innerHTML;\r\n t.innerHTML = f.outerHTML;\r\n }\r\n },\r\n\r\n _setDefaultOptionStyle: function (options, defaultStyle) {\r\n let optionStyle = '';\r\n if (options.height) optionStyle += 'height:' + options.height + ';';\r\n if (options.minHeight) optionStyle += 'min-height:' + options.minHeight + ';';\r\n if (options.maxHeight) optionStyle += 'max-height:' + options.maxHeight + ';';\r\n if (options.position) optionStyle += 'position:' + options.position + ';';\r\n if (options.width) optionStyle += 'width:' + options.width + ';';\r\n if (options.minWidth) optionStyle += 'min-width:' + options.minWidth + ';';\r\n if (options.maxWidth) optionStyle += 'max-width:' + options.maxWidth + ';';\r\n\r\n let top = '', frame = '', editor = '';\r\n defaultStyle = optionStyle + defaultStyle;\r\n const styleArr = defaultStyle.split(';');\r\n for (let i = 0, len = styleArr.length, s; i < len; i++) {\r\n s = styleArr[i].trim();\r\n if (!s) continue;\r\n if (/^(min-|max-)?width\\s*:/.test(s) || /^(z-index|position)\\s*:/.test(s)) {\r\n top += s + ';';\r\n continue;\r\n }\r\n if (/^(min-|max-)?height\\s*:/.test(s)) {\r\n if (/^height/.test(s) && s.split(':')[1].trim() === 'auto') {\r\n options.height = 'auto';\r\n }\r\n frame += s + ';';\r\n continue;\r\n }\r\n editor += s + ';';\r\n }\r\n\r\n return {\r\n top: top,\r\n frame: frame,\r\n editor: editor\r\n };\r\n },\r\n\r\n _setIframeDocument: function (frame, options) {\r\n frame.setAttribute('scrolling', 'auto');\r\n frame.contentDocument.head.innerHTML = '' +\r\n '' +\r\n '' +\r\n this._setIframeCssTags(options);\r\n frame.contentDocument.body.className = options._editableClass;\r\n frame.contentDocument.body.setAttribute('contenteditable', true);\r\n frame.contentDocument.body.setAttribute('autocorrect', \"off\");\r\n },\r\n\r\n _setIframeCssTags: function (options) {\r\n const linkNames = options.iframeCSSFileName;\r\n const wRegExp = this._w.RegExp;\r\n let tagString = '';\r\n\r\n for (let f = 0, len = linkNames.length, path; f < len; f++) {\r\n path = [];\r\n\r\n if (/(^https?:\\/\\/)|(^data:text\\/css,)/.test(linkNames[f])) {\r\n path.push(linkNames[f]);\r\n } else {\r\n const CSSFileName = new wRegExp('(^|.*[\\\\/])' + linkNames[f] + '(\\\\..+)?\\\\.css(?:\\\\?.*|;.*)?$', 'i');\r\n for (let c = document.getElementsByTagName('link'), i = 0, len = c.length, styleTag; i < len; i++) {\r\n styleTag = c[i].href.match(CSSFileName);\r\n if (styleTag) path.push(styleTag[0]);\r\n }\r\n }\r\n\r\n if (!path || path.length === 0) throw '[SUNEDITOR.constructor.iframe.fail] The suneditor CSS files installation path could not be automatically detected. Please set the option property \"iframeCSSFileName\" before creating editor instances.';\r\n\r\n for (let i = 0, len = path.length; i < len; i++) {\r\n tagString += '';\r\n }\r\n }\r\n\r\n return tagString + (options.height === 'auto' ? '' : '');\r\n }\r\n};\r\n\r\nexport default util;","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\nimport _icons from '../assets/defaultIcons';\r\nimport _defaultLang from '../lang/en';\r\nimport util from './util';\r\n\r\nexport default {\r\n /**\r\n * @description document create\r\n * @param {Element} element Textarea\r\n * @param {Object} options Options\r\n * @returns {Object}\r\n */\r\n init: function (element, options) {\r\n if (typeof options !== 'object') options = {};\r\n\r\n const doc = document;\r\n\r\n /** --- init options --- */\r\n this._initOptions(element, options);\r\n \r\n // suneditor div\r\n const top_div = doc.createElement('DIV');\r\n top_div.className = 'sun-editor' + (options.rtl ? ' se-rtl' : '');\r\n if (element.id) top_div.id = 'suneditor_' + element.id;\r\n \r\n // relative div\r\n const relative = doc.createElement('DIV');\r\n relative.className = 'se-container';\r\n \r\n // toolbar\r\n const tool_bar = this._createToolBar(doc, options.buttonList, options.plugins, options);\r\n const toolbarShadow = tool_bar.element.cloneNode(false);\r\n toolbarShadow.className += ' se-toolbar-shadow';\r\n tool_bar.element.style.visibility = 'hidden';\r\n if (tool_bar.pluginCallButtons.math) this._checkKatexMath(options.katex);\r\n const arrow = doc.createElement('DIV');\r\n arrow.className = 'se-arrow';\r\n\r\n // sticky toolbar dummy\r\n const sticky_dummy = doc.createElement('DIV');\r\n sticky_dummy.className = 'se-toolbar-sticky-dummy';\r\n \r\n // inner editor div\r\n const editor_div = doc.createElement('DIV');\r\n editor_div.className = 'se-wrapper';\r\n\r\n /** --- init elements and create bottom bar --- */\r\n const initElements = this._initElements(options, top_div, tool_bar.element, arrow);\r\n\r\n const bottomBar = initElements.bottomBar;\r\n const wysiwyg_div = initElements.wysiwygFrame;\r\n const placeholder_span = initElements.placeholder;\r\n let textarea = initElements.codeView;\r\n\r\n // resizing bar\r\n const resizing_bar = bottomBar.resizingBar;\r\n const navigation = bottomBar.navigation;\r\n const char_wrapper = bottomBar.charWrapper;\r\n const char_counter = bottomBar.charCounter;\r\n \r\n // loading box\r\n const loading_box = doc.createElement('DIV');\r\n loading_box.className = 'se-loading-box sun-editor-common';\r\n loading_box.innerHTML = '

    ';\r\n\r\n // enter line\r\n const line_breaker = doc.createElement('DIV');\r\n line_breaker.className = 'se-line-breaker';\r\n line_breaker.innerHTML = '';\r\n const line_breaker_t = doc.createElement('DIV');\r\n line_breaker_t.className += 'se-line-breaker-component';\r\n const line_breaker_b = line_breaker_t.cloneNode(true);\r\n line_breaker_t.innerHTML = line_breaker_b.innerHTML = options.icons.line_break;\r\n \r\n // resize operation background\r\n const resize_back = doc.createElement('DIV');\r\n resize_back.className = 'se-resizing-back';\r\n\r\n /// focus temp\r\n const focusTemp = doc.createElement('INPUT');\r\n focusTemp.tabIndex = -1;\r\n focusTemp.style.cssText = 'position: fixed !important; top: -10000px !important; display: block !important; width: 0 !important; height: 0 !important; margin: 0 !important; padding: 0 !important;';\r\n\r\n // toolbar container\r\n const toolbarContainer = options.toolbarContainer;\r\n if (toolbarContainer) {\r\n toolbarContainer.appendChild(tool_bar.element);\r\n toolbarContainer.appendChild(toolbarShadow);\r\n }\r\n\r\n // resizingbar\r\n const resizingBarContainer = options.resizingBarContainer;\r\n if (resizing_bar && resizingBarContainer) resizingBarContainer.appendChild(resizing_bar);\r\n \r\n /** append html */\r\n editor_div.appendChild(textarea);\r\n if (placeholder_span) editor_div.appendChild(placeholder_span);\r\n if (!toolbarContainer) {\r\n relative.appendChild(tool_bar.element);\r\n relative.appendChild(toolbarShadow);\r\n }\r\n relative.appendChild(sticky_dummy);\r\n relative.appendChild(editor_div);\r\n relative.appendChild(resize_back);\r\n relative.appendChild(loading_box);\r\n relative.appendChild(line_breaker);\r\n relative.appendChild(line_breaker_t);\r\n relative.appendChild(line_breaker_b);\r\n relative.appendChild(focusTemp);\r\n if (resizing_bar && !resizingBarContainer) relative.appendChild(resizing_bar);\r\n top_div.appendChild(relative);\r\n\r\n textarea = this._checkCodeMirror(options, textarea);\r\n \r\n return {\r\n constructed: {\r\n _top: top_div,\r\n _relative: relative,\r\n _toolBar: tool_bar.element,\r\n _toolbarShadow: toolbarShadow,\r\n _menuTray: tool_bar._menuTray,\r\n _editorArea: editor_div,\r\n _wysiwygArea: wysiwyg_div,\r\n _codeArea: textarea,\r\n _placeholder: placeholder_span,\r\n _resizingBar: resizing_bar,\r\n _navigation: navigation,\r\n _charWrapper: char_wrapper,\r\n _charCounter: char_counter,\r\n _loading: loading_box,\r\n _lineBreaker: line_breaker,\r\n _lineBreaker_t: line_breaker_t,\r\n _lineBreaker_b: line_breaker_b,\r\n _resizeBack: resize_back,\r\n _stickyDummy: sticky_dummy,\r\n _arrow: arrow,\r\n _focusTemp: focusTemp\r\n },\r\n options: options,\r\n plugins: tool_bar.plugins,\r\n pluginCallButtons: tool_bar.pluginCallButtons,\r\n _responsiveButtons: tool_bar.responsiveButtons\r\n };\r\n },\r\n\r\n /**\r\n * @description Check the CodeMirror option to apply the CodeMirror and return the CodeMirror element.\r\n * @param {Object} options options\r\n * @param {Element} textarea textarea element\r\n * @private\r\n */\r\n _checkCodeMirror: function (options, textarea) {\r\n if (options.codeMirror) {\r\n const cmOptions = [{\r\n mode: 'htmlmixed',\r\n htmlMode: true,\r\n lineNumbers: true,\r\n lineWrapping: true\r\n }, (options.codeMirror.options || {})].reduce(function (init, option) {\r\n for (let key in option) {\r\n if (util.hasOwn(option, key)) init[key] = option[key];\r\n }\r\n return init;\r\n }, {});\r\n\r\n if (options.height === 'auto') {\r\n cmOptions.viewportMargin = Infinity;\r\n cmOptions.height = 'auto';\r\n }\r\n \r\n const cm = options.codeMirror.src.fromTextArea(textarea, cmOptions);\r\n cm.display.wrapper.style.cssText = textarea.style.cssText;\r\n \r\n options.codeMirrorEditor = cm;\r\n textarea = cm.display.wrapper;\r\n textarea.className += ' se-wrapper-code-mirror';\r\n }\r\n\r\n return textarea;\r\n },\r\n\r\n /**\r\n * @description Check for a katex object.\r\n * @param {Object} katex katex object\r\n * @private\r\n */\r\n _checkKatexMath: function (katex) {\r\n if (!katex) throw Error('[SUNEDITOR.create.fail] To use the math button you need to add a \"katex\" object to the options.');\r\n\r\n const katexOptions = [{\r\n throwOnError: false,\r\n }, (katex.options || {})].reduce(function (init, option) {\r\n for (let key in option) {\r\n if (util.hasOwn(option, key)) init[key] = option[key];\r\n }\r\n return init;\r\n }, {});\r\n\r\n katex.options = katexOptions;\r\n },\r\n\r\n /**\r\n * @description Add or reset options\r\n * @param {Object} mergeOptions New options property\r\n * @param {Object} context Context object of core\r\n * @param {Object} originOptions Origin options\r\n * @returns {Object} pluginCallButtons\r\n * @private\r\n */\r\n _setOptions: function (mergeOptions, context, originOptions) {\r\n this._initOptions(context.element.originElement, mergeOptions);\r\n\r\n const el = context.element;\r\n const relative = el.relative;\r\n const editorArea = el.editorArea;\r\n const isNewToolbarContainer = mergeOptions.toolbarContainer && mergeOptions.toolbarContainer !== originOptions.toolbarContainer;\r\n const isNewToolbar = mergeOptions.lang !== originOptions.lang || mergeOptions.buttonList !== originOptions.buttonList || mergeOptions.mode !== originOptions.mode || isNewToolbarContainer;\r\n\r\n const tool_bar = this._createToolBar(document, (isNewToolbar ? mergeOptions.buttonList : originOptions.buttonList), mergeOptions.plugins, mergeOptions);\r\n if (tool_bar.pluginCallButtons.math) this._checkKatexMath(mergeOptions.katex);\r\n const arrow = document.createElement('DIV');\r\n arrow.className = 'se-arrow';\r\n\r\n if (isNewToolbar) {\r\n tool_bar.element.style.visibility = 'hidden';\r\n // toolbar container\r\n if (isNewToolbarContainer) {\r\n mergeOptions.toolbarContainer.appendChild(tool_bar.element);\r\n el.toolbar.parentElement.removeChild(el.toolbar);\r\n } else {\r\n el.toolbar.parentElement.replaceChild(tool_bar.element, el.toolbar);\r\n }\r\n\r\n el.toolbar = tool_bar.element;\r\n el._menuTray = tool_bar._menuTray;\r\n el._arrow = arrow;\r\n }\r\n \r\n const initElements = this._initElements(mergeOptions, el.topArea, (isNewToolbar ? tool_bar.element : el.toolbar), arrow);\r\n\r\n const bottomBar = initElements.bottomBar;\r\n const wysiwygFrame = initElements.wysiwygFrame;\r\n const placeholder_span = initElements.placeholder;\r\n let code = initElements.codeView;\r\n\r\n if (el.resizingBar) util.removeItem(el.resizingBar);\r\n if (bottomBar.resizingBar) {\r\n if (mergeOptions.resizingBarContainer && mergeOptions.resizingBarContainer !== originOptions.resizingBarContainer) {\r\n mergeOptions.resizingBarContainer.appendChild(bottomBar.resizingBar);\r\n } else {\r\n relative.appendChild(bottomBar.resizingBar);\r\n }\r\n }\r\n\r\n editorArea.innerHTML = '';\r\n editorArea.appendChild(code);\r\n if (placeholder_span) editorArea.appendChild(placeholder_span);\r\n\r\n code = this._checkCodeMirror(mergeOptions, code);\r\n \r\n el.resizingBar = bottomBar.resizingBar;\r\n el.navigation = bottomBar.navigation;\r\n el.charWrapper = bottomBar.charWrapper;\r\n el.charCounter = bottomBar.charCounter;\r\n el.wysiwygFrame = wysiwygFrame;\r\n el.code = code;\r\n el.placeholder = placeholder_span;\r\n\r\n if (mergeOptions.rtl) util.addClass(el.topArea, 'se-rtl');\r\n else util.removeClass(el.topArea, 'se-rtl');\r\n\r\n return {\r\n callButtons: tool_bar.pluginCallButtons,\r\n plugins: tool_bar.plugins,\r\n toolbar: tool_bar\r\n };\r\n },\r\n\r\n /**\r\n * @description Initialize property of suneditor elements\r\n * @param {Object} options Options\r\n * @param {Element} topDiv Suneditor top div\r\n * @param {Element} toolBar Tool bar\r\n * @param {Element} toolBarArrow Tool bar arrow (balloon editor)\r\n * @returns {Object} Bottom bar elements (resizingBar, navigation, charWrapper, charCounter)\r\n * @private\r\n */\r\n _initElements: function (options, topDiv, toolBar, toolBarArrow) {\r\n /** top div */\r\n topDiv.style.cssText = options._editorStyles.top;\r\n\r\n /** toolbar */\r\n if (/inline/i.test(options.mode)) {\r\n toolBar.className += ' se-toolbar-inline';\r\n toolBar.style.width = options.toolbarWidth;\r\n } else if (/balloon/i.test(options.mode)) {\r\n toolBar.className += ' se-toolbar-balloon';\r\n toolBar.style.width = options.toolbarWidth;\r\n toolBar.appendChild(toolBarArrow);\r\n }\r\n\r\n /** editor */\r\n // wysiwyg div or iframe\r\n const wysiwygDiv = document.createElement(!options.iframe ? 'DIV' : 'IFRAME');\r\n wysiwygDiv.className = 'se-wrapper-inner se-wrapper-wysiwyg';\r\n \r\n if (!options.iframe) {\r\n wysiwygDiv.setAttribute('contenteditable', true);\r\n wysiwygDiv.setAttribute('autocorrect', \"off\");\r\n wysiwygDiv.setAttribute('scrolling', 'auto');\r\n for (let key in options.iframeAttributes) {\r\n wysiwygDiv.setAttribute(key, options.iframeAttributes[key]);\r\n }\r\n wysiwygDiv.className += ' ' + options._editableClass;\r\n wysiwygDiv.style.cssText = options._editorStyles.frame + options._editorStyles.editor;\r\n wysiwygDiv.className += options.className;\r\n } else {\r\n wysiwygDiv.allowFullscreen = true;\r\n wysiwygDiv.frameBorder = 0;\r\n wysiwygDiv.style.cssText = options._editorStyles.frame;\r\n wysiwygDiv.className += options.className;\r\n }\r\n\r\n // textarea for code view\r\n const textarea = document.createElement('TEXTAREA');\r\n textarea.className = 'se-wrapper-inner se-wrapper-code' + options.className;\r\n textarea.style.cssText = options._editorStyles.frame;\r\n textarea.style.display = 'none';\r\n if (options.height === 'auto') textarea.style.overflow = 'hidden';\r\n\r\n /** resize bar */\r\n let resizingBar = null;\r\n let navigation = null;\r\n let charWrapper = null;\r\n let charCounter = null;\r\n if (options.resizingBar) {\r\n resizingBar = document.createElement('DIV');\r\n resizingBar.className = 'se-resizing-bar sun-editor-common';\r\n\r\n /** navigation */\r\n navigation = document.createElement('DIV');\r\n navigation.className = 'se-navigation sun-editor-common';\r\n resizingBar.appendChild(navigation);\r\n\r\n /** char counter */\r\n if (options.charCounter) {\r\n charWrapper = document.createElement('DIV');\r\n charWrapper.className = 'se-char-counter-wrapper';\r\n\r\n if (options.charCounterLabel) {\r\n const charLabel = document.createElement('SPAN');\r\n charLabel.className = 'se-char-label';\r\n charLabel.textContent = options.charCounterLabel;\r\n charWrapper.appendChild(charLabel);\r\n }\r\n \r\n charCounter = document.createElement('SPAN');\r\n charCounter.className = 'se-char-counter';\r\n charCounter.textContent = '0';\r\n charWrapper.appendChild(charCounter);\r\n \r\n if (options.maxCharCount > 0) {\r\n const char_max = document.createElement('SPAN');\r\n char_max.textContent = ' / ' + options.maxCharCount;\r\n charWrapper.appendChild(char_max);\r\n }\r\n\r\n resizingBar.appendChild(charWrapper);\r\n }\r\n }\r\n \r\n let placeholder = null;\r\n if (options.placeholder) {\r\n placeholder = document.createElement('SPAN');\r\n placeholder.className = 'se-placeholder';\r\n placeholder.innerText = options.placeholder;\r\n }\r\n\r\n return {\r\n bottomBar: {\r\n resizingBar: resizingBar,\r\n navigation: navigation,\r\n charWrapper: charWrapper,\r\n charCounter: charCounter\r\n },\r\n wysiwygFrame: wysiwygDiv,\r\n codeView: textarea,\r\n placeholder: placeholder\r\n };\r\n },\r\n\r\n /**\r\n * @description Initialize options\r\n * @param {Element} element Options object\r\n * @param {Object} options Options object\r\n * @private\r\n */\r\n _initOptions: function (element, options) {\r\n const plugins = {};\r\n if (options.plugins) {\r\n const _plugins = options.plugins;\r\n const pluginsValues = _plugins.length ? _plugins : Object.keys(_plugins).map(function(name) { return _plugins[name]; });\r\n for (let i = 0, len = pluginsValues.length, p; i < len; i++) {\r\n p = pluginsValues[i].default || pluginsValues[i];\r\n plugins[p.name] = p;\r\n }\r\n }\r\n options.plugins = plugins;\r\n /** Values */\r\n options.strictMode = options.strictMode !== false;\r\n options.lang = options.lang || _defaultLang;\r\n options.value = typeof options.value === 'string' ? options.value : null;\r\n options.allowedClassNames = new util._w.RegExp((options.allowedClassNames && typeof options.allowedClassNames === 'string' ? options.allowedClassNames + '|' : '') + '^__se__|se-|katex');\r\n options.historyStackDelayTime = typeof options.historyStackDelayTime === 'number' ? options.historyStackDelayTime : 400;\r\n options.frameAttrbutes = options.frameAttrbutes || {};\r\n // tag style\r\n options.defaultTag = typeof options.defaultTag === 'string' && options.defaultTag.length > 0 ? options.defaultTag : 'p';\r\n const textTags = options.textTags = [{bold: 'STRONG', underline: 'U', italic: 'EM', strike: 'DEL', sub: 'SUB', sup: 'SUP'}, (options.textTags || {})].reduce(function (_default, _new) {\r\n for (let key in _new) {\r\n _default[key] = _new[key];\r\n }\r\n return _default;\r\n }, {});\r\n options._textTagsMap = {\r\n 'strong': textTags.bold.toLowerCase(),\r\n 'b': textTags.bold.toLowerCase(),\r\n 'u': textTags.underline.toLowerCase(),\r\n 'ins': textTags.underline.toLowerCase(),\r\n 'em': textTags.italic.toLowerCase(),\r\n 'i': textTags.italic.toLowerCase(),\r\n 'del': textTags.strike.toLowerCase(),\r\n 'strike': textTags.strike.toLowerCase(),\r\n 's': textTags.strike.toLowerCase(),\r\n 'sub': textTags.sub.toLowerCase(),\r\n 'sup': textTags.sup.toLowerCase()\r\n };\r\n options._defaultCommand = {\r\n bold: options.textTags.bold,\r\n underline: options.textTags.underline,\r\n italic: options.textTags.italic,\r\n strike: options.textTags.strike,\r\n subscript: options.textTags.sub,\r\n superscript: options.textTags.sup\r\n };\r\n /** Whitelist, Blacklist */\r\n options.__allowedScriptTag = options.__allowedScriptTag === true;\r\n const whitelist = 'br|p|div|pre|blockquote|h1|h2|h3|h4|h5|h6|ol|ul|li|hr|figure|figcaption|img|iframe|audio|video|source|table|thead|tbody|tr|th|td|a|b|strong|var|i|em|u|ins|s|span|strike|del|sub|sup|code|svg|path|details|summary';\r\n // tags\r\n options.tagsBlacklist = options.tagsBlacklist || '';\r\n options._defaultTagsWhitelist = (typeof options._defaultTagsWhitelist === 'string' ? options._defaultTagsWhitelist : whitelist) + (options.__allowedScriptTag ? '|script' : '');\r\n options._editorTagsWhitelist = options.addTagsWhitelist === '*' ? '*' : this._setWhitelist(options._defaultTagsWhitelist + (typeof options.addTagsWhitelist === 'string' && options.addTagsWhitelist.length > 0 ? '|' + options.addTagsWhitelist : ''), options.tagsBlacklist);\r\n // paste tags\r\n options.pasteTagsBlacklist = options.tagsBlacklist + (options.tagsBlacklist && options.pasteTagsBlacklist ? ('|' + options.pasteTagsBlacklist) : (options.pasteTagsBlacklist || ''));\r\n options.pasteTagsWhitelist = options.pasteTagsWhitelist === '*' ? '*' : this._setWhitelist(typeof options.pasteTagsWhitelist === 'string' ? options.pasteTagsWhitelist : options._editorTagsWhitelist, options.pasteTagsBlacklist);\r\n // tag attributes\r\n options.attributesWhitelist = (!options.attributesWhitelist || typeof options.attributesWhitelist !== 'object') ? null : options.attributesWhitelist;\r\n options.attributesBlacklist = (!options.attributesBlacklist || typeof options.attributesBlacklist !== 'object') ? null : options.attributesBlacklist;\r\n /** Layout */\r\n options.mode = options.mode || 'classic'; // classic, inline, balloon, balloon-always\r\n options.rtl = !!options.rtl;\r\n options.lineAttrReset = ['id'].concat((options.lineAttrReset && typeof options.lineAttrReset === 'string' ? options.lineAttrReset.toLowerCase().split('|') : []));\r\n options._editableClass = 'sun-editor-editable' + (options.rtl ? ' se-rtl' : '');\r\n options._printClass = typeof options._printClass === 'string' ? options._printClass : null;\r\n options.toolbarWidth = options.toolbarWidth ? (util.isNumber(options.toolbarWidth) ? options.toolbarWidth + 'px' : options.toolbarWidth) : 'auto';\r\n options.toolbarContainer = typeof options.toolbarContainer === 'string' ? document.querySelector(options.toolbarContainer) : options.toolbarContainer;\r\n options.stickyToolbar = (/balloon/i.test(options.mode) || !!options.toolbarContainer) ? -1 : options.stickyToolbar === undefined ? 0 : (/^\\d+/.test(options.stickyToolbar) ? util.getNumber(options.stickyToolbar, 0) : -1);\r\n options.hideToolbar = !!options.hideToolbar;\r\n options.fullScreenOffset = options.fullScreenOffset === undefined ? 0 : (/^\\d+/.test(options.fullScreenOffset) ? util.getNumber(options.fullScreenOffset, 0) : 0);\r\n options.fullPage = !!options.fullPage;\r\n options.iframe = options.fullPage || !!options.iframe;\r\n options.iframeAttributes = options.iframeAttributes || {};\r\n options.iframeCSSFileName = options.iframe ? typeof options.iframeCSSFileName === 'string' ? [options.iframeCSSFileName] : (options.iframeCSSFileName || ['suneditor']) : null;\r\n options.previewTemplate = typeof options.previewTemplate === 'string' ? options.previewTemplate : null;\r\n options.printTemplate = typeof options.printTemplate === 'string' ? options.printTemplate : null;\r\n /** CodeMirror object */\r\n options.codeMirror = options.codeMirror ? options.codeMirror.src ? options.codeMirror : {src: options.codeMirror} : null;\r\n /** katex object (Math plugin) */\r\n options.katex = options.katex ? options.katex.src ? options.katex : {src: options.katex} : null;\r\n options.mathFontSize = !!options.mathFontSize ? options.mathFontSize : [\r\n {text: '1', value: '1em'},\r\n {text: '1.5', value: '1.5em'},\r\n {text: '2', value: '2em'},\r\n {text: '2.5', value: '2.5em'}\r\n ];\r\n /** Display */\r\n options.position = typeof options.position === 'string' ? options.position : null;\r\n options.display = options.display || (element.style.display === 'none' || !element.style.display ? 'block' : element.style.display);\r\n options.popupDisplay = options.popupDisplay || 'full';\r\n /** Bottom resizing bar */\r\n options.resizingBar = options.resizingBar === undefined ? (/inline|balloon/i.test(options.mode) ? false : true) : options.resizingBar;\r\n options.showPathLabel = !options.resizingBar ? false : typeof options.showPathLabel === 'boolean' ? options.showPathLabel : true;\r\n options.resizeEnable = options.resizeEnable === undefined ? true : !!options.resizeEnable;\r\n options.resizingBarContainer = typeof options.resizingBarContainer === 'string' ? document.querySelector(options.resizingBarContainer) : options.resizingBarContainer;\r\n /** Character count */\r\n options.charCounter = options.maxCharCount > 0 ? true : typeof options.charCounter === 'boolean' ? options.charCounter : false;\r\n options.charCounterType = typeof options.charCounterType === 'string' ? options.charCounterType : 'char';\r\n options.charCounterLabel = typeof options.charCounterLabel === 'string' ? options.charCounterLabel.trim() : null;\r\n options.maxCharCount = util.isNumber(options.maxCharCount) && options.maxCharCount > -1 ? options.maxCharCount * 1 : null;\r\n /** Width size */\r\n options.width = options.width ? (util.isNumber(options.width) ? options.width + 'px' : options.width) : (element.clientWidth ? element.clientWidth + 'px' : '100%');\r\n options.minWidth = (util.isNumber(options.minWidth) ? options.minWidth + 'px' : options.minWidth) || '';\r\n options.maxWidth = (util.isNumber(options.maxWidth) ? options.maxWidth + 'px' : options.maxWidth) || '';\r\n /** Height size */\r\n options.height = options.height ? (util.isNumber(options.height) ? options.height + 'px' : options.height) : (element.clientHeight ? element.clientHeight + 'px' : 'auto');\r\n options.minHeight = (util.isNumber(options.minHeight) ? options.minHeight + 'px' : options.minHeight) || '';\r\n options.maxHeight = (util.isNumber(options.maxHeight) ? options.maxHeight + 'px' : options.maxHeight) || '';\r\n /** Editing area */\r\n options.className = (typeof options.className === 'string' && options.className.length > 0) ? ' ' + options.className : '';\r\n options.defaultStyle = typeof options.defaultStyle === 'string' ? options.defaultStyle : '';\r\n /** Defining menu items */\r\n options.font = !options.font ? ['Arial', 'Comic Sans MS', 'Courier New', 'Impact', 'Georgia', 'tahoma', 'Trebuchet MS', 'Verdana'] : options.font;\r\n options.fontSize = !options.fontSize ? null : options.fontSize;\r\n options.formats = !options.formats ? null : options.formats;\r\n options.colorList = !options.colorList ? null : options.colorList;\r\n options.lineHeights = !options.lineHeights ? null : options.lineHeights;\r\n options.paragraphStyles = !options.paragraphStyles ? null : options.paragraphStyles;\r\n options.textStyles = !options.textStyles ? null : options.textStyles;\r\n options.fontSizeUnit = typeof options.fontSizeUnit === 'string' ? (options.fontSizeUnit.trim().toLowerCase() || 'px') : 'px';\r\n options.alignItems = typeof options.alignItems === 'object' ? options.alignItems : (options.rtl ? ['right', 'center', 'left', 'justify'] : ['left', 'center', 'right', 'justify']);\r\n /** Image */\r\n options.imageResizing = options.imageResizing === undefined ? true : options.imageResizing;\r\n options.imageHeightShow = options.imageHeightShow === undefined ? true : !!options.imageHeightShow;\r\n options.imageAlignShow = options.imageAlignShow === undefined ? true : !!options.imageAlignShow;\r\n options.imageWidth = !options.imageWidth ? 'auto' : util.isNumber(options.imageWidth) ? options.imageWidth + 'px' : options.imageWidth;\r\n options.imageHeight = !options.imageHeight ? 'auto' : util.isNumber(options.imageHeight) ? options.imageHeight + 'px' : options.imageHeight;\r\n options.imageSizeOnlyPercentage = !!options.imageSizeOnlyPercentage;\r\n options._imageSizeUnit = options.imageSizeOnlyPercentage ? '%' : 'px';\r\n options.imageRotation = options.imageRotation !== undefined ? options.imageRotation : !(options.imageSizeOnlyPercentage || !options.imageHeightShow);\r\n options.imageFileInput = options.imageFileInput === undefined ? true : options.imageFileInput;\r\n options.imageUrlInput = (options.imageUrlInput === undefined || !options.imageFileInput) ? true : options.imageUrlInput;\r\n options.imageUploadHeader = options.imageUploadHeader || null;\r\n options.imageUploadUrl = typeof options.imageUploadUrl === 'string' ? options.imageUploadUrl : null;\r\n options.imageUploadSizeLimit = /\\d+/.test(options.imageUploadSizeLimit) ? util.getNumber(options.imageUploadSizeLimit, 0) : null;\r\n options.imageMultipleFile = !!options.imageMultipleFile;\r\n options.imageAccept = (typeof options.imageAccept !== 'string' || options.imageAccept.trim() === \"*\") ? 'image/*' : options.imageAccept.trim() || 'image/*';\r\n /** Image - image gallery */\r\n options.imageGalleryUrl = typeof options.imageGalleryUrl === 'string' ? options.imageGalleryUrl : null;\r\n options.imageGalleryHeader = options.imageGalleryHeader || null;\r\n /** Video */\r\n options.videoResizing = options.videoResizing === undefined ? true : options.videoResizing;\r\n options.videoHeightShow = options.videoHeightShow === undefined ? true : !!options.videoHeightShow;\r\n options.videoAlignShow = options.videoAlignShow === undefined ? true : !!options.videoAlignShow;\r\n options.videoRatioShow = options.videoRatioShow === undefined ? true : !!options.videoRatioShow;\r\n options.videoWidth = !options.videoWidth || !util.getNumber(options.videoWidth, 0) ? '' : util.isNumber(options.videoWidth) ? options.videoWidth + 'px' : options.videoWidth;\r\n options.videoHeight = !options.videoHeight || !util.getNumber(options.videoHeight, 0) ? '' : util.isNumber(options.videoHeight) ? options.videoHeight + 'px' : options.videoHeight;\r\n options.videoSizeOnlyPercentage = !!options.videoSizeOnlyPercentage;\r\n options._videoSizeUnit = options.videoSizeOnlyPercentage ? '%' : 'px';\r\n options.videoRotation = options.videoRotation !== undefined ? options.videoRotation : !(options.videoSizeOnlyPercentage || !options.videoHeightShow);\r\n options.videoRatio = (util.getNumber(options.videoRatio, 4) || 0.5625);\r\n options.videoRatioList = !options.videoRatioList ? null : options.videoRatioList;\r\n options.youtubeQuery = (options.youtubeQuery || '').replace('?', '');\r\n options.vimeoQuery = (options.vimeoQuery || '').replace('?', '');\r\n options.videoFileInput = !!options.videoFileInput;\r\n options.videoUrlInput = (options.videoUrlInput === undefined || !options.videoFileInput) ? true : options.videoUrlInput;\r\n options.videoUploadHeader = options.videoUploadHeader || null;\r\n options.videoUploadUrl = typeof options.videoUploadUrl === 'string' ? options.videoUploadUrl : null;\r\n options.videoUploadSizeLimit = /\\d+/.test(options.videoUploadSizeLimit) ? util.getNumber(options.videoUploadSizeLimit, 0) : null;\r\n options.videoMultipleFile = !!options.videoMultipleFile;\r\n options.videoTagAttrs = options.videoTagAttrs || null;\r\n options.videoIframeAttrs = options.videoIframeAttrs || null;\r\n options.videoAccept = (typeof options.videoAccept !== 'string' || options.videoAccept.trim() === \"*\") ? 'video/*' : options.videoAccept.trim() || 'video/*';\r\n /** Audio */\r\n options.audioWidth = !options.audioWidth ? '' : util.isNumber(options.audioWidth) ? options.audioWidth + 'px' : options.audioWidth;\r\n options.audioHeight = !options.audioHeight ? '' : util.isNumber(options.audioHeight) ? options.audioHeight + 'px' : options.audioHeight;\r\n options.audioFileInput = !!options.audioFileInput;\r\n options.audioUrlInput = (options.audioUrlInput === undefined || !options.audioFileInput) ? true : options.audioUrlInput;\r\n options.audioUploadHeader = options.audioUploadHeader || null;\r\n options.audioUploadUrl = typeof options.audioUploadUrl === 'string' ? options.audioUploadUrl : null;\r\n options.audioUploadSizeLimit = /\\d+/.test(options.audioUploadSizeLimit) ? util.getNumber(options.audioUploadSizeLimit, 0) : null;\r\n options.audioMultipleFile = !!options.audioMultipleFile;\r\n options.audioTagAttrs = options.audioTagAttrs || null;\r\n options.audioAccept = (typeof options.audioAccept !== 'string' || options.audioAccept.trim() === \"*\") ? 'audio/*' : options.audioAccept.trim() || 'audio/*';\r\n /** Table */\r\n options.tableCellControllerPosition = typeof options.tableCellControllerPosition === 'string' ? options.tableCellControllerPosition.toLowerCase() : 'cell';\r\n /** Link */\r\n options.linkTargetNewWindow = !!options.linkTargetNewWindow;\r\n options.linkProtocol = typeof options.linkProtocol === 'string' ? options.linkProtocol : null;\r\n options.linkRel = Array.isArray(options.linkRel) ? options.linkRel : [];\r\n options.linkRelDefault = options.linkRelDefault || {};\r\n /** HR */\r\n // options.hrItems = options.hrItems;\r\n /** Key actions */\r\n options.tabDisable = !!options.tabDisable;\r\n options.shortcutsDisable = Array.isArray(options.shortcutsDisable) ? options.shortcutsDisable : [];\r\n options.shortcutsHint = options.shortcutsHint === undefined ? true : !!options.shortcutsHint;\r\n /** Defining save button */\r\n options.callBackSave = !options.callBackSave ? null : options.callBackSave;\r\n /** Templates Array */\r\n options.templates = !options.templates ? null : options.templates;\r\n /** ETC */\r\n options.placeholder = typeof options.placeholder === 'string' ? options.placeholder : null;\r\n options.mediaAutoSelect = options.mediaAutoSelect === undefined ? true : !!options.mediaAutoSelect;\r\n /** Buttons */\r\n options.buttonList = !!options.buttonList ? options.buttonList : [\r\n ['undo', 'redo'],\r\n ['bold', 'underline', 'italic', 'strike', 'subscript', 'superscript'],\r\n ['removeFormat'],\r\n ['outdent', 'indent'],\r\n ['fullScreen', 'showBlocks', 'codeView'],\r\n ['preview', 'print']\r\n ];\r\n\r\n /** RTL - buttons */\r\n if (options.rtl) {\r\n options.buttonList = options.buttonList.reverse();\r\n }\r\n\r\n /** --- Define icons --- */\r\n // custom icons\r\n options.icons = (!options.icons || typeof options.icons !== 'object') ? _icons : [_icons, options.icons].reduce(function (_default, _new) {\r\n for (let key in _new) {\r\n if (util.hasOwn(_new, key)) _default[key] = _new[key];\r\n }\r\n return _default;\r\n }, {});\r\n // rtl icons\r\n options.icons = !options.rtl ? options.icons : [options.icons, options.icons.rtl].reduce(function (_default, _new) {\r\n for (let key in _new) {\r\n if (util.hasOwn(_new, key)) _default[key] = _new[key];\r\n }\r\n return _default;\r\n }, {});\r\n\r\n /** Private options */\r\n options.__listCommonStyle = options.__listCommonStyle || ['fontSize', 'color', 'fontFamily', 'fontWeight', 'fontStyle'];\r\n\r\n /** _init options */\r\n options._editorStyles = util._setDefaultOptionStyle(options, options.defaultStyle);\r\n },\r\n\r\n _setWhitelist: function (whitelist, blacklist) {\r\n if (typeof blacklist !== 'string') return whitelist;\r\n blacklist = blacklist.split('|');\r\n whitelist = whitelist.split('|');\r\n for (let i = 0, len = blacklist.length, index; i < len; i++) {\r\n index = whitelist.indexOf(blacklist[i]);\r\n if (index > -1) whitelist.splice(index, 1);\r\n }\r\n return whitelist.join('|');\r\n },\r\n\r\n /**\r\n * @description Suneditor's Default button list\r\n * @param {Object} options options\r\n * @private\r\n */\r\n _defaultButtons: function (options) {\r\n const icons = options.icons;\r\n const lang = options.lang;\r\n const cmd = util.isOSX_IOS ? '⌘' : 'CTRL';\r\n const addShift = util.isOSX_IOS ? '⇧' : '+SHIFT';\r\n const shortcutsDisable = !options.shortcutsHint ? ['bold', 'strike', 'underline', 'italic', 'undo', 'indent', 'save'] : options.shortcutsDisable;\r\n const indentKey = options.rtl ? ['[',']'] : [']','['];\r\n const indentIcon = options.rtl ? [icons.outdent, icons.indent] : [icons.indent, icons.outdent];\r\n\r\n return {\r\n /** default command */\r\n bold: ['', lang.toolbar.bold + '' + (shortcutsDisable.indexOf('bold') > -1 ? '' : cmd + '+B') + '', 'bold', '', icons.bold],\r\n underline: ['', lang.toolbar.underline + '' + (shortcutsDisable.indexOf('underline') > -1 ? '' : cmd + '+U') + '', 'underline', '', icons.underline],\r\n italic: ['', lang.toolbar.italic + '' + (shortcutsDisable.indexOf('italic') > -1 ? '' : cmd + '+I') + '', 'italic', '', icons.italic],\r\n strike: ['', lang.toolbar.strike + '' + (shortcutsDisable.indexOf('strike') > -1 ? '' : cmd + addShift + '+S') + '', 'strike', '', icons.strike],\r\n subscript: ['', lang.toolbar.subscript, 'SUB', '', icons.subscript],\r\n superscript: ['', lang.toolbar.superscript, 'SUP', '', icons.superscript],\r\n removeFormat: ['', lang.toolbar.removeFormat, 'removeFormat', '', icons.erase],\r\n indent: ['', lang.toolbar.indent + '' + (shortcutsDisable.indexOf('indent') > -1 ? '' : cmd + '+' + indentKey[0] + '') + '', 'indent', '', indentIcon[0]],\r\n outdent: ['', lang.toolbar.outdent + '' + (shortcutsDisable.indexOf('indent') > -1 ? '' : cmd + '+' + indentKey[1] + '') + '', 'outdent', '', indentIcon[1]],\r\n fullScreen: ['se-code-view-enabled se-resizing-enabled', lang.toolbar.fullScreen, 'fullScreen', '', icons.expansion],\r\n showBlocks: ['', lang.toolbar.showBlocks, 'showBlocks', '', icons.show_blocks],\r\n codeView: ['se-code-view-enabled se-resizing-enabled', lang.toolbar.codeView, 'codeView', '', icons.code_view],\r\n undo: ['', lang.toolbar.undo + '' + (shortcutsDisable.indexOf('undo') > -1 ? '' : cmd + '+Z') + '', 'undo', '', icons.undo],\r\n redo: ['', lang.toolbar.redo + '' + (shortcutsDisable.indexOf('undo') > -1 ? '' : cmd + '+Y / ' + cmd + addShift + '+Z') + '', 'redo', '', icons.redo],\r\n preview: ['se-resizing-enabled', lang.toolbar.preview, 'preview', '', icons.preview],\r\n print: ['se-resizing-enabled', lang.toolbar.print, 'print', '', icons.print],\r\n dir: ['', lang.toolbar[options.rtl ? 'dir_ltr' : 'dir_rtl'], 'dir', '', icons[options.rtl ? 'dir_ltr' : 'dir_rtl']],\r\n dir_ltr: ['', lang.toolbar.dir_ltr, 'dir_ltr', '', icons.dir_ltr],\r\n dir_rtl: ['', lang.toolbar.dir_rtl, 'dir_rtl', '', icons.dir_rtl],\r\n save: ['se-resizing-enabled', lang.toolbar.save + '' + (shortcutsDisable.indexOf('save') > -1 ? '' : cmd + '+S') + '', 'save', '', icons.save],\r\n /** plugins - command */\r\n blockquote: ['', lang.toolbar.tag_blockquote, 'blockquote', 'command', icons.blockquote],\r\n /** plugins - submenu */\r\n font: ['se-btn-select se-btn-tool-font', lang.toolbar.font, 'font', 'submenu', '' + lang.toolbar.font + '' + icons.arrow_down],\r\n formatBlock: ['se-btn-select se-btn-tool-format', lang.toolbar.formats, 'formatBlock', 'submenu', '' + lang.toolbar.formats + '' + icons.arrow_down],\r\n fontSize: ['se-btn-select se-btn-tool-size', lang.toolbar.fontSize, 'fontSize', 'submenu', '' + lang.toolbar.fontSize + '' + icons.arrow_down],\r\n fontColor: ['', lang.toolbar.fontColor, 'fontColor', 'submenu', icons.font_color],\r\n hiliteColor: ['', lang.toolbar.hiliteColor, 'hiliteColor', 'submenu', icons.highlight_color],\r\n align: ['se-btn-align', lang.toolbar.align, 'align', 'submenu', (options.rtl ? icons.align_right : icons.align_left)],\r\n list: ['', lang.toolbar.list, 'list', 'submenu', icons.list_number],\r\n horizontalRule: ['btn_line', lang.toolbar.horizontalRule, 'horizontalRule', 'submenu', icons.horizontal_rule],\r\n table: ['', lang.toolbar.table, 'table', 'submenu', icons.table],\r\n lineHeight: ['', lang.toolbar.lineHeight, 'lineHeight', 'submenu', icons.line_height],\r\n template: ['', lang.toolbar.template, 'template', 'submenu', icons.template],\r\n paragraphStyle: ['', lang.toolbar.paragraphStyle, 'paragraphStyle', 'submenu', icons.paragraph_style],\r\n textStyle: ['', lang.toolbar.textStyle, 'textStyle', 'submenu', icons.text_style],\r\n /** plugins - dialog */\r\n link: ['', lang.toolbar.link, 'link', 'dialog', icons.link],\r\n image: ['', lang.toolbar.image, 'image', 'dialog', icons.image],\r\n video: ['', lang.toolbar.video, 'video', 'dialog', icons.video],\r\n audio: ['', lang.toolbar.audio, 'audio', 'dialog', icons.audio],\r\n math: ['', lang.toolbar.math, 'math', 'dialog', icons.math],\r\n /** plugins - fileBrowser */\r\n imageGallery: ['', lang.toolbar.imageGallery, 'imageGallery', 'fileBrowser', icons.image_gallery]\r\n };\r\n },\r\n\r\n /**\r\n * @description Create a group div containing each module\r\n * @returns {Object}\r\n * @private\r\n */\r\n _createModuleGroup: function () {\r\n const oDiv = util.createElement('DIV');\r\n oDiv.className = 'se-btn-module se-btn-module-border';\r\n\r\n const oUl = util.createElement('UL');\r\n oUl.className = 'se-menu-list';\r\n oDiv.appendChild(oUl);\r\n\r\n return {\r\n 'div': oDiv,\r\n 'ul': oUl\r\n };\r\n },\r\n\r\n /**\r\n * @description Create a button element\r\n * @param {string} buttonClass className in button\r\n * @param {string} title Title in button\r\n * @param {string} dataCommand The data-command property of the button\r\n * @param {string} dataDisplay The data-display property of the button ('dialog', 'submenu', 'command')\r\n * @param {string} innerHTML Html in button\r\n * @param {string} _disabled Button disabled\r\n * @param {Object} _icons Icons\r\n * @returns {Object}\r\n * @private\r\n */\r\n _createButton: function (buttonClass, title, dataCommand, dataDisplay, innerHTML, _disabled, _icons) {\r\n const oLi = util.createElement('LI');\r\n const oButton = util.createElement('BUTTON');\r\n const label = (title || dataCommand);\r\n\r\n oButton.setAttribute('type', 'button');\r\n oButton.setAttribute('class', 'se-btn' + (buttonClass ? ' ' + buttonClass : '') + ' se-tooltip');\r\n oButton.setAttribute('data-command', dataCommand);\r\n oButton.setAttribute('data-display', dataDisplay);\r\n oButton.setAttribute('aria-label', label.replace(//, ''));\r\n oButton.setAttribute('tabindex', '-1');\r\n \r\n if (!innerHTML) innerHTML = '!';\r\n if (/^default\\./i.test(innerHTML)) {\r\n innerHTML = _icons[innerHTML.replace(/^default\\./i, '')];\r\n }\r\n if (/^text\\./i.test(innerHTML)) {\r\n innerHTML = innerHTML.replace(/^text\\./i, '');\r\n oButton.className += ' se-btn-more-text';\r\n }\r\n\r\n innerHTML += '' + label + '';\r\n\r\n if (_disabled) oButton.setAttribute('disabled', true);\r\n \r\n oButton.innerHTML = innerHTML;\r\n oLi.appendChild(oButton);\r\n\r\n return {\r\n 'li': oLi,\r\n 'button': oButton\r\n };\r\n },\r\n\r\n /**\r\n * @description Create editor HTML\r\n * @param {Array} doc document object\r\n * @param {Array} buttonList option.buttonList\r\n * @param {Object|null} plugins Plugins\r\n * @param {Array} options options\r\n * @returns {Object} { element: (Element) Toolbar element, plugins: (Array|null) Plugins Array, pluginCallButtons: (Object), responsiveButtons: (Array) }\r\n * @private\r\n */\r\n _createToolBar: function (doc, buttonList, plugins, options) {\r\n const separator_vertical = doc.createElement('DIV');\r\n separator_vertical.className = 'se-toolbar-separator-vertical';\r\n\r\n const tool_bar = doc.createElement('DIV');\r\n tool_bar.className = 'se-toolbar sun-editor-common';\r\n\r\n const _buttonTray = doc.createElement('DIV');\r\n _buttonTray.className = 'se-btn-tray';\r\n tool_bar.appendChild(_buttonTray);\r\n\r\n /** create button list */\r\n buttonList = JSON.parse(JSON.stringify(buttonList));\r\n const icons = options.icons;\r\n const defaultButtonList = this._defaultButtons(options);\r\n const pluginCallButtons = {};\r\n const responsiveButtons = [];\r\n\r\n let module = null;\r\n let button = null;\r\n let moduleElement = null;\r\n let buttonElement = null;\r\n let pluginName = '';\r\n let vertical = false;\r\n const moreLayer = util.createElement('DIV');\r\n moreLayer.className = 'se-toolbar-more-layer';\r\n\r\n buttonGroupLoop:\r\n for (let i = 0, more, moreContainer, moreCommand, buttonGroup, align; i < buttonList.length; i++) {\r\n more = false;\r\n align = '';\r\n buttonGroup = buttonList[i];\r\n moduleElement = this._createModuleGroup();\r\n\r\n // button object\r\n if (typeof buttonGroup === 'object') {\r\n // buttons loop\r\n for (let j = 0, moreButton; j < buttonGroup.length; j++) {\r\n button = buttonGroup[j];\r\n moreButton = false;\r\n\r\n if (/^\\%\\d+/.test(button) && j === 0) {\r\n buttonGroup[0] = button.replace(/[^\\d]/g, '');\r\n responsiveButtons.push(buttonGroup);\r\n buttonList.splice(i--, 1);\r\n continue buttonGroupLoop;\r\n }\r\n \r\n if (typeof button === 'object') {\r\n if (typeof button.add === 'function') {\r\n pluginName = button.name;\r\n module = defaultButtonList[pluginName];\r\n plugins[pluginName] = button;\r\n } else {\r\n pluginName = button.name;\r\n module = [button.buttonClass, button.title, button.name, button.dataDisplay, button.innerHTML, button._disabled];\r\n }\r\n } else {\r\n // align\r\n if (/^\\-/.test(button)) {\r\n align = button.substr(1);\r\n moduleElement.div.className += ' module-float-' + align;\r\n continue;\r\n }\r\n\r\n // rtl fix\r\n if (/^\\#/.test(button)) {\r\n const option = button.substr(1);\r\n if (option === 'fix') moduleElement.ul.className += ' se-menu-dir-fix';\r\n continue;\r\n }\r\n \r\n // more button\r\n if (/^\\:/.test(button)) {\r\n moreButton = true;\r\n const matched = button.match(/^\\:([^\\-]+)\\-([^\\-]+)\\-([^\\-]+)/);\r\n moreCommand = '__se__' + matched[1].trim();\r\n const title = matched[2].trim();\r\n const innerHTML = matched[3].trim();\r\n module = ['se-btn-more', title, moreCommand, 'MORE', innerHTML];\r\n }\r\n // buttons\r\n else {\r\n module = defaultButtonList[button];\r\n }\r\n\r\n pluginName = button;\r\n if (!module) {\r\n const custom = plugins[pluginName];\r\n if (!custom) throw Error('[SUNEDITOR.create.toolbar.fail] The button name of a plugin that does not exist. [' + pluginName + ']');\r\n module = [custom.buttonClass, custom.title, custom.name, custom.display, custom.innerHTML, custom._disabled];\r\n }\r\n }\r\n\r\n buttonElement = this._createButton(module[0], module[1], module[2], module[3], module[4], module[5], icons);\r\n (more ? moreContainer : moduleElement.ul).appendChild(buttonElement.li);\r\n\r\n if (plugins[pluginName]) {\r\n pluginCallButtons[pluginName] = buttonElement.button;\r\n }\r\n\r\n // more button\r\n if (moreButton) {\r\n more = true;\r\n moreContainer = util.createElement('DIV');\r\n moreContainer.className = 'se-more-layer ' + moreCommand;\r\n moreContainer.innerHTML = '
      ';\r\n moreLayer.appendChild(moreContainer);\r\n moreContainer = moreContainer.firstElementChild.firstElementChild;\r\n }\r\n }\r\n\r\n if (vertical) {\r\n const sv = separator_vertical.cloneNode(false);\r\n _buttonTray.appendChild(sv);\r\n }\r\n \r\n _buttonTray.appendChild(moduleElement.div);\r\n vertical = true;\r\n }\r\n /** line break */\r\n else if (/^\\/$/.test(buttonGroup)) {\r\n const enterDiv = doc.createElement('DIV');\r\n enterDiv.className = 'se-btn-module-enter';\r\n _buttonTray.appendChild(enterDiv);\r\n vertical = false;\r\n }\r\n }\r\n\r\n switch (_buttonTray.children.length) {\r\n case 0:\r\n _buttonTray.style.display = 'none';\r\n break;\r\n case 1:\r\n util.removeClass(_buttonTray.firstElementChild, 'se-btn-module-border');\r\n break;\r\n default:\r\n if (options.rtl) {\r\n const sv = separator_vertical.cloneNode(false);\r\n sv.style.float = _buttonTray.lastElementChild.style.float;\r\n _buttonTray.appendChild(sv);\r\n }\r\n }\r\n\r\n if (responsiveButtons.length > 0) responsiveButtons.unshift(buttonList);\r\n if (moreLayer.children.length > 0) _buttonTray.appendChild(moreLayer);\r\n\r\n // menu tray\r\n const _menuTray = doc.createElement('DIV');\r\n _menuTray.className = 'se-menu-tray';\r\n tool_bar.appendChild(_menuTray);\r\n\r\n // cover\r\n const tool_cover = doc.createElement('DIV');\r\n tool_cover.className = 'se-toolbar-cover';\r\n tool_bar.appendChild(tool_cover);\r\n\r\n if (options.hideToolbar) tool_bar.style.display = 'none';\r\n\r\n return {\r\n 'element': tool_bar,\r\n 'plugins': plugins,\r\n 'pluginCallButtons': pluginCallButtons,\r\n 'responsiveButtons': responsiveButtons,\r\n '_menuTray': _menuTray,\r\n '_buttonTray': _buttonTray\r\n };\r\n }\r\n};","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\n/**\r\n * @description Elements and variables you should have\r\n * @param {Element} element textarea element\r\n * @param {object} cons Toolbar element you created\r\n * @param {JSON|Object} options Inserted options\r\n * @returns {Object} {Elements, variables of the editor, option}\r\n * @private\r\n */\r\nconst _Context = function (element, cons, options) {\r\n return {\r\n element: {\r\n originElement: element,\r\n topArea: cons._top,\r\n relative: cons._relative,\r\n toolbar: cons._toolBar,\r\n _toolbarShadow: cons._toolbarShadow,\r\n _buttonTray: cons._toolBar.querySelector('.se-btn-tray'),\r\n _menuTray: cons._menuTray,\r\n resizingBar: cons._resizingBar,\r\n navigation: cons._navigation,\r\n charWrapper: cons._charWrapper,\r\n charCounter: cons._charCounter,\r\n editorArea: cons._editorArea,\r\n wysiwygFrame: cons._wysiwygArea,\r\n wysiwyg: cons._wysiwygArea, // if (options.iframe) cons._wysiwygArea.contentDocument.body\r\n code: cons._codeArea,\r\n placeholder: cons._placeholder,\r\n loading: cons._loading,\r\n lineBreaker: cons._lineBreaker,\r\n lineBreaker_t: cons._lineBreaker_t,\r\n lineBreaker_b: cons._lineBreaker_b,\r\n resizeBackground: cons._resizeBack,\r\n _stickyDummy: cons._stickyDummy,\r\n _arrow: cons._arrow,\r\n _focusTemp: cons._focusTemp\r\n },\r\n tool: {\r\n cover: cons._toolBar.querySelector('.se-toolbar-cover'),\r\n bold: cons._toolBar.querySelector('[data-command=\"bold\"]'),\r\n underline: cons._toolBar.querySelector('[data-command=\"underline\"]'),\r\n italic: cons._toolBar.querySelector('[data-command=\"italic\"]'),\r\n strike: cons._toolBar.querySelector('[data-command=\"strike\"]'),\r\n sub: cons._toolBar.querySelector('[data-command=\"SUB\"]'),\r\n sup: cons._toolBar.querySelector('[data-command=\"SUP\"]'),\r\n undo: cons._toolBar.querySelector('[data-command=\"undo\"]'),\r\n redo: cons._toolBar.querySelector('[data-command=\"redo\"]'),\r\n save: cons._toolBar.querySelector('[data-command=\"save\"]'),\r\n outdent: cons._toolBar.querySelector('[data-command=\"outdent\"]'),\r\n indent: cons._toolBar.querySelector('[data-command=\"indent\"]'),\r\n fullScreen: cons._toolBar.querySelector('[data-command=\"fullScreen\"]'),\r\n showBlocks: cons._toolBar.querySelector('[data-command=\"showBlocks\"]'),\r\n codeView: cons._toolBar.querySelector('[data-command=\"codeView\"]'),\r\n dir: cons._toolBar.querySelector('[data-command=\"dir\"]'),\r\n dir_ltr: cons._toolBar.querySelector('[data-command=\"dir_ltr\"]'),\r\n dir_rtl: cons._toolBar.querySelector('[data-command=\"dir_rtl\"]')\r\n },\r\n options: options,\r\n option: options\r\n };\r\n};\r\n\r\nexport default _Context;","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default {\n name: 'notice',\n /**\n * @description Constructor\n * @param {Object} core Core object \n */\n add: function (core) {\n const context = core.context;\n context.notice = {};\n\n /** dialog */\n let notice_div = core.util.createElement('DIV');\n let notice_span = core.util.createElement('SPAN');\n let notice_button = core.util.createElement('BUTTON');\n\n notice_div.className = 'se-notice';\n notice_button.className = 'close';\n notice_button.setAttribute('aria-label', 'Close');\n notice_button.setAttribute('title', core.lang.dialogBox.close);\n notice_button.innerHTML = core.icons.cancel;\n \n notice_div.appendChild(notice_span);\n notice_div.appendChild(notice_button);\n\n context.notice.modal = notice_div;\n context.notice.message = notice_span;\n\n /** add event listeners */\n notice_button.addEventListener('click', this.onClick_cancel.bind(core));\n \n /** append html */\n context.element.editorArea.appendChild(notice_div);\n \n /** empty memory */\n notice_div = null;\n },\n\n /**\n * @description Event when clicking the cancel button\n * @param {MouseEvent} e Event object\n */\n onClick_cancel: function (e) {\n e.preventDefault();\n e.stopPropagation();\n this.plugins.notice.close.call(this);\n },\n\n /**\n * @description Open the notice panel\n * @param {String} text Notice message\n */\n open: function (text) {\n this.context.notice.message.textContent = text;\n this.context.notice.modal.style.display = 'block';\n },\n\n /**\n * @description Open the notice panel\n */\n close: function () {\n this.context.notice.modal.style.display = 'none';\n }\n};\n","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2017 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nimport core from './lib/core';\nimport util from './lib/util';\nimport _Constructor from './lib/constructor';\nimport _Context from './lib/context';\n\nexport default {\n /**\n * @description Returns the create function with preset options.\n * If the options overlap, the options of the 'create' function take precedence.\n * @param {Json} options Initialization options\n * @returns {Object}\n */\n init: function (init_options) {\n return {\n create: function (idOrElement, options) {\n return this.create(idOrElement, options, init_options);\n }.bind(this)\n };\n },\n\n /**\n * @description Create the suneditor\n * @param {String|Element} idOrElement textarea Id or textarea element\n * @param {JSON|Object} options user options\n * @returns {Object}\n */\n create: function (idOrElement, options, _init_options) {\n util._propertiesInit();\n\n if (typeof options !== 'object') options = {};\n if (_init_options) {\n options = [_init_options, options].reduce(function (init, option) {\n for (let key in option) {\n if (!util.hasOwn(option, key)) continue;\n if (key === 'plugins' && option[key] && init[key]) {\n let i = init[key], o = option[key];\n i = i.length ? i : Object.keys(i).map(function(name) { return i[name]; });\n o = o.length ? o : Object.keys(o).map(function(name) { return o[name]; });\n init[key] = (o.filter(function(val) { return i.indexOf(val) === -1; })).concat(i);\n } else {\n init[key] = option[key];\n }\n }\n return init;\n }, {});\n }\n \n const element = typeof idOrElement === 'string' ? document.getElementById(idOrElement) : idOrElement;\n\n if (!element) {\n if (typeof idOrElement === 'string') {\n throw Error('[SUNEDITOR.create.fail] The element for that id was not found (ID:\"' + idOrElement + '\")');\n }\n\n throw Error('[SUNEDITOR.create.fail] suneditor requires textarea\\'s element or id value');\n }\n\n const cons = _Constructor.init(element, options);\n\n if (cons.constructed._top.id && document.getElementById(cons.constructed._top.id)) {\n throw Error('[SUNEDITOR.create.fail] The ID of the suneditor you are trying to create already exists (ID:\"' + cons.constructed._top.id + '\")');\n }\n\n return core(_Context(element, cons.constructed, cons.options), cons.pluginCallButtons, cons.plugins, cons.options.lang, options, cons._responsiveButtons);\n }\n};\n","/*\r\n * wysiwyg web editor\r\n *\r\n * suneditor.js\r\n * Copyright 2017 JiHong Lee.\r\n * MIT license.\r\n */\r\n'use strict';\r\n\r\nimport _Constructor from './constructor';\r\nimport _Context from './context';\r\nimport _history from './history';\r\nimport _util from './util';\r\nimport _notice from '../plugins/modules/_notice';\r\n\r\n/**\r\n * @description SunEditor constuctor function.\r\n * create core object and event registration.\r\n * core, event, functions\r\n * @param {Object} context\r\n * @param {Object} pluginCallButtons\r\n * @param {Object} plugins \r\n * @param {Object} lang\r\n * @param {Object} options\r\n * @param {Object} _responsiveButtons\r\n * @returns {Object} functions Object\r\n */\r\nexport default function (context, pluginCallButtons, plugins, lang, options, _responsiveButtons) {\r\n const _d = context.element.originElement.ownerDocument || document;\r\n const _w = _d.defaultView || window;\r\n const util = _util;\r\n const icons = options.icons;\r\n\r\n /**\r\n * @description editor core object\r\n * should always bind this object when registering an event in the plug-in.\r\n */\r\n const core = {\r\n _d: _d,\r\n _w: _w,\r\n _parser: new _w.DOMParser(),\r\n _prevRtl: options.rtl,\r\n _editorHeight: 0,\r\n _editorHeightPadding: 0,\r\n _listCamel: options.__listCommonStyle,\r\n _listKebab: util.camelToKebabCase(options.__listCommonStyle),\r\n __focusTemp: context.element._focusTemp,\r\n\r\n /**\r\n * @description Document object of the iframe if created as an iframe || _d\r\n * @private\r\n */\r\n _wd: null,\r\n\r\n /**\r\n * @description Window object of the iframe if created as an iframe || _w\r\n * @private\r\n */\r\n _ww: null,\r\n\r\n /**\r\n * @description Closest ShadowRoot to editor if found\r\n * @private\r\n */\r\n _shadowRoot: null,\r\n\r\n /**\r\n * @description Block controller mousedown events in \"shadowRoot\" environment\r\n * @private\r\n */\r\n _shadowRootControllerEventTarget: null,\r\n\r\n /**\r\n * @description Util object\r\n */\r\n util: util,\r\n\r\n /**\r\n * @description Functions object\r\n */\r\n functions: null,\r\n\r\n /**\r\n * @description Editor options\r\n */\r\n options: null,\r\n\r\n /**\r\n * @description Computed style of the wysiwyg area (window.getComputedStyle(context.element.wysiwyg))\r\n */\r\n wwComputedStyle: null,\r\n\r\n /**\r\n * @description Notice object\r\n */\r\n notice: _notice,\r\n\r\n /**\r\n * @description Default icons object\r\n */\r\n icons: icons,\r\n\r\n /**\r\n * @description History object for undo, redo\r\n */\r\n history: null,\r\n\r\n /**\r\n * @description Elements and user options parameters of the suneditor\r\n */\r\n context: context,\r\n\r\n /**\r\n * @description Plugin buttons\r\n */\r\n pluginCallButtons: pluginCallButtons,\r\n\r\n /**\r\n * @description Loaded plugins\r\n */\r\n plugins: plugins || {},\r\n\r\n /**\r\n * @description Whether the plugin is initialized\r\n */\r\n initPlugins: {},\r\n\r\n /**\r\n * @description Object for managing submenu elements\r\n * @private\r\n */\r\n _targetPlugins: {},\r\n\r\n /**\r\n * @description Save rendered submenus and containers\r\n * @private\r\n */\r\n _menuTray: {},\r\n\r\n /**\r\n * @description loaded language\r\n */\r\n lang: lang,\r\n\r\n /**\r\n * @description The selection node (core.getSelectionNode()) to which the effect was last applied\r\n */\r\n effectNode: null,\r\n\r\n /**\r\n * @description submenu element\r\n */\r\n submenu: null,\r\n\r\n /**\r\n * @description container element\r\n */\r\n container: null,\r\n\r\n /**\r\n * @description current subment name\r\n * @private\r\n */\r\n _submenuName: '',\r\n\r\n /**\r\n * @description binded submenuOff method\r\n * @private\r\n */\r\n _bindedSubmenuOff: null,\r\n\r\n /**\r\n * @description binded containerOff method\r\n * @private\r\n */\r\n _bindedContainerOff: null,\r\n\r\n /**\r\n * @description active button element in submenu\r\n */\r\n submenuActiveButton: null,\r\n\r\n /**\r\n * @description active button element in container\r\n */\r\n containerActiveButton: null,\r\n\r\n /**\r\n * @description The elements array to be processed unvisible when the controllersOff function is executed (resizing, link modified button, table controller)\r\n */\r\n controllerArray: [],\r\n\r\n /**\r\n * @description The name of the plugin that called the currently active controller\r\n */\r\n currentControllerName: '',\r\n\r\n /**\r\n * @description The target element of current controller\r\n */\r\n currentControllerTarget: null,\r\n\r\n /**\r\n * @description The file component object of current selected file tag (getFileComponent)\r\n */\r\n currentFileComponentInfo: null,\r\n\r\n /**\r\n * @description An array of buttons whose class name is not \"se-code-view-enabled\"\r\n */\r\n codeViewDisabledButtons: [],\r\n\r\n /**\r\n * @description An array of buttons whose class name is not \"se-resizing-enabled\"\r\n */\r\n resizingDisabledButtons: [],\r\n\r\n /**\r\n * @description active more layer element in submenu\r\n * @private\r\n */\r\n _moreLayerActiveButton: null,\r\n\r\n /**\r\n * @description Tag whitelist RegExp object used in \"_consistencyCheckOfHTML\" method\r\n * ^(options._editorTagsWhitelist)$\r\n * @private\r\n */\r\n _htmlCheckWhitelistRegExp: null,\r\n\r\n /**\r\n * @description Tag blacklist RegExp object used in \"_consistencyCheckOfHTML\" method\r\n * @private\r\n */\r\n _htmlCheckBlacklistRegExp: null,\r\n\r\n /**\r\n * @description RegExp when using check disallowd tags. (b, i, ins, strike, s)\r\n * @private\r\n */\r\n _disallowedTextTagsRegExp: null,\r\n\r\n /**\r\n * @description Editor tags whitelist (RegExp object)\r\n * util.createTagsWhitelist(options._editorTagsWhitelist)\r\n */\r\n editorTagsWhitelistRegExp: null,\r\n\r\n /**\r\n * @description Editor tags blacklist (RegExp object)\r\n * util.createTagsBlacklist(options.tagsBlacklist)\r\n */\r\n editorTagsBlacklistRegExp: null,\r\n\r\n /**\r\n * @description Tag whitelist when pasting (RegExp object)\r\n * util.createTagsWhitelist(options.pasteTagsWhitelist)\r\n */\r\n pasteTagsWhitelistRegExp: null,\r\n\r\n /**\r\n * @description Tag blacklist when pasting (RegExp object)\r\n * util.createTagsBlacklist(options.pasteTagsBlacklist)\r\n */\r\n pasteTagsBlacklistRegExp: null,\r\n\r\n /**\r\n * @description Boolean value of whether the editor has focus\r\n */\r\n hasFocus: false,\r\n\r\n /**\r\n * @description Boolean value of whether the editor is disabled\r\n */\r\n isDisabled: false,\r\n\r\n /**\r\n * @description Boolean value of whether the editor is readOnly\r\n */\r\n isReadOnly: false,\r\n\r\n /**\r\n * @description Attributes whitelist used by the cleanHTML method\r\n * @private\r\n */\r\n _attributesWhitelistRegExp: null,\r\n _attributesWhitelistRegExp_all_data: null,\r\n\r\n /**\r\n * @description Attributes blacklist used by the cleanHTML method\r\n * @private\r\n */\r\n _attributesBlacklistRegExp: null,\r\n\r\n /**\r\n * @description Attributes of tags whitelist used by the cleanHTML method\r\n * @private\r\n */\r\n _attributesTagsWhitelist: null,\r\n\r\n /**\r\n * @description Attributes of tags blacklist used by the cleanHTML method\r\n * @private\r\n */\r\n _attributesTagsBlacklist: null,\r\n\r\n /**\r\n * @description binded controllersOff method\r\n * @private\r\n */\r\n _bindControllersOff: null,\r\n\r\n /**\r\n * @description Is inline mode?\r\n * @private\r\n */\r\n _isInline: null,\r\n\r\n /**\r\n * @description Is balloon|balloon-always mode?\r\n * @private\r\n */\r\n _isBalloon: null,\r\n\r\n /**\r\n * @description Is balloon-always mode?\r\n * @private\r\n */\r\n _isBalloonAlways: null,\r\n\r\n /**\r\n * @description Required value when using inline mode to sticky toolbar\r\n * @private\r\n */\r\n _inlineToolbarAttr: {top: '', width: '', isShow: false},\r\n\r\n /**\r\n * @description Variable that controls the \"blur\" event in the editor of inline or balloon mode when the focus is moved to submenu\r\n * @private\r\n */\r\n _notHideToolbar: false,\r\n\r\n /**\r\n * @description Variable value that sticky toolbar mode\r\n * @private\r\n */\r\n _sticky: false,\r\n\r\n /**\r\n * @description Variables for controlling focus and blur events\r\n * @private\r\n */\r\n _antiBlur: false,\r\n\r\n /**\r\n * @description Component line breaker element\r\n * @private\r\n */\r\n _lineBreaker: null,\r\n _lineBreakerButton: null,\r\n\r\n /**\r\n * @description If true, (initialize, reset) all indexes of image, video information\r\n * @private\r\n */\r\n _componentsInfoInit: true,\r\n _componentsInfoReset: false,\r\n\r\n /**\r\n * @description Plugins array with \"active\" method.\r\n * \"activePlugins\" runs the \"add\" method when creating the editor.\r\n */\r\n activePlugins: null,\r\n\r\n /**\r\n * @description Information of tags that should maintain HTML structure, style, class name, etc. (In use by \"math\" plugin)\r\n * When inserting \"html\" such as paste, it is executed on the \"html\" to be inserted. (core.cleanHTML)\r\n * Basic Editor Actions:\r\n * 1. All classes not starting with \"__se__\" or \"se-\" in the editor are removed.\r\n * 2. The style of all tags except the \"span\" tag is removed from the editor.\r\n * \"managedTagsInfo\" structure ex:\r\n * managedTagsInfo: {\r\n * query: '.__se__xxx, se-xxx'\r\n * map: {\r\n * '__se__xxx': method.bind(core),\r\n * 'se-xxx': method.bind(core),\r\n * }\r\n * }\r\n * @example\r\n * Define in the following return format in the \"managedTagInfo\" function of the plugin.\r\n * managedTagInfo() => {\r\n * return {\r\n * className: 'string', // Class name to identify the tag. (\"__se__xxx\", \"se-xxx\")\r\n * // Change the html of the \"element\". (\"element\" is the element found with \"className\".)\r\n * // \"method\" is executed by binding \"core\".\r\n * method: function (element) {\r\n * // this === core\r\n * element.innerHTML = // (rendered html);\r\n * }\r\n * }\r\n * }\r\n */\r\n managedTagsInfo: null,\r\n\r\n /**\r\n * @description cashing: options.charCounterType === 'byte-html'\r\n * @private\r\n */\r\n _charTypeHTML: false,\r\n\r\n /**\r\n * @description Array of \"checkFileInfo\" functions with the core bound\r\n * (Plugins with \"checkFileInfo\" and \"resetFileInfo\" methods)\r\n * \"fileInfoPlugins\" runs the \"add\" method when creating the editor.\r\n * \"checkFileInfo\" method is always call just before the \"change\" event.\r\n * @private\r\n */\r\n _fileInfoPluginsCheck: null,\r\n\r\n /**\r\n * @description Array of \"resetFileInfo\" functions with the core bound\r\n * (Plugins with \"checkFileInfo\" and \"resetFileInfo\" methods)\r\n * \"checkFileInfo\" method is always call just before the \"functions.setOptions\" method.\r\n * @private\r\n */\r\n _fileInfoPluginsReset: null,\r\n\r\n /**\r\n * @description Variables for file component management\r\n * @private\r\n */\r\n _fileManager: {\r\n tags: null,\r\n regExp: null,\r\n queryString: null,\r\n pluginRegExp: null,\r\n pluginMap: null\r\n },\r\n\r\n /**\r\n * @description Elements that need to change text or className for each selection change\r\n * After creating the editor, \"activePlugins\" are added.\r\n * @property {Element} STRONG bold button\r\n * @property {Element} U underline button\r\n * @property {Element} EM italic button\r\n * @property {Element} DEL strike button\r\n * @property {Element} SUB subscript button\r\n * @property {Element} SUP superscript button\r\n * @property {Element} OUTDENT outdent button\r\n * @property {Element} INDENT indent button\r\n */\r\n commandMap: {},\r\n\r\n /**\r\n * @description CSS properties related to style tags \r\n * @private\r\n */\r\n _commandMapStyles: {\r\n STRONG: ['font-weight'],\r\n U: ['text-decoration'],\r\n EM: ['font-style'],\r\n DEL: ['text-decoration']\r\n },\r\n\r\n /**\r\n * @description Style button related to edit area\r\n * @property {Element} fullScreen fullScreen button element\r\n * @property {Element} showBlocks showBlocks button element\r\n * @property {Element} codeView codeView button element\r\n * @private\r\n */\r\n _styleCommandMap: null,\r\n\r\n /**\r\n * @private\r\n */\r\n _cleanStyleRegExp: {\r\n div: new _w.RegExp('\\\\s*[^-a-zA-Z](.+)\\\\s*:[^;]+(?!;)*', 'ig'),\r\n span: new _w.RegExp('\\\\s*[^-a-zA-Z](font-family|font-size|color|background-color)\\\\s*:[^;]+(?!;)*', 'ig'),\r\n format: new _w.RegExp('\\\\s*[^-a-zA-Z](text-align|margin-left|margin-right|width|height|line-height)\\\\s*:[^;]+(?!;)*', 'ig'),\r\n fontSizeUnit: new _w.RegExp('\\\\d+' + options.fontSizeUnit + '$', 'i'),\r\n },\r\n\r\n /**\r\n * @description Variables used internally in editor operation\r\n * @property {Boolean} isCodeView State of code view\r\n * @property {Boolean} isFullScreen State of full screen\r\n * @property {Number} innerHeight_fullScreen InnerHeight in editor when in full screen\r\n * @property {Number} resizeClientY Remember the vertical size of the editor before resizing the editor (Used when calculating during resize operation)\r\n * @property {Number} tabSize Indent size of tab (4)\r\n * @property {Number} codeIndent Indent size of Code view mode (2)\r\n * @property {Number} minResizingSize Minimum size of editing area when resized {Number} (.se-wrapper-inner {min-height: 65px;} || 65)\r\n * @property {Array} currentNodes An array of the current cursor's node structure\r\n * @private\r\n */\r\n _variable: {\r\n isChanged: false,\r\n isCodeView: false,\r\n isFullScreen: false,\r\n innerHeight_fullScreen: 0,\r\n resizeClientY: 0,\r\n tabSize: 4,\r\n codeIndent: 2,\r\n minResizingSize: util.getNumber((context.element.wysiwygFrame.style.minHeight || '65'), 0),\r\n currentNodes: [],\r\n currentNodesMap: [],\r\n _range: null,\r\n _selectionNode: null,\r\n _originCssText: context.element.topArea.style.cssText,\r\n _bodyOverflow: '',\r\n _editorAreaOriginCssText: '',\r\n _wysiwygOriginCssText: '',\r\n _codeOriginCssText: '',\r\n _fullScreenAttrs: {sticky: false, balloon: false, inline: false},\r\n _lineBreakComp: null,\r\n _lineBreakDir: ''\r\n },\r\n\r\n /**\r\n * @description Temp variable for set line attrs\r\n * @private\r\n */\r\n _formatAttrsTemp: null,\r\n\r\n /**\r\n * @description Save the current buttons states to \"allCommandButtons\" object\r\n * @private\r\n */\r\n _saveButtonStates: function () {\r\n if (!this.allCommandButtons) this.allCommandButtons = {};\r\n\r\n const currentButtons = this.context.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]');\r\n for (let i = 0, element, command; i < currentButtons.length; i++) {\r\n element = currentButtons[i];\r\n command = element.getAttribute('data-command');\r\n\r\n this.allCommandButtons[command] = element;\r\n }\r\n },\r\n\r\n /**\r\n * @description Recover the current buttons states from \"allCommandButtons\" object\r\n * @private\r\n */\r\n _recoverButtonStates: function () {\r\n if (this.allCommandButtons) {\r\n const currentButtons = this.context.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]');\r\n for (let i = 0, button, command, oldButton; i < currentButtons.length; i++) {\r\n button = currentButtons[i];\r\n command = button.getAttribute('data-command');\r\n\r\n oldButton = this.allCommandButtons[command];\r\n if (oldButton) {\r\n button.parentElement.replaceChild(oldButton, button);\r\n if (this.context.tool[command]) this.context.tool[command] = oldButton;\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description If the plugin is not added, add the plugin and call the 'add' function.\r\n * If the plugin is added call callBack function.\r\n * @param {String} pluginName The name of the plugin to call\r\n * @param {function} callBackFunction Function to be executed immediately after module call\r\n * @param {Element|null} _target Plugin target button (This is not necessary if you have a button list when creating the editor)\r\n */\r\n callPlugin: function (pluginName, callBackFunction, _target) {\r\n _target = _target || pluginCallButtons[pluginName];\r\n\r\n if (!this.plugins[pluginName]) {\r\n throw Error('[SUNEDITOR.core.callPlugin.fail] The called plugin does not exist or is in an invalid format. (pluginName:\"' + pluginName + '\")');\r\n } else if (!this.initPlugins[pluginName]) {\r\n this.plugins[pluginName].add(this, _target);\r\n this.initPlugins[pluginName] = true;\r\n } else if (typeof this._targetPlugins[pluginName] === 'object' && !!_target) {\r\n this.initMenuTarget(pluginName, _target, this._targetPlugins[pluginName]);\r\n }\r\n\r\n if (this.plugins[pluginName].active && !this.commandMap[pluginName] && !!_target) {\r\n this.commandMap[pluginName] = _target;\r\n this.activePlugins.push(pluginName);\r\n }\r\n\r\n if (typeof callBackFunction === 'function') callBackFunction();\r\n },\r\n\r\n /**\r\n * @description If the module is not added, add the module and call the 'add' function\r\n * @param {Array} moduleArray module object's Array [dialog, resizing]\r\n */\r\n addModule: function (moduleArray) {\r\n for (let i = 0, len = moduleArray.length, moduleName; i < len; i++) {\r\n moduleName = moduleArray[i].name;\r\n if (!this.plugins[moduleName]) {\r\n this.plugins[moduleName] = moduleArray[i];\r\n }\r\n if (!this.initPlugins[moduleName]) {\r\n this.initPlugins[moduleName] = true;\r\n if (typeof this.plugins[moduleName].add === 'function') this.plugins[moduleName].add(this);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description Gets the current editor-relative scroll offset.\r\n * @returns {Object} {top, left}\r\n */\r\n getGlobalScrollOffset: function () {\r\n let t = 0, l = 0;\r\n let el = context.element.topArea;\r\n while (el) {\r\n t += el.scrollTop;\r\n l += el.scrollLeft;\r\n el = el.parentElement;\r\n }\r\n\r\n el = this._shadowRoot ? this._shadowRoot.host : null;\r\n while (el) {\r\n t += el.scrollTop;\r\n l += el.scrollLeft;\r\n el = el.parentElement;\r\n }\r\n\r\n return {\r\n top: t,\r\n left: l\r\n };\r\n },\r\n\r\n /**\r\n * @description Method for managing submenu element.\r\n * You must add the \"submenu\" element using the this method at custom plugin.\r\n * @param {String} pluginName Plugin name\r\n * @param {Element|null} target Target button\r\n * @param {Element} menu Submenu element\r\n */\r\n initMenuTarget: function (pluginName, target, menu) {\r\n if (!target) {\r\n this._targetPlugins[pluginName] = menu;\r\n } else {\r\n context.element._menuTray.appendChild(menu);\r\n this._targetPlugins[pluginName] = true;\r\n this._menuTray[target.getAttribute('data-command')] = menu;\r\n }\r\n },\r\n\r\n /**\r\n * @description Enable submenu\r\n * @param {Element} element Submenu's button element to call\r\n */\r\n submenuOn: function (element) {\r\n if (this._bindedSubmenuOff) this._bindedSubmenuOff();\r\n if (this._bindControllersOff) this.controllersOff();\r\n\r\n const submenuName = this._submenuName = element.getAttribute('data-command');\r\n const menu = this.submenu = this._menuTray[submenuName];\r\n this.submenuActiveButton = element;\r\n this._setMenuPosition(element, menu);\r\n\r\n this._bindedSubmenuOff = this.submenuOff.bind(this);\r\n this.addDocEvent('mousedown', this._bindedSubmenuOff, false);\r\n\r\n if (this.plugins[submenuName].on) this.plugins[submenuName].on.call(this);\r\n this._antiBlur = true;\r\n },\r\n\r\n /**\r\n * @description Disable submenu\r\n */\r\n submenuOff: function () {\r\n this.removeDocEvent('mousedown', this._bindedSubmenuOff);\r\n this._bindedSubmenuOff = null;\r\n\r\n if (this.submenu) {\r\n this._submenuName = '';\r\n this.submenu.style.display = 'none';\r\n this.submenu = null;\r\n util.removeClass(this.submenuActiveButton, 'on');\r\n this.submenuActiveButton = null;\r\n this._notHideToolbar = false;\r\n }\r\n\r\n this._antiBlur = false;\r\n },\r\n\r\n /**\r\n * @description Disable more layer\r\n */\r\n moreLayerOff: function() {\r\n if (this._moreLayerActiveButton) {\r\n const layer = context.element.toolbar.querySelector('.' + this._moreLayerActiveButton.getAttribute('data-command'));\r\n layer.style.display = 'none';\r\n util.removeClass(this._moreLayerActiveButton, 'on');\r\n this._moreLayerActiveButton = null;\r\n }\r\n },\r\n\r\n /**\r\n * @description Enable container\r\n * @param {Element} element Container's button element to call\r\n */\r\n containerOn: function (element) {\r\n if (this._bindedContainerOff) this._bindedContainerOff();\r\n\r\n const containerName = this._containerName = element.getAttribute('data-command');\r\n const menu = this.container = this._menuTray[containerName];\r\n this.containerActiveButton = element;\r\n this._setMenuPosition(element, menu);\r\n\r\n this._bindedContainerOff = this.containerOff.bind(this);\r\n this.addDocEvent('mousedown', this._bindedContainerOff, false);\r\n\r\n if (this.plugins[containerName].on) this.plugins[containerName].on.call(this);\r\n this._antiBlur = true;\r\n },\r\n\r\n /**\r\n * @description Disable container\r\n */\r\n containerOff: function () {\r\n this.removeDocEvent('mousedown', this._bindedContainerOff);\r\n this._bindedContainerOff = null;\r\n\r\n if (this.container) {\r\n this._containerName = '';\r\n this.container.style.display = 'none';\r\n this.container = null;\r\n util.removeClass(this.containerActiveButton, 'on');\r\n this.containerActiveButton = null;\r\n this._notHideToolbar = false;\r\n }\r\n\r\n this._antiBlur = false;\r\n },\r\n\r\n /**\r\n * @description Set the menu position. (submenu, container)\r\n * @param {*} element Button element\r\n * @param {*} menu Menu element\r\n * @private\r\n */\r\n _setMenuPosition: function (element, menu) {\r\n menu.style.visibility = 'hidden';\r\n menu.style.display = 'block';\r\n menu.style.height = '';\r\n util.addClass(element, 'on');\r\n\r\n const toolbar = this.context.element.toolbar;\r\n const toolbarW = toolbar.offsetWidth;\r\n const toolbarOffset = event._getEditorOffsets(context.element.toolbar);\r\n const menuW = menu.offsetWidth;\r\n const l = element.parentElement.offsetLeft + 3;\r\n\r\n // rtl\r\n if (options.rtl) {\r\n const elementW = element.offsetWidth;\r\n const rtlW = menuW > elementW ? menuW - elementW : 0;\r\n const rtlL = rtlW > 0 ? 0 : elementW - menuW;\r\n menu.style.left = (l - rtlW + rtlL) + 'px';\r\n if (toolbarOffset.left > event._getEditorOffsets(menu).left) {\r\n menu.style.left = '0px';\r\n }\r\n } else {\r\n const overLeft = toolbarW <= menuW ? 0 : toolbarW - (l + menuW);\r\n if (overLeft < 0) menu.style.left = (l + overLeft) + 'px';\r\n else menu.style.left = l + 'px';\r\n }\r\n\r\n // get element top\r\n let t = 0;\r\n let offsetEl = element;\r\n while (offsetEl && offsetEl !== toolbar) {\r\n t += offsetEl.offsetTop;\r\n offsetEl = offsetEl.offsetParent;\r\n }\r\n\r\n const bt = t;\r\n if (this._isBalloon) {\r\n t += toolbar.offsetTop + element.offsetHeight;\r\n } else {\r\n t -= element.offsetHeight;\r\n }\r\n\r\n // set menu position\r\n const toolbarTop = toolbarOffset.top;\r\n const menuHeight = menu.offsetHeight;\r\n const scrollTop = this.getGlobalScrollOffset().top;\r\n\r\n const menuHeight_bottom = _w.innerHeight - (toolbarTop - scrollTop + bt + element.parentElement.offsetHeight);\r\n if (menuHeight_bottom < menuHeight) {\r\n let menuTop = -1 * (menuHeight - bt + 3);\r\n const insTop = toolbarTop - scrollTop + menuTop;\r\n const menuHeight_top = menuHeight + (insTop < 0 ? insTop : 0);\r\n\r\n if (menuHeight_top > menuHeight_bottom) {\r\n menu.style.height = menuHeight_top + 'px';\r\n menuTop = -1 * (menuHeight_top - bt + 3);\r\n } else {\r\n menu.style.height = menuHeight_bottom + 'px';\r\n menuTop = bt + element.parentElement.offsetHeight;\r\n }\r\n\r\n menu.style.top = menuTop + 'px';\r\n } else {\r\n menu.style.top = (bt + element.parentElement.offsetHeight) + 'px';\r\n }\r\n\r\n menu.style.visibility = '';\r\n },\r\n\r\n /**\r\n * @description Show controller at editor area (controller elements, function, \"controller target element(@Required)\", \"controller name(@Required)\", etc..)\r\n * @param {*} arguments controller elements, functions..\r\n */\r\n controllersOn: function () {\r\n if (this._bindControllersOff) this._bindControllersOff();\r\n this.controllerArray = [];\r\n\r\n for (let i = 0, arg; i < arguments.length; i++) {\r\n arg = arguments[i];\r\n if (!arg) continue;\r\n\r\n if (typeof arg === 'string') {\r\n this.currentControllerName = arg;\r\n continue;\r\n }\r\n if (typeof arg === 'function') {\r\n this.controllerArray.push(arg);\r\n continue;\r\n }\r\n if (!util.hasClass(arg, 'se-controller')) {\r\n this.currentControllerTarget = arg;\r\n this.currentFileComponentInfo = this.getFileComponent(arg);\r\n continue;\r\n }\r\n if (arg.style) {\r\n arg.style.display = 'block';\r\n if (this._shadowRoot && this._shadowRootControllerEventTarget.indexOf(arg) === -1) {\r\n arg.addEventListener('mousedown', function (e) { e.preventDefault(); e.stopPropagation(); });\r\n this._shadowRootControllerEventTarget.push(arg);\r\n }\r\n }\r\n this.controllerArray.push(arg);\r\n }\r\n\r\n this._bindControllersOff = this.controllersOff.bind(this);\r\n this.addDocEvent('mousedown', this._bindControllersOff, false);\r\n this.addDocEvent('keydown', this._bindControllersOff, false);\r\n this._antiBlur = true;\r\n\r\n if (typeof functions.showController === 'function') functions.showController(this.currentControllerName, this.controllerArray, this);\r\n },\r\n\r\n /**\r\n * @description Hide controller at editor area (link button, image resize button..)\r\n * @param {KeyboardEvent|MouseEvent|null} e Event object when called from mousedown and keydown events registered in \"core.controllersOn\"\r\n */\r\n controllersOff: function (e) {\r\n this._lineBreaker.style.display = 'none';\r\n const len = this.controllerArray.length;\r\n\r\n if (e && e.target && len > 0) {\r\n for (let i = 0; i < len; i++) {\r\n if (typeof this.controllerArray[i].contains === 'function' && this.controllerArray[i].contains(e.target)) return;\r\n }\r\n }\r\n\r\n if (this._fileManager.pluginRegExp.test(this.currentControllerName) && e && e.type === 'keydown' && e.keyCode !== 27) return;\r\n context.element.lineBreaker_t.style.display = context.element.lineBreaker_b.style.display = 'none';\r\n this._variable._lineBreakComp = null;\r\n\r\n this.currentControllerName = '';\r\n this.currentControllerTarget = null;\r\n this.currentFileComponentInfo = null;\r\n this.effectNode = null;\r\n if (!this._bindControllersOff) return;\r\n\r\n this.removeDocEvent('mousedown', this._bindControllersOff);\r\n this.removeDocEvent('keydown', this._bindControllersOff);\r\n this._bindControllersOff = null;\r\n\r\n if (len > 0) {\r\n for (let i = 0; i < len; i++) {\r\n if (typeof this.controllerArray[i] === 'function') this.controllerArray[i]();\r\n else this.controllerArray[i].style.display = 'none';\r\n }\r\n\r\n this.controllerArray = [];\r\n }\r\n\r\n this._antiBlur = false;\r\n },\r\n\r\n /**\r\n * @description Specify the position of the controller.\r\n * @param {Element} controller Controller element.\r\n * @param {Element} referEl Element that is the basis of the controller's position.\r\n * @param {String} position Type of position (\"top\" | \"bottom\")\r\n * When using the \"top\" position, there should not be an arrow on the controller.\r\n * When using the \"bottom\" position there should be an arrow on the controller.\r\n * @param {Object} addOffset These are the left and top values that need to be added specially. \r\n * This argument is required. - {left: 0, top: 0}\r\n * Please enter the value based on ltr mode.\r\n * Calculated automatically in rtl mode.\r\n */\r\n setControllerPosition: function (controller, referEl, position, addOffset) {\r\n if (options.rtl) addOffset.left *= -1;\r\n\r\n const offset = util.getOffset(referEl, context.element.wysiwygFrame);\r\n controller.style.visibility = 'hidden';\r\n controller.style.display = 'block';\r\n\r\n // Height value of the arrow element is 11px\r\n const topMargin = position === 'top' ? -(controller.offsetHeight + 2) : (referEl.offsetHeight + 12);\r\n controller.style.top = (offset.top + topMargin + addOffset.top) + 'px';\r\n\r\n const l = offset.left - context.element.wysiwygFrame.scrollLeft + addOffset.left;\r\n const controllerW = controller.offsetWidth;\r\n const referElW = referEl.offsetWidth;\r\n\r\n const allow = util.hasClass(controller.firstElementChild, 'se-arrow') ? controller.firstElementChild : null;\r\n\r\n // rtl (Width value of the arrow element is 22px)\r\n if (options.rtl) {\r\n const rtlW = (controllerW > referElW) ? controllerW - referElW : 0;\r\n const rtlL = rtlW > 0 ? 0 : referElW - controllerW;\r\n controller.style.left = (l - rtlW + rtlL) + 'px';\r\n\r\n if (rtlW > 0) {\r\n if (allow) allow.style.left = ((controllerW - 14 < 10 + rtlW) ? (controllerW - 14) : (10 + rtlW)) + 'px';\r\n }\r\n\r\n const overSize = context.element.wysiwygFrame.offsetLeft - controller.offsetLeft;\r\n if (overSize > 0) {\r\n controller.style.left = '0px';\r\n if (allow) allow.style.left = overSize + 'px';\r\n }\r\n } else {\r\n controller.style.left = l + 'px';\r\n\r\n const overSize = context.element.wysiwygFrame.offsetWidth - (controller.offsetLeft + controllerW);\r\n if (overSize < 0) {\r\n controller.style.left = (controller.offsetLeft + overSize) + 'px';\r\n if (allow) allow.style.left = (20 - overSize) + 'px';\r\n } else {\r\n if (allow) allow.style.left = '20px';\r\n }\r\n }\r\n\r\n controller.style.visibility = '';\r\n },\r\n\r\n /**\r\n * @description javascript execCommand\r\n * @param {String} command javascript execCommand function property\r\n * @param {Boolean|undefined} showDefaultUI javascript execCommand function property\r\n * @param {String|undefined} value javascript execCommand function property\r\n */\r\n execCommand: function (command, showDefaultUI, value) {\r\n this._wd.execCommand(command, showDefaultUI, (command === 'formatBlock' ? '<' + value + '>' : value));\r\n // history stack\r\n this.history.push(true);\r\n },\r\n\r\n /**\r\n * @description Focus to wysiwyg area using \"native focus function\"\r\n */\r\n nativeFocus: function () {\r\n this.__focus();\r\n this._editorRange();\r\n },\r\n\r\n /**\r\n * @description Focus method\r\n * @private\r\n */\r\n __focus: function () {\r\n const caption = util.getParentElement(this.getSelectionNode(), 'figcaption');\r\n if (caption) {\r\n caption.focus();\r\n } else {\r\n context.element.wysiwyg.focus();\r\n }\r\n },\r\n\r\n /**\r\n * @description Focus to wysiwyg area\r\n */\r\n focus: function () {\r\n if (context.element.wysiwygFrame.style.display === 'none') return;\r\n\r\n if (options.iframe) {\r\n this.nativeFocus();\r\n } else {\r\n try {\r\n const range = this.getRange();\r\n if (range.startContainer === range.endContainer && util.isWysiwygDiv(range.startContainer)) {\r\n const currentNode = range.commonAncestorContainer.children[range.startOffset];\r\n if (!util.isFormatElement(currentNode) && !util.isComponent(currentNode)) {\r\n const format = util.createElement(options.defaultTag);\r\n const br = util.createElement('BR');\r\n format.appendChild(br);\r\n context.element.wysiwyg.insertBefore(format, currentNode);\r\n this.setRange(br, 0, br, 0);\r\n return;\r\n }\r\n }\r\n this.setRange(range.startContainer, range.startOffset, range.endContainer, range.endOffset);\r\n } catch (e) {\r\n this.nativeFocus();\r\n }\r\n }\r\n\r\n event._applyTagEffects();\r\n if (this._isBalloon) event._toggleToolbarBalloon();\r\n },\r\n\r\n /**\r\n * @description If \"focusEl\" is a component, then that component is selected; if it is a format element, the last text is selected\r\n * If \"focusEdge\" is null, then selected last element\r\n * @param {Element|null} focusEl Focus element\r\n */\r\n focusEdge: function (focusEl) {\r\n if (!focusEl) focusEl = context.element.wysiwyg.lastElementChild;\r\n\r\n const fileComponentInfo = this.getFileComponent(focusEl);\r\n if (fileComponentInfo) {\r\n this.selectComponent(fileComponentInfo.target, fileComponentInfo.pluginName);\r\n } else if (focusEl) {\r\n focusEl = util.getChildElement(focusEl, function (current) { return current.childNodes.length === 0 || current.nodeType === 3; }, true);\r\n if (!focusEl) this.nativeFocus();\r\n else this.setRange(focusEl, focusEl.textContent.length, focusEl, focusEl.textContent.length);\r\n } else {\r\n this.focus();\r\n }\r\n },\r\n\r\n /**\r\n * @description Focusout to wysiwyg area (.blur())\r\n */\r\n blur: function () {\r\n if (options.iframe) {\r\n context.element.wysiwygFrame.blur();\r\n } else {\r\n context.element.wysiwyg.blur();\r\n }\r\n },\r\n\r\n /**\r\n * @description Set current editor's range object and return.\r\n * @param {Node} startCon The startContainer property of the selection object.\r\n * @param {Number} startOff The startOffset property of the selection object.\r\n * @param {Node} endCon The endContainer property of the selection object.\r\n * @param {Number} endOff The endOffset property of the selection object.\r\n * @returns {Object} Range object.\r\n */\r\n setRange: function (startCon, startOff, endCon, endOff) {\r\n if (!startCon || !endCon) return;\r\n if (startOff > startCon.textContent.length) startOff = startCon.textContent.length;\r\n if (endOff > endCon.textContent.length) endOff = endCon.textContent.length;\r\n if (util.isFormatElement(startCon)) {\r\n startCon = startCon.childNodes[startOff] || startCon.childNodes[startOff - 1] || startCon;\r\n startOff = startOff > 0 ? startCon.nodeType === 1 ? 1 : startCon.textContent ? startCon.textContent.length : 0 : 0;\r\n }\r\n if (util.isFormatElement(endCon)) {\r\n endCon = endCon.childNodes[endOff] || endCon.childNodes[endOff - 1] || endCon;\r\n endOff = endOff > 0 ? endCon.nodeType === 1 ? 1 : endCon.textContent ? endCon.textContent.length : 0 : 0;\r\n }\r\n\r\n const range = this._wd.createRange();\r\n\r\n try {\r\n range.setStart(startCon, startOff);\r\n range.setEnd(endCon, endOff);\r\n } catch (error) {\r\n console.warn('[SUNEDITOR.core.focus.error] ' + error);\r\n this.nativeFocus();\r\n return;\r\n }\r\n\r\n const selection = this.getSelection();\r\n\r\n if (selection.removeAllRanges) {\r\n selection.removeAllRanges();\r\n }\r\n\r\n selection.addRange(range);\r\n this._rangeInfo(range, this.getSelection());\r\n if (options.iframe) this.__focus();\r\n\r\n return range;\r\n },\r\n\r\n /**\r\n * @description Remove range object and button effect\r\n */\r\n removeRange: function () {\r\n this._variable._range = null;\r\n this._variable._selectionNode = null;\r\n if (this.hasFocus) this.getSelection().removeAllRanges();\r\n this._setKeyEffect([]);\r\n },\r\n\r\n /**\r\n * @description Get current editor's range object\r\n * @returns {Object}\r\n */\r\n getRange: function () {\r\n const range = this._variable._range || this._createDefaultRange();\r\n const selection = this.getSelection();\r\n if (range.collapsed === selection.isCollapsed || !context.element.wysiwyg.contains(selection.focusNode)) return range;\r\n\r\n if (selection.rangeCount > 0) {\r\n this._variable._range = selection.getRangeAt(0);\r\n return this._variable._range;\r\n } else {\r\n const sc = selection.anchorNode, ec = selection.focusNode, so = selection.anchorOffset, eo = selection.focusOffset;\r\n const compareValue = util.compareElements(sc, ec);\r\n const rightDir = compareValue.ancestor && (compareValue.result === 0 ? so <= eo : compareValue.result > 1 ? true : false);\r\n return this.setRange(\r\n rightDir ? sc : ec,\r\n rightDir ? so : eo,\r\n rightDir ? ec : sc,\r\n rightDir ? eo : so\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * @description If the \"range\" object is a non-editable area, add a line at the top of the editor and update the \"range\" object.\r\n * Returns a new \"range\" or argument \"range\".\r\n * @param {Object} range core.getRange()\r\n * @param {Element|null} container If there is \"container\" argument, it creates a line in front of the container.\r\n * @returns {Object} range\r\n */\r\n getRange_addLine: function (range, container) {\r\n if (this._selectionVoid(range)) {\r\n const wysiwyg = context.element.wysiwyg;\r\n const op = util.createElement(options.defaultTag);\r\n op.innerHTML = '
      ';\r\n wysiwyg.insertBefore(op, container && container !== wysiwyg ? container.nextElementSibling : wysiwyg.firstElementChild);\r\n this.setRange(op.firstElementChild, 0, op.firstElementChild, 1);\r\n range = this._variable._range;\r\n }\r\n return range;\r\n },\r\n\r\n /**\r\n * @description Get window selection obejct\r\n * @returns {Object}\r\n */\r\n getSelection: function () {\r\n const selection = this._shadowRoot && this._shadowRoot.getSelection ? this._shadowRoot.getSelection() : this._ww.getSelection();\r\n if (!this._variable._range && !context.element.wysiwyg.contains(selection.focusNode)) {\r\n selection.removeAllRanges();\r\n selection.addRange(this._createDefaultRange());\r\n }\r\n return selection;\r\n },\r\n\r\n /**\r\n * @description Get current select node\r\n * @returns {Node}\r\n */\r\n getSelectionNode: function () {\r\n if (!context.element.wysiwyg.contains(this._variable._selectionNode)) this._editorRange();\r\n if (!this._variable._selectionNode) {\r\n const selectionNode = util.getChildElement(context.element.wysiwyg.firstChild, function (current) { return current.childNodes.length === 0 || current.nodeType === 3; }, false);\r\n if (!selectionNode) {\r\n this._editorRange();\r\n } else {\r\n this._variable._selectionNode = selectionNode;\r\n return selectionNode;\r\n }\r\n }\r\n return this._variable._selectionNode;\r\n },\r\n\r\n /**\r\n * @description Saving the range object and the currently selected node of editor\r\n * @private\r\n */\r\n _editorRange: function () {\r\n const activeEl = this._wd.activeElement;\r\n if (util.isInputElement(activeEl)) {\r\n this._variable._selectionNode = activeEl;\r\n return activeEl;\r\n }\r\n\r\n const selection = this.getSelection();\r\n if (!selection) return null;\r\n let range = null;\r\n\r\n if (selection.rangeCount > 0) {\r\n range = selection.getRangeAt(0);\r\n } else {\r\n range = this._createDefaultRange();\r\n }\r\n\r\n this._rangeInfo(range, selection);\r\n },\r\n\r\n /**\r\n * @description Set \"range\" and \"selection\" info.\r\n * @param {Object} range range object.\r\n * @param {Object} selection selection object.\r\n */\r\n _rangeInfo: function (range, selection) {\r\n let selectionNode = null;\r\n this._variable._range = range;\r\n\r\n if (range.collapsed) {\r\n if (util.isWysiwygDiv(range.commonAncestorContainer)) selectionNode = range.commonAncestorContainer.children[range.startOffset] || range.commonAncestorContainer;\r\n else selectionNode = range.commonAncestorContainer;\r\n } else {\r\n selectionNode = selection.extentNode || selection.anchorNode;\r\n }\r\n\r\n this._variable._selectionNode = selectionNode;\r\n },\r\n\r\n /**\r\n * @description Return the range object of editor's first child node\r\n * @returns {Object}\r\n * @private\r\n */\r\n _createDefaultRange: function () {\r\n const wysiwyg = context.element.wysiwyg;\r\n const range = this._wd.createRange();\r\n\r\n let firstFormat = wysiwyg.firstElementChild;\r\n let focusEl = null;\r\n if (!firstFormat) {\r\n firstFormat = util.createElement(options.defaultTag);\r\n focusEl = util.createElement('BR');\r\n firstFormat.appendChild(focusEl);\r\n wysiwyg.appendChild(firstFormat);\r\n } else {\r\n focusEl = firstFormat.firstChild;\r\n if (!focusEl) {\r\n focusEl = util.createElement('BR');\r\n firstFormat.appendChild(focusEl);\r\n }\r\n }\r\n\r\n range.setStart(focusEl, 0);\r\n range.setEnd(focusEl, 0);\r\n\r\n return range;\r\n },\r\n\r\n /**\r\n * @description Returns true if there is no valid \"selection\".\r\n * @param {Object} range core.getRange()\r\n * @returns {Object} range\r\n * @private\r\n */\r\n _selectionVoid: function (range) {\r\n const comm = range.commonAncestorContainer;\r\n return (util.isWysiwygDiv(range.startContainer) && util.isWysiwygDiv(range.endContainer)) || /FIGURE/i.test(comm.nodeName) || this._fileManager.regExp.test(comm.nodeName) || util.isMediaComponent(comm);\r\n },\r\n\r\n /**\r\n * @description Reset range object to text node selected status.\r\n * @returns {Boolean} Returns false if there is no valid selection.\r\n * @private\r\n */\r\n _resetRangeToTextNode: function () {\r\n const range = this.getRange();\r\n if (this._selectionVoid(range)) return false;\r\n\r\n let startCon = range.startContainer;\r\n let startOff = range.startOffset;\r\n let endCon = range.endContainer;\r\n let endOff = range.endOffset;\r\n let tempCon, tempOffset, tempChild;\r\n\r\n if (util.isFormatElement(startCon)) {\r\n if (!startCon.childNodes[startOff]) {\r\n startCon = startCon.lastChild || startCon;\r\n startOff = startCon.textContent.length;\r\n } else {\r\n startCon = startCon.childNodes[startOff] || startCon;\r\n startOff = 0;\r\n }\r\n while (startCon && startCon.nodeType === 1 && startCon.firstChild) {\r\n startCon = startCon.firstChild || startCon;\r\n startOff = 0;\r\n }\r\n }\r\n if (util.isFormatElement(endCon)) {\r\n endCon = endCon.childNodes[endOff] || endCon.lastChild || endCon;\r\n while (endCon && endCon.nodeType === 1 && endCon.lastChild) {\r\n endCon = endCon.lastChild;\r\n }\r\n endOff = endCon.textContent.length;\r\n }\r\n\r\n // startContainer\r\n tempCon = util.isWysiwygDiv(startCon) ? context.element.wysiwyg.firstChild : startCon;\r\n tempOffset = startOff;\r\n\r\n if (util.isBreak(tempCon) || (tempCon.nodeType === 1 && tempCon.childNodes.length > 0)) {\r\n const onlyBreak = util.isBreak(tempCon);\r\n if (!onlyBreak) {\r\n while (tempCon && !util.isBreak(tempCon) && tempCon.nodeType === 1) {\r\n tempCon = tempCon.childNodes[tempOffset] || tempCon.nextElementSibling || tempCon.nextSibling;\r\n tempOffset = 0;\r\n }\r\n\r\n let format = util.getFormatElement(tempCon, null);\r\n if (format === util.getRangeFormatElement(format, null)) {\r\n format = util.createElement(util.getParentElement(tempCon, util.isCell) ? 'DIV' : options.defaultTag);\r\n tempCon.parentNode.insertBefore(format, tempCon);\r\n format.appendChild(tempCon);\r\n }\r\n }\r\n\r\n if (util.isBreak(tempCon)) {\r\n const emptyText = util.createTextNode(util.zeroWidthSpace);\r\n tempCon.parentNode.insertBefore(emptyText, tempCon);\r\n tempCon = emptyText;\r\n if (onlyBreak) {\r\n if (startCon === endCon) {\r\n endCon = tempCon;\r\n endOff = 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // set startContainer\r\n startCon = tempCon;\r\n startOff = tempOffset;\r\n\r\n // endContainer\r\n tempCon = util.isWysiwygDiv(endCon) ? context.element.wysiwyg.lastChild : endCon;\r\n tempOffset = endOff;\r\n\r\n if (util.isBreak(tempCon) || (tempCon.nodeType === 1 && tempCon.childNodes.length > 0)) {\r\n const onlyBreak = util.isBreak(tempCon);\r\n if (!onlyBreak) {\r\n while (tempCon && !util.isBreak(tempCon) && tempCon.nodeType === 1) {\r\n tempChild = tempCon.childNodes;\r\n if (tempChild.length === 0) break;\r\n tempCon = tempChild[tempOffset > 0 ? tempOffset - 1 : tempOffset] || !/FIGURE/i.test(tempChild[0].nodeName) ? tempChild[0] : (tempCon.previousElementSibling || tempCon.previousSibling || startCon);\r\n tempOffset = tempOffset > 0 ? tempCon.textContent.length : tempOffset;\r\n }\r\n\r\n let format = util.getFormatElement(tempCon, null);\r\n if (format === util.getRangeFormatElement(format, null)) {\r\n format = util.createElement(util.isCell(format) ? 'DIV' : options.defaultTag);\r\n tempCon.parentNode.insertBefore(format, tempCon);\r\n format.appendChild(tempCon);\r\n }\r\n }\r\n\r\n if (util.isBreak(tempCon)) {\r\n const emptyText = util.createTextNode(util.zeroWidthSpace);\r\n tempCon.parentNode.insertBefore(emptyText, tempCon);\r\n tempCon = emptyText;\r\n tempOffset = 1;\r\n if (onlyBreak && !tempCon.previousSibling) {\r\n util.removeItem(endCon);\r\n }\r\n }\r\n }\r\n\r\n // set endContainer\r\n endCon = tempCon;\r\n endOff = tempOffset;\r\n\r\n // set Range\r\n this.setRange(startCon, startOff, endCon, endOff);\r\n return true;\r\n },\r\n\r\n /**\r\n * @description Returns a \"formatElement\"(util.isFormatElement) array from the currently selected range.\r\n * @param {Function|null} validation The validation function. (Replaces the default validation function-util.isFormatElement(current))\r\n * @returns {Array}\r\n */\r\n getSelectedElements: function (validation) {\r\n if (!this._resetRangeToTextNode()) return [];\r\n let range = this.getRange();\r\n\r\n if (util.isWysiwygDiv(range.startContainer)) {\r\n const children = context.element.wysiwyg.children;\r\n if (children.length === 0) return [];\r\n this.setRange(children[0], 0, children[children.length - 1], children[children.length - 1].textContent.trim().length);\r\n range = this.getRange();\r\n }\r\n\r\n const startCon = range.startContainer;\r\n const endCon = range.endContainer;\r\n const commonCon = range.commonAncestorContainer;\r\n\r\n // get line nodes\r\n const lineNodes = util.getListChildren(commonCon, function (current) {\r\n return validation ? validation(current) : util.isFormatElement(current);\r\n });\r\n\r\n if (!util.isWysiwygDiv(commonCon) && !util.isRangeFormatElement(commonCon)) lineNodes.unshift(util.getFormatElement(commonCon, null));\r\n if (startCon === endCon || lineNodes.length === 1) return lineNodes;\r\n\r\n let startLine = util.getFormatElement(startCon, null);\r\n let endLine = util.getFormatElement(endCon, null);\r\n let startIdx = null;\r\n let endIdx = null;\r\n\r\n const onlyTable = function (current) {\r\n return util.isTable(current) ? /^TABLE$/i.test(current.nodeName) : true;\r\n };\r\n\r\n let startRangeEl = util.getRangeFormatElement(startLine, onlyTable);\r\n let endRangeEl = util.getRangeFormatElement(endLine, onlyTable);\r\n if (util.isTable(startRangeEl) && util.isListCell(startRangeEl.parentNode)) startRangeEl = startRangeEl.parentNode;\r\n if (util.isTable(endRangeEl) && util.isListCell(endRangeEl.parentNode)) endRangeEl = endRangeEl.parentNode;\r\n\r\n const sameRange = startRangeEl === endRangeEl;\r\n for (let i = 0, len = lineNodes.length, line; i < len; i++) {\r\n line = lineNodes[i];\r\n\r\n if (startLine === line || (!sameRange && line === startRangeEl)) {\r\n startIdx = i;\r\n continue;\r\n }\r\n\r\n if (endLine === line || (!sameRange && line === endRangeEl)) {\r\n endIdx = i;\r\n break;\r\n }\r\n }\r\n\r\n if (startIdx === null) startIdx = 0;\r\n if (endIdx === null) endIdx = lineNodes.length - 1;\r\n\r\n return lineNodes.slice(startIdx, endIdx + 1);\r\n },\r\n\r\n /**\r\n * @description Get format elements and components from the selected area. (P, DIV, H[1-6], OL, UL, TABLE..)\r\n * If some of the component are included in the selection, get the entire that component.\r\n * @param {Boolean} removeDuplicate If true, if there is a parent and child tag among the selected elements, the child tag is excluded.\r\n * @returns {Array}\r\n */\r\n getSelectedElementsAndComponents: function (removeDuplicate) {\r\n const commonCon = this.getRange().commonAncestorContainer;\r\n const myComponent = util.getParentElement(commonCon, util.isComponent);\r\n const selectedLines = util.isTable(commonCon) ?\r\n this.getSelectedElements(null) :\r\n this.getSelectedElements(function (current) {\r\n const component = this.getParentElement(current, this.isComponent);\r\n return (this.isFormatElement(current) && (!component || component === myComponent)) || (this.isComponent(current) && !this.getFormatElement(current));\r\n }.bind(util));\r\n\r\n if (removeDuplicate) {\r\n for (let i = 0, len = selectedLines.length; i < len; i++) {\r\n for (let j = i - 1; j >= 0; j--) {\r\n if (selectedLines[j].contains(selectedLines[i])) {\r\n selectedLines.splice(i, 1);\r\n i--; len--;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return selectedLines;\r\n },\r\n\r\n /**\r\n * @description Determine if this offset is the edge offset of container\r\n * @param {Node} container The node of the selection object. (range.startContainer..)\r\n * @param {Number} offset The offset of the selection object. (core.getRange().startOffset...)\r\n * @param {String|undefined} dir Select check point - Both edge, Front edge or End edge. (\"front\": Front edge, \"end\": End edge, undefined: Both edge)\r\n * @returns {Boolean}\r\n */\r\n isEdgePoint: function (container, offset, dir) {\r\n return (dir !== 'end' && offset === 0) || ((!dir || dir !== 'front') && !container.nodeValue && offset === 1) || ((!dir || dir === 'end') && !!container.nodeValue && offset === container.nodeValue.length);\r\n },\r\n\r\n /**\r\n * @description Check if the container and offset values are the edges of the format tag\r\n * @param {Node} container The node of the selection object. (range.startContainer..)\r\n * @param {Number} offset The offset of the selection object. (core.getRange().startOffset...)\r\n * @param {String} dir Select check point - \"front\": Front edge, \"end\": End edge, undefined: Both edge.\r\n * @returns {Array|null}\r\n * @private\r\n */\r\n _isEdgeFormat: function (node, offset, dir) {\r\n if (!this.isEdgePoint(node, offset, dir)) return false;\r\n\r\n const result = [];\r\n dir = dir === 'front' ? 'previousSibling' : 'nextSibling';\r\n while (node && !util.isFormatElement(node) && !util.isWysiwygDiv(node)) {\r\n if (!node[dir] || (util.isBreak(node[dir]) && !node[dir][dir])) {\r\n if (node.nodeType === 1) result.push(node.cloneNode(false));\r\n node = node.parentNode;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * @description Show loading box\r\n */\r\n showLoading: function () {\r\n context.element.loading.style.display = 'block';\r\n },\r\n\r\n /**\r\n * @description Close loading box\r\n */\r\n closeLoading: function () {\r\n context.element.loading.style.display = 'none';\r\n },\r\n\r\n /**\r\n * @description Append format element to sibling node of argument element.\r\n * If the \"formatNodeName\" argument value is present, the tag of that argument value is inserted,\r\n * If not, the currently selected format tag is inserted.\r\n * @param {Element} element Insert as siblings of that element\r\n * @param {String|Element|null} formatNode Node name or node obejct to be inserted\r\n * @returns {Element}\r\n */\r\n appendFormatTag: function (element, formatNode) {\r\n if (!element || !element.parentNode) return null;\r\n\r\n const currentFormatEl = util.getFormatElement(this.getSelectionNode(), null);\r\n let oFormat = null;\r\n if (!util.isFormatElement(element) && util.isFreeFormatElement(currentFormatEl || element.parentNode)) {\r\n oFormat = util.createElement('BR');\r\n } else {\r\n const oFormatName = formatNode ? (typeof formatNode === 'string' ? formatNode : formatNode.nodeName) : (util.isFormatElement(currentFormatEl) && !util.isRangeFormatElement(currentFormatEl) && !util.isFreeFormatElement(currentFormatEl)) ? currentFormatEl.nodeName : options.defaultTag;\r\n oFormat = util.createElement(oFormatName);\r\n oFormat.innerHTML = '
      ';\r\n if ((formatNode && typeof formatNode !== 'string') || (!formatNode && util.isFormatElement(currentFormatEl))) {\r\n util.copyTagAttributes(oFormat, formatNode || currentFormatEl, ['id']);\r\n }\r\n }\r\n\r\n if (util.isCell(element)) element.insertBefore(oFormat, element.nextElementSibling);\r\n else element.parentNode.insertBefore(oFormat, element.nextElementSibling);\r\n\r\n return oFormat;\r\n },\r\n\r\n /**\r\n * @description The method to insert a element and return. (used elements : table, hr, image, video)\r\n * If \"element\" is \"HR\", insert and return the new line.\r\n * @param {Element} element Element to be inserted\r\n * @param {Boolean} notHistoryPush When true, it does not update the history stack and the selection object and return EdgeNodes (util.getEdgeChildNodes)\r\n * @param {Boolean} checkCharCount If true, if \"options.maxCharCount\" is exceeded when \"element\" is added, null is returned without addition.\r\n * @param {Boolean} notSelect If true, Do not automatically select the inserted component.\r\n * @returns {Element}\r\n */\r\n insertComponent: function (element, notHistoryPush, checkCharCount, notSelect) {\r\n if (this.isReadOnly || (checkCharCount && !this.checkCharCount(element, null))) {\r\n return null;\r\n }\r\n\r\n const r = this.removeNode();\r\n this.getRange_addLine(this.getRange(), r.container);\r\n let oNode = null;\r\n let selectionNode = this.getSelectionNode();\r\n let formatEl = util.getFormatElement(selectionNode, null);\r\n\r\n if (util.isListCell(formatEl)) {\r\n this.insertNode(element, selectionNode === formatEl ? null : r.container.nextSibling, false);\r\n if (!element.nextSibling) element.parentNode.appendChild(util.createElement('BR'));\r\n } else {\r\n if (this.getRange().collapsed && (r.container.nodeType === 3 || util.isBreak(r.container))) {\r\n const depthFormat = util.getParentElement(r.container, function (current) { return this.isRangeFormatElement(current); }.bind(util));\r\n oNode = util.splitElement(r.container, r.offset, !depthFormat ? 0 : util.getElementDepth(depthFormat) + 1);\r\n if (oNode) formatEl = oNode.previousSibling;\r\n }\r\n this.insertNode(element, util.isRangeFormatElement(formatEl) ? null : formatEl, false);\r\n if (formatEl && util.onlyZeroWidthSpace(formatEl)) util.removeItem(formatEl);\r\n }\r\n\r\n if (!notSelect) {\r\n this.setRange(element, 0, element, 0);\r\n\r\n const fileComponentInfo = this.getFileComponent(element);\r\n if (fileComponentInfo) {\r\n this.selectComponent(fileComponentInfo.target, fileComponentInfo.pluginName);\r\n } else if (oNode) {\r\n oNode = util.getEdgeChildNodes(oNode, null).sc || oNode;\r\n this.setRange(oNode, 0, oNode, 0);\r\n }\r\n }\r\n\r\n // history stack\r\n if (!notHistoryPush) this.history.push(1);\r\n\r\n return oNode || element;\r\n },\r\n\r\n /**\r\n * @description Gets the file component and that plugin name\r\n * return: {target, component, pluginName} | null\r\n * @param {Element} element Target element (figure tag, component div, file tag)\r\n * @returns {Object|null}\r\n */\r\n getFileComponent: function (element) {\r\n if (!this._fileManager.queryString || !element) return null;\r\n\r\n let target, pluginName;\r\n if (/^FIGURE$/i.test(element.nodeName) || /se-component/.test(element.className)) {\r\n target = element.querySelector(this._fileManager.queryString);\r\n }\r\n if (!target && element.nodeName && this._fileManager.regExp.test(element.nodeName)) {\r\n target = element;\r\n }\r\n\r\n if (target) {\r\n pluginName = this._fileManager.pluginMap[target.nodeName.toLowerCase()];\r\n if (pluginName) {\r\n return {\r\n target: target,\r\n component: util.getParentElement(target, util.isComponent),\r\n pluginName: pluginName\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * @description The component(image, video) is selected and the resizing module is called.\r\n * @param {Element} element Element tag (img, iframe, video)\r\n * @param {String} pluginName Plugin name (image, video)\r\n */\r\n selectComponent: function (element, pluginName) {\r\n if (util.isUneditableComponent(util.getParentElement(element, util.isComponent)) || util.isUneditableComponent(element)) return false;\r\n if (!this.hasFocus) this.focus();\r\n const plugin = this.plugins[pluginName];\r\n if (!plugin) return;\r\n _w.setTimeout(function () {\r\n if (typeof plugin.select === 'function') this.callPlugin(pluginName, plugin.select.bind(this, element), null);\r\n this._setComponentLineBreaker(element);\r\n }.bind(this));\r\n },\r\n\r\n /**\r\n * @description Set line breaker of component\r\n * @param {Element} element Element tag (img, iframe, video)\r\n * @private\r\n */\r\n _setComponentLineBreaker: function (element) {\r\n // line breaker\r\n this._lineBreaker.style.display = 'none';\r\n const container = util.getParentElement(element, util.isComponent);\r\n const t_style = context.element.lineBreaker_t.style;\r\n const b_style = context.element.lineBreaker_b.style;\r\n const target = this.context.resizing.resizeContainer.style.display === 'block' ? this.context.resizing.resizeContainer : element;\r\n\r\n const isList = util.isListCell(container.parentNode);\r\n let componentTop, wScroll, w;\r\n // top\r\n if (isList ? !container.previousSibling : !util.isFormatElement(container.previousElementSibling)) {\r\n this._variable._lineBreakComp = container;\r\n wScroll = context.element.wysiwyg.scrollTop;\r\n componentTop = util.getOffset(element, context.element.wysiwygFrame).top + wScroll;\r\n w = (target.offsetWidth / 2) / 2;\r\n\r\n t_style.top = (componentTop - wScroll - 12) + 'px';\r\n t_style.left = (util.getOffset(target).left + w) + 'px';\r\n t_style.display = 'block';\r\n } else {\r\n t_style.display = 'none';\r\n }\r\n // bottom\r\n if (isList ? !container.nextSibling : !util.isFormatElement(container.nextElementSibling)) {\r\n if (!componentTop) {\r\n this._variable._lineBreakComp = container;\r\n wScroll = context.element.wysiwyg.scrollTop;\r\n componentTop = util.getOffset(element, context.element.wysiwygFrame).top + wScroll;\r\n w = (target.offsetWidth / 2) / 2;\r\n }\r\n\r\n b_style.top = (componentTop + target.offsetHeight - wScroll - 12) + 'px';\r\n b_style.left = (util.getOffset(target).left + target.offsetWidth - w - 24) + 'px';\r\n b_style.display = 'block';\r\n } else {\r\n b_style.display = 'none';\r\n }\r\n },\r\n\r\n _checkDuplicateNode: function (oNode, parentNode) {\r\n (function recursionFunc(current) {\r\n core._dupleCheck(current, parentNode);\r\n const childNodes = current.childNodes;\r\n for (let i = 0, len = childNodes.length; i < len; i++) {\r\n recursionFunc(childNodes[i]);\r\n }\r\n })(oNode);\r\n },\r\n\r\n _dupleCheck: function (oNode, parentNode) {\r\n if (!util.isTextStyleElement(oNode)) return;\r\n\r\n const oStyles = (oNode.style.cssText.match(/[^;]+;/g) || []).map(function(v){ return v.trim(); });\r\n const nodeName = oNode.nodeName;\r\n if (/^span$/i.test(nodeName) && oStyles.length === 0) return oNode;\r\n\r\n let duple = false;\r\n (function recursionFunc(ancestor) {\r\n if (util.isWysiwygDiv(ancestor) || !util.isTextStyleElement(ancestor)) return;\r\n if (ancestor.nodeName === nodeName) {\r\n duple = true;\r\n const styles = ancestor.style.cssText.match(/[^;]+;/g) || [];\r\n for (let i = 0, len = styles.length, j; i < len; i++) {\r\n if ((j = oStyles.indexOf(styles[i].trim())) > -1) {\r\n oStyles.splice(j, 1);\r\n }\r\n }\r\n for (let i = 0, len = ancestor.classList.length; i < len; i++) {\r\n oNode.classList.remove(ancestor.classList[i]);\r\n }\r\n }\r\n\r\n recursionFunc(ancestor.parentElement);\r\n })(parentNode);\r\n\r\n if (duple) {\r\n if (!(oNode.style.cssText = oStyles.join(' '))) {\r\n oNode.setAttribute('style', '');\r\n oNode.removeAttribute('style');\r\n }\r\n if (!oNode.attributes.length) {\r\n oNode.setAttribute('data-se-duple', 'true');\r\n }\r\n }\r\n\r\n return oNode;\r\n },\r\n\r\n /**\r\n * @description Delete selected node and insert argument value node and return.\r\n * If the \"afterNode\" exists, it is inserted after the \"afterNode\"\r\n * Inserting a text node merges with both text nodes on both sides and returns a new \"{ container, startOffset, endOffset }\".\r\n * @param {Node} oNode Element to be inserted\r\n * @param {Node|null} afterNode If the node exists, it is inserted after the node\r\n * @param {Boolean} checkCharCount If true, if \"options.maxCharCount\" is exceeded when \"element\" is added, null is returned without addition.\r\n * @returns {Object|Node|null}\r\n */\r\n insertNode: function (oNode, afterNode, checkCharCount) {\r\n if (this.isReadOnly || (checkCharCount && !this.checkCharCount(oNode, null))) {\r\n return null;\r\n }\r\n\r\n let fNode = null;\r\n let range = this.getRange();\r\n let line = util.isListCell(range.commonAncestorContainer) ? range.commonAncestorContainer : util.getFormatElement(this.getSelectionNode(), null);\r\n let insertListCell = util.isListCell(line) && (util.isListCell(oNode) || util.isList(oNode));\r\n\r\n let parentNode, originAfter, tempAfterNode, tempParentNode = null;\r\n const freeFormat = util.isFreeFormatElement(line);\r\n const isFormats = (!freeFormat && (util.isFormatElement(oNode) || util.isRangeFormatElement(oNode))) || util.isComponent(oNode);\r\n\r\n if (insertListCell) {\r\n tempAfterNode = afterNode || util.isList(oNode) ? line.lastChild : line.nextElementSibling;\r\n tempParentNode = util.isList(oNode) ? line : (tempAfterNode || line).parentNode;\r\n }\r\n\r\n if (!afterNode && (isFormats || util.isComponent(oNode) || util.isMedia(oNode))) {\r\n const isEdge = this.isEdgePoint(range.endContainer, range.endOffset, 'end');\r\n const r = this.removeNode();\r\n const container = r.container;\r\n const prevContainer = (container === r.prevContainer && range.collapsed) ? null : r.prevContainer;\r\n\r\n if (insertListCell && prevContainer) {\r\n tempParentNode = prevContainer.nodeType === 3 ? prevContainer.parentNode : prevContainer;\r\n if (tempParentNode.contains(container)) {\r\n let sameParent = true;\r\n tempAfterNode = container;\r\n while (tempAfterNode.parentNode && tempAfterNode.parentNode !== tempParentNode) {\r\n tempAfterNode = tempAfterNode.parentNode;\r\n sameParent = false;\r\n }\r\n if (sameParent && container === prevContainer) tempAfterNode = tempAfterNode.nextSibling;\r\n } else {\r\n tempAfterNode = null;\r\n }\r\n } else if (insertListCell && util.isListCell(container) && !line.parentElement) {\r\n line = util.createElement('LI');\r\n tempParentNode.appendChild(line);\r\n container.appendChild(tempParentNode);\r\n tempAfterNode = null;\r\n } else if (container.nodeType === 3 || util.isBreak(container) || insertListCell) {\r\n const depthFormat = util.getParentElement(container, function (current) { return this.isRangeFormatElement(current) || this.isListCell(current); }.bind(util));\r\n afterNode = util.splitElement(container, r.offset, !depthFormat ? 0 : util.getElementDepth(depthFormat) + 1);\r\n if (!afterNode) {\r\n tempAfterNode = afterNode = line;\r\n } else if (insertListCell) {\r\n if (line.contains(container)) {\r\n const subList = util.isList(line.lastElementChild);\r\n let newCell = null;\r\n if (!isEdge) {\r\n newCell = line.cloneNode(false);\r\n newCell.appendChild(afterNode.textContent.trim() ? afterNode : util.createTextNode(util.zeroWidthSpace));\r\n }\r\n if (subList) {\r\n if (!newCell) {\r\n newCell = line.cloneNode(false);\r\n newCell.appendChild(util.createTextNode(util.zeroWidthSpace));\r\n }\r\n newCell.appendChild(line.lastElementChild);\r\n }\r\n if (newCell) {\r\n line.parentNode.insertBefore(newCell, line.nextElementSibling);\r\n tempAfterNode = afterNode = newCell;\r\n }\r\n }\r\n } else {\r\n afterNode = afterNode.previousSibling;\r\n }\r\n }\r\n }\r\n\r\n range = (!afterNode && !isFormats) ? this.getRange_addLine(this.getRange(), null) : this.getRange();\r\n const commonCon = range.commonAncestorContainer;\r\n const startOff = range.startOffset;\r\n const endOff = range.endOffset;\r\n const formatRange = range.startContainer === commonCon && util.isFormatElement(commonCon);\r\n const startCon = formatRange ? (commonCon.childNodes[startOff] || commonCon.childNodes[0] || range.startContainer) : range.startContainer;\r\n const endCon = formatRange ? (commonCon.childNodes[endOff] || commonCon.childNodes[commonCon.childNodes.length - 1] || range.endContainer) : range.endContainer;\r\n\r\n if (!insertListCell) {\r\n if (!afterNode) {\r\n parentNode = startCon;\r\n if (startCon.nodeType === 3) {\r\n parentNode = startCon.parentNode;\r\n }\r\n\r\n /** No Select range node */\r\n if (range.collapsed) {\r\n if (commonCon.nodeType === 3) {\r\n if (commonCon.textContent.length > endOff) afterNode = commonCon.splitText(endOff);\r\n else afterNode = commonCon.nextSibling;\r\n } else {\r\n if (!util.isBreak(parentNode)) {\r\n let c = parentNode.childNodes[startOff];\r\n const focusNode = (c && c.nodeType === 3 && util.onlyZeroWidthSpace(c) && util.isBreak(c.nextSibling)) ? c.nextSibling : c;\r\n if (focusNode) {\r\n if (!focusNode.nextSibling && util.isBreak(focusNode)) {\r\n parentNode.removeChild(focusNode);\r\n afterNode = null;\r\n } else {\r\n afterNode = (util.isBreak(focusNode) && !util.isBreak(oNode)) ? focusNode : focusNode.nextSibling;\r\n }\r\n } else {\r\n afterNode = null;\r\n }\r\n } else {\r\n afterNode = parentNode;\r\n parentNode = parentNode.parentNode;\r\n }\r\n }\r\n } else { /** Select range nodes */\r\n const isSameContainer = startCon === endCon;\r\n if (isSameContainer) {\r\n if (this.isEdgePoint(endCon, endOff)) afterNode = endCon.nextSibling;\r\n else afterNode = endCon.splitText(endOff);\r\n\r\n let removeNode = startCon;\r\n if (!this.isEdgePoint(startCon, startOff)) removeNode = startCon.splitText(startOff);\r\n\r\n parentNode.removeChild(removeNode);\r\n if (parentNode.childNodes.length === 0 && isFormats) {\r\n parentNode.innerHTML = '
      ';\r\n }\r\n }\r\n else {\r\n const removedTag = this.removeNode();\r\n const container = removedTag.container;\r\n const prevContainer = removedTag.prevContainer;\r\n\r\n if (container && container.childNodes.length === 0 && isFormats) {\r\n if (util.isFormatElement(container)) {\r\n container.innerHTML = '
      ';\r\n } else if (util.isRangeFormatElement(container)) {\r\n container.innerHTML = '<' + options.defaultTag + '>
      ';\r\n }\r\n }\r\n\r\n if (util.isListCell(container) && oNode.nodeType === 3) {\r\n parentNode = container;\r\n afterNode = null;\r\n } else if (!isFormats && prevContainer) {\r\n parentNode = prevContainer.nodeType === 3 ? prevContainer.parentNode : prevContainer;\r\n if (parentNode.contains(container)) {\r\n let sameParent = true;\r\n afterNode = container;\r\n while (afterNode.parentNode && afterNode.parentNode !== parentNode) {\r\n afterNode = afterNode.parentNode;\r\n sameParent = false;\r\n }\r\n if (sameParent && container === prevContainer) afterNode = afterNode.nextSibling;\r\n } else {\r\n afterNode = null;\r\n }\r\n } else if (util.isWysiwygDiv(container) && !util.isFormatElement(oNode)) {\r\n parentNode = container.appendChild(util.createElement(options.defaultTag));\r\n afterNode = null;\r\n } else {\r\n afterNode = isFormats ? endCon : container === prevContainer ? container.nextSibling : container;\r\n parentNode = (!afterNode || !afterNode.parentNode) ? commonCon : afterNode.parentNode;\r\n }\r\n\r\n while (afterNode && !util.isFormatElement(afterNode) && afterNode.parentNode !== commonCon) {\r\n afterNode = afterNode.parentNode;\r\n }\r\n }\r\n }\r\n } else { // has afterNode\r\n parentNode = afterNode.parentNode;\r\n afterNode = afterNode.nextSibling;\r\n originAfter = true;\r\n }\r\n }\r\n\r\n try {\r\n // set node\r\n if (!insertListCell) {\r\n if (util.isWysiwygDiv(afterNode) || parentNode === context.element.wysiwyg.parentNode) {\r\n parentNode = context.element.wysiwyg;\r\n afterNode = null;\r\n }\r\n\r\n if (util.isFormatElement(oNode) || util.isRangeFormatElement(oNode) || (!util.isListCell(parentNode) && util.isComponent(oNode))) {\r\n const oldParent = parentNode;\r\n if (util.isList(afterNode)) {\r\n parentNode = afterNode;\r\n afterNode = null;\r\n } else if (util.isListCell(afterNode)) {\r\n parentNode = afterNode.previousElementSibling || afterNode;\r\n } else if (!originAfter && !afterNode) {\r\n const r = this.removeNode();\r\n const container = r.container.nodeType === 3 ? (util.isListCell(util.getFormatElement(r.container, null)) ? r.container : (util.getFormatElement(r.container, null) || r.container.parentNode)) : r.container;\r\n const rangeCon = util.isWysiwygDiv(container) || util.isRangeFormatElement(container);\r\n parentNode = rangeCon ? container : container.parentNode;\r\n afterNode = rangeCon ? null : container.nextSibling;\r\n }\r\n\r\n if (oldParent.childNodes.length === 0 && parentNode !== oldParent) util.removeItem(oldParent);\r\n }\r\n\r\n if (isFormats && !freeFormat && !util.isRangeFormatElement(parentNode) && !util.isListCell(parentNode) && !util.isWysiwygDiv(parentNode)) {\r\n afterNode = parentNode.nextElementSibling;\r\n parentNode = parentNode.parentNode;\r\n }\r\n\r\n if (util.isWysiwygDiv(parentNode) && (oNode.nodeType === 3 || util.isBreak(oNode))) {\r\n const fomatNode = util.createElement(options.defaultTag);\r\n fomatNode.appendChild(oNode);\r\n fNode = oNode;\r\n oNode = fomatNode;\r\n }\r\n }\r\n\r\n // insert--\r\n if (insertListCell) {\r\n if (!tempParentNode.parentNode) {\r\n parentNode = context.element.wysiwyg;\r\n afterNode = null;\r\n } else {\r\n parentNode = tempParentNode;\r\n afterNode = tempAfterNode;\r\n }\r\n } else {\r\n afterNode = parentNode === afterNode ? parentNode.lastChild : afterNode;\r\n }\r\n\r\n if (util.isListCell(oNode) && !util.isList(parentNode)) {\r\n if (util.isListCell(parentNode)) {\r\n afterNode = parentNode.nextElementSibling;\r\n parentNode = parentNode.parentNode;\r\n } else {\r\n const ul = util.createElement('ol');\r\n parentNode.insertBefore(ul, afterNode);\r\n parentNode = ul;\r\n afterNode = null;\r\n }\r\n insertListCell = true;\r\n }\r\n\r\n this._checkDuplicateNode(oNode, parentNode);\r\n parentNode.insertBefore(oNode, afterNode);\r\n\r\n if (insertListCell) {\r\n if (util.onlyZeroWidthSpace(line.textContent.trim())) {\r\n util.removeItem(line);\r\n oNode = oNode.lastChild;\r\n } else {\r\n const chList = util.getArrayItem(line.children, util.isList);\r\n if (chList) {\r\n if (oNode !== chList) {\r\n oNode.appendChild(chList);\r\n oNode = chList.previousSibling;\r\n } else {\r\n parentNode.appendChild(oNode);\r\n oNode = parentNode;\r\n }\r\n\r\n if (util.onlyZeroWidthSpace(line.textContent.trim())) {\r\n util.removeItem(line);\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n parentNode.appendChild(oNode);\r\n console.warn('[SUNEDITOR.insertNode.warn] ' + error);\r\n } finally {\r\n if (fNode) oNode = fNode;\r\n\r\n const dupleNodes = parentNode.querySelectorAll('[data-se-duple]');\r\n if (dupleNodes.length > 0) {\r\n for (let i = 0, len = dupleNodes.length, d, c, ch, parent; i < len; i++) {\r\n d = dupleNodes[i];\r\n ch = d.childNodes;\r\n parent = d.parentNode;\r\n\r\n while (ch[0]) {\r\n c = ch[0];\r\n parent.insertBefore(c, d);\r\n }\r\n\r\n if (d === oNode) oNode = c;\r\n util.removeItem(d);\r\n }\r\n }\r\n\r\n if ((util.isFormatElement(oNode) || util.isComponent(oNode)) && startCon === endCon) {\r\n const cItem = util.getFormatElement(commonCon, null);\r\n if (cItem && cItem.nodeType === 1 && util.isEmptyLine(cItem)) {\r\n util.removeItem(cItem);\r\n }\r\n }\r\n\r\n if (freeFormat && (util.isFormatElement(oNode) || util.isRangeFormatElement(oNode))) {\r\n oNode = this._setIntoFreeFormat(oNode);\r\n }\r\n\r\n if (!util.isComponent(oNode)) {\r\n let offset = 1;\r\n if (oNode.nodeType === 3) {\r\n offset = oNode.textContent.length;\r\n this.setRange(oNode, offset, oNode, offset);\r\n } else if (!util.isBreak(oNode) && !util.isListCell(oNode) && util.isFormatElement(parentNode)) {\r\n let zeroWidth = null;\r\n if (!oNode.previousSibling || util.isBreak(oNode.previousSibling)) {\r\n zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n oNode.parentNode.insertBefore(zeroWidth, oNode);\r\n }\r\n\r\n if (!oNode.nextSibling || util.isBreak(oNode.nextSibling)) {\r\n zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n oNode.parentNode.insertBefore(zeroWidth, oNode.nextSibling);\r\n }\r\n\r\n if (util._isIgnoreNodeChange(oNode)) {\r\n oNode = oNode.nextSibling;\r\n offset = 0;\r\n }\r\n }\r\n\r\n this.setRange(oNode, offset, oNode, offset);\r\n }\r\n\r\n return oNode;\r\n }\r\n },\r\n\r\n _setIntoFreeFormat: function (oNode) {\r\n const parentNode = oNode.parentNode;\r\n let oNodeChildren, lastONode;\r\n\r\n while (util.isFormatElement(oNode) || util.isRangeFormatElement(oNode)) {\r\n oNodeChildren = oNode.childNodes;\r\n lastONode = null;\r\n\r\n while (oNodeChildren[0]) {\r\n lastONode = oNodeChildren[0];\r\n if (util.isFormatElement(lastONode) || util.isRangeFormatElement(lastONode)) {\r\n this._setIntoFreeFormat(lastONode);\r\n if (!oNode.parentNode) break;\r\n oNodeChildren = oNode.childNodes;\r\n continue;\r\n }\r\n\r\n parentNode.insertBefore(lastONode, oNode);\r\n }\r\n\r\n if (oNode.childNodes.length === 0) util.removeItem(oNode);\r\n oNode = util.createElement('BR');\r\n parentNode.insertBefore(oNode, lastONode.nextSibling);\r\n }\r\n\r\n return oNode;\r\n },\r\n\r\n /**\r\n * @description Delete the currently selected nodes and reset selection range\r\n * Returns {container: \"the last element after deletion\", offset: \"offset\", prevContainer: \"previousElementSibling Of the deleted area\"}\r\n * @returns {Object}\r\n */\r\n removeNode: function () {\r\n this._resetRangeToTextNode();\r\n\r\n const range = this.getRange();\r\n\r\n if (range.startContainer === range.endContainer) {\r\n const fileComponent = util.getParentElement(range.startContainer, util.isMediaComponent);\r\n if (fileComponent) {\r\n const br = util.createElement('BR');\r\n const format = util.createElement(options.defaultTag);\r\n format.appendChild(br);\r\n\r\n util.changeElement(fileComponent, format);\r\n\r\n core.setRange(format, 0, format, 0);\r\n this.history.push(true);\r\n\r\n return {\r\n container: format,\r\n offset: 0,\r\n prevContainer: null\r\n };\r\n }\r\n }\r\n\r\n const isStartEdge = range.startOffset === 0;\r\n const isEndEdge = core.isEdgePoint(range.endContainer, range.endOffset, 'end');\r\n let prevContainer = null;\r\n let startPrevEl = null;\r\n let endNextEl = null;\r\n if (isStartEdge) {\r\n startPrevEl = util.getFormatElement(range.startContainer);\r\n if (startPrevEl) {\r\n prevContainer = startPrevEl.previousElementSibling;\r\n startPrevEl = prevContainer;\r\n }\r\n }\r\n if (isEndEdge) {\r\n endNextEl = util.getFormatElement(range.endContainer);\r\n endNextEl = endNextEl ? endNextEl.nextElementSibling : endNextEl;\r\n }\r\n\r\n let container, offset = 0;\r\n let startCon = range.startContainer;\r\n let endCon = range.endContainer;\r\n let startOff = range.startOffset;\r\n let endOff = range.endOffset;\r\n const commonCon = (range.commonAncestorContainer.nodeType === 3 && range.commonAncestorContainer.parentNode === startCon.parentNode) ? startCon.parentNode : range.commonAncestorContainer;\r\n if (commonCon === startCon && commonCon === endCon) {\r\n startCon = commonCon.children[startOff];\r\n endCon = commonCon.children[endOff];\r\n startOff = endOff = 0;\r\n }\r\n\r\n if (!startCon || !endCon) return {\r\n container: commonCon,\r\n offset: 0\r\n };\r\n\r\n if (startCon === endCon && range.collapsed) {\r\n if (startCon.textContent && util.onlyZeroWidthSpace(startCon.textContent.substr(startOff))) {\r\n return {\r\n container: startCon,\r\n offset: startOff,\r\n prevContainer: startCon && startCon.parentNode ? startCon : null\r\n };\r\n }\r\n }\r\n\r\n let beforeNode = null;\r\n let afterNode = null;\r\n\r\n const childNodes = util.getListChildNodes(commonCon, null);\r\n let startIndex = util.getArrayIndex(childNodes, startCon);\r\n let endIndex = util.getArrayIndex(childNodes, endCon);\r\n\r\n if (childNodes.length > 0 && startIndex > -1 && endIndex > -1) {\r\n for (let i = startIndex + 1, startNode = startCon; i >= 0; i--) {\r\n if (childNodes[i] === startNode.parentNode && childNodes[i].firstChild === startNode && startOff === 0) {\r\n startIndex = i;\r\n startNode = startNode.parentNode;\r\n }\r\n }\r\n\r\n for (let i = endIndex - 1, endNode = endCon; i > startIndex; i--) {\r\n if (childNodes[i] === endNode.parentNode && childNodes[i].nodeType === 1) {\r\n childNodes.splice(i, 1);\r\n endNode = endNode.parentNode;\r\n --endIndex;\r\n }\r\n }\r\n } else {\r\n if (childNodes.length === 0) {\r\n if (util.isFormatElement(commonCon) || util.isRangeFormatElement(commonCon) || util.isWysiwygDiv(commonCon) || util.isBreak(commonCon) || util.isMedia(commonCon)) {\r\n return {\r\n container: commonCon,\r\n offset: 0\r\n };\r\n } else if (commonCon.nodeType === 3) {\r\n return {\r\n container: commonCon,\r\n offset: endOff\r\n };\r\n }\r\n childNodes.push(commonCon);\r\n startCon = endCon = commonCon;\r\n } else {\r\n startCon = endCon = childNodes[0];\r\n if (util.isBreak(startCon) || util.onlyZeroWidthSpace(startCon)) {\r\n return {\r\n container: util.isMedia(commonCon) ? commonCon : startCon,\r\n offset: 0\r\n };\r\n }\r\n }\r\n\r\n startIndex = endIndex = 0;\r\n }\r\n\r\n for (let i = startIndex; i <= endIndex; i++) {\r\n const item = childNodes[i];\r\n\r\n if (item.length === 0 || (item.nodeType === 3 && item.data === undefined)) {\r\n this._nodeRemoveListItem(item);\r\n continue;\r\n }\r\n\r\n if (item === startCon) {\r\n if (startCon.nodeType === 1) {\r\n if (util.isComponent(startCon)) continue;\r\n else beforeNode = util.createTextNode(startCon.textContent);\r\n } else {\r\n if (item === endCon) {\r\n beforeNode = util.createTextNode(startCon.substringData(0, startOff) + endCon.substringData(endOff, (endCon.length - endOff)));\r\n offset = startOff;\r\n } else {\r\n beforeNode = util.createTextNode(startCon.substringData(0, startOff));\r\n }\r\n }\r\n\r\n if (beforeNode.length > 0) {\r\n startCon.data = beforeNode.data;\r\n } else {\r\n this._nodeRemoveListItem(startCon);\r\n }\r\n\r\n if (item === endCon) break;\r\n continue;\r\n }\r\n\r\n if (item === endCon) {\r\n if (endCon.nodeType === 1) {\r\n if (util.isComponent(endCon)) continue;\r\n else afterNode = util.createTextNode(endCon.textContent);\r\n } else {\r\n afterNode = util.createTextNode(endCon.substringData(endOff, (endCon.length - endOff)));\r\n }\r\n\r\n if (afterNode.length > 0) {\r\n endCon.data = afterNode.data;\r\n } else {\r\n this._nodeRemoveListItem(endCon);\r\n }\r\n\r\n continue;\r\n }\r\n\r\n this._nodeRemoveListItem(item);\r\n }\r\n\r\n const endUl = util.getParentElement(endCon, 'ul');\r\n const startLi = util.getParentElement(startCon, 'li');\r\n if (endUl && startLi && startLi.contains(endUl)) {\r\n container = endUl.previousSibling;\r\n offset = container.textContent.length;\r\n } else {\r\n container = endCon && endCon.parentNode ? endCon : startCon && startCon.parentNode ? startCon : (range.endContainer || range.startContainer);\r\n offset = (!isStartEdge && !isEndEdge) ? offset : isEndEdge ? container.textContent.length : 0;\r\n }\r\n\r\n if (!util.isWysiwygDiv(container) && container.childNodes.length === 0) {\r\n const rc = util.removeItemAllParents(container, null, null);\r\n if (rc) container = rc.sc || rc.ec || context.element.wysiwyg;\r\n }\r\n\r\n if (!util.getFormatElement(container) && !(startCon && startCon.parentNode)) {\r\n if (endNextEl) {\r\n container = endNextEl;\r\n offset = 0;\r\n } else if (startPrevEl) {\r\n container = startPrevEl;\r\n offset = 1;\r\n }\r\n }\r\n\r\n // set range\r\n this.setRange(container, offset, container, offset);\r\n // history stack\r\n this.history.push(true);\r\n\r\n return {\r\n container: container,\r\n offset: offset,\r\n prevContainer: prevContainer\r\n };\r\n },\r\n\r\n _nodeRemoveListItem: function (item) {\r\n const format = util.getFormatElement(item, null);\r\n util.removeItem(item);\r\n\r\n if(!util.isListCell(format)) return;\r\n\r\n util.removeItemAllParents(format, null, null);\r\n\r\n if (format && util.isList(format.firstChild)) {\r\n format.insertBefore(util.createTextNode(util.zeroWidthSpace), format.firstChild);\r\n }\r\n },\r\n\r\n /**\r\n * @description Appended all selected format Element to the argument element and insert\r\n * @param {Element} rangeElement Element of wrap the arguments (BLOCKQUOTE...)\r\n */\r\n applyRangeFormatElement: function (rangeElement) {\r\n this.getRange_addLine(this.getRange(), null);\r\n const rangeLines = this.getSelectedElementsAndComponents(false);\r\n if (!rangeLines || rangeLines.length === 0) return;\r\n\r\n linesLoop:\r\n for (let i = 0, len = rangeLines.length, line, nested, fEl, lEl, f, l; i < len; i++) {\r\n line = rangeLines[i];\r\n if (!util.isListCell(line)) continue;\r\n\r\n nested = line.lastElementChild;\r\n if (nested && util.isListCell(line.nextElementSibling) && rangeLines.indexOf(line.nextElementSibling) > -1) {\r\n lEl = nested.lastElementChild;\r\n if (rangeLines.indexOf(lEl) > -1) {\r\n let list = null;\r\n while ((list = lEl.lastElementChild)) {\r\n if (util.isList(list)) {\r\n if (rangeLines.indexOf(list.lastElementChild) > -1) {\r\n lEl = list.lastElementChild;\r\n } else {\r\n continue linesLoop;\r\n }\r\n }\r\n }\r\n\r\n fEl = nested.firstElementChild;\r\n f = rangeLines.indexOf(fEl);\r\n l = rangeLines.indexOf(lEl);\r\n rangeLines.splice(f, (l - f) + 1);\r\n len = rangeLines.length;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n let last = rangeLines[rangeLines.length - 1];\r\n let standTag, beforeTag, pElement;\r\n\r\n if (util.isRangeFormatElement(last) || util.isFormatElement(last)) {\r\n standTag = last;\r\n } else {\r\n standTag = util.getRangeFormatElement(last, null) || util.getFormatElement(last, null);\r\n }\r\n\r\n if (util.isCell(standTag)) {\r\n beforeTag = null;\r\n pElement = standTag;\r\n } else {\r\n beforeTag = standTag.nextSibling;\r\n pElement = standTag.parentNode;\r\n }\r\n\r\n let parentDepth = util.getElementDepth(standTag);\r\n let listParent = null;\r\n const lineArr = [];\r\n const removeItems = function (parent, origin, before) {\r\n let cc = null;\r\n if (parent !== origin && !util.isTable(origin)) {\r\n if (origin && util.getElementDepth(parent) === util.getElementDepth(origin)) return before;\r\n cc = util.removeItemAllParents(origin, null, parent);\r\n }\r\n\r\n return cc ? cc.ec : before;\r\n };\r\n\r\n for (let i = 0, len = rangeLines.length, line, originParent, depth, before, nextLine, nextList, nested; i < len; i++) {\r\n line = rangeLines[i];\r\n originParent = line.parentNode;\r\n if (!originParent || rangeElement.contains(originParent)) continue;\r\n\r\n depth = util.getElementDepth(line);\r\n\r\n if (util.isList(originParent)) {\r\n if (listParent === null) {\r\n if (nextList) {\r\n listParent = nextList;\r\n nested = true;\r\n nextList = null;\r\n } else {\r\n listParent = originParent.cloneNode(false);\r\n }\r\n }\r\n\r\n lineArr.push(line);\r\n nextLine = rangeLines[i + 1];\r\n\r\n if (i === len - 1 || (nextLine && nextLine.parentNode !== originParent)) {\r\n // nested list\r\n if (nextLine && line.contains(nextLine.parentNode)) {\r\n nextList = nextLine.parentNode.cloneNode(false);\r\n }\r\n\r\n let list = originParent.parentNode, p;\r\n while (util.isList(list)) {\r\n p = util.createElement(list.nodeName);\r\n p.appendChild(listParent);\r\n listParent = p;\r\n list = list.parentNode;\r\n }\r\n\r\n const edge = this.detachRangeFormatElement(originParent, lineArr, null, true, true);\r\n\r\n if (parentDepth >= depth) {\r\n parentDepth = depth;\r\n pElement = edge.cc;\r\n beforeTag = removeItems(pElement, originParent, edge.ec);\r\n if (beforeTag) pElement = beforeTag.parentNode;\r\n } else if (pElement === edge.cc) {\r\n beforeTag = edge.ec;\r\n }\r\n\r\n if (pElement !== edge.cc) {\r\n before = removeItems(pElement, edge.cc, before);\r\n if (before !== undefined) beforeTag = before;\r\n else beforeTag = edge.cc;\r\n }\r\n\r\n for (let c = 0, cLen = edge.removeArray.length; c < cLen; c++) {\r\n listParent.appendChild(edge.removeArray[c]);\r\n }\r\n\r\n if (!nested) rangeElement.appendChild(listParent);\r\n if (nextList) edge.removeArray[edge.removeArray.length - 1].appendChild(nextList);\r\n listParent = null;\r\n nested = false;\r\n }\r\n } else {\r\n if (parentDepth >= depth) {\r\n parentDepth = depth;\r\n pElement = originParent;\r\n beforeTag = line.nextSibling;\r\n }\r\n\r\n rangeElement.appendChild(line);\r\n\r\n if (pElement !== originParent) {\r\n before = removeItems(pElement, originParent);\r\n if (before !== undefined) beforeTag = before;\r\n }\r\n }\r\n }\r\n\r\n this.effectNode = null;\r\n util.mergeSameTags(rangeElement, null, false);\r\n util.mergeNestedTags(rangeElement, function (current) { return this.isList(current); }.bind(util));\r\n\r\n // Nested list\r\n if (beforeTag && util.getElementDepth(beforeTag) > 0 && (util.isList(beforeTag.parentNode) || util.isList(beforeTag.parentNode.parentNode))) {\r\n const depthFormat = util.getParentElement(beforeTag, function (current) { return this.isRangeFormatElement(current) && !this.isList(current); }.bind(util));\r\n const splitRange = util.splitElement(beforeTag, null, !depthFormat ? 0 : util.getElementDepth(depthFormat) + 1);\r\n splitRange.parentNode.insertBefore(rangeElement, splitRange);\r\n } else { // basic\r\n pElement.insertBefore(rangeElement, beforeTag);\r\n removeItems(rangeElement, beforeTag);\r\n }\r\n\r\n const edge = util.getEdgeChildNodes(rangeElement.firstElementChild, rangeElement.lastElementChild);\r\n if (rangeLines.length > 1) {\r\n this.setRange(edge.sc, 0, edge.ec, edge.ec.textContent.length);\r\n } else {\r\n this.setRange(edge.ec, edge.ec.textContent.length, edge.ec, edge.ec.textContent.length);\r\n }\r\n\r\n // history stack\r\n this.history.push(false);\r\n },\r\n\r\n /**\r\n * @description The elements of the \"selectedFormats\" array are detached from the \"rangeElement\" element. (\"LI\" tags are converted to \"P\" tags)\r\n * When \"selectedFormats\" is null, all elements are detached and return {cc: parentNode, sc: nextSibling, ec: previousSibling, removeArray: [Array of removed elements]}.\r\n * @param {Element} rangeElement Range format element (PRE, BLOCKQUOTE, OL, UL...)\r\n * @param {Array|null} selectedFormats Array of format elements (P, DIV, LI...) to remove.\r\n * If null, Applies to all elements and return {cc: parentNode, sc: nextSibling, ec: previousSibling}\r\n * @param {Element|null} newRangeElement The node(rangeElement) to replace the currently wrapped node.\r\n * @param {Boolean} remove If true, deleted without detached.\r\n * @param {Boolean} notHistoryPush When true, it does not update the history stack and the selection object and return EdgeNodes (util.getEdgeChildNodes)\r\n * @returns {Object}\r\n */\r\n detachRangeFormatElement: function (rangeElement, selectedFormats, newRangeElement, remove, notHistoryPush) {\r\n const range = this.getRange();\r\n let so = range.startOffset;\r\n let eo = range.endOffset;\r\n\r\n let children = util.getListChildNodes(rangeElement, function (current) { return current.parentNode === rangeElement; });\r\n let parent = rangeElement.parentNode;\r\n let firstNode = null;\r\n let lastNode = null;\r\n let rangeEl = rangeElement.cloneNode(false);\r\n\r\n const removeArray = [];\r\n const newList = util.isList(newRangeElement);\r\n let insertedNew = false;\r\n let reset = false;\r\n let moveComplete = false;\r\n\r\n function appendNode (parent, insNode, sibling, originNode) {\r\n if (util.onlyZeroWidthSpace(insNode)) {\r\n insNode.innerHTML = util.zeroWidthSpace;\r\n so = eo = 1;\r\n }\r\n\r\n if (insNode.nodeType === 3) {\r\n parent.insertBefore(insNode, sibling);\r\n return insNode;\r\n }\r\n\r\n const insChildren = (moveComplete ? insNode : originNode).childNodes;\r\n let format = insNode.cloneNode(false);\r\n let first = null;\r\n let c = null;\r\n\r\n while (insChildren[0]) {\r\n c = insChildren[0];\r\n if (util._notTextNode(c) && !util.isBreak(c) && !util.isListCell(format)) {\r\n if (format.childNodes.length > 0) {\r\n if (!first) first = format;\r\n parent.insertBefore(format, sibling);\r\n format = insNode.cloneNode(false);\r\n }\r\n parent.insertBefore(c, sibling);\r\n if (!first) first = c;\r\n } else {\r\n format.appendChild(c);\r\n }\r\n }\r\n\r\n if (format.childNodes.length > 0) {\r\n if (util.isListCell(parent) && util.isListCell(format) && util.isList(sibling)) {\r\n if (newList) {\r\n first = sibling;\r\n while(sibling) {\r\n format.appendChild(sibling);\r\n sibling = sibling.nextSibling;\r\n }\r\n parent.parentNode.insertBefore(format, parent.nextElementSibling);\r\n } else {\r\n const originNext = originNode.nextElementSibling;\r\n const detachRange = util.detachNestedList(originNode, false);\r\n if ((rangeElement !== detachRange) || (originNext !== originNode.nextElementSibling)) {\r\n const fChildren = format.childNodes;\r\n while (fChildren[0]) {\r\n originNode.appendChild(fChildren[0]);\r\n }\r\n\r\n rangeElement = detachRange;\r\n reset = true;\r\n }\r\n }\r\n } else {\r\n parent.insertBefore(format, sibling);\r\n }\r\n\r\n if (!first) first = format;\r\n }\r\n\r\n return first;\r\n }\r\n\r\n // detach loop\r\n for (let i = 0, len = children.length, insNode, lineIndex, next; i < len; i++) {\r\n insNode = children[i];\r\n if (insNode.nodeType === 3 && util.isList(rangeEl)) continue;\r\n\r\n moveComplete = false;\r\n if (remove && i === 0) {\r\n if (!selectedFormats || selectedFormats.length === len || selectedFormats[0] === insNode) {\r\n firstNode = rangeElement.previousSibling;\r\n } else {\r\n firstNode = rangeEl;\r\n }\r\n }\r\n\r\n if (selectedFormats) lineIndex = selectedFormats.indexOf(insNode);\r\n if (selectedFormats && lineIndex === -1) {\r\n if (!rangeEl) rangeEl = rangeElement.cloneNode(false);\r\n rangeEl.appendChild(insNode);\r\n } else {\r\n if (selectedFormats) next = selectedFormats[lineIndex + 1];\r\n if (rangeEl && rangeEl.children.length > 0) {\r\n parent.insertBefore(rangeEl, rangeElement);\r\n rangeEl = null;\r\n }\r\n\r\n if (!newList && util.isListCell(insNode)) {\r\n if (next && util.getElementDepth(insNode) !== util.getElementDepth(next) && (util.isListCell(parent) || util.getArrayItem(insNode.children, util.isList, false))) {\r\n const insNext = insNode.nextElementSibling;\r\n const detachRange = util.detachNestedList(insNode, false);\r\n if ((rangeElement !== detachRange) || insNext !== insNode.nextElementSibling) {\r\n rangeElement = detachRange;\r\n reset = true;\r\n }\r\n } else {\r\n const inner = insNode;\r\n insNode = util.createElement(remove ? inner.nodeName : (util.isList(rangeElement.parentNode) || util.isListCell(rangeElement.parentNode)) ? 'LI' : util.isCell(rangeElement.parentNode) ? 'DIV' : options.defaultTag);\r\n const isCell = util.isListCell(insNode);\r\n const innerChildren = inner.childNodes;\r\n while (innerChildren[0]) {\r\n if (util.isList(innerChildren[0]) && !isCell) break;\r\n insNode.appendChild(innerChildren[0]);\r\n }\r\n util.copyFormatAttributes(insNode, inner);\r\n moveComplete = true;\r\n }\r\n } else {\r\n insNode = insNode.cloneNode(false);\r\n }\r\n\r\n if (!reset) {\r\n if (!remove) {\r\n if (newRangeElement) {\r\n if (!insertedNew) {\r\n parent.insertBefore(newRangeElement, rangeElement);\r\n insertedNew = true;\r\n }\r\n insNode = appendNode(newRangeElement, insNode, null, children[i]);\r\n } else {\r\n insNode = appendNode(parent, insNode, rangeElement, children[i]);\r\n }\r\n\r\n if (!reset) {\r\n if (selectedFormats) {\r\n lastNode = insNode;\r\n if (!firstNode) {\r\n firstNode = insNode;\r\n }\r\n } else if (!firstNode) {\r\n firstNode = lastNode = insNode;\r\n }\r\n }\r\n } else {\r\n removeArray.push(insNode);\r\n util.removeItem(children[i]);\r\n }\r\n\r\n if (reset) {\r\n reset = moveComplete = false;\r\n children = util.getListChildNodes(rangeElement, function (current) { return current.parentNode === rangeElement; });\r\n rangeEl = rangeElement.cloneNode(false);\r\n parent = rangeElement.parentNode;\r\n i = -1;\r\n len = children.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const rangeParent = rangeElement.parentNode;\r\n let rangeRight = rangeElement.nextSibling;\r\n if (rangeEl && rangeEl.children.length > 0) {\r\n rangeParent.insertBefore(rangeEl, rangeRight);\r\n }\r\n\r\n if (newRangeElement) firstNode = newRangeElement.previousSibling;\r\n else if (!firstNode) firstNode = rangeElement.previousSibling;\r\n rangeRight = rangeElement.nextSibling !== rangeEl ? rangeElement.nextSibling : rangeEl ? rangeEl.nextSibling : null;\r\n\r\n if (rangeElement.children.length === 0 || rangeElement.textContent.length === 0) {\r\n util.removeItem(rangeElement);\r\n } else {\r\n util.removeEmptyNode(rangeElement, null, false);\r\n }\r\n\r\n let edge = null;\r\n if (remove) {\r\n edge = {\r\n cc: rangeParent,\r\n sc: firstNode,\r\n so: so,\r\n ec: rangeRight,\r\n eo: eo,\r\n removeArray: removeArray\r\n };\r\n } else {\r\n if (!firstNode) firstNode = lastNode;\r\n if (!lastNode) lastNode = firstNode;\r\n const childEdge = util.getEdgeChildNodes(firstNode, (lastNode.parentNode ? firstNode : lastNode));\r\n edge = {\r\n cc: (childEdge.sc || childEdge.ec).parentNode,\r\n sc: childEdge.sc,\r\n so: so,\r\n ec: childEdge.ec,\r\n eo: eo,\r\n removeArray: null\r\n };\r\n }\r\n\r\n this.effectNode = null;\r\n if (notHistoryPush) return edge;\r\n\r\n if (!remove && edge) {\r\n if (!selectedFormats) {\r\n this.setRange(edge.sc, 0, edge.sc, 0);\r\n } else {\r\n this.setRange(edge.sc, so, edge.ec, eo);\r\n }\r\n }\r\n\r\n // history stack\r\n this.history.push(false);\r\n },\r\n\r\n /**\r\n * @description \"selectedFormats\" array are detached from the list element.\r\n * The return value is applied when the first and last lines of \"selectedFormats\" are \"LI\" respectively.\r\n * @param {Array} selectedFormats Array of format elements (LI, P...) to remove.\r\n * @param {Boolean} remove If true, deleted without detached.\r\n * @returns {Object} {sc:
    • , ec:
    • }.\r\n */\r\n detachList: function (selectedFormats, remove) {\r\n let rangeArr = {};\r\n let listFirst = false;\r\n let listLast = false;\r\n let first = null;\r\n let last = null;\r\n const passComponent = function (current) { return !this.isComponent(current); }.bind(util);\r\n\r\n for (let i = 0, len = selectedFormats.length, r, o, lastIndex, isList; i < len; i++) {\r\n lastIndex = i === len - 1;\r\n o = util.getRangeFormatElement(selectedFormats[i], passComponent);\r\n isList = util.isList(o);\r\n if (!r && isList) {\r\n r = o;\r\n rangeArr = {r: r, f: [util.getParentElement(selectedFormats[i], 'LI')]};\r\n if (i === 0) listFirst = true;\r\n } else if (r && isList) {\r\n if (r !== o) {\r\n const edge = this.detachRangeFormatElement(rangeArr.f[0].parentNode, rangeArr.f, null, remove, true);\r\n o = selectedFormats[i].parentNode;\r\n if (listFirst) {\r\n first = edge.sc;\r\n listFirst = false;\r\n }\r\n if (lastIndex) last = edge.ec;\r\n\r\n if (isList) {\r\n r = o;\r\n rangeArr = {r: r, f: [util.getParentElement(selectedFormats[i], 'LI')]};\r\n if (lastIndex) listLast = true;\r\n } else {\r\n r = null;\r\n }\r\n } else {\r\n rangeArr.f.push(util.getParentElement(selectedFormats[i], 'LI'));\r\n if (lastIndex) listLast = true;\r\n }\r\n }\r\n\r\n if (lastIndex && util.isList(r)) {\r\n const edge = this.detachRangeFormatElement(rangeArr.f[0].parentNode, rangeArr.f, null, remove, true);\r\n if (listLast || len === 1) last = edge.ec;\r\n if (listFirst) first = edge.sc || last;\r\n }\r\n }\r\n\r\n return {\r\n sc: first,\r\n ec: last\r\n };\r\n },\r\n\r\n /**\r\n * @description Add, update, and delete nodes from selected text.\r\n * 1. If there is a node in the \"appendNode\" argument, a node with the same tags and attributes as \"appendNode\" is added to the selection text.\r\n * 2. If it is in the same tag, only the tag's attributes are changed without adding a tag.\r\n * 3. If the \"appendNode\" argument is null, the node of the selection is update or remove without adding a new node.\r\n * 4. The same style as the style attribute of the \"styleArray\" argument is deleted.\r\n * (Styles should be put with attribute names from css. [\"background-color\"])\r\n * 5. The same class name as the class attribute of the \"styleArray\" argument is deleted.\r\n * (The class name is preceded by \".\" [\".className\"])\r\n * 6. Use a list of styles and classes of \"appendNode\" in \"styleArray\" to avoid duplicate property values.\r\n * 7. If a node with all styles and classes removed has the same tag name as \"appendNode\" or \"removeNodeArray\", or \"appendNode\" is null, that node is deleted.\r\n * 8. Regardless of the style and class of the node, the tag with the same name as the \"removeNodeArray\" argument value is deleted.\r\n * 9. If the \"strictRemove\" argument is true, only nodes with all styles and classes removed from the nodes of \"removeNodeArray\" are removed.\r\n *10. It won't work if the parent node has the same class and same value style.\r\n * However, if there is a value in \"removeNodeArray\", it works and the text node is separated even if there is no node to replace.\r\n * @param {Element|null} appendNode The element to be added to the selection. If it is null, only delete the node.\r\n * @param {Array|null} styleArray The style or className attribute name Array to check (['font-size'], ['.className'], ['font-family', 'color', '.className']...])\r\n * @param {Array|null} removeNodeArray An array of node names to remove types from, remove all formats when \"appendNode\" is null and there is an empty array or null value. (['span'], ['strong', 'em'] ...])\r\n * @param {Boolean|null} strictRemove If true, only nodes with all styles and classes removed from the nodes of \"removeNodeArray\" are removed.\r\n */\r\n nodeChange: function (appendNode, styleArray, removeNodeArray, strictRemove) {\r\n this._resetRangeToTextNode();\r\n let range = this.getRange_addLine(this.getRange(), null);\r\n styleArray = styleArray && styleArray.length > 0 ? styleArray : false;\r\n removeNodeArray = removeNodeArray && removeNodeArray.length > 0 ? removeNodeArray : false;\r\n\r\n const isRemoveNode = !appendNode;\r\n const isRemoveFormat = isRemoveNode && !removeNodeArray && !styleArray;\r\n let startCon = range.startContainer;\r\n let startOff = range.startOffset;\r\n let endCon = range.endContainer;\r\n let endOff = range.endOffset;\r\n\r\n if ((isRemoveFormat && range.collapsed && util.isFormatElement(startCon.parentNode)) || (startCon === endCon && startCon.nodeType === 1 && util.isNonEditable(startCon))) {\r\n const format = startCon.parentNode;\r\n if (!util.isListCell(format) || !util.getValues(format.style).some(function(k) { return this._listKebab.indexOf(k) > -1; }.bind(this))) return;\r\n }\r\n\r\n if (range.collapsed && !isRemoveFormat) {\r\n if (startCon.nodeType === 1 && !util.isBreak(startCon) && !util.isComponent(startCon)) {\r\n let afterNode = null;\r\n const focusNode = startCon.childNodes[startOff];\r\n\r\n if (focusNode) {\r\n if (!focusNode.nextSibling) {\r\n afterNode = null;\r\n } else {\r\n afterNode = util.isBreak(focusNode) ? focusNode : focusNode.nextSibling;\r\n }\r\n }\r\n\r\n const zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n startCon.insertBefore(zeroWidth, afterNode);\r\n this.setRange(zeroWidth, 1, zeroWidth, 1);\r\n\r\n range = this.getRange();\r\n startCon = range.startContainer;\r\n startOff = range.startOffset;\r\n endCon = range.endContainer;\r\n endOff = range.endOffset;\r\n }\r\n }\r\n\r\n if (util.isFormatElement(startCon)) {\r\n startCon = startCon.childNodes[startOff] || startCon.firstChild;\r\n startOff = 0;\r\n }\r\n if (util.isFormatElement(endCon)) {\r\n endCon = endCon.childNodes[endOff] || endCon.lastChild;\r\n endOff = endCon.textContent.length;\r\n }\r\n\r\n if (isRemoveNode) {\r\n appendNode = util.createElement('DIV');\r\n }\r\n\r\n const wRegExp = _w.RegExp;\r\n const newNodeName = appendNode.nodeName;\r\n\r\n /* checked same style property */\r\n if (!isRemoveFormat && startCon === endCon && !removeNodeArray && appendNode) {\r\n let sNode = startCon;\r\n let checkCnt = 0;\r\n const checkAttrs = [];\r\n\r\n const checkStyles = appendNode.style;\r\n for (let i = 0, len = checkStyles.length; i < len; i++) {\r\n checkAttrs.push(checkStyles[i]);\r\n }\r\n\r\n const ckeckClasses = appendNode.classList;\r\n for (let i = 0, len = ckeckClasses.length; i < len; i++) {\r\n checkAttrs.push('.' + ckeckClasses[i]);\r\n }\r\n\r\n if (checkAttrs.length > 0) {\r\n while(!util.isFormatElement(sNode) && !util.isWysiwygDiv(sNode)) {\r\n for (let i = 0; i < checkAttrs.length; i++) {\r\n if (sNode.nodeType === 1) {\r\n const s = checkAttrs[i];\r\n const classReg = /^\\./.test(s) ? new wRegExp('\\\\s*' + s.replace(/^\\./, '') + '(\\\\s+|$)', 'ig') : false;\r\n\r\n const styleCheck = isRemoveNode ? !!sNode.style[s] : (!!sNode.style[s] && !!appendNode.style[s] && sNode.style[s] === appendNode.style[s]);\r\n const classCheck = classReg === false ? false : isRemoveNode ? !!sNode.className.match(classReg) : !!sNode.className.match(classReg) && !!appendNode.className.match(classReg);\r\n if (styleCheck || classCheck) {\r\n checkCnt++;\r\n }\r\n }\r\n }\r\n sNode = sNode.parentNode;\r\n }\r\n\r\n if (checkCnt >= checkAttrs.length) return;\r\n }\r\n }\r\n\r\n let start = {}, end = {};\r\n let newNode, styleRegExp = '', classRegExp = '', removeNodeRegExp = '';\r\n\r\n if (styleArray) {\r\n for (let i = 0, len = styleArray.length, s; i < len; i++) {\r\n s = styleArray[i];\r\n if (/^\\./.test(s)) {\r\n classRegExp += (classRegExp ? '|' : '\\\\s*(?:') + s.replace(/^\\./, '');\r\n } else {\r\n styleRegExp += (styleRegExp ? '|' : '(?:;|^|\\\\s)(?:') + s;\r\n }\r\n }\r\n\r\n if (styleRegExp) {\r\n styleRegExp += ')\\\\s*:[^;]*\\\\s*(?:;|$)';\r\n styleRegExp = new wRegExp(styleRegExp, 'ig');\r\n }\r\n\r\n if (classRegExp) {\r\n classRegExp += ')(?=\\\\s+|$)';\r\n classRegExp = new wRegExp(classRegExp, 'ig');\r\n }\r\n }\r\n\r\n if (removeNodeArray) {\r\n removeNodeRegExp = '^(?:' + removeNodeArray[0];\r\n for (let i = 1; i < removeNodeArray.length; i++) {\r\n removeNodeRegExp += '|' + removeNodeArray[i];\r\n }\r\n removeNodeRegExp += ')$';\r\n removeNodeRegExp = new wRegExp(removeNodeRegExp, 'i');\r\n }\r\n\r\n /** validation check function*/\r\n const wBoolean = _w.Boolean;\r\n const _removeCheck = {v: false};\r\n const validation = function (checkNode) {\r\n const vNode = checkNode.cloneNode(false);\r\n\r\n // all path\r\n if (vNode.nodeType === 3 || util.isBreak(vNode)) return vNode;\r\n // all remove\r\n if (isRemoveFormat) return null;\r\n\r\n // remove node check\r\n const tagRemove = (!removeNodeRegExp && isRemoveNode) || (removeNodeRegExp && removeNodeRegExp.test(vNode.nodeName));\r\n\r\n // tag remove\r\n if (tagRemove && !strictRemove) {\r\n _removeCheck.v = true;\r\n return null;\r\n }\r\n\r\n // style regexp\r\n const originStyle = vNode.style.cssText;\r\n let style = '';\r\n if (styleRegExp && originStyle.length > 0) {\r\n style = originStyle.replace(styleRegExp, '').trim();\r\n if (style !== originStyle) _removeCheck.v = true;\r\n }\r\n\r\n // class check\r\n const originClasses = vNode.className;\r\n let classes = '';\r\n if (classRegExp && originClasses.length > 0) {\r\n classes = originClasses.replace(classRegExp, '').trim();\r\n if (classes !== originClasses) _removeCheck.v = true;\r\n }\r\n\r\n // remove only\r\n if (isRemoveNode) {\r\n if ((classRegExp || !originClasses) && (styleRegExp || !originStyle) && !style && !classes && tagRemove) {\r\n _removeCheck.v = true;\r\n return null;\r\n }\r\n }\r\n\r\n // change\r\n if (style || classes || vNode.nodeName !== newNodeName || (wBoolean(styleRegExp) !== wBoolean(originStyle)) || (wBoolean(classRegExp) !== wBoolean(originClasses))) {\r\n if (styleRegExp && originStyle.length > 0) vNode.style.cssText = style;\r\n if (!vNode.style.cssText) {\r\n vNode.removeAttribute('style');\r\n }\r\n\r\n if (classRegExp && originClasses.length > 0) vNode.className = classes.trim();\r\n if (!vNode.className.trim()) {\r\n vNode.removeAttribute('class');\r\n }\r\n\r\n if (!vNode.style.cssText && !vNode.className && (vNode.nodeName === newNodeName || tagRemove)) {\r\n _removeCheck.v = true;\r\n return null;\r\n }\r\n\r\n return vNode;\r\n }\r\n\r\n _removeCheck.v = true;\r\n return null;\r\n };\r\n\r\n // get line nodes\r\n const lineNodes = this.getSelectedElements(null);\r\n range = this.getRange();\r\n startCon = range.startContainer;\r\n startOff = range.startOffset;\r\n endCon = range.endContainer;\r\n endOff = range.endOffset;\r\n\r\n if (!util.getFormatElement(startCon, null)) {\r\n startCon = util.getChildElement(lineNodes[0], function (current) { return current.nodeType === 3; }, false);\r\n startOff = 0;\r\n }\r\n\r\n if (!util.getFormatElement(endCon, null)) {\r\n endCon = util.getChildElement(lineNodes[lineNodes.length - 1], function (current) { return current.nodeType === 3; }, false);\r\n endOff = endCon.textContent.length;\r\n }\r\n\r\n\r\n const oneLine = util.getFormatElement(startCon, null) === util.getFormatElement(endCon, null);\r\n const endLength = lineNodes.length - (oneLine ? 0 : 1);\r\n\r\n // node Changes\r\n newNode = appendNode.cloneNode(false);\r\n\r\n const isRemoveAnchor = isRemoveFormat || (isRemoveNode && (function (arr) {\r\n for (let n = 0, len = arr.length; n < len; n++) {\r\n if (util._isMaintainedNode(arr[n]) || util._isSizeNode(arr[n])) return true;\r\n }\r\n return false;\r\n })(removeNodeArray));\r\n\r\n const isSizeNode = isRemoveNode || util._isSizeNode(newNode);\r\n const _getMaintainedNode = this._util_getMaintainedNode.bind(util, isRemoveAnchor, isSizeNode);\r\n const _isMaintainedNode = this._util_isMaintainedNode.bind(util, isRemoveAnchor, isSizeNode);\r\n\r\n // one line\r\n if (oneLine) {\r\n if (this._resetCommonListCell(lineNodes[0], styleArray)) range = this.setRange(startCon, startOff, endCon, endOff);\r\n\r\n const newRange = this._nodeChange_oneLine(lineNodes[0], newNode, validation, startCon, startOff, endCon, endOff, isRemoveFormat, isRemoveNode, range.collapsed, _removeCheck, _getMaintainedNode, _isMaintainedNode);\r\n start.container = newRange.startContainer;\r\n start.offset = newRange.startOffset;\r\n end.container = newRange.endContainer;\r\n end.offset = newRange.endOffset;\r\n\r\n if (start.container === end.container && util.onlyZeroWidthSpace(start.container)) {\r\n start.offset = end.offset = 1;\r\n }\r\n this._setCommonListStyle(newRange.ancestor, null);\r\n } else { // multi line \r\n let appliedCommonList = false;\r\n if (endLength > 0 && this._resetCommonListCell(lineNodes[endLength], styleArray)) appliedCommonList = true;\r\n if (this._resetCommonListCell(lineNodes[0], styleArray)) appliedCommonList = true;\r\n if (appliedCommonList) this.setRange(startCon, startOff, endCon, endOff);\r\n\r\n // end\r\n if (endLength > 0) {\r\n newNode = appendNode.cloneNode(false);\r\n end = this._nodeChange_endLine(lineNodes[endLength], newNode, validation, endCon, endOff, isRemoveFormat, isRemoveNode, _removeCheck, _getMaintainedNode, _isMaintainedNode);\r\n }\r\n\r\n // mid\r\n for (let i = endLength - 1, newRange; i > 0; i--) {\r\n this._resetCommonListCell(lineNodes[i], styleArray);\r\n newNode = appendNode.cloneNode(false);\r\n newRange = this._nodeChange_middleLine(lineNodes[i], newNode, validation, isRemoveFormat, isRemoveNode, _removeCheck, end.container);\r\n if (newRange.endContainer && newRange.ancestor.contains(newRange.endContainer)) {\r\n end.ancestor = null;\r\n end.container = newRange.endContainer;\r\n }\r\n this._setCommonListStyle(newRange.ancestor, null);\r\n }\r\n\r\n // start\r\n newNode = appendNode.cloneNode(false);\r\n start = this._nodeChange_startLine(lineNodes[0], newNode, validation, startCon, startOff, isRemoveFormat, isRemoveNode, _removeCheck, _getMaintainedNode, _isMaintainedNode, end.container);\r\n\r\n if (start.endContainer) {\r\n end.ancestor = null;\r\n end.container = start.endContainer;\r\n }\r\n\r\n if (endLength <= 0) {\r\n end = start;\r\n } else if (!end.container) {\r\n end.ancestor = null;\r\n end.container = start.container;\r\n end.offset = start.container.textContent.length;\r\n }\r\n\r\n this._setCommonListStyle(start.ancestor, null);\r\n this._setCommonListStyle(end.ancestor || util.getFormatElement(end.container), null);\r\n }\r\n\r\n // set range\r\n this.controllersOff();\r\n this.setRange(start.container, start.offset, end.container, end.offset);\r\n\r\n // history stack\r\n this.history.push(false);\r\n },\r\n\r\n /**\r\n * @description Reset common style of list cell\r\n * @param {Element} el List cell element.
    • \r\n * @param {Array|null} styleArray Style array\r\n * @private\r\n */\r\n _resetCommonListCell: function (el, styleArray) {\r\n if (!util.isListCell(el)) return;\r\n if (!styleArray) styleArray = this._listKebab;\r\n\r\n const children = util.getArrayItem((el).childNodes, function (current) { return !util.isBreak(current); }, true);\r\n const elStyles = el.style;\r\n\r\n const ec = [], ek = [], elKeys = util.getValues(elStyles);\r\n for (let i = 0, len = this._listKebab.length; i < len; i++) {\r\n if (elKeys.indexOf(this._listKebab[i]) > -1 && styleArray.indexOf(this._listKebab[i]) > -1) {\r\n ec.push(this._listCamel[i]);\r\n ek.push(this._listKebab[i]);\r\n }\r\n }\r\n\r\n if (!ec.length) return;\r\n\r\n // reset cell style---\r\n const refer = util.createElement('SPAN');\r\n for (let i = 0, len = ec.length; i < len; i++) {\r\n refer.style[ec[i]] = elStyles[ek[i]];\r\n elStyles.removeProperty(ek[i]);\r\n }\r\n\r\n let sel = refer.cloneNode(false);\r\n let r = null, appliedEl = false;\r\n for (let i = 0, len = children.length, c, s; i < len; i++) {\r\n c = children[i];\r\n if (options._textTagsMap[c.nodeName.toLowerCase()]) continue;\r\n\r\n s = util.getValues(c.style);\r\n if (s.length === 0 || (ec.some(function (k) {return s.indexOf(k) === -1;}) && s.some(function(k) {ec.indexOf(k) > -1;}))) {\r\n r = c.nextSibling;\r\n sel.appendChild(c);\r\n } else if (sel.childNodes.length > 0) {\r\n el.insertBefore(sel, r);\r\n sel = refer.cloneNode(false);\r\n r = null;\r\n appliedEl = true;\r\n }\r\n }\r\n\r\n if (sel.childNodes.length > 0) {\r\n el.insertBefore(sel, r);\r\n appliedEl = true;\r\n }\r\n if (!elStyles.length) {\r\n el.removeAttribute('style');\r\n }\r\n\r\n return appliedEl;\r\n },\r\n\r\n /**\r\n * @description If certain styles are applied to all child nodes of the list cell, the style of the list cell is also changed. (bold, color, size)\r\n * @param {Element} el List cell element.
    • \r\n * @param {Element|null} child Variable for recursive call. (\"null\" on the first call)\r\n * @private\r\n */\r\n _setCommonListStyle: function (el, child) {\r\n if (!util.isListCell(el)) return;\r\n\r\n const children = util.getArrayItem((child || el).childNodes, function (current) { return !util.isBreak(current); }, true);\r\n child = children[0];\r\n\r\n if (!child || children.length > 1 || child.nodeType !== 1) return;\r\n\r\n // set cell style---\r\n const childStyle = child.style;\r\n const elStyle = el.style;\r\n const nodeName = child.nodeName.toLowerCase();\r\n let appliedEl = false;\r\n\r\n // bold, italic\r\n if (options._textTagsMap[nodeName] === options._defaultCommand.bold.toLowerCase()) elStyle.fontWeight = 'bold';\r\n if (options._textTagsMap[nodeName] === options._defaultCommand.italic.toLowerCase()) elStyle.fontStyle = 'italic';\r\n\r\n // styles\r\n const cKeys = util.getValues(childStyle);\r\n if (cKeys.length > 0) {\r\n for (let i = 0, len = this._listCamel.length; i < len; i++) {\r\n if (cKeys.indexOf(this._listKebab[i]) > -1) {\r\n elStyle[this._listCamel[i]] = childStyle[this._listCamel[i]];\r\n childStyle.removeProperty(this._listKebab[i]);\r\n appliedEl = true;\r\n }\r\n }\r\n }\r\n\r\n this._setCommonListStyle(el, child);\r\n if (!appliedEl) return;\r\n\r\n // common style\r\n if (!childStyle.length) {\r\n const ch = child.childNodes;\r\n const p = child.parentNode;\r\n const n = child.nextSibling;\r\n while (ch.length > 0) {\r\n p.insertBefore(ch[0], n);\r\n }\r\n util.removeItem(child);\r\n }\r\n },\r\n\r\n /**\r\n * @description Strip remove node\r\n * @param {Node} removeNode The remove node\r\n * @private\r\n */\r\n _stripRemoveNode: function (removeNode) {\r\n const element = removeNode.parentNode;\r\n if (!removeNode || removeNode.nodeType === 3 || !element) return;\r\n\r\n const children = removeNode.childNodes;\r\n while (children[0]) {\r\n element.insertBefore(children[0], removeNode);\r\n }\r\n\r\n element.removeChild(removeNode);\r\n },\r\n\r\n /**\r\n * @description Return the parent maintained tag. (bind and use a util object)\r\n * @param {Element} element Element\r\n * @returns {Element}\r\n * @private\r\n */\r\n _util_getMaintainedNode: function (_isRemove, _isSizeNode, element) {\r\n if (!element || _isRemove) return null;\r\n return this.getParentElement(element, this._isMaintainedNode.bind(this)) || (!_isSizeNode ? this.getParentElement(element, this._isSizeNode.bind(this)) : null);\r\n },\r\n\r\n /**\r\n * @description Check if element is a tag that should be persisted. (bind and use a util object)\r\n * @param {Element} element Element\r\n * @returns {Element}\r\n * @private\r\n */\r\n _util_isMaintainedNode: function (_isRemove, _isSizeNode, element) {\r\n if (!element || _isRemove || element.nodeType !== 1) return false;\r\n const anchor = this._isMaintainedNode(element);\r\n return this.getParentElement(element, this._isMaintainedNode.bind(this)) ? anchor : (anchor || (!_isSizeNode ? this._isSizeNode(element) : false));\r\n },\r\n\r\n /**\r\n * @description wraps text nodes of line selected text.\r\n * @param {Element} element The node of the line that contains the selected text node.\r\n * @param {Element} newInnerNode The dom that will wrap the selected text area\r\n * @param {Function} validation Check if the node should be stripped.\r\n * @param {Node} startCon The startContainer property of the selection object.\r\n * @param {Number} startOff The startOffset property of the selection object.\r\n * @param {Node} endCon The endContainer property of the selection object.\r\n * @param {Number} endOff The endOffset property of the selection object.\r\n * @param {Boolean} isRemoveFormat Is the remove all formats command?\r\n * @param {Boolean} isRemoveNode \"newInnerNode\" is remove node?\r\n * @param {Boolean} collapsed range.collapsed\r\n * @returns {{ancestor: *, startContainer: *, startOffset: *, endContainer: *, endOffset: *}}\r\n * @private\r\n */\r\n _nodeChange_oneLine: function (element, newInnerNode, validation, startCon, startOff, endCon, endOff, isRemoveFormat, isRemoveNode, collapsed, _removeCheck, _getMaintainedNode, _isMaintainedNode) {\r\n // not add tag\r\n let parentCon = startCon.parentNode;\r\n while (!parentCon.nextSibling && !parentCon.previousSibling && !util.isFormatElement(parentCon.parentNode) && !util.isWysiwygDiv(parentCon.parentNode)) {\r\n if (parentCon.nodeName === newInnerNode.nodeName) break;\r\n parentCon = parentCon.parentNode;\r\n }\r\n\r\n if (!isRemoveNode && parentCon === endCon.parentNode && parentCon.nodeName === newInnerNode.nodeName) {\r\n if (util.onlyZeroWidthSpace(startCon.textContent.slice(0, startOff)) && util.onlyZeroWidthSpace(endCon.textContent.slice(endOff))) {\r\n const children = parentCon.childNodes;\r\n let sameTag = true;\r\n\r\n for (let i = 0, len = children.length, c, s, e, z; i < len; i++) {\r\n c = children[i];\r\n z = !util.onlyZeroWidthSpace(c);\r\n if (c === startCon) {\r\n s = true;\r\n continue;\r\n }\r\n if (c === endCon) {\r\n e = true;\r\n continue;\r\n }\r\n if ((!s && z) || (s && e && z)) {\r\n sameTag = false;\r\n break;\r\n }\r\n }\r\n\r\n if (sameTag) {\r\n util.copyTagAttributes(parentCon, newInnerNode);\r\n\r\n return {\r\n ancestor: element,\r\n startContainer: startCon,\r\n startOffset: startOff,\r\n endContainer: endCon,\r\n endOffset: endOff\r\n };\r\n }\r\n }\r\n }\r\n\r\n // add tag\r\n _removeCheck.v = false;\r\n const el = element;\r\n const nNodeArray = [newInnerNode];\r\n const pNode = element.cloneNode(false);\r\n const isSameNode = startCon === endCon;\r\n let startContainer = startCon;\r\n let startOffset = startOff;\r\n let endContainer = endCon;\r\n let endOffset = endOff;\r\n let startPass = false;\r\n let endPass = false;\r\n let pCurrent, newNode, appendNode, cssText, anchorNode;\r\n\r\n const wRegExp = _w.RegExp;\r\n function checkCss (vNode) {\r\n const regExp = new wRegExp('(?:;|^|\\\\s)(?:' + cssText + 'null)\\\\s*:[^;]*\\\\s*(?:;|$)', 'ig');\r\n let style = '';\r\n\r\n if (regExp && vNode.style.cssText.length > 0) {\r\n style = regExp.test(vNode.style.cssText);\r\n }\r\n\r\n return !style;\r\n }\r\n\r\n (function recursionFunc(current, ancestor) {\r\n const childNodes = current.childNodes;\r\n\r\n for (let i = 0, len = childNodes.length, vNode; i < len; i++) {\r\n let child = childNodes[i];\r\n if (!child) continue;\r\n let coverNode = ancestor;\r\n let cloneNode;\r\n\r\n // startContainer\r\n if (!startPass && child === startContainer) {\r\n let line = pNode;\r\n anchorNode = _getMaintainedNode(child);\r\n const prevNode = util.createTextNode(startContainer.nodeType === 1 ? '' : startContainer.substringData(0, startOffset));\r\n const textNode = util.createTextNode(startContainer.nodeType === 1 ? '' : startContainer.substringData(startOffset,\r\n isSameNode ?\r\n (endOffset >= startOffset ? endOffset - startOffset : startContainer.data.length - startOffset) :\r\n startContainer.data.length - startOffset)\r\n );\r\n\r\n if (anchorNode) {\r\n const a = _getMaintainedNode(ancestor);\r\n if (a && a.parentNode !== line) {\r\n let m = a;\r\n let p = null;\r\n while (m.parentNode !== line) {\r\n ancestor = p = m.parentNode.cloneNode(false);\r\n while(m.childNodes[0]) {\r\n p.appendChild(m.childNodes[0]);\r\n }\r\n m.appendChild(p);\r\n m = m.parentNode;\r\n }\r\n m.parentNode.appendChild(a);\r\n }\r\n anchorNode = anchorNode.cloneNode(false);\r\n }\r\n\r\n if (!util.onlyZeroWidthSpace(prevNode)) {\r\n ancestor.appendChild(prevNode);\r\n }\r\n\r\n const prevAnchorNode = _getMaintainedNode(ancestor);\r\n if (!!prevAnchorNode) anchorNode = prevAnchorNode;\r\n if (anchorNode) line = anchorNode;\r\n\r\n newNode = child;\r\n pCurrent = [];\r\n cssText = '';\r\n while (newNode !== line && newNode !== el && newNode !== null) {\r\n vNode = _isMaintainedNode(newNode) ? null : validation(newNode);\r\n if (vNode && newNode.nodeType === 1 && checkCss(newNode)) {\r\n pCurrent.push(vNode);\r\n cssText += newNode.style.cssText.substr(0, newNode.style.cssText.indexOf(':')) + '|';\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n\r\n const childNode = pCurrent.pop() || textNode;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n newInnerNode.appendChild(childNode);\r\n line.appendChild(newInnerNode);\r\n\r\n if (anchorNode && !_getMaintainedNode(endContainer)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n\r\n startContainer = textNode;\r\n startOffset = 0;\r\n startPass = true;\r\n\r\n if (newNode !== textNode) newNode.appendChild(startContainer);\r\n if (!isSameNode) continue;\r\n }\r\n\r\n // endContainer\r\n if (!endPass && child === endContainer) {\r\n anchorNode = _getMaintainedNode(child);\r\n const afterNode = util.createTextNode(endContainer.nodeType === 1 ? '' : endContainer.substringData(endOffset, (endContainer.length - endOffset)));\r\n const textNode = util.createTextNode(isSameNode || endContainer.nodeType === 1 ? '' : endContainer.substringData(0, endOffset));\r\n\r\n if (anchorNode) {\r\n anchorNode = anchorNode.cloneNode(false);\r\n } else if (_isMaintainedNode(newInnerNode.parentNode) && !anchorNode) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n\r\n if (!util.onlyZeroWidthSpace(afterNode)) {\r\n newNode = child;\r\n cssText = '';\r\n pCurrent = [];\r\n const anchors = [];\r\n while (newNode !== pNode && newNode !== el && newNode !== null) {\r\n if (newNode.nodeType === 1 && checkCss(newNode)) {\r\n if (_isMaintainedNode(newNode)) anchors.push(newNode.cloneNode(false));\r\n else pCurrent.push(newNode.cloneNode(false));\r\n cssText += newNode.style.cssText.substr(0, newNode.style.cssText.indexOf(':')) + '|';\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n pCurrent = pCurrent.concat(anchors);\r\n\r\n cloneNode = appendNode = newNode = pCurrent.pop() || afterNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n pNode.appendChild(cloneNode);\r\n newNode.textContent = afterNode.data;\r\n }\r\n\r\n if (anchorNode && cloneNode) {\r\n const afterAnchorNode = _getMaintainedNode(cloneNode);\r\n if (afterAnchorNode) {\r\n anchorNode = afterAnchorNode;\r\n }\r\n }\r\n\r\n newNode = child;\r\n pCurrent = [];\r\n cssText = '';\r\n while (newNode !== pNode && newNode !== el && newNode !== null) {\r\n vNode = _isMaintainedNode(newNode) ? null : validation(newNode);\r\n if (vNode && newNode.nodeType === 1 && checkCss(newNode)) {\r\n pCurrent.push(vNode);\r\n cssText += newNode.style.cssText.substr(0, newNode.style.cssText.indexOf(':')) + '|';\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n\r\n const childNode = pCurrent.pop() || textNode;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n if (anchorNode) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n newInnerNode.appendChild(childNode);\r\n anchorNode.insertBefore(newInnerNode, anchorNode.firstChild);\r\n pNode.appendChild(anchorNode);\r\n nNodeArray.push(newInnerNode);\r\n anchorNode = null;\r\n } else {\r\n newInnerNode.appendChild(childNode);\r\n }\r\n\r\n endContainer = textNode;\r\n endOffset = textNode.data.length;\r\n endPass = true;\r\n\r\n if (!isRemoveFormat && collapsed) {\r\n newInnerNode = textNode;\r\n textNode.textContent = util.zeroWidthSpace;\r\n }\r\n\r\n if (newNode !== textNode) newNode.appendChild(endContainer);\r\n continue;\r\n }\r\n\r\n // other\r\n if (startPass) {\r\n if (child.nodeType === 1 && !util.isBreak(child)) {\r\n if (util._isIgnoreNodeChange(child)) {\r\n pNode.appendChild(child.cloneNode(true));\r\n if (!collapsed) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n } else {\r\n recursionFunc(child, child);\r\n }\r\n continue;\r\n }\r\n\r\n newNode = child;\r\n pCurrent = [];\r\n cssText = '';\r\n const anchors = [];\r\n while (newNode.parentNode !== null && newNode !== el && newNode !== newInnerNode) {\r\n vNode = endPass ? newNode.cloneNode(false) : validation(newNode);\r\n if (newNode.nodeType === 1 && !util.isBreak(child) && vNode && checkCss(newNode)) {\r\n if (_isMaintainedNode(newNode)) {\r\n if (!anchorNode) anchors.push(vNode);\r\n } else {\r\n pCurrent.push(vNode);\r\n }\r\n cssText += newNode.style.cssText.substr(0, newNode.style.cssText.indexOf(':')) + '|';\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n pCurrent = pCurrent.concat(anchors);\r\n\r\n const childNode = pCurrent.pop() || child;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n if (_isMaintainedNode(newInnerNode.parentNode) && !_isMaintainedNode(childNode) && !util.onlyZeroWidthSpace(newInnerNode)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n\r\n if (!endPass && !anchorNode && _isMaintainedNode(childNode)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n const aChildren = childNode.childNodes;\r\n for (let a = 0, aLen = aChildren.length; a < aLen; a++) {\r\n newInnerNode.appendChild(aChildren[a]);\r\n }\r\n childNode.appendChild(newInnerNode);\r\n pNode.appendChild(childNode);\r\n nNodeArray.push(newInnerNode);\r\n if (newInnerNode.children.length > 0) ancestor = newNode;\r\n else ancestor = newInnerNode;\r\n } else if (childNode === child) {\r\n if (!endPass) ancestor = newInnerNode;\r\n else ancestor = pNode;\r\n } else if (endPass) {\r\n pNode.appendChild(childNode);\r\n ancestor = newNode;\r\n } else {\r\n newInnerNode.appendChild(childNode);\r\n ancestor = newNode;\r\n }\r\n\r\n if (anchorNode && child.nodeType === 3) {\r\n if (_getMaintainedNode(child)) {\r\n const ancestorAnchorNode = util.getParentElement(ancestor, function (current) {return this._isMaintainedNode(current.parentNode) || current.parentNode === pNode;}.bind(util));\r\n anchorNode.appendChild(ancestorAnchorNode);\r\n newInnerNode = ancestorAnchorNode.cloneNode(false);\r\n nNodeArray.push(newInnerNode);\r\n pNode.appendChild(newInnerNode);\r\n } else {\r\n anchorNode = null;\r\n }\r\n }\r\n }\r\n\r\n cloneNode = child.cloneNode(false);\r\n ancestor.appendChild(cloneNode);\r\n if (child.nodeType === 1 && !util.isBreak(child)) coverNode = cloneNode;\r\n\r\n recursionFunc(child, coverNode);\r\n }\r\n })(element, pNode);\r\n\r\n // not remove tag\r\n if (isRemoveNode && !isRemoveFormat && !_removeCheck.v) {\r\n return {\r\n ancestor: element,\r\n startContainer: startCon,\r\n startOffset: startOff,\r\n endContainer: endCon,\r\n endOffset: endOff\r\n };\r\n }\r\n\r\n isRemoveFormat = isRemoveFormat && isRemoveNode;\r\n\r\n if (isRemoveFormat) {\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n let removeNode = nNodeArray[i];\r\n let textNode, textNode_s, textNode_e;\r\n\r\n if (collapsed) {\r\n textNode = util.createTextNode(util.zeroWidthSpace);\r\n pNode.replaceChild(textNode, removeNode);\r\n } else {\r\n const rChildren = removeNode.childNodes;\r\n textNode_s = rChildren[0];\r\n while (rChildren[0]) {\r\n textNode_e = rChildren[0];\r\n pNode.insertBefore(textNode_e, removeNode);\r\n }\r\n util.removeItem(removeNode);\r\n }\r\n\r\n if (i === 0) {\r\n if (collapsed) {\r\n startContainer = endContainer = textNode;\r\n } else {\r\n startContainer = textNode_s;\r\n endContainer = textNode_e;\r\n }\r\n }\r\n }\r\n } else {\r\n if (isRemoveNode) {\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n this._stripRemoveNode(nNodeArray[i]);\r\n }\r\n }\r\n\r\n if (collapsed) {\r\n startContainer = endContainer = newInnerNode;\r\n }\r\n }\r\n\r\n util.removeEmptyNode(pNode, newInnerNode, false);\r\n\r\n if (collapsed) {\r\n startOffset = startContainer.textContent.length;\r\n endOffset = endContainer.textContent.length;\r\n }\r\n\r\n // endContainer reset\r\n const endConReset = isRemoveFormat || endContainer.textContent.length === 0;\r\n\r\n if (!util.isBreak(endContainer) && endContainer.textContent.length === 0) {\r\n util.removeItem(endContainer);\r\n endContainer = startContainer;\r\n }\r\n endOffset = endConReset ? endContainer.textContent.length : endOffset;\r\n\r\n // node change\r\n const newStartOffset = {s: 0, e: 0};\r\n const startPath = util.getNodePath(startContainer, pNode, newStartOffset);\r\n\r\n const mergeEndCon = !endContainer.parentNode;\r\n if (mergeEndCon) endContainer = startContainer;\r\n const newEndOffset = {s: 0, e: 0};\r\n const endPath = util.getNodePath(endContainer , pNode, (!mergeEndCon && !endConReset) ? newEndOffset : null);\r\n\r\n startOffset += newStartOffset.s;\r\n endOffset = (collapsed ? startOffset : mergeEndCon ? startContainer.textContent.length : endConReset ? endOffset + newStartOffset.s : endOffset + newEndOffset.s);\r\n\r\n // tag merge\r\n const newOffsets = util.mergeSameTags(pNode, [startPath, endPath], true);\r\n\r\n element.parentNode.replaceChild(pNode, element);\r\n\r\n startContainer = util.getNodeFromPath(startPath, pNode);\r\n endContainer = util.getNodeFromPath(endPath, pNode);\r\n\r\n return {\r\n ancestor: pNode,\r\n startContainer: startContainer,\r\n startOffset: startOffset + newOffsets[0],\r\n endContainer: endContainer,\r\n endOffset: endOffset + newOffsets[1]\r\n };\r\n },\r\n\r\n /**\r\n * @description wraps first line selected text.\r\n * @param {Element} element The node of the line that contains the selected text node.\r\n * @param {Element} newInnerNode The dom that will wrap the selected text area\r\n * @param {Function} validation Check if the node should be stripped.\r\n * @param {Node} startCon The startContainer property of the selection object.\r\n * @param {Number} startOff The startOffset property of the selection object.\r\n * @param {Boolean} isRemoveFormat Is the remove all formats command?\r\n * @param {Boolean} isRemoveNode \"newInnerNode\" is remove node?\r\n * @returns {null|Node} If end container is renewed, returned renewed node\r\n * @returns {Object} { ancestor, container, offset, endContainer }\r\n * @private\r\n */\r\n _nodeChange_startLine: function (element, newInnerNode, validation, startCon, startOff, isRemoveFormat, isRemoveNode, _removeCheck, _getMaintainedNode, _isMaintainedNode, _endContainer) {\r\n // not add tag\r\n let parentCon = startCon.parentNode;\r\n while (!parentCon.nextSibling && !parentCon.previousSibling && !util.isFormatElement(parentCon.parentNode) && !util.isWysiwygDiv(parentCon.parentNode)) {\r\n if (parentCon.nodeName === newInnerNode.nodeName) break;\r\n parentCon = parentCon.parentNode;\r\n }\r\n\r\n if (!isRemoveNode && parentCon.nodeName === newInnerNode.nodeName && !util.isFormatElement(parentCon) && !parentCon.nextSibling && util.onlyZeroWidthSpace(startCon.textContent.slice(0, startOff))) {\r\n let sameTag = true;\r\n let s = startCon.previousSibling;\r\n while (s) {\r\n if (!util.onlyZeroWidthSpace(s)) {\r\n sameTag = false;\r\n break;\r\n }\r\n s = s.previousSibling;\r\n }\r\n\r\n if (sameTag) {\r\n util.copyTagAttributes(parentCon, newInnerNode);\r\n\r\n return {\r\n ancestor: element,\r\n container: startCon,\r\n offset: startOff\r\n };\r\n }\r\n }\r\n\r\n // add tag\r\n _removeCheck.v = false;\r\n const el = element;\r\n const nNodeArray = [newInnerNode];\r\n const pNode = element.cloneNode(false);\r\n\r\n let container = startCon;\r\n let offset = startOff;\r\n let passNode = false;\r\n let pCurrent, newNode, appendNode, anchorNode;\r\n\r\n (function recursionFunc(current, ancestor) {\r\n const childNodes = current.childNodes;\r\n\r\n for (let i = 0, len = childNodes.length, vNode, cloneChild; i < len; i++) {\r\n const child = childNodes[i];\r\n if (!child) continue;\r\n let coverNode = ancestor;\r\n\r\n if (passNode && !util.isBreak(child)) {\r\n if (child.nodeType === 1) {\r\n if (util._isIgnoreNodeChange(child)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n cloneChild = child.cloneNode(true);\r\n pNode.appendChild(cloneChild);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n\r\n // end container\r\n if (_endContainer && child.contains(_endContainer)) {\r\n const endPath = util.getNodePath(_endContainer, child);\r\n _endContainer = util.getNodeFromPath(endPath, cloneChild);\r\n }\r\n } else {\r\n recursionFunc(child, child);\r\n }\r\n continue;\r\n }\r\n\r\n newNode = child;\r\n pCurrent = [];\r\n const anchors = [];\r\n while (newNode.parentNode !== null && newNode !== el && newNode !== newInnerNode) {\r\n vNode = validation(newNode);\r\n if (newNode.nodeType === 1 && vNode) {\r\n if (_isMaintainedNode(newNode)) {\r\n if (!anchorNode) anchors.push(vNode);\r\n } else {\r\n pCurrent.push(vNode);\r\n }\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n pCurrent = pCurrent.concat(anchors);\r\n\r\n const isTopNode = pCurrent.length > 0;\r\n const childNode = pCurrent.pop() || child;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n if (_isMaintainedNode(newInnerNode.parentNode) && !_isMaintainedNode(childNode)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n\r\n if (!anchorNode && _isMaintainedNode(childNode)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n const aChildren = childNode.childNodes;\r\n for (let a = 0, aLen = aChildren.length; a < aLen; a++) {\r\n newInnerNode.appendChild(aChildren[a]);\r\n }\r\n childNode.appendChild(newInnerNode);\r\n pNode.appendChild(childNode);\r\n ancestor = !_isMaintainedNode(newNode) ? newNode : newInnerNode;\r\n nNodeArray.push(newInnerNode);\r\n } else if (isTopNode) {\r\n newInnerNode.appendChild(childNode);\r\n ancestor = newNode;\r\n } else {\r\n ancestor = newInnerNode;\r\n }\r\n\r\n if (anchorNode && child.nodeType === 3) {\r\n if (_getMaintainedNode(child)) {\r\n const ancestorAnchorNode = util.getParentElement(ancestor, function (current) {return this._isMaintainedNode(current.parentNode) || current.parentNode === pNode;}.bind(util));\r\n anchorNode.appendChild(ancestorAnchorNode);\r\n newInnerNode = ancestorAnchorNode.cloneNode(false);\r\n nNodeArray.push(newInnerNode);\r\n pNode.appendChild(newInnerNode);\r\n } else {\r\n anchorNode = null;\r\n }\r\n }\r\n }\r\n\r\n // startContainer\r\n if (!passNode && child === container) {\r\n let line = pNode;\r\n anchorNode = _getMaintainedNode(child);\r\n const prevNode = util.createTextNode(container.nodeType === 1 ? '' : container.substringData(0, offset));\r\n const textNode = util.createTextNode(container.nodeType === 1 ? '' : container.substringData(offset, (container.length - offset)));\r\n\r\n if (anchorNode) {\r\n const a = _getMaintainedNode(ancestor);\r\n if (a && a.parentNode !== line) {\r\n let m = a;\r\n let p = null;\r\n while (m.parentNode !== line) {\r\n ancestor = p = m.parentNode.cloneNode(false);\r\n while(m.childNodes[0]) {\r\n p.appendChild(m.childNodes[0]);\r\n }\r\n m.appendChild(p);\r\n m = m.parentNode;\r\n }\r\n m.parentNode.appendChild(a);\r\n }\r\n anchorNode = anchorNode.cloneNode(false);\r\n }\r\n\r\n if (!util.onlyZeroWidthSpace(prevNode)) {\r\n ancestor.appendChild(prevNode);\r\n }\r\n\r\n const prevAnchorNode = _getMaintainedNode(ancestor);\r\n if (!!prevAnchorNode) anchorNode = prevAnchorNode;\r\n if (anchorNode) line = anchorNode;\r\n\r\n newNode = ancestor;\r\n pCurrent = [];\r\n while (newNode !== line && newNode !== null) {\r\n vNode = validation(newNode);\r\n if (newNode.nodeType === 1 && vNode) {\r\n pCurrent.push(vNode);\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n\r\n const childNode = pCurrent.pop() || ancestor;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n if (childNode !== ancestor) {\r\n newInnerNode.appendChild(childNode);\r\n ancestor = newNode;\r\n } else {\r\n ancestor = newInnerNode;\r\n }\r\n\r\n if (util.isBreak(child)) newInnerNode.appendChild(child.cloneNode(false));\r\n line.appendChild(newInnerNode);\r\n\r\n container = textNode;\r\n offset = 0;\r\n passNode = true;\r\n\r\n ancestor.appendChild(container);\r\n continue;\r\n }\r\n\r\n vNode = !passNode ? child.cloneNode(false) : validation(child);\r\n if (vNode) {\r\n ancestor.appendChild(vNode);\r\n if (child.nodeType === 1 && !util.isBreak(child)) coverNode = vNode;\r\n }\r\n\r\n recursionFunc(child, coverNode);\r\n }\r\n })(element, pNode);\r\n\r\n // not remove tag\r\n if (isRemoveNode && !isRemoveFormat && !_removeCheck.v) {\r\n return {\r\n ancestor: element,\r\n container: startCon,\r\n offset: startOff,\r\n endContainer: _endContainer\r\n };\r\n }\r\n\r\n isRemoveFormat = isRemoveFormat && isRemoveNode;\r\n\r\n if (isRemoveFormat) {\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n let removeNode = nNodeArray[i];\r\n\r\n const rChildren = removeNode.childNodes;\r\n const textNode = rChildren[0];\r\n while (rChildren[0]) {\r\n pNode.insertBefore(rChildren[0], removeNode);\r\n }\r\n util.removeItem(removeNode);\r\n\r\n if (i === 0) container = textNode;\r\n }\r\n } else if (isRemoveNode) {\r\n newInnerNode = newInnerNode.firstChild;\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n this._stripRemoveNode(nNodeArray[i]);\r\n }\r\n }\r\n\r\n if (!isRemoveFormat && pNode.childNodes.length === 0) {\r\n if (element.childNodes) {\r\n container = element.childNodes[0];\r\n } else {\r\n container = util.createTextNode(util.zeroWidthSpace);\r\n element.appendChild(container);\r\n }\r\n } else {\r\n util.removeEmptyNode(pNode, newInnerNode, false);\r\n\r\n if (util.onlyZeroWidthSpace(pNode.textContent)) {\r\n container = pNode.firstChild;\r\n offset = 0;\r\n }\r\n\r\n // node change\r\n const offsets = {s: 0, e: 0};\r\n const path = util.getNodePath(container, pNode, offsets);\r\n offset += offsets.s;\r\n\r\n // tag merge\r\n const newOffsets = util.mergeSameTags(pNode, [path], true);\r\n\r\n element.parentNode.replaceChild(pNode, element);\r\n\r\n container = util.getNodeFromPath(path, pNode);\r\n offset += newOffsets[0];\r\n }\r\n\r\n return {\r\n ancestor: pNode,\r\n container: container,\r\n offset: offset,\r\n endContainer: _endContainer\r\n };\r\n },\r\n\r\n /**\r\n * @description wraps mid lines selected text.\r\n * @param {Element} element The node of the line that contains the selected text node.\r\n * @param {Element} newInnerNode The dom that will wrap the selected text area\r\n * @param {Function} validation Check if the node should be stripped.\r\n * @param {Boolean} isRemoveFormat Is the remove all formats command?\r\n * @param {Boolean} isRemoveNode \"newInnerNode\" is remove node?\r\n * @param {Node} _endContainer Offset node of last line already modified (end.container)\r\n * @returns {Object} { ancestor, endContainer: \"If end container is renewed, returned renewed node\" }\r\n * @private\r\n */\r\n _nodeChange_middleLine: function (element, newInnerNode, validation, isRemoveFormat, isRemoveNode, _removeCheck, _endContainer) {\r\n // not add tag\r\n if (!isRemoveNode) {\r\n // end container path\r\n let endPath = null;\r\n if (_endContainer && element.contains(_endContainer)) endPath = util.getNodePath(_endContainer, element);\r\n\r\n const tempNode = element.cloneNode(true);\r\n const newNodeName = newInnerNode.nodeName;\r\n const newCssText = newInnerNode.style.cssText;\r\n const newClass = newInnerNode.className;\r\n\r\n let children = tempNode.childNodes;\r\n let i = 0, len = children.length;\r\n for (let child; i < len; i++) {\r\n child = children[i];\r\n if (child.nodeType === 3) break;\r\n if (child.nodeName === newNodeName) {\r\n child.style.cssText += newCssText;\r\n util.addClass(child, newClass);\r\n } else if (!util.isBreak(child) && util._isIgnoreNodeChange(child)) {\r\n continue;\r\n } else if (len === 1) {\r\n children = child.childNodes;\r\n len = children.length;\r\n i = -1;\r\n continue;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n if (len > 0 && i === len) {\r\n element.innerHTML = tempNode.innerHTML;\r\n return {\r\n ancestor: element,\r\n endContainer: endPath ? util.getNodeFromPath(endPath, element) : null\r\n };\r\n }\r\n }\r\n\r\n // add tag\r\n _removeCheck.v = false;\r\n const pNode = element.cloneNode(false);\r\n const nNodeArray = [newInnerNode];\r\n let noneChange = true;\r\n\r\n (function recursionFunc(current, ancestor) {\r\n const childNodes = current.childNodes;\r\n\r\n for (let i = 0, len = childNodes.length, vNode, cloneChild; i < len; i++) {\r\n let child = childNodes[i];\r\n if (!child) continue;\r\n let coverNode = ancestor;\r\n\r\n if (!util.isBreak(child) && util._isIgnoreNodeChange(child)) {\r\n if (newInnerNode.childNodes.length > 0) {\r\n pNode.appendChild(newInnerNode);\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n }\r\n\r\n cloneChild = child.cloneNode(true);\r\n pNode.appendChild(cloneChild);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n ancestor = newInnerNode;\r\n\r\n // end container\r\n if (_endContainer && child.contains(_endContainer)) {\r\n const endPath = util.getNodePath(_endContainer, child);\r\n _endContainer = util.getNodeFromPath(endPath, cloneChild);\r\n }\r\n\r\n continue;\r\n } else {\r\n vNode = validation(child);\r\n if (vNode) {\r\n noneChange = false;\r\n ancestor.appendChild(vNode);\r\n if (child.nodeType === 1) coverNode = vNode;\r\n }\r\n }\r\n\r\n if (!util.isBreak(child)) recursionFunc(child, coverNode);\r\n }\r\n })(element, newInnerNode);\r\n\r\n // not remove tag\r\n if (noneChange || (isRemoveNode && !isRemoveFormat && !_removeCheck.v)) return { ancestor: element, endContainer: _endContainer };\r\n\r\n pNode.appendChild(newInnerNode);\r\n\r\n if (isRemoveFormat && isRemoveNode) {\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n let removeNode = nNodeArray[i];\r\n\r\n const rChildren = removeNode.childNodes;\r\n while (rChildren[0]) {\r\n pNode.insertBefore(rChildren[0], removeNode);\r\n }\r\n util.removeItem(removeNode);\r\n }\r\n } else if (isRemoveNode) {\r\n newInnerNode = newInnerNode.firstChild;\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n this._stripRemoveNode(nNodeArray[i]);\r\n }\r\n }\r\n\r\n util.removeEmptyNode(pNode, newInnerNode, false);\r\n util.mergeSameTags(pNode, null, true);\r\n\r\n // node change\r\n element.parentNode.replaceChild(pNode, element);\r\n return { ancestor: pNode, endContainer: _endContainer };\r\n },\r\n\r\n /**\r\n * @description wraps last line selected text.\r\n * @param {Element} element The node of the line that contains the selected text node.\r\n * @param {Element} newInnerNode The dom that will wrap the selected text area\r\n * @param {Function} validation Check if the node should be stripped.\r\n * @param {Node} endCon The endContainer property of the selection object.\r\n * @param {Number} endOff The endOffset property of the selection object.\r\n * @param {Boolean} isRemoveFormat Is the remove all formats command?\r\n * @param {Boolean} isRemoveNode \"newInnerNode\" is remove node?\r\n * @returns {Object} { ancestor, container, offset }\r\n * @private\r\n */\r\n _nodeChange_endLine: function (element, newInnerNode, validation, endCon, endOff, isRemoveFormat, isRemoveNode, _removeCheck, _getMaintainedNode, _isMaintainedNode) {\r\n // not add tag\r\n let parentCon = endCon.parentNode;\r\n while (!parentCon.nextSibling && !parentCon.previousSibling && !util.isFormatElement(parentCon.parentNode) && !util.isWysiwygDiv(parentCon.parentNode)) {\r\n if (parentCon.nodeName === newInnerNode.nodeName) break;\r\n parentCon = parentCon.parentNode;\r\n }\r\n\r\n if (!isRemoveNode && parentCon.nodeName === newInnerNode.nodeName && !util.isFormatElement(parentCon) && !parentCon.previousSibling && util.onlyZeroWidthSpace(endCon.textContent.slice(endOff))) {\r\n let sameTag = true;\r\n let e = endCon.nextSibling;\r\n while (e) {\r\n if (!util.onlyZeroWidthSpace(e)) {\r\n sameTag = false;\r\n break;\r\n }\r\n e = e.nextSibling;\r\n }\r\n\r\n if (sameTag) {\r\n util.copyTagAttributes(parentCon, newInnerNode);\r\n\r\n return {\r\n ancestor: element,\r\n container: endCon,\r\n offset: endOff\r\n };\r\n }\r\n }\r\n\r\n // add tag\r\n _removeCheck.v = false;\r\n const el = element;\r\n const nNodeArray = [newInnerNode];\r\n const pNode = element.cloneNode(false);\r\n\r\n let container = endCon;\r\n let offset = endOff;\r\n let passNode = false;\r\n let pCurrent, newNode, appendNode, anchorNode;\r\n\r\n (function recursionFunc(current, ancestor) {\r\n const childNodes = current.childNodes;\r\n\r\n for (let i = childNodes.length - 1, vNode; 0 <= i; i--) {\r\n const child = childNodes[i];\r\n if (!child) continue;\r\n let coverNode = ancestor;\r\n\r\n if (passNode && !util.isBreak(child)) {\r\n if (child.nodeType === 1) {\r\n if (util._isIgnoreNodeChange(child)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n const cloneChild = child.cloneNode(true);\r\n pNode.insertBefore(cloneChild, ancestor);\r\n pNode.insertBefore(newInnerNode, cloneChild);\r\n nNodeArray.push(newInnerNode);\r\n } else {\r\n recursionFunc(child, child);\r\n }\r\n continue;\r\n }\r\n\r\n newNode = child;\r\n pCurrent = [];\r\n const anchors = [];\r\n while (newNode.parentNode !== null && newNode !== el && newNode !== newInnerNode) {\r\n vNode = validation(newNode);\r\n if (vNode && newNode.nodeType === 1) {\r\n if (_isMaintainedNode(newNode)) {\r\n if (!anchorNode) anchors.push(vNode);\r\n } else {\r\n pCurrent.push(vNode);\r\n }\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n pCurrent = pCurrent.concat(anchors);\r\n\r\n const isTopNode = pCurrent.length > 0;\r\n const childNode = pCurrent.pop() || child;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n if (_isMaintainedNode(newInnerNode.parentNode) && !_isMaintainedNode(childNode)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.insertBefore(newInnerNode, pNode.firstChild);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n\r\n if (!anchorNode && _isMaintainedNode(childNode)) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n const aChildren = childNode.childNodes;\r\n for (let a = 0, aLen = aChildren.length; a < aLen; a++) {\r\n newInnerNode.appendChild(aChildren[a]);\r\n }\r\n childNode.appendChild(newInnerNode);\r\n pNode.insertBefore(childNode, pNode.firstChild);\r\n nNodeArray.push(newInnerNode);\r\n if (newInnerNode.children.length > 0) ancestor = newNode;\r\n else ancestor = newInnerNode;\r\n } else if (isTopNode) {\r\n newInnerNode.insertBefore(childNode, newInnerNode.firstChild);\r\n ancestor = newNode;\r\n } else {\r\n ancestor = newInnerNode;\r\n }\r\n\r\n if (anchorNode && child.nodeType === 3) {\r\n if (_getMaintainedNode(child)) {\r\n const ancestorAnchorNode = util.getParentElement(ancestor, function (current) {return this._isMaintainedNode(current.parentNode) || current.parentNode === pNode;}.bind(util));\r\n anchorNode.appendChild(ancestorAnchorNode);\r\n newInnerNode = ancestorAnchorNode.cloneNode(false);\r\n nNodeArray.push(newInnerNode);\r\n pNode.insertBefore(newInnerNode, pNode.firstChild);\r\n } else {\r\n anchorNode = null;\r\n }\r\n }\r\n }\r\n\r\n // endContainer\r\n if (!passNode && child === container) {\r\n anchorNode = _getMaintainedNode(child);\r\n const afterNode = util.createTextNode(container.nodeType === 1 ? '' : container.substringData(offset, (container.length - offset)));\r\n const textNode = util.createTextNode(container.nodeType === 1 ? '' : container.substringData(0, offset));\r\n\r\n if (anchorNode) {\r\n anchorNode = anchorNode.cloneNode(false);\r\n const a = _getMaintainedNode(ancestor);\r\n if (a && a.parentNode !== pNode) {\r\n let m = a;\r\n let p = null;\r\n while (m.parentNode !== pNode) {\r\n ancestor = p = m.parentNode.cloneNode(false);\r\n while(m.childNodes[0]) {\r\n p.appendChild(m.childNodes[0]);\r\n }\r\n m.appendChild(p);\r\n m = m.parentNode;\r\n }\r\n m.parentNode.insertBefore(a, m.parentNode.firstChild);\r\n }\r\n anchorNode = anchorNode.cloneNode(false);\r\n } else if (_isMaintainedNode(newInnerNode.parentNode) && !anchorNode) {\r\n newInnerNode = newInnerNode.cloneNode(false);\r\n pNode.appendChild(newInnerNode);\r\n nNodeArray.push(newInnerNode);\r\n }\r\n\r\n if (!util.onlyZeroWidthSpace(afterNode)) {\r\n ancestor.insertBefore(afterNode, ancestor.firstChild);\r\n }\r\n\r\n newNode = ancestor;\r\n pCurrent = [];\r\n while (newNode !== pNode && newNode !== null) {\r\n vNode = _isMaintainedNode(newNode) ? null : validation(newNode);\r\n if (vNode && newNode.nodeType === 1) {\r\n pCurrent.push(vNode);\r\n }\r\n newNode = newNode.parentNode;\r\n }\r\n\r\n const childNode = pCurrent.pop() || ancestor;\r\n appendNode = newNode = childNode;\r\n while (pCurrent.length > 0) {\r\n newNode = pCurrent.pop();\r\n appendNode.appendChild(newNode);\r\n appendNode = newNode;\r\n }\r\n\r\n if (childNode !== ancestor) {\r\n newInnerNode.insertBefore(childNode, newInnerNode.firstChild);\r\n ancestor = newNode;\r\n } else {\r\n ancestor = newInnerNode;\r\n }\r\n\r\n if (util.isBreak(child)) newInnerNode.appendChild(child.cloneNode(false));\r\n\r\n if (anchorNode) {\r\n anchorNode.insertBefore(newInnerNode, anchorNode.firstChild);\r\n pNode.insertBefore(anchorNode, pNode.firstChild);\r\n anchorNode = null;\r\n } else {\r\n pNode.insertBefore(newInnerNode, pNode.firstChild);\r\n }\r\n\r\n container = textNode;\r\n offset = textNode.data.length;\r\n passNode = true;\r\n\r\n ancestor.insertBefore(container, ancestor.firstChild);\r\n continue;\r\n }\r\n\r\n vNode = !passNode ? child.cloneNode(false) : validation(child);\r\n if (vNode) {\r\n ancestor.insertBefore(vNode, ancestor.firstChild);\r\n if (child.nodeType === 1 && !util.isBreak(child)) coverNode = vNode;\r\n }\r\n\r\n recursionFunc(child, coverNode);\r\n }\r\n })(element, pNode);\r\n\r\n // not remove tag\r\n if (isRemoveNode && !isRemoveFormat && !_removeCheck.v) {\r\n return {\r\n ancestor: element,\r\n container: endCon,\r\n offset: endOff\r\n };\r\n }\r\n\r\n isRemoveFormat = isRemoveFormat && isRemoveNode;\r\n\r\n if (isRemoveFormat) {\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n let removeNode = nNodeArray[i];\r\n\r\n const rChildren = removeNode.childNodes;\r\n let textNode = null;\r\n while (rChildren[0]) {\r\n textNode = rChildren[0];\r\n pNode.insertBefore(textNode, removeNode);\r\n }\r\n util.removeItem(removeNode);\r\n\r\n if (i === nNodeArray.length - 1) {\r\n container = textNode;\r\n offset = textNode.textContent.length;\r\n }\r\n }\r\n } else if (isRemoveNode) {\r\n newInnerNode = newInnerNode.firstChild;\r\n for (let i = 0; i < nNodeArray.length; i++) {\r\n this._stripRemoveNode(nNodeArray[i]);\r\n }\r\n }\r\n\r\n if (!isRemoveFormat && pNode.childNodes.length === 0) {\r\n if (element.childNodes) {\r\n container = element.childNodes[0];\r\n } else {\r\n container = util.createTextNode(util.zeroWidthSpace);\r\n element.appendChild(container);\r\n }\r\n } else {\r\n if (!isRemoveNode && newInnerNode.textContent.length === 0) {\r\n util.removeEmptyNode(pNode, null, false);\r\n return {\r\n ancestor: null,\r\n container: null,\r\n offset: 0\r\n };\r\n }\r\n\r\n util.removeEmptyNode(pNode, newInnerNode, false);\r\n\r\n if (util.onlyZeroWidthSpace(pNode.textContent)) {\r\n container = pNode.firstChild;\r\n offset = container.textContent.length;\r\n } else if (util.onlyZeroWidthSpace(container)) {\r\n container = newInnerNode;\r\n offset = 1;\r\n }\r\n\r\n // node change\r\n const offsets = {s: 0, e: 0};\r\n const path = util.getNodePath(container, pNode, offsets);\r\n offset += offsets.s;\r\n\r\n // tag merge\r\n const newOffsets = util.mergeSameTags(pNode, [path], true);\r\n\r\n element.parentNode.replaceChild(pNode, element);\r\n\r\n container = util.getNodeFromPath(path, pNode);\r\n offset += newOffsets[0];\r\n }\r\n\r\n return {\r\n ancestor: pNode,\r\n container: container,\r\n offset: container.nodeType === 1 && offset === 1 ? container.childNodes.length : offset\r\n };\r\n },\r\n\r\n /**\r\n * @description Run plugin calls and basic commands.\r\n * @param {String} command Command string\r\n * @param {String} display Display type string ('command', 'submenu', 'dialog', 'container')\r\n * @param {Element} target The element of command button\r\n */\r\n actionCall: function (command, display, target) {\r\n // call plugins\r\n if (display) {\r\n if (/more/i.test(display)) {\r\n if (target !== this._moreLayerActiveButton) {\r\n const layer = context.element.toolbar.querySelector('.' + command);\r\n if (layer) {\r\n if (this._moreLayerActiveButton) this.moreLayerOff();\r\n\r\n this._moreLayerActiveButton = target;\r\n layer.style.display = 'block';\r\n\r\n event._showToolbarBalloon();\r\n event._showToolbarInline();\r\n }\r\n util.addClass(target, 'on');\r\n } else {\r\n const layer = context.element.toolbar.querySelector('.' + this._moreLayerActiveButton.getAttribute('data-command'));\r\n if (layer) {\r\n this.moreLayerOff();\r\n\r\n event._showToolbarBalloon();\r\n event._showToolbarInline();\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (/container/.test(display) && (this._menuTray[command] === null || target !== this.containerActiveButton)) {\r\n this.callPlugin(command, this.containerOn.bind(this, target), target);\r\n return;\r\n }\r\n\r\n if (this.isReadOnly && util.arrayIncludes(this.resizingDisabledButtons, target)) return;\r\n if (/submenu/.test(display) && (this._menuTray[command] === null || target !== this.submenuActiveButton)) {\r\n this.callPlugin(command, this.submenuOn.bind(this, target), target);\r\n return;\r\n } else if (/dialog/.test(display)) {\r\n this.callPlugin(command, this.plugins[command].open.bind(this), target);\r\n return;\r\n } else if (/command/.test(display)) {\r\n this.callPlugin(command, this.plugins[command].action.bind(this), target);\r\n } else if (/fileBrowser/.test(display)) {\r\n this.callPlugin(command, this.plugins[command].open.bind(this, null), target);\r\n }\r\n } // default command\r\n else if (command) {\r\n this.commandHandler(target, command);\r\n }\r\n\r\n if (/submenu/.test(display)) {\r\n this.submenuOff();\r\n } else if (!/command/.test(display)) {\r\n this.submenuOff();\r\n this.containerOff();\r\n }\r\n },\r\n\r\n /**\r\n * @description Execute command of command button(All Buttons except submenu and dialog)\r\n * (selectAll, codeView, fullScreen, indent, outdent, undo, redo, removeFormat, print, preview, showBlocks, save, bold, underline, italic, strike, subscript, superscript, copy, cut, paste)\r\n * @param {Element|null} target The element of command button\r\n * @param {String} command Property of command button (data-value)\r\n */\r\n commandHandler: function (target, command) {\r\n if (core.isReadOnly && !/copy|cut|selectAll|codeView|fullScreen|print|preview|showBlocks/.test(command)) return;\r\n switch (command) {\r\n case 'copy':\r\n case 'cut':\r\n this.execCommand(command);\r\n break;\r\n case 'paste':\r\n break;\r\n case 'selectAll':\r\n this.containerOff();\r\n const wysiwyg = context.element.wysiwyg;\r\n let first = util.getChildElement(wysiwyg.firstChild, function (current) { return current.childNodes.length === 0 || current.nodeType === 3; }, false) || wysiwyg.firstChild;\r\n let last = util.getChildElement(wysiwyg.lastChild, function (current) { return current.childNodes.length === 0 || current.nodeType === 3; }, true) || wysiwyg.lastChild;\r\n if (!first || !last) return;\r\n if (util.isMedia(first)) {\r\n const info = this.getFileComponent(first);\r\n const br = util.createElement('BR');\r\n const format = util.createElement(options.defaultTag);\r\n format.appendChild(br);\r\n first = info ? info.component : first;\r\n first.parentNode.insertBefore(format, first);\r\n first = br;\r\n }\r\n if (util.isMedia(last)) {\r\n const br = util.createElement('BR');\r\n const format = util.createElement(options.defaultTag);\r\n format.appendChild(br);\r\n wysiwyg.appendChild(format);\r\n last = br;\r\n }\r\n event._showToolbarBalloon(this.setRange(first, 0, last, last.textContent.length));\r\n break;\r\n case 'codeView':\r\n this.toggleCodeView();\r\n break;\r\n case 'fullScreen':\r\n this.toggleFullScreen(target);\r\n break;\r\n case 'indent':\r\n case 'outdent':\r\n this.indent(command);\r\n break;\r\n case 'undo':\r\n this.history.undo();\r\n break;\r\n case 'redo':\r\n this.history.redo();\r\n break;\r\n case 'removeFormat':\r\n this.removeFormat();\r\n this.focus();\r\n break;\r\n case 'print':\r\n this.print();\r\n break;\r\n case 'preview':\r\n this.preview();\r\n break;\r\n case 'showBlocks':\r\n this.toggleDisplayBlocks();\r\n break;\r\n case 'dir':\r\n this.setDir(options.rtl ? 'ltr' : 'rtl');\r\n break;\r\n case 'dir_ltr':\r\n this.setDir('ltr');\r\n break;\r\n case 'dir_rtl':\r\n this.setDir('rtl');\r\n break;\r\n case 'save':\r\n if (typeof options.callBackSave === 'function') {\r\n options.callBackSave(this.getContents(false), this._variable.isChanged);\r\n } else if (this._variable.isChanged && typeof functions.save === 'function') {\r\n functions.save();\r\n } else {\r\n throw Error('[SUNEDITOR.core.commandHandler.fail] Please register call back function in creation option. (callBackSave : Function)');\r\n }\r\n\r\n this._variable.isChanged = false;\r\n if (context.tool.save) context.tool.save.setAttribute('disabled', true);\r\n break;\r\n default : // 'STRONG', 'U', 'EM', 'DEL', 'SUB', 'SUP'..\r\n command = options._defaultCommand[command.toLowerCase()] || command;\r\n if (!this.commandMap[command]) this.commandMap[command] = target;\r\n\r\n const nodesMap = this._variable.currentNodesMap;\r\n const cmd = nodesMap.indexOf(command) > -1 ? null : util.createElement(command);\r\n let removeNode = command;\r\n\r\n if (/^SUB$/i.test(command) && nodesMap.indexOf('SUP') > -1) {\r\n removeNode = 'SUP';\r\n } else if (/^SUP$/i.test(command) && nodesMap.indexOf('SUB') > -1) {\r\n removeNode = 'SUB';\r\n }\r\n\r\n this.nodeChange(cmd, this._commandMapStyles[command] || null, [removeNode], false);\r\n this.focus();\r\n }\r\n },\r\n\r\n /**\r\n * @description Remove format of the currently selected range\r\n */\r\n removeFormat: function () {\r\n this.nodeChange(null, null, null, null);\r\n },\r\n\r\n /**\r\n * @description This method implements indentation to selected range.\r\n * Setted \"margin-left\" to \"25px\" in the top \"P\" tag of the parameter node.\r\n * @param {String} command Separator (\"indent\" or \"outdent\")\r\n */\r\n indent: function (command) {\r\n const range = this.getRange();\r\n const rangeLines = this.getSelectedElements(null);\r\n const cells = [];\r\n const shift = 'indent' !== command;\r\n const marginDir = options.rtl ? 'marginRight' : 'marginLeft';\r\n let sc = range.startContainer;\r\n let ec = range.endContainer;\r\n let so = range.startOffset;\r\n let eo = range.endOffset;\r\n\r\n for (let i = 0, len = rangeLines.length, f, margin; i < len; i++) {\r\n f = rangeLines[i];\r\n if (!util.isListCell(f) || !this.plugins.list) {\r\n margin = /\\d+/.test(f.style[marginDir]) ? util.getNumber(f.style[marginDir], 0) : 0;\r\n if (shift) {\r\n margin -= 25;\r\n } else {\r\n margin += 25;\r\n }\r\n util.setStyle(f, marginDir, (margin <= 0 ? '' : margin + 'px'));\r\n } else {\r\n if (shift || f.previousElementSibling) {\r\n cells.push(f);\r\n }\r\n }\r\n }\r\n\r\n // list cells\r\n if (cells.length > 0) {\r\n this.plugins.list.editInsideList.call(this, shift, cells);\r\n }\r\n\r\n this.effectNode = null;\r\n this.setRange(sc, so, ec, eo);\r\n\r\n // history stack\r\n this.history.push(false);\r\n },\r\n\r\n /**\r\n * @description Add or remove the class name of \"body\" so that the code block is visible\r\n */\r\n toggleDisplayBlocks: function () {\r\n const wysiwyg = context.element.wysiwyg;\r\n util.toggleClass(wysiwyg, 'se-show-block');\r\n if (util.hasClass(wysiwyg, 'se-show-block')) {\r\n util.addClass(this._styleCommandMap.showBlocks, 'active');\r\n } else {\r\n util.removeClass(this._styleCommandMap.showBlocks, 'active');\r\n }\r\n this._resourcesStateChange();\r\n },\r\n\r\n /**\r\n * @description Changes to code view or wysiwyg view\r\n */\r\n toggleCodeView: function () {\r\n const isCodeView = this._variable.isCodeView;\r\n this.controllersOff();\r\n util.setDisabledButtons(!isCodeView, this.codeViewDisabledButtons);\r\n\r\n if (isCodeView) {\r\n if (!util.isNonEditable(context.element.wysiwygFrame)) this._setCodeDataToEditor();\r\n context.element.wysiwygFrame.scrollTop = 0;\r\n context.element.code.style.display = 'none';\r\n context.element.wysiwygFrame.style.display = 'block';\r\n\r\n this._variable._codeOriginCssText = this._variable._codeOriginCssText.replace(/(\\s?display(\\s+)?:(\\s+)?)[a-zA-Z]+(?=;)/, 'display: none');\r\n this._variable._wysiwygOriginCssText = this._variable._wysiwygOriginCssText.replace(/(\\s?display(\\s+)?:(\\s+)?)[a-zA-Z]+(?=;)/, 'display: block');\r\n\r\n if (options.height === 'auto' && !options.codeMirrorEditor) context.element.code.style.height = '0px';\r\n\r\n this._variable.isCodeView = false;\r\n\r\n if (!this._variable.isFullScreen) {\r\n this._notHideToolbar = false;\r\n if (/balloon|balloon-always/i.test(options.mode)) {\r\n context.element._arrow.style.display = '';\r\n this._isInline = false;\r\n this._isBalloon = true;\r\n event._hideToolbar();\r\n }\r\n }\r\n\r\n this.nativeFocus();\r\n util.removeClass(this._styleCommandMap.codeView, 'active');\r\n\r\n // history stack\r\n if (!util.isNonEditable(context.element.wysiwygFrame)) {\r\n this.history.push(false);\r\n this.history._resetCachingButton();\r\n }\r\n } else {\r\n this._setEditorDataToCodeView();\r\n this._variable._codeOriginCssText = this._variable._codeOriginCssText.replace(/(\\s?display(\\s+)?:(\\s+)?)[a-zA-Z]+(?=;)/, 'display: block');\r\n this._variable._wysiwygOriginCssText = this._variable._wysiwygOriginCssText.replace(/(\\s?display(\\s+)?:(\\s+)?)[a-zA-Z]+(?=;)/, 'display: none');\r\n\r\n if (this._variable.isFullScreen) context.element.code.style.height = '100%';\r\n else if (options.height === 'auto' && !options.codeMirrorEditor) context.element.code.style.height = context.element.code.scrollHeight > 0 ? (context.element.code.scrollHeight + 'px') : 'auto';\r\n\r\n if (options.codeMirrorEditor) options.codeMirrorEditor.refresh();\r\n\r\n this._variable.isCodeView = true;\r\n\r\n if (!this._variable.isFullScreen) {\r\n this._notHideToolbar = true;\r\n if (this._isBalloon) {\r\n context.element._arrow.style.display = 'none';\r\n context.element.toolbar.style.left = '';\r\n this._isInline = true;\r\n this._isBalloon = false;\r\n event._showToolbarInline();\r\n }\r\n }\r\n\r\n this._variable._range = null;\r\n context.element.code.focus();\r\n util.addClass(this._styleCommandMap.codeView, 'active');\r\n }\r\n\r\n this._checkPlaceholder();\r\n if (this.isReadOnly) util.setDisabledButtons(true, this.resizingDisabledButtons);\r\n\r\n // user event\r\n if (typeof functions.toggleCodeView === 'function') functions.toggleCodeView(this._variable.isCodeView, this);\r\n },\r\n\r\n /**\r\n * @description Convert the data of the code view and put it in the WYSIWYG area.\r\n * @private\r\n */\r\n _setCodeDataToEditor: function () {\r\n const code_html = this._getCodeView();\r\n\r\n if (options.fullPage) {\r\n const parseDocument = this._parser.parseFromString(code_html, 'text/html');\r\n\r\n if (!this.options.__allowedScriptTag) {\r\n const headChildren = parseDocument.head.children;\r\n for (let i = 0, len = headChildren.length; i < len; i++) {\r\n if (/^script$/i.test(headChildren[i].tagName)) {\r\n parseDocument.head.removeChild(headChildren[i]);\r\n i--, len--;\r\n }\r\n }\r\n }\r\n\r\n let headers = parseDocument.head.innerHTML;\r\n if (!parseDocument.head.querySelector('link[rel=\"stylesheet\"]') || (this.options.height === 'auto' && !parseDocument.head.querySelector('style'))) {\r\n headers += util._setIframeCssTags(this.options);\r\n }\r\n\r\n this._wd.head.innerHTML = headers;\r\n this._wd.body.innerHTML = this.convertContentsForEditor(parseDocument.body.innerHTML);\r\n\r\n const attrs = parseDocument.body.attributes;\r\n for (let i = 0, len = attrs.length; i < len; i++) {\r\n if (attrs[i].name === 'contenteditable') continue;\r\n this._wd.body.setAttribute(attrs[i].name, attrs[i].value);\r\n }\r\n if (!util.hasClass(this._wd.body, 'sun-editor-editable')) {\r\n const editableClasses = options._editableClass.split(' ');\r\n for (let i = 0; i < editableClasses.length; i++) {\r\n util.addClass(this._wd.body, options._editableClass[i]);\r\n }\r\n }\r\n } else {\r\n context.element.wysiwyg.innerHTML = code_html.length > 0 ? this.convertContentsForEditor(code_html) : '<' + options.defaultTag + '>
      ';\r\n }\r\n },\r\n\r\n /**\r\n * @description Convert the data of the WYSIWYG area and put it in the code view area.\r\n * @private\r\n */\r\n _setEditorDataToCodeView: function () {\r\n const codeContents = this.convertHTMLForCodeView(context.element.wysiwyg, false);\r\n let codeValue = '';\r\n\r\n if (options.fullPage) {\r\n const attrs = util.getAttributesToString(this._wd.body, null);\r\n codeValue = '\\n\\n' + this._wd.head.outerHTML.replace(/>(?!\\n)/g, '>\\n') + '\\n' + codeContents + '\\n';\r\n } else {\r\n codeValue = codeContents;\r\n }\r\n\r\n context.element.code.style.display = 'block';\r\n context.element.wysiwygFrame.style.display = 'none';\r\n\r\n this._setCodeView(codeValue);\r\n },\r\n\r\n /**\r\n * @description Changes to full screen or default screen\r\n * @param {Element|null} element full screen button\r\n */\r\n toggleFullScreen: function (element) {\r\n const topArea = context.element.topArea;\r\n const toolbar = context.element.toolbar;\r\n const editorArea = context.element.editorArea;\r\n const wysiwygFrame = context.element.wysiwygFrame;\r\n const code = context.element.code;\r\n const _var = this._variable;\r\n this.controllersOff();\r\n\r\n const wasToolbarHidden = (toolbar.style.display === 'none' || (this._isInline && !this._inlineToolbarAttr.isShow));\r\n\r\n if (!_var.isFullScreen) {\r\n _var.isFullScreen = true;\r\n\r\n _var._fullScreenAttrs.inline = this._isInline;\r\n _var._fullScreenAttrs.balloon = this._isBalloon;\r\n\r\n if (this._isInline || this._isBalloon) {\r\n this._isInline = false;\r\n this._isBalloon = false;\r\n }\r\n\r\n if (!!options.toolbarContainer) context.element.relative.insertBefore(toolbar, editorArea);\r\n\r\n topArea.style.position = 'fixed';\r\n topArea.style.top = '0';\r\n topArea.style.left = '0';\r\n topArea.style.width = '100%';\r\n topArea.style.maxWidth = '100%';\r\n topArea.style.height = '100%';\r\n topArea.style.zIndex = '2147483647';\r\n\r\n if (context.element._stickyDummy.style.display !== ('none' && '')) {\r\n _var._fullScreenAttrs.sticky = true;\r\n context.element._stickyDummy.style.display = 'none';\r\n util.removeClass(toolbar, 'se-toolbar-sticky');\r\n }\r\n\r\n _var._bodyOverflow = _d.body.style.overflow;\r\n _d.body.style.overflow = 'hidden';\r\n\r\n _var._editorAreaOriginCssText = editorArea.style.cssText;\r\n _var._wysiwygOriginCssText = wysiwygFrame.style.cssText;\r\n _var._codeOriginCssText = code.style.cssText;\r\n\r\n editorArea.style.cssText = toolbar.style.cssText = '';\r\n wysiwygFrame.style.cssText = (wysiwygFrame.style.cssText.match(/\\s?display(\\s+)?:(\\s+)?[a-zA-Z]+;/) || [''])[0] + options._editorStyles.editor;\r\n code.style.cssText = (code.style.cssText.match(/\\s?display(\\s+)?:(\\s+)?[a-zA-Z]+;/) || [''])[0];\r\n toolbar.style.width = wysiwygFrame.style.height = code.style.height = '100%';\r\n toolbar.style.position = 'relative';\r\n toolbar.style.display = 'block';\r\n\r\n _var.innerHeight_fullScreen = (_w.innerHeight - toolbar.offsetHeight);\r\n editorArea.style.height = (_var.innerHeight_fullScreen - options.fullScreenOffset) + 'px';\r\n\r\n if (element) util.changeElement(element.firstElementChild, icons.reduction);\r\n\r\n if (options.iframe && options.height === 'auto') {\r\n editorArea.style.overflow = 'auto';\r\n this._iframeAutoHeight();\r\n }\r\n\r\n context.element.topArea.style.marginTop = options.fullScreenOffset + 'px';\r\n util.addClass(this._styleCommandMap.fullScreen, 'active');\r\n } else {\r\n _var.isFullScreen = false;\r\n\r\n wysiwygFrame.style.cssText = _var._wysiwygOriginCssText;\r\n code.style.cssText = _var._codeOriginCssText;\r\n toolbar.style.cssText = '';\r\n editorArea.style.cssText = _var._editorAreaOriginCssText;\r\n topArea.style.cssText = _var._originCssText;\r\n _d.body.style.overflow = _var._bodyOverflow;\r\n\r\n if (options.height === 'auto' && !options.codeMirrorEditor) event._codeViewAutoHeight();\r\n\r\n if (!!options.toolbarContainer) options.toolbarContainer.appendChild(toolbar);\r\n\r\n if (options.stickyToolbar > -1) {\r\n util.removeClass(toolbar, 'se-toolbar-sticky');\r\n }\r\n\r\n if (_var._fullScreenAttrs.sticky && !options.toolbarContainer) {\r\n _var._fullScreenAttrs.sticky = false;\r\n context.element._stickyDummy.style.display = 'block';\r\n util.addClass(toolbar, \"se-toolbar-sticky\");\r\n }\r\n\r\n this._isInline = _var._fullScreenAttrs.inline;\r\n this._isBalloon = _var._fullScreenAttrs.balloon;\r\n if (this._isInline) event._showToolbarInline();\r\n if (!!options.toolbarContainer) util.removeClass(toolbar, 'se-toolbar-balloon');\r\n\r\n event.onScroll_window();\r\n if (element) util.changeElement(element.firstElementChild, icons.expansion);\r\n\r\n context.element.topArea.style.marginTop = '';\r\n util.removeClass(this._styleCommandMap.fullScreen, 'active');\r\n }\r\n\r\n if (wasToolbarHidden) functions.toolbar.hide();\r\n\r\n // user event\r\n if (typeof functions.toggleFullScreen === 'function') functions.toggleFullScreen(this._variable.isFullScreen, this);\r\n },\r\n\r\n /**\r\n * @description Prints the current contents of the editor.\r\n */\r\n print: function () {\r\n const iframe = util.createElement('IFRAME');\r\n iframe.style.display = 'none';\r\n _d.body.appendChild(iframe);\r\n\r\n const contentsHTML = options.printTemplate ? options.printTemplate.replace(/\\{\\{\\s*contents\\s*\\}\\}/i, this.getContents(true)) : this.getContents(true);\r\n const printDocument = util.getIframeDocument(iframe);\r\n const wDoc = this._wd;\r\n\r\n if (options.iframe) {\r\n const arrts = options._printClass !== null ? 'class=\"' + options._printClass + '\"' : options.fullPage ? util.getAttributesToString(wDoc.body, ['contenteditable']) : 'class=\"' + options._editableClass + '\"';\r\n\r\n printDocument.write('' +\r\n '' +\r\n '' +\r\n wDoc.head.innerHTML +\r\n '' +\r\n '' + contentsHTML + '' +\r\n ''\r\n );\r\n } else {\r\n const links = _d.head.getElementsByTagName('link');\r\n const styles = _d.head.getElementsByTagName('style');\r\n let linkHTML = '';\r\n for (let i = 0, len = links.length; i < len; i++) {\r\n linkHTML += links[i].outerHTML;\r\n }\r\n for (let i = 0, len = styles.length; i < len; i++) {\r\n linkHTML += styles[i].outerHTML;\r\n }\r\n\r\n printDocument.write('' +\r\n '' +\r\n '' +\r\n linkHTML +\r\n '' +\r\n '' + contentsHTML + '' +\r\n ''\r\n );\r\n }\r\n\r\n this.showLoading();\r\n _w.setTimeout(function () {\r\n try {\r\n iframe.focus();\r\n // IE or Edge, Chromium\r\n if (util.isIE_Edge || util.isChromium || !!_d.documentMode || !!_w.StyleMedia) {\r\n try {\r\n iframe.contentWindow.document.execCommand('print', false, null);\r\n } catch (e) {\r\n iframe.contentWindow.print();\r\n }\r\n } else {\r\n // Other browsers\r\n iframe.contentWindow.print();\r\n }\r\n } catch (error) {\r\n throw Error('[SUNEDITOR.core.print.fail] error: ' + error);\r\n } finally {\r\n core.closeLoading();\r\n util.removeItem(iframe);\r\n }\r\n }, 1000);\r\n },\r\n\r\n /**\r\n * @description Open the preview window.\r\n */\r\n preview: function () {\r\n core.submenuOff();\r\n core.containerOff();\r\n core.controllersOff();\r\n\r\n const contentsHTML = options.previewTemplate ? options.previewTemplate.replace(/\\{\\{\\s*contents\\s*\\}\\}/i, this.getContents(true)) : this.getContents(true);\r\n const windowObject = _w.open('', '_blank');\r\n windowObject.mimeType = 'text/html';\r\n const wDoc = this._wd;\r\n\r\n if (options.iframe) {\r\n const arrts = options._printClass !== null ? 'class=\"' + options._printClass + '\"' : options.fullPage ? util.getAttributesToString(wDoc.body, ['contenteditable']) : 'class=\"' + options._editableClass + '\"';\r\n\r\n windowObject.document.write('' +\r\n '' +\r\n '' +\r\n wDoc.head.innerHTML +\r\n '' +\r\n '' +\r\n '' + contentsHTML + '' +\r\n ''\r\n );\r\n } else {\r\n const links = _d.head.getElementsByTagName('link');\r\n const styles = _d.head.getElementsByTagName('style');\r\n let linkHTML = '';\r\n for (let i = 0, len = links.length; i < len; i++) {\r\n linkHTML += links[i].outerHTML;\r\n }\r\n for (let i = 0, len = styles.length; i < len; i++) {\r\n linkHTML += styles[i].outerHTML;\r\n }\r\n\r\n windowObject.document.write('' +\r\n '' +\r\n '' +\r\n '' +\r\n '' +\r\n '' + lang.toolbar.preview + '' +\r\n linkHTML +\r\n '' +\r\n '' + contentsHTML + '' +\r\n ''\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * @description Set direction to \"rtl\" or \"ltr\".\r\n * @param {String} dir \"rtl\" or \"ltr\"\r\n */\r\n setDir: function (dir) {\r\n const rtl = dir === 'rtl';\r\n const changeDir = this._prevRtl !== rtl;\r\n this._prevRtl = options.rtl = rtl;\r\n\r\n if (changeDir) {\r\n // align buttons\r\n if (this.plugins.align) {\r\n this.plugins.align.exchangeDir.call(this);\r\n }\r\n // indent buttons\r\n if (context.tool.indent) util.changeElement(context.tool.indent.firstElementChild, icons.indent);\r\n if (context.tool.outdent) util.changeElement(context.tool.outdent.firstElementChild, icons.outdent);\r\n }\r\n\r\n const el = context.element;\r\n if (rtl) {\r\n util.addClass(el.topArea, 'se-rtl');\r\n util.addClass(el.wysiwygFrame, 'se-rtl');\r\n } else {\r\n util.removeClass(el.topArea, 'se-rtl');\r\n util.removeClass(el.wysiwygFrame, 'se-rtl');\r\n }\r\n\r\n const lineNodes = util.getListChildren(el.wysiwyg, function (current) {\r\n return util.isFormatElement(current) && (current.style.marginRight || current.style.marginLeft || current.style.textAlign);\r\n });\r\n\r\n for (let i = 0, len = lineNodes.length, n, l, r; i < len; i++) {\r\n n = lineNodes[i];\r\n // indent margin\r\n r = n.style.marginRight;\r\n l = n.style.marginLeft;\r\n if (r || l) {\r\n n.style.marginRight = l;\r\n n.style.marginLeft = r;\r\n }\r\n // text align\r\n r = n.style.textAlign;\r\n if (r === 'left') n.style.textAlign = 'right';\r\n else if (r === 'right') n.style.textAlign = 'left';\r\n }\r\n\r\n const tool = context.tool;\r\n if (tool.dir) {\r\n util.changeTxt(tool.dir.querySelector('.se-tooltip-text'), lang.toolbar[options.rtl ? 'dir_ltr' : 'dir_rtl']);\r\n util.changeElement(tool.dir.firstElementChild, icons[options.rtl ? 'dir_ltr' : 'dir_rtl']);\r\n }\r\n\r\n if (tool.dir_ltr) {\r\n if (rtl) util.removeClass(tool.dir_ltr, 'active');\r\n else util.addClass(tool.dir_ltr, 'active');\r\n }\r\n\r\n if (tool.dir_rtl) {\r\n if (rtl) util.addClass(tool.dir_rtl, 'active');\r\n else util.removeClass(tool.dir_rtl, 'active');\r\n }\r\n },\r\n\r\n /**\r\n * @description Sets the HTML string\r\n * @param {String|undefined} html HTML string\r\n */\r\n setContents: function (html) {\r\n this.removeRange();\r\n\r\n const convertValue = (html === null || html === undefined) ? '' : this.convertContentsForEditor(html, null, null);\r\n if (!this._variable.isCodeView) {\r\n context.element.wysiwyg.innerHTML = convertValue;\r\n this._resetComponents();\r\n // history stack\r\n this.history.push(false);\r\n } else {\r\n const value = this.convertHTMLForCodeView(convertValue, false);\r\n this._setCodeView(value);\r\n }\r\n },\r\n\r\n /**\r\n * @description Sets the contents of the iframe's head tag and body tag when using the \"iframe\" or \"fullPage\" option.\r\n * @param {Object} ctx { head: HTML string, body: HTML string}\r\n */\r\n setIframeContents: function (ctx) {\r\n if (!options.iframe) return false;\r\n if (ctx.head) this._wd.head.innerHTML = this.options.__allowedScriptTag ? ctx.head : ctx.head.replace(this.__scriptTagRegExp, '');\r\n if (ctx.body) this._wd.body.innerHTML = this.convertContentsForEditor(ctx.body);\r\n this._resetComponents();\r\n },\r\n\r\n /**\r\n * @description Gets the current contents\r\n * @param {Boolean} onlyContents Return only the contents of the body without headers when the \"fullPage\" option is true\r\n * @returns {Object}\r\n */\r\n getContents: function (onlyContents) {\r\n const contents = this.cleanHTML(context.element.wysiwyg.innerHTML, null, null);\r\n const renderHTML = util.createElement('DIV');\r\n renderHTML.innerHTML = contents;\r\n\r\n const editableEls = util.getListChildren(renderHTML, function (current) {\r\n return current.hasAttribute('contenteditable');\r\n });\r\n\r\n for (let i = 0, len = editableEls.length; i < len; i++) {\r\n editableEls[i].removeAttribute('contenteditable');\r\n }\r\n\r\n if (options.fullPage && !onlyContents) {\r\n const attrs = util.getAttributesToString(this._wd.body, ['contenteditable']);\r\n return '' + this._wd.head.outerHTML + '' + renderHTML.innerHTML + '';\r\n } else {\r\n return renderHTML.innerHTML;\r\n }\r\n },\r\n\r\n /**\r\n * @description Gets the current contents with containing parent div(div.sun-editor-editable).\r\n *
      {contents}
      \r\n * @param {Boolean} onlyContents Return only the contents of the body without headers when the \"fullPage\" option is true\r\n * @returns {String}\r\n */\r\n getFullContents: function (onlyContents) {\r\n return '
      ' + this.getContents(onlyContents) + '
      ';\r\n },\r\n\r\n /**\r\n * @description Returns HTML string according to tag type and configuration.\r\n * Use only \"cleanHTML\"\r\n * @param {Node} node Node\r\n * @param {Boolean} requireFormat If true, text nodes that do not have a format node is wrapped with the format tag.\r\n * @private\r\n */\r\n _makeLine: function (node, requireFormat) {\r\n const defaultTag = options.defaultTag;\r\n // element\r\n if (node.nodeType === 1) {\r\n if (this.__disallowedTagNameRegExp.test(node.nodeName)) return '';\r\n if (/__se__tag/.test(node.className)) return node.outerHTML;\r\n\r\n const ch = util.getListChildNodes(node, function(current) { return util.isSpanWithoutAttr(current) && !util.getParentElement(current, util.isNotCheckingNode); }) || [];\r\n for (let i = ch.length - 1; i >= 0; i--) {\r\n ch[i].outerHTML = ch[i].innerHTML;\r\n }\r\n\r\n if (!requireFormat || (util.isFormatElement(node) || util.isRangeFormatElement(node) || util.isComponent(node) || util.isFigures(node) || (util.isAnchor(node) && util.isMedia(node.firstElementChild)))) {\r\n return util.isSpanWithoutAttr(node) ? node.innerHTML : node.outerHTML;\r\n } else {\r\n return '<' + defaultTag + '>' + (util.isSpanWithoutAttr(node) ? node.innerHTML : node.outerHTML) + '';\r\n }\r\n }\r\n // text\r\n if (node.nodeType === 3) {\r\n if (!requireFormat) return util._HTMLConvertor(node.textContent);\r\n const textArray = node.textContent.split(/\\n/g);\r\n let html = '';\r\n for (let i = 0, tLen = textArray.length, text; i < tLen; i++) {\r\n text = textArray[i].trim();\r\n if (text.length > 0) html += '<' + defaultTag + '>' + util._HTMLConvertor(text) + '';\r\n }\r\n return html;\r\n }\r\n // comments\r\n if (node.nodeType === 8 && this._allowHTMLComments) {\r\n return '';\r\n }\r\n\r\n return '';\r\n },\r\n\r\n /**\r\n * @description Removes attribute values such as style and converts tags that do not conform to the \"html5\" standard.\r\n * @param {String} text \r\n * @returns {String} HTML string\r\n * @private\r\n */\r\n _tagConvertor: function (text) {\r\n if (!this._disallowedTextTagsRegExp) return text;\r\n\r\n const ec = options._textTagsMap;\r\n return text.replace(this._disallowedTextTagsRegExp, function (m, t, n, p) {\r\n return t + (typeof ec[n] === 'string' ? ec[n] : n) + (p ? ' ' + p : '');\r\n });\r\n },\r\n\r\n /**\r\n * @description Delete disallowed tags\r\n * @param {String} html HTML string\r\n * @returns {String}\r\n * @private\r\n */\r\n _deleteDisallowedTags: function (html) {\r\n html = html\r\n .replace(this.__disallowedTagsRegExp, '')\r\n .replace(/<[a-z0-9]+\\:[a-z0-9]+[^>^\\/]*>[^>]*<\\/[a-z0-9]+\\:[a-z0-9]+>/gi, '');\r\n\r\n if (!/\\bfont\\b/i.test(this.options._editorTagsWhitelist)) {\r\n html = html.replace(/(<\\/?)font(\\s?)/gi, '$1span$2');\r\n }\r\n\r\n return html.replace(this.editorTagsWhitelistRegExp, '').replace(this.editorTagsBlacklistRegExp, '');\r\n },\r\n\r\n _convertFontSize: function (to, size) {\r\n const math = this._w.Math;\r\n const value = size.match(/(\\d+(?:\\.\\d+)?)(.+)/);\r\n const sizeNum = value ? value[1] * 1 : util.fontValueMap[size];\r\n const from = value ? value[2] : 'rem';\r\n let pxSize = sizeNum;\r\n\r\n if (/em/.test(from)) {\r\n pxSize = math.round(sizeNum / 0.0625);\r\n } else if (from === 'pt') {\r\n pxSize = math.round(sizeNum * 1.333);\r\n } else if (from === '%') {\r\n pxSize = sizeNum / 100;\r\n }\r\n\r\n switch (to) {\r\n case 'em':\r\n case 'rem':\r\n case '%':\r\n return (pxSize * 0.0625).toFixed(2) + to;\r\n case 'pt':\r\n return math.floor(pxSize / 1.333) + to;\r\n default: // px\r\n return pxSize + to;\r\n }\r\n },\r\n\r\n _cleanStyle: function (m, v, name) {\r\n let sv = (m.match(/style\\s*=\\s*(?:\"|')[^\"']*(?:\"|')/) || [])[0];\r\n if (/span/i.test(name) && !sv && (m.match(/<[^\\s]+\\s(.+)/) || [])[1]) {\r\n const size = (m.match(/\\ssize=\"([^\"]+)\"/i) || [])[1];\r\n const face = (m.match(/\\sface=\"([^\"]+)\"/i) || [])[1];\r\n const color = (m.match(/\\scolor=\"([^\"]+)\"/i) || [])[1];\r\n if (size || face || color) {\r\n sv = 'style=\"' + (size ? 'font-size:' + (this.util.getNumber(size/3.333, 1)) + 'rem;' : '') + (face ? 'font-family:' + face + ';' : '') + (color ? 'color:' + color + ';' : '') + '\"';\r\n }\r\n }\r\n\r\n if (sv) {\r\n if (!v) v = [];\r\n const style = sv.replace(/"/g, '').match(this._cleanStyleRegExp[name]);\r\n if (style) {\r\n const allowedStyle = [];\r\n for (let i = 0, len = style.length, r; i < len; i++) {\r\n r = style[i].match(/([a-zA-Z0-9-]+)(:)([^\"']+)/);\r\n if (r && !/inherit|initial|revert|unset/i.test(r[3])) {\r\n const k = util.kebabToCamelCase(r[1].trim());\r\n const v = this.wwComputedStyle[k] ? this.wwComputedStyle[k].replace(/\"/g, '') : '';\r\n const c = r[3].trim();\r\n switch (k) {\r\n case 'fontFamily':\r\n if (!options.plugins.font || options.font.indexOf(c) === -1) continue;\r\n break;\r\n case 'fontSize':\r\n if (!options.plugins.fontSize) continue;\r\n if (!this._cleanStyleRegExp.fontSizeUnit.test(r[0])) {\r\n r[0] = r[0].replace((r[0].match(/:\\s*([^;]+)/) || [])[1], this._convertFontSize.bind(this, options.fontSizeUnit));\r\n }\r\n break;\r\n case 'color':\r\n if (!options.plugins.fontColor || /rgba\\(([0-9]+\\s*,\\s*){3}0\\)|windowtext/i.test(c)) continue;\r\n break;\r\n case 'backgroundColor':\r\n if (!options.plugins.hiliteColor || /rgba\\(([0-9]+\\s*,\\s*){3}0\\)|windowtext/i.test(c)) continue;\r\n break;\r\n }\r\n\r\n if (v !== c) {\r\n allowedStyle.push(r[0]);\r\n }\r\n }\r\n }\r\n if (allowedStyle.length > 0) v.push('style=\"' + allowedStyle.join(';') + '\"');\r\n }\r\n }\r\n\r\n return v;\r\n },\r\n\r\n /**\r\n * @description Tag and tag attribute check RegExp function. (used by \"cleanHTML\" and \"convertContentsForEditor\")\r\n * @param {Boolean} lowLevelCheck Row level check\r\n * @param {String} m RegExp value\r\n * @param {String} t RegExp value\r\n * @returns {String}\r\n * @private\r\n */\r\n _cleanTags: function (lowLevelCheck, m, t) {\r\n if (/^<[a-z0-9]+\\:[a-z0-9]+/i.test(m)) return m;\r\n\r\n let v = null;\r\n const tagName = t.match(/(?!<)[a-zA-Z0-9\\-]+/)[0].toLowerCase();\r\n\r\n // blacklist\r\n const bAttr = this._attributesTagsBlacklist[tagName];\r\n m = m.replace(/\\s(?:on[a-z]+)\\s*=\\s*(\")[^\"]*\\1/ig, '');\r\n if (bAttr) m = m.replace(bAttr, '');\r\n else m = m.replace(this._attributesBlacklistRegExp, '');\r\n\r\n // whitelist\r\n const wAttr = this._attributesTagsWhitelist[tagName];\r\n if (wAttr) v = m.match(wAttr);\r\n else v = m.match(lowLevelCheck ? this._attributesWhitelistRegExp : this._attributesWhitelistRegExp_all_data);\r\n\r\n // attribute\r\n if (lowLevelCheck || tagName === 'span' || tagName === 'li' || this._cleanStyleRegExp[tagName]) {\r\n if (tagName === 'a') {\r\n const sv = m.match(/(?:(?:id|name)\\s*=\\s*(?:\"|')[^\"']*(?:\"|'))/g);\r\n if (sv) {\r\n if (!v) v = [];\r\n v.push(sv[0]);\r\n }\r\n } else if (!v || !/style=/i.test(v.toString())) {\r\n if (tagName === 'span' || tagName === 'li') {\r\n v = this._cleanStyle(m, v, 'span');\r\n } if (this._cleanStyleRegExp[tagName]) {\r\n v = this._cleanStyle(m, v, tagName);\r\n } else if (/^(P|DIV|H[1-6]|PRE)$/i.test(tagName)) {\r\n v = this._cleanStyle(m, v, 'format');\r\n }\r\n }\r\n } else {\r\n const sv = m.match(/style\\s*=\\s*(?:\"|')[^\"']*(?:\"|')/);\r\n if (sv && !v) v = [sv[0]];\r\n else if (sv && !v.some(function (v) { return /^style/.test(v.trim()); })) v.push(sv[0]);\r\n }\r\n\r\n // figure\r\n if (util.isFigures(tagName)) {\r\n const sv = m.match(/style\\s*=\\s*(?:\"|')[^\"']*(?:\"|')/);\r\n if (!v) v = [];\r\n if (sv) v.push(sv[0]);\r\n }\r\n\r\n if (v) {\r\n for (let i = 0, len = v.length, a; i < len; i++) {\r\n // if (lowLevelCheck && /^class=\"(?!(__se__|se-|katex))/.test(v[i].trim())) continue;\r\n a = (/^(?:href|src)\\s*=\\s*('|\"|\\s)*javascript\\s*\\:/i.test(v[i].trim()) ? '' : v[i]);\r\n t += (/^\\s/.test(a) ? '' : ' ') + a;\r\n }\r\n }\r\n\r\n return t;\r\n },\r\n\r\n /**\r\n * @description Determines if formatting is required and returns a domTree\r\n * @param {Element} dom documentFragment\r\n * @returns {Element}\r\n * @private\r\n */\r\n _editFormat: function (dom) {\r\n let value = '', f;\r\n const tempTree = dom.childNodes;\r\n\r\n for (let i = 0, len = tempTree.length, n; i < len; i++) {\r\n n = tempTree[i];\r\n if (n.nodeType === 8) {\r\n value += '';\r\n } else if (!util.isFormatElement(n) && !util.isRangeFormatElement(n) && !util.isComponent(n) && !/meta/i.test(n.nodeName)) {\r\n if (!f) f = util.createElement(options.defaultTag);\r\n f.appendChild(n);\r\n i--; len--;\r\n } else {\r\n if (f) {\r\n value += f.outerHTML;\r\n f = null;\r\n }\r\n value += n.outerHTML;\r\n }\r\n }\r\n\r\n if (f) value += f.outerHTML;\r\n\r\n return _d.createRange().createContextualFragment(value);\r\n },\r\n\r\n _convertListCell: function (domTree) {\r\n let html = '';\r\n\r\n for (let i = 0, len = domTree.length, node; i < len; i++) {\r\n node = domTree[i];\r\n if (node.nodeType === 1) {\r\n if (util.isList(node)) {\r\n html += node.innerHTML;\r\n } else if (util.isListCell(node)) {\r\n html += node.outerHTML;\r\n } else if (util.isFormatElement(node)) {\r\n html += '
    • ' +(node.innerHTML.trim() || '
      ') + '
    • ';\r\n } else if (util.isRangeFormatElement(node) && !util.isTable(node)) {\r\n html += this._convertListCell(node);\r\n } else {\r\n html += '
    • ' + node.outerHTML + '
    • ';\r\n }\r\n } else {\r\n html += '
    • ' + (node.textContent || '
      ') + '
    • ';\r\n }\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _isFormatData: function (domTree) {\r\n let requireFormat = false;\r\n\r\n for (let i = 0, len = domTree.length, t; i < len; i++) {\r\n t = domTree[i];\r\n if (t.nodeType === 1 && !util.isTextStyleElement(t) && !util.isBreak(t) && !this.__disallowedTagNameRegExp.test(t.nodeName)) {\r\n requireFormat = true;\r\n break;\r\n }\r\n }\r\n\r\n return requireFormat;\r\n },\r\n\r\n /**\r\n * @description Gets the clean HTML code for editor\r\n * @param {String} html HTML string\r\n * @param {String|RegExp|null} whitelist Regular expression of allowed tags.\r\n * RegExp object is create by util.createTagsWhitelist method. (core.pasteTagsWhitelistRegExp)\r\n * @param {String|RegExp|null} blacklist Regular expression of disallowed tags.\r\n * RegExp object is create by util.createTagsBlacklist method. (core.pasteTagsBlacklistRegExp)\r\n * @returns {String}\r\n */\r\n cleanHTML: function (html, whitelist, blacklist) {\r\n if (!options.strictMode) return html;\r\n\r\n html = this._deleteDisallowedTags(this._parser.parseFromString(util.htmlCompress(html), 'text/html').body.innerHTML).replace(/(<[a-zA-Z0-9\\-]+)[^>]*(?=>)/g, this._cleanTags.bind(this, true)).replace(/$/i, '');\r\n const dom = _d.createRange().createContextualFragment(html);\r\n try {\r\n util._consistencyCheckOfHTML(dom, this._htmlCheckWhitelistRegExp, this._htmlCheckBlacklistRegExp, this._classNameFilter);\r\n } catch (error) {\r\n console.warn('[SUNEDITOR.cleanHTML.consistencyCheck.fail] ' + error);\r\n }\r\n\r\n if (this.managedTagsInfo && this.managedTagsInfo.query) {\r\n const textCompList = dom.querySelectorAll(this.managedTagsInfo.query);\r\n for (let i = 0, len = textCompList.length, initMethod, classList; i < len; i++) {\r\n classList = [].slice.call(textCompList[i].classList);\r\n for (let c = 0, cLen = classList.length; c < cLen; c++) {\r\n initMethod = this.managedTagsInfo.map[classList[c]];\r\n if (initMethod) {\r\n initMethod(textCompList[i]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n let domTree = dom.childNodes;\r\n let cleanHTML = '';\r\n const requireFormat = this._isFormatData(domTree);\r\n\r\n if(requireFormat) {\r\n domTree = this._editFormat(dom).childNodes;\r\n }\r\n\r\n for (let i = 0, len = domTree.length, t; i < len; i++) {\r\n t = domTree[i];\r\n if (this.__allowedScriptRegExp.test(t.nodeName)) {\r\n cleanHTML += t.outerHTML;\r\n continue;\r\n }\r\n cleanHTML += this._makeLine(t, requireFormat);\r\n }\r\n\r\n cleanHTML = util.htmlRemoveWhiteSpace(cleanHTML);\r\n if (!cleanHTML) {\r\n cleanHTML = html;\r\n } else {\r\n if (whitelist) cleanHTML = cleanHTML.replace(typeof whitelist === 'string' ? util.createTagsWhitelist(whitelist) : whitelist, '');\r\n if (blacklist) cleanHTML = cleanHTML.replace(typeof blacklist === 'string' ? util.createTagsBlacklist(blacklist) : blacklist, '');\r\n }\r\n\r\n return this._tagConvertor(cleanHTML);\r\n },\r\n\r\n /**\r\n * @description Converts contents into a format that can be placed in an editor\r\n * @param {String} contents contents\r\n * @returns {String}\r\n */\r\n convertContentsForEditor: function (contents) {\r\n if (!options.strictMode) return contents;\r\n contents = this._deleteDisallowedTags(this._parser.parseFromString(util.htmlCompress(contents), 'text/html').body.innerHTML).replace(/(<[a-zA-Z0-9\\-]+)[^>]*(?=>)/g, this._cleanTags.bind(this, true));\r\n const dom = _d.createRange().createContextualFragment(contents);\r\n\r\n try {\r\n util._consistencyCheckOfHTML(dom, this._htmlCheckWhitelistRegExp, this._htmlCheckBlacklistRegExp, this._classNameFilter);\r\n } catch (error) {\r\n console.warn('[SUNEDITOR.convertContentsForEditor.consistencyCheck.fail] ' + error);\r\n }\r\n\r\n if (this.managedTagsInfo && this.managedTagsInfo.query) {\r\n const textCompList = dom.querySelectorAll(this.managedTagsInfo.query);\r\n for (let i = 0, len = textCompList.length, initMethod, classList; i < len; i++) {\r\n classList = [].slice.call(textCompList[i].classList);\r\n for (let c = 0, cLen = classList.length; c < cLen; c++) {\r\n initMethod = this.managedTagsInfo.map[classList[c]];\r\n if (initMethod) {\r\n initMethod(textCompList[i]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const domTree = dom.childNodes;\r\n let cleanHTML = '', p = null;\r\n for (let i = 0, t; i < domTree.length; i++) {\r\n t = domTree[i];\r\n\r\n if (this.__allowedScriptRegExp.test(t.nodeName)) {\r\n cleanHTML += t.outerHTML;\r\n continue;\r\n }\r\n\r\n if (!util.isFormatElement(t) && !util.isRangeFormatElement(t) && !util.isComponent(t) && !util.isFigures(t) && t.nodeType !== 8 && !/__se__tag/.test(t.className)) {\r\n if (!p) p = util.createElement(options.defaultTag);\r\n p.appendChild(t);\r\n i--;\r\n if (domTree[i + 1] && !util.isFormatElement(domTree[i + 1])) {\r\n continue;\r\n } else {\r\n t = p;\r\n p = null;\r\n }\r\n }\r\n\r\n if (p) {\r\n cleanHTML += this._makeLine(p, true);\r\n p = null;\r\n }\r\n cleanHTML += this._makeLine(t, true);\r\n }\r\n if (p) cleanHTML += this._makeLine(p, true);\r\n\r\n if (cleanHTML.length === 0) return '<' + options.defaultTag + '>
      ';\r\n\r\n cleanHTML = util.htmlRemoveWhiteSpace(cleanHTML);\r\n return this._tagConvertor(cleanHTML);\r\n },\r\n\r\n /**\r\n * @description Converts wysiwyg area element into a format that can be placed in an editor of code view mode\r\n * @param {Element|String} html WYSIWYG element (context.element.wysiwyg) or HTML string.\r\n * @param {Boolean} comp If true, does not line break and indentation of tags.\r\n * @returns {String}\r\n */\r\n convertHTMLForCodeView: function (html, comp) {\r\n let returnHTML = '';\r\n const wRegExp = _w.RegExp;\r\n const brReg = new wRegExp('^(BLOCKQUOTE|PRE|TABLE|THEAD|TBODY|TR|TH|TD|OL|UL|IMG|IFRAME|VIDEO|AUDIO|FIGURE|FIGCAPTION|HR|BR|CANVAS|SELECT)$', 'i');\r\n const wDoc = typeof html === 'string' ? _d.createRange().createContextualFragment(html) : html;\r\n const isFormat = function (current) { return this.isFormatElement(current) || this.isComponent(current); }.bind(util);\r\n const brChar = comp ? '' : '\\n';\r\n\r\n let indentSize = comp ? 0 : this._variable.codeIndent * 1;\r\n indentSize = indentSize > 0 ? new _w.Array(indentSize + 1).join(' ') : '';\r\n\r\n (function recursionFunc (element, indent) {\r\n const children = element.childNodes;\r\n const elementRegTest = brReg.test(element.nodeName);\r\n const elementIndent = (elementRegTest ? indent : '');\r\n\r\n for (let i = 0, len = children.length, node, br, lineBR, nodeRegTest, tag, tagIndent; i < len; i++) {\r\n node = children[i];\r\n nodeRegTest = brReg.test(node.nodeName);\r\n br = nodeRegTest ? brChar : '';\r\n lineBR = isFormat(node) && !elementRegTest && !/^(TH|TD)$/i.test(element.nodeName) ? brChar : '';\r\n\r\n if (node.nodeType === 8) {\r\n returnHTML += '\\n' + br;\r\n continue;\r\n }\r\n if (node.nodeType === 3) {\r\n if (!util.isList(node.parentElement)) returnHTML += util._HTMLConvertor(/^\\n+$/.test(node.data) ? '' : node.data);\r\n continue;\r\n }\r\n if (node.childNodes.length === 0) {\r\n returnHTML += (/^HR$/i.test(node.nodeName) ? brChar : '') + (/^PRE$/i.test(node.parentElement.nodeName) && /^BR$/i.test(node.nodeName) ? '' : elementIndent) + node.outerHTML + br;\r\n continue;\r\n }\r\n\r\n if (!node.outerHTML) { // IE\r\n returnHTML += new _w.XMLSerializer().serializeToString(node);\r\n } else {\r\n tag = node.nodeName.toLowerCase();\r\n tagIndent = elementIndent || nodeRegTest ? indent : '';\r\n returnHTML += (lineBR || (elementRegTest ? '' : br)) + tagIndent + node.outerHTML.match(wRegExp('<' + tag + '[^>]*>', 'i'))[0] + br;\r\n recursionFunc(node, indent + indentSize, '');\r\n returnHTML += (/\\n$/.test(returnHTML) ? tagIndent : '') + '' + (lineBR || br || elementRegTest ? brChar : '' || /^(TH|TD)$/i.test(node.nodeName) ? brChar : '');\r\n }\r\n }\r\n }(wDoc, ''));\r\n\r\n return returnHTML.trim() + brChar;\r\n },\r\n\r\n /**\r\n * @description Add an event to document.\r\n * When created as an Iframe, the same event is added to the document in the Iframe.\r\n * @param {String} type Event type\r\n * @param {Function} listener Event listener\r\n * @param {Boolean} useCapture Use event capture\r\n */\r\n addDocEvent: function (type, listener, useCapture) {\r\n _d.addEventListener(type, listener, useCapture);\r\n if (options.iframe) {\r\n this._wd.addEventListener(type, listener);\r\n }\r\n },\r\n\r\n /**\r\n * @description Remove events from document.\r\n * When created as an Iframe, the event of the document inside the Iframe is also removed.\r\n * @param {String} type Event type\r\n * @param {Function} listener Event listener\r\n */\r\n removeDocEvent: function (type, listener) {\r\n _d.removeEventListener(type, listener);\r\n if (options.iframe) {\r\n this._wd.removeEventListener(type, listener);\r\n }\r\n },\r\n\r\n /**\r\n * @description The current number of characters is counted and displayed.\r\n * @param {String} inputText Text added.\r\n * @returns {Boolean}\r\n * @private\r\n */\r\n _charCount: function (inputText) {\r\n const maxCharCount = options.maxCharCount;\r\n const countType = options.charCounterType;\r\n let nextCharCount = 0;\r\n if (!!inputText) nextCharCount = this.getCharLength(inputText, countType);\r\n\r\n this._setCharCount();\r\n\r\n if (maxCharCount > 0) {\r\n let over = false;\r\n const count = functions.getCharCount(countType);\r\n\r\n if (count > maxCharCount) {\r\n over = true;\r\n if (nextCharCount > 0) {\r\n this._editorRange();\r\n const range = this.getRange();\r\n const endOff = range.endOffset - 1;\r\n const text = this.getSelectionNode().textContent;\r\n const slicePosition = range.endOffset - (count - maxCharCount);\r\n\r\n this.getSelectionNode().textContent = text.slice(0, slicePosition < 0 ? 0 : slicePosition) + text.slice(range.endOffset, text.length);\r\n this.setRange(range.endContainer, endOff, range.endContainer, endOff);\r\n }\r\n } else if ((count + nextCharCount) > maxCharCount) {\r\n over = true;\r\n }\r\n\r\n if (over) {\r\n this._callCounterBlink();\r\n if (nextCharCount > 0) return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * @description When \"element\" is added, if it is greater than \"options.maxCharCount\", false is returned.\r\n * @param {Node|String} element Element node or String.\r\n * @param {String|null} charCounterType charCounterType. If it is null, the options.charCounterType\r\n * @returns {Boolean}\r\n */\r\n checkCharCount: function (element, charCounterType) {\r\n if (options.maxCharCount) {\r\n const countType = charCounterType || options.charCounterType;\r\n const length = this.getCharLength((typeof element === 'string' ? element : (this._charTypeHTML && element.nodeType === 1) ? element.outerHTML : element.textContent), countType);\r\n if (length > 0 && length + functions.getCharCount(countType) > options.maxCharCount) {\r\n this._callCounterBlink();\r\n return false;\r\n }\r\n }\r\n return true;\r\n },\r\n\r\n /**\r\n * @description Get the length of the content.\r\n * Depending on the option, the length of the character is taken. (charCounterType)\r\n * @param {String} content Content to count\r\n * @param {String} charCounterType options.charCounterType\r\n * @returns {Number}\r\n */\r\n getCharLength: function (content, charCounterType) {\r\n return /byte/.test(charCounterType) ? util.getByteLength(content) : content.length;\r\n },\r\n\r\n /**\r\n * @description Reset buttons of the responsive toolbar.\r\n */\r\n resetResponsiveToolbar: function () {\r\n core.controllersOff();\r\n\r\n const responsiveSize = event._responsiveButtonSize;\r\n if (responsiveSize) {\r\n let w = 0;\r\n if ((core._isBalloon || core._isInline) && options.toolbarWidth === 'auto') {\r\n w = context.element.topArea.offsetWidth;\r\n } else {\r\n w = context.element.toolbar.offsetWidth;\r\n }\r\n\r\n let responsiveWidth = 'default';\r\n for (let i = 1, len = responsiveSize.length; i < len; i++) {\r\n if (w < responsiveSize[i]) {\r\n responsiveWidth = responsiveSize[i] + '';\r\n break;\r\n }\r\n }\r\n\r\n if (event._responsiveCurrentSize !== responsiveWidth) {\r\n event._responsiveCurrentSize = responsiveWidth;\r\n functions.setToolbarButtons(event._responsiveButtons[responsiveWidth]);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description Set the char count to charCounter element textContent.\r\n * @private\r\n */\r\n _setCharCount: function () {\r\n if (context.element.charCounter) {\r\n _w.setTimeout(function (functions, options) {\r\n if (this.textContent && functions) {\r\n this.textContent = functions.getCharCount(options.charCounterType);\r\n }\r\n }.bind(context.element.charCounter, functions, options), 0);\r\n }\r\n },\r\n\r\n /**\r\n * @description The character counter blinks.\r\n * @private\r\n */\r\n _callCounterBlink: function () {\r\n const charWrapper = context.element.charWrapper;\r\n if (charWrapper && !util.hasClass(charWrapper, 'se-blink')) {\r\n util.addClass(charWrapper, 'se-blink');\r\n _w.setTimeout(function () {\r\n util.removeClass(charWrapper, 'se-blink');\r\n }, 600);\r\n }\r\n },\r\n\r\n /**\r\n * @description Check the components such as image and video and modify them according to the format.\r\n * @private\r\n */\r\n _checkComponents: function () {\r\n for (let i = 0, len = this._fileInfoPluginsCheck.length; i < len; i++) {\r\n this._fileInfoPluginsCheck[i]();\r\n }\r\n },\r\n\r\n /**\r\n * @description Initialize the information of the components.\r\n * @private\r\n */\r\n _resetComponents: function () {\r\n for (let i = 0, len = this._fileInfoPluginsReset.length; i < len; i++) {\r\n this._fileInfoPluginsReset[i]();\r\n }\r\n },\r\n\r\n /**\r\n * @description Set method in the code view area\r\n * @param {String} value HTML string\r\n * @private\r\n */\r\n _setCodeView: function (value) {\r\n if (options.codeMirrorEditor) {\r\n options.codeMirrorEditor.getDoc().setValue(value);\r\n } else {\r\n context.element.code.value = value;\r\n }\r\n },\r\n\r\n /**\r\n * @description Get method in the code view area\r\n * @private\r\n */\r\n _getCodeView: function () {\r\n return options.codeMirrorEditor ? options.codeMirrorEditor.getDoc().getValue() : context.element.code.value;\r\n },\r\n\r\n /**\r\n * @description remove class, display text.\r\n * @param {Array|null} ignoredList Igonred button list\r\n */\r\n _setKeyEffect: function (ignoredList) {\r\n const commandMap = this.commandMap;\r\n const activePlugins = this.activePlugins;\r\n\r\n for (let key in commandMap) {\r\n if (ignoredList.indexOf(key) > -1 || !util.hasOwn(commandMap, key)) continue;\r\n if (activePlugins.indexOf(key) > -1) {\r\n plugins[key].active.call(this, null);\r\n } else if (commandMap.OUTDENT && /^OUTDENT$/i.test(key)) {\r\n if (!util.isImportantDisabled(commandMap.OUTDENT)) commandMap.OUTDENT.setAttribute('disabled', true);\r\n } else if (commandMap.INDENT && /^INDENT$/i.test(key)) {\r\n if (!util.isImportantDisabled(commandMap.INDENT)) commandMap.INDENT.removeAttribute('disabled');\r\n } else {\r\n util.removeClass(commandMap[key], 'active');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description Initializ core variable\r\n * @param {Boolean} reload Is relooad?\r\n * @param {String} _initHTML initial html string\r\n * @private\r\n */\r\n _init: function (reload, _initHTML) {\r\n const wRegExp = _w.RegExp;\r\n this._ww = options.iframe ? context.element.wysiwygFrame.contentWindow : _w;\r\n this._wd = _d;\r\n this._charTypeHTML = options.charCounterType === 'byte-html';\r\n this.wwComputedStyle = _w.getComputedStyle(context.element.wysiwyg);\r\n this._editorHeight = context.element.wysiwygFrame.offsetHeight;\r\n this._editorHeightPadding = util.getNumber(this.wwComputedStyle.getPropertyValue('padding-top')) + util.getNumber(this.wwComputedStyle.getPropertyValue('padding-bottom'));\r\n this._classNameFilter = function (v) {\r\n return this.test(v) ? v : '';\r\n }.bind(options.allowedClassNames);\r\n\r\n const sPrefix = (options.__allowedScriptTag ? '' : 'script|');\r\n this.__scriptTagRegExp = new wRegExp('<(script)[^>]*>([\\\\s\\\\S]*?)<\\\\/\\\\1>|]*\\\\/?>', 'gi');\r\n this.__disallowedTagsRegExp = new wRegExp('<(' + sPrefix + 'style)[^>]*>([\\\\s\\\\S]*?)<\\\\/\\\\1>|<(' + sPrefix + 'style)[^>]*\\\\/?>', 'gi');\r\n this.__disallowedTagNameRegExp = new wRegExp('^(' + sPrefix + 'meta|link|style|[a-z]+\\:[a-z]+)$', 'i');\r\n this.__allowedScriptRegExp = new wRegExp('^' + (options.__allowedScriptTag ? 'script' : '') + '$', 'i');\r\n\r\n if (!options.iframe && typeof _w.ShadowRoot === 'function') {\r\n let child = context.element.wysiwygFrame;\r\n while (child) {\r\n if (child.shadowRoot) {\r\n this._shadowRoot = child.shadowRoot;\r\n break;\r\n } else if (child instanceof _w.ShadowRoot) {\r\n this._shadowRoot = child;\r\n break;\r\n }\r\n child = child.parentNode;\r\n }\r\n if (this._shadowRoot) this._shadowRootControllerEventTarget = [];\r\n }\r\n\r\n // set disallow text nodes\r\n const disallowTextTags = _w.Object.keys(options._textTagsMap);\r\n const allowTextTags = !options.addTagsWhitelist ? [] : options.addTagsWhitelist.split('|').filter(function (v) { return /b|i|ins|s|strike/i.test(v); });\r\n for (let i = 0; i < allowTextTags.length; i++) {\r\n disallowTextTags.splice(disallowTextTags.indexOf(allowTextTags[i].toLowerCase()), 1);\r\n }\r\n this._disallowedTextTagsRegExp = disallowTextTags.length === 0 ? null : new wRegExp('(<\\\\/?)(' + disallowTextTags.join('|') + ')\\\\b\\\\s*([^>^<]+)?\\\\s*(?=>)', 'gi');\r\n\r\n // set whitelist\r\n const getRegList = function (str, str2) { return !str ? '^' : (str === '*' ? '[a-z-]+' : (!str2 ? str : (str + '|' + str2))); };\r\n // tags\r\n const videoAttr = '|controls|autoplay|loop|muted|poster|preload|playsinline';\r\n const iframeAttr = '|allowfullscreen|sandbox|loading|allow|referrerpolicy|frameborder|scrolling';\r\n const defaultAttr = 'contenteditable|colspan|rowspan|target|href|download|rel|src|alt|class|type|origin-size' + videoAttr + iframeAttr;\r\n const dataAttr = 'data-format|data-size|data-file-size|data-file-name|data-origin|data-align|data-image-link|data-rotate|data-proportion|data-percentage|data-exp|data-font-size';\r\n this._allowHTMLComments = options._editorTagsWhitelist.indexOf('//') > -1 || options._editorTagsWhitelist === '*';\r\n // html check\r\n this._htmlCheckWhitelistRegExp = new wRegExp('^(' + getRegList(options._editorTagsWhitelist.replace('|//', ''), '') + ')$', 'i');\r\n this._htmlCheckBlacklistRegExp = new wRegExp('^(' + (options.tagsBlacklist || '^') + ')$', 'i');\r\n // tags\r\n this.editorTagsWhitelistRegExp = util.createTagsWhitelist(getRegList(options._editorTagsWhitelist.replace('|//', '|'), ''));\r\n this.editorTagsBlacklistRegExp = util.createTagsBlacklist(options.tagsBlacklist.replace('|//', '|'));\r\n // paste tags\r\n this.pasteTagsWhitelistRegExp = util.createTagsWhitelist(getRegList(options.pasteTagsWhitelist, ''));\r\n this.pasteTagsBlacklistRegExp = util.createTagsBlacklist(options.pasteTagsBlacklist);\r\n // attributes\r\n const regEndStr = '\\\\s*=\\\\s*(\\\")[^\\\"]*\\\\1';\r\n const _wAttr = options.attributesWhitelist;\r\n let tagsAttr = {};\r\n let allAttr = '';\r\n if (!!_wAttr) {\r\n for (let k in _wAttr) {\r\n if (!util.hasOwn(_wAttr, k) || /^on[a-z]+$/i.test(_wAttr[k])) continue;\r\n if (k === 'all') {\r\n allAttr = getRegList(_wAttr[k], defaultAttr);\r\n } else {\r\n tagsAttr[k] = new wRegExp('\\\\s(?:' + getRegList(_wAttr[k], '') + ')' + regEndStr, 'ig');\r\n }\r\n }\r\n }\r\n\r\n this._attributesWhitelistRegExp = new wRegExp('\\\\s(?:' + (allAttr || defaultAttr + '|' + dataAttr) + ')' + regEndStr, 'ig');\r\n this._attributesWhitelistRegExp_all_data = new wRegExp('\\\\s(?:' + ((allAttr || defaultAttr) + '|data-[a-z0-9\\\\-]+') + ')' + regEndStr, 'ig');\r\n this._attributesTagsWhitelist = tagsAttr;\r\n\r\n // blacklist\r\n const _bAttr = options.attributesBlacklist;\r\n tagsAttr = {};\r\n allAttr = '';\r\n if (!!_bAttr) {\r\n for (let k in _bAttr) {\r\n if (!util.hasOwn(_bAttr, k)) continue;\r\n if (k === 'all') {\r\n allAttr = getRegList(_bAttr[k], '');\r\n } else {\r\n tagsAttr[k] = new wRegExp('\\\\s(?:' + getRegList(_bAttr[k], '') + ')' + regEndStr, 'ig');\r\n }\r\n }\r\n }\r\n\r\n this._attributesBlacklistRegExp = new wRegExp('\\\\s(?:' + (allAttr || '^') + ')' + regEndStr, 'ig');\r\n this._attributesTagsBlacklist = tagsAttr;\r\n\r\n // set modes\r\n this._isInline = /inline/i.test(options.mode);\r\n this._isBalloon = /balloon|balloon-always/i.test(options.mode);\r\n this._isBalloonAlways = /balloon-always/i.test(options.mode);\r\n\r\n // caching buttons\r\n this._cachingButtons();\r\n\r\n // file components\r\n this._fileInfoPluginsCheck = [];\r\n this._fileInfoPluginsReset = [];\r\n\r\n // text components\r\n this.managedTagsInfo = { query: '', map: {} };\r\n const managedClass = [];\r\n\r\n // Command and file plugins registration\r\n this.activePlugins = [];\r\n this._fileManager.tags = [];\r\n this._fileManager.pluginMap = {};\r\n\r\n let filePluginRegExp = [];\r\n let plugin, button;\r\n for (let key in plugins) {\r\n if (!util.hasOwn(plugins, key)) continue;\r\n plugin = plugins[key];\r\n button = pluginCallButtons[key];\r\n if ((plugin.active || plugin.action) && button) {\r\n this.callPlugin(key, null, button);\r\n }\r\n if (typeof plugin.checkFileInfo === 'function' && typeof plugin.resetFileInfo === 'function') {\r\n this.callPlugin(key, null, button);\r\n this._fileInfoPluginsCheck.push(plugin.checkFileInfo.bind(this));\r\n this._fileInfoPluginsReset.push(plugin.resetFileInfo.bind(this));\r\n }\r\n if (_w.Array.isArray(plugin.fileTags)) {\r\n const fileTags = plugin.fileTags;\r\n this.callPlugin(key, null, button);\r\n this._fileManager.tags = this._fileManager.tags.concat(fileTags);\r\n filePluginRegExp.push(key);\r\n for (let tag = 0, tLen = fileTags.length; tag < tLen; tag++) {\r\n this._fileManager.pluginMap[fileTags[tag].toLowerCase()] = key;\r\n }\r\n }\r\n if (plugin.managedTags) {\r\n const info = plugin.managedTags();\r\n managedClass.push('.' + info.className);\r\n this.managedTagsInfo.map[info.className] = info.method.bind(this);\r\n }\r\n }\r\n\r\n this.managedTagsInfo.query = managedClass.toString();\r\n this._fileManager.queryString = this._fileManager.tags.join(',');\r\n this._fileManager.regExp = new wRegExp('^(' + (this._fileManager.tags.join('|') || '^') + ')$', 'i');\r\n this._fileManager.pluginRegExp = new wRegExp('^(' + (filePluginRegExp.length === 0 ? '^' : filePluginRegExp.join('|')) + ')$', 'i');\r\n\r\n // cache editor's element\r\n this._variable._originCssText = context.element.topArea.style.cssText;\r\n this._placeholder = context.element.placeholder;\r\n this._lineBreaker = context.element.lineBreaker;\r\n this._lineBreakerButton = this._lineBreaker.querySelector('button');\r\n\r\n // Excute history function\r\n this.history = _history(this, this._onChange_historyStack.bind(this));\r\n\r\n // register notice module\r\n this.addModule([_notice]);\r\n\r\n // Init, validate\r\n if (options.iframe) {\r\n this._wd = context.element.wysiwygFrame.contentDocument;\r\n context.element.wysiwyg = this._wd.body;\r\n if (options._editorStyles.editor) context.element.wysiwyg.style.cssText = options._editorStyles.editor;\r\n if (options.height === 'auto') this._iframeAuto = this._wd.body;\r\n }\r\n\r\n this._initWysiwygArea(reload, _initHTML);\r\n },\r\n\r\n /**\r\n * @description Caching basic buttons to use\r\n * @private\r\n */\r\n _cachingButtons: function () {\r\n this.codeViewDisabledButtons = context.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~=\"se-code-view-enabled\"]):not([data-display=\"MORE\"])');\r\n this.resizingDisabledButtons = context.element._buttonTray.querySelectorAll('.se-menu-list button[data-display]:not([class~=\"se-resizing-enabled\"]):not([data-display=\"MORE\"])');\r\n\r\n const tool = context.tool;\r\n const commandMap = this.commandMap;\r\n commandMap.INDENT = tool.indent;\r\n commandMap.OUTDENT = tool.outdent;\r\n commandMap[options.textTags.bold.toUpperCase()] = tool.bold;\r\n commandMap[options.textTags.underline.toUpperCase()] = tool.underline;\r\n commandMap[options.textTags.italic.toUpperCase()] = tool.italic;\r\n commandMap[options.textTags.strike.toUpperCase()] = tool.strike;\r\n commandMap[options.textTags.sub.toUpperCase()] = tool.subscript;\r\n commandMap[options.textTags.sup.toUpperCase()] = tool.superscript;\r\n\r\n this._styleCommandMap = {\r\n fullScreen: tool.fullScreen,\r\n showBlocks: tool.showBlocks,\r\n codeView: tool.codeView\r\n };\r\n\r\n this._saveButtonStates();\r\n },\r\n\r\n /**\r\n * @description Initializ wysiwyg area (Only called from core._init)\r\n * @param {Boolean} reload Is relooad?\r\n * @param {String} _initHTML initial html string\r\n * @private\r\n */\r\n _initWysiwygArea: function (reload, _initHTML) {\r\n context.element.wysiwyg.innerHTML = reload ? _initHTML : this.convertContentsForEditor((typeof _initHTML === 'string' ? _initHTML : /^TEXTAREA$/i.test(context.element.originElement.nodeName) ? context.element.originElement.value : context.element.originElement.innerHTML) || '');\r\n },\r\n\r\n /**\r\n * @description Called when there are changes to tags in the wysiwyg region.\r\n * @private\r\n */\r\n _resourcesStateChange: function () {\r\n this._iframeAutoHeight();\r\n this._checkPlaceholder();\r\n },\r\n\r\n /**\r\n * @description Called when after execute \"history.push\"\r\n * @private\r\n */\r\n _onChange_historyStack: function () {\r\n if (this.hasFocus) event._applyTagEffects();\r\n this._variable.isChanged = true;\r\n if (context.tool.save) context.tool.save.removeAttribute('disabled');\r\n // user event\r\n if (functions.onChange) functions.onChange(this.getContents(true), this);\r\n if (context.element.toolbar.style.display === 'block') event._showToolbarBalloon();\r\n },\r\n\r\n /**\r\n * @description Modify the height value of the iframe when the height of the iframe is automatic.\r\n * @private\r\n */\r\n _iframeAutoHeight: function () {\r\n if (this._iframeAuto) {\r\n _w.setTimeout(function () {\r\n const h = core._iframeAuto.offsetHeight;\r\n context.element.wysiwygFrame.style.height = h + 'px';\r\n if (!util.isResizeObserverSupported) core.__callResizeFunction(h, null);\r\n });\r\n } else if (!util.isResizeObserverSupported) {\r\n core.__callResizeFunction(context.element.wysiwygFrame.offsetHeight, null);\r\n }\r\n },\r\n\r\n __callResizeFunction: function (h, resizeObserverEntry) {\r\n h = h === -1 ? (resizeObserverEntry.borderBoxSize && resizeObserverEntry.borderBoxSize[0] ? resizeObserverEntry.borderBoxSize[0].blockSize : (resizeObserverEntry.contentRect.height + this._editorHeightPadding)) : h;\r\n if (this._editorHeight !== h) {\r\n if (typeof functions.onResizeEditor === 'function') functions.onResizeEditor(h, this._editorHeight, core, resizeObserverEntry);\r\n this._editorHeight = h;\r\n }\r\n },\r\n\r\n /**\r\n * @description Set display property when there is placeholder.\r\n * @private\r\n */\r\n _checkPlaceholder: function () {\r\n if (this._placeholder) {\r\n if (this._variable.isCodeView) {\r\n this._placeholder.style.display = 'none';\r\n return;\r\n }\r\n\r\n const wysiwyg = context.element.wysiwyg;\r\n if (!util.onlyZeroWidthSpace(wysiwyg.textContent) || wysiwyg.querySelector(util._allowedEmptyNodeList) || (wysiwyg.innerText.match(/\\n/g) || '').length > 1) {\r\n this._placeholder.style.display = 'none';\r\n } else {\r\n this._placeholder.style.display = 'block';\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * @description If there is no default format, add a format and move \"selection\".\r\n * @param {String|null} formatName Format tag name (default: 'P')\r\n * @returns {undefined|null}\r\n * @private\r\n */\r\n _setDefaultFormat: function (formatName) {\r\n if (this._fileManager.pluginRegExp.test(this.currentControllerName)) return;\r\n\r\n const range = this.getRange();\r\n const commonCon = range.commonAncestorContainer;\r\n const startCon = range.startContainer;\r\n const rangeEl = util.getRangeFormatElement(commonCon, null);\r\n let focusNode, offset, format;\r\n\r\n const fileComponent = util.getParentElement(commonCon, util.isComponent);\r\n if (fileComponent && !util.isTable(fileComponent)) {\r\n return;\r\n } else if (commonCon.nodeType === 1 && commonCon.getAttribute('data-se-embed') === 'true') {\r\n let el = commonCon.nextElementSibling;\r\n if (!util.isFormatElement(el)) el = this.appendFormatTag(commonCon, options.defaultTag);\r\n this.setRange(el.firstChild, 0, el.firstChild, 0);\r\n return;\r\n }\r\n\r\n if ((util.isRangeFormatElement(startCon) || util.isWysiwygDiv(startCon)) && (util.isComponent(startCon.children[range.startOffset]) || util.isComponent(startCon.children[range.startOffset - 1]))) return;\r\n if (util.getParentElement(commonCon, util.isNotCheckingNode)) return null;\r\n\r\n if (rangeEl) {\r\n format = util.createElement(formatName || options.defaultTag);\r\n format.innerHTML = rangeEl.innerHTML;\r\n if (format.childNodes.length === 0) format.innerHTML = util.zeroWidthSpace;\r\n\r\n rangeEl.innerHTML = format.outerHTML;\r\n format = rangeEl.firstChild;\r\n focusNode = util.getEdgeChildNodes(format, null).sc;\r\n\r\n if (!focusNode) {\r\n focusNode = util.createTextNode(util.zeroWidthSpace);\r\n format.insertBefore(focusNode, format.firstChild);\r\n }\r\n\r\n offset = focusNode.textContent.length;\r\n this.setRange(focusNode, offset, focusNode, offset);\r\n return;\r\n }\r\n\r\n if(util.isRangeFormatElement(commonCon) && (commonCon.childNodes.length <= 1)) {\r\n let br = null;\r\n if (commonCon.childNodes.length === 1 && util.isBreak(commonCon.firstChild)) {\r\n br = commonCon.firstChild;\r\n } else {\r\n br = util.createTextNode(util.zeroWidthSpace);\r\n commonCon.appendChild(br);\r\n }\r\n\r\n this.setRange(br, 1, br, 1);\r\n return;\r\n }\r\n\r\n try {\r\n if (commonCon.nodeType === 3) {\r\n format = util.createElement(formatName || options.defaultTag);\r\n commonCon.parentNode.insertBefore(format, commonCon);\r\n format.appendChild(commonCon);\r\n }\r\n \r\n if (util.isBreak(format.nextSibling)) util.removeItem(format.nextSibling);\r\n if (util.isBreak(format.previousSibling)) util.removeItem(format.previousSibling);\r\n if (util.isBreak(focusNode)) {\r\n const zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n focusNode.parentNode.insertBefore(zeroWidth, focusNode);\r\n focusNode = zeroWidth;\r\n }\r\n } catch (e) {\r\n this.execCommand('formatBlock', false, (formatName || options.defaultTag));\r\n this.removeRange();\r\n this._editorRange();\r\n }\r\n\r\n if (format) {\r\n if (util.isBreak(format.nextSibling)) util.removeItem(format.nextSibling);\r\n if (util.isBreak(format.previousSibling)) util.removeItem(format.previousSibling);\r\n if (util.isBreak(focusNode)) {\r\n const zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n focusNode.parentNode.insertBefore(zeroWidth, focusNode);\r\n focusNode = zeroWidth;\r\n }\r\n }\r\n\r\n this.effectNode = null;\r\n this.nativeFocus();\r\n },\r\n\r\n /**\r\n * @description Initialization after \"setOptions\"\r\n * @param {Object} el context.element\r\n * @param {String} _initHTML Initial html string\r\n * @private\r\n */\r\n _setOptionsInit: function (el, _initHTML) {\r\n this.context = context = _Context(el.originElement, this._getConstructed(el), options);\r\n this._componentsInfoReset = true;\r\n this._editorInit(true, _initHTML);\r\n },\r\n\r\n /**\r\n * @description Initializ editor\r\n * @param {Boolean} reload Is relooad?\r\n * @param {String} _initHTML initial html string\r\n * @private\r\n */\r\n _editorInit: function (reload, _initHTML) {\r\n // initialize core and add event listeners\r\n this._init(reload, _initHTML);\r\n event._addEvent();\r\n this._setCharCount();\r\n event._offStickyToolbar();\r\n event.onResize_window();\r\n\r\n // toolbar visibility\r\n context.element.toolbar.style.visibility = '';\r\n // wisywig attributes\r\n const attr = options.frameAttrbutes;\r\n for (let k in attr) {\r\n context.element.wysiwyg.setAttribute(k, attr[k]);\r\n }\r\n\r\n this._checkComponents();\r\n this._componentsInfoInit = false;\r\n this._componentsInfoReset = false;\r\n\r\n this.history.reset(true);\r\n\r\n _w.setTimeout(function () {\r\n if (typeof core._resourcesStateChange !== 'function') return;\r\n\r\n // observer\r\n if (event._resizeObserver) event._resizeObserver.observe(context.element.wysiwygFrame);\r\n if (event._toolbarObserver) event._toolbarObserver.observe(context.element._toolbarShadow);\r\n // resource state\r\n core._resourcesStateChange();\r\n // user event\r\n if (typeof functions.onload === 'function') functions.onload(core, reload);\r\n });\r\n },\r\n\r\n /**\r\n * @description Create and return an object to cache the new context.\r\n * @param {Element} contextEl context.element\r\n * @returns {Object}\r\n * @private\r\n */\r\n _getConstructed: function (contextEl) {\r\n return {\r\n _top: contextEl.topArea,\r\n _relative: contextEl.relative,\r\n _toolBar: contextEl.toolbar,\r\n _toolbarShadow: contextEl._toolbarShadow,\r\n _menuTray: contextEl._menuTray,\r\n _editorArea: contextEl.editorArea,\r\n _wysiwygArea: contextEl.wysiwygFrame,\r\n _codeArea: contextEl.code,\r\n _placeholder: contextEl.placeholder,\r\n _resizingBar: contextEl.resizingBar,\r\n _navigation: contextEl.navigation,\r\n _charCounter: contextEl.charCounter,\r\n _charWrapper: contextEl.charWrapper,\r\n _loading: contextEl.loading,\r\n _lineBreaker: contextEl.lineBreaker,\r\n _lineBreaker_t: contextEl.lineBreaker_t,\r\n _lineBreaker_b: contextEl.lineBreaker_b,\r\n _resizeBack: contextEl.resizeBackground,\r\n _stickyDummy: contextEl._stickyDummy,\r\n _arrow: contextEl._arrow\r\n };\r\n }\r\n };\r\n\r\n /**\r\n * @description event function\r\n */\r\n const event = {\r\n _IEisComposing: false, // In IE, there is no \"e.isComposing\" in the key-up event.\r\n _lineBreakerBind: null,\r\n _responsiveCurrentSize: 'default',\r\n _responsiveButtonSize: null,\r\n _responsiveButtons: null,\r\n _cursorMoveKeyCode: new _w.RegExp('^(8|3[2-9]|40|46)$'),\r\n _directionKeyCode: new _w.RegExp('^(8|13|3[2-9]|40|46)$'),\r\n _nonTextKeyCode: new _w.RegExp('^(8|13|1[6-9]|20|27|3[3-9]|40|45|46|11[2-9]|12[0-3]|144|145)$'),\r\n _historyIgnoreKeyCode: new _w.RegExp('^(1[6-9]|20|27|3[3-9]|40|45|11[2-9]|12[0-3]|144|145)$'),\r\n _onButtonsCheck: new _w.RegExp('^(' + _w.Object.keys(options._textTagsMap).join('|') + ')$', 'i'),\r\n _frontZeroWidthReg: new _w.RegExp(util.zeroWidthSpace + '+', ''),\r\n _keyCodeShortcut: {\r\n 65: 'A',\r\n 66: 'B',\r\n 83: 'S',\r\n 85: 'U',\r\n 73: 'I',\r\n 89: 'Y',\r\n 90: 'Z',\r\n 219: '[',\r\n 221: ']'\r\n },\r\n\r\n _shortcutCommand: function (keyCode, shift) {\r\n let command = null;\r\n const keyStr = event._keyCodeShortcut[keyCode];\r\n\r\n switch (keyStr) {\r\n case 'A':\r\n command = 'selectAll';\r\n break;\r\n case 'B':\r\n if (options.shortcutsDisable.indexOf('bold') === -1) {\r\n command = 'bold';\r\n }\r\n break;\r\n case 'S':\r\n if (shift && options.shortcutsDisable.indexOf('strike') === -1) {\r\n command = 'strike';\r\n } else if (!shift && options.shortcutsDisable.indexOf('save') === -1) {\r\n command = 'save';\r\n }\r\n break;\r\n case 'U':\r\n if (options.shortcutsDisable.indexOf('underline') === -1) {\r\n command = 'underline';\r\n }\r\n break;\r\n case 'I':\r\n if (options.shortcutsDisable.indexOf('italic') === -1) {\r\n command = 'italic';\r\n }\r\n break;\r\n case 'Z':\r\n if (options.shortcutsDisable.indexOf('undo') === -1) {\r\n if (shift) {\r\n command = 'redo';\r\n } else {\r\n command = 'undo';\r\n }\r\n }\r\n break;\r\n case 'Y':\r\n if (options.shortcutsDisable.indexOf('undo') === -1) {\r\n command = 'redo';\r\n }\r\n break;\r\n case '[':\r\n if (options.shortcutsDisable.indexOf('indent') === -1) {\r\n command = options.rtl ? 'indent' : 'outdent';\r\n }\r\n break;\r\n case ']':\r\n if (options.shortcutsDisable.indexOf('indent') === -1) {\r\n command = options.rtl ? 'outdent' : 'indent';\r\n }\r\n break;\r\n }\r\n\r\n if (!command) return !!keyStr;\r\n\r\n core.commandHandler(core.commandMap[command], command);\r\n return true;\r\n },\r\n\r\n _applyTagEffects: function () {\r\n if (util.hasClass(context.element.wysiwyg, 'se-read-only')) {\r\n return false;\r\n }\r\n\r\n let selectionNode = core.getSelectionNode();\r\n if (selectionNode === core.effectNode) return;\r\n core.effectNode = selectionNode;\r\n\r\n const marginDir = options.rtl ? 'marginRight' : 'marginLeft';\r\n const commandMap = core.commandMap;\r\n const classOnCheck = event._onButtonsCheck;\r\n const commandMapNodes = [];\r\n const currentNodes = [];\r\n\r\n const activePlugins = core.activePlugins;\r\n const cLen = activePlugins.length;\r\n let nodeName = '';\r\n\r\n while (selectionNode.firstChild) {\r\n selectionNode = selectionNode.firstChild;\r\n }\r\n\r\n for (let element = selectionNode; !util.isWysiwygDiv(element); element = element.parentNode) {\r\n if (!element) break;\r\n if (element.nodeType !== 1 || util.isBreak(element)) continue;\r\n nodeName = element.nodeName.toUpperCase();\r\n currentNodes.push(nodeName);\r\n\r\n /* Active plugins */\r\n if (!core.isReadOnly) {\r\n for (let c = 0, name; c < cLen; c++) {\r\n name = activePlugins[c];\r\n if (commandMapNodes.indexOf(name) === -1 && plugins[name].active.call(core, element)) {\r\n commandMapNodes.push(name);\r\n }\r\n }\r\n }\r\n\r\n if (util.isFormatElement(element)) {\r\n /* Outdent */\r\n if (commandMapNodes.indexOf('OUTDENT') === -1 && commandMap.OUTDENT && !util.isImportantDisabled(commandMap.OUTDENT)) {\r\n if (util.isListCell(element) || (element.style[marginDir] && util.getNumber(element.style[marginDir], 0) > 0)) {\r\n commandMapNodes.push('OUTDENT');\r\n commandMap.OUTDENT.removeAttribute('disabled');\r\n }\r\n }\r\n\r\n /* Indent */\r\n if (commandMapNodes.indexOf('INDENT') === -1 && commandMap.INDENT && !util.isImportantDisabled(commandMap.INDENT)) {\r\n commandMapNodes.push('INDENT');\r\n if (util.isListCell(element) && !element.previousElementSibling) {\r\n commandMap.INDENT.setAttribute('disabled', true);\r\n } else {\r\n commandMap.INDENT.removeAttribute('disabled');\r\n }\r\n }\r\n\r\n continue;\r\n }\r\n\r\n /** default active buttons [strong, ins, em, del, sub, sup] */\r\n if (classOnCheck && classOnCheck.test(nodeName)) {\r\n commandMapNodes.push(nodeName);\r\n util.addClass(commandMap[nodeName], 'active');\r\n }\r\n }\r\n\r\n core._setKeyEffect(commandMapNodes);\r\n\r\n /** save current nodes */\r\n core._variable.currentNodes = currentNodes.reverse();\r\n core._variable.currentNodesMap = commandMapNodes;\r\n\r\n /** Displays the current node structure to resizingBar */\r\n if (options.showPathLabel) context.element.navigation.textContent = core._variable.currentNodes.join(' > ');\r\n },\r\n\r\n _buttonsEventHandler: function (e) {\r\n let target = e.target;\r\n if (core._bindControllersOff) e.stopPropagation();\r\n\r\n if (/^(input|textarea|select|option)$/i.test(target.nodeName)) {\r\n core._antiBlur = false;\r\n } else {\r\n e.preventDefault();\r\n }\r\n\r\n if (util.getParentElement(target, '.se-submenu')) {\r\n e.stopPropagation();\r\n core._notHideToolbar = true;\r\n } else {\r\n let command = target.getAttribute('data-command');\r\n let className = target.className;\r\n\r\n while (!command && !/se-menu-list/.test(className) && !/sun-editor-common/.test(className)) {\r\n target = target.parentNode;\r\n command = target.getAttribute('data-command');\r\n className = target.className;\r\n }\r\n\r\n if (command === core._submenuName || command === core._containerName) {\r\n e.stopPropagation();\r\n }\r\n }\r\n },\r\n\r\n addGlobalEvent(type, listener, useCapture) {\r\n if (options.iframe) {\r\n core._ww.addEventListener(type, listener, useCapture);\r\n }\r\n core._w.addEventListener(type, listener, useCapture);\r\n return {\r\n type: type,\r\n listener: listener,\r\n useCapture: useCapture\r\n };\r\n },\r\n \r\n removeGlobalEvent(type, listener, useCapture) {\r\n if (!type) return;\r\n \r\n if (typeof type === 'object') {\r\n listener = type.listener;\r\n useCapture = type.useCapture;\r\n type = type.type;\r\n }\r\n if (options.iframe) {\r\n core._ww.removeEventListener(type, listener, useCapture);\r\n }\r\n core._w.removeEventListener(type, listener, useCapture);\r\n },\r\n\r\n onClick_toolbar: function (e) {\r\n let target = e.target;\r\n let display = target.getAttribute('data-display');\r\n let command = target.getAttribute('data-command');\r\n let className = target.className;\r\n core.controllersOff();\r\n\r\n while (target.parentNode && !command && !/se-menu-list/.test(className) && !/se-toolbar/.test(className)) {\r\n target = target.parentNode;\r\n command = target.getAttribute('data-command');\r\n display = target.getAttribute('data-display');\r\n className = target.className;\r\n }\r\n\r\n if (!command && !display) return;\r\n if (target.disabled) return;\r\n\r\n core.actionCall(command, display, target);\r\n },\r\n\r\n __selectionSyncEvent: null,\r\n onMouseDown_wysiwyg: function (e) {\r\n if (core.isReadOnly || util.isNonEditable(context.element.wysiwyg)) return;\r\n if (util._isExcludeSelectionElement(e.target)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n event.removeGlobalEvent(event.__selectionSyncEvent);\r\n event.__selectionSyncEvent = event.addGlobalEvent('mouseup', function() {\r\n core._editorRange();\r\n event.removeGlobalEvent(event.__selectionSyncEvent);\r\n });\r\n\r\n // user event\r\n if (typeof functions.onMouseDown === 'function' && functions.onMouseDown(e, core) === false) return;\r\n\r\n const tableCell = util.getParentElement(e.target, util.isCell);\r\n if (tableCell) {\r\n const tablePlugin = core.plugins.table;\r\n if (tablePlugin && tableCell !== tablePlugin._fixedCell && !tablePlugin._shift) {\r\n core.callPlugin('table', function () {\r\n tablePlugin.onTableCellMultiSelect.call(core, tableCell, false);\r\n }, null);\r\n }\r\n }\r\n\r\n if (core._isBalloon) {\r\n event._hideToolbar();\r\n }\r\n },\r\n\r\n onClick_wysiwyg: function (e) {\r\n // if (util.hasClass(context.element.wysiwyg, 'se-read-only')) {\r\n // e.preventDefault();\r\n // return false;\r\n // }\r\n\r\n const targetElement = e.target;\r\n\r\n if (core.isReadOnly) {\r\n e.preventDefault();\r\n if (util.isAnchor(targetElement)){\r\n _w.open(targetElement.href, targetElement.target);\r\n }\r\n return false;\r\n }\r\n\r\n if (util.isNonEditable(context.element.wysiwyg)) return;\r\n\r\n // user event\r\n if (typeof functions.onClick === 'function' && functions.onClick(e, core) === false) return;\r\n\r\n const fileComponentInfo = core.getFileComponent(targetElement);\r\n if (fileComponentInfo) {\r\n e.preventDefault();\r\n core.selectComponent(fileComponentInfo.target, fileComponentInfo.pluginName);\r\n return;\r\n }\r\n\r\n const figcaption = util.getParentElement(targetElement, 'FIGCAPTION');\r\n if (figcaption && util.isNonEditable(figcaption)) {\r\n e.preventDefault();\r\n figcaption.focus();\r\n\r\n if (core._isInline && !core._inlineToolbarAttr.isShow) {\r\n event._showToolbarInline();\r\n\r\n const hideToolbar = function () {\r\n event._hideToolbar();\r\n figcaption.removeEventListener('blur', hideToolbar);\r\n };\r\n\r\n figcaption.addEventListener('blur', hideToolbar);\r\n }\r\n }\r\n\r\n core._editorRange();\r\n\r\n if (e.detail === 3) {\r\n let range = core.getRange();\r\n if (util.isFormatElement(range.endContainer) && range.endOffset === 0) {\r\n range = core.setRange(range.startContainer, range.startOffset, range.startContainer, range.startContainer.length);\r\n core._rangeInfo(range, core.getSelection());\r\n }\r\n }\r\n\r\n const selectionNode = core.getSelectionNode();\r\n const formatEl = util.getFormatElement(selectionNode, null);\r\n const rangeEl = util.getRangeFormatElement(selectionNode, null);\r\n\r\n let selectionNodeDeepestFirstChild = selectionNode;\r\n while (selectionNodeDeepestFirstChild.firstChild) selectionNodeDeepestFirstChild = selectionNodeDeepestFirstChild.firstChild;\r\n\r\n const selectedComponentInfo = core.getFileComponent(selectionNodeDeepestFirstChild);\r\n if (selectedComponentInfo) {\r\n const range = core.getRange();\r\n if (!rangeEl && range.startContainer === range.endContainer) core.selectComponent(selectedComponentInfo.target, selectedComponentInfo.pluginName);\r\n } else if (core.currentFileComponentInfo) core.controllersOff();\r\n\r\n if (!formatEl && !util.isNonEditable(targetElement) && !util.isList(rangeEl)) {\r\n const range = core.getRange();\r\n if (util.getFormatElement(range.startContainer) === util.getFormatElement(range.endContainer)) {\r\n if (util.isList(rangeEl)) {\r\n e.preventDefault();\r\n const oLi = util.createElement('LI');\r\n const prevLi = selectionNode.nextElementSibling;\r\n oLi.appendChild(selectionNode);\r\n rangeEl.insertBefore(oLi, prevLi);\r\n core.focus();\r\n } else if (!util.isWysiwygDiv(selectionNode) && !util.isComponent(selectionNode) && (!util.isTable(selectionNode) || util.isCell(selectionNode)) && core._setDefaultFormat(util.isRangeFormatElement(rangeEl) ? 'DIV' : options.defaultTag) !== null) {\r\n e.preventDefault();\r\n core.focus();\r\n } else {\r\n event._applyTagEffects();\r\n }\r\n }\r\n } else {\r\n event._applyTagEffects();\r\n }\r\n\r\n if (core._isBalloon) _w.setTimeout(event._toggleToolbarBalloon);\r\n },\r\n\r\n _balloonDelay: null,\r\n _showToolbarBalloonDelay: function () {\r\n if (event._balloonDelay) {\r\n _w.clearTimeout(event._balloonDelay);\r\n }\r\n\r\n event._balloonDelay = _w.setTimeout(function () {\r\n _w.clearTimeout(this._balloonDelay);\r\n this._balloonDelay = null;\r\n this._showToolbarBalloon();\r\n }.bind(event), 350);\r\n },\r\n\r\n _toggleToolbarBalloon: function () {\r\n core._editorRange();\r\n const range = core.getRange();\r\n if (core._bindControllersOff || (!core._isBalloonAlways && range.collapsed)) event._hideToolbar();\r\n else event._showToolbarBalloon(range);\r\n },\r\n\r\n _showToolbarBalloon: function (rangeObj) {\r\n if (!core._isBalloon) return;\r\n\r\n const range = rangeObj || core.getRange();\r\n const toolbar = context.element.toolbar;\r\n const topArea = context.element.topArea;\r\n const selection = core.getSelection();\r\n\r\n let isDirTop;\r\n if (core._isBalloonAlways && range.collapsed) {\r\n isDirTop = true;\r\n } else if (selection.focusNode === selection.anchorNode) {\r\n isDirTop = selection.focusOffset < selection.anchorOffset;\r\n } else {\r\n const childNodes = util.getListChildNodes(range.commonAncestorContainer, null);\r\n isDirTop = util.getArrayIndex(childNodes, selection.focusNode) < util.getArrayIndex(childNodes, selection.anchorNode);\r\n }\r\n\r\n let rects = range.getClientRects();\r\n rects = rects[isDirTop ? 0 : rects.length - 1];\r\n\r\n const globalScroll = core.getGlobalScrollOffset();\r\n let scrollLeft = globalScroll.left;\r\n let scrollTop = globalScroll.top;\r\n\r\n const editorWidth = topArea.offsetWidth;\r\n const offsets = event._getEditorOffsets(null);\r\n const stickyTop = offsets.top;\r\n const editorLeft = offsets.left;\r\n\r\n toolbar.style.top = '-10000px';\r\n toolbar.style.visibility = 'hidden';\r\n toolbar.style.display = 'block';\r\n\r\n if (!rects) {\r\n const node = core.getSelectionNode();\r\n if (util.isFormatElement(node)) {\r\n const zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n core.insertNode(zeroWidth, null, false);\r\n core.setRange(zeroWidth, 1, zeroWidth, 1);\r\n core._editorRange();\r\n rects = core.getRange().getClientRects();\r\n rects = rects[isDirTop ? 0 : rects.length - 1];\r\n }\r\n\r\n if (!rects) {\r\n const nodeOffset = util.getOffset(node, context.element.wysiwygFrame);\r\n rects = {\r\n left: nodeOffset.left,\r\n top: nodeOffset.top,\r\n right: nodeOffset.left,\r\n bottom: nodeOffset.top + node.offsetHeight,\r\n noText: true\r\n };\r\n scrollLeft = 0;\r\n scrollTop = 0;\r\n }\r\n\r\n isDirTop = true;\r\n }\r\n\r\n const arrowMargin = _w.Math.round(context.element._arrow.offsetWidth / 2);\r\n const toolbarWidth = toolbar.offsetWidth;\r\n const toolbarHeight = toolbar.offsetHeight;\r\n const iframeRects = /iframe/i.test(context.element.wysiwygFrame.nodeName) ? context.element.wysiwygFrame.getClientRects()[0] : null;\r\n if (iframeRects) {\r\n rects = {\r\n left: rects.left + iframeRects.left,\r\n top: rects.top + iframeRects.top,\r\n right: rects.right + iframeRects.right - iframeRects.width,\r\n bottom: rects.bottom + iframeRects.bottom - iframeRects.height\r\n };\r\n }\r\n\r\n event._setToolbarOffset(isDirTop, rects, toolbar, editorLeft, editorWidth, scrollLeft, scrollTop, stickyTop, arrowMargin);\r\n if (toolbarWidth !== toolbar.offsetWidth || toolbarHeight !== toolbar.offsetHeight) {\r\n event._setToolbarOffset(isDirTop, rects, toolbar, editorLeft, editorWidth, scrollLeft, scrollTop, stickyTop, arrowMargin);\r\n }\r\n\r\n if (options.toolbarContainer) {\r\n const editorParent = topArea.parentElement;\r\n\r\n let container = options.toolbarContainer;\r\n let left = container.offsetLeft;\r\n let top = container.offsetTop;\r\n\r\n while(!container.parentElement.contains(editorParent) || !/^(BODY|HTML)$/i.test(container.parentElement.nodeName)) {\r\n container = container.offsetParent;\r\n left += container.offsetLeft;\r\n top += container.offsetTop;\r\n }\r\n\r\n toolbar.style.left = (toolbar.offsetLeft - left + topArea.offsetLeft) + 'px';\r\n toolbar.style.top = (toolbar.offsetTop - top + topArea.offsetTop) + 'px';\r\n }\r\n\r\n toolbar.style.visibility = '';\r\n },\r\n\r\n _setToolbarOffset: function (isDirTop, rects, toolbar, editorLeft, editorWidth, scrollLeft, scrollTop, stickyTop, arrowMargin) {\r\n const padding = 1;\r\n const toolbarWidth = toolbar.offsetWidth;\r\n const toolbarHeight = rects.noText && !isDirTop ? 0 : toolbar.offsetHeight;\r\n\r\n const absoluteLeft = (isDirTop ? rects.left : rects.right) - editorLeft - (toolbarWidth / 2) + scrollLeft;\r\n const overRight = absoluteLeft + toolbarWidth - editorWidth;\r\n\r\n let t = (isDirTop ? rects.top - toolbarHeight - arrowMargin : rects.bottom + arrowMargin) - (rects.noText ? 0 : stickyTop) + scrollTop;\r\n let l = absoluteLeft < 0 ? padding : overRight < 0 ? absoluteLeft : absoluteLeft - overRight - padding - 1;\r\n\r\n let resetTop = false;\r\n const space = t + (isDirTop ? (event._getEditorOffsets(null).top) : (toolbar.offsetHeight - context.element.wysiwyg.offsetHeight));\r\n if (!isDirTop && space > 0 && event._getPageBottomSpace() < space) {\r\n isDirTop = true;\r\n resetTop = true;\r\n } else if (isDirTop && _d.documentElement.offsetTop > space) {\r\n isDirTop = false;\r\n resetTop = true;\r\n }\r\n\r\n if (resetTop) t = (isDirTop ? rects.top - toolbarHeight - arrowMargin : rects.bottom + arrowMargin) - (rects.noText ? 0 : stickyTop) + scrollTop;\r\n\r\n toolbar.style.left = _w.Math.floor(l) + 'px';\r\n toolbar.style.top = _w.Math.floor(t) + 'px';\r\n\r\n if (isDirTop) {\r\n util.removeClass(context.element._arrow, 'se-arrow-up');\r\n util.addClass(context.element._arrow, 'se-arrow-down');\r\n context.element._arrow.style.top = toolbarHeight + 'px';\r\n } else {\r\n util.removeClass(context.element._arrow, 'se-arrow-down');\r\n util.addClass(context.element._arrow, 'se-arrow-up');\r\n context.element._arrow.style.top = -arrowMargin + 'px';\r\n }\r\n\r\n const arrow_left = _w.Math.floor((toolbarWidth / 2) + (absoluteLeft - l));\r\n context.element._arrow.style.left = (arrow_left + arrowMargin > toolbar.offsetWidth ? toolbar.offsetWidth - arrowMargin : arrow_left < arrowMargin ? arrowMargin : arrow_left) + 'px';\r\n },\r\n\r\n _showToolbarInline: function () {\r\n if (!core._isInline) return;\r\n\r\n const toolbar = context.element.toolbar;\r\n if (options.toolbarContainer) toolbar.style.position = 'relative';\r\n else toolbar.style.position = 'absolute';\r\n\r\n toolbar.style.visibility = 'hidden';\r\n toolbar.style.display = 'block';\r\n core._inlineToolbarAttr.width = toolbar.style.width = options.toolbarWidth;\r\n core._inlineToolbarAttr.top = toolbar.style.top = (options.toolbarContainer ? 0 : (-1 - toolbar.offsetHeight)) + 'px';\r\n\r\n if (typeof functions.showInline === 'function') functions.showInline(toolbar, context, core);\r\n\r\n event.onScroll_window();\r\n core._inlineToolbarAttr.isShow = true;\r\n toolbar.style.visibility = '';\r\n },\r\n\r\n _hideToolbar: function () {\r\n if (!core._notHideToolbar && !core._variable.isFullScreen) {\r\n context.element.toolbar.style.display = 'none';\r\n core._inlineToolbarAttr.isShow = false;\r\n }\r\n },\r\n\r\n onInput_wysiwyg: function (e) {\r\n if (/AUDIO/.test(e.target.nodeName)) return false;\r\n if (core.isReadOnly || core.isDisabled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n core.history.go(core.history.getCurrentIndex());\r\n return false;\r\n }\r\n\r\n core._editorRange();\r\n\r\n const data = (e.data === null ? '' : e.data === undefined ? ' ' : e.data) || '';\r\n if (!core._charCount(data)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n\r\n // user event\r\n if (typeof functions.onInput === 'function' && functions.onInput(e, core) === false) return;\r\n\r\n // history stack\r\n core.history.push(true);\r\n },\r\n\r\n _isUneditableNode: function (range, isFront) {\r\n const container = isFront ? range.startContainer : range.endContainer;\r\n const offset = isFront ? range.startOffset : range.endOffset;\r\n const siblingKey = isFront ? 'previousSibling' : 'nextSibling';\r\n const isElement = container.nodeType === 1;\r\n let siblingNode;\r\n\r\n if (isElement) {\r\n siblingNode = event._isUneditableNode_getSibling(container.childNodes[offset], siblingKey, container);\r\n return siblingNode && siblingNode.nodeType === 1 && siblingNode.getAttribute('contenteditable') === 'false';\r\n } else {\r\n siblingNode = event._isUneditableNode_getSibling(container, siblingKey, container);\r\n return core.isEdgePoint(container, offset, isFront ? 'front' : 'end') && (siblingNode && siblingNode.nodeType === 1 && siblingNode.getAttribute('contenteditable') === 'false');\r\n }\r\n },\r\n\r\n _isUneditableNode_getSibling: function (selectNode, siblingKey, container) {\r\n if (!selectNode) return null;\r\n let siblingNode = selectNode[siblingKey];\r\n\r\n if (!siblingNode) {\r\n siblingNode = util.getFormatElement(container);\r\n siblingNode = siblingNode ? siblingNode[siblingKey] : null;\r\n if (siblingNode && !util.isComponent(siblingNode)) siblingNode = siblingKey === 'previousSibling' ? siblingNode.firstChild : siblingNode.lastChild;\r\n else return null;\r\n }\r\n\r\n return siblingNode;\r\n },\r\n\r\n _onShortcutKey: false,\r\n onKeyDown_wysiwyg: function (e) {\r\n let selectionNode = core.getSelectionNode();\r\n if (util.isInputElement(selectionNode)) return;\r\n\r\n const keyCode = e.keyCode;\r\n const shift = e.shiftKey;\r\n const ctrl = e.ctrlKey || e.metaKey || keyCode === 91 || keyCode === 92 || keyCode === 224;\r\n const alt = e.altKey;\r\n event._IEisComposing = keyCode === 229;\r\n\r\n if (!ctrl && core.isReadOnly && !event._cursorMoveKeyCode.test(keyCode)) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n\r\n core.submenuOff();\r\n\r\n if (core._isBalloon) {\r\n event._hideToolbar();\r\n }\r\n\r\n // user event\r\n if (typeof functions.onKeyDown === 'function' && functions.onKeyDown(e, core) === false) return;\r\n\r\n /** Shortcuts */\r\n if (ctrl && event._shortcutCommand(keyCode, shift)) {\r\n event._onShortcutKey = true;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n } else if (event._onShortcutKey) {\r\n event._onShortcutKey = false;\r\n }\r\n\r\n /** default key action */\r\n const range = core.getRange();\r\n const selectRange = !range.collapsed || range.startContainer !== range.endContainer;\r\n const fileComponentName = core._fileManager.pluginRegExp.test(core.currentControllerName) ? core.currentControllerName : '';\r\n let formatEl = util.getFormatElement(selectionNode, null) || selectionNode;\r\n let rangeEl = util.getRangeFormatElement(formatEl, null);\r\n\r\n const isArrowKey = /37|38|39|40/.test(e.keyCode);\r\n if (isArrowKey && event._onKeyDown_wysiwyg_arrowKey(e) === false) return;\r\n\r\n switch (keyCode) {\r\n case 8: /** backspace key */\r\n if (!selectRange) {\r\n if (fileComponentName) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n core.plugins[fileComponentName].destroy.call(core);\r\n break;\r\n }\r\n }\r\n\r\n if (selectRange && event._hardDelete()) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n\r\n if (!util.isFormatElement(formatEl) && !context.element.wysiwyg.firstElementChild && !util.isComponent(selectionNode) && core._setDefaultFormat(options.defaultTag) !== null) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n\r\n if (!selectRange && !formatEl.previousElementSibling && (range.startOffset === 0 && !selectionNode.previousSibling && !util.isListCell(formatEl) &&\r\n (util.isFormatElement(formatEl) && (!util.isFreeFormatElement(formatEl) || util.isClosureFreeFormatElement(formatEl))))) {\r\n // closure range\r\n if (util.isClosureRangeFormatElement(formatEl.parentNode)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n // maintain default format\r\n if (util.isWysiwygDiv(formatEl.parentNode) && formatEl.childNodes.length <= 1 && (!formatEl.firstChild || util.onlyZeroWidthSpace(formatEl.textContent))) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (formatEl.nodeName.toUpperCase() === options.defaultTag.toUpperCase()) {\r\n formatEl.innerHTML = '
      ';\r\n const attrs = formatEl.attributes;\r\n while (attrs[0]) {\r\n formatEl.removeAttribute(attrs[0].name);\r\n }\r\n } else {\r\n const defaultFormat = util.createElement(options.defaultTag);\r\n defaultFormat.innerHTML = '
      ';\r\n formatEl.parentElement.replaceChild(defaultFormat, formatEl);\r\n }\r\n\r\n core.nativeFocus();\r\n return false;\r\n }\r\n }\r\n\r\n // clean remove tag\r\n const startCon = range.startContainer;\r\n if (formatEl && !formatEl.previousElementSibling && range.startOffset === 0 && startCon.nodeType === 3 && !util.isFormatElement(startCon.parentNode)) {\r\n let prev = startCon.parentNode.previousSibling;\r\n const next = startCon.parentNode.nextSibling;\r\n if (!prev) {\r\n if (!next) {\r\n prev = util.createElement('BR');\r\n formatEl.appendChild(prev);\r\n } else {\r\n prev = next;\r\n }\r\n }\r\n\r\n let con = startCon;\r\n while(formatEl.contains(con) && !con.previousSibling) {\r\n con = con.parentNode;\r\n }\r\n\r\n if (!formatEl.contains(con)) {\r\n startCon.textContent = '';\r\n util.removeItemAllParents(startCon, null, formatEl);\r\n break;\r\n }\r\n }\r\n\r\n // tag[contenteditable=\"false\"]\r\n if (event._isUneditableNode(range, true)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n\r\n // format attributes\r\n if (!selectRange && core._isEdgeFormat(range.startContainer, range.startOffset, 'start')) {\r\n if (util.isFormatElement(formatEl.previousElementSibling)) {\r\n core._formatAttrsTemp = formatEl.previousElementSibling.attributes;\r\n }\r\n }\r\n\r\n // nested list\r\n const commonCon = range.commonAncestorContainer;\r\n formatEl = util.getFormatElement(range.startContainer, null);\r\n rangeEl = util.getRangeFormatElement(formatEl, null);\r\n if (rangeEl && formatEl && !util.isCell(rangeEl) && !/^FIGCAPTION$/i.test(rangeEl.nodeName)) {\r\n if (util.isListCell(formatEl) && util.isList(rangeEl) && (util.isListCell(rangeEl.parentNode) || formatEl.previousElementSibling) && (selectionNode === formatEl || (selectionNode.nodeType === 3 && (!selectionNode.previousSibling || util.isList(selectionNode.previousSibling)))) &&\r\n (util.getFormatElement(range.startContainer, null) !== util.getFormatElement(range.endContainer, null) ? rangeEl.contains(range.startContainer) : (range.startOffset === 0 && range.collapsed))) {\r\n if (range.startContainer !== range.endContainer) {\r\n e.preventDefault();\r\n\r\n core.removeNode();\r\n if (range.startContainer.nodeType === 3) {\r\n core.setRange(range.startContainer, range.startContainer.textContent.length, range.startContainer, range.startContainer.textContent.length);\r\n }\r\n // history stack\r\n core.history.push(true);\r\n } else {\r\n let prev = formatEl.previousElementSibling || rangeEl.parentNode;\r\n if (util.isListCell(prev)) {\r\n e.preventDefault();\r\n\r\n let prevLast = prev;\r\n if (!prev.contains(formatEl) && util.isListCell(prevLast) && util.isList(prevLast.lastElementChild)) {\r\n prevLast = prevLast.lastElementChild.lastElementChild;\r\n while (util.isListCell(prevLast) && util.isList(prevLast.lastElementChild)) {\r\n prevLast = prevLast.lastElementChild && prevLast.lastElementChild.lastElementChild;\r\n }\r\n prev = prevLast;\r\n }\r\n\r\n let con = prev === rangeEl.parentNode ? rangeEl.previousSibling : prev.lastChild;\r\n if (!con) {\r\n con = util.createTextNode(util.zeroWidthSpace);\r\n rangeEl.parentNode.insertBefore(con, rangeEl.parentNode.firstChild);\r\n }\r\n const offset = con.nodeType === 3 ? con.textContent.length : 1;\r\n const children = formatEl.childNodes;\r\n let after = con;\r\n let child = children[0];\r\n while ((child = children[0])) {\r\n prev.insertBefore(child, after.nextSibling);\r\n after = child;\r\n }\r\n\r\n util.removeItem(formatEl);\r\n if (rangeEl.children.length === 0) util.removeItem(rangeEl);\r\n\r\n core.setRange(con, offset, con, offset);\r\n // history stack\r\n core.history.push(true);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n // detach range\r\n if (!selectRange && range.startOffset === 0) {\r\n let detach = true;\r\n let comm = commonCon;\r\n while (comm && comm !== rangeEl && !util.isWysiwygDiv(comm)) {\r\n if (comm.previousSibling) {\r\n if (comm.previousSibling.nodeType === 1 || !util.onlyZeroWidthSpace(comm.previousSibling.textContent.trim())) {\r\n detach = false;\r\n break;\r\n }\r\n }\r\n comm = comm.parentNode;\r\n }\r\n\r\n if (detach && rangeEl.parentNode) {\r\n e.preventDefault();\r\n core.detachRangeFormatElement(rangeEl, (util.isListCell(formatEl) ? [formatEl] : null), null, false, false);\r\n // history stack\r\n core.history.push(true);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // component\r\n if (!selectRange && formatEl && (range.startOffset === 0 || (selectionNode === formatEl ? !!formatEl.childNodes[range.startOffset] : false))) {\r\n const sel = selectionNode === formatEl ? formatEl.childNodes[range.startOffset] : selectionNode;\r\n const prev = formatEl.previousSibling;\r\n // select file component\r\n const ignoreZWS = (commonCon.nodeType === 3 || util.isBreak(commonCon)) && !commonCon.previousSibling && range.startOffset === 0;\r\n if (sel && !sel.previousSibling && ( (commonCon && util.isComponent(commonCon.previousSibling)) || (ignoreZWS && util.isComponent(prev)))) {\r\n const fileComponentInfo = core.getFileComponent(prev);\r\n if (fileComponentInfo) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (formatEl.textContent.length === 0) util.removeItem(formatEl);\r\n if (core.selectComponent(fileComponentInfo.target, fileComponentInfo.pluginName) === false) core.blur();\r\n } else if (util.isComponent(prev)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n util.removeItem(prev);\r\n }\r\n break;\r\n }\r\n // delete nonEditable\r\n if (sel && util.isNonEditable(sel.previousSibling)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n util.removeItem(sel.previousSibling);\r\n break;\r\n }\r\n }\r\n\r\n break;\r\n case 46: /** delete key */\r\n if (fileComponentName) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n core.plugins[fileComponentName].destroy.call(core);\r\n break;\r\n }\r\n\r\n if (selectRange && event._hardDelete()) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n\r\n // tag[contenteditable=\"false\"]\r\n if (event._isUneditableNode(range, false)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n\r\n // component\r\n if ((util.isFormatElement(selectionNode) || selectionNode.nextSibling === null || (util.onlyZeroWidthSpace(selectionNode.nextSibling) && selectionNode.nextSibling.nextSibling === null)) && range.startOffset === selectionNode.textContent.length) {\r\n const nextEl = formatEl.nextElementSibling;\r\n if (!nextEl) break;\r\n if (util.isComponent(nextEl)) {\r\n e.preventDefault();\r\n\r\n if (util.onlyZeroWidthSpace(formatEl)) {\r\n util.removeItem(formatEl);\r\n // table component\r\n if (util.isTable(nextEl)) {\r\n let cell = util.getChildElement(nextEl, util.isCell, false);\r\n cell = cell.firstElementChild || cell;\r\n core.setRange(cell, 0, cell, 0);\r\n break;\r\n }\r\n }\r\n\r\n // select file component\r\n const fileComponentInfo = core.getFileComponent(nextEl);\r\n if (fileComponentInfo) {\r\n e.stopPropagation();\r\n if (core.selectComponent(fileComponentInfo.target, fileComponentInfo.pluginName) === false) core.blur();\r\n } else if (util.isComponent(nextEl)) {\r\n e.stopPropagation();\r\n util.removeItem(nextEl);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (!selectRange && (core.isEdgePoint(range.endContainer, range.endOffset) || (selectionNode === formatEl ? !!formatEl.childNodes[range.startOffset] : false))) {\r\n const sel = selectionNode === formatEl ? formatEl.childNodes[range.startOffset] || selectionNode : selectionNode;\r\n // delete nonEditable\r\n if (sel && util.isNonEditable(sel.nextSibling)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n util.removeItem(sel.nextSibling);\r\n break;\r\n } else if (util.isComponent(sel)) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n util.removeItem(sel);\r\n break;\r\n }\r\n }\r\n\r\n // format attributes\r\n if (!selectRange && core._isEdgeFormat(range.endContainer, range.endOffset, 'end')) {\r\n if (util.isFormatElement(formatEl.nextElementSibling)) {\r\n core._formatAttrsTemp = formatEl.attributes;\r\n }\r\n }\r\n\r\n // nested list\r\n formatEl = util.getFormatElement(range.startContainer, null);\r\n rangeEl = util.getRangeFormatElement(formatEl, null);\r\n if (util.isListCell(formatEl) && util.isList(rangeEl) && (selectionNode === formatEl || (selectionNode.nodeType === 3 && (!selectionNode.nextSibling || util.isList(selectionNode.nextSibling)) &&\r\n (util.getFormatElement(range.startContainer, null) !== util.getFormatElement(range.endContainer, null) ? rangeEl.contains(range.endContainer) : (range.endOffset === selectionNode.textContent.length && range.collapsed))))) {\r\n if (range.startContainer !== range.endContainer) core.removeNode();\r\n\r\n let next = util.getArrayItem(formatEl.children, util.isList, false);\r\n next = next || formatEl.nextElementSibling || rangeEl.parentNode.nextElementSibling;\r\n if (next && (util.isList(next) || util.getArrayItem(next.children, util.isList, false))) {\r\n e.preventDefault();\r\n\r\n let con, children;\r\n if (util.isList(next)) {\r\n const child = next.firstElementChild;\r\n children = child.childNodes;\r\n con = children[0];\r\n while (children[0]) {\r\n formatEl.insertBefore(children[0], next);\r\n }\r\n util.removeItem(child);\r\n } else {\r\n con = next.firstChild;\r\n children = next.childNodes;\r\n while (children[0]) {\r\n formatEl.appendChild(children[0]);\r\n }\r\n util.removeItem(next);\r\n }\r\n core.setRange(con, 0, con, 0);\r\n // history stack\r\n core.history.push(true);\r\n }\r\n break;\r\n }\r\n\r\n break;\r\n case 9: /** tab key */\r\n if (fileComponentName || options.tabDisable) break;\r\n e.preventDefault();\r\n if (ctrl || alt || util.isWysiwygDiv(selectionNode)) break;\r\n\r\n const isEdge = (!range.collapsed || core.isEdgePoint(range.startContainer, range.startOffset));\r\n const selectedFormats = core.getSelectedElements(null);\r\n selectionNode = core.getSelectionNode();\r\n const cells = [];\r\n let lines = [];\r\n let fc = util.isListCell(selectedFormats[0]), lc = util.isListCell(selectedFormats[selectedFormats.length - 1]);\r\n let r = {sc: range.startContainer, so: range.startOffset, ec: range.endContainer, eo: range.endOffset};\r\n for (let i = 0, len = selectedFormats.length, f; i < len; i++) {\r\n f = selectedFormats[i];\r\n if (util.isListCell(f)) {\r\n if (!f.previousElementSibling && !shift) {\r\n continue;\r\n } else {\r\n cells.push(f);\r\n }\r\n } else {\r\n lines.push(f);\r\n }\r\n }\r\n\r\n // Nested list\r\n if (cells.length > 0 && isEdge && core.plugins.list) {\r\n r = core.plugins.list.editInsideList.call(core, shift, cells);\r\n } else {\r\n // table\r\n const tableCell = util.getParentElement(selectionNode, util.isCell);\r\n if (tableCell && isEdge) {\r\n const table = util.getParentElement(tableCell, 'table');\r\n const cells = util.getListChildren(table, util.isCell);\r\n let idx = shift ? util.prevIdx(cells, tableCell) : util.nextIdx(cells, tableCell);\r\n\r\n if (idx === cells.length && !shift) idx = 0;\r\n if (idx === -1 && shift) idx = cells.length - 1;\r\n\r\n let moveCell = cells[idx];\r\n if (!moveCell) break;\r\n moveCell = moveCell.firstElementChild || moveCell;\r\n core.setRange(moveCell, 0, moveCell, 0);\r\n break;\r\n }\r\n\r\n lines = lines.concat(cells);\r\n fc = lc = null;\r\n }\r\n\r\n // Lines tab(4)\r\n if (lines.length > 0) {\r\n if (!shift) {\r\n const tabText = util.createTextNode(new _w.Array(core._variable.tabSize + 1).join('\\u00A0'));\r\n if (lines.length === 1) {\r\n const textRange = core.insertNode(tabText, null, true);\r\n if (!textRange) return false;\r\n if (!fc) {\r\n r.sc = tabText;\r\n r.so = textRange.endOffset;\r\n }\r\n if (!lc) {\r\n r.ec = tabText;\r\n r.eo = textRange.endOffset;\r\n }\r\n } else {\r\n const len = lines.length - 1;\r\n for (let i = 0, child; i <= len; i++) {\r\n child = lines[i].firstChild;\r\n if (!child) continue;\r\n\r\n if (util.isBreak(child)) {\r\n lines[i].insertBefore(tabText.cloneNode(false), child);\r\n } else {\r\n child.textContent = tabText.textContent + child.textContent;\r\n }\r\n }\r\n\r\n const firstChild = util.getChildElement(lines[0], 'text', false);\r\n const endChild = util.getChildElement(lines[len], 'text', true);\r\n if (!fc && firstChild) {\r\n r.sc = firstChild;\r\n r.so = 0;\r\n }\r\n if (!lc && endChild) {\r\n r.ec = endChild;\r\n r.eo = endChild.textContent.length;\r\n }\r\n }\r\n } else {\r\n const len = lines.length - 1;\r\n for (let i = 0, line; i <= len; i++) {\r\n line = lines[i].childNodes;\r\n for (let c = 0, cLen = line.length, child; c < cLen; c++) {\r\n child = line[c];\r\n if (!child) break;\r\n if (util.onlyZeroWidthSpace(child)) continue;\r\n\r\n if (/^\\s{1,4}$/.test(child.textContent)) {\r\n util.removeItem(child);\r\n } else if (/^\\s{1,4}/.test(child.textContent)) {\r\n child.textContent = child.textContent.replace(/^\\s{1,4}/, '');\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n const firstChild = util.getChildElement(lines[0], 'text', false);\r\n const endChild = util.getChildElement(lines[len], 'text', true);\r\n if (!fc && firstChild) {\r\n r.sc = firstChild;\r\n r.so = 0;\r\n }\r\n if (!lc && endChild) {\r\n r.ec = endChild;\r\n r.eo = endChild.textContent.length;\r\n }\r\n }\r\n }\r\n\r\n core.setRange(r.sc, r.so, r.ec, r.eo);\r\n // history stack\r\n core.history.push(false);\r\n\r\n break;\r\n case 13: /** enter key */\r\n // enter login start\r\n const freeFormatEl = util.getFreeFormatElement(selectionNode, null);\r\n\r\n if (core._charTypeHTML) {\r\n let enterHTML = '';\r\n if ((!shift && freeFormatEl) || shift) {\r\n enterHTML = '
      ';\r\n } else {\r\n enterHTML = '<' + formatEl.nodeName + '>
      ';\r\n }\r\n\r\n if (!core.checkCharCount(enterHTML, 'byte-html')) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n if (!shift && !fileComponentName) {\r\n const formatEndEdge = core._isEdgeFormat(range.endContainer, range.endOffset, 'end');\r\n const formatStartEdge = core._isEdgeFormat(range.startContainer, range.startOffset, 'start');\r\n\r\n // add default format line\r\n if (formatEndEdge && (/^H[1-6]$/i.test(formatEl.nodeName) || /^HR$/i.test(formatEl.nodeName))) {\r\n event._enterPrevent(e);\r\n let temp = null;\r\n const newFormat = core.appendFormatTag(formatEl, options.defaultTag);\r\n\r\n if (formatEndEdge && formatEndEdge.length > 0) {\r\n temp = formatEndEdge.pop();\r\n const innerNode = temp;\r\n while(formatEndEdge.length > 0) {\r\n temp = temp.appendChild(formatEndEdge.pop());\r\n }\r\n newFormat.appendChild(innerNode);\r\n }\r\n\r\n temp = !temp ? newFormat.firstChild : temp.appendChild(newFormat.firstChild);\r\n if (util.isBreak(temp)) {\r\n const zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n temp.parentNode.insertBefore(zeroWidth, temp);\r\n core.setRange(zeroWidth, 1, zeroWidth, 1);\r\n } else {\r\n core.setRange(temp, 0, temp, 0);\r\n }\r\n break;\r\n } else if (rangeEl && formatEl && !util.isCell(rangeEl) && !/^FIGCAPTION$/i.test(rangeEl.nodeName)) {\r\n const range = core.getRange();\r\n if(core.isEdgePoint(range.endContainer, range.endOffset) && util.isList(selectionNode.nextSibling)) {\r\n event._enterPrevent(e);\r\n const newEl = util.createElement('LI');\r\n const br = util.createElement('BR');\r\n newEl.appendChild(br);\r\n\r\n formatEl.parentNode.insertBefore(newEl, formatEl.nextElementSibling);\r\n newEl.appendChild(selectionNode.nextSibling);\r\n\r\n core.setRange(br, 1, br, 1);\r\n break;\r\n }\r\n\r\n if ((range.commonAncestorContainer.nodeType === 3 ? !range.commonAncestorContainer.nextElementSibling : true) && util.onlyZeroWidthSpace(formatEl.innerText.trim()) && !util.isListCell(formatEl.nextElementSibling)) {\r\n event._enterPrevent(e);\r\n let newEl = null;\r\n\r\n if (util.isListCell(rangeEl.parentNode)) {\r\n const parentLi = formatEl.parentNode.parentNode;\r\n rangeEl = parentLi.parentNode;\r\n const newListCell = util.createElement('LI');\r\n newListCell.innerHTML = '
      ';\r\n util.copyTagAttributes(newListCell, formatEl, options.lineAttrReset);\r\n newEl = newListCell;\r\n rangeEl.insertBefore(newEl, parentLi.nextElementSibling);\r\n } else {\r\n const newFormat = util.isCell(rangeEl.parentNode) ? 'DIV' : util.isList(rangeEl.parentNode) ? 'LI' : (util.isFormatElement(rangeEl.nextElementSibling) && !util.isRangeFormatElement(rangeEl.nextElementSibling)) ? rangeEl.nextElementSibling.nodeName : (util.isFormatElement(rangeEl.previousElementSibling) && !util.isRangeFormatElement(rangeEl.previousElementSibling)) ? rangeEl.previousElementSibling.nodeName : options.defaultTag;\r\n newEl = util.createElement(newFormat);\r\n util.copyTagAttributes(newEl, formatEl, options.lineAttrReset);\r\n const edge = core.detachRangeFormatElement(rangeEl, [formatEl], null, true, true);\r\n edge.cc.insertBefore(newEl, edge.ec);\r\n }\r\n\r\n newEl.innerHTML = '
      ';\r\n util.removeItemAllParents(formatEl, null, null);\r\n core.setRange(newEl, 1, newEl, 1);\r\n break;\r\n }\r\n }\r\n\r\n if (freeFormatEl) {\r\n event._enterPrevent(e);\r\n const selectionFormat = selectionNode === freeFormatEl;\r\n const wSelection = core.getSelection();\r\n const children = selectionNode.childNodes, offset = wSelection.focusOffset, prev = selectionNode.previousElementSibling, next = selectionNode.nextSibling;\r\n\r\n if (!util.isClosureFreeFormatElement(freeFormatEl) && !!children && ((selectionFormat && range.collapsed && children.length - 1 <= offset + 1 && util.isBreak(children[offset]) && (!children[offset + 1] || ((!children[offset + 2] || util.onlyZeroWidthSpace(children[offset + 2].textContent)) && children[offset + 1].nodeType === 3 && util.onlyZeroWidthSpace(children[offset + 1].textContent))) && offset > 0 && util.isBreak(children[offset - 1])) ||\r\n (!selectionFormat && util.onlyZeroWidthSpace(selectionNode.textContent) && util.isBreak(prev) && (util.isBreak(prev.previousSibling) || !util.onlyZeroWidthSpace(prev.previousSibling.textContent)) && (!next || (!util.isBreak(next) && util.onlyZeroWidthSpace(next.textContent)))))) {\r\n if (selectionFormat) util.removeItem(children[offset - 1]);\r\n else util.removeItem(selectionNode);\r\n const newEl = core.appendFormatTag(freeFormatEl, (util.isFormatElement(freeFormatEl.nextElementSibling) && !util.isRangeFormatElement(freeFormatEl.nextElementSibling)) ? freeFormatEl.nextElementSibling : null);\r\n util.copyFormatAttributes(newEl, freeFormatEl);\r\n core.setRange(newEl, 1, newEl, 1);\r\n break;\r\n }\r\n\r\n if (selectionFormat) {\r\n functions.insertHTML(((range.collapsed && util.isBreak(range.startContainer.childNodes[range.startOffset - 1])) ? '
      ' : '

      '), true, false);\r\n\r\n let focusNode = wSelection.focusNode;\r\n const wOffset = wSelection.focusOffset;\r\n if (freeFormatEl === focusNode) {\r\n focusNode = focusNode.childNodes[wOffset - offset > 1 ? wOffset - 1 : wOffset];\r\n }\r\n\r\n core.setRange(focusNode, 1, focusNode, 1);\r\n } else {\r\n const focusNext = wSelection.focusNode.nextSibling;\r\n const br = util.createElement('BR');\r\n core.insertNode(br, null, false);\r\n\r\n const brPrev = br.previousSibling, brNext = br.nextSibling;\r\n if (!util.isBreak(focusNext) && !util.isBreak(brPrev) && (!brNext || util.onlyZeroWidthSpace(brNext))) {\r\n br.parentNode.insertBefore(br.cloneNode(false), br);\r\n core.setRange(br, 1, br, 1);\r\n } else {\r\n core.setRange(brNext, 0, brNext, 0);\r\n }\r\n }\r\n\r\n event._onShortcutKey = true;\r\n break;\r\n }\r\n\r\n // set format attrs - edge\r\n if (range.collapsed && (formatStartEdge || formatEndEdge)) {\r\n event._enterPrevent(e);\r\n const focusBR = util.createElement('BR');\r\n const newFormat = util.createElement(formatEl.nodeName);\r\n util.copyTagAttributes(newFormat, formatEl, options.lineAttrReset);\r\n\r\n let child = focusBR;\r\n do {\r\n if (!util.isBreak(selectionNode) && selectionNode.nodeType === 1) {\r\n const f = selectionNode.cloneNode(false);\r\n f.appendChild(child);\r\n child = f;\r\n }\r\n selectionNode = selectionNode.parentNode;\r\n } while(formatEl !== selectionNode && formatEl.contains(selectionNode));\r\n\r\n newFormat.appendChild(child);\r\n formatEl.parentNode.insertBefore(newFormat, formatStartEdge && !formatEndEdge ? formatEl : formatEl.nextElementSibling);\r\n if (formatEndEdge) {\r\n core.setRange(focusBR, 1, focusBR, 1);\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (formatEl) {\r\n e.stopPropagation();\r\n\r\n let newEl;\r\n let offset = 0;\r\n if (!range.collapsed) {\r\n const isMultiLine = util.getFormatElement(range.startContainer, null) !== util.getFormatElement(range.endContainer, null);\r\n const newFormat = formatEl.cloneNode(false);\r\n newFormat.innerHTML = '
      ';\r\n const r = core.removeNode();\r\n newEl = util.getFormatElement(r.container, null);\r\n if (!newEl) {\r\n if (util.isWysiwygDiv(r.container)) {\r\n event._enterPrevent(e);\r\n context.element.wysiwyg.appendChild(newFormat);\r\n newEl = newFormat;\r\n util.copyTagAttributes(newEl, formatEl, options.lineAttrReset);\r\n core.setRange(newEl, offset, newEl, offset);\r\n }\r\n break;\r\n }\r\n\r\n const innerRange = util.getRangeFormatElement(r.container);\r\n newEl = newEl.contains(innerRange) ? util.getChildElement(innerRange, util.getFormatElement.bind(util)) : newEl;\r\n if (isMultiLine) {\r\n if (formatEndEdge && !formatStartEdge) {\r\n newEl.parentNode.insertBefore(newFormat, (!r.prevContainer || r.container === r.prevContainer) ? newEl.nextElementSibling : newEl);\r\n newEl = newFormat;\r\n offset = 0;\r\n } else {\r\n offset = r.offset;\r\n if (formatStartEdge) {\r\n const tempEl = newEl.parentNode.insertBefore(newFormat, newEl);\r\n if (formatEndEdge) {\r\n newEl = tempEl;\r\n offset = 0;\r\n }\r\n }\r\n }\r\n } else {\r\n if (formatEndEdge && formatStartEdge) {\r\n newEl.parentNode.insertBefore(newFormat, (r.prevContainer && r.container === r.prevContainer) ? newEl.nextElementSibling : newEl);\r\n newEl = newFormat;\r\n offset = 0;\r\n } else {\r\n newEl = util.splitElement(r.container, r.offset, util.getElementDepth(formatEl));\r\n }\r\n }\r\n } else {\r\n if (util.onlyZeroWidthSpace(formatEl)) {\r\n newEl = core.appendFormatTag(formatEl, formatEl.cloneNode(false));\r\n } else {\r\n newEl = util.splitElement(range.endContainer, range.endOffset, util.getElementDepth(formatEl));\r\n }\r\n }\r\n\r\n event._enterPrevent(e);\r\n util.copyTagAttributes(newEl, formatEl, options.lineAttrReset);\r\n core.setRange(newEl, offset, newEl, offset);\r\n\r\n break;\r\n }\r\n }\r\n\r\n if (selectRange) break;\r\n\r\n if (rangeEl && util.getParentElement(rangeEl, 'FIGCAPTION') && util.getParentElement(rangeEl, util.isList)) {\r\n event._enterPrevent(e);\r\n formatEl = core.appendFormatTag(formatEl, null);\r\n core.setRange(formatEl, 0, formatEl, 0);\r\n }\r\n\r\n if (fileComponentName) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n core.containerOff();\r\n core.controllersOff();\r\n\r\n const compContext = context[fileComponentName];\r\n const container = compContext._container;\r\n const sibling = container.previousElementSibling || container.nextElementSibling;\r\n\r\n let newEl = null;\r\n if (util.isListCell(container.parentNode)) {\r\n newEl = util.createElement('BR');\r\n } else {\r\n newEl = util.createElement((util.isFormatElement(sibling) && !util.isRangeFormatElement(sibling)) ? sibling.nodeName : options.defaultTag);\r\n newEl.innerHTML = '
      ';\r\n }\r\n\r\n if (shift) container.parentNode.insertBefore(newEl, container);\r\n else container.parentNode.insertBefore(newEl, container.nextElementSibling);\r\n\r\n core.callPlugin(fileComponentName, function () {\r\n if (core.selectComponent(compContext._element, fileComponentName) === false) core.blur();\r\n }, null);\r\n }\r\n\r\n break;\r\n case 27:\r\n if (fileComponentName) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n core.controllersOff();\r\n return false;\r\n }\r\n break;\r\n }\r\n\r\n if (shift && keyCode === 16) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const tablePlugin = core.plugins.table;\r\n if (tablePlugin && !tablePlugin._shift && !tablePlugin._ref) {\r\n const cell = util.getParentElement(formatEl, util.isCell);\r\n if (cell) {\r\n tablePlugin.onTableCellMultiSelect.call(core, cell, true);\r\n return;\r\n }\r\n }\r\n } else if (shift && (util.isOSX_IOS ? alt : ctrl) && keyCode === 32) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const nbsp = core.insertNode(util.createTextNode('\\u00a0'));\r\n if (nbsp && nbsp.container) {\r\n core.setRange(nbsp.container, nbsp.endOffset, nbsp.container, nbsp.endOffset);\r\n return;\r\n }\r\n }\r\n\r\n if (util.isIE && !ctrl && !alt && !selectRange && !event._nonTextKeyCode.test(keyCode) && util.isBreak(range.commonAncestorContainer)) {\r\n const zeroWidth = util.createTextNode(util.zeroWidthSpace);\r\n core.insertNode(zeroWidth, null, false);\r\n core.setRange(zeroWidth, 1, zeroWidth, 1);\r\n }\r\n\r\n if (event._directionKeyCode.test(keyCode)) {\r\n core._editorRange();\r\n event._applyTagEffects();\r\n }\r\n },\r\n\r\n _onKeyDown_wysiwyg_arrowKey: function (e) {\r\n if (e.shiftKey) return; // shiftkey needs(?) other custom handler. This one may be adapted (in 'selectNode(...)'), but not for table\r\n\r\n let selectionNode = core.getSelectionNode();\r\n\r\n const selectNode = function (node, offset = 0) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (!node) return;\r\n\r\n let componentInfo = core.getFileComponent(node);\r\n if (componentInfo) {\r\n core.selectComponent(componentInfo.target, componentInfo.pluginName); // more responsive for key holdness\r\n } else {\r\n core.setRange(node, offset, node, offset);\r\n core.controllersOff();\r\n }\r\n };\r\n\r\n const table = util.getParentElement(selectionNode, 'table');\r\n if (table) {\r\n const currentRow = util.getParentElement(selectionNode, 'tr');\r\n const currentCell = util.getParentElement(selectionNode, 'td');\r\n\r\n let currentCellFirstNode = currentCell;\r\n let currentCellLastNode = currentCell;\r\n if (currentCell) {\r\n while (currentCellFirstNode.firstChild) currentCellFirstNode = currentCellFirstNode.firstChild;\r\n while (currentCellLastNode.lastChild) currentCellLastNode = currentCellLastNode.lastChild;\r\n }\r\n\r\n let selectionNodeDeepestFirstChild = selectionNode;\r\n while (selectionNodeDeepestFirstChild.firstChild) selectionNodeDeepestFirstChild = selectionNodeDeepestFirstChild.firstChild;\r\n const isCellFirstNode = (selectionNodeDeepestFirstChild === currentCellFirstNode);\r\n const isCellLastNode = (selectionNodeDeepestFirstChild === currentCellLastNode);\r\n\r\n let siblingToSet = null;\r\n let offset = 0;\r\n if (e.keyCode === 38 && isCellFirstNode) { // UP\r\n const previousRow = currentRow && currentRow.previousElementSibling;\r\n if (previousRow) siblingToSet = previousRow.children[currentCell.cellIndex];\r\n else siblingToSet = util.getPreviousDeepestNode(table, core.context.element.wysiwyg);\r\n\r\n while (siblingToSet.lastChild) siblingToSet = siblingToSet.lastChild;\r\n if (siblingToSet) offset = siblingToSet.textContent.length;\r\n } else if (e.keyCode === 40 && isCellLastNode) { // DOWN\r\n const nextRow = currentRow && currentRow.nextElementSibling;\r\n if (nextRow) siblingToSet = nextRow.children[currentCell.cellIndex];\r\n else siblingToSet = util.getNextDeepestNode(table, core.context.element.wysiwyg);\r\n\r\n while (siblingToSet.firstChild) siblingToSet = siblingToSet.firstChild;\r\n }\r\n\r\n if (siblingToSet) {\r\n selectNode(siblingToSet, offset);\r\n return false;\r\n }\r\n }\r\n\r\n const componentInfo = core.getFileComponent(selectionNode);\r\n if (componentInfo) {\r\n const selectPrevious = /37|38/.test(e.keyCode);\r\n const selectNext = /39|40/.test(e.keyCode);\r\n\r\n if (selectPrevious) {\r\n const previousDeepestNode = util.getPreviousDeepestNode(componentInfo.target, core.context.element.wysiwyg);\r\n selectNode(previousDeepestNode, previousDeepestNode && previousDeepestNode.textContent.length);\r\n } else if (selectNext) {\r\n const nextDeepestNode = util.getNextDeepestNode(componentInfo.target, core.context.element.wysiwyg);\r\n selectNode(nextDeepestNode);\r\n }\r\n }\r\n\r\n },\r\n\r\n onKeyUp_wysiwyg: function (e) {\r\n if (event._onShortcutKey) return;\r\n\r\n core._editorRange();\r\n const keyCode = e.keyCode;\r\n const ctrl = e.ctrlKey || e.metaKey || keyCode === 91 || keyCode === 92 || keyCode === 224;\r\n const alt = e.altKey;\r\n\r\n if (core.isReadOnly) {\r\n if (!ctrl && event._cursorMoveKeyCode.test(keyCode)) event._applyTagEffects();\r\n return;\r\n }\r\n\r\n const range = core.getRange();\r\n let selectionNode = core.getSelectionNode();\r\n\r\n if (core._isBalloon && ((core._isBalloonAlways && keyCode !== 27) || !range.collapsed)) {\r\n if (core._isBalloonAlways) {\r\n if (keyCode !== 27) event._showToolbarBalloonDelay();\r\n } else {\r\n event._showToolbarBalloon();\r\n return;\r\n }\r\n }\r\n\r\n let selectionNodeDeepestFirstChild = selectionNode;\r\n while (selectionNodeDeepestFirstChild.firstChild) selectionNodeDeepestFirstChild = selectionNodeDeepestFirstChild.firstChild;\r\n\r\n const selectedComponentInfo = core.getFileComponent(selectionNodeDeepestFirstChild);\r\n if (!(e.keyCode === 16 || e.shiftKey) && selectedComponentInfo) core.selectComponent(selectedComponentInfo.target, selectedComponentInfo.pluginName);\r\n else if (core.currentFileComponentInfo) core.controllersOff();\r\n\r\n /** when format tag deleted */\r\n if (keyCode === 8 && util.isWysiwygDiv(selectionNode) && selectionNode.textContent === '' && selectionNode.children.length === 0) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n selectionNode.innerHTML = '';\r\n\r\n const oFormatTag = util.createElement(util.isFormatElement(core._variable.currentNodes[0]) ? core._variable.currentNodes[0] : options.defaultTag);\r\n oFormatTag.innerHTML = '
      ';\r\n\r\n selectionNode.appendChild(oFormatTag);\r\n core.setRange(oFormatTag, 0, oFormatTag, 0);\r\n event._applyTagEffects();\r\n\r\n core.history.push(false);\r\n return;\r\n }\r\n\r\n const formatEl = util.getFormatElement(selectionNode, null);\r\n const rangeEl = util.getRangeFormatElement(selectionNode, null);\r\n const attrs = core._formatAttrsTemp;\r\n\r\n if (attrs) {\r\n for (let i = 0, len = attrs.length; i < len; i++) {\r\n if (keyCode === 13 && /^id$/i.test(attrs[i].name)) {\r\n formatEl.removeAttribute('id');\r\n continue;\r\n }\r\n formatEl.setAttribute(attrs[i].name, attrs[i].value);\r\n }\r\n core._formatAttrsTemp = null;\r\n }\r\n\r\n if (!formatEl && range.collapsed && !util.isComponent(selectionNode) && !util.isList(selectionNode) && core._setDefaultFormat(util.isRangeFormatElement(rangeEl) ? 'DIV' : options.defaultTag) !== null) {\r\n selectionNode = core.getSelectionNode();\r\n }\r\n\r\n const textKey = !ctrl && !alt && !event._nonTextKeyCode.test(keyCode);\r\n if (textKey && selectionNode.nodeType === 3 && util.zeroWidthRegExp.test(selectionNode.textContent) && !(e.isComposing !== undefined ? e.isComposing : event._IEisComposing)) {\r\n let so = range.startOffset, eo = range.endOffset;\r\n const frontZeroWidthCnt = (selectionNode.textContent.substring(0, eo).match(event._frontZeroWidthReg) || '').length;\r\n so = range.startOffset - frontZeroWidthCnt;\r\n eo = range.endOffset - frontZeroWidthCnt;\r\n selectionNode.textContent = selectionNode.textContent.replace(util.zeroWidthRegExp, '');\r\n core.setRange(selectionNode, so < 0 ? 0 : so, selectionNode, eo < 0 ? 0 : eo);\r\n }\r\n\r\n core._charCount('');\r\n\r\n // user event\r\n if (typeof functions.onKeyUp === 'function' && functions.onKeyUp(e, core) === false) return;\r\n\r\n // history stack\r\n if (!ctrl && !alt && !event._historyIgnoreKeyCode.test(keyCode)) {\r\n core.history.push(true);\r\n }\r\n },\r\n\r\n onScroll_wysiwyg: function (e) {\r\n core.controllersOff();\r\n if (core._isBalloon) event._hideToolbar();\r\n\r\n // user event\r\n if (typeof functions.onScroll === 'function') functions.onScroll(e, core);\r\n },\r\n\r\n onFocus_wysiwyg: function (e) {\r\n if (core._antiBlur) return;\r\n core.hasFocus = true;\r\n _w.setTimeout(event._applyTagEffects);\r\n\r\n if (core._isInline) event._showToolbarInline();\r\n\r\n // user event\r\n if (typeof functions.onFocus === 'function') functions.onFocus(e, core);\r\n },\r\n\r\n onBlur_wysiwyg: function (e) {\r\n if (core._antiBlur || core._variable.isCodeView) return;\r\n core.hasFocus = false;\r\n core.effectNode = null;\r\n core.controllersOff();\r\n if (core._isInline || core._isBalloon) event._hideToolbar();\r\n\r\n core._setKeyEffect([]);\r\n\r\n core._variable.currentNodes = [];\r\n core._variable.currentNodesMap = [];\r\n if (options.showPathLabel) context.element.navigation.textContent = '';\r\n // user event\r\n if (typeof functions.onBlur === 'function') functions.onBlur(e, core,this);\r\n },\r\n\r\n onMouseDown_resizingBar: function (e) {\r\n e.stopPropagation();\r\n\r\n core.submenuOff();\r\n core.controllersOff();\r\n\r\n core._variable.resizeClientY = e.clientY;\r\n context.element.resizeBackground.style.display = 'block';\r\n\r\n function closureFunc() {\r\n context.element.resizeBackground.style.display = 'none';\r\n _d.removeEventListener('mousemove', event._resize_editor);\r\n _d.removeEventListener('mouseup', closureFunc);\r\n }\r\n\r\n _d.addEventListener('mousemove', event._resize_editor);\r\n _d.addEventListener('mouseup', closureFunc);\r\n },\r\n\r\n _resize_editor: function (e) {\r\n const resizeInterval = context.element.editorArea.offsetHeight + (e.clientY - core._variable.resizeClientY);\r\n const h = (resizeInterval < core._variable.minResizingSize ? core._variable.minResizingSize : resizeInterval);\r\n context.element.wysiwygFrame.style.height = context.element.code.style.height = h + 'px';\r\n core._variable.resizeClientY = e.clientY;\r\n if (!util.isResizeObserverSupported) core.__callResizeFunction(h, null);\r\n },\r\n\r\n onResize_window: function () {\r\n if (!util.isResizeObserverSupported) core.resetResponsiveToolbar();\r\n\r\n const toolbar = context.element.toolbar;\r\n const isToolbarHidden = (toolbar.style.display === 'none' || (core._isInline && !core._inlineToolbarAttr.isShow));\r\n if (toolbar.offsetWidth === 0 && !isToolbarHidden) return;\r\n\r\n if (context.fileBrowser && context.fileBrowser.area.style.display === 'block') {\r\n context.fileBrowser.body.style.maxHeight = (_w.innerHeight - context.fileBrowser.header.offsetHeight - 50) + 'px';\r\n }\r\n\r\n if (core.submenuActiveButton && core.submenu) {\r\n core._setMenuPosition(core.submenuActiveButton, core.submenu);\r\n }\r\n\r\n if (core._variable.isFullScreen) {\r\n core._variable.innerHeight_fullScreen += (_w.innerHeight - toolbar.offsetHeight) - core._variable.innerHeight_fullScreen;\r\n context.element.editorArea.style.height = core._variable.innerHeight_fullScreen + 'px';\r\n return;\r\n }\r\n\r\n if (core._variable.isCodeView && core._isInline) {\r\n event._showToolbarInline();\r\n return;\r\n }\r\n\r\n core._iframeAutoHeight();\r\n\r\n if (core._sticky) {\r\n toolbar.style.width = (context.element.topArea.offsetWidth - 2) + 'px';\r\n event.onScroll_window();\r\n }\r\n },\r\n\r\n onScroll_window: function () {\r\n if (core._variable.isFullScreen || context.element.toolbar.offsetWidth === 0 || options.stickyToolbar < 0) return;\r\n\r\n const element = context.element;\r\n const editorHeight = element.editorArea.offsetHeight;\r\n const y = (this.scrollY || _d.documentElement.scrollTop) + options.stickyToolbar;\r\n const editorTop = event._getEditorOffsets(options.toolbarContainer).top - (core._isInline ? element.toolbar.offsetHeight : 0);\r\n const inlineOffset = core._isInline && (y - editorTop) > 0 ? y - editorTop - context.element.toolbar.offsetHeight : 0;\r\n\r\n if (y < editorTop) {\r\n event._offStickyToolbar();\r\n }\r\n else if (y + core._variable.minResizingSize >= editorHeight + editorTop) {\r\n if (!core._sticky) event._onStickyToolbar(inlineOffset);\r\n element.toolbar.style.top = (inlineOffset + editorHeight + editorTop + options.stickyToolbar - y - core._variable.minResizingSize) + 'px';\r\n }\r\n else if (y >= editorTop) {\r\n event._onStickyToolbar(inlineOffset);\r\n }\r\n },\r\n\r\n _getEditorOffsets: function (container) {\r\n let offsetEl = container || context.element.topArea;\r\n let t = 0, l = 0, s = 0;\r\n\r\n while (offsetEl) {\r\n t += offsetEl.offsetTop;\r\n l += offsetEl.offsetLeft;\r\n s += offsetEl.scrollTop;\r\n offsetEl = offsetEl.offsetParent;\r\n }\r\n\r\n return {\r\n top: t,\r\n left: l,\r\n scroll: s\r\n };\r\n },\r\n\r\n _getPageBottomSpace: function () {\r\n return _d.documentElement.scrollHeight - (event._getEditorOffsets(null).top + context.element.topArea.offsetHeight);\r\n },\r\n\r\n _onStickyToolbar: function (inlineOffset) {\r\n const element = context.element;\r\n\r\n if (!core._isInline && !options.toolbarContainer) {\r\n element._stickyDummy.style.height = element.toolbar.offsetHeight + 'px';\r\n element._stickyDummy.style.display = 'block';\r\n }\r\n\r\n element.toolbar.style.top = (options.stickyToolbar + inlineOffset) + 'px';\r\n element.toolbar.style.width = core._isInline ? core._inlineToolbarAttr.width : element.toolbar.offsetWidth + 'px';\r\n util.addClass(element.toolbar, 'se-toolbar-sticky');\r\n core._sticky = true;\r\n },\r\n\r\n _offStickyToolbar: function () {\r\n const element = context.element;\r\n\r\n element._stickyDummy.style.display = 'none';\r\n element.toolbar.style.top = core._isInline ? core._inlineToolbarAttr.top : '';\r\n element.toolbar.style.width = core._isInline ? core._inlineToolbarAttr.width : '';\r\n element.editorArea.style.marginTop = '';\r\n\r\n util.removeClass(element.toolbar, 'se-toolbar-sticky');\r\n core._sticky = false;\r\n },\r\n\r\n _codeViewAutoHeight: function () {\r\n if (core._variable.isFullScreen) return;\r\n context.element.code.style.height = context.element.code.scrollHeight + 'px';\r\n },\r\n\r\n // FireFox - table delete, Chrome - image, video, audio\r\n _hardDelete: function () {\r\n const range = core.getRange();\r\n const sc = range.startContainer;\r\n const ec = range.endContainer;\r\n\r\n // table\r\n const sCell = util.getRangeFormatElement(sc);\r\n const eCell = util.getRangeFormatElement(ec);\r\n const sIsCell = util.isCell(sCell);\r\n const eIsCell = util.isCell(eCell);\r\n const ancestor = range.commonAncestorContainer;\r\n if (((sIsCell && !sCell.previousElementSibling && !sCell.parentElement.previousElementSibling) || (eIsCell && !eCell.nextElementSibling && !eCell.parentElement.nextElementSibling)) && sCell !== eCell) {\r\n if (!sIsCell) {\r\n util.removeItem(util.getParentElement(eCell, function(current) {return ancestor === current.parentNode;}));\r\n } else if (!eIsCell) {\r\n util.removeItem(util.getParentElement(sCell, function(current) {return ancestor === current.parentNode;}));\r\n } else {\r\n util.removeItem(util.getParentElement(sCell, function(current) {return ancestor === current.parentNode;}));\r\n core.nativeFocus();\r\n return true;\r\n }\r\n }\r\n\r\n // component\r\n const sComp = sc.nodeType === 1 ? util.getParentElement(sc, '.se-component') : null;\r\n const eComp = ec.nodeType === 1 ? util.getParentElement(ec, '.se-component') : null;\r\n if (sComp) util.removeItem(sComp);\r\n if (eComp) util.removeItem(eComp);\r\n\r\n return false;\r\n },\r\n\r\n onPaste_wysiwyg: function (e) {\r\n const clipboardData = util.isIE ? _w.clipboardData : e.clipboardData;\r\n if (!clipboardData) return true;\r\n return event._dataTransferAction('paste', e, clipboardData);\r\n },\r\n\r\n _setClipboardComponent: function (e, info, clipboardData) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n clipboardData.setData('text/html', info.component.outerHTML);\r\n },\r\n\r\n onCopy_wysiwyg: function (e) {\r\n const clipboardData = util.isIE ? _w.clipboardData : e.clipboardData;\r\n\r\n // user event\r\n if (typeof functions.onCopy === 'function' && functions.onCopy(e, clipboardData, core) === false) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n\r\n const info = core.currentFileComponentInfo;\r\n if (info && !util.isIE) {\r\n event._setClipboardComponent(e, info, clipboardData);\r\n util.addClass(info.component, 'se-component-copy');\r\n // copy effect\r\n _w.setTimeout(function () {\r\n util.removeClass(info.component, 'se-component-copy');\r\n }, 150);\r\n }\r\n },\r\n\r\n onSave_wysiwyg: function (content) {\r\n // user event\r\n if (typeof functions.onSave === 'function') {\r\n functions.onSave(content, core);\r\n return;\r\n }\r\n },\r\n\r\n onCut_wysiwyg: function (e) {\r\n const clipboardData = util.isIE ? _w.clipboardData : e.clipboardData;\r\n\r\n // user event\r\n if (typeof functions.onCut === 'function' && functions.onCut(e, clipboardData, core) === false) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n\r\n const info = core.currentFileComponentInfo;\r\n if (info && !util.isIE) {\r\n event._setClipboardComponent(e, info, clipboardData);\r\n util.removeItem(info.component);\r\n core.controllersOff();\r\n }\r\n\r\n _w.setTimeout(function () {\r\n // history stack\r\n core.history.push(false);\r\n });\r\n },\r\n\r\n onDrop_wysiwyg: function (e) {\r\n if (core.isReadOnly || util.isIE) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n\r\n const dataTransfer = e.dataTransfer;\r\n if (!dataTransfer) return true;\r\n\r\n event._setDropLocationSelection(e);\r\n core.removeNode();\r\n\r\n if (!document.body.contains(core.currentControllerTarget)) core.controllersOff();\r\n\r\n return event._dataTransferAction('drop', e, dataTransfer);\r\n },\r\n\r\n _setDropLocationSelection: function (e) {\r\n const range = { startContainer: null, startOffset: null, endContainer: null, endOffset: null };\r\n\r\n let r = null;\r\n if (e.rangeParent) {\r\n range.startContainer = e.rangeParent;\r\n range.startOffset = e.rangeOffset;\r\n range.endContainer = e.rangeParent;\r\n range.endOffset = e.rangeOffset;\r\n } else if (core._wd.caretRangeFromPoint) {\r\n r = core._wd.caretRangeFromPoint(e.clientX, e.clientY);\r\n } else {\r\n r = core.getRange();\r\n }\r\n if (r) {\r\n range.startContainer = r.startContainer;\r\n range.startOffset = r.startOffset;\r\n range.endContainer = r.endContainer;\r\n range.endOffset = r.endOffset;\r\n }\r\n\r\n if (range.startContainer === range.endContainer) {\r\n const component = util.getParentElement(range.startContainer, util.isComponent);\r\n if (component) {\r\n range.startContainer = component;\r\n range.startOffset = 0;\r\n range.endContainer = component;\r\n range.endOffset = 0;\r\n }\r\n }\r\n core.setRange(range.startContainer, range.startOffset, range.endContainer, range.endOffset);\r\n },\r\n\r\n _dataTransferAction: function (type, e, data) {\r\n let plainText, cleanData;\r\n if (util.isIE) {\r\n plainText = data.getData('Text');\r\n\r\n const range = core.getRange();\r\n const tempDiv = util.createElement('DIV');\r\n const tempRange = {\r\n sc: range.startContainer,\r\n so: range.startOffset,\r\n ec: range.endContainer,\r\n eo: range.endOffset\r\n };\r\n\r\n tempDiv.setAttribute('contenteditable', true);\r\n tempDiv.style.cssText = 'position:absolute; top:0; left:0; width:1px; height:1px; overflow:hidden;';\r\n\r\n context.element.relative.appendChild(tempDiv);\r\n tempDiv.focus();\r\n\r\n _w.setTimeout(function () {\r\n cleanData = tempDiv.innerHTML;\r\n util.removeItem(tempDiv);\r\n core.setRange(tempRange.sc, tempRange.so, tempRange.ec, tempRange.eo);\r\n event._setClipboardData(type, e, plainText, cleanData, data);\r\n });\r\n\r\n return true;\r\n } else {\r\n plainText = data.getData('text/plain');\r\n cleanData = data.getData('text/html');\r\n if (event._setClipboardData(type, e, plainText, cleanData, data) === false) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n }\r\n }\r\n },\r\n\r\n _setClipboardData: function (type, e, plainText, cleanData, data) {\r\n // MS word, OneNode, Excel\r\n const MSData = /class=[\"']*Mso(Normal|List)/i.test(cleanData) || /content=[\"']*Word.Document/i.test(cleanData) || /content=[\"']*OneNote.File/i.test(cleanData) || /content=[\"']*Excel.Sheet/i.test(cleanData);\r\n const onlyText = !cleanData;\r\n\r\n if (!onlyText) {\r\n cleanData = cleanData.replace(/^\\r?\\n?\\r?\\n?\\x3C!--StartFragment--\\>|\\x3C!--EndFragment-->\\r?\\n?<\\/body\\>\\r?\\n?<\\/html>$/g, '');\r\n if (MSData) {\r\n cleanData = cleanData.replace(/\\n/g, ' ');\r\n plainText = plainText.replace(/\\n/g, ' ');\r\n }\r\n cleanData = core.cleanHTML(cleanData, core.pasteTagsWhitelistRegExp, core.pasteTagsBlacklistRegExp);\r\n } else {\r\n cleanData = util._HTMLConvertor(plainText).replace(/\\n/g, '
      ');\r\n }\r\n\r\n const maxCharCount = core._charCount(core._charTypeHTML ? cleanData : plainText);\r\n // user event - paste\r\n if (type === 'paste' && typeof functions.onPaste === 'function') {\r\n const value = functions.onPaste(e, cleanData, maxCharCount, core);\r\n if (value === false) {\r\n return false;\r\n } else if (typeof value === 'string') {\r\n if (!value) return false;\r\n cleanData = value;\r\n }\r\n }\r\n // user event - drop\r\n if (type === 'drop' && typeof functions.onDrop === 'function') {\r\n const value = functions.onDrop(e, cleanData, maxCharCount, core);\r\n if (value === false) {\r\n return false;\r\n } else if (typeof value === 'string') {\r\n if (!value) return false;\r\n cleanData = value;\r\n }\r\n }\r\n\r\n // files\r\n const files = data.files;\r\n if (files.length > 0 && !MSData) {\r\n if (/^image/.test(files[0].type) && core.plugins.image) {\r\n functions.insertImage(files);\r\n }\r\n return false;\r\n }\r\n\r\n if (!maxCharCount) {\r\n return false;\r\n }\r\n\r\n if (cleanData) {\r\n functions.insertHTML(cleanData, true, false);\r\n return false;\r\n }\r\n },\r\n\r\n onMouseMove_wysiwyg: function (e) {\r\n if (core.isDisabled || core.isReadOnly) return false;\r\n const component = util.getParentElement(e.target, util.isComponent);\r\n const lineBreakerStyle = core._lineBreaker.style;\r\n\r\n if (component && !core.currentControllerName) {\r\n const ctxEl = context.element;\r\n let scrollTop = 0;\r\n let el = ctxEl.wysiwyg;\r\n do {\r\n scrollTop += el.scrollTop;\r\n el = el.parentElement;\r\n } while (el && !/^(BODY|HTML)$/i.test(el.nodeName));\r\n\r\n const wScroll = ctxEl.wysiwyg.scrollTop;\r\n const offsets = event._getEditorOffsets(null);\r\n const componentTop = util.getOffset(component, ctxEl.wysiwygFrame).top + wScroll;\r\n const y = e.pageY + scrollTop + (options.iframe && !options.toolbarContainer ? ctxEl.toolbar.offsetHeight : 0);\r\n const c = componentTop + (options.iframe ? scrollTop : offsets.top);\r\n\r\n const isList = util.isListCell(component.parentNode);\r\n let dir = '', top = '';\r\n if ((isList ? !component.previousSibling : !util.isFormatElement(component.previousElementSibling)) && y < (c + 20)) {\r\n top = componentTop;\r\n dir = 't';\r\n } else if ((isList ? !component.nextSibling : !util.isFormatElement(component.nextElementSibling)) && y > (c + component.offsetHeight - 20)) {\r\n top = componentTop + component.offsetHeight;\r\n dir = 'b';\r\n } else {\r\n lineBreakerStyle.display = 'none';\r\n return;\r\n }\r\n\r\n core._variable._lineBreakComp = component;\r\n core._variable._lineBreakDir = dir;\r\n lineBreakerStyle.top = (top - wScroll) + 'px';\r\n core._lineBreakerButton.style.left = (util.getOffset(component).left + (component.offsetWidth / 2) - 15) + 'px';\r\n lineBreakerStyle.display = 'block';\r\n } // off line breaker\r\n else if (lineBreakerStyle.display !== 'none') {\r\n lineBreakerStyle.display = 'none';\r\n }\r\n },\r\n\r\n _enterPrevent(e) {\r\n e.preventDefault();\r\n if (!util.isMobile) return;\r\n\r\n core.__focusTemp.focus();\r\n },\r\n\r\n _onMouseDown_lineBreak: function (e) {\r\n e.preventDefault();\r\n },\r\n\r\n _onLineBreak: function (e) {\r\n e.preventDefault();\r\n\r\n const component = core._variable._lineBreakComp;\r\n const dir = !this ? core._variable._lineBreakDir : this;\r\n const isList = util.isListCell(component.parentNode);\r\n\r\n const format = util.createElement(isList ? 'BR' : util.isCell(component.parentNode) ? 'DIV' : options.defaultTag);\r\n if (!isList) format.innerHTML = '
      ';\r\n\r\n if (core._charTypeHTML && !core.checkCharCount(format.outerHTML, 'byte-html')) return;\r\n\r\n component.parentNode.insertBefore(format, dir === 't' ? component : component.nextSibling);\r\n core._lineBreaker.style.display = 'none';\r\n core._variable._lineBreakComp = null;\r\n\r\n const focusEl = isList ? format : format.firstChild;\r\n core.setRange(focusEl, 1, focusEl, 1);\r\n // history stack\r\n core.history.push(false);\r\n },\r\n\r\n _resizeObserver: null,\r\n _toolbarObserver: null,\r\n _addEvent: function () {\r\n const eventWysiwyg = options.iframe ? core._ww : context.element.wysiwyg;\r\n if (util.isResizeObserverSupported) {\r\n this._resizeObserver = new _w.ResizeObserver(function(entries) {\r\n core.__callResizeFunction(-1, entries[0]);\r\n });\r\n }\r\n\r\n /** toolbar event */\r\n context.element.toolbar.addEventListener('mousedown', event._buttonsEventHandler, false);\r\n context.element._menuTray.addEventListener('mousedown', event._buttonsEventHandler, false);\r\n context.element.toolbar.addEventListener('click', event.onClick_toolbar, false);\r\n /** editor area */\r\n eventWysiwyg.addEventListener('mousedown', event.onMouseDown_wysiwyg, false);\r\n eventWysiwyg.addEventListener('click', event.onClick_wysiwyg, false);\r\n eventWysiwyg.addEventListener(util.isIE ? 'textinput' : 'input', event.onInput_wysiwyg, false);\r\n eventWysiwyg.addEventListener('keydown', event.onKeyDown_wysiwyg, false);\r\n eventWysiwyg.addEventListener('keyup', event.onKeyUp_wysiwyg, false);\r\n eventWysiwyg.addEventListener('paste', event.onPaste_wysiwyg, false);\r\n eventWysiwyg.addEventListener('copy', event.onCopy_wysiwyg, false);\r\n eventWysiwyg.addEventListener('cut', event.onCut_wysiwyg, false);\r\n eventWysiwyg.addEventListener('drop', event.onDrop_wysiwyg, false);\r\n eventWysiwyg.addEventListener('scroll', event.onScroll_wysiwyg, false);\r\n eventWysiwyg.addEventListener('focus', event.onFocus_wysiwyg, false);\r\n eventWysiwyg.addEventListener('blur', event.onBlur_wysiwyg, false);\r\n\r\n /** line breaker */\r\n event._lineBreakerBind = { a: event._onLineBreak.bind(''), t: event._onLineBreak.bind('t'), b: event._onLineBreak.bind('b') };\r\n eventWysiwyg.addEventListener('mousemove', event.onMouseMove_wysiwyg, false);\r\n core._lineBreakerButton.addEventListener('mousedown', event._onMouseDown_lineBreak, false);\r\n core._lineBreakerButton.addEventListener('click', event._lineBreakerBind.a, false);\r\n context.element.lineBreaker_t.addEventListener('mousedown', event._lineBreakerBind.t, false);\r\n context.element.lineBreaker_b.addEventListener('mousedown', event._lineBreakerBind.b, false);\r\n\r\n /** Events are registered mobile. */\r\n eventWysiwyg.addEventListener('touchstart', event.onMouseDown_wysiwyg, {passive: true, useCapture: false});\r\n eventWysiwyg.addEventListener('touchend', event.onClick_wysiwyg, {passive: true, useCapture: false});\r\n\r\n /** code view area auto line */\r\n if (options.height === 'auto' && !options.codeMirrorEditor) {\r\n context.element.code.addEventListener('keydown', event._codeViewAutoHeight, false);\r\n context.element.code.addEventListener('keyup', event._codeViewAutoHeight, false);\r\n context.element.code.addEventListener('paste', event._codeViewAutoHeight, false);\r\n }\r\n\r\n /** resizingBar */\r\n if (context.element.resizingBar) {\r\n if (/\\d+/.test(options.height) && options.resizeEnable) {\r\n context.element.resizingBar.addEventListener('mousedown', event.onMouseDown_resizingBar, false);\r\n } else {\r\n util.addClass(context.element.resizingBar, 'se-resizing-none');\r\n }\r\n }\r\n\r\n /** set response toolbar */\r\n event._setResponsiveToolbar();\r\n\r\n /** responsive toolbar observer */\r\n if (util.isResizeObserverSupported) this._toolbarObserver = new _w.ResizeObserver(core.resetResponsiveToolbar);\r\n\r\n /** window event */\r\n _w.addEventListener('resize', event.onResize_window, false);\r\n if (options.stickyToolbar > -1) {\r\n _w.addEventListener('scroll', event.onScroll_window, false);\r\n }\r\n },\r\n\r\n _removeEvent: function () {\r\n const eventWysiwyg = options.iframe ? core._ww : context.element.wysiwyg;\r\n\r\n context.element.toolbar.removeEventListener('mousedown', event._buttonsEventHandler);\r\n context.element._menuTray.removeEventListener('mousedown', event._buttonsEventHandler);\r\n context.element.toolbar.removeEventListener('click', event.onClick_toolbar);\r\n\r\n eventWysiwyg.removeEventListener('mousedown', event.onMouseDown_wysiwyg);\r\n eventWysiwyg.removeEventListener('click', event.onClick_wysiwyg);\r\n eventWysiwyg.removeEventListener(util.isIE ? 'textinput' : 'input', event.onInput_wysiwyg);\r\n eventWysiwyg.removeEventListener('keydown', event.onKeyDown_wysiwyg);\r\n eventWysiwyg.removeEventListener('keyup', event.onKeyUp_wysiwyg);\r\n eventWysiwyg.removeEventListener('paste', event.onPaste_wysiwyg);\r\n eventWysiwyg.removeEventListener('copy', event.onCopy_wysiwyg);\r\n eventWysiwyg.removeEventListener('cut', event.onCut_wysiwyg);\r\n eventWysiwyg.removeEventListener('drop', event.onDrop_wysiwyg);\r\n eventWysiwyg.removeEventListener('scroll', event.onScroll_wysiwyg);\r\n\r\n eventWysiwyg.removeEventListener('mousemove', event.onMouseMove_wysiwyg);\r\n core._lineBreakerButton.removeEventListener('mousedown', event._onMouseDown_lineBreak);\r\n core._lineBreakerButton.removeEventListener('click', event._lineBreakerBind.a);\r\n context.element.lineBreaker_t.removeEventListener('mousedown', event._lineBreakerBind.t);\r\n context.element.lineBreaker_b.removeEventListener('mousedown', event._lineBreakerBind.b);\r\n event._lineBreakerBind = null;\r\n\r\n eventWysiwyg.removeEventListener('touchstart', event.onMouseDown_wysiwyg, {passive: true, useCapture: false});\r\n eventWysiwyg.removeEventListener('touchend', event.onClick_wysiwyg, {passive: true, useCapture: false});\r\n eventWysiwyg.removeEventListener('focus', event.onFocus_wysiwyg);\r\n eventWysiwyg.removeEventListener('blur', event.onBlur_wysiwyg);\r\n\r\n context.element.code.removeEventListener('keydown', event._codeViewAutoHeight);\r\n context.element.code.removeEventListener('keyup', event._codeViewAutoHeight);\r\n context.element.code.removeEventListener('paste', event._codeViewAutoHeight);\r\n\r\n if (context.element.resizingBar) {\r\n context.element.resizingBar.removeEventListener('mousedown', event.onMouseDown_resizingBar);\r\n }\r\n\r\n if (event._resizeObserver) {\r\n event._resizeObserver.unobserve(context.element.wysiwygFrame);\r\n event._resizeObserver = null;\r\n }\r\n\r\n if (event._toolbarObserver) {\r\n event._toolbarObserver.unobserve(context.element._toolbarShadow);\r\n event._toolbarObserver = null;\r\n }\r\n\r\n _w.removeEventListener('resize', event.onResize_window);\r\n _w.removeEventListener('scroll', event.onScroll_window);\r\n },\r\n\r\n _setResponsiveToolbar: function () {\r\n if (_responsiveButtons.length === 0) {\r\n _responsiveButtons = null;\r\n return;\r\n }\r\n\r\n event._responsiveCurrentSize = 'default';\r\n const sizeArray = event._responsiveButtonSize = [];\r\n const buttonsObj = event._responsiveButtons = {default: _responsiveButtons[0]};\r\n for (let i = 1, len = _responsiveButtons.length, size, buttonGroup; i < len; i++) {\r\n buttonGroup = _responsiveButtons[i];\r\n size = buttonGroup[0] * 1;\r\n sizeArray.push(size);\r\n buttonsObj[size] = buttonGroup[1];\r\n }\r\n\r\n sizeArray.sort(function (a, b) { return a - b; }).unshift('default');\r\n }\r\n };\r\n\r\n /** functions */\r\n const functions = {\r\n /**\r\n * @description Core, Util object\r\n */\r\n core: core,\r\n util: util,\r\n\r\n /**\r\n * @description Event functions\r\n * @param {Object} e Event Object\r\n * @param {Object} core Core object\r\n */\r\n onload: null,\r\n onScroll: null,\r\n onMouseDown: null,\r\n onClick: null,\r\n onInput: null,\r\n onKeyDown: null,\r\n onKeyUp: null,\r\n onCopy: null,\r\n onCut: null,\r\n onFocus: null,\r\n\r\n /**\r\n * @description Event functions\r\n * @param {Object} e Event Object\r\n * @param {Object} core Core object\r\n * @param {String} contents Current contents\r\n */\r\n onBlur: null,\r\n\r\n /**\r\n * @description Event functions\r\n * @param {String} contents Current contents\r\n * @param {Object} core Core object\r\n */\r\n onChange: null,\r\n\r\n /**\r\n * @description Event functions\r\n * @param {String} contents Current contents\r\n * @param {Object} core Core object\r\n */\r\n onSave: null,\r\n\r\n /**\r\n * @description Event functions (drop, paste)\r\n * When false is returned, the default behavior is stopped.\r\n * If the string is returned, the cleanData value is modified to the return value.\r\n * @param {Object} e Event object.\r\n * @param {String} cleanData HTML string modified for editor format.\r\n * @param {Boolean} maxChartCount option (true if max character is exceeded)\r\n * @param {Object} core Core object\r\n * @returns {Boolean|String}\r\n */\r\n onDrop: null,\r\n onPaste: null,\r\n\r\n /**\r\n * @description Called just before the inline toolbar is positioned and displayed on the screen.\r\n * @param {Element} toolbar Toolbar Element\r\n * @param {Object} context The editor's context object (editor.getContext())\r\n * @param {Object} core Core object\r\n */\r\n showInline: null,\r\n\r\n /**\r\n * @description Called just after the controller is positioned and displayed on the screen.\r\n * controller - editing elements displayed on the screen [image resizing, table editor, link editor..]]\r\n * @param {String} name The name of the plugin that called the controller\r\n * @param {Array} controllers Array of Controller elements\r\n * @param {Object} core Core object\r\n */\r\n showController: null,\r\n\r\n /**\r\n * @description An event when toggling between code view and wysiwyg view.\r\n * @param {Boolean} isCodeView Whether the current code view mode\r\n * @param {Object} core Core object\r\n */\r\n toggleCodeView: null,\r\n\r\n /**\r\n * @description An event when toggling full screen.\r\n * @param {Boolean} isFullScreen Whether the current full screen mode\r\n * @param {Object} core Core object\r\n */\r\n toggleFullScreen: null,\r\n\r\n /**\r\n * @description It replaces the default callback function of the image upload\r\n * @param {Object} response Response object\r\n * @param {Object} info Input information\r\n * - linkValue: Link url value\r\n * - linkNewWindow: Open in new window Check Value\r\n * - inputWidth: Value of width input\r\n * - inputHeight: Value of height input\r\n * - align: Align Check Value\r\n * - isUpdate: Update image if true, create image if false\r\n * - element: If isUpdate is true, the currently selected image.\r\n * @param {Object} core Core object\r\n */\r\n imageUploadHandler: null,\r\n\r\n /**\r\n * @description It replaces the default callback function of the video upload\r\n * @param xmlHttp xmlHttpRequest object\r\n * @param info Input information\r\n * - inputWidth: Value of width input\r\n * - inputHeight: Value of height input\r\n * - align: Align Check Value\r\n * - isUpdate: Update video if true, create video if false\r\n * - element: If isUpdate is true, the currently selected video.\r\n * @param core Core object\r\n */\r\n videoUploadHandler: null,\r\n\r\n /**\r\n * @description It replaces the default callback function of the audio upload\r\n * @param xmlHttp xmlHttpRequest object\r\n * @param info Input information\r\n * - isUpdate: Update audio if true, create audio if false\r\n * - element: If isUpdate is true, the currently selected audio.\r\n * @param core Core object\r\n */\r\n audioUploadHandler: null,\r\n\r\n /**\r\n * @description Called before the image is uploaded\r\n * If true is returned, the internal upload process runs normally.\r\n * If false is returned, no image upload is performed.\r\n * If new fileList are returned, replaced the previous fileList\r\n * If undefined is returned, it waits until \"uploadHandler\" is executed.\r\n * @param {Array} files Files array\r\n * @param {Object} info info: {\r\n * - linkValue: Link url value\r\n * - linkNewWindow: Open in new window Check Value\r\n * - inputWidth: Value of width input\r\n * - inputHeight: Value of height input\r\n * - align: Align Check Value\r\n * - isUpdate: Update image if true, create image if false\r\n * - element: If isUpdate is true, the currently selected image.\r\n * }\r\n * @param {Object} core Core object\r\n * @param {Function} uploadHandler If undefined is returned, it waits until \"uploadHandler\" is executed.\r\n * \"uploadHandler\" is an upload function with \"core\" and \"info\" bound.\r\n * [upload files] : uploadHandler(files or [new File(...),])\r\n * [error] : uploadHandler(\"Error message\")\r\n * [Just finish] : uploadHandler()\r\n * [directly register] : uploadHandler(response) // Same format as \"imageUploadUrl\" response\r\n * ex) {\r\n * // \"errorMessage\": \"insert error message\",\r\n * \"result\": [ { \"url\": \"...\", \"name\": \"...\", \"size\": \"999\" }, ]\r\n * }\r\n * @returns {Boolean|Array|undefined}\r\n */\r\n onImageUploadBefore: null,\r\n /**\r\n * @description Called before the video is uploaded\r\n * If true is returned, the internal upload process runs normally.\r\n * If false is returned, no video(iframe, video) upload is performed.\r\n * If new fileList are returned, replaced the previous fileList\r\n * If undefined is returned, it waits until \"uploadHandler\" is executed.\r\n * @param {Array} files Files array\r\n * @param {Object} info info: {\r\n * - inputWidth: Value of width input\r\n * - inputHeight: Value of height input\r\n * - align: Align Check Value\r\n * - isUpdate: Update video if true, create video if false\r\n * - element: If isUpdate is true, the currently selected video.\r\n * }\r\n * @param {Object} core Core object\r\n * @param {Function} uploadHandler If undefined is returned, it waits until \"uploadHandler\" is executed.\r\n * \"uploadHandler\" is an upload function with \"core\" and \"info\" bound.\r\n * [upload files] : uploadHandler(files or [new File(...),])\r\n * [error] : uploadHandler(\"Error message\")\r\n * [Just finish] : uploadHandler()\r\n * [directly register] : uploadHandler(response) // Same format as \"videoUploadUrl\" response\r\n * ex) {\r\n * // \"errorMessage\": \"insert error message\",\r\n * \"result\": [ { \"url\": \"...\", \"name\": \"...\", \"size\": \"999\" }, ]\r\n * }\r\n * @returns {Boolean|Array|undefined}\r\n */\r\n onVideoUploadBefore: null,\r\n /**\r\n * @description Called before the audio is uploaded\r\n * If true is returned, the internal upload process runs normally.\r\n * If false is returned, no audio upload is performed.\r\n * If new fileList are returned, replaced the previous fileList\r\n * If undefined is returned, it waits until \"uploadHandler\" is executed.\r\n * @param {Array} files Files array\r\n * @param {Object} info info: {\r\n * - isUpdate: Update audio if true, create audio if false\r\n * - element: If isUpdate is true, the currently selected audio.\r\n * }\r\n * @param {Object} core Core object\r\n * @param {Function} uploadHandler If undefined is returned, it waits until \"uploadHandler\" is executed.\r\n * \"uploadHandler\" is an upload function with \"core\" and \"info\" bound.\r\n * [upload files] : uploadHandler(files or [new File(...),])\r\n * [error] : uploadHandler(\"Error message\")\r\n * [Just finish] : uploadHandler()\r\n * [directly register] : uploadHandler(response) // Same format as \"audioUploadUrl\" response\r\n * ex) {\r\n * // \"errorMessage\": \"insert error message\",\r\n * \"result\": [ { \"url\": \"...\", \"name\": \"...\", \"size\": \"999\" }, ]\r\n * }\r\n * @returns {Boolean|Array|undefined}\r\n */\r\n onAudioUploadBefore: null,\r\n\r\n /**\r\n * @description Called when the image is uploaded, updated, deleted\r\n * @param {Element} targetElement Target element\r\n * @param {Number} index Uploaded index\r\n * @param {String} state Upload status ('create', 'update', 'delete')\r\n * @param {Object} info Image info object\r\n * - index: data index\r\n * - name: file name\r\n * - size: file size\r\n * - select: select function\r\n * - delete: delete function\r\n * - element: target element\r\n * - src: src attribute of tag\r\n * @param {Number} remainingFilesCount Count of remaining files to upload (0 when added as a url)\r\n * @param {Object} core Core object\r\n */\r\n onImageUpload: null,\r\n /**\r\n * @description Called when the video(iframe, video) is is uploaded, updated, deleted\r\n * -- arguments is same \"onImageUpload\" --\r\n */\r\n onVideoUpload: null,\r\n /**\r\n * @description Called when the audio is is uploaded, updated, deleted\r\n * -- arguments is same \"onImageUpload\" --\r\n */\r\n onAudioUpload: null,\r\n\r\n /**\r\n * @description Called when the image is upload failed\r\n * @param {String} errorMessage Error message\r\n * @param {Object} result Response Object\r\n * @param {Object} core Core object\r\n * @returns {Boolean}\r\n */\r\n onImageUploadError: null,\r\n /**\r\n * @description Called when the video(iframe, video) upload failed\r\n * -- arguments is same \"onImageUploadError\" --\r\n */\r\n onVideoUploadError: null,\r\n /**\r\n * @description Called when the audio upload failed\r\n * -- arguments is same \"onImageUploadError\" --\r\n */\r\n onAudioUploadError: null,\r\n\r\n /**\r\n * @description Called when the editor is resized using the bottom bar\r\n */\r\n onResizeEditor: null,\r\n\r\n /**\r\n * @description Called after the \"setToolbarButtons\" invocation.\r\n * Can be used to tweak buttons properties (useful for custom buttons)\r\n * @param {Array} buttonList Button list \r\n * @param {Object} core Core object\r\n */\r\n onSetToolbarButtons: null,\r\n\r\n /**\r\n * @description Reset the buttons on the toolbar. (Editor is not reloaded)\r\n * You cannot set a new plugin for the button.\r\n * @param {Array} buttonList Button list \r\n */\r\n setToolbarButtons: function (buttonList) {\r\n core.submenuOff();\r\n core.containerOff();\r\n core.moreLayerOff();\r\n\r\n const newToolbar = _Constructor._createToolBar(_d, buttonList, core.plugins, options);\r\n _responsiveButtons = newToolbar.responsiveButtons;\r\n event._setResponsiveToolbar();\r\n\r\n context.element.toolbar.replaceChild(newToolbar._buttonTray, context.element._buttonTray);\r\n const newContext = _Context(context.element.originElement, core._getConstructed(context.element), options);\r\n\r\n context.element = newContext.element;\r\n context.tool = newContext.tool;\r\n if (options.iframe) context.element.wysiwyg = core._wd.body;\r\n\r\n core._recoverButtonStates();\r\n core._cachingButtons();\r\n core.history._resetCachingButton();\r\n\r\n core.effectNode = null;\r\n if (core.hasFocus) event._applyTagEffects();\r\n if (core.isReadOnly) util.setDisabledButtons(true, core.resizingDisabledButtons);\r\n if (typeof functions.onSetToolbarButtons === 'function') functions.onSetToolbarButtons(newToolbar._buttonTray.querySelectorAll('button'), core);\r\n },\r\n\r\n /**\r\n * @description Add or reset option property (Editor is reloaded)\r\n * @param {Object} _options Options\r\n */\r\n setOptions: function (_options) {\r\n event._removeEvent();\r\n core._resetComponents();\r\n\r\n util.removeClass(core._styleCommandMap.showBlocks, 'active');\r\n util.removeClass(core._styleCommandMap.codeView, 'active');\r\n core._variable.isCodeView = false;\r\n core._iframeAuto = null;\r\n\r\n core.plugins = _options.plugins || core.plugins;\r\n const mergeOptions = [options, _options].reduce(function (init, option) {\r\n for (let key in option) {\r\n if (!util.hasOwn(option, key)) continue;\r\n if (key === 'plugins' && option[key] && init[key]) {\r\n let i = init[key], o = option[key];\r\n i = i.length ? i : _w.Object.keys(i).map(function(name) { return i[name]; });\r\n o = o.length ? o : _w.Object.keys(o).map(function(name) { return o[name]; });\r\n init[key] = (o.filter(function(val) { return i.indexOf(val) === -1; })).concat(i);\r\n } else {\r\n init[key] = option[key];\r\n }\r\n }\r\n return init;\r\n }, {});\r\n\r\n const el = context.element;\r\n const _initHTML = el.wysiwyg.innerHTML;\r\n\r\n // set option\r\n const cons = _Constructor._setOptions(mergeOptions, context, options);\r\n\r\n if (cons.callButtons) {\r\n pluginCallButtons = cons.callButtons;\r\n core.initPlugins = {};\r\n }\r\n\r\n if (cons.plugins) {\r\n core.plugins = plugins = cons.plugins;\r\n }\r\n\r\n // reset context\r\n if (el._menuTray.children.length === 0) this._menuTray = {};\r\n _responsiveButtons = cons.toolbar.responsiveButtons;\r\n core.options = options = mergeOptions;\r\n core.lang = lang = options.lang;\r\n\r\n if (options.iframe) {\r\n el.wysiwygFrame.addEventListener('load', function () {\r\n util._setIframeDocument(this, options);\r\n core._setOptionsInit(el, _initHTML);\r\n });\r\n }\r\n\r\n el.editorArea.appendChild(el.wysiwygFrame);\r\n\r\n if (!options.iframe) {\r\n core._setOptionsInit(el, _initHTML);\r\n }\r\n },\r\n\r\n /**\r\n * @description Set \"options.defaultStyle\" style.\r\n * Define the style of the edit area\r\n * It can also be defined with the \"setOptions\" method, but the \"setDefaultStyle\" method does not render the editor again.\r\n * @param {String} style Style string\r\n */\r\n setDefaultStyle: function (style) {\r\n const newStyles = options._editorStyles = util._setDefaultOptionStyle(options, style);\r\n const el = context.element;\r\n\r\n // top area\r\n el.topArea.style.cssText = newStyles.top;\r\n // code view\r\n el.code.style.cssText = options._editorStyles.frame;\r\n el.code.style.display = 'none';\r\n if (options.height === 'auto') {\r\n el.code.style.overflow = 'hidden';\r\n } else {\r\n el.code.style.overflow = '';\r\n }\r\n // wysiwyg frame\r\n if (!options.iframe) {\r\n el.wysiwygFrame.style.cssText = newStyles.frame + newStyles.editor;\r\n } else {\r\n el.wysiwygFrame.style.cssText = newStyles.frame;\r\n el.wysiwyg.style.cssText = newStyles.editor;\r\n }\r\n },\r\n\r\n /**\r\n * @description Open a notice area\r\n * @param {String} message Notice message\r\n */\r\n noticeOpen: function (message) {\r\n core.notice.open.call(core, message);\r\n },\r\n\r\n /**\r\n * @description Close a notice area\r\n */\r\n noticeClose: function () {\r\n core.notice.close.call(core);\r\n },\r\n\r\n /**\r\n * @description Copying the contents of the editor to the original textarea and execute onSave callback\r\n * * not working during enabled codeView mode\r\n */\r\n save: function () {\r\n const contents = core.getContents(false);\r\n context.element.originElement.value = contents;\r\n event.onSave_wysiwyg(contents, core);\r\n },\r\n\r\n /**\r\n * @description Gets the suneditor's context object. Contains settings, plugins, and cached element objects\r\n * @returns {Object}\r\n */\r\n getContext: function () {\r\n return context;\r\n },\r\n\r\n /**\r\n * @description Gets the contents of the suneditor\r\n * * not working during enabled codeView mode\r\n * @param {Boolean} onlyContents - Return only the contents of the body without headers when the \"fullPage\" option is true\r\n * @returns {String}\r\n */\r\n getContents: function (onlyContents) {\r\n return core.getContents(onlyContents);\r\n },\r\n\r\n /**\r\n * @description Gets only the text of the suneditor contents\r\n * * not working during enabled codeView mode\r\n * @returns {String}\r\n */\r\n getText: function () {\r\n return context.element.wysiwyg.textContent;\r\n },\r\n\r\n /**\r\n * @description Get the editor's number of characters or binary data size.\r\n * You can use the \"charCounterType\" option format.\r\n * @param {String|null} charCounterType options - charCounterType ('char', 'byte', 'byte-html')\r\n * If argument is no value, the currently set \"charCounterType\" option is used.\r\n * @returns {Number}\r\n */\r\n getCharCount: function (charCounterType) {\r\n charCounterType = typeof charCounterType === 'string' ? charCounterType : options.charCounterType;\r\n return core.getCharLength((core._charTypeHTML ? context.element.wysiwyg.innerHTML : context.element.wysiwyg.textContent), charCounterType);\r\n },\r\n\r\n /**\r\n * @description Gets uploaded images informations\r\n * - index: data index\r\n * - name: file name\r\n * - size: file size\r\n * - select: select function\r\n * - delete: delete function\r\n * - element: target element\r\n * - src: src attribute of tag\r\n * @returns {Array}\r\n */\r\n getImagesInfo: function () {\r\n return context.image ? context.image._infoList : [];\r\n },\r\n\r\n /**\r\n * @description Gets uploaded files(plugin using fileManager) information list.\r\n * image: [img], video: [video, iframe], audio: [audio]\r\n * When the argument value is 'image', it is the same function as \"getImagesInfo\".\r\n * - index: data index\r\n * - name: file name\r\n * - size: file size\r\n * - select: select function\r\n * - delete: delete function\r\n * - element: target element\r\n * - src: src attribute of tag\r\n * @param {String} pluginName Plugin name (image, video, audio)\r\n * @returns {Array}\r\n */\r\n getFilesInfo: function (pluginName) {\r\n return context[pluginName] ? context[pluginName]._infoList : [];\r\n },\r\n\r\n /**\r\n * @description Upload images using image plugin\r\n * @param {FileList} files FileList\r\n */\r\n insertImage: function (files) {\r\n if (!core.plugins.image || !files) return;\r\n\r\n if (!core.initPlugins.image) core.callPlugin('image', core.plugins.image.submitAction.bind(core, files), null);\r\n else core.plugins.image.submitAction.call(core, files);\r\n core.focus();\r\n },\r\n\r\n /**\r\n * @description Inserts an HTML element or HTML string or plain string at the current cursor position\r\n * @param {Element|String} html HTML Element or HTML string or plain string\r\n * @param {Boolean} notCleaningData If true, inserts the HTML string without refining it with core.cleanHTML.\r\n * @param {Boolean} checkCharCount If true, if \"options.maxCharCount\" is exceeded when \"element\" is added, null is returned without addition.\r\n * @param {Boolean} rangeSelection If true, range select the inserted node.\r\n */\r\n insertHTML: function (html, notCleaningData, checkCharCount, rangeSelection) {\r\n if (!context.element.wysiwygFrame.contains(core.getSelection().focusNode)) core.focus();\r\n\r\n if (typeof html === 'string') {\r\n if (!notCleaningData) html = core.cleanHTML(html, null, null);\r\n try {\r\n if (util.isListCell(util.getFormatElement(core.getSelectionNode(), null))) {\r\n const dom = _d.createRange().createContextualFragment(html);\r\n const domTree = dom.childNodes;\r\n if (core._isFormatData(domTree)) html = core._convertListCell(domTree);\r\n }\r\n\r\n const dom = _d.createRange().createContextualFragment(html);\r\n const domTree = dom.childNodes;\r\n\r\n if (checkCharCount) {\r\n const type = core._charTypeHTML ? 'outerHTML' : 'textContent';\r\n let checkHTML = '';\r\n for (let i = 0, len = domTree.length; i < len; i++) {\r\n checkHTML += domTree[i][type];\r\n }\r\n if (!core.checkCharCount(checkHTML, null)) return;\r\n }\r\n\r\n let c, a, t, prev, firstCon;\r\n while ((c = domTree[0])) {\r\n if (prev && prev.nodeType === 3 && a && a.nodeType === 1 && util.isBreak(c)) {\r\n prev = c;\r\n util.removeItem(c);\r\n continue;\r\n }\r\n t = core.insertNode(c, a, false);\r\n a = t.container || t;\r\n if (!firstCon) firstCon = t;\r\n prev = c;\r\n }\r\n\r\n if (prev.nodeType === 3 && a.nodeType === 1) a = prev;\r\n const offset = a.nodeType === 3 ? (t.endOffset || a.textContent.length): a.childNodes.length;\r\n if (rangeSelection) core.setRange(firstCon.container || firstCon, firstCon.startOffset || 0, a, offset);\r\n else core.setRange(a, offset, a, offset);\r\n } catch (error) {\r\n if (core.isDisabled || core.isReadOnly) return;\r\n console.warn('[SUNEDITOR.insertHTML.fail] ' + error);\r\n core.execCommand('insertHTML', false, html);\r\n }\r\n } else {\r\n if (util.isComponent(html)) {\r\n core.insertComponent(html, false, checkCharCount, false);\r\n } else {\r\n let afterNode = null;\r\n if (util.isFormatElement(html) || util.isMedia(html)) {\r\n afterNode = util.getFormatElement(core.getSelectionNode(), null);\r\n }\r\n core.insertNode(html, afterNode, checkCharCount);\r\n }\r\n }\r\n\r\n core.effectNode = null;\r\n core.focus();\r\n\r\n // history stack\r\n core.history.push(false);\r\n },\r\n\r\n /**\r\n * @description Change the contents of the suneditor\r\n * @param {String|undefined} contents Contents to Input\r\n */\r\n setContents: function (contents) {\r\n core.setContents(contents);\r\n },\r\n\r\n /**\r\n * @description Add contents to the suneditor\r\n * @param {String} contents Contents to Input\r\n */\r\n appendContents: function (contents) {\r\n const convertValue = core.convertContentsForEditor(contents);\r\n\r\n if (!core._variable.isCodeView) {\r\n const temp = util.createElement('DIV');\r\n temp.innerHTML = convertValue;\r\n\r\n const wysiwyg = context.element.wysiwyg;\r\n const children = temp.children;\r\n for (let i = 0, len = children.length; i < len; i++) {\r\n if (children[i]) {\r\n wysiwyg.appendChild(children[i]);\r\n }\r\n }\r\n } else {\r\n core._setCodeView(core._getCodeView() + '\\n' + core.convertHTMLForCodeView(convertValue, false));\r\n }\r\n\r\n // history stack\r\n core.history.push(false);\r\n },\r\n\r\n /**\r\n * @description Switch to or off \"ReadOnly\" mode.\r\n * @param {Boolean} value \"readOnly\" boolean value.\r\n */\r\n readOnly: function (value) {\r\n core.isReadOnly = value;\r\n\r\n util.setDisabledButtons(!!value, core.resizingDisabledButtons);\r\n\r\n if (value) {\r\n /** off menus */\r\n core.controllersOff();\r\n if (core.submenuActiveButton && core.submenuActiveButton.disabled) core.submenuOff();\r\n if (core._moreLayerActiveButton && core._moreLayerActiveButton.disabled) core.moreLayerOff();\r\n if (core.containerActiveButton && core.containerActiveButton.disabled) core.containerOff();\r\n if (core.modalForm) core.plugins.dialog.close.call(core);\r\n\r\n context.element.code.setAttribute(\"readOnly\", \"true\");\r\n util.addClass(context.element.wysiwygFrame, 'se-read-only');\r\n } else {\r\n context.element.code.removeAttribute(\"readOnly\");\r\n util.removeClass(context.element.wysiwygFrame, 'se-read-only');\r\n }\r\n\r\n if (options.codeMirrorEditor) options.codeMirrorEditor.setOption('readOnly', !!value);\r\n },\r\n\r\n /**\r\n * @description Disable the suneditor\r\n */\r\n disable: function () {\r\n this.toolbar.disable();\r\n this.wysiwyg.disable();\r\n },\r\n\r\n /**\r\n * @description Provided for backward compatibility and will be removed in 3.0.0 version\r\n */\r\n disabled: function () {\r\n this.disable();\r\n },\r\n\r\n /**\r\n * @description Enable the suneditor\r\n */\r\n enable: function () {\r\n this.toolbar.enable();\r\n this.wysiwyg.enable();\r\n },\r\n\r\n /**\r\n * @description Provided for backward compatibility and will be removed in 3.0.0 version\r\n */\r\n enabled: function () {\r\n this.enable();\r\n },\r\n\r\n /**\r\n * @description Show the suneditor\r\n */\r\n show: function () {\r\n const topAreaStyle = context.element.topArea.style;\r\n if (topAreaStyle.display === 'none') topAreaStyle.display = options.display;\r\n },\r\n\r\n /**\r\n * @description Hide the suneditor\r\n */\r\n hide: function () {\r\n context.element.topArea.style.display = 'none';\r\n },\r\n\r\n /**\r\n * @description Destroy the suneditor\r\n */\r\n destroy: function () {\r\n /** off menus */\r\n core.submenuOff();\r\n core.containerOff();\r\n core.controllersOff();\r\n if (core.notice) core.notice.close.call(core);\r\n if (core.modalForm) core.plugins.dialog.close.call(core);\r\n\r\n /** remove history */\r\n core.history._destroy();\r\n\r\n /** remove event listeners */\r\n event._removeEvent();\r\n\r\n /** remove element */\r\n util.removeItem(context.element.toolbar);\r\n util.removeItem(context.element.topArea);\r\n\r\n /** remove object reference */\r\n for (let k in core.functions) { if (util.hasOwn(core, k)) delete core.functions[k]; }\r\n for (let k in core) { if (util.hasOwn(core, k)) delete core[k]; }\r\n for (let k in event) { if (util.hasOwn(event, k)) delete event[k]; }\r\n for (let k in context) { if (util.hasOwn(context, k)) delete context[k]; }\r\n for (let k in pluginCallButtons) { if (util.hasOwn(pluginCallButtons, k)) delete pluginCallButtons[k]; }\r\n\r\n /** remove user object */\r\n for (let k in this) { if (util.hasOwn(this, k)) delete this[k]; }\r\n },\r\n\r\n /**\r\n * @description Toolbar methods\r\n */\r\n toolbar: {\r\n /**\r\n * @description Disable the toolbar\r\n */\r\n disable: function () {\r\n /** off menus */\r\n core.submenuOff();\r\n core.moreLayerOff();\r\n core.containerOff();\r\n\r\n context.tool.cover.style.display = 'block';\r\n },\r\n\r\n /**\r\n * @description Provided for backward compatibility and will be removed in 3.0.0 version\r\n */\r\n disabled: function () {\r\n this.disable();\r\n },\r\n\r\n /**\r\n * @description Enable the toolbar\r\n */\r\n enable: function () {\r\n context.tool.cover.style.display = 'none';\r\n },\r\n\r\n /**\r\n * @description Provided for backward compatibility and will be removed in 3.0.0 version\r\n */\r\n enabled: function () {\r\n this.enable();\r\n },\r\n\r\n /**\r\n * @description Show the toolbar\r\n */\r\n show: function () {\r\n if (core._isInline) {\r\n event._showToolbarInline();\r\n } else {\r\n context.element.toolbar.style.display = '';\r\n context.element._stickyDummy.style.display = '';\r\n }\r\n\r\n event.onResize_window();\r\n },\r\n\r\n /**\r\n * @description Hide the toolbar\r\n */\r\n hide: function () {\r\n if (core._isInline) {\r\n event._hideToolbar();\r\n } else {\r\n context.element.toolbar.style.display = 'none';\r\n context.element._stickyDummy.style.display = 'none';\r\n }\r\n\r\n event.onResize_window();\r\n },\r\n },\r\n\r\n /**\r\n * @description Wysiwyg methods\r\n */\r\n wysiwyg: {\r\n /**\r\n * @description Disable the wysiwyg area\r\n */\r\n disable: function () {\r\n /** off menus */\r\n core.controllersOff();\r\n if (core.modalForm) core.plugins.dialog.close.call(core);\r\n\r\n context.element.wysiwyg.setAttribute('contenteditable', false);\r\n core.isDisabled = true;\r\n\r\n if (options.codeMirrorEditor) {\r\n options.codeMirrorEditor.setOption('readOnly', true);\r\n } else {\r\n context.element.code.setAttribute('disabled', 'disabled');\r\n }\r\n },\r\n\r\n /**\r\n * @description Enable the wysiwyg area\r\n */\r\n enable: function () {\r\n context.element.wysiwyg.setAttribute('contenteditable', true);\r\n core.isDisabled = false;\r\n\r\n if (options.codeMirrorEditor) {\r\n options.codeMirrorEditor.setOption('readOnly', false);\r\n } else {\r\n context.element.code.removeAttribute('disabled');\r\n }\r\n },\r\n }\r\n };\r\n\r\n /************ Core init ************/\r\n // functions\r\n core.functions = functions;\r\n core.options = options;\r\n\r\n // Create to sibling node\r\n let contextEl = context.element;\r\n let originEl = contextEl.originElement;\r\n let topEl = contextEl.topArea;\r\n originEl.style.display = 'none';\r\n topEl.style.display = 'block';\r\n\r\n // init\r\n if (options.iframe) {\r\n contextEl.wysiwygFrame.addEventListener('load', function () {\r\n util._setIframeDocument(this, options);\r\n core._editorInit(false, options.value);\r\n options.value = null;\r\n });\r\n }\r\n\r\n // insert editor element\r\n if (typeof originEl.nextElementSibling === 'object') {\r\n originEl.parentNode.insertBefore(topEl, originEl.nextElementSibling);\r\n } else {\r\n originEl.parentNode.appendChild(topEl);\r\n }\r\n\r\n contextEl.editorArea.appendChild(contextEl.wysiwygFrame);\r\n contextEl = originEl = topEl = null;\r\n\r\n // init\r\n if (!options.iframe) {\r\n core._editorInit(false, options.value);\r\n options.value = null;\r\n }\r\n\r\n return functions;\r\n}","/*\n * wysiwyg web editor\n *\n * suneditor.js\n * Copyright 2019 JiHong Lee.\n * MIT license.\n */\n'use strict';\n\nexport default function (core, change) {\n const _w = core._w;\n const util = core.util;\n const delayTime = core.options.historyStackDelayTime;\n let editor = core.context.element;\n let undo = core.context.tool.undo;\n let redo = core.context.tool.redo;\n\n let pushDelay = null;\n let stackIndex = 0;\n let stack = [];\n\n function setContentsFromStack () {\n const item = stack[stackIndex];\n editor.wysiwyg.innerHTML = item.contents;\n\n core.setRange(util.getNodeFromPath(item.s.path, editor.wysiwyg), item.s.offset, util.getNodeFromPath(item.e.path, editor.wysiwyg), item.e.offset);\n core.focus();\n\n if (stack.length <= 1) {\n if (undo) undo.setAttribute('disabled', true);\n if (redo) redo.setAttribute('disabled', true);\n } else {\n if (stackIndex === 0) {\n if (undo) undo.setAttribute('disabled', true);\n if (redo) redo.removeAttribute('disabled');\n } else if (stackIndex === stack.length - 1) {\n if (undo) undo.removeAttribute('disabled');\n if (redo) redo.setAttribute('disabled', true);\n } else {\n if (undo) undo.removeAttribute('disabled');\n if (redo) redo.removeAttribute('disabled');\n }\n }\n\n core.controllersOff();\n core._checkComponents();\n core._setCharCount();\n core._resourcesStateChange();\n \n // onChange\n change();\n }\n\n function pushStack () {\n core._checkComponents();\n const current = editor.wysiwyg.innerHTML;\n if (!current || (!!stack[stackIndex] && current === stack[stackIndex].contents)) return;\n\n stackIndex++;\n const range = core._variable._range;\n\n if (stack.length > stackIndex) {\n stack = stack.slice(0, stackIndex);\n if (redo) redo.setAttribute('disabled', true);\n }\n\n if (!range) {\n stack[stackIndex] = {\n contents: current,\n s: { path: [0, 0], offset: [0, 0] },\n e: { path: 0, offset: 0 }\n };\n } else {\n stack[stackIndex] = {\n contents: current,\n s: {\n path: util.getNodePath(range.startContainer, null, null),\n offset: range.startOffset\n },\n e: {\n path: util.getNodePath(range.endContainer, null, null),\n offset: range.endOffset\n }\n };\n }\n\n if (stackIndex === 1 && undo) undo.removeAttribute('disabled');\n\n core._setCharCount();\n // onChange\n change();\n }\n\n return {\n /**\n * @description History stack\n */\n stack: stack,\n\n /**\n * @description Saving the current status to the history object stack\n * If \"delay\" is true, it will be saved after (options.historyStackDelayTime || 400) miliseconds\n * If the function is called again with the \"delay\" argument true before it is saved, the delay time is renewal\n * You can specify the delay time by sending a number.\n * @param {Boolean|Number} delay If true, Add stack without delay time.\n */\n push: function (delay) {\n _w.setTimeout(core._resourcesStateChange.bind(core));\n const time = typeof delay === 'number' ? (delay > 0 ? delay : 0) : (!delay ? 0 : delayTime);\n \n if (!time || pushDelay) {\n _w.clearTimeout(pushDelay);\n if (!time) {\n pushStack();\n return;\n }\n }\n\n pushDelay = _w.setTimeout(function () {\n _w.clearTimeout(pushDelay);\n pushDelay = null;\n pushStack();\n }, time);\n },\n\n /**\n * @description Undo function\n */\n undo: function () {\n if (stackIndex > 0) {\n stackIndex--;\n setContentsFromStack();\n }\n },\n\n /**\n * @description Redo function\n */\n redo: function () {\n if (stack.length - 1 > stackIndex) {\n stackIndex++;\n setContentsFromStack();\n }\n },\n\n /**\n * @description Go to the history stack for that index.\n * If \"index\" is -1, go to the last stack\n */\n go: function (index) {\n stackIndex = index < 0 ? (stack.length - 1) : index;\n setContentsFromStack();\n },\n\n /**\n * @description Get the current history stack index.\n * @returns {Number} Current Stack index\n */\n getCurrentIndex: function () {\n return stackIndex;\n },\n \n /**\n * @description Reset the history object\n */\n reset: function (ignoreChangeEvent) {\n if (undo) undo.setAttribute('disabled', true);\n if (redo) redo.setAttribute('disabled', true);\n core._variable.isChanged = false;\n if (core.context.tool.save) core.context.tool.save.setAttribute('disabled', true);\n \n stack.splice(0);\n stackIndex = 0;\n\n // pushStack\n stack[stackIndex] = {\n contents: core.getContents(true),\n s: {\n path: [0, 0],\n offset: 0\n },\n e: {\n path: [0, 0],\n offset: 0\n }\n };\n\n if (!ignoreChangeEvent) change();\n },\n\n /**\n * @description Reset the disabled state of the buttons to fit the current stack.\n * @private\n */\n _resetCachingButton: function () {\n editor = core.context.element;\n undo = core.context.tool.undo;\n redo = core.context.tool.redo;\n\n if (stackIndex === 0) {\n if (undo) undo.setAttribute('disabled', true);\n if (redo && stackIndex === stack.length - 1) redo.setAttribute('disabled', true);\n core._variable.isChanged = false;\n if (core.context.tool.save) core.context.tool.save.setAttribute('disabled', true);\n } else if (stackIndex === stack.length - 1) {\n if (redo) redo.setAttribute('disabled', true);\n }\n },\n\n /**\n * @description Remove all stacks and remove the timeout function.\n * @private\n */\n _destroy: function () {\n if (pushDelay) _w.clearTimeout(pushDelay);\n stack = null;\n }\n };\n}","var map = {\n\t\"./ckb.js\": 3743,\n\t\"./cs.js\": 7333,\n\t\"./da.js\": 1664,\n\t\"./de.js\": 844,\n\t\"./en.js\": 5460,\n\t\"./es.js\": 6151,\n\t\"./fa.js\": 6062,\n\t\"./fr.js\": 7755,\n\t\"./he.js\": 3296,\n\t\"./index.js\": 559,\n\t\"./it.js\": 4762,\n\t\"./ja.js\": 74,\n\t\"./ko.js\": 665,\n\t\"./lv.js\": 749,\n\t\"./nl.js\": 6449,\n\t\"./pl.js\": 8599,\n\t\"./pt_br.js\": 8366,\n\t\"./ro.js\": 3100,\n\t\"./ru.js\": 4638,\n\t\"./se.js\": 5111,\n\t\"./tr.js\": 57,\n\t\"./ua.js\": 9657,\n\t\"./ur.js\": 4640,\n\t\"./zh_cn.js\": 5277\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 2224;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"258b012d\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"client:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkclient\"] = self[\"webpackChunkclient\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
      `,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\ntype DataFunctionReturnValue = Promise | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (\n args: LoaderFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (\n args: ActionFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => DataFunctionReturnValue\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n fetcherKey: string | null;\n}\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface DataStrategyResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise>;\n}\n\nexport type AgnosticPatchRoutesOnNavigationFunctionArgs<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = {\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: O[]) => void;\n};\n\nexport type AgnosticPatchRoutesOnNavigationFunction<\n O extends AgnosticRouteObject = AgnosticRouteObject,\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> = (\n opts: AgnosticPatchRoutesOnNavigationFunctionArgs\n) => void | Promise;\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string,\n allowPartial = false\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\n );\n}\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n DataStrategyResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n AgnosticPatchRoutesOnNavigationFunction,\n DataWithResponseInit,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n matchRoutesImpl,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE DO NOT USE\n *\n * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n dataStrategy?: DataStrategyFunction;\n patchRoutesOnNavigation?: AgnosticPatchRoutesOnNavigationFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n viewTransitionOpts?: ViewTransitionOpts;\n flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches\n .slice(0, idx + 1)\n .every((m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(\n (m) => !shouldLoadRouteOnHydration(m.route, loaderData, errors)\n );\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: Set = new Set();\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let unblockBlockerHistoryUpdate: (() => void) | undefined = undefined;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n let nextHistoryUpdatePromise = new Promise((resolve) => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true,\n }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial hydration will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error: discoverResult.error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n state,\n request,\n [actionMatch],\n matches,\n null\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches)\n .route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n if (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n abortFetcher(rf.key);\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // Preserve SSR errors during partial hydration\n if (future.v7_partialHydration && initialHydration && state.errors) {\n errors = { ...state.errors, ...errors };\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): Record | null | undefined {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n abortFetcher(key);\n\n let flushSync = (opts && opts.flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n preventScrollReset,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n state,\n fetchRequest,\n [match],\n requestMatches,\n key\n );\n let actionResult = actionResults[match.route.id];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(\n revalidationRequest,\n redirect.result,\n false,\n { preventScrollReset }\n );\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n preventScrollReset: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n state,\n fetchRequest,\n [match],\n matches,\n key\n );\n let result = results[match.route.id];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset,\n });\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n isNavigation: boolean,\n {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n preventScrollReset?: boolean;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation\n ? pendingViewTransitionEnabled\n : undefined,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n state: RouterState,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null\n ): Promise> {\n let results: Record;\n let dataResults: Record = {};\n try {\n results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n state,\n request,\n matchesToLoad,\n matches,\n fetcherKey,\n manifest,\n mapRouteProperties\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n matchesToLoad.forEach((m) => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e,\n };\n });\n return dataResults;\n }\n\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n routeId,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(\n result\n );\n }\n }\n\n return dataResults;\n }\n\n async function callLoadersAndMaybeResolveData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let currentMatches = state.matches;\n\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\n \"loader\",\n state,\n request,\n matchesToLoad,\n matches,\n null\n );\n\n let fetcherResultsPromise = Promise.all(\n fetchersToLoad.map(async (f) => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\n \"loader\",\n state,\n createClientSideRequest(init.history, f.path, f.controller.signal),\n [f.match],\n f.matches,\n f.key\n );\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return { [f.key]: result };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n } as ErrorResult,\n });\n }\n })\n );\n\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce(\n (acc, r) => Object.assign(acc, r),\n {}\n );\n\n await Promise.all([\n resolveNavigationDeferredResults(\n matches,\n loaderResults,\n request.signal,\n currentMatches,\n state.loaderData\n ),\n resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnNavigationImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n if (!patchRoutesOnNavigationImpl) {\n return { type: \"success\", matches };\n }\n\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await patchRoutesOnNavigationImpl({\n path: pathname,\n matches: partialMatches,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n localManifest,\n mapRouteProperties\n );\n },\n });\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return { type: \"success\", matches: newMatches };\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // Avoid loops if the second pass results in the same partial matches\n if (\n !newPartialMatches ||\n (partialMatches.length === newPartialMatches.length &&\n partialMatches.every(\n (m, i) => m.route.id === newPartialMatches![i].route.id\n ))\n ) {\n return { type: \"success\", matches: null };\n }\n\n partialMatches = newPartialMatches;\n }\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n dataStrategy || null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n result = results[actionMatch.route.id];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n dataStrategy: DataStrategyFunction | null\n ): Promise> {\n let results = await callDataStrategyImpl(\n dataStrategy || defaultDataStrategy,\n type,\n null,\n request,\n matchesToLoad,\n matches,\n null,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n let dataResults: Record = {};\n await Promise.all(\n matches.map(async (match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n match.route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n dataResults[match.route.id] =\n await convertDataStrategyResultToDataResult(result);\n })\n );\n return dataResults;\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Account for `?index` params when routing to the current location\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n // Add one when we're targeting an index route\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n // Remove existing ones when we're not\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter((v) => v).forEach((v) => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? `?${qs}` : \"\";\n }\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string,\n includeBoundary = false\n) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n initialHydration: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryMatches = matches;\n if (initialHydration && state.errors) {\n // On initial hydration, only consider matches up to _and including_ the boundary.\n // This is inclusive to handle cases where a server loader ran successfully,\n // a child server loader bubbled up to this route, but this route has\n // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n // we have a complete version of `loaderData`\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(state.errors)[0],\n true\n );\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n // If an action threw an error, we call loaders up to, but not including the\n // boundary\n boundaryMatches = getLoaderMatchesUntilBoundary(\n matches,\n pendingActionResult[0]\n );\n }\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial hydration (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n initialHydration ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction shouldLoadRouteOnHydration(\n route: AgnosticDataRouteObject,\n loaderData: RouteData | null | undefined,\n errors: RouteData | null | undefined\n) {\n // We dunno if we have a loader - gotta find out!\n if (route.lazy) {\n return true;\n }\n\n // No loader, nothing to initialize\n if (!route.loader) {\n return false;\n }\n\n let hasData = loaderData != null && loaderData[route.id] !== undefined;\n let hasError = errors != null && errors[route.id] !== undefined;\n\n // Don't run if we error'd during SSR\n if (!hasData && hasError) {\n return false;\n }\n\n // Explicitly opting-in to running on hydration\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n\n // Otherwise, run if we're not yet initialized with anything\n return !hasData && !hasError;\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n let childrenToPatch: AgnosticDataRouteObject[];\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n\n // Don't patch in routes we already know about so that `patch` is idempotent\n // to simplify user-land code. This is useful because we re-call the\n // `patchRoutesOnNavigation` function for matched routes with params.\n let uniqueChildren = children.filter(\n (newRoute) =>\n !childrenToPatch.some((existingRoute) =>\n isSameRoute(newRoute, existingRoute)\n )\n );\n\n let newRoutes = convertRoutesToDataRoutes(\n uniqueChildren,\n mapRouteProperties,\n [routeId || \"_\", \"patch\", String(childrenToPatch?.length || \"0\")],\n manifest\n );\n\n childrenToPatch.push(...newRoutes);\n}\n\nfunction isSameRoute(\n newRoute: AgnosticRouteObject,\n existingRoute: AgnosticRouteObject\n): boolean {\n // Most optimal check is by id\n if (\n \"id\" in newRoute &&\n \"id\" in existingRoute &&\n newRoute.id === existingRoute.id\n ) {\n return true;\n }\n\n // Second is by pathing differences\n if (\n !(\n newRoute.index === existingRoute.index &&\n newRoute.path === existingRoute.path &&\n newRoute.caseSensitive === existingRoute.caseSensitive\n )\n ) {\n return false;\n }\n\n // Pathless layout routes are trickier since we need to check children.\n // If they have no children then they're the same as far as we can tell\n if (\n (!newRoute.children || newRoute.children.length === 0) &&\n (!existingRoute.children || existingRoute.children.length === 0)\n ) {\n return true;\n }\n\n // Otherwise, we look to see if every child in the new route is already\n // represented in the existing route's children\n return newRoute.children!.every((aChild, i) =>\n existingRoute.children?.some((bChild) => isSameRoute(aChild, bChild))\n );\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy({\n matches,\n}: DataStrategyFunctionArgs): ReturnType {\n let matchesToLoad = matches.filter((m) => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));\n return results.reduce(\n (acc, result, i) =>\n Object.assign(acc, { [matchesToLoad[i].route.id]: result }),\n {}\n );\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n state: RouterState | null,\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n fetcherKey: string | null,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise> {\n let loadRouteDefinitionsPromises = matches.map((m) =>\n m.route.lazy\n ? loadLazyRouteModule(m.route, mapRouteProperties, manifest)\n : undefined\n );\n\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = async (handlerOverride) => {\n if (\n handlerOverride &&\n request.method === \"GET\" &&\n (match.route.lazy || match.route.loader)\n ) {\n shouldLoad = true;\n }\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n loadRoutePromise,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n });\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext,\n });\n\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n\n return results;\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n loadRoutePromise: Promise | undefined,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: DataStrategyResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise = (async () => {\n try {\n let val = await (handlerOverride\n ? handlerOverride((ctx: unknown) => actualHandler(ctx))\n : actualHandler());\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadRoutePromise,\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadRoutePromise;\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // DataStrategyResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertDataStrategyResultToDataResult(\n dataStrategyResult: DataStrategyResult\n): Promise {\n let { result, type } = dataStrategyResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n };\n }\n\n // Convert thrown data() to ErrorResponse instances\n result = new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n );\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n matches.forEach((match) => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n results: Record,\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: Record,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n revalidatingFetchers.forEach((rf) => {\n let { key, match, controller } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n message?: string;\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: Record\n): { key: string; result: RedirectResult } | undefined {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return { key, result };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isPromise(val: unknown): val is Promise {\n return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isDataStrategyResult(result: unknown): result is DataStrategyResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectDataStrategyResultResult(result: DataStrategyResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n value: any\n): value is DataWithResponseInit {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"type\" in value &&\n \"data\" in value &&\n \"init\" in value &&\n value.type === \"DataWithResponseInit\"\n );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveNavigationDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n signal: AbortSignal,\n currentMatches: AgnosticDataRouteMatch[],\n currentLoaderData: RouteData\n) {\n let entries = Object.entries(results);\n for (let index = 0; index < entries.length; index++) {\n let [routeId, result] = entries[index];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && isRevalidatingLoader) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, false).then((result) => {\n if (result) {\n results[routeId] = result;\n }\n });\n }\n }\n}\n\nasync function resolveFetcherDeferredResults(\n matches: (AgnosticDataRouteMatch | null)[],\n results: Record,\n revalidatingFetchers: RevalidatingFetcher[]\n) {\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, routeId, controller } = revalidatingFetchers[index];\n let result = results[key];\n let match = matches.find((m) => m?.route.id === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n if (isDeferredResult(result)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n invariant(\n controller,\n \"Expected an AbortController for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, controller.signal, true).then(\n (result) => {\n if (result) {\n results[key] = result;\n }\n }\n );\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n flushSync?: boolean;\n viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_decodePath as decodePath,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

      💿 Hey developer 👋

      \n

      \n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

      \n \n );\n }\n\n return (\n <>\n

      Unexpected Application Error!

      \n

      {message}

      \n {stack ?
      {stack}
      : null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else if (\n future?.v7_partialHydration &&\n parentMatches.length === 0 &&\n !dataRouterState.initialized &&\n dataRouterState.matches.length > 0\n ) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnNavigation`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // ``\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a