]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
полные версии summernote origin/feature_smirnov_2025_02_28_full_js_css_summernote
authorAlexander Smirnov <fredeom@mail.ru>
Fri, 28 Feb 2025 07:48:00 +0000 (10:48 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Fri, 28 Feb 2025 07:48:00 +0000 (10:48 +0300)
erp24/assets/JQueryPluginsAsset.php
erp24/web/css/summernote-lite.css [new file with mode: 0644]
erp24/web/css/summernote-lite.css.map [new file with mode: 0644]
erp24/web/js/summernote-lite.js [new file with mode: 0644]
erp24/web/js/summernote-lite.js.map [new file with mode: 0644]

index 18d92714afc5070782454ec64326f49f2fe097e8..e46d815cb98d4fb03ef0840d690d04ad3881f94f 100644 (file)
@@ -17,7 +17,7 @@ class JQueryPluginsAsset extends AssetBundle
         '/js/correctFontSize.js',
         '/js/jquery.datetimepicker.full.js',
         '/js/moment-with-locales.min.js',
-        '/js/summernote-lite.min.js',
+        '/js/summernote-lite.js',
         '/js/datatables.min.js',
         '/azea/assets/plugins/spectrum-colorpicker/spectrum.js',
         '/azea/assets/plugins/select2/select2.full.min.js',
@@ -46,7 +46,7 @@ class JQueryPluginsAsset extends AssetBundle
         '/css/pagination.css',
         '/css/font-awesome.css',
         '/azea/assets/plugins/notify/css/notifIt.css',
-        '/css/summernote-lite.min.css',
+        '/css/summernote-lite.css',
         '/css/datatables.min.css'
     ];
     public $jsOptions = [
diff --git a/erp24/web/css/summernote-lite.css b/erp24/web/css/summernote-lite.css
new file mode 100644 (file)
index 0000000..37c6028
--- /dev/null
@@ -0,0 +1,1505 @@
+/*!
+ * 
+ * Super simple WYSIWYG editor v0.9.0
+ * https://summernote.org
+ *
+ * Copyright 2013~ Hackerwins and contributors
+ * Summernote may be freely distributed under the MIT license.
+ *
+ * Date: 2024-09-30T14:42Z
+ *
+ */
+@font-face {
+    font-family: "summernote";
+    font-style: normal;
+    font-weight: 400;
+    font-display: auto;
+    src: url("./font/summernote.eot?#iefix") format("embedded-opentype"), url("./font/summernote.woff2") format("woff2"), url("./font/summernote.woff") format("woff"), url("./font/summernote.ttf") format("truetype");
+}
+[class^=note-icon]:before,
+[class*=" note-icon"]:before {
+    display: inline-block;
+    font-family: "summernote";
+    font-style: normal;
+    font-size: inherit;
+    text-decoration: inherit;
+    text-rendering: auto;
+    text-transform: none;
+    vertical-align: middle;
+    -moz-osx-font-smoothing: grayscale;
+    -webkit-font-smoothing: antialiased;
+    speak: none;
+}
+
+.note-icon-fw {
+    text-align: center;
+    width: 1.25em;
+}
+
+.note-icon-border {
+    border: solid 0.08em #eee;
+    border-radius: 0.1em;
+    padding: 0.2em 0.25em 0.15em;
+}
+
+.note-icon-pull-left {
+    float: left;
+}
+
+.note-icon-pull-right {
+    float: right;
+}
+
+.note-icon.note-icon-pull-left {
+    margin-right: 0.3em;
+}
+.note-icon.note-icon-pull-right {
+    margin-left: 0.3em;
+}
+
+.note-icon-align::before {
+    content: "\ea01";
+}
+
+.note-icon-align-center::before {
+    content: "\ea02";
+}
+
+.note-icon-align-indent::before {
+    content: "\ea03";
+}
+
+.note-icon-align-justify::before {
+    content: "\ea04";
+}
+
+.note-icon-align-left::before {
+    content: "\ea05";
+}
+
+.note-icon-align-outdent::before {
+    content: "\ea06";
+}
+
+.note-icon-align-right::before {
+    content: "\ea07";
+}
+
+.note-icon-arrow-circle-down::before {
+    content: "\ea08";
+}
+
+.note-icon-arrow-circle-left::before {
+    content: "\ea09";
+}
+
+.note-icon-arrow-circle-right::before {
+    content: "\ea0a";
+}
+
+.note-icon-arrow-circle-up::before {
+    content: "\ea0b";
+}
+
+.note-icon-arrows-alt::before {
+    content: "\ea0c";
+}
+
+.note-icon-arrows-h::before {
+    content: "\ea0d";
+}
+
+.note-icon-arrows-v::before {
+    content: "\ea0e";
+}
+
+.note-icon-bold::before {
+    content: "\ea0f";
+}
+
+.note-icon-caret::before {
+    content: "\ea10";
+}
+
+.note-icon-chain-broken::before {
+    content: "\ea11";
+}
+
+.note-icon-circle::before {
+    content: "\ea12";
+}
+
+.note-icon-close::before {
+    content: "\ea13";
+}
+
+.note-icon-code::before {
+    content: "\ea14";
+}
+
+.note-icon-col-after::before {
+    content: "\ea15";
+}
+
+.note-icon-col-before::before {
+    content: "\ea16";
+}
+
+.note-icon-col-remove::before {
+    content: "\ea17";
+}
+
+.note-icon-eraser::before {
+    content: "\ea18";
+}
+
+.note-icon-float-left::before {
+    content: "\ea19";
+}
+
+.note-icon-float-none::before {
+    content: "\ea1a";
+}
+
+.note-icon-float-right::before {
+    content: "\ea1b";
+}
+
+.note-icon-font::before {
+    content: "\ea1c";
+}
+
+.note-icon-frame::before {
+    content: "\ea1d";
+}
+
+.note-icon-italic::before {
+    content: "\ea1e";
+}
+
+.note-icon-link::before {
+    content: "\ea1f";
+}
+
+.note-icon-magic::before {
+    content: "\ea20";
+}
+
+.note-icon-menu-check::before {
+    content: "\ea21";
+}
+
+.note-icon-minus::before {
+    content: "\ea22";
+}
+
+.note-icon-orderedlist::before {
+    content: "\ea23";
+}
+
+.note-icon-pencil::before {
+    content: "\ea24";
+}
+
+.note-icon-picture::before {
+    content: "\ea25";
+}
+
+.note-icon-question::before {
+    content: "\ea26";
+}
+
+.note-icon-redo::before {
+    content: "\ea27";
+}
+
+.note-icon-rollback::before {
+    content: "\ea28";
+}
+
+.note-icon-row-above::before {
+    content: "\ea29";
+}
+
+.note-icon-row-below::before {
+    content: "\ea2a";
+}
+
+.note-icon-row-remove::before {
+    content: "\ea2b";
+}
+
+.note-icon-special-character::before {
+    content: "\ea2c";
+}
+
+.note-icon-square::before {
+    content: "\ea2d";
+}
+
+.note-icon-strikethrough::before {
+    content: "\ea2e";
+}
+
+.note-icon-subscript::before {
+    content: "\ea2f";
+}
+
+.note-icon-summernote::before {
+    content: "\ea30";
+}
+
+.note-icon-superscript::before {
+    content: "\ea31";
+}
+
+.note-icon-table::before {
+    content: "\ea32";
+}
+
+.note-icon-text-height::before {
+    content: "\ea33";
+}
+
+.note-icon-trash::before {
+    content: "\ea34";
+}
+
+.note-icon-underline::before {
+    content: "\ea35";
+}
+
+.note-icon-undo::before {
+    content: "\ea36";
+}
+
+.note-icon-unorderedlist::before {
+    content: "\ea37";
+}
+
+.note-icon-video::before {
+    content: "\ea38";
+}
+
+.note-frame {
+    -ms-box-sizing: border-box;
+    box-sizing: border-box;
+    color: #000;
+    font-family: sans-serif;
+    border-radius: 4px;
+}
+
+.note-toolbar {
+    padding: 10px 5px;
+    border-bottom: 1px solid #e2e2e2;
+    color: #333;
+    background-color: #f5f5f5;
+    border-color: #ddd;
+    border-top-left-radius: 3px;
+    border-top-right-radius: 3px;
+}
+
+.note-btn-group {
+    position: relative;
+    display: inline-block;
+    margin-right: 8px;
+}
+.note-btn-group > .note-btn-group {
+    margin-right: 0;
+}
+.note-btn-group > .note-btn:first-child {
+    margin-left: 0;
+}
+.note-btn-group .note-btn + .note-btn,
+.note-btn-group .note-btn + .note-btn-group,
+.note-btn-group .note-btn-group + .note-btn,
+.note-btn-group .note-btn-group + .note-btn-group {
+    margin-left: -1px;
+}
+.note-btn-group > .note-btn:not(:first-child),
+.note-btn-group > .note-btn-group:not(:first-child) > .note-btn {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+}
+.note-btn-group > .note-btn:not(:last-child):not(.dropdown-toggle),
+.note-btn-group > .note-btn-group:not(:last-child) > .note-btn {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+}
+.note-btn-group.open > .note-dropdown {
+    display: block;
+}
+
+.note-btn {
+    display: inline-block;
+    font-weight: 400;
+    margin-bottom: 0;
+    text-align: center;
+    vertical-align: middle;
+    touch-action: manipulation;
+    cursor: pointer;
+    background-image: none;
+    border: 1px solid #dae0e5;
+    white-space: nowrap;
+    outline: 0;
+    color: #333;
+    background-color: #fff;
+    border-color: #dae0e5;
+    padding: 5px 10px;
+    font-size: 14px;
+    line-height: 1.4;
+    border-radius: 3px;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    user-select: none;
+}
+.note-btn:focus, .note-btn.focus {
+    color: #333;
+    background-color: #ebebeb;
+    border-color: #dae0e5;
+}
+.note-btn:hover {
+    color: #333;
+    background-color: #ebebeb;
+    border-color: #dae0e5;
+}
+.note-btn.disabled:focus, .note-btn.disabled.focus, .note-btn[disabled]:focus, .note-btn[disabled].focus, fieldset[disabled] .note-btn:focus, fieldset[disabled] .note-btn.focus {
+    background-color: #fff;
+    border-color: #dae0e5;
+}
+.note-btn:hover, .note-btn:focus, .note-btn.focus {
+    color: #333;
+    text-decoration: none;
+    border: 1px solid #dae0e5;
+    background-color: #ebebeb;
+    outline: 0;
+    border-radius: 1px;
+}
+.note-btn:active, .note-btn.active {
+    outline: 0;
+    background-image: none;
+    color: #333;
+    text-decoration: none;
+    border: 1px solid #dae0e5;
+    background-color: #ebebeb;
+    outline: 0;
+    border-radius: 1px;
+    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.note-btn.disabled, .note-btn[disabled], fieldset[disabled] .note-btn {
+    cursor: not-allowed;
+    -webkit-opacity: 0.65;
+    -khtml-opacity: 0.65;
+    -moz-opacity: 0.65;
+    opacity: 0.65;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=65);
+    filter: alpha(opacity=65);
+    box-shadow: none;
+}
+.note-btn > span.note-icon-caret:first-child {
+    margin-left: -1px;
+}
+.note-btn > span.note-icon-caret:nth-child(2) {
+    padding-left: 3px;
+    margin-right: -5px;
+}
+
+.note-btn-primary {
+    background: #fa6362;
+    color: #fff;
+}
+.note-btn-primary:hover, .note-btn-primary:focus, .note-btn-primary.focus {
+    color: #fff;
+    text-decoration: none;
+    border: 1px solid #dae0e5;
+    background-color: #fa6362;
+    border-radius: 1px;
+}
+
+.note-btn-block {
+    display: block;
+    width: 100%;
+}
+
+.note-btn-block + .note-btn-block {
+    margin-top: 5px;
+}
+
+input[type=submit].note-btn-block,
+input[type=reset].note-btn-block,
+input[type=button].note-btn-block {
+    width: 100%;
+}
+
+button.close {
+    padding: 0;
+    cursor: pointer;
+    background: transparent;
+    border: 0;
+    -webkit-appearance: none;
+}
+
+.close {
+    float: right;
+    font-size: 21px;
+    line-height: 1;
+    color: #000;
+    opacity: 0.2;
+}
+
+.close:hover {
+    -webkit-opacity: 1;
+    -khtml-opacity: 1;
+    -moz-opacity: 1;
+    -ms-filter: alpha(opacity=100);
+    filter: alpha(opacity=100);
+    opacity: 1;
+}
+
+.note-dropdown {
+    position: relative;
+}
+
+.note-color .dropdown-toggle {
+    width: 30px;
+    padding-left: 5px;
+}
+
+.note-dropdown-menu {
+    display: none;
+    min-width: 100px;
+    position: absolute;
+    top: 100%;
+    left: 0;
+    z-index: 1000;
+    float: left;
+    text-align: left;
+    background: #fff;
+    border: 1px solid #e2e2e2;
+    padding: 5px;
+    background-clip: padding-box;
+    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.06);
+}
+.note-dropdown-menu > *:last-child {
+    margin-right: 0;
+}
+
+.note-btn-group.open .note-dropdown-menu {
+    display: block;
+}
+
+.note-dropdown-item {
+    display: block;
+}
+.note-dropdown-item:hover {
+    background-color: #ebebeb;
+}
+
+a.note-dropdown-item,
+a.note-dropdown-item:hover {
+    margin: 5px 0;
+    color: #000;
+    text-decoration: none;
+}
+
+.note-modal {
+    position: fixed;
+    left: 0;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    z-index: 1050;
+    -webkit-opacity: 1;
+    -khtml-opacity: 1;
+    -moz-opacity: 1;
+    opacity: 1;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);
+    filter: alpha(opacity=100);
+    display: none;
+}
+.note-modal.open {
+    display: block;
+}
+
+.note-modal-content {
+    position: relative;
+    width: auto;
+    margin: 30px 20px;
+    border: 1px solid rgba(0, 0, 0, 0.2);
+    background: #fff;
+    background-clip: border-box;
+    outline: 0;
+    border-radius: 5px;
+    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+}
+
+.note-modal-header {
+    padding: 10px 20px;
+    border: 1px solid #ededef;
+}
+
+.note-modal-body {
+    position: relative;
+    padding: 20px 30px;
+}
+.note-modal-body kbd {
+    border-radius: 2px;
+    background-color: #000;
+    color: #fff;
+    padding: 3px 5px;
+    font-weight: 700;
+    -ms-box-sizing: border-box;
+    box-sizing: border-box;
+}
+
+.note-modal-footer {
+    height: 40px;
+    padding: 10px;
+    text-align: center;
+}
+
+.note-modal-footer a {
+    color: #337ab7;
+    text-decoration: none;
+}
+
+.note-modal-footer a:hover,
+.note-modal-footer a:focus {
+    color: #23527c;
+    text-decoration: underline;
+}
+
+.note-modal-footer .note-btn {
+    float: right;
+}
+
+.note-modal-title {
+    font-size: 20px;
+    color: #42515f;
+    margin: 0;
+    line-height: 1.4;
+}
+
+.note-modal-backdrop {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    top: 0;
+    z-index: 1040;
+    background: #000;
+    -webkit-opacity: 0.5;
+    -khtml-opacity: 0.5;
+    -moz-opacity: 0.5;
+    opacity: 0.5;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);
+    filter: alpha(opacity=50);
+    display: none;
+}
+.note-modal-backdrop.open {
+    display: block;
+}
+
+@media (min-width: 768px) {
+    .note-modal-content {
+        width: 600px;
+        margin: 30px auto;
+    }
+}
+@media (min-width: 992px) {
+    .note-modal-content-large {
+        width: 900px;
+    }
+}
+.note-modal .note-help-block {
+    display: block;
+    margin-top: 5px;
+    margin-bottom: 10px;
+    color: #737373;
+}
+.note-modal .note-nav {
+    display: flex;
+    flex-wrap: wrap;
+    padding-left: 0;
+    margin-bottom: 0;
+    list-style: none;
+}
+.note-modal .note-nav-link {
+    display: block;
+    padding: 0.5rem 1rem;
+    color: #007bff;
+    text-decoration: none;
+    background-color: transparent;
+    -webkit-text-decoration-skip: objects;
+}
+.note-modal .note-nav-link:focus,
+.note-modal .note-nav-link:hover {
+    color: #0056b3;
+    text-decoration: none;
+}
+.note-modal .note-nav-link.disabled {
+    color: #868e96;
+}
+.note-modal .note-nav-tabs {
+    border-bottom: 1px solid #ddd;
+}
+.note-modal .note-nav-tabs .note-nav-item {
+    margin-bottom: -1px;
+}
+.note-modal .note-nav-tabs .note-nav-link {
+    border: 1px solid transparent;
+    border-top-left-radius: 0.25rem;
+    border-top-right-radius: 0.25rem;
+}
+.note-modal .note-nav-tabs .note-nav-link:focus,
+.note-modal .note-nav-tabs .note-nav-link:hover {
+    border-color: #e9ecef #e9ecef #ddd;
+}
+.note-modal .note-nav-tabs .note-nav-link.disabled {
+    color: #868e96;
+    background-color: transparent;
+    border-color: transparent;
+}
+.note-modal .note-nav-tabs .note-nav-item.show .note-nav-link {
+    color: #495057;
+    background-color: #fff;
+    border-color: #ddd #ddd #fff;
+}
+.note-modal .note-tab-content {
+    margin: 15px auto;
+}
+.note-modal .note-tab-content > .note-tab-pane:target ~ .note-tab-pane:last-child,
+.note-modal .note-tab-content > .note-tab-pane {
+    display: none;
+}
+.note-modal .note-tab-content > :last-child,
+.note-modal .note-tab-content > .note-tab-pane:target {
+    display: block;
+}
+
+.note-form-group {
+    padding-bottom: 20px;
+}
+
+.note-form-group:last-child {
+    padding-bottom: 0;
+}
+
+.note-form-label {
+    display: block;
+    width: 100%;
+    font-size: 16px;
+    color: #42515f;
+    margin-bottom: 10px;
+    font-weight: 700;
+}
+
+.note-input {
+    width: 100%;
+    display: block;
+    border: 1px solid #ededef;
+    background: #fff;
+    outline: 0;
+    padding: 6px 4px;
+    font-size: 14px;
+    -ms-box-sizing: border-box;
+    box-sizing: border-box;
+}
+
+.note-input::-webkit-input-placeholder {
+    color: #eeeeee;
+}
+
+.note-input:-moz-placeholder { /* Firefox 18- */
+    color: #eeeeee;
+}
+
+.note-input::-moz-placeholder { /* Firefox 19+ */
+    color: #eeeeee;
+}
+
+.note-input:-ms-input-placeholder {
+    color: #eeeeee;
+}
+
+.note-tooltip {
+    position: absolute;
+    z-index: 1070;
+    display: block;
+    font-size: 13px;
+    transition: opacity 0.15s;
+    -webkit-opacity: 0;
+    -khtml-opacity: 0;
+    -moz-opacity: 0;
+    opacity: 0;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+    filter: alpha(opacity=0);
+}
+.note-tooltip.in {
+    -webkit-opacity: 0.9;
+    -khtml-opacity: 0.9;
+    -moz-opacity: 0.9;
+    opacity: 0.9;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=90);
+    filter: alpha(opacity=90);
+}
+.note-tooltip.top {
+    margin-top: -3px;
+    padding: 5px 0;
+}
+.note-tooltip.right {
+    margin-left: 3px;
+    padding: 0 5px;
+}
+.note-tooltip.bottom {
+    margin-top: 3px;
+    padding: 5px 0;
+}
+.note-tooltip.left {
+    margin-left: -3px;
+    padding: 0 5px;
+}
+
+.note-tooltip.bottom .note-tooltip-arrow {
+    top: 0;
+    left: 50%;
+    margin-left: -5px;
+    border-width: 0 5px 5px;
+    border-bottom-color: #000;
+}
+.note-tooltip.top .note-tooltip-arrow {
+    bottom: 0;
+    left: 50%;
+    margin-left: -5px;
+    border-width: 5px 5px 0;
+    border-top-color: #000;
+}
+.note-tooltip.right .note-tooltip-arrow {
+    top: 50%;
+    left: 0;
+    margin-top: -5px;
+    border-width: 5px 5px 5px 0;
+    border-right-color: #000;
+}
+.note-tooltip.left .note-tooltip-arrow {
+    top: 50%;
+    right: 0;
+    margin-top: -5px;
+    border-width: 5px 0 5px 5px;
+    border-left-color: #000;
+}
+
+.note-tooltip-arrow {
+    position: absolute;
+    width: 0;
+    height: 0;
+    border-color: transparent;
+    border-style: solid;
+}
+
+.note-tooltip-content {
+    max-width: 200px;
+    font-family: sans-serif;
+    padding: 3px 8px;
+    color: #fff;
+    text-align: center;
+    background-color: #000;
+}
+
+.note-popover {
+    position: absolute;
+    z-index: 1060;
+    display: block;
+    font-size: 13px;
+    font-family: sans-serif;
+    display: none;
+    background: #ffffff;
+    border: 1px solid rgba(0, 0, 0, 0.2);
+    border: 1px solid #ccc;
+}
+.note-popover.in {
+    display: block;
+}
+.note-popover.top {
+    margin-top: -10px;
+    padding: 5px 0;
+}
+.note-popover.right {
+    margin-left: 10px;
+    padding: 0 5px;
+}
+.note-popover.bottom {
+    margin-top: 10px;
+    padding: 5px 0;
+}
+.note-popover.left {
+    margin-left: -10px;
+    padding: 0 5px;
+}
+
+.note-popover.bottom .note-popover-arrow {
+    top: -11px;
+    left: 20px;
+    margin-left: -10px;
+    border-top-width: 0;
+    border-bottom-color: #999999;
+    border-bottom-color: rgba(0, 0, 0, 0.25);
+}
+.note-popover.bottom .note-popover-arrow::after {
+    top: 1px;
+    margin-left: -10px;
+    content: "\0020";
+    border-top-width: 0;
+    border-bottom-color: #fff;
+}
+.note-popover.top .note-popover-arrow {
+    bottom: -11px;
+    left: 20px;
+    margin-left: -10px;
+    border-bottom-width: 0;
+    border-top-color: #999999;
+    border-top-color: rgba(0, 0, 0, 0.25);
+}
+.note-popover.top .note-popover-arrow::after {
+    bottom: 1px;
+    margin-left: -10px;
+    content: "\0020";
+    border-bottom-width: 0;
+    border-top-color: #fff;
+}
+.note-popover.right .note-popover-arrow {
+    top: 50%;
+    left: -11px;
+    margin-top: -10px;
+    border-left-width: 0;
+    border-right-color: #999999;
+    border-right-color: rgba(0, 0, 0, 0.25);
+}
+.note-popover.right .note-popover-arrow::after {
+    left: 1px;
+    margin-top: -10px;
+    content: "\0020";
+    border-left-width: 0;
+    border-right-color: #fff;
+}
+.note-popover.left .note-popover-arrow {
+    top: 50%;
+    right: -11px;
+    margin-top: -10px;
+    border-right-width: 0;
+    border-left-color: #999999;
+    border-left-color: rgba(0, 0, 0, 0.25);
+}
+.note-popover.left .note-popover-arrow::after {
+    right: 1px;
+    margin-top: -10px;
+    content: "\0020";
+    border-right-width: 0;
+    border-left-color: #fff;
+}
+
+.note-popover-arrow {
+    position: absolute;
+    width: 0;
+    height: 0;
+    border: 11px solid transparent;
+}
+.note-popover-arrow::after {
+    position: absolute;
+    display: block;
+    width: 0;
+    height: 0;
+    border-color: transparent;
+    border-style: solid;
+    content: "\0020";
+    border-width: 10px;
+}
+
+.note-popover-content {
+    /*max-width: $popover-max-width;*/
+    padding: 3px 8px;
+    color: #000;
+    text-align: center;
+    background-color: #ffffff;
+    min-width: 100px;
+    min-height: 30px;
+}
+
+/* Theme Variables
+ ------------------------------------------ */
+/* Layout
+ ------------------------------------------ */
+.note-editor {
+    position: relative;
+}
+.note-editor .note-dropzone {
+    position: absolute;
+    display: none;
+    z-index: 100;
+    color: lightskyblue;
+    background-color: #fff;
+    opacity: 0.95;
+}
+.note-editor .note-dropzone .note-dropzone-message {
+    display: table-cell;
+    vertical-align: middle;
+    text-align: center;
+    font-size: 28px;
+    font-weight: 700;
+}
+.note-editor .note-dropzone.hover {
+    color: #098ddf;
+}
+.note-editor.dragover .note-dropzone {
+    display: table;
+}
+.note-editor .note-editing-area {
+    position: relative;
+}
+.note-editor .note-editing-area .note-editable {
+    outline: none;
+}
+.note-editor .note-editing-area .note-editable sup {
+    vertical-align: super;
+}
+.note-editor .note-editing-area .note-editable sub {
+    vertical-align: sub;
+}
+.note-editor .note-editing-area .note-editable img.note-float-left {
+    margin-right: 10px;
+}
+.note-editor .note-editing-area .note-editable img.note-float-right {
+    margin-left: 10px;
+}
+
+/* Frame mode layout
+ ------------------------------------------ */
+.note-editor.note-frame,
+.note-editor.note-airframe {
+    border: 1px solid rgba(0, 0, 0, 0.1960784314);
+}
+.note-editor.note-frame.codeview .note-editing-area .note-editable,
+.note-editor.note-airframe.codeview .note-editing-area .note-editable {
+    display: none;
+}
+.note-editor.note-frame.codeview .note-editing-area .note-codable,
+.note-editor.note-airframe.codeview .note-editing-area .note-codable {
+    display: block;
+}
+.note-editor.note-frame .note-editing-area,
+.note-editor.note-airframe .note-editing-area {
+    overflow: hidden;
+}
+.note-editor.note-frame .note-editing-area .note-editable,
+.note-editor.note-airframe .note-editing-area .note-editable {
+    padding: 10px;
+    overflow: auto;
+    word-wrap: break-word;
+}
+.note-editor.note-frame .note-editing-area .note-editable[contenteditable=false],
+.note-editor.note-airframe .note-editing-area .note-editable[contenteditable=false] {
+    background-color: rgba(128, 128, 128, 0.1137254902);
+}
+.note-editor.note-frame .note-editing-area .note-codable,
+.note-editor.note-airframe .note-editing-area .note-codable {
+    display: none;
+    width: 100%;
+    padding: 10px;
+    border: none;
+    box-shadow: none;
+    font-family: Menlo, Monaco, monospace, sans-serif;
+    font-size: 14px;
+    color: #ccc;
+    background-color: #222;
+    resize: none;
+    outline: none;
+    -ms-box-sizing: border-box;
+    box-sizing: border-box;
+    border-radius: 0;
+    margin-bottom: 0;
+}
+.note-editor.note-frame.fullscreen,
+.note-editor.note-airframe.fullscreen {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100% !important;
+    z-index: 1050;
+}
+.note-editor.note-frame.fullscreen .note-resizebar,
+.note-editor.note-airframe.fullscreen .note-resizebar {
+    display: none;
+}
+.note-editor.note-frame .note-status-output,
+.note-editor.note-airframe .note-status-output {
+    display: block;
+    width: 100%;
+    font-size: 14px;
+    line-height: 1.42857143;
+    height: 20px;
+    margin-bottom: 0;
+    color: #000;
+    border: 0;
+    border-top: 1px solid #e2e2e2;
+}
+.note-editor.note-frame .note-status-output:empty,
+.note-editor.note-airframe .note-status-output:empty {
+    height: 0;
+    border-top: 0 solid transparent;
+}
+.note-editor.note-frame .note-status-output .pull-right,
+.note-editor.note-airframe .note-status-output .pull-right {
+    float: right !important;
+}
+.note-editor.note-frame .note-status-output .text-muted,
+.note-editor.note-airframe .note-status-output .text-muted {
+    color: #777;
+}
+.note-editor.note-frame .note-status-output .text-primary,
+.note-editor.note-airframe .note-status-output .text-primary {
+    color: #286090;
+}
+.note-editor.note-frame .note-status-output .text-success,
+.note-editor.note-airframe .note-status-output .text-success {
+    color: #3c763d;
+}
+.note-editor.note-frame .note-status-output .text-info,
+.note-editor.note-airframe .note-status-output .text-info {
+    color: #31708f;
+}
+.note-editor.note-frame .note-status-output .text-warning,
+.note-editor.note-airframe .note-status-output .text-warning {
+    color: #8a6d3b;
+}
+.note-editor.note-frame .note-status-output .text-danger,
+.note-editor.note-airframe .note-status-output .text-danger {
+    color: #a94442;
+}
+.note-editor.note-frame .note-status-output .alert,
+.note-editor.note-airframe .note-status-output .alert {
+    margin: -7px 0 0 0;
+    padding: 7px 10px 2px 10px;
+    border-radius: 0;
+    color: #000;
+    background-color: #f5f5f5;
+}
+.note-editor.note-frame .note-status-output .alert .note-icon,
+.note-editor.note-airframe .note-status-output .alert .note-icon {
+    margin-right: 5px;
+}
+.note-editor.note-frame .note-status-output .alert-success,
+.note-editor.note-airframe .note-status-output .alert-success {
+    color: #3c763d !important;
+    background-color: #dff0d8 !important;
+}
+.note-editor.note-frame .note-status-output .alert-info,
+.note-editor.note-airframe .note-status-output .alert-info {
+    color: #31708f !important;
+    background-color: #d9edf7 !important;
+}
+.note-editor.note-frame .note-status-output .alert-warning,
+.note-editor.note-airframe .note-status-output .alert-warning {
+    color: #8a6d3b !important;
+    background-color: #fcf8e3 !important;
+}
+.note-editor.note-frame .note-status-output .alert-danger,
+.note-editor.note-airframe .note-status-output .alert-danger {
+    color: #a94442 !important;
+    background-color: #f2dede !important;
+}
+.note-editor.note-frame .note-statusbar,
+.note-editor.note-airframe .note-statusbar {
+    background-color: rgba(128, 128, 128, 0.1137254902);
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);
+}
+.note-editor.note-frame .note-statusbar .note-resizebar,
+.note-editor.note-airframe .note-statusbar .note-resizebar {
+    padding-top: 1px;
+    height: 9px;
+    width: 100%;
+    cursor: ns-resize;
+}
+.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,
+.note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar {
+    width: 20px;
+    margin: 1px auto;
+    border-top: 1px solid rgba(0, 0, 0, 0.1960784314);
+}
+.note-editor.note-frame .note-statusbar.locked .note-resizebar,
+.note-editor.note-airframe .note-statusbar.locked .note-resizebar {
+    cursor: default;
+}
+.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar,
+.note-editor.note-airframe .note-statusbar.locked .note-resizebar .note-icon-bar {
+    display: none;
+}
+.note-editor.note-frame .note-placeholder,
+.note-editor.note-airframe .note-placeholder {
+    padding: 10px;
+}
+
+.note-editor.note-airframe {
+    border: 0;
+}
+.note-editor.note-airframe .note-editing-area .note-editable {
+    padding: 0;
+}
+
+/* Popover
+ ------------------------------------------ */
+.note-popover.popover {
+    display: none;
+    max-width: none;
+}
+.note-popover.popover .popover-content a {
+    display: inline-block;
+    max-width: 200px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    vertical-align: middle;
+}
+.note-popover.popover .arrow {
+    left: 20px !important;
+}
+
+/* Popover and Toolbar (Button container)
+ ------------------------------------------ */
+.note-toolbar {
+    position: relative;
+}
+
+.note-popover .popover-content, .note-editor .note-toolbar {
+    margin: 0;
+    padding: 0 0 5px 5px;
+}
+.note-popover .popover-content > .note-btn-group, .note-editor .note-toolbar > .note-btn-group {
+    margin-top: 5px;
+    margin-left: 0;
+    margin-right: 5px;
+}
+.note-popover .popover-content .note-btn-group .note-table, .note-editor .note-toolbar .note-btn-group .note-table {
+    min-width: 0;
+    padding: 5px;
+}
+.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker {
+    font-size: 18px;
+}
+.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher {
+    position: absolute !important;
+    z-index: 3;
+    width: 10em;
+    height: 10em;
+    cursor: pointer;
+}
+.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted {
+    position: relative !important;
+    z-index: 1;
+    width: 5em;
+    height: 5em;
+    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC") repeat;
+}
+.note-popover .popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted, .note-editor .note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted {
+    position: absolute !important;
+    z-index: 2;
+    width: 1em;
+    height: 1em;
+    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC") repeat;
+}
+.note-popover .popover-content .note-style .dropdown-style blockquote, .note-popover .popover-content .note-style .dropdown-style pre, .note-editor .note-toolbar .note-style .dropdown-style blockquote, .note-editor .note-toolbar .note-style .dropdown-style pre {
+    margin: 0;
+    padding: 5px 10px;
+}
+.note-popover .popover-content .note-style .dropdown-style h1, .note-popover .popover-content .note-style .dropdown-style h2, .note-popover .popover-content .note-style .dropdown-style h3, .note-popover .popover-content .note-style .dropdown-style h4, .note-popover .popover-content .note-style .dropdown-style h5, .note-popover .popover-content .note-style .dropdown-style h6, .note-popover .popover-content .note-style .dropdown-style p, .note-editor .note-toolbar .note-style .dropdown-style h1, .note-editor .note-toolbar .note-style .dropdown-style h2, .note-editor .note-toolbar .note-style .dropdown-style h3, .note-editor .note-toolbar .note-style .dropdown-style h4, .note-editor .note-toolbar .note-style .dropdown-style h5, .note-editor .note-toolbar .note-style .dropdown-style h6, .note-editor .note-toolbar .note-style .dropdown-style p {
+    margin: 0;
+    padding: 0;
+}
+.note-popover .popover-content .note-color-all .note-dropdown-menu, .note-editor .note-toolbar .note-color-all .note-dropdown-menu {
+    min-width: 337px;
+}
+.note-popover .popover-content .note-color .dropdown-toggle, .note-editor .note-toolbar .note-color .dropdown-toggle {
+    width: 20px;
+    padding-left: 5px;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette {
+    display: inline-block;
+    margin: 0;
+    width: 160px;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette:first-child, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette:first-child {
+    margin: 0 5px;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title {
+    font-size: 12px;
+    margin: 2px 7px;
+    text-align: center;
+    border-bottom: 1px solid #eee;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset,
+.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select {
+    font-size: 11px;
+    margin: 3px;
+    padding: 0 3px;
+    cursor: pointer;
+    width: 100%;
+    border-radius: 5px;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select:hover, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,
+.note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select:hover {
+    background: #eee;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-row, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row {
+    height: 20px;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-color-select-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-select-btn {
+    display: none;
+}
+.note-popover .popover-content .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn, .note-editor .note-toolbar .note-color .note-dropdown-menu .note-palette .note-holder-custom .note-color-btn {
+    border: 1px solid #eee;
+}
+.note-popover .popover-content .note-para .note-dropdown-menu, .note-editor .note-toolbar .note-para .note-dropdown-menu {
+    min-width: 228px;
+    padding: 5px;
+}
+.note-popover .popover-content .note-para .note-dropdown-menu > div + div, .note-editor .note-toolbar .note-para .note-dropdown-menu > div + div {
+    margin-left: 5px;
+}
+.note-popover .popover-content .note-dropdown-menu, .note-editor .note-toolbar .note-dropdown-menu {
+    min-width: 160px;
+}
+.note-popover .popover-content .note-dropdown-menu.right, .note-editor .note-toolbar .note-dropdown-menu.right {
+    right: 0;
+    left: auto;
+}
+.note-popover .popover-content .note-dropdown-menu.right::before, .note-editor .note-toolbar .note-dropdown-menu.right::before {
+    right: 9px;
+    left: auto !important;
+}
+.note-popover .popover-content .note-dropdown-menu.right::after, .note-editor .note-toolbar .note-dropdown-menu.right::after {
+    right: 10px;
+    left: auto !important;
+}
+.note-popover .popover-content .note-dropdown-menu.note-check a i, .note-editor .note-toolbar .note-dropdown-menu.note-check a i {
+    color: deepskyblue;
+    visibility: hidden;
+}
+.note-popover .popover-content .note-dropdown-menu.note-check a.checked i, .note-editor .note-toolbar .note-dropdown-menu.note-check a.checked i {
+    visibility: visible;
+}
+.note-popover .popover-content .note-fontsize-10, .note-editor .note-toolbar .note-fontsize-10 {
+    font-size: 10px;
+}
+.note-popover .popover-content .note-color-palette, .note-editor .note-toolbar .note-color-palette {
+    line-height: 1;
+}
+.note-popover .popover-content .note-color-palette div .note-color-btn, .note-editor .note-toolbar .note-color-palette div .note-color-btn {
+    width: 20px;
+    height: 20px;
+    padding: 0;
+    margin: 0;
+    border: 0;
+    border-radius: 0;
+}
+.note-popover .popover-content .note-color-palette div .note-color-btn:hover, .note-editor .note-toolbar .note-color-palette div .note-color-btn:hover {
+    transform: scale(1.2);
+    transition: all 0.2s;
+}
+
+/* Dialog
+ ------------------------------------------ */
+.note-modal .modal-dialog {
+    outline: 0;
+    border-radius: 5px;
+    box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+}
+.note-modal .form-group {
+    margin-left: 0;
+    margin-right: 0;
+}
+.note-modal .note-modal-form {
+    margin: 0;
+}
+.note-modal .note-image-dialog .note-dropzone {
+    min-height: 100px;
+    font-size: 30px;
+    line-height: 4;
+    color: lightgray;
+    text-align: center;
+    border: 4px dashed lightgray;
+    margin-bottom: 10px;
+}
+@-moz-document url-prefix() {
+    .note-modal .note-image-input {
+        height: auto;
+    }
+}
+
+/* Placeholder
+ ------------------------------------------ */
+.note-placeholder {
+    position: absolute;
+    display: none;
+    color: gray;
+}
+
+/* Handle
+ ------------------------------------------ */
+.note-handle .note-control-selection {
+    position: absolute;
+    display: none;
+    border: 1px solid #000;
+}
+.note-handle .note-control-selection > div {
+    position: absolute;
+}
+.note-handle .note-control-selection .note-control-selection-bg {
+    width: 100%;
+    height: 100%;
+    background-color: #000;
+    -webkit-opacity: 0.3;
+    -khtml-opacity: 0.3;
+    -moz-opacity: 0.3;
+    opacity: 0.3;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=30);
+    filter: alpha(opacity=30);
+}
+.note-handle .note-control-selection .note-control-handle, .note-handle .note-control-selection .note-control-sizing, .note-handle .note-control-selection .note-control-holder {
+    width: 7px;
+    height: 7px;
+    border: 1px solid #000;
+}
+.note-handle .note-control-selection .note-control-sizing {
+    background-color: #000;
+}
+.note-handle .note-control-selection .note-control-nw {
+    top: -5px;
+    left: -5px;
+    border-right: none;
+    border-bottom: none;
+}
+.note-handle .note-control-selection .note-control-ne {
+    top: -5px;
+    right: -5px;
+    border-bottom: none;
+    border-left: none;
+}
+.note-handle .note-control-selection .note-control-sw {
+    bottom: -5px;
+    left: -5px;
+    border-top: none;
+    border-right: none;
+}
+.note-handle .note-control-selection .note-control-se {
+    right: -5px;
+    bottom: -5px;
+    cursor: se-resize;
+}
+.note-handle .note-control-selection .note-control-se.note-control-holder {
+    cursor: default;
+    border-top: none;
+    border-left: none;
+}
+.note-handle .note-control-selection .note-control-selection-info {
+    right: 0;
+    bottom: 0;
+    padding: 5px;
+    margin: 5px;
+    color: #fff;
+    background-color: #000;
+    font-size: 12px;
+    border-radius: 5px;
+    -webkit-opacity: 0.7;
+    -khtml-opacity: 0.7;
+    -moz-opacity: 0.7;
+    opacity: 0.7;
+    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
+    filter: alpha(opacity=70);
+}
+
+.note-hint-popover {
+    min-width: 100px;
+    padding: 2px;
+}
+.note-hint-popover .popover-content {
+    padding: 3px;
+    max-height: 150px;
+    overflow: auto;
+}
+.note-hint-popover .popover-content .note-hint-group .note-hint-item {
+    display: block !important;
+    padding: 3px;
+}
+.note-hint-popover .popover-content .note-hint-group .note-hint-item.active, .note-hint-popover .popover-content .note-hint-group .note-hint-item:hover {
+    display: block;
+    clear: both;
+    font-weight: 400;
+    line-height: 1.4;
+    color: white;
+    white-space: nowrap;
+    text-decoration: none;
+    background-color: #428bca;
+    outline: 0;
+    cursor: pointer;
+}
+
+/* Handle
+ ------------------------------------------ */
+html .note-fullscreen-body, body .note-fullscreen-body {
+    overflow: hidden !important;
+}
+
+.note-editable ul li, .note-editable ol li {
+    list-style-position: inside;
+}
+
+.note-editor .note-editing-area .note-editable table {
+    width: 100%;
+    border-collapse: collapse;
+}
+.note-editor .note-editing-area .note-editable table td, .note-editor .note-editing-area .note-editable table th {
+    border: 1px solid #ececec;
+    padding: 5px 3px;
+}
+.note-editor .note-editing-area .note-editable a {
+    background-color: inherit;
+    text-decoration: inherit;
+    font-family: inherit;
+    font-weight: inherit;
+    color: #337ab7;
+}
+.note-editor .note-editing-area .note-editable a:hover,
+.note-editor .note-editing-area .note-editable a:focus {
+    color: #23527c;
+    text-decoration: underline;
+    outline: 0;
+}
+.note-editor .note-editing-area .note-editable figure {
+    margin: 0;
+}
+
+/* Dialog
+ ------------------------------------------*/
+.note-modal .note-modal-body label {
+    margin-bottom: 2px;
+    padding: 2px 5px;
+    display: inline-block;
+}
+.note-modal .note-modal-body .help-list-item:hover {
+    background-color: #e0e0e0;
+}
+@-moz-document url-prefix() {
+    .note-modal .note-image-input {
+        height: auto;
+    }
+}
+
+.help-list-item label {
+    margin-bottom: 5px;
+    display: inline-block;
+}
+
+/*# sourceMappingURL=summernote-lite.css.map*/
\ No newline at end of file
diff --git a/erp24/web/css/summernote-lite.css.map b/erp24/web/css/summernote-lite.css.map
new file mode 100644 (file)
index 0000000..3b8bc91
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"file":"summernote-lite.css","mappings":";;;;;;;;;;;AAMA;IACE;IACA;IACA;IACA;IACA;ACLF;ADSA;;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;ACPF;;ADYA;IACE;IACA;ACTF;;ADYA;IACE;IACA;IACA;ACTF;;ADYA;IACE;ACTF;;ADYA;IACE;ACTF;;ADaE;IACE;ACVJ;ADYE;IACE;ACVJ;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;ADgCA;IACE;AC7BF;;AC9QA;IC8GE,0BD7GoB;ICgHpB,sBDhHoB;IACpB;IACA,uBEKY;IFJZ;ADoRF;;AIxRA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;AJ2RF;;AKlSA;IACE;IACA;IACA;ALqSF;AKnSE;IACE;ALqSJ;AKlSE;IACE;ALoSJ;AKjSE;;;;IAIE;ALmSJ;AKhSE;;IAEI;IACA;ALkSN;AK/RE;;IAEE;IACA;ALiSJ;AK7RI;IACE;AL+RN;;AMjUA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;ICLA,WJqBmB;IIpBnB,sBJqBe;IIpBf,qBJqBmB;IIMnB;IACA,eJ3BU;II4BV,gBJxBY;IIyBZ,kBJnBmB;IDiGnB,yBItGqB;IJuGrB,sBIvGqB;IJyGrB,iBIzGqB;AN4UvB;AOhVE;IAEE,WJeiB;IIdjB,yBJiBmB;IIhBnB,qBJeiB;AHkUrB;AO/UE;IACE,WJUiB;IITjB,yBJYmB;IIXnB,qBJUiB;AHuUrB;AO3UI;IAEE,sBJCW;IIAX,qBJCe;AH2UrB;AMxVE;IAGE,WHQiB;IGPjB;IACA;IACA,yBHQmB;IGPnB;IJyBF,kBIxBmB;AN0VrB;AMvVE;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;ANwVJ;AMrVE;IAGE,mBHHc;IDyBhB,qBIrBmB;IJsBnB,oBItBmB;IJuBnB,kBIvBmB;IJwBnB,aIxBmB;IJ0BnB;IACA;IAmCA,gBI7DsB;AN4VxB;AMzVE;IACE;AN2VJ;AMxVE;IACE;IACA;AN0VJ;;AMtVA;IACE;IACA;ANyVF;AMvVE;IAGE;IACA;IACA;IACA;IJrBF,kBIsBmB;ANyVrB;;AMpVA;IACE;IACA;ANuVF;;AMpVA;IACE;ANuVF;;AMhVE;;;IACE;ANqVJ;;AMjVA;IACE;IACA;IACA;IACA;IACA;ANoVF;;AMjVA;IACE;IACA;IACA;IACA;IACA;ANoVF;;AMjVA;IACE;IACC;IACE;IACE;IACI;IACD;ANoVV;;AQvcA;IACE;AR0cF;;AQtcE;IACE;IACA;ARycJ;;AQtcA;IACE;IACA;IACA;IACA;IACA;IACA,aL2ByB;IK1BzB;IACA;IACA,gBL8BkB;IK7BlB;IACA;IACA;INqFA,yCMpFoB;AR2ctB;AQzcE;IACE;AR2cJ;;AQvcA;IACE;AR0cF;;AQvcA;IACE;AR0cF;AQxcE;IACE,yBLRmB;AHkdvB;;AQtcA;;IAEE;IACA;IACA;ARycF;;ASvfA;IACE;IACA;IACA;IACA;IACA;IACA,aNyCc;IDmBd,kBO3DiB;IP4DjB,iBO5DiB;IP6DjB,eO7DiB;IP8DjB,UO9DiB;IPgEjB;IACA;IOhEA;AT+fF;AS7fE;IACE;AT+fJ;;AS3fA;IACE;IACA;IACA;IACA;IACA,gBNuDiB;IMtDjB;IACA;IACA;IPoFA,wCOnFoB;ATggBtB;;AS7fA;IACE;IACA;ATggBF;;AS7fA;IACE;IACA;ATggBF;AS7fE;IACE;IACA;IACA;IACA;IACA;IPoEF,0BADyB;IAIzB,sBAJyB;AFgc3B;;AS9fA;IACE;IACA;IACA;ATigBF;;AS7fA;IACE;IACA;ATggBF;;AS7fA;;IAEE;IACA;ATggBF;;AS7fA;IACE;ATggBF;;AS7fA;IACE;IACA;IACA;IACA;ATggBF;;AS7fA;IACE;IACA;IACA;IACA;IACA;IACA,aNpCyB;IMqCzB,gBNLkB;IDZlB,oBOkBiB;IPjBjB,mBOiBiB;IPhBjB,iBOgBiB;IPfjB,YOeiB;IPbjB;IACA;IOaA;ATqgBF;ASngBE;IACE;ATqgBJ;;AS/fA;IAEE;QACE;QACA;ITigBA;AACJ;AS9fA;IACE;QACE;ITggBA;AACJ;AS3fE;IACE;IACA;IACA;IACA;AT6fJ;AS1fE;IAEE;IAEI;IACJ;IACA;IACA;AT4fJ;ASzfE;IACE;IACA;IACA;IACA;IACA;IACA;AT2fJ;ASxfE;;IAEE;IACA;AT0fJ;ASvfE;IACE;ATyfJ;AStfE;IACE;ATwfJ;ASrfE;IACE;ATufJ;ASpfE;IACE;IACA;IACA;ATsfJ;ASnfE;;IAEE;ATqfJ;ASlfE;IACE;IACA;IACA;ATofJ;ASjfE;IACE;IACA;IACA;ATmfJ;AShfE;IACE;ATkfJ;AS/eE;;IAEE;ATifJ;AS/eE;;IAEE;ATifJ;;AU5qBA;IACE;AV+qBF;;AU5qBA;IACE;AV+qBF;;AU5qBA;IACE;IACA;IACA;IACA;IACA;IACA;AV+qBF;;AU5qBA;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IRsFA,0BADyB;IAIzB,sBAJyB;AF8lB3B;;AU9qBA;IACE,cPxBY;AHysBd;;AU9qBA;IACE,cP5BY;AH6sBd;;AU9qBA;IACE,cPhCY;AHitBd;;AU9qBA;IACE,cPpCY;AHqtBd;;AW3tBA;IACE;IACA,aR2Cc;IQ1Cd;IAGA;IAEA;IT0DA,kBSzDiB;IT0DjB,iBS1DiB;IT2DjB,eS3DiB;IT4DjB,US5DiB;IT8DjB;IACA;AFiqBF;AW9tBE;ITuDA,oBCXiB;IDYjB,mBCZiB;IDajB,iBCbiB;IDcjB,YCdiB;IDgBjB;IACA;AFyqBF;AWruBE;IAAW;IAAmB;AXyuBhC;AWxuBE;IAAW;IAAmB;AX4uBhC;AW3uBE;IAAW;IAAmB;AX+uBhC;AW9uBE;IAAW;IAAmB;AXkvBhC;;AW9uBE;IACE;IACA;IACA;IACA;IACA,yBR8Be;AHmtBnB;AW9uBE;IACE;IACA;IACA;IACA;IACA,sBRsBe;AH0tBnB;AW7uBE;IACE;IACA;IACA;IACA;IACA,wBRce;AHiuBnB;AW7uBE;IACE;IACA;IACA;IACA;IACA,uBROe;AHwuBnB;;AW1uBA;IACE;IACA;IACA;IACA;IACA;AX6uBF;;AW1uBA;IACE,gBRTiB;IQUjB,uBRtDY;IQuDZ;IACA,WRXiB;IQYjB;IACA,sBRZiB;AHyvBnB;;AY/yBA;IACE;IACA,aT0Cc;ISzCd;IAGA;IACA,uBTCY;ISCZ;IACA,mBTiDc;IShDd;IACA;AZ+yBF;AY7yBE;IAAW;AZgzBb;AY/yBE;IAAW;IAAoB;AZmzBjC;AYlzBE;IAAW;IAAoB;AZszBjC;AYrzBE;IAAW;IAAoB;AZyzBjC;AYxzBE;IAAW;IAAoB;AZ4zBjC;;AYxzBE;IACE;IACA;IACA;IACA;IACA,4BT0CkC;ISzClC,wCTwCuB;AHmxB3B;AYzzBI;IACE;IACA;IACA;IACA;IACA;AZ2zBN;AYvzBE;IACE;IACA;IACA;IACA;IACA,yBTyBkC;ISxBlC,qCTuBuB;AHkyB3B;AYvzBI;IACE;IACA;IACA;IACA;IACA;AZyzBN;AYrzBE;IACE;IACA;IACA;IACA;IACA,2BTQkC;ISPlC,uCTMuB;AHizB3B;AYrzBI;IACE;IACA;IACA;IACA;IACA;AZuzBN;AYnzBE;IACE;IACA;IACA;IACA;IACA,0BTTkC;ISUlC,sCTXuB;AHg0B3B;AYnzBI;IACE;IACA;IACA;IACA;IACA;AZqzBN;;AY/yBA;IACE;IACA;IACA;IACA;AZkzBF;AYhzBE;IACE;IACA;IACA;IACA;IACA;IACA;IAGA;IACA;AZgzBJ;;AY3yBA;IACE;IACA;IACA,WTxDc;ISyDd;IACA,yBT3Dc;IS4Dd;IACA;AZ8yBF;;Aap6BA;6CAAA;AAQA;6CAAA;AAEA;IACE;Abi6BF;Aa55BE;IACE;IACA;IACA;IACA,mBANe;IAOf;IACA;Ab85BJ;Aa55BI;IACE;IACA;IACA;IACA;IACA;Ab85BN;Aa35BI;IACE,cAlBoB;Ab+6B1B;Aaz5BE;IACE;Ab25BJ;Aax5BE;IACE;Ab05BJ;Aax5BI;IACE;Ab05BN;Aax5BM;IACE;Ab05BR;Aav5BM;IACE;Aby5BR;Aat5BM;IACE,kBAlDW;Ab08BnB;Aar5BM;IACE,iBAvDU;Ab88BlB;;Aaj5BA;6CAAA;AAEA;;IAEE;Abo5BF;Aa/4BM;;IACE;Abk5BR;Aah5BM;;IACE;Abm5BR;Aa94BE;;IACE;Abi5BJ;Aa94BI;;IACE;IACA;IACA;Abi5BN;Aa/4BM;;IACE,mDA3FW;Ab6+BnB;Aa74BI;;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IXFJ,0BWKwB;IXFxB,sBWEwB;IXnExB,gBWoEqB;IACjB;Abm5BN;Aa94BE;;IACE;IACA;IACA;IACA;IACA;Abi5BJ;Aah5BI;;IACE;Abm5BN;Aa94BE;;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;Abi5BJ;Aa94BE;;IACE;IACA;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;IACA;IACA;IACA;IACA;Abi5BJ;Aa94BE;;IACE;Abi5BJ;Aa94BE;;IACE;IACA;Abi5BJ;Aa94BE;;IACE;IACA;Abi5BJ;Aa94BE;;IACE;IACA;Abi5BJ;Aa94BE;;IACE;IACA;Abi5BJ;Aa74BE;;IACE,mDAhNe;IAiNf;IACA;IACA;Abg5BJ;Aa/4BI;;IACE;IACA;IACA;IACA;Abk5BN;Aaj5BM;;IACE;IACA;IACA;Abo5BR;Aa/4BM;;IACE;Abk5BR;Aaj5BQ;;IACE;Abo5BV;Aa/4BE;;IACE;Abk5BJ;;Aa94BA;IACE;Abi5BF;Aa94BI;IACE;Abg5BN;;Aa14BA;6CAAA;AAEA;IACE;IACA;Ab64BF;Aa14BI;IACE;IACA;IACA;IACA;IACA;IACA;Ab44BN;Aaz4BE;IACE;Ab24BJ;;Aav4BA;6CAAA;AAEA;IACE;Ab04BF;;Aav4BA;IACE;IACA;Ab04BF;Aax4BE;IACE;IACA;IACA;Ab04BJ;Aat4BI;IACE;IACA;Abw4BN;Aav4BM;IACE;Aby4BR;Aax4BQ;IACE;IACA;IACA;IACA;IACA;Ab04BV;Aax4BQ;IACE;IACA;IACA;IACA;IACA;Ab04BV;Aax4BQ;IACE;IACA;IACA;IACA;IACA;Ab04BV;Aal4BM;IACE;IACA;Abo4BR;Aal4BM;IACE;IACA;Abo4BR;Aa93BI;IACE;Abg4BN;Aa33BI;IACE;IACA;Ab63BN;Aa13BM;IACE;IACA;IACA;Ab43BR;Aa33BQ;IACE;Ab63BV;Aa13BQ;IACE;IACA;IACA;IACA;Ab43BV;Aaz3BQ;;;IAEE;IACA;IACA;IACA;IACA;IXhUR,kBWiUyB;Ab83B3B;Aa53BU;;;IACE;Abg4BZ;Aa53BQ;IACE;Ab83BV;Aa33BQ;IACE;Ab63BV;Aaz3BU;IACE;Ab23BZ;Aan3BI;IACE;IACA;Abq3BN;Aap3BM;IACE;Abs3BR;Aah3BE;IACE;Abk3BJ;Aa92BI;IACE;IACA;Abg3BN;Aa/2BM;IACE;IACA;Abi3BR;Aa/2BM;IACE;IACA;Abi3BR;Aa52BM;IACE;IACA;Ab82BR;Aa52BM;IACE;Ab82BR;Aaz2BE;IACE;Ab22BJ;Aav2BE;IACE;Aby2BJ;Aav2BM;IACE;IACA;IACA;IACA;IACA;IACA;Aby2BR;Aav2BM;IACE;IACA;Aby2BR;;Aan2BA;6CAAA;AAGE;IACE;IACA;IXnWF,wCWoWsB;Abu2BxB;Aar2BE;IACE;IACA;Abu2BJ;Aar2BE;IACE;Abu2BJ;Aap2BI;IACE;IACA;IACA;IACA;IACA;IACA;IACA;Abs2BN;Aaj2BE;IACE;QACE;Ibm2BF;AACJ;;Aa/1BA;6CAAA;AAEA;IACE;IACA;IACA;Abk2BF;;Aa/1BA;6CAAA;AAIE;IACE;IACA;IACA;Abg2BJ;Aa/1BI;IACE;Abi2BN;Aa91BI;IACE;IACA;IACA;IXjcJ,oBWkcqB;IXjcrB,mBWicqB;IXhcrB,iBWgcqB;IX/brB,YW+bqB;IX7brB;IACA;AFiyCF;Aal2BI;IACE;IACA;IACA;Abo2BN;Aa71BI;IAEE;Ab81BN;Aa31BI;IACE;IACA;IACA;IACA;Ab61BN;Aa11BI;IACE;IACA;IACA;IACA;Ab41BN;Aaz1BI;IACE;IACA;IACA;IACA;Ab21BN;Aax1BI;IACE;IACA;IACA;Ab01BN;Aav1BI;IACE;IACA;IACA;Aby1BN;Aat1BI;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IX9gBJ,kBW+gBqB;IX7frB,oBW8fqB;IX7frB,mBW6fqB;IX5frB,iBW4fqB;IX3frB,YW2fqB;IXzfrB;IACA;AFu1CF;;Aa11BA;IACE;IACA;Ab61BF;Aa31BE;IACE;IACA;IACA;Ab61BJ;Aa11BM;IACE;IACA;Ab41BR;Aa11BQ;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;Ab41BV;;Aar1BA;6CAAA;AAGE;IACE;Abu1BJ;;Aan1BA;IACE;Abs1BF;;AA96CM;IACE;IACA;AAi7CR;AA/6CS;IACC;IACA;AAi7CV;AA76CM;IACE;IACA;IACA;IACA;IACA;AA+6CR;AA56CM;;IAEE;IACA;IACA;AA86CR;AA36CM;IACE;AA66CR;;AAv6CA;4CAAA;AAII;IACE;IACA;IACA;AAw6CN;AAr6CK;IACC;AAu6CN;AAl6CE;IACE;QACE;IAo6CF;AACJ;;AA95CE;IACE;IACA;AAi6CJ","sources":["webpack:///./src/styles/summernote/font.scss","webpack:///./src/styles/lite/summernote-lite.scss","webpack:///./src/styles/lite/scss/common.scss","webpack:///./src/styles/summernote/elements.scss","webpack:///./src/styles/lite/scss/variables.scss","webpack:///./src/styles/lite/scss/toolbar.scss","webpack:///./src/styles/lite/scss/btn-group.scss","webpack:///./src/styles/lite/scss/buttons.scss","webpack:///./src/styles/lite/scss/mixins/buttons.scss","webpack:///./src/styles/lite/scss/dropdown.scss","webpack:///./src/styles/lite/scss/modal.scss","webpack:///./src/styles/lite/scss/form.scss","webpack:///./src/styles/lite/scss/tooltip.scss","webpack:///./src/styles/lite/scss/popover.scss","webpack:///./src/styles/summernote/common.scss"],"sourcesContent":["// Variables\n\n$sni-css-prefix: note-icon !default;\n\n// Path\n\n@font-face {\n  font-family: \"summernote\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: auto;\n  src: url(\"./font/summernote.eot?#iefix\") format(\"embedded-opentype\"), url(\"./font/summernote.woff2\") format(\"woff2\"), url(\"./font/summernote.woff\") format(\"woff\"), url(\"./font/summernote.ttf\") format(\"truetype\");}\n\n// Core\n\n[class^=\"#{$sni-css-prefix}\"]:before,\n[class*=\" #{$sni-css-prefix}\"]:before {\n  display: inline-block;\n  font-family: \"summernote\";\n  font-style: normal;\n  font-size: inherit;\n  text-decoration: inherit;\n  text-rendering: auto;\n  text-transform: none;\n  vertical-align: middle;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  speak: none;\n}\n\n// Extras\n\n.#{$sni-css-prefix}-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.#{$sni-css-prefix}-border {\n  border: solid 0.08em #eee;\n  border-radius: 0.1em;\n  padding: 0.2em 0.25em 0.15em;\n}\n\n.#{$sni-css-prefix}-pull-left {\n  float: left;\n}\n\n.#{$sni-css-prefix}-pull-right {\n  float: right;\n}\n\n.#{$sni-css-prefix} {\n  &.#{$sni-css-prefix}-pull-left {\n    margin-right: 0.3em;\n  }\n  &.#{$sni-css-prefix}-pull-right {\n    margin-left: 0.3em;\n  }\n}\n\n// Functions\n\n@function char($character-code) {\n  @if function-exists(\"selector-append\") {\n    @return unquote(\"\\\"\\\\#{$character-code}\\\"\");\n  }\n\n  @if \"\\\\#{'x'}\" == \"\\\\x\" {\n    @return str-slice(\"\\x\", 1, 1) + $character-code;\n  }\n  @else {\n    @return #{\"\\\"\\\\\"}#{$character-code + \"\\\"\"};\n  }\n}\n\n// Icons\n\n\n.note-icon-align::before {\n  content: \"\\ea01\";\n}\n\n.note-icon-align-center::before {\n  content: \"\\ea02\";\n}\n\n.note-icon-align-indent::before {\n  content: \"\\ea03\";\n}\n\n.note-icon-align-justify::before {\n  content: \"\\ea04\";\n}\n\n.note-icon-align-left::before {\n  content: \"\\ea05\";\n}\n\n.note-icon-align-outdent::before {\n  content: \"\\ea06\";\n}\n\n.note-icon-align-right::before {\n  content: \"\\ea07\";\n}\n\n.note-icon-arrow-circle-down::before {\n  content: \"\\ea08\";\n}\n\n.note-icon-arrow-circle-left::before {\n  content: \"\\ea09\";\n}\n\n.note-icon-arrow-circle-right::before {\n  content: \"\\ea0a\";\n}\n\n.note-icon-arrow-circle-up::before {\n  content: \"\\ea0b\";\n}\n\n.note-icon-arrows-alt::before {\n  content: \"\\ea0c\";\n}\n\n.note-icon-arrows-h::before {\n  content: \"\\ea0d\";\n}\n\n.note-icon-arrows-v::before {\n  content: \"\\ea0e\";\n}\n\n.note-icon-bold::before {\n  content: \"\\ea0f\";\n}\n\n.note-icon-caret::before {\n  content: \"\\ea10\";\n}\n\n.note-icon-chain-broken::before {\n  content: \"\\ea11\";\n}\n\n.note-icon-circle::before {\n  content: \"\\ea12\";\n}\n\n.note-icon-close::before {\n  content: \"\\ea13\";\n}\n\n.note-icon-code::before {\n  content: \"\\ea14\";\n}\n\n.note-icon-col-after::before {\n  content: \"\\ea15\";\n}\n\n.note-icon-col-before::before {\n  content: \"\\ea16\";\n}\n\n.note-icon-col-remove::before {\n  content: \"\\ea17\";\n}\n\n.note-icon-eraser::before {\n  content: \"\\ea18\";\n}\n\n.note-icon-float-left::before {\n  content: \"\\ea19\";\n}\n\n.note-icon-float-none::before {\n  content: \"\\ea1a\";\n}\n\n.note-icon-float-right::before {\n  content: \"\\ea1b\";\n}\n\n.note-icon-font::before {\n  content: \"\\ea1c\";\n}\n\n.note-icon-frame::before {\n  content: \"\\ea1d\";\n}\n\n.note-icon-italic::before {\n  content: \"\\ea1e\";\n}\n\n.note-icon-link::before {\n  content: \"\\ea1f\";\n}\n\n.note-icon-magic::before {\n  content: \"\\ea20\";\n}\n\n.note-icon-menu-check::before {\n  content: \"\\ea21\";\n}\n\n.note-icon-minus::before {\n  content: \"\\ea22\";\n}\n\n.note-icon-orderedlist::before {\n  content: \"\\ea23\";\n}\n\n.note-icon-pencil::before {\n  content: \"\\ea24\";\n}\n\n.note-icon-picture::before {\n  content: \"\\ea25\";\n}\n\n.note-icon-question::before {\n  content: \"\\ea26\";\n}\n\n.note-icon-redo::before {\n  content: \"\\ea27\";\n}\n\n.note-icon-rollback::before {\n  content: \"\\ea28\";\n}\n\n.note-icon-row-above::before {\n  content: \"\\ea29\";\n}\n\n.note-icon-row-below::before {\n  content: \"\\ea2a\";\n}\n\n.note-icon-row-remove::before {\n  content: \"\\ea2b\";\n}\n\n.note-icon-special-character::before {\n  content: \"\\ea2c\";\n}\n\n.note-icon-square::before {\n  content: \"\\ea2d\";\n}\n\n.note-icon-strikethrough::before {\n  content: \"\\ea2e\";\n}\n\n.note-icon-subscript::before {\n  content: \"\\ea2f\";\n}\n\n.note-icon-summernote::before {\n  content: \"\\ea30\";\n}\n\n.note-icon-superscript::before {\n  content: \"\\ea31\";\n}\n\n.note-icon-table::before {\n  content: \"\\ea32\";\n}\n\n.note-icon-text-height::before {\n  content: \"\\ea33\";\n}\n\n.note-icon-trash::before {\n  content: \"\\ea34\";\n}\n\n.note-icon-underline::before {\n  content: \"\\ea35\";\n}\n\n.note-icon-undo::before {\n  content: \"\\ea36\";\n}\n\n.note-icon-unorderedlist::before {\n  content: \"\\ea37\";\n}\n\n.note-icon-video::before {\n  content: \"\\ea38\";\n}\n\n","// Core variables and mixins\n@import '../summernote/font.scss';\n@import '../summernote/elements.scss';\n@import \"scss/variables.scss\";\n@import \"scss/mixins.scss\";\n\n@import \"scss/common.scss\";\n@import \"scss/toolbar.scss\";\n@import \"scss/btn-group.scss\";\n@import \"scss/buttons.scss\";\n@import \"scss/dropdown.scss\";\n@import \"scss/modal.scss\";\n@import \"scss/form.scss\";\n@import \"scss/tooltip.scss\";\n@import \"scss/popover.scss\";\n\n@import '../summernote/common.scss';\n\n.note-editor {\n  .note-editing-area {\n    .note-editable {\n      table {\n        width: 100%;\n        border-collapse: collapse;\n\n         td, th {\n          border: 1px solid #ececec;\n          padding: 5px 3px;\n        }\n      }\n\n      a {\n        background-color: inherit;\n        text-decoration: inherit;\n        font-family: inherit;\n        font-weight: inherit;\n        color: #337ab7;\n      }\n\n      a:hover,\n      a:focus {\n        color: #23527c;\n        text-decoration: underline;\n        outline: 0;\n      }\n\n      figure {\n        margin: 0;\n      }\n    }\n  }\n}\n\n/* Dialog\n ------------------------------------------*/\n.note-modal {\n  .note-modal-body {\n    label {\n      margin-bottom: 2px;\n      padding: 2px 5px;\n      display: inline-block;\n    }\n\n     .help-list-item:hover {\n      background-color: #e0e0e0;\n    }\n  }\n\n   // [workaround] firefox fileinput\n  @-moz-document url-prefix() {\n    .note-image-input {\n      height: auto;\n    }\n  }\n}\n\n\n.help-list-item {\n  label {\n    margin-bottom:5px;\n    display:inline-block;\n  }\n}\n",".note-frame {\n  @include box-sizing(border-box);\n  color: #000;\n  font-family: $font-family;\n  border-radius: 4px;\n}\n","@mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) {\n  background: $color;\n  background: -webkit-gradient(linear,\n                               left bottom,\n                               left top,\n                               color-stop(0, $start),\n                               color-stop(1, $stop));\n  background: -ms-linear-gradient(bottom,\n                                  $start,\n                                  $stop);\n  background: -moz-linear-gradient(center bottom,\n                                   $start 0%,\n                                   $stop 100%);\n  background: -o-linear-gradient($stop,\n                                 $start);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($stop)}', endColorstr='#{ie-hex-str($start)}', GradientType=0);\n}\n@mixin bw-gradient($color: #F5F5F5, $start: 0, $stop: 255) {\n  background: $color;\n  background: -webkit-gradient(linear,\n                               left bottom,\n                               left top,\n                               color-stop(0, rgb($start,$start,$start)),\n                               color-stop(1, rgb($stop,$stop,$stop)));\n  background: -ms-linear-gradient(bottom,\n                                  rgb($start,$start,$start) 0%,\n                                  rgb($stop,$stop,$stop) 100%);\n  background: -moz-linear-gradient(center bottom,\n                                   rgb($start,$start,$start) 0%,\n                                   rgb($stop,$stop,$stop) 100%);\n  background: -o-linear-gradient(rgb($stop,$stop,$stop),\n                                 rgb($start,$start,$start));\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str(rgb($stop,$stop,$stop))}', endColorstr='#{ie-hex-str(rgb($start,$start,$start))}', GradientType=0);\n}\n@mixin bordered($top-color: #EEE, $right-color: #EEE, $bottom-color: #EEE, $left-color: #EEE) {\n  border-top: solid 1px $top-color;\n  border-left: solid 1px $left-color;\n  border-right: solid 1px $right-color;\n  border-bottom: solid 1px $bottom-color;\n}\n@mixin drop-shadow($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: 0.1) {\n  -webkit-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);\n  -moz-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);\n  box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);\n}\n@mixin rounded($radius: 2px) {\n  -webkit-border-radius: $radius;\n  -moz-border-radius: $radius;\n  border-radius: $radius;\n}\n@mixin border-radius($topright: 0, $bottomright: 0, $bottomleft: 0, $topleft: 0) {\n  -webkit-border-top-right-radius: $topright;\n  -webkit-border-bottom-right-radius: $bottomright;\n  -webkit-border-bottom-left-radius: $bottomleft;\n  -webkit-border-top-left-radius: $topleft;\n  -moz-border-radius-topright: $topright;\n  -moz-border-radius-bottomright: $bottomright;\n  -moz-border-radius-bottomleft: $bottomleft;\n  -moz-border-radius-topleft: $topleft;\n  border-top-right-radius: $topright;\n  border-bottom-right-radius: $bottomright;\n  border-bottom-left-radius: $bottomleft;\n  border-top-left-radius: $topleft;\n  @include background-clip(padding-box);\n}\n@mixin opacity($opacity: 0.5) {\n  -webkit-opacity: $opacity;\n  -khtml-opacity: $opacity;\n  -moz-opacity: $opacity;\n  opacity: $opacity;\n  $opperc: $opacity * 100;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=#{$opperc});\n  filter: alpha(opacity=$opperc);\n}\n@mixin transition-duration($duration: 0.2s) {\n  -moz-transition-duration: $duration;\n  -webkit-transition-duration: $duration;\n  -o-transition-duration: $duration;\n  transition-duration: $duration;\n}\n@mixin transform($arguments...) {\n  -webkit-transform: $arguments;\n  -moz-transform: $arguments;\n  -o-transform: $arguments;\n  -ms-transform: $arguments;\n  transform: $arguments;\n}\n@mixin rotation($deg:5deg) {\n  @include transform(rotate($deg));\n}\n@mixin scale($ratio:1.5) {\n  @include transform(scale($ratio));\n}\n@mixin transition($duration:0.2s, $ease:ease-out) {\n  -webkit-transition: all $duration $ease;\n  -moz-transition: all $duration $ease;\n  -o-transition: all $duration $ease;\n  transition: all $duration $ease;\n}\n@mixin inner-shadow($horizontal:0, $vertical:1px, $blur:2px, $alpha: 0.4) {\n  -webkit-box-shadow: inset $horizontal $vertical $blur rgba(0, 0, 0, $alpha);\n  -moz-box-shadow: inset $horizontal $vertical $blur rgba(0, 0, 0, $alpha);\n  box-shadow: inset $horizontal $vertical $blur rgba(0, 0, 0, $alpha);\n}\n@mixin box-shadow($arguments) {\n  -webkit-box-shadow: $arguments;\n  -moz-box-shadow: $arguments;\n  box-shadow: $arguments;\n}\n@mixin box-sizing($sizing: border-box) {\n  -ms-box-sizing: $sizing;\n  -moz-box-sizing: $sizing;\n  -webkit-box-sizing: $sizing;\n  box-sizing: $sizing;\n}\n@mixin user-select($argument: none) {\n  -webkit-user-select: $argument;\n  -moz-user-select: $argument;\n  -ms-user-select: $argument;\n  user-select: $argument;\n}\n@mixin columns($colwidth: 250px, $colcount: 0, $colgap: 50px, $columnRuleColor: #EEE, $columnRuleStyle: solid, $columnRuleWidth: 1px) {\n  -moz-column-width: $colwidth;\n  -moz-column-count: $colcount;\n  -moz-column-gap: $colgap;\n  -moz-column-rule-color: $columnRuleColor;\n  -moz-column-rule-style: $columnRuleStyle;\n  -moz-column-rule-width: $columnRuleWidth;\n  -webkit-column-width: $colwidth;\n  -webkit-column-count: $colcount;\n  -webkit-column-gap: $colgap;\n  -webkit-column-rule-color: $columnRuleColor;\n  -webkit-column-rule-style: $columnRuleStyle;\n  -webkit-column-rule-width: $columnRuleWidth;\n  column-width: $colwidth;\n  column-count: $colcount;\n  column-gap: $colgap;\n  column-rule-color: $columnRuleColor;\n  column-rule-style: $columnRuleStyle;\n  column-rule-width: $columnRuleWidth;\n}\n@mixin translate($x:0, $y:0) {\n  @include transform(translate($x, $y));\n}\n@mixin background-clip($argument: padding-box) {\n  -moz-background-clip: $argument;\n  -webkit-background-clip: $argument;\n  background-clip: $argument;\n}\n","\n$gray-base:   #000;\n$gray-darker: lighten($gray-base, 13.5%); // #222\n$gray-dark:   lighten($gray-base, 20%);   // #333\n$gray:        lighten($gray-base, 33.5%); // #555\n$gray-light:  lighten($gray-base, 46.7%); // #777\n$gray-lighter:lighten($gray-base, 93.5%); // #eee\n\n$font-family: sans-serif;\n$font-size: 14px;\n$font-size-large: ceil(($font-size * 1.25));\n$font-size-small: ceil(($font-size * 0.85));\n\n$line-height: 1.4;\n$line-height-computed: floor(($line-height * $font-size));\n\n$padding-base-vertical: 5px;\n$padding-base-horizontal: 10px;\n\n$border-radius-base: 3px;\n$btn-border-radius-base: $border-radius-base;\n\n$icon-font-path: \"../fonts/\";\n$icon-font-name: \"summernote\";\n$icon-font-svg-id: \"summernote\";\n\n$btn-font-weight: normal;\n$btn-default-color : #333;\n$btn-default-bg: #fff;\n$btn-default-border: #dae0e5;\n$btn-default-hover-bg: #ebebeb;\n$btn-default-active-bg: #f0f0f0;\n\n$input-bg: #fff;\n$input-bg-disabled: $gray-lighter;\n$input-color: $gray;\n$input-border: #ccc;\n\n$input-border-focus: #66afe9;\n$input-color-placeholder: #999;\n\n$cursor-disabled: not-allowed;\n\n$zindex-dropdown:          1000;\n$zindex-popover:1060;\n$zindex-tooltip:1070;\n$zindex-modal-background:  1040;\n$zindex-modal:  1050;\n\n$dropdown-color-bg: #fff;\n$dropdown-color-border: #e2e2e2;\n\n$tooltip-max-width:200px;\n$tooltip-color:    #fff;\n$tooltip-bg:       #000;\n$tooltip-opacity:  .9;\n$tooltip-arrow-width:         5px;\n$tooltip-arrow-color:         $tooltip-bg;\n\n$popover-bg:    #ffffff;\n$popover-color: #000;\n$popover-max-width:        276px;\n$popover-border-color:     rgba(0,0,0,.2);\n$popover-fallback-border-color:       #ccc;\n$popover-title-bg:         darken($popover-bg, 3%);\n$popover-arrow-width:      10px;\n$popover-arrow-color:      $popover-bg;\n$popover-arrow-outer-width:($popover-arrow-width + 1);\n$popover-arrow-outer-color:fade-in($popover-border-color, .05);\n$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%);\n\n\n$modal-inner-padding: 15px;\n$modal-title-padding: 15px;\n$modal-title-line-height: $line-height;\n$modal-content-bg: #fff;\n$modal-content-border-color: rgba(0,0,0,.2);\n$modal-content-fallback-border-color: #999;\n$modal-backdrop-bg: #000;\n$modal-backdrop-opacity: .5;\n$modal-header-border-color: #e5e5e5;\n$modal-footer-border-color: $modal-header-border-color;\n",".note-toolbar {\n  padding: 10px 5px;\n  border-bottom: 1px solid #e2e2e2;\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n",".note-btn-group {\n  position: relative;\n  display: inline-block;\n  margin-right: 8px;\n\n  > .note-btn-group {\n    margin-right: 0;\n  }\n\n  > .note-btn:first-child {\n    margin-left: 0;\n  }\n\n  .note-btn + .note-btn,\n  .note-btn + .note-btn-group,\n  .note-btn-group + .note-btn,\n  .note-btn-group + .note-btn-group {\n    margin-left: -1px;\n  }\n\n  > .note-btn:not(:first-child),\n  > .note-btn-group:not(:first-child) > .note-btn {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n  }\n\n  > .note-btn:not(:last-child):not(.dropdown-toggle),\n  > .note-btn-group:not(:last-child) > .note-btn {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n\n  &.open {\n    > .note-dropdown {\n      display: block;\n    }\n  }\n}\n",".note-btn {\n  display: inline-block;\n  font-weight: 400;\n  margin-bottom: 0;\n  text-align: center;\n  vertical-align: middle;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid $btn-default-border;\n  white-space: nowrap;\n  outline: 0;\n  @include button-maker($btn-default-color, $btn-default-bg, $btn-default-hover-bg,  $btn-default-active-bg, $btn-default-border);\n  @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size, $line-height, $btn-border-radius-base);\n  @include user-select(none);\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: $btn-default-color;\n    text-decoration: none;\n    border: 1px solid $btn-default-border;\n    background-color: $btn-default-hover-bg;\n    outline: 0;\n    @include rounded(1px);\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    color: #333;\n    text-decoration: none;\n    border: 1px solid #dae0e5;\n    background-color: #ebebeb;\n    outline: 0;\n    border-radius: 1px;\n    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: $cursor-disabled;\n    @include opacity(.65);\n    @include box-shadow(none);\n  }\n\n  & > span.note-icon-caret:first-child {\n    margin-left: -1px;\n  }\n\n  & > span.note-icon-caret:nth-child(2) {\n    padding-left: 3px;\n    margin-right: -5px;\n  }\n}\n\n.note-btn-primary {\n  background: #fa6362;\n  color: #fff;\n\n  &:hover,\n  &:focus,\n  &.focus {\n    color: #fff;\n    text-decoration: none;\n    border: 1px solid $btn-default-border;\n    background-color: #fa6362;\n    @include rounded(1px);\n  }\n\n}\n\n.note-btn-block {\n  display: block;\n  width: 100%;\n}\n\n.note-btn-block + .note-btn-block {\n  margin-top:5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.note-btn-block {\n    width: 100%;\n  }\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  line-height: 1;\n  color: #000;\n  opacity: .2;\n}\n\n.close:hover {\n  -webkit-opacity: 1;\n   -khtml-opacity: 1;\n     -moz-opacity: 1;\n       -ms-filter: alpha(opacity=100);\n           filter: alpha(opacity=100);\n          opacity: 1\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-maker($color, $background, $focusBackground, $activeBackground, $border) {\n  color: $color;\n  background-color: $background;\n  border-color: $border;\n\n  &:focus,\n  &.focus {\n    color: $color;\n    background-color: $focusBackground;\n    border-color: $border;\n  }\n  &:hover {\n    color: $color;\n    background-color: $focusBackground;\n    border-color: $border;\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &:focus,\n    &.focus {\n      background-color: $background;\n      border-color: $border;\n    }\n  }\n}\n\n// Button sizes\n@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) {\n  padding: $padding-vertical $padding-horizontal;\n  font-size: $font-size;\n  line-height: $line-height;\n  border-radius: $border-radius;\n}\n",".note-dropdown {\n  position: relative;\n\n}\n.note-color {\n  .dropdown-toggle {\n    width: 30px;\n    padding-left: 5px;\n  }\n}\n.note-dropdown-menu {\n  display: none;\n  min-width: 100px;\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index : $zindex-dropdown;\n  float: left;\n  text-align:left;\n  background: $dropdown-color-bg;\n  border: 1px solid $dropdown-color-border;\n  padding: 5px;\n  background-clip: padding-box;\n  @include box-shadow(0 1px 1px rgba(0,0,0,.06));\n\n  > *:last-child {\n    margin-right: 0;\n  }\n}\n\n.note-btn-group.open .note-dropdown-menu {\n  display: block;\n}\n\n.note-dropdown-item {\n  display: block;\n\n  &:hover {\n    background-color: $btn-default-hover-bg;\n  }\n}\n\na.note-dropdown-item,\na.note-dropdown-item:hover {\n  margin: 5px 0;\n  color: #000;\n  text-decoration: none;\n}\n",".note-modal {\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  z-index: $zindex-modal;\n  @include opacity(1);\n  display: none;\n\n  &.open {\n    display:block;\n  }\n}\n\n.note-modal-content {\n  position: relative;\n  width: auto;\n  margin: 30px 20px;\n  border: 1px solid $modal-content-border-color;\n  background: $modal-content-bg;\n  background-clip: border-box;\n  outline: 0;\n  border-radius: 5px;\n  @include box-shadow(0 3px 9px rgba(0,0,0,.5));\n}\n\n.note-modal-header {\n  padding: 10px 20px;\n  border: 1px solid #ededef;\n}\n\n.note-modal-body {\n  position: relative;\n  padding: 20px 30px;\n\n  // shortcut text style\n  kbd {\n    border-radius: 2px;\n    background-color: #000;\n    color: #fff;\n    padding: 3px 5px;\n    font-weight: 700;\n    @include box-sizing();\n  }\n}\n\n.note-modal-footer {\n  height: 40px;\n  padding: 10px;\n  text-align: center;\n\n}\n\n.note-modal-footer a {\n  color: #337ab7;\n  text-decoration: none\n}\n\n.note-modal-footer a:hover,\n.note-modal-footer a:focus {\n  color: #23527c;\n  text-decoration: underline\n}\n\n.note-modal-footer .note-btn {\n  float: right\n}\n\n.note-modal-title {\n  font-size: 20px;\n  color: #42515f;\n  margin: 0;\n  line-height: 1.4;\n}\n\n.note-modal-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: $zindex-modal-background;\n  background: $modal-backdrop-bg;\n  @include opacity(0.5);\n  display: none;\n\n  &.open {\n    display: block;\n  }\n}\n\n\n// Scale up the modal\n@media (min-width: 768px) {\n  // Automatically set modal's width for larger viewports\n  .note-modal-content {\n    width: 600px;\n    margin: 30px auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .note-modal-content-large {\n    width: 900px;\n  }\n}\n\n.note-modal {\n\n  .note-help-block {\n    display: block;\n    margin-top: 5px;\n    margin-bottom: 10px;\n    color: #737373;\n  }\n\n  .note-nav {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    padding-left: 0;\n    margin-bottom: 0;\n    list-style: none;\n  }\n\n  .note-nav-link {\n    display: block;\n    padding: 0.5rem 1rem;\n    color: #007bff;\n    text-decoration: none;\n    background-color: transparent;\n    -webkit-text-decoration-skip: objects;\n  }\n\n  .note-nav-link:focus,\n  .note-nav-link:hover {\n    color: #0056b3;\n    text-decoration: none;\n  }\n\n  .note-nav-link.disabled {\n    color: #868e96;\n  }\n\n  .note-nav-tabs {\n    border-bottom: 1px solid #ddd;\n  }\n\n  .note-nav-tabs .note-nav-item {\n    margin-bottom: -1px;\n  }\n\n  .note-nav-tabs .note-nav-link {\n    border: 1px solid transparent;\n    border-top-left-radius: 0.25rem;\n    border-top-right-radius: 0.25rem;\n  }\n\n  .note-nav-tabs .note-nav-link:focus,\n  .note-nav-tabs .note-nav-link:hover {\n    border-color: #e9ecef #e9ecef #ddd;\n  }\n\n  .note-nav-tabs .note-nav-link.disabled {\n    color: #868e96;\n    background-color: transparent;\n    border-color: transparent;\n  }\n\n  .note-nav-tabs .note-nav-item.show .note-nav-link {\n    color: #495057;\n    background-color: #fff;\n    border-color: #ddd #ddd #fff;\n  }\n\n  .note-tab-content {\n    margin: 15px auto;\n  }\n\n  .note-tab-content > .note-tab-pane:target ~ .note-tab-pane:last-child,\n  .note-tab-content > .note-tab-pane {\n    display: none;\n  }\n  .note-tab-content > :last-child,\n  .note-tab-content > .note-tab-pane:target {\n    display: block;\n  }\n}\n",".note-form-group {\n  padding-bottom: 20px;\n}\n\n.note-form-group:last-child {\n  padding-bottom: 0;\n}\n\n.note-form-label {\n  display: block;\n  width: 100%;\n  font-size: 16px;\n  color: #42515f;\n  margin-bottom: 10px;\n  font-weight: 700;\n}\n\n.note-input {\n  width: 100%;\n  display: block;\n  border: 1px solid #ededef;\n  background: #fff;\n  outline: 0;\n  padding: 6px 4px;\n  font-size: 14px;\n  @include box-sizing();\n}\n\n\n.note-input::-webkit-input-placeholder {\n  color: $gray-lighter;\n}\n\n.note-input:-moz-placeholder { /* Firefox 18- */\n  color: $gray-lighter;\n}\n\n.note-input::-moz-placeholder {  /* Firefox 19+ */\n  color: $gray-lighter;\n}\n\n.note-input:-ms-input-placeholder {\n  color: $gray-lighter;\n}\n",".note-tooltip {\n  position: absolute;\n  z-index: $zindex-tooltip;\n  display: block;\n  // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  font-size: 13px;\n\n  transition: opacity .15s;\n  @include opacity(0);\n\n  &.in     { @include opacity($tooltip-opacity); }\n  &.top    { margin-top:  -3px; padding: $tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 $tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: $tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 $tooltip-arrow-width; }\n}\n\n.note-tooltip {\n  &.bottom .note-tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -$tooltip-arrow-width;\n    border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-bottom-color: $tooltip-arrow-color;\n  }\n\n  &.top .note-tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-top-color: $tooltip-arrow-color;\n  }\n\n  &.right .note-tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;\n    border-right-color: $tooltip-arrow-color;\n  }\n  &.left .note-tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -$tooltip-arrow-width;\n    border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;\n    border-left-color: $tooltip-arrow-color;\n  }\n}\n\n\n.note-tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.note-tooltip-content {\n  max-width: $tooltip-max-width;\n  font-family: $font-family;\n  padding: 3px 8px;\n  color: $tooltip-color;\n  text-align: center;\n  background-color: $tooltip-bg;\n}\n",".note-popover {\n  position: absolute;\n  z-index: $zindex-popover;\n  display: block;\n  // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n  // So reset our font and text properties to avoid inheriting weird values.\n  font-size: 13px;\n  font-family: $font-family;\n\n  display: none;\n  background: $popover-bg;\n  border: 1px solid $popover-border-color;\n  border: 1px solid $popover-fallback-border-color;\n\n  &.in     { display: block; }\n  &.top    { margin-top:  -10px; padding: $tooltip-arrow-width 0; }\n  &.right  { margin-left:  10px; padding: 0 $tooltip-arrow-width; }\n  &.bottom { margin-top:   10px; padding: $tooltip-arrow-width 0; }\n  &.left   { margin-left: -10px; padding: 0 $tooltip-arrow-width; }\n}\n\n.note-popover {\n  &.bottom .note-popover-arrow {\n    top: -11px;\n    left: 20px;\n    margin-left: -$popover-arrow-width;\n    border-top-width: 0;\n    border-bottom-color: $popover-arrow-outer-fallback-color;\n    border-bottom-color: $popover-arrow-outer-color;\n\n    &::after {\n      top: 1px;\n      margin-left: -10px;\n      content: \" \";\n      border-top-width: 0;\n      border-bottom-color: #fff;\n    }\n  }\n\n  &.top .note-popover-arrow {\n    bottom: -11px;\n    left: 20px;\n    margin-left: -$popover-arrow-width;\n    border-bottom-width: 0;\n    border-top-color: $popover-arrow-outer-fallback-color;\n    border-top-color: $popover-arrow-outer-color;\n\n    &::after {\n      bottom: 1px;\n      margin-left: -10px;\n      content: \" \";\n      border-bottom-width: 0;\n      border-top-color: #fff;\n    }\n  }\n\n  &.right .note-popover-arrow {\n    top: 50%;\n    left: -11px;\n    margin-top: -$popover-arrow-width;\n    border-left-width: 0;\n    border-right-color: $popover-arrow-outer-fallback-color;\n    border-right-color: $popover-arrow-outer-color;\n\n    &::after {\n      left: 1px;\n      margin-top: -10px;\n      content: \" \";\n      border-left-width: 0;\n      border-right-color: #fff;\n    }\n\n  }\n  &.left .note-popover-arrow {\n    top: 50%;\n    right: -11px;\n    margin-top: -$popover-arrow-width;\n    border-right-width: 0;\n    border-left-color: $popover-arrow-outer-fallback-color;\n    border-left-color: $popover-arrow-outer-color;\n\n    &::after {\n      right: 1px;\n      margin-top: -10px;\n      content: \" \";\n      border-right-width: 0;\n      border-left-color: #fff;\n    }\n  }\n}\n\n\n.note-popover-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 11px solid transparent;\n\n  &::after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n\n\n    content :  \" \";\n    border-width: 10px;\n  }\n\n}\n\n.note-popover-content {\n  /*max-width: $popover-max-width;*/\n  padding: 3px 8px;\n  color: $popover-color;\n  text-align: center;\n  background-color: $popover-bg;\n  min-width: 100px;\n  min-height: 30px;\n}\n","@import \"elements.scss\";\n\n/* Theme Variables\n ------------------------------------------ */\n$border-color: #00000032;\n$background-color: #8080801d;\n\n$img-margin-left: 10px;\n$img-margin-right: 10px;\n\n/* Layout\n ------------------------------------------ */\n.note-editor {\n  position: relative;\n\n  // dropzone\n  $dropzone-color: lightskyblue;\n  $dropzone-active-color: darken($dropzone-color, 30);\n  .note-dropzone {\n    position: absolute;\n    display: none;\n    z-index: 100;\n    color: $dropzone-color;\n    background-color: #fff;\n    opacity: 0.95;\n\n    .note-dropzone-message {\n      display: table-cell;\n      vertical-align: middle;\n      text-align: center;\n      font-size: 28px;\n      font-weight: 700;\n    }\n\n    &.hover {\n      color: $dropzone-active-color;\n    }\n  }\n\n  &.dragover .note-dropzone {\n    display: table;\n  }\n\n  .note-editing-area {\n    position: relative;\n\n    .note-editable {\n      outline: none;\n\n      sup {\n        vertical-align: super;\n      }\n\n      sub {\n        vertical-align: sub;\n      }\n\n      img.note-float-left {\n        margin-right: $img-margin-right;\n      }\n\n      img.note-float-right {\n        margin-left: $img-margin-left;\n      }\n    }\n  }\n}\n\n/* Frame mode layout\n ------------------------------------------ */\n.note-editor.note-frame,\n.note-editor.note-airframe {\n  border: 1px solid $border-color;\n\n  // codeview mode\n  &.codeview {\n    .note-editing-area {\n      .note-editable {\n        display: none;\n      }\n      .note-codable {\n        display: block;\n      }\n    }\n  }\n\n  .note-editing-area {\n    overflow: hidden;\n\n    // editable\n    .note-editable {\n      padding: 10px;\n      overflow: auto;\n      word-wrap: break-word;\n\n      &[contenteditable=\"false\"] {\n        background-color: $background-color;\n      }\n    }\n\n    // codeable\n    .note-codable {\n      display: none;\n      width: 100%;\n      padding: 10px;\n      border: none;\n      box-shadow: none;\n      font-family: Menlo, Monaco, monospace, sans-serif;\n      font-size: 14px;\n      color: #ccc;\n      background-color: #222;\n      resize: none;\n      outline: none;\n\n      // override BS2 default style\n      @include box-sizing(border-box);\n      @include rounded(0);\n      margin-bottom: 0;\n    }\n  }\n\n  // fullscreen mode\n  &.fullscreen {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100% !important;\n    z-index: 1050; // bs3 modal-backdrop: 1030, bs2: 1040\n    .note-resizebar {\n      display: none;\n    }\n  }\n\n  // Notifications\n  .note-status-output {\n    display: block;\n    width: 100%;\n    font-size: 14px;\n    line-height: 1.42857143;\n    height: 20px;\n    margin-bottom: 0;\n    color: #000;\n    border: 0;\n    border-top: 1px solid #e2e2e2;\n  }\n\n  .note-status-output:empty {\n    height: 0;\n    border-top: 0 solid transparent;\n  }\n\n  .note-status-output .pull-right {\n    float: right !important;\n  }\n\n  .note-status-output .text-muted {\n    color: #777;\n  }\n\n  .note-status-output .text-primary {\n    color: #286090;\n  }\n\n  .note-status-output .text-success {\n    color: #3c763d;\n  }\n\n  .note-status-output .text-info {\n    color: #31708f;\n  }\n\n  .note-status-output .text-warning {\n    color: #8a6d3b;\n  }\n\n  .note-status-output .text-danger {\n    color: #a94442;\n  }\n\n  .note-status-output .alert {\n    margin: -7px 0 0 0;\n    padding: 7px 10px 2px 10px;\n    border-radius: 0;\n    color: #000;\n    background-color: #f5f5f5;\n  }\n\n  .note-status-output .alert .note-icon {\n    margin-right: 5px;\n  }\n\n  .note-status-output .alert-success {\n    color: #3c763d !important;\n    background-color: #dff0d8 !important;\n  }\n\n  .note-status-output .alert-info {\n    color: #31708f !important;\n    background-color: #d9edf7 !important;\n  }\n\n  .note-status-output .alert-warning {\n    color: #8a6d3b !important;\n    background-color: #fcf8e3 !important;\n  }\n\n  .note-status-output .alert-danger {\n    color: #a94442 !important;\n    background-color: #f2dede !important;\n  }\n\n  // statusbar\n  .note-statusbar {\n    background-color: $background-color;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top: 1px solid $border-color;\n    .note-resizebar {\n      padding-top: 1px;\n      height: 9px;\n      width: 100%;\n      cursor: ns-resize;\n      .note-icon-bar {\n        width: 20px;\n        margin: 1px auto;\n        border-top: 1px solid $border-color;\n      }\n    }\n\n    &.locked {\n      .note-resizebar {\n        cursor: default;\n        .note-icon-bar {\n          display: none;\n        }\n      }\n    }\n  }\n  .note-placeholder {\n    padding: 10px;\n  }\n}\n\n.note-editor.note-airframe {\n  border: 0;\n\n  .note-editing-area {\n    .note-editable {\n      padding: 0;\n    }\n  }\n}\n\n\n/* Popover\n ------------------------------------------ */\n.note-popover.popover {\n  display: none;\n  max-width: none;\n\n  .popover-content {\n    a {\n      display: inline-block;\n      max-width: 200px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap; // for FF\n      vertical-align: middle; // for FF\n    }\n  }\n  .arrow {\n    left: 20px !important;\n  }\n}\n\n/* Popover and Toolbar (Button container)\n ------------------------------------------ */\n.note-toolbar {\n  position: relative;\n}\n\n.note-popover .popover-content, .note-editor .note-toolbar {\n  margin: 0;\n  padding: 0 0 5px 5px;\n\n  & > .note-btn-group {\n    margin-top: 5px;\n    margin-left: 0;\n    margin-right: 5px;\n  }\n\n  .note-btn-group {\n    .note-table {\n      min-width: 0;\n      padding: 5px;\n      .note-dimension-picker {\n        font-size: 18px;\n        .note-dimension-picker-mousecatcher {\n          position: absolute !important;\n          z-index: 3;\n          width: 10em;\n          height: 10em;\n          cursor: pointer;\n        }\n        .note-dimension-picker-unhighlighted {\n          position: relative !important;\n          z-index: 1;\n          width: 5em;\n          height: 5em;\n          background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n        }\n        .note-dimension-picker-highlighted {\n          position: absolute !important;\n          z-index: 2;\n          width: 1em;\n          height: 1em;\n          background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC\") repeat;\n        }\n      }\n    }\n  }\n\n  .note-style {\n    .dropdown-style {\n      blockquote, pre {\n        margin: 0;\n        padding: 5px 10px;\n      }\n      h1, h2, h3, h4, h5, h6, p {\n        margin: 0;\n        padding: 0;\n      }\n    }\n  }\n\n  .note-color-all {\n    .note-dropdown-menu {\n      min-width: 337px;\n    }\n  }\n\n  .note-color {\n    .dropdown-toggle {\n      width: 20px;\n      padding-left: 5px;\n    }\n    .note-dropdown-menu {\n      .note-palette {\n        display: inline-block;\n        margin: 0;\n        width: 160px;\n        &:first-child {\n          margin: 0 5px;\n        }\n\n        .note-palette-title {\n          font-size: 12px;\n          margin: 2px 7px;\n          text-align: center;\n          border-bottom: 1px solid #eee;\n        }\n\n        .note-color-reset,\n        .note-color-select {\n          font-size: 11px;\n          margin: 3px;\n          padding: 0 3px;\n          cursor: pointer;\n          width: 100%;\n          @include rounded(5px);\n\n          &:hover {\n            background: #eee;\n          }\n        }\n\n        .note-color-row {\n          height: 20px;\n        }\n\n        .note-color-select-btn {\n          display: none;\n        }\n\n        .note-holder-custom {\n          .note-color-btn {\n            border: 1px solid #eee;\n          }\n        }\n      }\n    }\n  }\n\n  .note-para {\n    .note-dropdown-menu {\n      min-width: 228px;\n      padding: 5px;\n      & > div + div {\n        margin-left: 5px;\n      }\n    }\n  }\n\n  // dropdown-menu for toolbar and popover\n  .note-dropdown-menu {\n    min-width: 160px;\n\n    // dropdown-menu right position\n    // http://forrst.com/posts/Bootstrap_right_positioned_dropdown-2KB\n    &.right {\n      right: 0;\n      left: auto;\n      &::before {\n        right: 9px;\n        left: auto !important;\n      }\n      &::after {\n        right: 10px;\n        left: auto !important;\n      }\n    }\n    // dropdown-menu for selectbox\n    &.note-check {\n      a i {\n        color: deepskyblue;\n        visibility: hidden;\n      }\n      a.checked i {\n        visibility: visible;\n      }\n    }\n  }\n\n  .note-fontsize-10 {\n    font-size: 10px;\n  }\n\n  // color palette for toolbar and popover\n  .note-color-palette {\n    line-height: 1;\n    div {\n      .note-color-btn {\n        width: 20px;\n        height: 20px;\n        padding: 0;\n        margin: 0;\n        border: 0;\n        border-radius: 0;\n      }\n      .note-color-btn:hover {\n        transform: scale(1.2);\n        transition: all 0.2s;\n      }\n    }\n  }\n}\n\n/* Dialog\n ------------------------------------------ */\n.note-modal {\n  .modal-dialog {\n    outline: 0;\n    border-radius: 5px;\n    @include box-shadow(0 3px 9px rgba(0,0,0,.5));\n  }\n  .form-group { // overwrite BS's form-horizontal minus margins\n    margin-left: 0;\n    margin-right: 0;\n  }\n  .note-modal-form {\n    margin: 0; // overwrite BS2's form margin bottom\n  }\n  .note-image-dialog {\n    .note-dropzone {\n      min-height: 100px;\n      font-size: 30px;\n      line-height: 4; // vertical-align\n      color: lightgray;\n      text-align: center;\n      border: 4px dashed lightgray;\n      margin-bottom: 10px;\n    }\n  }\n\n  // [workaround] firefox fileinput\n  @-moz-document url-prefix() {\n    .note-image-input {\n      height: auto;\n    }\n  }\n}\n\n/* Placeholder\n ------------------------------------------ */\n.note-placeholder {\n  position: absolute;\n  display: none;\n  color: gray;\n}\n\n/* Handle\n ------------------------------------------ */\n.note-handle {\n  // control selection\n  .note-control-selection {\n    position: absolute;\n    display: none;\n    border: 1px solid #000;\n    & > div {\n      position: absolute;\n    }\n\n    .note-control-selection-bg {\n      width: 100%;\n      height: 100%;\n      background-color: #000;\n      @include opacity(0.3);\n    }\n\n    .note-control-handle {\n      width: 7px;\n      height: 7px;\n      border: 1px solid #000;\n    }\n\n    .note-control-holder {\n      @extend .note-control-handle;\n    }\n\n    .note-control-sizing {\n      @extend .note-control-handle;\n      background-color: #000;\n    }\n\n    .note-control-nw {\n      top: -5px;\n      left: -5px;\n      border-right: none;\n      border-bottom: none;\n    }\n\n    .note-control-ne {\n      top: -5px;\n      right: -5px;\n      border-bottom: none;\n      border-left: none;\n    }\n\n    .note-control-sw {\n      bottom: -5px;\n      left: -5px;\n      border-top: none;\n      border-right: none;\n    }\n\n    .note-control-se {\n      right: -5px;\n      bottom: -5px;\n      cursor: se-resize;\n    }\n\n    .note-control-se.note-control-holder {\n      cursor: default;\n      border-top: none;\n      border-left: none;\n    }\n\n    .note-control-selection-info {\n      right: 0;\n      bottom: 0;\n      padding: 5px;\n      margin: 5px;\n      color: #fff;\n      background-color: #000;\n      font-size: 12px;\n      @include rounded(5px);\n      @include opacity(0.7);\n    }\n  }\n}\n\n.note-hint-popover {\n  min-width: 100px;\n  padding: 2px;\n\n  .popover-content {\n    padding: 3px;\n    max-height: 150px;\n    overflow: auto;\n\n    .note-hint-group {\n      .note-hint-item {\n        display: block !important;\n        padding: 3px;\n\n        &.active, &:hover {\n          display: block;\n          clear: both;\n          font-weight: 400;\n          line-height: 1.4;\n          color: white;\n          white-space: nowrap;\n          text-decoration: none;\n          background-color: #428bca;\n          outline: 0;\n          cursor: pointer;\n        }\n      }\n    }\n  }\n}\n\n/* Handle\n ------------------------------------------ */\nhtml, body {\n  .note-fullscreen-body {\n    overflow: hidden !important;\n  }\n}\n//Alignment does not work with or without sequences\n.note-editable ul li,.note-editable ol li{\n  list-style-position: inside;\n}"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/erp24/web/js/summernote-lite.js b/erp24/web/js/summernote-lite.js
new file mode 100644 (file)
index 0000000..736f4a9
--- /dev/null
@@ -0,0 +1,9891 @@
+/*!
+ * 
+ * Super simple WYSIWYG editor v0.9.0
+ * https://summernote.org
+ *
+ * Copyright 2013~ Hackerwins and contributors
+ * Summernote may be freely distributed under the MIT license.
+ *
+ * Date: 2024-09-30T14:42Z
+ *
+ */
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory(require("jquery"));
+       else if(typeof define === 'function' && define.amd)
+               define(["jquery"], factory);
+       else {
+               var a = typeof exports === 'object' ? factory(require("jquery")) : factory(root["jQuery"]);
+               for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
+       }
+})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {
+return /******/ (() => { // webpackBootstrap
+/******/       "use strict";
+/******/       var __webpack_modules__ = ({
+
+/***/ 7000:
+/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {
+
+/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8938);
+/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
+
+(jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) = (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote) || {
+  lang: {}
+};
+jquery__WEBPACK_IMPORTED_MODULE_0___default().extend(true, (jquery__WEBPACK_IMPORTED_MODULE_0___default().summernote).lang, {
+  'en-US': {
+    font: {
+      bold: 'Bold',
+      italic: 'Italic',
+      underline: 'Underline',
+      clear: 'Remove Font Style',
+      height: 'Line Height',
+      name: 'Font Family',
+      strikethrough: 'Strikethrough',
+      subscript: 'Subscript',
+      superscript: 'Superscript',
+      size: 'Font Size',
+      sizeunit: 'Font Size Unit'
+    },
+    image: {
+      image: 'Picture',
+      insert: 'Insert Image',
+      resizeFull: 'Resize full',
+      resizeHalf: 'Resize half',
+      resizeQuarter: 'Resize quarter',
+      resizeNone: 'Original size',
+      floatLeft: 'Float Left',
+      floatRight: 'Float Right',
+      floatNone: 'Remove float',
+      shapeRounded: 'Shape: Rounded',
+      shapeCircle: 'Shape: Circle',
+      shapeThumbnail: 'Shape: Thumbnail',
+      shapeNone: 'Shape: None',
+      dragImageHere: 'Drag image or text here',
+      dropImage: 'Drop image or Text',
+      selectFromFiles: 'Select from files',
+      maximumFileSize: 'Maximum file size',
+      maximumFileSizeError: 'Maximum file size exceeded.',
+      url: 'Image URL',
+      remove: 'Remove Image',
+      original: 'Original'
+    },
+    video: {
+      video: 'Video',
+      videoLink: 'Video Link',
+      insert: 'Insert Video',
+      url: 'Video URL',
+      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)'
+    },
+    link: {
+      link: 'Link',
+      insert: 'Insert Link',
+      unlink: 'Unlink',
+      edit: 'Edit',
+      textToDisplay: 'Text to display',
+      url: 'To what URL should this link go?',
+      openInNewWindow: 'Open in new window'
+    },
+    table: {
+      table: 'Table',
+      addRowAbove: 'Add row above',
+      addRowBelow: 'Add row below',
+      addColLeft: 'Add column left',
+      addColRight: 'Add column right',
+      delRow: 'Delete row',
+      delCol: 'Delete column',
+      delTable: 'Delete table'
+    },
+    hr: {
+      insert: 'Insert Horizontal Rule'
+    },
+    style: {
+      style: 'Style',
+      p: 'Normal',
+      blockquote: 'Quote',
+      pre: 'Code',
+      h1: 'Header 1',
+      h2: 'Header 2',
+      h3: 'Header 3',
+      h4: 'Header 4',
+      h5: 'Header 5',
+      h6: 'Header 6'
+    },
+    lists: {
+      unordered: 'Unordered list',
+      ordered: 'Ordered list'
+    },
+    options: {
+      help: 'Help',
+      fullscreen: 'Full Screen',
+      codeview: 'Code View'
+    },
+    paragraph: {
+      paragraph: 'Paragraph',
+      outdent: 'Outdent',
+      indent: 'Indent',
+      left: 'Align left',
+      center: 'Align center',
+      right: 'Align right',
+      justify: 'Justify full'
+    },
+    color: {
+      recent: 'Recent Color',
+      more: 'More Color',
+      background: 'Background Color',
+      foreground: 'Text Color',
+      transparent: 'Transparent',
+      setTransparent: 'Set transparent',
+      reset: 'Reset',
+      resetToDefault: 'Reset to default',
+      cpSelect: 'Select'
+    },
+    shortcut: {
+      shortcuts: 'Keyboard shortcuts',
+      close: 'Close',
+      textFormatting: 'Text formatting',
+      action: 'Action',
+      paragraphFormatting: 'Paragraph formatting',
+      documentStyle: 'Document Style',
+      extraKeys: 'Extra keys'
+    },
+    help: {
+      'escape': 'Escape',
+      'insertParagraph': 'Insert Paragraph',
+      'undo': 'Undo the last command',
+      'redo': 'Redo the last command',
+      'tab': 'Tab',
+      'untab': 'Untab',
+      'bold': 'Set a bold style',
+      'italic': 'Set a italic style',
+      'underline': 'Set a underline style',
+      'strikethrough': 'Set a strikethrough style',
+      'removeFormat': 'Clean a style',
+      'justifyLeft': 'Set left align',
+      'justifyCenter': 'Set center align',
+      'justifyRight': 'Set right align',
+      'justifyFull': 'Set full align',
+      'insertUnorderedList': 'Toggle unordered list',
+      'insertOrderedList': 'Toggle ordered list',
+      'outdent': 'Outdent on current paragraph',
+      'indent': 'Indent on current paragraph',
+      'formatPara': 'Change current block\'s format as a paragraph(P tag)',
+      'formatH1': 'Change current block\'s format as H1',
+      'formatH2': 'Change current block\'s format as H2',
+      'formatH3': 'Change current block\'s format as H3',
+      'formatH4': 'Change current block\'s format as H4',
+      'formatH5': 'Change current block\'s format as H5',
+      'formatH6': 'Change current block\'s format as H6',
+      'insertHorizontalRule': 'Insert horizontal rule',
+      'linkDialog.show': 'Show Link Dialog'
+    },
+    history: {
+      undo: 'Undo',
+      redo: 'Redo'
+    },
+    specialChar: {
+      specialChar: 'SPECIAL CHARACTERS',
+      select: 'Select Special characters'
+    },
+    output: {
+      noSelection: 'No Selection Made!'
+    }
+  }
+});
+
+/***/ }),
+
+/***/ 8938:
+/***/ ((module) => {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__8938__;
+
+/***/ })
+
+/******/       });
+/************************************************************************/
+/******/       // The module cache
+/******/       var __webpack_module_cache__ = {};
+/******/       
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/               // Check if module is in cache
+/******/               var cachedModule = __webpack_module_cache__[moduleId];
+/******/               if (cachedModule !== undefined) {
+/******/                       return cachedModule.exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = __webpack_module_cache__[moduleId] = {
+/******/                       // no module.id needed
+/******/                       // no module.loaded needed
+/******/                       exports: {}
+/******/               };
+/******/       
+/******/               // Execute the module function
+/******/               __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/       
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/       
+/************************************************************************/
+/******/       /* webpack/runtime/compat get default export */
+/******/       (() => {
+/******/               // getDefaultExport function for compatibility with non-harmony modules
+/******/               __webpack_require__.n = (module) => {
+/******/                       var getter = module && module.__esModule ?
+/******/                               () => (module['default']) :
+/******/                               () => (module);
+/******/                       __webpack_require__.d(getter, { a: getter });
+/******/                       return getter;
+/******/               };
+/******/       })();
+/******/       
+/******/       /* webpack/runtime/define property getters */
+/******/       (() => {
+/******/               // define getter functions for harmony exports
+/******/               __webpack_require__.d = (exports, definition) => {
+/******/                       for(var key in definition) {
+/******/                               if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/                                       Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/                               }
+/******/                       }
+/******/               };
+/******/       })();
+/******/       
+/******/       /* webpack/runtime/hasOwnProperty shorthand */
+/******/       (() => {
+/******/               __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/       })();
+/******/       
+/************************************************************************/
+var __webpack_exports__ = {};
+
+// EXTERNAL MODULE: external {"root":"jQuery","commonjs":"jquery","commonjs2":"jquery","amd":"jquery"}
+var external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_ = __webpack_require__(8938);
+var external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default = /*#__PURE__*/__webpack_require__.n(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_);
+// EXTERNAL MODULE: ./src/lang/summernote-en-US.js
+var summernote_en_US = __webpack_require__(7000);
+;// CONCATENATED MODULE: ./src/js/core/env.js
+
+
+/**
+ * returns whether font is installed or not.
+ *
+ * @param {String} fontName
+ * @return {Boolean}
+ */
+var genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];
+function validFontName(fontName) {
+  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().inArray(fontName.toLowerCase(), genericFontFamilies) === -1 ? "'".concat(fontName, "'") : fontName;
+}
+function createIsFontInstalledFunc() {
+  var testText = "mw";
+  var fontSize = "20px";
+  var canvasWidth = 40;
+  var canvasHeight = 20;
+  var canvas = document.createElement("canvas");
+  var context = canvas.getContext("2d", {
+    willReadFrequently: true
+  });
+  canvas.width = canvasWidth;
+  canvas.height = canvasHeight;
+  context.textAlign = "center";
+  context.fillStyle = "black";
+  context.textBaseline = "middle";
+  function getPxInfo(font, testFontName) {
+    context.clearRect(0, 0, canvasWidth, canvasHeight);
+    context.font = fontSize + ' ' + validFontName(font) + ', "' + testFontName + '"';
+    context.fillText(testText, canvasWidth / 2, canvasHeight / 2);
+    // Get pixel information
+    var pxInfo = context.getImageData(0, 0, canvasWidth, canvasHeight).data;
+    return pxInfo.join("");
+  }
+  return function (fontName) {
+    var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';
+    var testInfo = getPxInfo(testFontName, testFontName);
+    var fontInfo = getPxInfo(fontName, testFontName);
+    return testInfo !== fontInfo;
+  };
+}
+var userAgent = navigator.userAgent;
+var isMSIE = /MSIE|Trident/i.test(userAgent);
+var browserVersion;
+if (isMSIE) {
+  var matches = /MSIE (\d+[.]\d+)/.exec(userAgent);
+  if (matches) {
+    browserVersion = parseFloat(matches[1]);
+  }
+  matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);
+  if (matches) {
+    browserVersion = parseFloat(matches[1]);
+  }
+}
+var isEdge = /Edge\/\d+/.test(userAgent);
+var isSupportTouch = 'ontouchstart' in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
+
+// [workaround] IE doesn't have input events for contentEditable
+// - see: https://goo.gl/4bfIvA
+var inputEventName = isMSIE ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';
+
+/**
+ * @class core.env
+ *
+ * Object which check platform and agent
+ *
+ * @singleton
+ * @alternateClassName env
+ */
+/* harmony default export */ const env = ({
+  isMac: navigator.appVersion.indexOf('Mac') > -1,
+  isMSIE: isMSIE,
+  isEdge: isEdge,
+  isFF: !isEdge && /firefox/i.test(userAgent),
+  isPhantom: /PhantomJS/i.test(userAgent),
+  isWebkit: !isEdge && /webkit/i.test(userAgent),
+  isChrome: !isEdge && /chrome/i.test(userAgent),
+  isSafari: !isEdge && /safari/i.test(userAgent) && !/chrome/i.test(userAgent),
+  browserVersion: browserVersion,
+  isSupportTouch: isSupportTouch,
+  isFontInstalled: createIsFontInstalledFunc(),
+  isW3CRangeSupport: !!document.createRange,
+  inputEventName: inputEventName,
+  genericFontFamilies: genericFontFamilies,
+  validFontName: validFontName
+});
+;// CONCATENATED MODULE: ./src/js/core/func.js
+
+
+/**
+ * @class core.func
+ *
+ * func utils (for high-order func's arg)
+ *
+ * @singleton
+ * @alternateClassName func
+ */
+function eq(itemA) {
+  return function (itemB) {
+    return itemA === itemB;
+  };
+}
+function eq2(itemA, itemB) {
+  return itemA === itemB;
+}
+function peq2(propName) {
+  return function (itemA, itemB) {
+    return itemA[propName] === itemB[propName];
+  };
+}
+function ok() {
+  return true;
+}
+function fail() {
+  return false;
+}
+function not(f) {
+  return function () {
+    return !f.apply(f, arguments);
+  };
+}
+function and(fA, fB) {
+  return function (item) {
+    return fA(item) && fB(item);
+  };
+}
+function func_self(a) {
+  return a;
+}
+function invoke(obj, method) {
+  return function () {
+    return obj[method].apply(obj, arguments);
+  };
+}
+var idCounter = 0;
+
+/**
+ * reset globally-unique id
+ *
+ */
+function resetUniqueId() {
+  idCounter = 0;
+}
+
+/**
+ * generate a globally-unique id
+ *
+ * @param {String} [prefix]
+ */
+function uniqueId(prefix) {
+  var id = ++idCounter + '';
+  return prefix ? prefix + id : id;
+}
+
+/**
+ * returns bnd (bounds) from rect
+ *
+ * - IE Compatibility Issue: http://goo.gl/sRLOAo
+ * - Scroll Issue: http://goo.gl/sNjUc
+ *
+ * @param {Rect} rect
+ * @return {Object} bounds
+ * @return {Number} bounds.top
+ * @return {Number} bounds.left
+ * @return {Number} bounds.width
+ * @return {Number} bounds.height
+ */
+function rect2bnd(rect) {
+  var $document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);
+  return {
+    top: rect.top + $document.scrollTop(),
+    left: rect.left + $document.scrollLeft(),
+    width: rect.right - rect.left,
+    height: rect.bottom - rect.top
+  };
+}
+
+/**
+ * returns a copy of the object where the keys have become the values and the values the keys.
+ * @param {Object} obj
+ * @return {Object}
+ */
+function invertObject(obj) {
+  var inverted = {};
+  for (var key in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, key)) {
+      inverted[obj[key]] = key;
+    }
+  }
+  return inverted;
+}
+
+/**
+ * @param {String} namespace
+ * @param {String} [prefix]
+ * @return {String}
+ */
+function namespaceToCamel(namespace, prefix) {
+  prefix = prefix || '';
+  return prefix + namespace.split('.').map(function (name) {
+    return name.substring(0, 1).toUpperCase() + name.substring(1);
+  }).join('');
+}
+
+/**
+ * Returns a function, that, as long as it continues to be invoked, will not
+ * be triggered. The function will be called after it stops being called for
+ * N milliseconds. If `immediate` is passed, trigger the function on the
+ * leading edge, instead of the trailing.
+ * @param {Function} func
+ * @param {Number} wait
+ * @param {Boolean} immediate
+ * @return {Function}
+ */
+function debounce(func, wait, immediate) {
+  var timeout;
+  return function () {
+    var context = this;
+    var args = arguments;
+    var later = function later() {
+      timeout = null;
+      if (!immediate) {
+        func.apply(context, args);
+      }
+    };
+    var callNow = immediate && !timeout;
+    clearTimeout(timeout);
+    timeout = setTimeout(later, wait);
+    if (callNow) {
+      func.apply(context, args);
+    }
+  };
+}
+
+/**
+ *
+ * @param {String} url
+ * @return {Boolean}
+ */
+function isValidUrl(url) {
+  var expression = /[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gi;
+  return expression.test(url);
+}
+/* harmony default export */ const func = ({
+  eq: eq,
+  eq2: eq2,
+  peq2: peq2,
+  ok: ok,
+  fail: fail,
+  self: func_self,
+  not: not,
+  and: and,
+  invoke: invoke,
+  resetUniqueId: resetUniqueId,
+  uniqueId: uniqueId,
+  rect2bnd: rect2bnd,
+  invertObject: invertObject,
+  namespaceToCamel: namespaceToCamel,
+  debounce: debounce,
+  isValidUrl: isValidUrl
+});
+;// CONCATENATED MODULE: ./src/js/core/lists.js
+
+
+/**
+ * returns the first item of an array.
+ *
+ * @param {Array} array
+ */
+function head(array) {
+  return array[0];
+}
+
+/**
+ * returns the last item of an array.
+ *
+ * @param {Array} array
+ */
+function last(array) {
+  return array[array.length - 1];
+}
+
+/**
+ * returns everything but the last entry of the array.
+ *
+ * @param {Array} array
+ */
+function initial(array) {
+  return array.slice(0, array.length - 1);
+}
+
+/**
+ * returns the rest of the items in an array.
+ *
+ * @param {Array} array
+ */
+function tail(array) {
+  return array.slice(1);
+}
+
+/**
+ * returns item of array
+ */
+function find(array, pred) {
+  for (var idx = 0, len = array.length; idx < len; idx++) {
+    var item = array[idx];
+    if (pred(item)) {
+      return item;
+    }
+  }
+}
+
+/**
+ * returns true if all of the values in the array pass the predicate truth test.
+ */
+function lists_all(array, pred) {
+  for (var idx = 0, len = array.length; idx < len; idx++) {
+    if (!pred(array[idx])) {
+      return false;
+    }
+  }
+  return true;
+}
+
+/**
+ * returns true if the value is present in the list.
+ */
+function contains(array, item) {
+  if (array && array.length && item) {
+    if (array.indexOf) {
+      return array.indexOf(item) !== -1;
+    } else if (array.contains) {
+      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`
+      return array.contains(item);
+    }
+  }
+  return false;
+}
+
+/**
+ * get sum from a list
+ *
+ * @param {Array} array - array
+ * @param {Function} fn - iterator
+ */
+function sum(array, fn) {
+  fn = fn || func.self;
+  return array.reduce(function (memo, v) {
+    return memo + fn(v);
+  }, 0);
+}
+
+/**
+ * returns a copy of the collection with array type.
+ * @param {Collection} collection - collection eg) node.childNodes, ...
+ */
+function from(collection) {
+  var result = [];
+  var length = collection.length;
+  var idx = -1;
+  while (++idx < length) {
+    result[idx] = collection[idx];
+  }
+  return result;
+}
+
+/**
+ * returns whether list is empty or not
+ */
+function isEmpty(array) {
+  return !array || !array.length;
+}
+
+/**
+ * cluster elements by predicate function.
+ *
+ * @param {Array} array - array
+ * @param {Function} fn - predicate function for cluster rule
+ * @param {Array[]}
+ */
+function clusterBy(array, fn) {
+  if (!array.length) {
+    return [];
+  }
+  var aTail = tail(array);
+  return aTail.reduce(function (memo, v) {
+    var aLast = last(memo);
+    if (fn(last(aLast), v)) {
+      aLast[aLast.length] = v;
+    } else {
+      memo[memo.length] = [v];
+    }
+    return memo;
+  }, [[head(array)]]);
+}
+
+/**
+ * returns a copy of the array with all false values removed
+ *
+ * @param {Array} array - array
+ * @param {Function} fn - predicate function for cluster rule
+ */
+function compact(array) {
+  var aResult = [];
+  for (var idx = 0, len = array.length; idx < len; idx++) {
+    if (array[idx]) {
+      aResult.push(array[idx]);
+    }
+  }
+  return aResult;
+}
+
+/**
+ * produces a duplicate-free version of the array
+ *
+ * @param {Array} array
+ */
+function unique(array) {
+  var results = [];
+  for (var idx = 0, len = array.length; idx < len; idx++) {
+    if (!contains(results, array[idx])) {
+      results.push(array[idx]);
+    }
+  }
+  return results;
+}
+
+/**
+ * returns next item.
+ * @param {Array} array
+ */
+function next(array, item) {
+  if (array && array.length && item) {
+    var idx = array.indexOf(item);
+    return idx === -1 ? null : array[idx + 1];
+  }
+  return null;
+}
+
+/**
+ * returns prev item.
+ * @param {Array} array
+ */
+function prev(array, item) {
+  if (array && array.length && item) {
+    var idx = array.indexOf(item);
+    return idx === -1 ? null : array[idx - 1];
+  }
+  return null;
+}
+
+/**
+ * @class core.list
+ *
+ * list utils
+ *
+ * @singleton
+ * @alternateClassName list
+ */
+/* harmony default export */ const lists = ({
+  head: head,
+  last: last,
+  initial: initial,
+  tail: tail,
+  prev: prev,
+  next: next,
+  find: find,
+  contains: contains,
+  all: lists_all,
+  sum: sum,
+  from: from,
+  isEmpty: isEmpty,
+  clusterBy: clusterBy,
+  compact: compact,
+  unique: unique
+});
+;// CONCATENATED MODULE: ./src/js/core/dom.js
+
+
+
+
+var NBSP_CHAR = String.fromCharCode(160);
+var ZERO_WIDTH_NBSP_CHAR = "\uFEFF";
+
+/**
+ * @method isEditable
+ *
+ * returns whether node is `note-editable` or not.
+ *
+ * @param {Node} node
+ * @return {Boolean}
+ */
+function isEditable(node) {
+  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-editable');
+}
+
+/**
+ * @method isControlSizing
+ *
+ * returns whether node is `note-control-sizing` or not.
+ *
+ * @param {Node} node
+ * @return {Boolean}
+ */
+function isControlSizing(node) {
+  return node && external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).hasClass('note-control-sizing');
+}
+
+/**
+ * @method makePredByNodeName
+ *
+ * returns predicate which judge whether nodeName is same
+ *
+ * @param {String} nodeName
+ * @return {Function}
+ */
+function makePredByNodeName(nodeName) {
+  nodeName = nodeName.toUpperCase();
+  return function (node) {
+    return node && node.nodeName.toUpperCase() === nodeName;
+  };
+}
+
+/**
+ * @method isText
+ *
+ *
+ *
+ * @param {Node} node
+ * @return {Boolean} true if node's type is text(3)
+ */
+function isText(node) {
+  return node && node.nodeType === 3;
+}
+
+/**
+ * @method isElement
+ *
+ *
+ *
+ * @param {Node} node
+ * @return {Boolean} true if node's type is element(1)
+ */
+function isElement(node) {
+  return node && node.nodeType === 1;
+}
+
+/**
+ * ex) br, col, embed, hr, img, input, ...
+ * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements
+ */
+function isVoid(node) {
+  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());
+}
+function isPara(node) {
+  if (isEditable(node)) {
+    return false;
+  }
+
+  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph
+  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());
+}
+function isHeading(node) {
+  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());
+}
+var isPre = makePredByNodeName('PRE');
+var isLi = makePredByNodeName('LI');
+function isPurePara(node) {
+  return isPara(node) && !isLi(node);
+}
+var isTable = makePredByNodeName('TABLE');
+var isData = makePredByNodeName('DATA');
+function isInline(node) {
+  return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node);
+}
+function isList(node) {
+  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());
+}
+var isHr = makePredByNodeName('HR');
+function isCell(node) {
+  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());
+}
+var isBlockquote = makePredByNodeName('BLOCKQUOTE');
+function isBodyContainer(node) {
+  return isCell(node) || isBlockquote(node) || isEditable(node);
+}
+var isAnchor = makePredByNodeName('A');
+function isParaInline(node) {
+  return isInline(node) && !!ancestor(node, isPara);
+}
+function isBodyInline(node) {
+  return isInline(node) && !ancestor(node, isPara);
+}
+var isBody = makePredByNodeName('BODY');
+
+/**
+ * returns whether nodeB is closest sibling of nodeA
+ *
+ * @param {Node} nodeA
+ * @param {Node} nodeB
+ * @return {Boolean}
+ */
+function isClosestSibling(nodeA, nodeB) {
+  return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB;
+}
+
+/**
+ * returns array of closest siblings with node
+ *
+ * @param {Node} node
+ * @param {function} [pred] - predicate function
+ * @return {Node[]}
+ */
+function withClosestSiblings(node, pred) {
+  pred = pred || func.ok;
+  var siblings = [];
+  if (node.previousSibling && pred(node.previousSibling)) {
+    siblings.push(node.previousSibling);
+  }
+  siblings.push(node);
+  if (node.nextSibling && pred(node.nextSibling)) {
+    siblings.push(node.nextSibling);
+  }
+  return siblings;
+}
+
+/**
+ * blank HTML for cursor position
+ * - [workaround] old IE only works with &nbsp;
+ * - [workaround] IE11 and other browser works with bogus br
+ */
+var blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';
+
+/**
+ * @method nodeLength
+ *
+ * returns #text's text size or element's childNodes size
+ *
+ * @param {Node} node
+ */
+function nodeLength(node) {
+  if (isText(node)) {
+    return node.nodeValue.length;
+  }
+  if (node) {
+    return node.childNodes.length;
+  }
+  return 0;
+}
+
+/**
+ * returns whether deepest child node is empty or not.
+ *
+ * @param {Node} node
+ * @return {Boolean}
+ */
+function deepestChildIsEmpty(node) {
+  do {
+    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;
+  } while (node = node.firstElementChild);
+  return dom_isEmpty(node);
+}
+
+/**
+ * returns whether node is empty or not.
+ *
+ * @param {Node} node
+ * @return {Boolean}
+ */
+function dom_isEmpty(node) {
+  var len = nodeLength(node);
+  if (len === 0) {
+    return true;
+  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {
+    // ex) <p><br></p>, <span><br></span>
+    return true;
+  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {
+    // ex) <p></p>, <span></span>
+    return true;
+  }
+  return false;
+}
+
+/**
+ * padding blankHTML if node is empty (for cursor position)
+ */
+function paddingBlankHTML(node) {
+  if (!isVoid(node) && !nodeLength(node)) {
+    node.innerHTML = blankHTML;
+  }
+}
+
+/**
+ * find nearest ancestor predicate hit
+ *
+ * @param {Node} node
+ * @param {Function} pred - predicate function
+ */
+function ancestor(node, pred) {
+  while (node) {
+    if (pred(node)) {
+      return node;
+    }
+    if (isEditable(node)) {
+      break;
+    }
+    node = node.parentNode;
+  }
+  return null;
+}
+
+/**
+ * find nearest ancestor only single child blood line and predicate hit
+ *
+ * @param {Node} node
+ * @param {Function} pred - predicate function
+ */
+function singleChildAncestor(node, pred) {
+  node = node.parentNode;
+  while (node) {
+    if (nodeLength(node) !== 1) {
+      break;
+    }
+    if (pred(node)) {
+      return node;
+    }
+    if (isEditable(node)) {
+      break;
+    }
+    node = node.parentNode;
+  }
+  return null;
+}
+
+/**
+ * returns new array of ancestor nodes (until predicate hit).
+ *
+ * @param {Node} node
+ * @param {Function} [optional] pred - predicate function
+ */
+function listAncestor(node, pred) {
+  pred = pred || func.fail;
+  var ancestors = [];
+  ancestor(node, function (el) {
+    if (!isEditable(el)) {
+      ancestors.push(el);
+    }
+    return pred(el);
+  });
+  return ancestors;
+}
+
+/**
+ * find farthest ancestor predicate hit
+ */
+function lastAncestor(node, pred) {
+  var ancestors = listAncestor(node);
+  return lists.last(ancestors.filter(pred));
+}
+
+/**
+ * returns common ancestor node between two nodes.
+ *
+ * @param {Node} nodeA
+ * @param {Node} nodeB
+ */
+function commonAncestor(nodeA, nodeB) {
+  var ancestors = listAncestor(nodeA);
+  for (var n = nodeB; n; n = n.parentNode) {
+    if (ancestors.indexOf(n) > -1) return n;
+  }
+  return null; // difference document area
+}
+
+/**
+ * listing all previous siblings (until predicate hit).
+ *
+ * @param {Node} node
+ * @param {Function} [optional] pred - predicate function
+ */
+function listPrev(node, pred) {
+  pred = pred || func.fail;
+  var nodes = [];
+  while (node) {
+    if (pred(node)) {
+      break;
+    }
+    nodes.push(node);
+    node = node.previousSibling;
+  }
+  return nodes;
+}
+
+/**
+ * listing next siblings (until predicate hit).
+ *
+ * @param {Node} node
+ * @param {Function} [pred] - predicate function
+ */
+function listNext(node, pred) {
+  pred = pred || func.fail;
+  var nodes = [];
+  while (node) {
+    if (pred(node)) {
+      break;
+    }
+    nodes.push(node);
+    node = node.nextSibling;
+  }
+  return nodes;
+}
+
+/**
+ * listing descendant nodes
+ *
+ * @param {Node} node
+ * @param {Function} [pred] - predicate function
+ */
+function listDescendant(node, pred) {
+  var descendants = [];
+  pred = pred || func.ok;
+
+  // start DFS(depth first search) with node
+  (function fnWalk(current) {
+    if (node !== current && pred(current)) {
+      descendants.push(current);
+    }
+    for (var idx = 0, len = current.childNodes.length; idx < len; idx++) {
+      fnWalk(current.childNodes[idx]);
+    }
+  })(node);
+  return descendants;
+}
+
+/**
+ * wrap node with new tag.
+ *
+ * @param {Node} node
+ * @param {Node} tagName of wrapper
+ * @return {Node} - wrapper
+ */
+function wrap(node, wrapperName) {
+  var parent = node.parentNode;
+  var wrapper = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<' + wrapperName + '>')[0];
+  parent.insertBefore(wrapper, node);
+  wrapper.appendChild(node);
+  return wrapper;
+}
+
+/**
+ * insert node after preceding
+ *
+ * @param {Node} node
+ * @param {Node} preceding - predicate function
+ */
+function insertAfter(node, preceding) {
+  var next = preceding.nextSibling;
+  var parent = preceding.parentNode;
+  if (next) {
+    parent.insertBefore(node, next);
+  } else {
+    parent.appendChild(node);
+  }
+  return node;
+}
+
+/**
+ * append elements.
+ *
+ * @param {Node} node
+ * @param {Collection} aChild
+ */
+function appendChildNodes(node, aChild, isSkipPaddingBlankHTML) {
+  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(aChild, function (idx, child) {
+    // special case: appending a pure UL/OL to a LI element creates inaccessible LI element
+    // e.g. press enter in last LI which has UL/OL-subelements
+    // Therefore, if current node is LI element with no child nodes (text-node) and appending a list, add a br before
+    if (!isSkipPaddingBlankHTML && isLi(node) && node.firstChild === null && isList(child)) {
+      node.appendChild(create("br"));
+    }
+    node.appendChild(child);
+  });
+  return node;
+}
+
+/**
+ * returns whether boundaryPoint is left edge or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+function isLeftEdgePoint(point) {
+  return point.offset === 0;
+}
+
+/**
+ * returns whether boundaryPoint is right edge or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+function isRightEdgePoint(point) {
+  return point.offset === nodeLength(point.node);
+}
+
+/**
+ * returns whether boundaryPoint is edge or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+function isEdgePoint(point) {
+  return isLeftEdgePoint(point) || isRightEdgePoint(point);
+}
+
+/**
+ * returns whether node is left edge of ancestor or not.
+ *
+ * @param {Node} node
+ * @param {Node} ancestor
+ * @return {Boolean}
+ */
+function isLeftEdgeOf(node, ancestor) {
+  while (node && node !== ancestor) {
+    if (position(node) !== 0) {
+      return false;
+    }
+    node = node.parentNode;
+  }
+  return true;
+}
+
+/**
+ * returns whether node is right edge of ancestor or not.
+ *
+ * @param {Node} node
+ * @param {Node} ancestor
+ * @return {Boolean}
+ */
+function isRightEdgeOf(node, ancestor) {
+  if (!ancestor) {
+    return false;
+  }
+  while (node && node !== ancestor) {
+    if (position(node) !== nodeLength(node.parentNode) - 1) {
+      return false;
+    }
+    node = node.parentNode;
+  }
+  return true;
+}
+
+/**
+ * returns whether point is left edge of ancestor or not.
+ * @param {BoundaryPoint} point
+ * @param {Node} ancestor
+ * @return {Boolean}
+ */
+function isLeftEdgePointOf(point, ancestor) {
+  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);
+}
+
+/**
+ * returns whether point is right edge of ancestor or not.
+ * @param {BoundaryPoint} point
+ * @param {Node} ancestor
+ * @return {Boolean}
+ */
+function isRightEdgePointOf(point, ancestor) {
+  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);
+}
+
+/**
+ * returns offset from parent.
+ *
+ * @param {Node} node
+ */
+function position(node) {
+  var offset = 0;
+  while (node = node.previousSibling) {
+    offset += 1;
+  }
+  return offset;
+}
+function hasChildren(node) {
+  return !!(node && node.childNodes && node.childNodes.length);
+}
+
+/**
+ * returns previous boundaryPoint
+ *
+ * @param {BoundaryPoint} point
+ * @param {Boolean} isSkipInnerOffset
+ * @return {BoundaryPoint}
+ */
+function prevPoint(point, isSkipInnerOffset) {
+  var node;
+  var offset;
+  if (point.offset === 0) {
+    if (isEditable(point.node)) {
+      return null;
+    }
+    node = point.node.parentNode;
+    offset = position(point.node);
+  } else if (hasChildren(point.node)) {
+    node = point.node.childNodes[point.offset - 1];
+    offset = nodeLength(node);
+  } else {
+    node = point.node;
+    offset = isSkipInnerOffset ? 0 : point.offset - 1;
+  }
+  return {
+    node: node,
+    offset: offset
+  };
+}
+
+/**
+ * returns next boundaryPoint
+ *
+ * @param {BoundaryPoint} point
+ * @param {Boolean} isSkipInnerOffset
+ * @return {BoundaryPoint}
+ */
+function nextPoint(point, isSkipInnerOffset) {
+  var node, offset;
+  if (nodeLength(point.node) === point.offset) {
+    if (isEditable(point.node)) {
+      return null;
+    }
+    var nextTextNode = getNextTextNode(point.node);
+    if (nextTextNode) {
+      node = nextTextNode;
+      offset = 0;
+    } else {
+      node = point.node.parentNode;
+      offset = position(point.node) + 1;
+    }
+  } else if (hasChildren(point.node)) {
+    node = point.node.childNodes[point.offset];
+    offset = 0;
+  } else {
+    node = point.node;
+    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;
+  }
+  return {
+    node: node,
+    offset: offset
+  };
+}
+
+/**
+ * Find next boundaryPoint for preorder / depth first traversal of the DOM
+ * returns next boundaryPoint with empty node
+ *
+ * @param {BoundaryPoint} point
+ * @param {Boolean} isSkipInnerOffset
+ * @return {BoundaryPoint}
+ */
+function nextPointWithEmptyNode(point, isSkipInnerOffset) {
+  var node,
+    offset = 0;
+  if (nodeLength(point.node) === point.offset) {
+    if (isEditable(point.node)) {
+      return null;
+    }
+    node = point.node.parentNode;
+    offset = position(point.node) + 1;
+
+    // if parent node is editable,  return current node's sibling node.
+    if (isEditable(node)) {
+      node = point.node.nextSibling;
+      offset = 0;
+    }
+  } else if (hasChildren(point.node)) {
+    node = point.node.childNodes[point.offset];
+    offset = 0;
+  } else {
+    node = point.node;
+    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;
+  }
+  return {
+    node: node,
+    offset: offset
+  };
+}
+
+/*
+* returns the next Text node index or 0 if not found.
+*/
+function getNextTextNode(actual) {
+  if (!actual.nextSibling) return undefined;
+  if (actual.parent !== actual.nextSibling.parent) return undefined;
+  if (isText(actual.nextSibling)) return actual.nextSibling;else return getNextTextNode(actual.nextSibling);
+}
+
+/**
+ * returns whether pointA and pointB is same or not.
+ *
+ * @param {BoundaryPoint} pointA
+ * @param {BoundaryPoint} pointB
+ * @return {Boolean}
+ */
+function isSamePoint(pointA, pointB) {
+  return pointA.node === pointB.node && pointA.offset === pointB.offset;
+}
+
+/**
+ * returns whether point is visible (can set cursor) or not.
+ *
+ * @param {BoundaryPoint} point
+ * @return {Boolean}
+ */
+function isVisiblePoint(point) {
+  if (isText(point.node) || !hasChildren(point.node) || dom_isEmpty(point.node)) {
+    return true;
+  }
+  var leftNode = point.node.childNodes[point.offset - 1];
+  var rightNode = point.node.childNodes[point.offset];
+  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode)) || isTable(rightNode)) {
+    return true;
+  }
+  return false;
+}
+
+/**
+ * @method prevPointUtil
+ *
+ * @param {BoundaryPoint} point
+ * @param {Function} pred
+ * @return {BoundaryPoint}
+ */
+function prevPointUntil(point, pred) {
+  while (point) {
+    if (pred(point)) {
+      return point;
+    }
+    point = prevPoint(point);
+  }
+  return null;
+}
+
+/**
+ * @method nextPointUntil
+ *
+ * @param {BoundaryPoint} point
+ * @param {Function} pred
+ * @return {BoundaryPoint}
+ */
+function nextPointUntil(point, pred) {
+  while (point) {
+    if (pred(point)) {
+      return point;
+    }
+    point = nextPoint(point);
+  }
+  return null;
+}
+
+/**
+ * returns whether point has character or not.
+ *
+ * @param {Point} point
+ * @return {Boolean}
+ */
+function isCharPoint(point) {
+  if (!isText(point.node)) {
+    return false;
+  }
+  var ch = point.node.nodeValue.charAt(point.offset - 1);
+  return ch && ch !== ' ' && ch !== NBSP_CHAR;
+}
+
+/**
+ * returns whether point has space or not.
+ *
+ * @param {Point} point
+ * @return {Boolean}
+ */
+function isSpacePoint(point) {
+  if (!isText(point.node)) {
+    return false;
+  }
+  var ch = point.node.nodeValue.charAt(point.offset - 1);
+  return ch === ' ' || ch === NBSP_CHAR;
+}
+
+/**
+ * @method walkPoint - preorder / depth first traversal of the DOM
+ *
+ * @param {BoundaryPoint} startPoint
+ * @param {BoundaryPoint} endPoint
+ * @param {Function} handler
+ * @param {Boolean} isSkipInnerOffset
+ */
+function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {
+  var point = startPoint;
+  while (point && point.node) {
+    handler(point);
+    if (isSamePoint(point, endPoint)) {
+      break;
+    }
+    var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node;
+    point = nextPointWithEmptyNode(point, isSkipOffset);
+  }
+}
+
+/**
+ * @method makeOffsetPath
+ *
+ * return offsetPath(array of offset) from ancestor
+ *
+ * @param {Node} ancestor - ancestor node
+ * @param {Node} node
+ */
+function makeOffsetPath(ancestor, node) {
+  var ancestors = listAncestor(node, func.eq(ancestor));
+  return ancestors.map(position).reverse();
+}
+
+/**
+ * @method fromOffsetPath
+ *
+ * return element from offsetPath(array of offset)
+ *
+ * @param {Node} ancestor - ancestor node
+ * @param {array} offsets - offsetPath
+ */
+function fromOffsetPath(ancestor, offsets) {
+  var current = ancestor;
+  for (var i = 0, len = offsets.length; i < len; i++) {
+    if (current.childNodes.length <= offsets[i]) {
+      current = current.childNodes[current.childNodes.length - 1];
+    } else {
+      current = current.childNodes[offsets[i]];
+    }
+  }
+  return current;
+}
+
+/**
+ * @method splitNode
+ *
+ * split element or #text
+ *
+ * @param {BoundaryPoint} point
+ * @param {Object} [options]
+ * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false
+ * @param {Boolean} [options.isNotSplitEdgePoint] - default: false
+ * @param {Boolean} [options.isDiscardEmptySplits] - default: false
+ * @return {Node} right node of boundaryPoint
+ */
+function splitNode(point, options) {
+  var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;
+  var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;
+  var isDiscardEmptySplits = options && options.isDiscardEmptySplits;
+  if (isDiscardEmptySplits) {
+    isSkipPaddingBlankHTML = true;
+  }
+
+  // edge case
+  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {
+    if (isLeftEdgePoint(point)) {
+      return point.node;
+    } else if (isRightEdgePoint(point)) {
+      return point.node.nextSibling;
+    }
+  }
+
+  // split #text
+  if (isText(point.node)) {
+    return point.node.splitText(point.offset);
+  } else {
+    var childNode = point.node.childNodes[point.offset];
+    var childNodes = listNext(childNode);
+    var clone = insertAfter(point.node.cloneNode(false), point.node);
+    appendChildNodes(clone, childNodes);
+    if (!isSkipPaddingBlankHTML) {
+      paddingBlankHTML(point.node);
+      paddingBlankHTML(clone);
+    }
+    if (isDiscardEmptySplits) {
+      if (dom_isEmpty(point.node)) {
+        remove(point.node);
+      }
+      if (dom_isEmpty(clone)) {
+        remove(clone);
+        return point.node.nextSibling;
+      }
+    }
+    return clone;
+  }
+}
+
+/**
+ * @method splitTree
+ *
+ * split tree by point
+ *
+ * @param {Node} root - split root
+ * @param {BoundaryPoint} point
+ * @param {Object} [options]
+ * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false
+ * @param {Boolean} [options.isNotSplitEdgePoint] - default: false
+ * @return {Node} right node of boundaryPoint
+ */
+function splitTree(root, point, options) {
+  // ex) [#text, <span>, <p>]
+  var ancestors = listAncestor(point.node, func.eq(root));
+  if (!ancestors.length) {
+    return null;
+  } else if (ancestors.length === 1) {
+    return splitNode(point, options);
+  }
+  // Filter elements with sibling elements
+  if (ancestors.length > 2) {
+    var domList = ancestors.slice(0, ancestors.length - 1);
+    var ifHasNextSibling = domList.find(function (item) {
+      return item.nextSibling;
+    });
+    if (ifHasNextSibling && point.offset != 0 && isRightEdgePoint(point)) {
+      var nestSibling = ifHasNextSibling.nextSibling;
+      var textNode;
+      if (nestSibling.nodeType == 1) {
+        textNode = nestSibling.childNodes[0];
+        ancestors = listAncestor(textNode, func.eq(root));
+        point = {
+          node: textNode,
+          offset: 0
+        };
+      } else if (nestSibling.nodeType == 3 && !nestSibling.data.match(/[\n\r]/g)) {
+        textNode = nestSibling;
+        ancestors = listAncestor(textNode, func.eq(root));
+        point = {
+          node: textNode,
+          offset: 0
+        };
+      }
+    }
+  }
+  return ancestors.reduce(function (node, parent) {
+    if (node === point.node) {
+      node = splitNode(point, options);
+    }
+    return splitNode({
+      node: parent,
+      offset: node ? position(node) : nodeLength(parent)
+    }, options);
+  });
+}
+
+/**
+ * split point
+ *
+ * @param {Point} point
+ * @param {Boolean} isInline
+ * @return {Object}
+ */
+function splitPoint(point, isInline) {
+  // find splitRoot, container
+  //  - inline: splitRoot is a child of paragraph
+  //  - block: splitRoot is a child of bodyContainer
+  var pred = isInline ? isPara : isBodyContainer;
+  var ancestors = listAncestor(point.node, pred);
+  var topAncestor = lists.last(ancestors) || point.node;
+  var splitRoot, container;
+  if (pred(topAncestor)) {
+    splitRoot = ancestors[ancestors.length - 2];
+    container = topAncestor;
+  } else {
+    splitRoot = topAncestor;
+    container = splitRoot.parentNode;
+  }
+
+  // if splitRoot is exists, split with splitTree
+  var pivot = splitRoot && splitTree(splitRoot, point, {
+    isSkipPaddingBlankHTML: isInline,
+    isNotSplitEdgePoint: isInline
+  });
+
+  // if container is point.node, find pivot with point.offset
+  if (!pivot && container === point.node) {
+    pivot = point.node.childNodes[point.offset];
+  }
+  return {
+    rightNode: pivot,
+    container: container
+  };
+}
+function create(nodeName) {
+  return document.createElement(nodeName);
+}
+function createText(text) {
+  return document.createTextNode(text);
+}
+
+/**
+ * @method remove
+ *
+ * remove node, (isRemoveChild: remove child or not)
+ *
+ * @param {Node} node
+ * @param {Boolean} isRemoveChild
+ */
+function remove(node, isRemoveChild) {
+  if (!node || !node.parentNode) {
+    return;
+  }
+  if (node.removeNode) {
+    return node.removeNode(isRemoveChild);
+  }
+  var parent = node.parentNode;
+  if (!isRemoveChild) {
+    var nodes = [];
+    for (var i = 0, len = node.childNodes.length; i < len; i++) {
+      nodes.push(node.childNodes[i]);
+    }
+    for (var _i = 0, _len = nodes.length; _i < _len; _i++) {
+      parent.insertBefore(nodes[_i], node);
+    }
+  }
+  parent.removeChild(node);
+}
+
+/**
+ * @method removeWhile
+ *
+ * @param {Node} node
+ * @param {Function} pred
+ */
+function removeWhile(node, pred) {
+  while (node) {
+    if (isEditable(node) || !pred(node)) {
+      break;
+    }
+    var parent = node.parentNode;
+    remove(node);
+    node = parent;
+  }
+}
+
+/**
+ * @method replace
+ *
+ * replace node with provided nodeName
+ *
+ * @param {Node} node
+ * @param {String} nodeName
+ * @return {Node} - new node
+ */
+function replace(node, nodeName) {
+  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {
+    return node;
+  }
+  var newNode = create(nodeName);
+  if (node.style.cssText) {
+    newNode.style.cssText = node.style.cssText;
+  }
+  appendChildNodes(newNode, lists.from(node.childNodes));
+  insertAfter(newNode, node);
+  remove(node);
+  return newNode;
+}
+var isTextarea = makePredByNodeName('TEXTAREA');
+
+/**
+ * @param {jQuery} $node
+ * @param {Boolean} [stripLinebreaks] - default: false
+ */
+function value($node, stripLinebreaks) {
+  var val = isTextarea($node[0]) ? $node.val() : $node.html();
+  if (stripLinebreaks) {
+    return val.replace(/[\n\r]/g, '');
+  }
+  return val;
+}
+
+/**
+ * @method html
+ *
+ * get the HTML contents of node
+ *
+ * @param {jQuery} $node
+ * @param {Boolean} [isNewlineOnBlock]
+ */
+function html($node, isNewlineOnBlock) {
+  var markup = value($node);
+  if (isNewlineOnBlock) {
+    var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g;
+    markup = markup.replace(regexTag, function (match, endSlash, name) {
+      name = name.toUpperCase();
+      var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash;
+      var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);
+      return match + (isEndOfInlineContainer || isBlockNode ? '\n' : '');
+    });
+    markup = markup.trim();
+  }
+  return markup;
+}
+function posFromPlaceholder(placeholder) {
+  var $placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(placeholder);
+  var pos = $placeholder.offset();
+  var height = $placeholder.outerHeight(true); // include margin
+
+  return {
+    left: pos.left,
+    top: pos.top + height
+  };
+}
+function attachEvents($node, events) {
+  Object.keys(events).forEach(function (key) {
+    $node.on(key, events[key]);
+  });
+}
+function detachEvents($node, events) {
+  Object.keys(events).forEach(function (key) {
+    $node.off(key, events[key]);
+  });
+}
+
+/**
+ * @method isCustomStyleTag
+ *
+ * assert if a node contains a "note-styletag" class,
+ * which implies that's a custom-made style tag node
+ *
+ * @param {Node} an HTML DOM node
+ */
+function isCustomStyleTag(node) {
+  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');
+}
+/* harmony default export */ const dom = ({
+  /** @property {String} NBSP_CHAR */
+  NBSP_CHAR: NBSP_CHAR,
+  /** @property {String} ZERO_WIDTH_NBSP_CHAR */
+  ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR,
+  /** @property {String} blank */
+  blank: blankHTML,
+  /** @property {String} emptyPara */
+  emptyPara: "<p>".concat(blankHTML, "</p>"),
+  makePredByNodeName: makePredByNodeName,
+  isEditable: isEditable,
+  isControlSizing: isControlSizing,
+  isText: isText,
+  isElement: isElement,
+  isVoid: isVoid,
+  isPara: isPara,
+  isPurePara: isPurePara,
+  isHeading: isHeading,
+  isInline: isInline,
+  isBlock: func.not(isInline),
+  isBodyInline: isBodyInline,
+  isBody: isBody,
+  isParaInline: isParaInline,
+  isPre: isPre,
+  isList: isList,
+  isTable: isTable,
+  isData: isData,
+  isCell: isCell,
+  isBlockquote: isBlockquote,
+  isBodyContainer: isBodyContainer,
+  isAnchor: isAnchor,
+  isDiv: makePredByNodeName('DIV'),
+  isLi: isLi,
+  isBR: makePredByNodeName('BR'),
+  isSpan: makePredByNodeName('SPAN'),
+  isB: makePredByNodeName('B'),
+  isU: makePredByNodeName('U'),
+  isS: makePredByNodeName('S'),
+  isI: makePredByNodeName('I'),
+  isImg: makePredByNodeName('IMG'),
+  isTextarea: isTextarea,
+  deepestChildIsEmpty: deepestChildIsEmpty,
+  isEmpty: dom_isEmpty,
+  isEmptyAnchor: func.and(isAnchor, dom_isEmpty),
+  isClosestSibling: isClosestSibling,
+  withClosestSiblings: withClosestSiblings,
+  nodeLength: nodeLength,
+  isLeftEdgePoint: isLeftEdgePoint,
+  isRightEdgePoint: isRightEdgePoint,
+  isEdgePoint: isEdgePoint,
+  isLeftEdgeOf: isLeftEdgeOf,
+  isRightEdgeOf: isRightEdgeOf,
+  isLeftEdgePointOf: isLeftEdgePointOf,
+  isRightEdgePointOf: isRightEdgePointOf,
+  prevPoint: prevPoint,
+  nextPoint: nextPoint,
+  nextPointWithEmptyNode: nextPointWithEmptyNode,
+  isSamePoint: isSamePoint,
+  isVisiblePoint: isVisiblePoint,
+  prevPointUntil: prevPointUntil,
+  nextPointUntil: nextPointUntil,
+  isCharPoint: isCharPoint,
+  isSpacePoint: isSpacePoint,
+  walkPoint: walkPoint,
+  ancestor: ancestor,
+  singleChildAncestor: singleChildAncestor,
+  listAncestor: listAncestor,
+  lastAncestor: lastAncestor,
+  listNext: listNext,
+  listPrev: listPrev,
+  listDescendant: listDescendant,
+  commonAncestor: commonAncestor,
+  wrap: wrap,
+  insertAfter: insertAfter,
+  appendChildNodes: appendChildNodes,
+  position: position,
+  hasChildren: hasChildren,
+  makeOffsetPath: makeOffsetPath,
+  fromOffsetPath: fromOffsetPath,
+  splitTree: splitTree,
+  splitPoint: splitPoint,
+  create: create,
+  createText: createText,
+  remove: remove,
+  removeWhile: removeWhile,
+  replace: replace,
+  html: html,
+  value: value,
+  posFromPlaceholder: posFromPlaceholder,
+  attachEvents: attachEvents,
+  detachEvents: detachEvents,
+  isCustomStyleTag: isCustomStyleTag
+});
+;// CONCATENATED MODULE: ./src/js/Context.js
+function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
+function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
+function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
+function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+var Context = /*#__PURE__*/function () {
+  /**
+   * @param {jQuery} $note
+   * @param {Object} options
+   */
+  function Context($note, options) {
+    _classCallCheck(this, Context);
+    this.$note = $note;
+    this.memos = {};
+    this.modules = {};
+    this.layoutInfo = {};
+    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, options);
+
+    // init ui with options
+    (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().summernote.ui_template(this.options);
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.initialize();
+  }
+
+  /**
+   * create layout and initialize modules and other resources
+   */
+  return _createClass(Context, [{
+    key: "initialize",
+    value: function initialize() {
+      this.layoutInfo = this.ui.createLayout(this.$note);
+      this._initialize();
+      this.$note.hide();
+      return this;
+    }
+
+    /**
+     * destroy modules and other resources and remove layout
+     */
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this._destroy();
+      this.$note.removeData('summernote');
+      this.ui.removeLayout(this.$note, this.layoutInfo);
+    }
+
+    /**
+     * destory modules and other resources and initialize it again
+     */
+  }, {
+    key: "reset",
+    value: function reset() {
+      var disabled = this.isDisabled();
+      this.code(dom.emptyPara);
+      this._destroy();
+      this._initialize();
+      if (disabled) {
+        this.disable();
+      }
+    }
+  }, {
+    key: "_initialize",
+    value: function _initialize() {
+      var _this = this;
+      // set own id
+      this.options.id = func.uniqueId(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now());
+      // set default container for tooltips, popovers, and dialogs
+      this.options.container = this.options.container || this.layoutInfo.editor;
+
+      // add optional buttons
+      var buttons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.buttons);
+      Object.keys(buttons).forEach(function (key) {
+        _this.memo('button.' + key, buttons[key]);
+      });
+      var modules = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, this.options.modules, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.plugins || {});
+
+      // add and initialize modules
+      Object.keys(modules).forEach(function (key) {
+        _this.module(key, modules[key], true);
+      });
+      Object.keys(this.modules).forEach(function (key) {
+        _this.initializeModule(key);
+      });
+    }
+  }, {
+    key: "_destroy",
+    value: function _destroy() {
+      var _this2 = this;
+      // destroy modules with reversed order
+      Object.keys(this.modules).reverse().forEach(function (key) {
+        _this2.removeModule(key);
+      });
+      Object.keys(this.memos).forEach(function (key) {
+        _this2.removeMemo(key);
+      });
+      // trigger custom onDestroy callback
+      this.triggerEvent('destroy', this);
+    }
+  }, {
+    key: "code",
+    value: function code(html) {
+      var isActivated = this.invoke('codeview.isActivated');
+      if (html === undefined) {
+        this.invoke('codeview.sync');
+        return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();
+      } else {
+        if (isActivated) {
+          this.invoke('codeview.sync', html);
+        } else {
+          this.layoutInfo.editable.html(html);
+        }
+        this.$note.val(html);
+        this.triggerEvent('change', html, this.layoutInfo.editable);
+      }
+    }
+  }, {
+    key: "isDisabled",
+    value: function isDisabled() {
+      return this.layoutInfo.editable.attr('contenteditable') === 'false';
+    }
+  }, {
+    key: "enable",
+    value: function enable() {
+      this.layoutInfo.editable.attr('contenteditable', true);
+      this.invoke('toolbar.activate', true);
+      this.triggerEvent('disable', false);
+      this.options.editing = true;
+    }
+  }, {
+    key: "disable",
+    value: function disable() {
+      // close codeview if codeview is opend
+      if (this.invoke('codeview.isActivated')) {
+        this.invoke('codeview.deactivate');
+      }
+      this.layoutInfo.editable.attr('contenteditable', false);
+      this.options.editing = false;
+      this.invoke('toolbar.deactivate', true);
+      this.triggerEvent('disable', true);
+    }
+  }, {
+    key: "triggerEvent",
+    value: function triggerEvent() {
+      var namespace = lists.head(arguments);
+      var args = lists.tail(lists.from(arguments));
+      var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];
+      if (callback) {
+        callback.apply(this.$note[0], args);
+      }
+      this.$note.trigger('summernote.' + namespace, args);
+    }
+  }, {
+    key: "initializeModule",
+    value: function initializeModule(key) {
+      var module = this.modules[key];
+      module.shouldInitialize = module.shouldInitialize || func.ok;
+      if (!module.shouldInitialize()) {
+        return;
+      }
+
+      // initialize module
+      if (module.initialize) {
+        module.initialize();
+      }
+
+      // attach events
+      if (module.events) {
+        dom.attachEvents(this.$note, module.events);
+      }
+    }
+  }, {
+    key: "module",
+    value: function module(key, ModuleClass, withoutIntialize) {
+      if (arguments.length === 1) {
+        return this.modules[key];
+      }
+      this.modules[key] = new ModuleClass(this);
+      if (!withoutIntialize) {
+        this.initializeModule(key);
+      }
+    }
+  }, {
+    key: "removeModule",
+    value: function removeModule(key) {
+      var module = this.modules[key];
+      if (module.shouldInitialize()) {
+        if (module.events) {
+          dom.detachEvents(this.$note, module.events);
+        }
+        if (module.destroy) {
+          module.destroy();
+        }
+      }
+      delete this.modules[key];
+    }
+  }, {
+    key: "memo",
+    value: function memo(key, obj) {
+      if (arguments.length === 1) {
+        return this.memos[key];
+      }
+      this.memos[key] = obj;
+    }
+  }, {
+    key: "removeMemo",
+    value: function removeMemo(key) {
+      if (this.memos[key] && this.memos[key].destroy) {
+        this.memos[key].destroy();
+      }
+      delete this.memos[key];
+    }
+
+    /**
+     * Some buttons need to change their visual style immediately once they get pressed
+     */
+  }, {
+    key: "createInvokeHandlerAndUpdateState",
+    value: function createInvokeHandlerAndUpdateState(namespace, value) {
+      var _this3 = this;
+      return function (event) {
+        _this3.createInvokeHandler(namespace, value)(event);
+        _this3.invoke('buttons.updateCurrentStyle');
+      };
+    }
+  }, {
+    key: "createInvokeHandler",
+    value: function createInvokeHandler(namespace, value) {
+      var _this4 = this;
+      return function (event) {
+        event.preventDefault();
+        var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);
+        _this4.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);
+      };
+    }
+  }, {
+    key: "invoke",
+    value: function invoke() {
+      var namespace = lists.head(arguments);
+      var args = lists.tail(lists.from(arguments));
+      var splits = namespace.split('.');
+      var hasSeparator = splits.length > 1;
+      var moduleName = hasSeparator && lists.head(splits);
+      var methodName = hasSeparator ? lists.last(splits) : lists.head(splits);
+      var module = this.modules[moduleName || 'editor'];
+      if (!moduleName && this[methodName]) {
+        return this[methodName].apply(this, args);
+      } else if (module && module[methodName] && module.shouldInitialize()) {
+        return module[methodName].apply(module, args);
+      }
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/summernote.js
+function summernote_typeof(o) { "@babel/helpers - typeof"; return summernote_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, summernote_typeof(o); }
+
+
+
+
+external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().fn.extend({
+  /**
+   * Summernote API
+   *
+   * @param {Object|String}
+   * @return {this}
+   */
+  summernote: function summernote() {
+    var type = summernote_typeof(lists.head(arguments));
+    var isExternalAPICalled = type === 'string';
+    var hasInitOptions = type === 'object';
+    var options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options, hasInitOptions ? lists.head(arguments) : {});
+
+    // Update options
+    options.langInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'], (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang[options.lang]);
+    options.icons = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(true, {}, (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.options.icons, options.icons);
+    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;
+    this.each(function (idx, note) {
+      var $note = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(note);
+      if (!$note.data('summernote')) {
+        var context = new Context($note, options);
+        $note.data('summernote', context);
+        $note.data('summernote').triggerEvent('init', context.layoutInfo);
+      }
+    });
+    var $note = this.first();
+    if ($note.length) {
+      var context = $note.data('summernote');
+      if (isExternalAPICalled) {
+        return context.invoke.apply(context, lists.from(arguments));
+      } else if (options.focus) {
+        context.invoke('editor.focus');
+      }
+    }
+    return this;
+  }
+});
+;// CONCATENATED MODULE: ./src/js/core/range.js
+function range_typeof(o) { "@babel/helpers - typeof"; return range_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, range_typeof(o); }
+function range_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function range_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, range_toPropertyKey(o.key), o); } }
+function range_createClass(e, r, t) { return r && range_defineProperties(e.prototype, r), t && range_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function range_toPropertyKey(t) { var i = range_toPrimitive(t, "string"); return "symbol" == range_typeof(i) ? i : i + ""; }
+function range_toPrimitive(t, r) { if ("object" != range_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != range_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+
+/**
+ * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js
+ *
+ * @param {TextRange} textRange
+ * @param {Boolean} isStart
+ * @return {BoundaryPoint}
+ *
+ * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx
+ */
+function textRangeToPoint(textRange, isStart) {
+  var container = textRange.parentElement();
+  var offset;
+  var tester = document.body.createTextRange();
+  var prevContainer;
+  var childNodes = lists.from(container.childNodes);
+  for (offset = 0; offset < childNodes.length; offset++) {
+    if (dom.isText(childNodes[offset])) {
+      continue;
+    }
+    tester.moveToElementText(childNodes[offset]);
+    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {
+      break;
+    }
+    prevContainer = childNodes[offset];
+  }
+  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {
+    var textRangeStart = document.body.createTextRange();
+    var curTextNode = null;
+    textRangeStart.moveToElementText(prevContainer || container);
+    textRangeStart.collapse(!prevContainer);
+    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;
+    var pointTester = textRange.duplicate();
+    pointTester.setEndPoint('StartToStart', textRangeStart);
+    var textCount = pointTester.text.replace(/[\r\n]/g, '').length;
+    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {
+      textCount -= curTextNode.nodeValue.length;
+      curTextNode = curTextNode.nextSibling;
+    }
+
+    // [workaround] enforce IE to re-reference curTextNode, hack
+    var dummy = curTextNode.nodeValue; // eslint-disable-line
+
+    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) {
+      textCount -= curTextNode.nodeValue.length;
+      curTextNode = curTextNode.nextSibling;
+    }
+    container = curTextNode;
+    offset = textCount;
+  }
+  return {
+    cont: container,
+    offset: offset
+  };
+}
+
+/**
+ * return TextRange from boundary point (inspired by google closure-library)
+ * @param {BoundaryPoint} point
+ * @return {TextRange}
+ */
+function pointToTextRange(point) {
+  var textRangeInfo = function textRangeInfo(container, offset) {
+    var node, isCollapseToStart;
+    if (dom.isText(container)) {
+      var prevTextNodes = dom.listPrev(container, func.not(dom.isText));
+      var prevContainer = lists.last(prevTextNodes).previousSibling;
+      node = prevContainer || container.parentNode;
+      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);
+      isCollapseToStart = !prevContainer;
+    } else {
+      node = container.childNodes[offset] || container;
+      if (dom.isText(node)) {
+        return textRangeInfo(node, 0);
+      }
+      offset = 0;
+      isCollapseToStart = false;
+    }
+    return {
+      node: node,
+      collapseToStart: isCollapseToStart,
+      offset: offset
+    };
+  };
+  var textRange = document.body.createTextRange();
+  var info = textRangeInfo(point.node, point.offset);
+  textRange.moveToElementText(info.node);
+  textRange.collapse(info.collapseToStart);
+  textRange.moveStart('character', info.offset);
+  return textRange;
+}
+
+/**
+   * Wrapped Range
+   *
+   * @constructor
+   * @param {Node} sc - start container
+   * @param {Number} so - start offset
+   * @param {Node} ec - end container
+   * @param {Number} eo - end offset
+   */
+var WrappedRange = /*#__PURE__*/function () {
+  function WrappedRange(sc, so, ec, eo) {
+    range_classCallCheck(this, WrappedRange);
+    this.sc = sc;
+    this.so = so;
+    this.ec = ec;
+    this.eo = eo;
+
+    // isOnEditable: judge whether range is on editable or not
+    this.isOnEditable = this.makeIsOn(dom.isEditable);
+    // isOnList: judge whether range is on list node or not
+    this.isOnList = this.makeIsOn(dom.isList);
+    // isOnAnchor: judge whether range is on anchor node or not
+    this.isOnAnchor = this.makeIsOn(dom.isAnchor);
+    // isOnCell: judge whether range is on cell node or not
+    this.isOnCell = this.makeIsOn(dom.isCell);
+    // isOnData: judge whether range is on data node or not
+    this.isOnData = this.makeIsOn(dom.isData);
+  }
+
+  // nativeRange: get nativeRange from sc, so, ec, eo
+  return range_createClass(WrappedRange, [{
+    key: "nativeRange",
+    value: function nativeRange() {
+      if (env.isW3CRangeSupport) {
+        var w3cRange = document.createRange();
+        w3cRange.setStart(this.sc, this.so);
+        w3cRange.setEnd(this.ec, this.eo);
+        return w3cRange;
+      } else {
+        var textRange = pointToTextRange({
+          node: this.sc,
+          offset: this.so
+        });
+        textRange.setEndPoint('EndToEnd', pointToTextRange({
+          node: this.ec,
+          offset: this.eo
+        }));
+        return textRange;
+      }
+    }
+  }, {
+    key: "getPoints",
+    value: function getPoints() {
+      return {
+        sc: this.sc,
+        so: this.so,
+        ec: this.ec,
+        eo: this.eo
+      };
+    }
+  }, {
+    key: "getStartPoint",
+    value: function getStartPoint() {
+      return {
+        node: this.sc,
+        offset: this.so
+      };
+    }
+  }, {
+    key: "getEndPoint",
+    value: function getEndPoint() {
+      return {
+        node: this.ec,
+        offset: this.eo
+      };
+    }
+
+    /**
+     * select update visible range
+     */
+  }, {
+    key: "select",
+    value: function select() {
+      var nativeRng = this.nativeRange();
+      if (env.isW3CRangeSupport) {
+        var selection = document.getSelection();
+        if (selection.rangeCount > 0) {
+          selection.removeAllRanges();
+        }
+        selection.addRange(nativeRng);
+      } else {
+        nativeRng.select();
+      }
+      return this;
+    }
+
+    /**
+     * Moves the scrollbar to start container(sc) of current range
+     *
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "scrollIntoView",
+    value: function scrollIntoView(container) {
+      var height = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(container).height();
+      if (container.scrollTop + height < this.sc.offsetTop) {
+        container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);
+      }
+      return this;
+    }
+
+    /**
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "normalize",
+    value: function normalize() {
+      /**
+       * @param {BoundaryPoint} point
+       * @param {Boolean} isLeftToRight - true: prefer to choose right node
+       *                                - false: prefer to choose left node
+       * @return {BoundaryPoint}
+       */
+      var getVisiblePoint = function getVisiblePoint(point, isLeftToRight) {
+        if (!point) {
+          return point;
+        }
+
+        // Just use the given point [XXX:Adhoc]
+        //  - case 01. if the point is on the middle of the node
+        //  - case 02. if the point is on the right edge and prefer to choose left node
+        //  - case 03. if the point is on the left edge and prefer to choose right node
+        //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void
+        //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void
+        //  - case 06. if the point is on the block node and there is no children
+        if (dom.isVisiblePoint(point)) {
+          if (!dom.isEdgePoint(point) || dom.isRightEdgePoint(point) && !isLeftToRight || dom.isLeftEdgePoint(point) && isLeftToRight || dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling) || dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling) || dom.isBlock(point.node) && dom.isEmpty(point.node)) {
+            return point;
+          }
+        }
+
+        // point on block's edge
+        var block = dom.ancestor(point.node, dom.isBlock);
+        var hasRightNode = false;
+        if (!hasRightNode) {
+          var prevPoint = dom.prevPoint(point) || {
+            node: null
+          };
+          hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;
+        }
+        var hasLeftNode = false;
+        if (!hasLeftNode) {
+          var _nextPoint = dom.nextPoint(point) || {
+            node: null
+          };
+          hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(_nextPoint.node)) && isLeftToRight;
+        }
+        if (hasRightNode || hasLeftNode) {
+          // returns point already on visible point
+          if (dom.isVisiblePoint(point)) {
+            return point;
+          }
+          // reverse direction
+          isLeftToRight = !isLeftToRight;
+        }
+        var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);
+        return nextPoint || point;
+      };
+      var endPoint = getVisiblePoint(this.getEndPoint(), false);
+      var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);
+      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);
+    }
+
+    /**
+     * returns matched nodes on range
+     *
+     * @param {Function} [pred] - predicate function
+     * @param {Object} [options]
+     * @param {Boolean} [options.includeAncestor]
+     * @param {Boolean} [options.fullyContains]
+     * @return {Node[]}
+     */
+  }, {
+    key: "nodes",
+    value: function nodes(pred, options) {
+      pred = pred || func.ok;
+      var includeAncestor = options && options.includeAncestor;
+      var fullyContains = options && options.fullyContains;
+
+      // TODO compare points and sort
+      var startPoint = this.getStartPoint();
+      var endPoint = this.getEndPoint();
+      var nodes = [];
+      var leftEdgeNodes = [];
+      dom.walkPoint(startPoint, endPoint, function (point) {
+        if (dom.isEditable(point.node)) {
+          return;
+        }
+        var node;
+        if (fullyContains) {
+          if (dom.isLeftEdgePoint(point)) {
+            leftEdgeNodes.push(point.node);
+          }
+          if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {
+            node = point.node;
+          }
+        } else if (includeAncestor) {
+          node = dom.ancestor(point.node, pred);
+        } else {
+          node = point.node;
+        }
+        if (node && pred(node)) {
+          nodes.push(node);
+        }
+      }, true);
+      return lists.unique(nodes);
+    }
+
+    /**
+     * returns commonAncestor of range
+     * @return {Element} - commonAncestor
+     */
+  }, {
+    key: "commonAncestor",
+    value: function commonAncestor() {
+      return dom.commonAncestor(this.sc, this.ec);
+    }
+
+    /**
+     * returns expanded range by pred
+     *
+     * @param {Function} pred - predicate function
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "expand",
+    value: function expand(pred) {
+      var startAncestor = dom.ancestor(this.sc, pred);
+      var endAncestor = dom.ancestor(this.ec, pred);
+      if (!startAncestor && !endAncestor) {
+        return new WrappedRange(this.sc, this.so, this.ec, this.eo);
+      }
+      var boundaryPoints = this.getPoints();
+      if (startAncestor) {
+        boundaryPoints.sc = startAncestor;
+        boundaryPoints.so = 0;
+      }
+      if (endAncestor) {
+        boundaryPoints.ec = endAncestor;
+        boundaryPoints.eo = dom.nodeLength(endAncestor);
+      }
+      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);
+    }
+
+    /**
+     * @param {Boolean} isCollapseToStart
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "collapse",
+    value: function collapse(isCollapseToStart) {
+      if (isCollapseToStart) {
+        return new WrappedRange(this.sc, this.so, this.sc, this.so);
+      } else {
+        return new WrappedRange(this.ec, this.eo, this.ec, this.eo);
+      }
+    }
+
+    /**
+     * splitText on range
+     */
+  }, {
+    key: "splitText",
+    value: function splitText() {
+      var isSameContainer = this.sc === this.ec;
+      var boundaryPoints = this.getPoints();
+      if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {
+        this.ec.splitText(this.eo);
+      }
+      if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {
+        boundaryPoints.sc = this.sc.splitText(this.so);
+        boundaryPoints.so = 0;
+        if (isSameContainer) {
+          boundaryPoints.ec = boundaryPoints.sc;
+          boundaryPoints.eo = this.eo - this.so;
+        }
+      }
+      return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo);
+    }
+
+    /**
+     * delete contents on range
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "deleteContents",
+    value: function deleteContents() {
+      if (this.isCollapsed()) {
+        return this;
+      }
+      var rng = this.splitText();
+      var nodes = rng.nodes(null, {
+        fullyContains: true
+      });
+
+      // find new cursor point
+      var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {
+        return !lists.contains(nodes, point.node);
+      });
+      var emptyParents = [];
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(nodes, function (idx, node) {
+        // find empty parents
+        var parent = node.parentNode;
+        if (point.node !== parent && dom.nodeLength(parent) === 1) {
+          emptyParents.push(parent);
+        }
+        dom.remove(node, false);
+      });
+
+      // remove empty parents
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyParents, function (idx, node) {
+        dom.remove(node, false);
+      });
+      return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize();
+    }
+
+    /**
+     * makeIsOn: return isOn(pred) function
+     */
+  }, {
+    key: "makeIsOn",
+    value: function makeIsOn(pred) {
+      return function () {
+        var ancestor = dom.ancestor(this.sc, pred);
+        return !!ancestor && ancestor === dom.ancestor(this.ec, pred);
+      };
+    }
+
+    /**
+     * @param {Function} pred
+     * @return {Boolean}
+     */
+  }, {
+    key: "isLeftEdgeOf",
+    value: function isLeftEdgeOf(pred) {
+      if (!dom.isLeftEdgePoint(this.getStartPoint())) {
+        return false;
+      }
+      var node = dom.ancestor(this.sc, pred);
+      return node && dom.isLeftEdgeOf(this.sc, node);
+    }
+
+    /**
+     * returns whether range was collapsed or not
+     */
+  }, {
+    key: "isCollapsed",
+    value: function isCollapsed() {
+      return this.sc === this.ec && this.so === this.eo;
+    }
+
+    /**
+     * wrap inline nodes which children of body with paragraph
+     *
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "wrapBodyInlineWithPara",
+    value: function wrapBodyInlineWithPara() {
+      if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {
+        this.sc.innerHTML = dom.emptyPara;
+        return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);
+      }
+
+      /**
+       * [workaround] firefox often create range on not visible point. so normalize here.
+       *  - firefox: |<p>text</p>|
+       *  - chrome: <p>|text|</p>
+       */
+      var rng = this.normalize();
+      if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {
+        return rng;
+      }
+
+      // find inline top ancestor
+      var topAncestor;
+      if (dom.isInline(rng.sc)) {
+        var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));
+        topAncestor = lists.last(ancestors);
+        if (!dom.isInline(topAncestor)) {
+          topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];
+        }
+      } else {
+        topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];
+      }
+      if (topAncestor) {
+        // siblings not in paragraph
+        var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();
+        inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));
+
+        // wrap with paragraph
+        if (inlineSiblings.length) {
+          var para = dom.wrap(lists.head(inlineSiblings), 'p');
+          dom.appendChildNodes(para, lists.tail(inlineSiblings));
+        }
+      }
+      return this.normalize();
+    }
+
+    /**
+     * insert node at current cursor
+     *
+     * @param {Node} node
+     * @param {Boolean} doNotInsertPara - default is false, removes added <p> that's added if true
+     * @return {Node}
+     */
+  }, {
+    key: "insertNode",
+    value: function insertNode(node) {
+      var doNotInsertPara = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+      var rng = this;
+      if (dom.isText(node) || dom.isInline(node)) {
+        rng = this.wrapBodyInlineWithPara().deleteContents();
+      }
+      var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));
+      if (info.rightNode) {
+        info.rightNode.parentNode.insertBefore(node, info.rightNode);
+        if (dom.isEmpty(info.rightNode) && (doNotInsertPara || dom.isPara(node))) {
+          info.rightNode.parentNode.removeChild(info.rightNode);
+        }
+      } else {
+        info.container.appendChild(node);
+      }
+      return node;
+    }
+
+    /**
+     * insert html at current cursor
+     */
+  }, {
+    key: "pasteHTML",
+    value: function pasteHTML(markup) {
+      markup = ((markup || '') + '').trim(markup);
+      var contentsContainer = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').html(markup)[0];
+      var childNodes = lists.from(contentsContainer.childNodes);
+
+      // const rng = this.wrapBodyInlineWithPara().deleteContents();
+      var rng = this;
+      var reversed = false;
+      if (rng.so >= 0) {
+        childNodes = childNodes.reverse();
+        reversed = true;
+      }
+      childNodes = childNodes.map(function (childNode) {
+        return rng.insertNode(childNode, !dom.isInline(childNode));
+      });
+      if (reversed) {
+        childNodes = childNodes.reverse();
+      }
+      return childNodes;
+    }
+
+    /**
+     * returns text in range
+     *
+     * @return {String}
+     */
+  }, {
+    key: "toString",
+    value: function toString() {
+      var nativeRng = this.nativeRange();
+      return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;
+    }
+
+    /**
+     * returns range for word before cursor
+     *
+     * @param {Boolean} [findAfter] - find after cursor, default: false
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "getWordRange",
+    value: function getWordRange(findAfter) {
+      var endPoint = this.getEndPoint();
+      if (!dom.isCharPoint(endPoint)) {
+        return this;
+      }
+      var startPoint = dom.prevPointUntil(endPoint, function (point) {
+        return !dom.isCharPoint(point);
+      });
+      if (findAfter) {
+        endPoint = dom.nextPointUntil(endPoint, function (point) {
+          return !dom.isCharPoint(point);
+        });
+      }
+      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);
+    }
+
+    /**
+     * returns range for words before cursor
+     *
+     * @param {Boolean} [findAfter] - find after cursor, default: false
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "getWordsRange",
+    value: function getWordsRange(findAfter) {
+      var endPoint = this.getEndPoint();
+      var isNotTextPoint = function isNotTextPoint(point) {
+        return !dom.isCharPoint(point) && !dom.isSpacePoint(point);
+      };
+      if (isNotTextPoint(endPoint)) {
+        return this;
+      }
+      var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);
+      if (findAfter) {
+        endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);
+      }
+      return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);
+    }
+
+    /**
+     * returns range for words before cursor that match with a Regex
+     *
+     * example:
+     *  range: 'hi @Peter Pan'
+     *  regex: '/@[a-z ]+/i'
+     *  return range: '@Peter Pan'
+     *
+     * @param {RegExp} [regex]
+     * @return {WrappedRange|null}
+     */
+  }, {
+    key: "getWordsMatchRange",
+    value: function getWordsMatchRange(regex) {
+      var endPoint = this.getEndPoint();
+      var startPoint = dom.prevPointUntil(endPoint, function (point) {
+        if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {
+          return true;
+        }
+        var rng = new WrappedRange(point.node, point.offset, endPoint.node, endPoint.offset);
+        var result = regex.exec(rng.toString());
+        return result && result.index === 0;
+      });
+      var rng = new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);
+      var text = rng.toString();
+      var result = regex.exec(text);
+      if (result && result[0].length === text.length) {
+        return rng;
+      } else {
+        return null;
+      }
+    }
+
+    /**
+     * create offsetPath bookmark
+     *
+     * @param {Node} editable
+     */
+  }, {
+    key: "bookmark",
+    value: function bookmark(editable) {
+      return {
+        s: {
+          path: dom.makeOffsetPath(editable, this.sc),
+          offset: this.so
+        },
+        e: {
+          path: dom.makeOffsetPath(editable, this.ec),
+          offset: this.eo
+        }
+      };
+    }
+
+    /**
+     * create offsetPath bookmark base on paragraph
+     *
+     * @param {Node[]} paras
+     */
+  }, {
+    key: "paraBookmark",
+    value: function paraBookmark(paras) {
+      return {
+        s: {
+          path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),
+          offset: this.so
+        },
+        e: {
+          path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),
+          offset: this.eo
+        }
+      };
+    }
+
+    /**
+     * getClientRects
+     * @return {Rect[]}
+     */
+  }, {
+    key: "getClientRects",
+    value: function getClientRects() {
+      var nativeRng = this.nativeRange();
+      return nativeRng.getClientRects();
+    }
+  }]);
+}();
+/**
+ * Data structure
+ *  * BoundaryPoint: a point of dom tree
+ *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range
+ *
+ * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position
+ */
+/* harmony default export */ const range = ({
+  /**
+   * create Range Object From arguments or Browser Selection
+   *
+   * @param {Node} sc - start container
+   * @param {Number} so - start offset
+   * @param {Node} ec - end container
+   * @param {Number} eo - end offset
+   * @return {WrappedRange}
+   */
+  create: function create(sc, so, ec, eo) {
+    if (arguments.length === 4) {
+      return new WrappedRange(sc, so, ec, eo);
+    } else if (arguments.length === 2) {
+      // collapsed
+      ec = sc;
+      eo = so;
+      return new WrappedRange(sc, so, ec, eo);
+    } else {
+      var wrappedRange = this.createFromSelection();
+      if (!wrappedRange && arguments.length === 1) {
+        var bodyElement = arguments[0];
+        if (dom.isEditable(bodyElement)) {
+          bodyElement = bodyElement.lastChild;
+        }
+        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);
+      }
+      return wrappedRange;
+    }
+  },
+  createFromBodyElement: function createFromBodyElement(bodyElement) {
+    var isCollapseToStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+    var wrappedRange = this.createFromNode(bodyElement);
+    return wrappedRange.collapse(isCollapseToStart);
+  },
+  createFromSelection: function createFromSelection() {
+    var sc, so, ec, eo;
+    if (env.isW3CRangeSupport) {
+      var selection = document.getSelection();
+      if (!selection || selection.rangeCount === 0) {
+        return null;
+      } else if (dom.isBody(selection.anchorNode)) {
+        // Firefox: returns entire body as range on initialization.
+        // We won't never need it.
+        return null;
+      }
+      var nativeRng = selection.getRangeAt(0);
+      sc = nativeRng.startContainer;
+      so = nativeRng.startOffset;
+      ec = nativeRng.endContainer;
+      eo = nativeRng.endOffset;
+    } else {
+      // IE8: TextRange
+      var textRange = document.selection.createRange();
+      var textRangeEnd = textRange.duplicate();
+      textRangeEnd.collapse(false);
+      var textRangeStart = textRange;
+      textRangeStart.collapse(true);
+      var startPoint = textRangeToPoint(textRangeStart, true);
+      var endPoint = textRangeToPoint(textRangeEnd, false);
+
+      // same visible point case: range was collapsed.
+      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) {
+        startPoint = endPoint;
+      }
+      sc = startPoint.cont;
+      so = startPoint.offset;
+      ec = endPoint.cont;
+      eo = endPoint.offset;
+    }
+    return new WrappedRange(sc, so, ec, eo);
+  },
+  /**
+   * @method
+   *
+   * create WrappedRange from node
+   *
+   * @param {Node} node
+   * @return {WrappedRange}
+   */
+  createFromNode: function createFromNode(node) {
+    var sc = node;
+    var so = 0;
+    var ec = node;
+    var eo = dom.nodeLength(ec);
+
+    // browsers can't target a picture or void node
+    if (dom.isVoid(sc)) {
+      so = dom.listPrev(sc).length - 1;
+      sc = sc.parentNode;
+    }
+    if (dom.isBR(ec)) {
+      eo = dom.listPrev(ec).length - 1;
+      ec = ec.parentNode;
+    } else if (dom.isVoid(ec)) {
+      eo = dom.listPrev(ec).length;
+      ec = ec.parentNode;
+    }
+    return this.create(sc, so, ec, eo);
+  },
+  /**
+   * create WrappedRange from node after position
+   *
+   * @param {Node} node
+   * @return {WrappedRange}
+   */
+  createFromNodeBefore: function createFromNodeBefore(node) {
+    return this.createFromNode(node).collapse(true);
+  },
+  /**
+   * create WrappedRange from node after position
+   *
+   * @param {Node} node
+   * @return {WrappedRange}
+   */
+  createFromNodeAfter: function createFromNodeAfter(node) {
+    return this.createFromNode(node).collapse();
+  },
+  /**
+   * @method
+   *
+   * create WrappedRange from bookmark
+   *
+   * @param {Node} editable
+   * @param {Object} bookmark
+   * @return {WrappedRange}
+   */
+  createFromBookmark: function createFromBookmark(editable, bookmark) {
+    var sc = dom.fromOffsetPath(editable, bookmark.s.path);
+    var so = bookmark.s.offset;
+    var ec = dom.fromOffsetPath(editable, bookmark.e.path);
+    var eo = bookmark.e.offset;
+    return new WrappedRange(sc, so, ec, eo);
+  },
+  /**
+   * @method
+   *
+   * create WrappedRange from paraBookmark
+   *
+   * @param {Object} bookmark
+   * @param {Node[]} paras
+   * @return {WrappedRange}
+   */
+  createFromParaBookmark: function createFromParaBookmark(bookmark, paras) {
+    var so = bookmark.s.offset;
+    var eo = bookmark.e.offset;
+    var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);
+    var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);
+    return new WrappedRange(sc, so, ec, eo);
+  }
+});
+;// CONCATENATED MODULE: ./src/js/core/key.js
+
+
+var KEY_MAP = {
+  'BACKSPACE': 8,
+  'TAB': 9,
+  'ENTER': 13,
+  'ESCAPE': 27,
+  'SPACE': 32,
+  'DELETE': 46,
+  // Arrow
+  'LEFT': 37,
+  'UP': 38,
+  'RIGHT': 39,
+  'DOWN': 40,
+  // Number: 0-9
+  'NUM0': 48,
+  'NUM1': 49,
+  'NUM2': 50,
+  'NUM3': 51,
+  'NUM4': 52,
+  'NUM5': 53,
+  'NUM6': 54,
+  'NUM7': 55,
+  'NUM8': 56,
+  // Alphabet: a-z
+  'B': 66,
+  'E': 69,
+  'I': 73,
+  'J': 74,
+  'K': 75,
+  'L': 76,
+  'R': 82,
+  'S': 83,
+  'U': 85,
+  'V': 86,
+  'Y': 89,
+  'Z': 90,
+  'SLASH': 191,
+  'LEFTBRACKET': 219,
+  'BACKSLASH': 220,
+  'RIGHTBRACKET': 221,
+  // Navigation
+  'HOME': 36,
+  'END': 35,
+  'PAGEUP': 33,
+  'PAGEDOWN': 34
+};
+
+/**
+ * @class core.key
+ *
+ * Object for keycodes.
+ *
+ * @singleton
+ * @alternateClassName key
+ */
+/* harmony default export */ const key = ({
+  /**
+   * @method isEdit
+   *
+   * @param {Number} keyCode
+   * @return {Boolean}
+   */
+  isEdit: function isEdit(keyCode) {
+    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE], keyCode);
+  },
+  /**
+   * @method isRemove
+   *
+   * @param {Number} keyCode
+   * @return {Boolean}
+   */
+  isRemove: function isRemove(keyCode) {
+    // LB
+    return lists.contains([KEY_MAP.BACKSPACE, KEY_MAP.DELETE], keyCode);
+  },
+  /**
+   * @method isMove
+   *
+   * @param {Number} keyCode
+   * @return {Boolean}
+   */
+  isMove: function isMove(keyCode) {
+    return lists.contains([KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN], keyCode);
+  },
+  /**
+   * @method isNavigation
+   *
+   * @param {Number} keyCode
+   * @return {Boolean}
+   */
+  isNavigation: function isNavigation(keyCode) {
+    return lists.contains([KEY_MAP.HOME, KEY_MAP.END, KEY_MAP.PAGEUP, KEY_MAP.PAGEDOWN], keyCode);
+  },
+  /**
+   * @property {Object} nameFromCode
+   * @property {String} nameFromCode.8 "BACKSPACE"
+   */
+  nameFromCode: func.invertObject(KEY_MAP),
+  code: KEY_MAP
+});
+;// CONCATENATED MODULE: ./src/js/core/async.js
+
+
+/**
+ * @method readFileAsDataURL
+ *
+ * read contents of file as representing URL
+ *
+ * @param {File} file
+ * @return {Promise} - then: dataUrl
+ */
+function readFileAsDataURL(file) {
+  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {
+    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(new FileReader(), {
+      onload: function onload(event) {
+        var dataURL = event.target.result;
+        deferred.resolve(dataURL);
+      },
+      onerror: function onerror(err) {
+        deferred.reject(err);
+      }
+    }).readAsDataURL(file);
+  }).promise();
+}
+
+/**
+ * @method createImage
+ *
+ * create `<image>` from url string
+ *
+ * @param {String} url
+ * @return {Promise} - then: $image
+ */
+function createImage(url) {
+  return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {
+    var $img = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<img>');
+    $img.one('load', function () {
+      $img.off('error abort');
+      deferred.resolve($img);
+    }).one('error abort', function () {
+      $img.off('load').detach();
+      deferred.reject($img);
+    }).css({
+      display: 'none'
+    }).appendTo(document.body).attr('src', url);
+  }).promise();
+}
+;// CONCATENATED MODULE: ./src/js/editing/History.js
+function History_typeof(o) { "@babel/helpers - typeof"; return History_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, History_typeof(o); }
+function History_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function History_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, History_toPropertyKey(o.key), o); } }
+function History_createClass(e, r, t) { return r && History_defineProperties(e.prototype, r), t && History_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function History_toPropertyKey(t) { var i = History_toPrimitive(t, "string"); return "symbol" == History_typeof(i) ? i : i + ""; }
+function History_toPrimitive(t, r) { if ("object" != History_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != History_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var History = /*#__PURE__*/function () {
+  function History(context) {
+    History_classCallCheck(this, History);
+    this.stack = [];
+    this.stackOffset = -1;
+    this.context = context;
+    this.$editable = context.layoutInfo.editable;
+    this.editable = this.$editable[0];
+  }
+  return History_createClass(History, [{
+    key: "makeSnapshot",
+    value: function makeSnapshot() {
+      var rng = range.create(this.editable);
+      var emptyBookmark = {
+        s: {
+          path: [],
+          offset: 0
+        },
+        e: {
+          path: [],
+          offset: 0
+        }
+      };
+      return {
+        contents: this.$editable.html(),
+        bookmark: rng && rng.isOnEditable() ? rng.bookmark(this.editable) : emptyBookmark
+      };
+    }
+  }, {
+    key: "applySnapshot",
+    value: function applySnapshot(snapshot) {
+      if (snapshot.contents !== null) {
+        this.$editable.html(snapshot.contents);
+      }
+      if (snapshot.bookmark !== null) {
+        range.createFromBookmark(this.editable, snapshot.bookmark).select();
+      }
+    }
+
+    /**
+    * @method rewind
+    * Rewinds the history stack back to the first snapshot taken.
+    * Leaves the stack intact, so that "Redo" can still be used.
+    */
+  }, {
+    key: "rewind",
+    value: function rewind() {
+      // Create snap shot if not yet recorded
+      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {
+        this.recordUndo();
+      }
+
+      // Return to the first available snapshot.
+      this.stackOffset = 0;
+
+      // Apply that snapshot.
+      this.applySnapshot(this.stack[this.stackOffset]);
+    }
+
+    /**
+    *  @method commit
+    *  Resets history stack, but keeps current editor's content.
+    */
+  }, {
+    key: "commit",
+    value: function commit() {
+      // Clear the stack.
+      this.stack = [];
+
+      // Restore stackOffset to its original value.
+      this.stackOffset = -1;
+
+      // Record our first snapshot (of nothing).
+      this.recordUndo();
+    }
+
+    /**
+    * @method reset
+    * Resets the history stack completely; reverting to an empty editor.
+    */
+  }, {
+    key: "reset",
+    value: function reset() {
+      // Clear the stack.
+      this.stack = [];
+
+      // Restore stackOffset to its original value.
+      this.stackOffset = -1;
+
+      // Clear the editable area.
+      this.$editable.html('');
+
+      // Record our first snapshot (of nothing).
+      this.recordUndo();
+    }
+
+    /**
+     * undo
+     */
+  }, {
+    key: "undo",
+    value: function undo() {
+      // Create snap shot if not yet recorded
+      if (this.$editable.html() !== this.stack[this.stackOffset].contents) {
+        this.recordUndo();
+      }
+      if (this.stackOffset > 0) {
+        this.stackOffset--;
+        this.applySnapshot(this.stack[this.stackOffset]);
+      }
+    }
+
+    /**
+     * redo
+     */
+  }, {
+    key: "redo",
+    value: function redo() {
+      if (this.stack.length - 1 > this.stackOffset) {
+        this.stackOffset++;
+        this.applySnapshot(this.stack[this.stackOffset]);
+      }
+    }
+
+    /**
+     * recorded undo
+     */
+  }, {
+    key: "recordUndo",
+    value: function recordUndo() {
+      this.stackOffset++;
+
+      // Wash out stack after stackOffset
+      if (this.stack.length > this.stackOffset) {
+        this.stack = this.stack.slice(0, this.stackOffset);
+      }
+
+      // Create new snapshot and push it to the end
+      this.stack.push(this.makeSnapshot());
+
+      // If the stack size reachs to the limit, then slice it
+      if (this.stack.length > this.context.options.historyLimit) {
+        this.stack.shift();
+        this.stackOffset -= 1;
+      }
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/editing/Style.js
+function Style_typeof(o) { "@babel/helpers - typeof"; return Style_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Style_typeof(o); }
+function Style_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Style_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Style_toPropertyKey(o.key), o); } }
+function Style_createClass(e, r, t) { return r && Style_defineProperties(e.prototype, r), t && Style_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Style_toPropertyKey(t) { var i = Style_toPrimitive(t, "string"); return "symbol" == Style_typeof(i) ? i : i + ""; }
+function Style_toPrimitive(t, r) { if ("object" != Style_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Style_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+var Style = /*#__PURE__*/function () {
+  function Style() {
+    Style_classCallCheck(this, Style);
+  }
+  return Style_createClass(Style, [{
+    key: "jQueryCSS",
+    value:
+    /**
+     * @method jQueryCSS
+     *
+     * [workaround] for old jQuery
+     * passing an array of style properties to .css()
+     * will result in an object of property-value pairs.
+     * (compability with version < 1.9)
+     *
+     * @private
+     * @param  {jQuery} $obj
+     * @param  {Array} propertyNames - An array of one or more CSS properties.
+     * @return {Object}
+     */
+    function jQueryCSS($obj, propertyNames) {
+      var result = {};
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(propertyNames, function (idx, propertyName) {
+        result[propertyName] = $obj.css(propertyName);
+      });
+      return result;
+    }
+
+    /**
+     * returns style object from node
+     *
+     * @param {jQuery} $node
+     * @return {Object}
+     */
+  }, {
+    key: "fromNode",
+    value: function fromNode($node) {
+      var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];
+      var styleInfo = this.jQueryCSS($node, properties) || {};
+      var fontSize = $node[0].style.fontSize || styleInfo['font-size'];
+      styleInfo['font-size'] = parseInt(fontSize, 10);
+      styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);
+      return styleInfo;
+    }
+
+    /**
+     * paragraph level style
+     *
+     * @param {WrappedRange} rng
+     * @param {Object} styleInfo
+     */
+  }, {
+    key: "stylePara",
+    value: function stylePara(rng, styleInfo) {
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rng.nodes(dom.isPara, {
+        includeAncestor: true
+      }), function (idx, para) {
+        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css(styleInfo);
+      });
+    }
+
+    /**
+     * insert and returns styleNodes on range.
+     *
+     * @param {WrappedRange} rng
+     * @param {Object} [options] - options for styleNodes
+     * @param {String} [options.nodeName] - default: `SPAN`
+     * @param {Boolean} [options.expandClosestSibling] - default: `false`
+     * @param {Boolean} [options.onlyPartialContains] - default: `false`
+     * @return {Node[]}
+     */
+  }, {
+    key: "styleNodes",
+    value: function styleNodes(rng, options) {
+      rng = rng.splitText();
+      var nodeName = options && options.nodeName || 'SPAN';
+      var expandClosestSibling = !!(options && options.expandClosestSibling);
+      var onlyPartialContains = !!(options && options.onlyPartialContains);
+      if (rng.isCollapsed()) {
+        return [rng.insertNode(dom.create(nodeName))];
+      }
+      var pred = dom.makePredByNodeName(nodeName);
+      var nodes = rng.nodes(dom.isText, {
+        fullyContains: true
+      }).map(function (text) {
+        return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);
+      });
+      if (expandClosestSibling) {
+        if (onlyPartialContains) {
+          var nodesInRange = rng.nodes();
+          // compose with partial contains predication
+          pred = func.and(pred, function (node) {
+            return lists.contains(nodesInRange, node);
+          });
+        }
+        return nodes.map(function (node) {
+          var siblings = dom.withClosestSiblings(node, pred);
+          var head = lists.head(siblings);
+          var tails = lists.tail(siblings);
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(tails, function (idx, elem) {
+            dom.appendChildNodes(head, elem.childNodes);
+            dom.remove(elem);
+          });
+          return lists.head(siblings);
+        });
+      } else {
+        return nodes;
+      }
+    }
+
+    /**
+     * get current style on cursor
+     *
+     * @param {WrappedRange} rng
+     * @return {Object} - object contains style properties.
+     */
+  }, {
+    key: "current",
+    value: function current(rng) {
+      var $cont = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);
+      var styleInfo = this.fromNode($cont);
+
+      // document.queryCommandState for toggle state
+      // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)"
+      try {
+        styleInfo = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend(styleInfo, {
+          'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',
+          'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',
+          'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',
+          'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',
+          'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',
+          'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',
+          'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']
+        });
+      } catch (e) {
+        // eslint-disable-next-line
+      }
+
+      // list-style-type to list-style(unordered, ordered)
+      if (!rng.isOnList()) {
+        styleInfo['list-style'] = 'none';
+      } else {
+        var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];
+        var isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;
+        styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';
+      }
+      var para = dom.ancestor(rng.sc, dom.isPara);
+      if (para && para.style['line-height']) {
+        styleInfo['line-height'] = para.style.lineHeight;
+      } else {
+        var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);
+        styleInfo['line-height'] = lineHeight.toFixed(1);
+      }
+      styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);
+      styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);
+      styleInfo.range = rng;
+      return styleInfo;
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/editing/Bullet.js
+function Bullet_typeof(o) { "@babel/helpers - typeof"; return Bullet_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Bullet_typeof(o); }
+function Bullet_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Bullet_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Bullet_toPropertyKey(o.key), o); } }
+function Bullet_createClass(e, r, t) { return r && Bullet_defineProperties(e.prototype, r), t && Bullet_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Bullet_toPropertyKey(t) { var i = Bullet_toPrimitive(t, "string"); return "symbol" == Bullet_typeof(i) ? i : i + ""; }
+function Bullet_toPrimitive(t, r) { if ("object" != Bullet_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Bullet_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+var Bullet = /*#__PURE__*/function () {
+  function Bullet() {
+    Bullet_classCallCheck(this, Bullet);
+  }
+  return Bullet_createClass(Bullet, [{
+    key: "insertOrderedList",
+    value:
+    /**
+     * toggle ordered list
+     */
+    function insertOrderedList(editable) {
+      this.toggleList('OL', editable);
+    }
+
+    /**
+     * toggle unordered list
+     */
+  }, {
+    key: "insertUnorderedList",
+    value: function insertUnorderedList(editable) {
+      this.toggleList('UL', editable);
+    }
+
+    /**
+     * indent
+     */
+  }, {
+    key: "indent",
+    value: function indent(editable) {
+      var _this = this;
+      var rng = range.create(editable).wrapBodyInlineWithPara();
+      var paras = rng.nodes(dom.isPara, {
+        includeAncestor: true
+      });
+      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {
+        var head = lists.head(paras);
+        if (dom.isLi(head)) {
+          var previousList = _this.findList(head.previousSibling);
+          if (previousList) {
+            paras.map(function (para) {
+              return previousList.appendChild(para);
+            });
+          } else {
+            _this.wrapList(paras, head.parentNode.nodeName);
+            paras.map(function (para) {
+              return para.parentNode;
+            }).map(function (para) {
+              return _this.appendToPrevious(para);
+            });
+          }
+        } else {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {
+            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {
+              return (parseInt(val, 10) || 0) + 25;
+            });
+          });
+        }
+      });
+      rng.select();
+    }
+
+    /**
+     * outdent
+     */
+  }, {
+    key: "outdent",
+    value: function outdent(editable) {
+      var _this2 = this;
+      var rng = range.create(editable).wrapBodyInlineWithPara();
+      var paras = rng.nodes(dom.isPara, {
+        includeAncestor: true
+      });
+      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {
+        var head = lists.head(paras);
+        if (dom.isLi(head)) {
+          _this2.releaseList([paras]);
+        } else {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(paras, function (idx, para) {
+            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(para).css('marginLeft', function (idx, val) {
+              val = parseInt(val, 10) || 0;
+              return val > 25 ? val - 25 : '';
+            });
+          });
+        }
+      });
+      rng.select();
+    }
+
+    /**
+     * toggle list
+     *
+     * @param {String} listName - OL or UL
+     */
+  }, {
+    key: "toggleList",
+    value: function toggleList(listName, editable) {
+      var _this3 = this;
+      var rng = range.create(editable).wrapBodyInlineWithPara();
+      var paras = rng.nodes(dom.isPara, {
+        includeAncestor: true
+      });
+      var bookmark = rng.paraBookmark(paras);
+      var clustereds = lists.clusterBy(paras, func.peq2('parentNode'));
+
+      // paragraph to list
+      if (lists.find(paras, dom.isPurePara)) {
+        var wrappedParas = [];
+        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {
+          wrappedParas = wrappedParas.concat(_this3.wrapList(paras, listName));
+        });
+        paras = wrappedParas;
+        // list to paragraph or change list style
+      } else {
+        var diffLists = rng.nodes(dom.isList, {
+          includeAncestor: true
+        }).filter(function (listNode) {
+          return !external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().nodeName(listNode, listName);
+        });
+        if (diffLists.length) {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(diffLists, function (idx, listNode) {
+            dom.replace(listNode, listName);
+          });
+        } else {
+          paras = this.releaseList(clustereds, true);
+        }
+      }
+      range.createFromParaBookmark(bookmark, paras).select();
+    }
+
+    /**
+     * @param {Node[]} paras
+     * @param {String} listName
+     * @return {Node[]}
+     */
+  }, {
+    key: "wrapList",
+    value: function wrapList(paras, listName) {
+      var head = lists.head(paras);
+      var last = lists.last(paras);
+      var prevList = dom.isList(head.previousSibling) && head.previousSibling;
+      var nextList = dom.isList(last.nextSibling) && last.nextSibling;
+      var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);
+
+      // P to LI
+      paras = paras.map(function (para) {
+        return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;
+      });
+
+      // append to list(<ul>, <ol>)
+      dom.appendChildNodes(listNode, paras, true);
+      if (nextList) {
+        dom.appendChildNodes(listNode, lists.from(nextList.childNodes), true);
+        dom.remove(nextList);
+      }
+      return paras;
+    }
+
+    /**
+     * @method releaseList
+     *
+     * @param {Array[]} clustereds
+     * @param {Boolean} isEscapseToBody
+     * @return {Node[]}
+     */
+  }, {
+    key: "releaseList",
+    value: function releaseList(clustereds, isEscapseToBody) {
+      var _this4 = this;
+      var releasedParas = [];
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(clustereds, function (idx, paras) {
+        var head = lists.head(paras);
+        var last = lists.last(paras);
+        var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;
+        var parentItem = headList.parentNode;
+        if (headList.parentNode.nodeName === 'LI') {
+          paras.map(function (para) {
+            var newList = _this4.findNextSiblings(para);
+            if (parentItem.nextSibling) {
+              parentItem.parentNode.insertBefore(para, parentItem.nextSibling);
+            } else {
+              parentItem.parentNode.appendChild(para);
+            }
+            if (newList.length) {
+              _this4.wrapList(newList, headList.nodeName);
+              para.appendChild(newList[0].parentNode);
+            }
+          });
+          if (headList.children.length === 0) {
+            parentItem.removeChild(headList);
+          }
+          if (parentItem.childNodes.length === 0) {
+            parentItem.parentNode.removeChild(parentItem);
+          }
+        } else {
+          var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {
+            node: last.parentNode,
+            offset: dom.position(last) + 1
+          }, {
+            isSkipPaddingBlankHTML: true
+          }) : null;
+          var middleList = dom.splitTree(headList, {
+            node: head.parentNode,
+            offset: dom.position(head)
+          }, {
+            isSkipPaddingBlankHTML: true
+          });
+          paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi);
+
+          // LI to P
+          if (isEscapseToBody || !dom.isList(headList.parentNode)) {
+            paras = paras.map(function (para) {
+              return dom.replace(para, 'P');
+            });
+          }
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(lists.from(paras).reverse(), function (idx, para) {
+            dom.insertAfter(para, headList);
+          });
+
+          // remove empty lists
+          var rootLists = lists.compact([headList, middleList, lastList]);
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(rootLists, function (idx, rootList) {
+            var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));
+            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(listNodes.reverse(), function (idx, listNode) {
+              if (!dom.nodeLength(listNode)) {
+                dom.remove(listNode, true);
+              }
+            });
+          });
+        }
+        releasedParas = releasedParas.concat(paras);
+      });
+      return releasedParas;
+    }
+
+    /**
+     * @method appendToPrevious
+     *
+     * Appends list to previous list item, if
+     * none exist it wraps the list in a new list item.
+     *
+     * @param {HTMLNode} ListItem
+     * @return {HTMLNode}
+     */
+  }, {
+    key: "appendToPrevious",
+    value: function appendToPrevious(node) {
+      return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');
+    }
+
+    /**
+     * @method findList
+     *
+     * Finds an existing list in list item
+     *
+     * @param {HTMLNode} ListItem
+     * @return {Array[]}
+     */
+  }, {
+    key: "findList",
+    value: function findList(node) {
+      return node ? lists.find(node.children, function (child) {
+        return ['OL', 'UL'].indexOf(child.nodeName) > -1;
+      }) : null;
+    }
+
+    /**
+     * @method findNextSiblings
+     *
+     * Finds all list item siblings that follow it
+     *
+     * @param {HTMLNode} ListItem
+     * @return {HTMLNode}
+     */
+  }, {
+    key: "findNextSiblings",
+    value: function findNextSiblings(node) {
+      var siblings = [];
+      while (node.nextSibling) {
+        siblings.push(node.nextSibling);
+        node = node.nextSibling;
+      }
+      return siblings;
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/editing/Typing.js
+function Typing_typeof(o) { "@babel/helpers - typeof"; return Typing_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Typing_typeof(o); }
+function Typing_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Typing_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Typing_toPropertyKey(o.key), o); } }
+function Typing_createClass(e, r, t) { return r && Typing_defineProperties(e.prototype, r), t && Typing_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Typing_toPropertyKey(t) { var i = Typing_toPrimitive(t, "string"); return "symbol" == Typing_typeof(i) ? i : i + ""; }
+function Typing_toPrimitive(t, r) { if ("object" != Typing_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Typing_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+/**
+ * @class editing.Typing
+ *
+ * Typing
+ *
+ */
+var Typing = /*#__PURE__*/function () {
+  function Typing(context) {
+    Typing_classCallCheck(this, Typing);
+    // a Bullet instance to toggle lists off
+    this.bullet = new Bullet();
+    this.options = context.options;
+  }
+
+  /**
+   * insert tab
+   *
+   * @param {WrappedRange} rng
+   * @param {Number} tabsize
+   */
+  return Typing_createClass(Typing, [{
+    key: "insertTab",
+    value: function insertTab(rng, tabsize) {
+      var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));
+      rng = rng.deleteContents();
+      rng.insertNode(tab, true);
+      rng = range.create(tab, tabsize);
+      rng.select();
+    }
+
+    /**
+     * insert paragraph
+     *
+     * @param {jQuery} $editable
+     * @param {WrappedRange} rng Can be used in unit tests to "mock" the range
+     *
+     * blockquoteBreakingLevel
+     *   0 - No break, the new paragraph remains inside the quote
+     *   1 - Break the first blockquote in the ancestors list
+     *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)
+     */
+  }, {
+    key: "insertParagraph",
+    value: function insertParagraph(editable, rng) {
+      rng = rng || range.create(editable);
+
+      // deleteContents on range.
+      rng = rng.deleteContents();
+
+      // Wrap range if it needs to be wrapped by paragraph
+      rng = rng.wrapBodyInlineWithPara();
+
+      // finding paragraph
+      var splitRoot = dom.ancestor(rng.sc, dom.isPara);
+      var nextPara;
+      // on paragraph: split paragraph
+      if (splitRoot) {
+        // if it is an empty line with li
+        if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {
+          // toggle UL/OL and escape
+          this.bullet.toggleList(splitRoot.parentNode.nodeName);
+          return;
+        } else {
+          var blockquote = null;
+          if (this.options.blockquoteBreakingLevel === 1) {
+            blockquote = dom.ancestor(splitRoot, dom.isBlockquote);
+          } else if (this.options.blockquoteBreakingLevel === 2) {
+            blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);
+          }
+          if (blockquote) {
+            // We're inside a blockquote and options ask us to break it
+            nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];
+            // If the split is right before a <br>, remove it so that there's no "empty line"
+            // after the split in the new blockquote created
+            if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {
+              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(rng.sc.nextSibling).remove();
+            }
+            var split = dom.splitTree(blockquote, rng.getStartPoint(), {
+              isDiscardEmptySplits: true
+            });
+            if (split) {
+              split.parentNode.insertBefore(nextPara, split);
+            } else {
+              dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote
+            }
+          } else {
+            nextPara = dom.splitTree(splitRoot, rng.getStartPoint());
+
+            // not a blockquote, just insert the paragraph
+            var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);
+            emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));
+            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(emptyAnchors, function (idx, anchor) {
+              dom.remove(anchor);
+            });
+
+            // replace empty heading, pre or custom-made styleTag with P tag
+            if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {
+              nextPara = dom.replace(nextPara, 'p');
+            }
+          }
+        }
+        // no paragraph: insert empty paragraph
+      } else {
+        var next = rng.sc.childNodes[rng.so];
+        nextPara = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(dom.emptyPara)[0];
+        if (next) {
+          rng.sc.insertBefore(nextPara, next);
+        } else {
+          rng.sc.appendChild(nextPara);
+        }
+      }
+      range.create(nextPara, 0).normalize().select().scrollIntoView(editable);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/editing/Table.js
+function Table_typeof(o) { "@babel/helpers - typeof"; return Table_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Table_typeof(o); }
+function Table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Table_toPropertyKey(o.key), o); } }
+function Table_createClass(e, r, t) { return r && Table_defineProperties(e.prototype, r), t && Table_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Table_toPropertyKey(t) { var i = Table_toPrimitive(t, "string"); return "symbol" == Table_typeof(i) ? i : i + ""; }
+function Table_toPrimitive(t, r) { if ("object" != Table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Table_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+/**
+ * @class Create a virtual table to create what actions to do in change.
+ * @param {object} startPoint Cell selected to apply change.
+ * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where
+ * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction
+ * @param {object} domTable Dom element of table to make changes.
+ */
+var TableResultAction = function TableResultAction(startPoint, where, action, domTable) {
+  var _startPoint = {
+    'colPos': 0,
+    'rowPos': 0
+  };
+  var _virtualTable = [];
+  var _actionCellList = [];
+
+  /// ///////////////////////////////////////////
+  // Private functions
+  /// ///////////////////////////////////////////
+
+  /**
+   * Set the startPoint of action.
+   */
+  function setStartPoint() {
+    if (!startPoint || !startPoint.tagName || startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th') {
+      // Impossible to identify start Cell point
+      return;
+    }
+    _startPoint.colPos = startPoint.cellIndex;
+    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {
+      // Impossible to identify start Row point
+      return;
+    }
+    _startPoint.rowPos = startPoint.parentElement.rowIndex;
+  }
+
+  /**
+   * Define virtual table position info object.
+   *
+   * @param {int} rowIndex Index position in line of virtual table.
+   * @param {int} cellIndex Index position in column of virtual table.
+   * @param {object} baseRow Row affected by this position.
+   * @param {object} baseCell Cell affected by this position.
+   * @param {bool} isSpan Inform if it is an span cell/row.
+   */
+  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {
+    var objPosition = {
+      'baseRow': baseRow,
+      'baseCell': baseCell,
+      'isRowSpan': isRowSpan,
+      'isColSpan': isColSpan,
+      'isVirtual': isVirtualCell
+    };
+    if (!_virtualTable[rowIndex]) {
+      _virtualTable[rowIndex] = [];
+    }
+    _virtualTable[rowIndex][cellIndex] = objPosition;
+  }
+
+  /**
+   * Create action cell object.
+   *
+   * @param {object} virtualTableCellObj Object of specific position on virtual table.
+   * @param {enum} resultAction Action to be applied in that item.
+   */
+  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {
+    return {
+      'baseCell': virtualTableCellObj.baseCell,
+      'action': resultAction,
+      'virtualTable': {
+        'rowIndex': virtualRowPosition,
+        'cellIndex': virtualColPosition
+      }
+    };
+  }
+
+  /**
+   * Recover free index of row to append Cell.
+   *
+   * @param {int} rowIndex Index of row to find free space.
+   * @param {int} cellIndex Index of cell to find free space in table.
+   */
+  function recoverCellIndex(rowIndex, cellIndex) {
+    if (!_virtualTable[rowIndex]) {
+      return cellIndex;
+    }
+    if (!_virtualTable[rowIndex][cellIndex]) {
+      return cellIndex;
+    }
+    var newCellIndex = cellIndex;
+    while (_virtualTable[rowIndex][newCellIndex]) {
+      newCellIndex++;
+      if (!_virtualTable[rowIndex][newCellIndex]) {
+        return newCellIndex;
+      }
+    }
+  }
+
+  /**
+   * Recover info about row and cell and add information to virtual table.
+   *
+   * @param {object} row Row to recover information.
+   * @param {object} cell Cell to recover information.
+   */
+  function addCellInfoToVirtual(row, cell) {
+    var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);
+    var cellHasColspan = cell.colSpan > 1;
+    var cellHasRowspan = cell.rowSpan > 1;
+    var isThisSelectedCell = row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos;
+    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);
+
+    // Add span rows to virtual Table.
+    var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;
+    if (rowspanNumber > 1) {
+      for (var rp = 1; rp < rowspanNumber; rp++) {
+        var rowspanIndex = row.rowIndex + rp;
+        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);
+        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);
+      }
+    }
+
+    // Add span cols to virtual table.
+    var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;
+    if (colspanNumber > 1) {
+      for (var cp = 1; cp < colspanNumber; cp++) {
+        var cellspanIndex = recoverCellIndex(row.rowIndex, cellIndex + cp);
+        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);
+        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);
+      }
+    }
+  }
+
+  /**
+   * Process validation and adjust of start point if needed
+   *
+   * @param {int} rowIndex
+   * @param {int} cellIndex
+   * @param {object} cell
+   * @param {bool} isSelectedCell
+   */
+  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {
+    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {
+      _startPoint.colPos++;
+    }
+  }
+
+  /**
+   * Create virtual table of cells with all cells, including span cells.
+   */
+  function createVirtualTable() {
+    var rows = domTable.rows;
+    for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {
+      var cells = rows[rowIndex].cells;
+      for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) {
+        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);
+      }
+    }
+  }
+
+  /**
+   * Get action to be applied on the cell.
+   *
+   * @param {object} cell virtual table cell to apply action
+   */
+  function getDeleteResultActionToCell(cell) {
+    switch (where) {
+      case TableResultAction.where.Column:
+        if (cell.isColSpan) {
+          return TableResultAction.resultAction.SubtractSpanCount;
+        }
+        break;
+      case TableResultAction.where.Row:
+        if (!cell.isVirtual && cell.isRowSpan) {
+          return TableResultAction.resultAction.AddCell;
+        } else if (cell.isRowSpan) {
+          return TableResultAction.resultAction.SubtractSpanCount;
+        }
+        break;
+    }
+    return TableResultAction.resultAction.RemoveCell;
+  }
+
+  /**
+   * Get action to be applied on the cell.
+   *
+   * @param {object} cell virtual table cell to apply action
+   */
+  function getAddResultActionToCell(cell) {
+    switch (where) {
+      case TableResultAction.where.Column:
+        if (cell.isColSpan) {
+          return TableResultAction.resultAction.SumSpanCount;
+        } else if (cell.isRowSpan && cell.isVirtual) {
+          return TableResultAction.resultAction.Ignore;
+        }
+        break;
+      case TableResultAction.where.Row:
+        if (cell.isRowSpan) {
+          return TableResultAction.resultAction.SumSpanCount;
+        } else if (cell.isColSpan && cell.isVirtual) {
+          return TableResultAction.resultAction.Ignore;
+        }
+        break;
+    }
+    return TableResultAction.resultAction.AddCell;
+  }
+  function init() {
+    setStartPoint();
+    createVirtualTable();
+  }
+
+  /// ///////////////////////////////////////////
+  // Public functions
+  /// ///////////////////////////////////////////
+
+  /**
+   * Recover array os what to do in table.
+   */
+  this.getActionList = function () {
+    var fixedRow = where === TableResultAction.where.Row ? _startPoint.rowPos : -1;
+    var fixedCol = where === TableResultAction.where.Column ? _startPoint.colPos : -1;
+    var actualPosition = 0;
+    var canContinue = true;
+    while (canContinue) {
+      var rowPosition = fixedRow >= 0 ? fixedRow : actualPosition;
+      var colPosition = fixedCol >= 0 ? fixedCol : actualPosition;
+      var row = _virtualTable[rowPosition];
+      if (!row) {
+        canContinue = false;
+        return _actionCellList;
+      }
+      var cell = row[colPosition];
+      if (!cell) {
+        canContinue = false;
+        return _actionCellList;
+      }
+
+      // Define action to be applied in this cell
+      var resultAction = TableResultAction.resultAction.Ignore;
+      switch (action) {
+        case TableResultAction.requestAction.Add:
+          resultAction = getAddResultActionToCell(cell);
+          break;
+        case TableResultAction.requestAction.Delete:
+          resultAction = getDeleteResultActionToCell(cell);
+          break;
+      }
+      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));
+      actualPosition++;
+    }
+    return _actionCellList;
+  };
+  init();
+};
+/**
+*
+* Where action occours enum.
+*/
+TableResultAction.where = {
+  'Row': 0,
+  'Column': 1
+};
+/**
+*
+* Requested action to apply enum.
+*/
+TableResultAction.requestAction = {
+  'Add': 0,
+  'Delete': 1
+};
+/**
+*
+* Result action to be executed enum.
+*/
+TableResultAction.resultAction = {
+  'Ignore': 0,
+  'SubtractSpanCount': 1,
+  'RemoveCell': 2,
+  'AddCell': 3,
+  'SumSpanCount': 4
+};
+
+/**
+ *
+ * @class editing.Table
+ *
+ * Table
+ *
+ */
+var Table = /*#__PURE__*/function () {
+  function Table() {
+    Table_classCallCheck(this, Table);
+  }
+  return Table_createClass(Table, [{
+    key: "tab",
+    value:
+    /**
+     * handle tab key
+     *
+     * @param {WrappedRange} rng
+     * @param {Boolean} isShift
+     */
+    function tab(rng, isShift) {
+      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+      var table = dom.ancestor(cell, dom.isTable);
+      var cells = dom.listDescendant(table, dom.isCell);
+      var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);
+      if (nextCell) {
+        range.create(nextCell, 0).select();
+      }
+    }
+
+    /**
+     * Add a new row
+     *
+     * @param {WrappedRange} rng
+     * @param {String} position (top/bottom)
+     * @return {Node}
+     */
+  }, {
+    key: "addRow",
+    value: function addRow(rng, position) {
+      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+      var currentTr = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');
+      var trAttributes = this.recoverAttributes(currentTr);
+      var html = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<tr' + trAttributes + '></tr>');
+      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).closest('table')[0]);
+      var actions = vTable.getActionList();
+      for (var idCell = 0; idCell < actions.length; idCell++) {
+        var currentCell = actions[idCell];
+        var tdAttributes = this.recoverAttributes(currentCell.baseCell);
+        switch (currentCell.action) {
+          case TableResultAction.resultAction.AddCell:
+            html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');
+            break;
+          case TableResultAction.resultAction.SumSpanCount:
+            {
+              if (position === 'top') {
+                var baseCellTr = currentCell.baseCell.parent;
+                var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;
+                if (isTopFromRowSpan) {
+                  var newTd = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();
+                  html.append(newTd);
+                  break;
+                }
+              }
+              var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);
+              rowspanNumber++;
+              currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);
+            }
+            break;
+        }
+      }
+      if (position === 'top') {
+        currentTr.before(html);
+      } else {
+        var cellHasRowspan = cell.rowSpan > 1;
+        if (cellHasRowspan) {
+          var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentTr).parent().find('tr')[lastTrIndex]).after(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(html));
+          return;
+        }
+        currentTr.after(html);
+      }
+    }
+
+    /**
+     * Add a new col
+     *
+     * @param {WrappedRange} rng
+     * @param {String} position (left/right)
+     * @return {Node}
+     */
+  }, {
+    key: "addCol",
+    value: function addCol(rng, position) {
+      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');
+      var rowsGroup = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).siblings();
+      rowsGroup.push(row);
+      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);
+      var actions = vTable.getActionList();
+      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {
+        var currentCell = actions[actionIndex];
+        var tdAttributes = this.recoverAttributes(currentCell.baseCell);
+        switch (currentCell.action) {
+          case TableResultAction.resultAction.AddCell:
+            if (position === 'right') {
+              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');
+            } else {
+              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');
+            }
+            break;
+          case TableResultAction.resultAction.SumSpanCount:
+            if (position === 'right') {
+              var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);
+              colspanNumber++;
+              currentCell.baseCell.setAttribute('colSpan', colspanNumber);
+            } else {
+              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');
+            }
+            break;
+        }
+      }
+    }
+
+    /*
+    * Copy attributes from element.
+    *
+    * @param {object} Element to recover attributes.
+    * @return {string} Copied string elements.
+    */
+  }, {
+    key: "recoverAttributes",
+    value: function recoverAttributes(el) {
+      var resultStr = '';
+      if (!el) {
+        return resultStr;
+      }
+      var attrList = el.attributes || [];
+      for (var i = 0; i < attrList.length; i++) {
+        if (attrList[i].name.toLowerCase() === 'id') {
+          continue;
+        }
+        if (attrList[i].specified) {
+          resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\'';
+        }
+      }
+      return resultStr;
+    }
+
+    /**
+     * Delete current row
+     *
+     * @param {WrappedRange} rng
+     * @return {Node}
+     */
+  }, {
+    key: "deleteRow",
+    value: function deleteRow(rng) {
+      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');
+      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));
+      var rowPos = row[0].rowIndex;
+      var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);
+      var actions = vTable.getActionList();
+      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {
+        if (!actions[actionIndex]) {
+          continue;
+        }
+        var baseCell = actions[actionIndex].baseCell;
+        var virtualPosition = actions[actionIndex].virtualTable;
+        var hasRowspan = baseCell.rowSpan && baseCell.rowSpan > 1;
+        var rowspanNumber = hasRowspan ? parseInt(baseCell.rowSpan, 10) : 0;
+        switch (actions[actionIndex].action) {
+          case TableResultAction.resultAction.Ignore:
+            continue;
+          case TableResultAction.resultAction.AddCell:
+            {
+              var nextRow = row.next('tr')[0];
+              if (!nextRow) {
+                continue;
+              }
+              var cloneRow = row[0].cells[cellPos];
+              if (hasRowspan) {
+                if (rowspanNumber > 2) {
+                  rowspanNumber--;
+                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);
+                  nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);
+                  nextRow.cells[cellPos].innerHTML = '';
+                } else if (rowspanNumber === 2) {
+                  nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);
+                  nextRow.cells[cellPos].removeAttribute('rowSpan');
+                  nextRow.cells[cellPos].innerHTML = '';
+                }
+              }
+            }
+            continue;
+          case TableResultAction.resultAction.SubtractSpanCount:
+            if (hasRowspan) {
+              if (rowspanNumber > 2) {
+                rowspanNumber--;
+                baseCell.setAttribute('rowSpan', rowspanNumber);
+                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {
+                  baseCell.innerHTML = '';
+                }
+              } else if (rowspanNumber === 2) {
+                baseCell.removeAttribute('rowSpan');
+                if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) {
+                  baseCell.innerHTML = '';
+                }
+              }
+            }
+            continue;
+          case TableResultAction.resultAction.RemoveCell:
+            // Do not need remove cell because row will be deleted.
+            continue;
+        }
+      }
+      row.remove();
+    }
+
+    /**
+     * Delete current col
+     *
+     * @param {WrappedRange} rng
+     * @return {Node}
+     */
+  }, {
+    key: "deleteCol",
+    value: function deleteCol(rng) {
+      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+      var row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('tr');
+      var cellPos = row.children('td, th').index(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell));
+      var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(row).closest('table')[0]);
+      var actions = vTable.getActionList();
+      for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) {
+        if (!actions[actionIndex]) {
+          continue;
+        }
+        switch (actions[actionIndex].action) {
+          case TableResultAction.resultAction.Ignore:
+            continue;
+          case TableResultAction.resultAction.SubtractSpanCount:
+            {
+              var baseCell = actions[actionIndex].baseCell;
+              var hasColspan = baseCell.colSpan && baseCell.colSpan > 1;
+              if (hasColspan) {
+                var colspanNumber = baseCell.colSpan ? parseInt(baseCell.colSpan, 10) : 0;
+                if (colspanNumber > 2) {
+                  colspanNumber--;
+                  baseCell.setAttribute('colSpan', colspanNumber);
+                  if (baseCell.cellIndex === cellPos) {
+                    baseCell.innerHTML = '';
+                  }
+                } else if (colspanNumber === 2) {
+                  baseCell.removeAttribute('colSpan');
+                  if (baseCell.cellIndex === cellPos) {
+                    baseCell.innerHTML = '';
+                  }
+                }
+              }
+            }
+            continue;
+          case TableResultAction.resultAction.RemoveCell:
+            dom.remove(actions[actionIndex].baseCell, true);
+            continue;
+        }
+      }
+    }
+
+    /**
+     * create empty table element
+     *
+     * @param {Number} rowCount
+     * @param {Number} colCount
+     * @return {Node}
+     */
+  }, {
+    key: "createTable",
+    value: function createTable(colCount, rowCount, options) {
+      var tds = [];
+      var tdHTML;
+      for (var idxCol = 0; idxCol < colCount; idxCol++) {
+        tds.push('<td>' + dom.blank + '</td>');
+      }
+      tdHTML = tds.join('');
+      var trs = [];
+      var trHTML;
+      for (var idxRow = 0; idxRow < rowCount; idxRow++) {
+        trs.push('<tr>' + tdHTML + '</tr>');
+      }
+      trHTML = trs.join('');
+      var $table = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<table>' + trHTML + '</table>');
+      if (options && options.tableClassName) {
+        $table.addClass(options.tableClassName);
+      }
+      return $table[0];
+    }
+
+    /**
+     * Delete current table
+     *
+     * @param {WrappedRange} rng
+     * @return {Node}
+     */
+  }, {
+    key: "deleteTable",
+    value: function deleteTable(rng) {
+      var cell = dom.ancestor(rng.commonAncestor(), dom.isCell);
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(cell).closest('table').remove();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Editor.js
+function Editor_typeof(o) { "@babel/helpers - typeof"; return Editor_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Editor_typeof(o); }
+function Editor_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Editor_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Editor_toPropertyKey(o.key), o); } }
+function Editor_createClass(e, r, t) { return r && Editor_defineProperties(e.prototype, r), t && Editor_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Editor_toPropertyKey(t) { var i = Editor_toPrimitive(t, "string"); return "symbol" == Editor_typeof(i) ? i : i + ""; }
+function Editor_toPrimitive(t, r) { if ("object" != Editor_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Editor_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+
+
+
+
+
+
+
+
+var KEY_BOGUS = 'bogus';
+var MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
+var TEL_PATTERN = /^(\+?\d{1,3}[\s-]?)?(\d{1,4})[\s-]?(\d{1,4})[\s-]?(\d{1,4})$/;
+var URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\:|#|\/)/;
+
+/**
+ * @class Editor
+ */
+var Editor = /*#__PURE__*/function () {
+  function Editor(context) {
+    var _this = this;
+    Editor_classCallCheck(this, Editor);
+    this.context = context;
+    this.$note = context.layoutInfo.note;
+    this.$editor = context.layoutInfo.editor;
+    this.$editable = context.layoutInfo.editable;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+    this.editable = this.$editable[0];
+    this.lastRange = null;
+    this.snapshot = null;
+    this.style = new Style();
+    this.table = new Table();
+    this.typing = new Typing(context);
+    this.bullet = new Bullet();
+    this.history = new History(context);
+    this.context.memo('help.escape', this.lang.help.escape);
+    this.context.memo('help.undo', this.lang.help.undo);
+    this.context.memo('help.redo', this.lang.help.redo);
+    this.context.memo('help.tab', this.lang.help.tab);
+    this.context.memo('help.untab', this.lang.help.untab);
+    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);
+    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);
+    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);
+    this.context.memo('help.indent', this.lang.help.indent);
+    this.context.memo('help.outdent', this.lang.help.outdent);
+    this.context.memo('help.formatPara', this.lang.help.formatPara);
+    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);
+    this.context.memo('help.fontName', this.lang.help.fontName);
+
+    // native commands(with execCommand), generate function for execCommand
+    var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor'];
+    for (var idx = 0, len = commands.length; idx < len; idx++) {
+      this[commands[idx]] = function (sCmd) {
+        return function (value) {
+          _this.beforeCommand();
+          document.execCommand(sCmd, false, value);
+          _this.afterCommand(true);
+        };
+      }(commands[idx]);
+      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);
+    }
+    this.fontName = this.wrapCommand(function (value) {
+      return _this.fontStyling('font-family', env.validFontName(value));
+    });
+    this.fontSize = this.wrapCommand(function (value) {
+      var unit = _this.currentStyle()['font-size-unit'];
+      return _this.fontStyling('font-size', value + unit);
+    });
+    this.fontSizeUnit = this.wrapCommand(function (value) {
+      var size = _this.currentStyle()['font-size'];
+      return _this.fontStyling('font-size', size + value);
+    });
+    for (var _idx = 1; _idx <= 6; _idx++) {
+      this['formatH' + _idx] = function (idx) {
+        return function () {
+          _this.formatBlock('H' + idx);
+        };
+      }(_idx);
+      this.context.memo('help.formatH' + _idx, this.lang.help['formatH' + _idx]);
+    }
+    this.insertParagraph = this.wrapCommand(function () {
+      _this.typing.insertParagraph(_this.editable);
+    });
+    this.insertOrderedList = this.wrapCommand(function () {
+      _this.bullet.insertOrderedList(_this.editable);
+    });
+    this.insertUnorderedList = this.wrapCommand(function () {
+      _this.bullet.insertUnorderedList(_this.editable);
+    });
+    this.indent = this.wrapCommand(function () {
+      _this.bullet.indent(_this.editable);
+    });
+    this.outdent = this.wrapCommand(function () {
+      _this.bullet.outdent(_this.editable);
+    });
+
+    /**
+     * insertNode
+     * insert node
+     * @param {Node} node
+     */
+    this.insertNode = this.wrapCommand(function (node) {
+      if (_this.isLimited(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).text().length)) {
+        return;
+      }
+      var rng = _this.getLastRange();
+      rng.insertNode(node);
+      _this.setLastRange(range.createFromNodeAfter(node).select());
+    });
+
+    /**
+     * insert text
+     * @param {String} text
+     */
+    this.insertText = this.wrapCommand(function (text) {
+      if (_this.isLimited(text.length)) {
+        return;
+      }
+      var rng = _this.getLastRange();
+      var textNode = rng.insertNode(dom.createText(text));
+      _this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());
+    });
+
+    /**
+     * paste HTML
+     * @param {String} markup
+     */
+    this.pasteHTML = this.wrapCommand(function (markup) {
+      if (_this.isLimited(markup.length)) {
+        return;
+      }
+      markup = _this.context.invoke('codeview.purify', markup);
+      var contents = _this.getLastRange().pasteHTML(markup);
+      _this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());
+    });
+
+    /**
+     * formatBlock
+     *
+     * @param {String} tagName
+     */
+    this.formatBlock = this.wrapCommand(function (tagName, $target) {
+      var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle;
+      if (onApplyCustomStyle) {
+        onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock);
+      } else {
+        _this.onFormatBlock(tagName, $target);
+      }
+    });
+
+    /**
+     * insert horizontal rule
+     */
+    this.insertHorizontalRule = this.wrapCommand(function () {
+      var hrNode = _this.getLastRange().insertNode(dom.create('HR'));
+      if (hrNode.nextSibling) {
+        _this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());
+      }
+    });
+
+    /**
+     * lineHeight
+     * @param {String} value
+     */
+    this.lineHeight = this.wrapCommand(function (value) {
+      _this.style.stylePara(_this.getLastRange(), {
+        lineHeight: value
+      });
+    });
+
+    /**
+     * create link (command)
+     *
+     * @param {Object} linkInfo
+     */
+    this.createLink = this.wrapCommand(function (linkInfo) {
+      var rel = [];
+      var linkUrl = linkInfo.url;
+      var linkText = linkInfo.text;
+      var isNewWindow = linkInfo.isNewWindow;
+      var addNoReferrer = _this.options.linkAddNoReferrer;
+      var addNoOpener = _this.options.linkAddNoOpener;
+      var rng = linkInfo.range || _this.getLastRange();
+      var additionalTextLength = linkText.length - rng.toString().length;
+      if (additionalTextLength > 0 && _this.isLimited(additionalTextLength)) {
+        return;
+      }
+      var isTextChanged = rng.toString() !== linkText;
+
+      // handle spaced urls from input
+      if (typeof linkUrl === 'string') {
+        linkUrl = linkUrl.trim();
+      }
+      if (_this.options.onCreateLink) {
+        linkUrl = _this.options.onCreateLink(linkUrl);
+      } else {
+        linkUrl = _this.checkLinkUrl(linkUrl);
+      }
+      var anchors = [];
+      if (isTextChanged) {
+        rng = rng.deleteContents();
+        var anchor = rng.insertNode(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<A></A>').text(linkText)[0]);
+        anchors.push(anchor);
+      } else {
+        anchors = _this.style.styleNodes(rng, {
+          nodeName: 'A',
+          expandClosestSibling: true,
+          onlyPartialContains: true
+        });
+      }
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(anchors, function (idx, anchor) {
+        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href', linkUrl);
+        if (isNewWindow) {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('target', '_blank');
+          if (addNoReferrer) {
+            rel.push('noreferrer');
+          }
+          if (addNoOpener) {
+            rel.push('noopener');
+          }
+          if (rel.length) {
+            external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('rel', rel.join(' '));
+          }
+        } else {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).removeAttr('target');
+        }
+      });
+      _this.setLastRange(_this.createRangeFromList(anchors).select());
+    });
+
+    /**
+     * setting color
+     *
+     * @param {Object} sObjColor  color code
+     * @param {String} sObjColor.foreColor foreground color
+     * @param {String} sObjColor.backColor background color
+     */
+    this.color = this.wrapCommand(function (colorInfo) {
+      var foreColor = colorInfo.foreColor;
+      var backColor = colorInfo.backColor;
+      if (foreColor) {
+        document.execCommand('foreColor', false, foreColor);
+      }
+      if (backColor) {
+        document.execCommand('backColor', false, backColor);
+      }
+    });
+
+    /**
+     * Set foreground color
+     *
+     * @param {String} colorCode foreground color code
+     */
+    this.foreColor = this.wrapCommand(function (colorInfo) {
+      document.execCommand('foreColor', false, colorInfo);
+    });
+
+    /**
+     * insert Table
+     *
+     * @param {String} dimension of table (ex : "5x5")
+     */
+    this.insertTable = this.wrapCommand(function (dim) {
+      var dimension = dim.split('x');
+      var rng = _this.getLastRange().deleteContents();
+      rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options));
+    });
+
+    /**
+     * remove media object and Figure Elements if media object is img with Figure.
+     */
+    this.removeMedia = this.wrapCommand(function () {
+      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).parent();
+      if ($target.closest('figure').length) {
+        $target.closest('figure').remove();
+      } else {
+        $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget()).detach();
+      }
+      _this.setLastRange(range.createFromSelection($target).select());
+      _this.context.triggerEvent('media.delete', $target, _this.$editable);
+    });
+
+    /**
+     * float me
+     *
+     * @param {String} value
+     */
+    this.floatMe = this.wrapCommand(function (value) {
+      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());
+      $target.toggleClass('note-float-left', value === 'left');
+      $target.toggleClass('note-float-right', value === 'right');
+      $target.css('float', value === 'none' ? '' : value);
+    });
+
+    /**
+     * resize overlay element
+     * @param {String} value
+     */
+    this.resize = this.wrapCommand(function (value) {
+      var $target = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(_this.restoreTarget());
+      value = parseFloat(value);
+      if (value === 0) {
+        $target.css('width', '');
+      } else {
+        $target.css({
+          width: value * 100 + '%',
+          height: ''
+        });
+      }
+    });
+  }
+  return Editor_createClass(Editor, [{
+    key: "initialize",
+    value: function initialize() {
+      var _this2 = this;
+      // bind custom events
+      this.$editable.on('keydown', function (event) {
+        if (event.keyCode === key.code.ENTER) {
+          _this2.context.triggerEvent('enter', event);
+        }
+        _this2.context.triggerEvent('keydown', event);
+
+        // keep a snapshot to limit text on input event
+        _this2.snapshot = _this2.history.makeSnapshot();
+        _this2.hasKeyShortCut = false;
+        if (!event.isDefaultPrevented()) {
+          if (_this2.options.shortcuts) {
+            _this2.hasKeyShortCut = _this2.handleKeyMap(event);
+          } else {
+            _this2.preventDefaultEditableShortCuts(event);
+          }
+        }
+        if (_this2.isLimited(1, event)) {
+          var lastRange = _this2.getLastRange();
+          if (lastRange.eo - lastRange.so === 0) {
+            return false;
+          }
+        }
+        _this2.setLastRange();
+
+        // record undo in the key event except keyMap.
+        if (_this2.options.recordEveryKeystroke) {
+          if (_this2.hasKeyShortCut === false) {
+            _this2.history.recordUndo();
+          }
+        }
+      }).on('keyup', function (event) {
+        _this2.setLastRange();
+        _this2.context.triggerEvent('keyup', event);
+      }).on('focus', function (event) {
+        _this2.setLastRange();
+        _this2.context.triggerEvent('focus', event);
+      }).on('blur', function (event) {
+        _this2.context.triggerEvent('blur', event);
+      }).on('mousedown', function (event) {
+        _this2.context.triggerEvent('mousedown', event);
+      }).on('mouseup', function (event) {
+        _this2.setLastRange();
+        _this2.history.recordUndo();
+        _this2.context.triggerEvent('mouseup', event);
+      }).on('scroll', function (event) {
+        _this2.context.triggerEvent('scroll', event);
+      }).on('paste', function (event) {
+        _this2.setLastRange();
+        _this2.context.triggerEvent('paste', event);
+      }).on('copy', function (event) {
+        _this2.context.triggerEvent('copy', event);
+      }).on('input', function () {
+        // To limit composition characters (e.g. Korean)
+        if (_this2.isLimited(0) && _this2.snapshot) {
+          _this2.history.applySnapshot(_this2.snapshot);
+        }
+      });
+      this.$editable.attr('spellcheck', this.options.spellCheck);
+      this.$editable.attr('autocorrect', this.options.spellCheck);
+      if (this.options.disableGrammar) {
+        this.$editable.attr('data-gramm', false);
+      }
+
+      // init content before set event
+      this.$editable.html(dom.html(this.$note) || dom.emptyPara);
+      this.$editable.on(env.inputEventName, func.debounce(function () {
+        _this2.context.triggerEvent('change', _this2.$editable.html(), _this2.$editable);
+      }, 10));
+      this.$editable.on('focusin', function (event) {
+        _this2.context.triggerEvent('focusin', event);
+      }).on('focusout', function (event) {
+        _this2.context.triggerEvent('focusout', event);
+      });
+      if (this.options.airMode) {
+        if (this.options.overrideContextMenu) {
+          this.$editor.on('contextmenu', function (event) {
+            _this2.context.triggerEvent('contextmenu', event);
+            return false;
+          });
+        }
+      } else {
+        if (this.options.width) {
+          this.$editor.outerWidth(this.options.width);
+        }
+        if (this.options.height) {
+          this.$editable.outerHeight(this.options.height);
+        }
+        if (this.options.maxHeight) {
+          this.$editable.css('max-height', this.options.maxHeight);
+        }
+        if (this.options.minHeight) {
+          this.$editable.css('min-height', this.options.minHeight);
+        }
+      }
+      this.history.recordUndo();
+      this.setLastRange();
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$editable.off();
+    }
+  }, {
+    key: "handleKeyMap",
+    value: function handleKeyMap(event) {
+      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];
+      var keys = [];
+      if (event.metaKey) {
+        keys.push('CMD');
+      }
+      if (event.ctrlKey && !event.altKey) {
+        keys.push('CTRL');
+      }
+      if (event.shiftKey) {
+        keys.push('SHIFT');
+      }
+      var keyName = key.nameFromCode[event.keyCode];
+      if (keyName) {
+        keys.push(keyName);
+      }
+      var eventName = keyMap[keys.join('+')];
+      if (keyName === 'TAB' && !this.options.tabDisable) {
+        this.afterCommand();
+      } else if (eventName) {
+        if (this.context.invoke(eventName) !== false) {
+          event.preventDefault();
+          return true;
+        }
+      } else if (key.isEdit(event.keyCode)) {
+        if (key.isRemove(event.keyCode)) {
+          this.context.invoke('removed');
+        }
+        this.afterCommand();
+      }
+      return false;
+    }
+  }, {
+    key: "preventDefaultEditableShortCuts",
+    value: function preventDefaultEditableShortCuts(event) {
+      // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)
+      if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) {
+        event.preventDefault();
+      }
+    }
+  }, {
+    key: "isLimited",
+    value: function isLimited(pad, event) {
+      pad = pad || 0;
+      if (typeof event !== 'undefined') {
+        if (key.isMove(event.keyCode) || key.isNavigation(event.keyCode) || event.ctrlKey || event.metaKey || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {
+          return false;
+        }
+      }
+      if (this.options.maxTextLength > 0) {
+        if (this.$editable.text().length + pad > this.options.maxTextLength) {
+          return true;
+        }
+      }
+      return false;
+    }
+  }, {
+    key: "checkLinkUrl",
+    value: function checkLinkUrl(linkUrl) {
+      if (MAILTO_PATTERN.test(linkUrl)) {
+        return 'mailto://' + linkUrl;
+      } else if (TEL_PATTERN.test(linkUrl)) {
+        return 'tel://' + linkUrl;
+      } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {
+        return 'http://' + linkUrl;
+      }
+      return linkUrl;
+    }
+
+    /**
+     * create range
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "createRange",
+    value: function createRange() {
+      this.focus();
+      this.setLastRange();
+      return this.getLastRange();
+    }
+
+    /**
+     * create a new range from the list of elements
+     *
+     * @param {list} dom element list
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "createRangeFromList",
+    value: function createRangeFromList(lst) {
+      var startRange = range.createFromNodeBefore(lists.head(lst));
+      var startPoint = startRange.getStartPoint();
+      var endRange = range.createFromNodeAfter(lists.last(lst));
+      var endPoint = endRange.getEndPoint();
+      return range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset);
+    }
+
+    /**
+     * set the last range
+     *
+     * if given rng is exist, set rng as the last range
+     * or create a new range at the end of the document
+     *
+     * @param {WrappedRange} rng
+     */
+  }, {
+    key: "setLastRange",
+    value: function setLastRange(rng) {
+      if (rng) {
+        this.lastRange = rng;
+      } else {
+        this.lastRange = range.create(this.editable);
+        if (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.lastRange.sc).closest('.note-editable').length === 0) {
+          this.lastRange = range.createFromBodyElement(this.editable);
+        }
+      }
+    }
+
+    /**
+     * get the last range
+     *
+     * if there is a saved last range, return it
+     * or create a new range and return it
+     *
+     * @return {WrappedRange}
+     */
+  }, {
+    key: "getLastRange",
+    value: function getLastRange() {
+      if (!this.lastRange) {
+        this.setLastRange();
+      }
+      return this.lastRange;
+    }
+
+    /**
+     * saveRange
+     *
+     * save current range
+     *
+     * @param {Boolean} [thenCollapse=false]
+     */
+  }, {
+    key: "saveRange",
+    value: function saveRange(thenCollapse) {
+      if (thenCollapse) {
+        this.getLastRange().collapse().select();
+      }
+    }
+
+    /**
+     * restoreRange
+     *
+     * restore lately range
+     */
+  }, {
+    key: "restoreRange",
+    value: function restoreRange() {
+      if (this.lastRange) {
+        this.lastRange.select();
+        this.focus();
+      }
+    }
+  }, {
+    key: "saveTarget",
+    value: function saveTarget(node) {
+      this.$editable.data('target', node);
+    }
+  }, {
+    key: "clearTarget",
+    value: function clearTarget() {
+      this.$editable.removeData('target');
+    }
+  }, {
+    key: "restoreTarget",
+    value: function restoreTarget() {
+      return this.$editable.data('target');
+    }
+
+    /**
+     * currentStyle
+     *
+     * current style
+     * @return {Object|Boolean} unfocus
+     */
+  }, {
+    key: "currentStyle",
+    value: function currentStyle() {
+      var rng = range.create();
+      if (rng) {
+        rng = rng.normalize();
+      }
+      return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);
+    }
+
+    /**
+     * style from node
+     *
+     * @param {jQuery} $node
+     * @return {Object}
+     */
+  }, {
+    key: "styleFromNode",
+    value: function styleFromNode($node) {
+      return this.style.fromNode($node);
+    }
+
+    /**
+     * undo
+     */
+  }, {
+    key: "undo",
+    value: function undo() {
+      this.context.triggerEvent('before.command', this.$editable.html());
+      this.history.undo();
+      this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+    }
+
+    /*
+    * commit
+    */
+  }, {
+    key: "commit",
+    value: function commit() {
+      this.context.triggerEvent('before.command', this.$editable.html());
+      this.history.commit();
+      this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+    }
+
+    /**
+     * redo
+     */
+  }, {
+    key: "redo",
+    value: function redo() {
+      this.context.triggerEvent('before.command', this.$editable.html());
+      this.history.redo();
+      this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+    }
+
+    /**
+     * before command
+     */
+  }, {
+    key: "beforeCommand",
+    value: function beforeCommand() {
+      this.context.triggerEvent('before.command', this.$editable.html());
+
+      // Set styleWithCSS before run a command
+      document.execCommand('styleWithCSS', false, this.options.styleWithCSS);
+
+      // keep focus on editable before command execution
+      this.focus();
+    }
+
+    /**
+     * after command
+     * @param {Boolean} isPreventTrigger
+     */
+  }, {
+    key: "afterCommand",
+    value: function afterCommand(isPreventTrigger) {
+      this.normalizeContent();
+      this.history.recordUndo();
+      if (!isPreventTrigger) {
+        this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+      }
+    }
+
+    /**
+     * handle tab key
+     */
+  }, {
+    key: "tab",
+    value: function tab() {
+      var rng = this.getLastRange();
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.table.tab(rng);
+      } else {
+        if (this.options.tabSize === 0) {
+          return false;
+        }
+        if (!this.isLimited(this.options.tabSize)) {
+          this.beforeCommand();
+          this.typing.insertTab(rng, this.options.tabSize);
+          this.afterCommand();
+        }
+      }
+    }
+
+    /**
+     * handle shift+tab key
+     */
+  }, {
+    key: "untab",
+    value: function untab() {
+      var rng = this.getLastRange();
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.table.tab(rng, true);
+      } else {
+        if (this.options.tabSize === 0) {
+          return false;
+        }
+      }
+    }
+
+    /**
+     * run given function between beforeCommand and afterCommand
+     */
+  }, {
+    key: "wrapCommand",
+    value: function wrapCommand(fn) {
+      return function () {
+        this.beforeCommand();
+        fn.apply(this, arguments);
+        this.afterCommand();
+      };
+    }
+    /**
+     * removed (function added by 1der1)
+    */
+  }, {
+    key: "removed",
+    value: function removed(rng, node, tagName) {
+      // LB
+      rng = range.create();
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        node = rng.ec;
+        if ((tagName = node.tagName) && node.childElementCount === 1 && node.childNodes[0].tagName === "BR") {
+          if (tagName === "P") {
+            node.remove();
+          } else if (['TH', 'TD'].indexOf(tagName) >= 0) {
+            node.firstChild.remove();
+          }
+        }
+      }
+    }
+    /**
+     * insert image
+     *
+     * @param {String} src
+     * @param {String|Function} param
+     * @return {Promise}
+     */
+  }, {
+    key: "insertImage",
+    value: function insertImage(src, param) {
+      var _this3 = this;
+      return createImage(src, param).then(function ($image) {
+        _this3.beforeCommand();
+        if (typeof param === 'function') {
+          param($image);
+        } else {
+          if (typeof param === 'string') {
+            $image.attr('data-filename', param);
+          }
+          $image.css('width', Math.min(_this3.$editable.width(), $image.width()));
+        }
+        $image.show();
+        _this3.getLastRange().insertNode($image[0]);
+        _this3.setLastRange(range.createFromNodeAfter($image[0]).select());
+        _this3.afterCommand();
+      }).fail(function (e) {
+        _this3.context.triggerEvent('image.upload.error', e);
+      });
+    }
+
+    /**
+     * insertImages
+     * @param {File[]} files
+     */
+  }, {
+    key: "insertImagesAsDataURL",
+    value: function insertImagesAsDataURL(files) {
+      var _this4 = this;
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(files, function (idx, file) {
+        var filename = file.name;
+        if (_this4.options.maximumImageFileSize && _this4.options.maximumImageFileSize < file.size) {
+          _this4.context.triggerEvent('image.upload.error', _this4.lang.image.maximumFileSizeError);
+        } else {
+          readFileAsDataURL(file).then(function (dataURL) {
+            return _this4.insertImage(dataURL, filename);
+          }).fail(function () {
+            _this4.context.triggerEvent('image.upload.error');
+          });
+        }
+      });
+    }
+
+    /**
+     * insertImagesOrCallback
+     * @param {File[]} files
+     */
+  }, {
+    key: "insertImagesOrCallback",
+    value: function insertImagesOrCallback(files) {
+      var callbacks = this.options.callbacks;
+      // If onImageUpload set,
+      if (callbacks.onImageUpload) {
+        this.context.triggerEvent('image.upload', files);
+        // else insert Image as dataURL
+      } else {
+        this.insertImagesAsDataURL(files);
+      }
+    }
+
+    /**
+     * return selected plain text
+     * @return {String} text
+     */
+  }, {
+    key: "getSelectedText",
+    value: function getSelectedText() {
+      var rng = this.getLastRange();
+
+      // if range on anchor, expand range with anchor
+      if (rng.isOnAnchor()) {
+        rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));
+      }
+      return rng.toString();
+    }
+  }, {
+    key: "onFormatBlock",
+    value: function onFormatBlock(tagName, $target) {
+      // [workaround] for MSIE, IE need `<`
+      document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);
+
+      // support custom class
+      if ($target && $target.length) {
+        // find the exact element has given tagName
+        if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {
+          $target = $target.find(tagName);
+        }
+        if ($target && $target.length) {
+          var currentRange = this.createRange();
+          var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()([currentRange.sc, currentRange.ec]).closest(tagName);
+          // remove class added for current block
+          $parent.removeClass();
+          var className = $target[0].className || '';
+          if (className) {
+            $parent.addClass(className);
+          }
+        }
+      }
+    }
+  }, {
+    key: "formatPara",
+    value: function formatPara() {
+      this.formatBlock('P');
+    }
+  }, {
+    key: "fontStyling",
+    value: function fontStyling(target, value) {
+      var rng = this.getLastRange();
+      if (rng !== '') {
+        var spans = this.style.styleNodes(rng);
+        this.$editor.find('.note-status-output').html('');
+        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(spans).css(target, value);
+
+        // [workaround] added styled bogus span for style
+        //  - also bogus character needed for cursor position
+        if (rng.isCollapsed()) {
+          var firstSpan = lists.head(spans);
+          if (firstSpan && !dom.nodeLength(firstSpan)) {
+            firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;
+            range.createFromNode(firstSpan.firstChild).select();
+            this.setLastRange();
+            this.$editable.data(KEY_BOGUS, firstSpan);
+          }
+        } else {
+          rng.select();
+        }
+      } else {
+        var noteStatusOutput = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().now();
+        this.$editor.find('.note-status-output').html('<div id="note-status-output-' + noteStatusOutput + '" class="alert alert-info">' + this.lang.output.noSelection + '</div>');
+        setTimeout(function () {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('#note-status-output-' + noteStatusOutput).remove();
+        }, 5000);
+      }
+    }
+
+    /**
+     * unlink
+     *
+     * @type command
+     */
+  }, {
+    key: "unlink",
+    value: function unlink() {
+      var rng = this.getLastRange();
+      if (rng.isOnAnchor()) {
+        var anchor = dom.ancestor(rng.sc, dom.isAnchor);
+        rng = range.createFromNode(anchor);
+        rng.select();
+        this.setLastRange();
+        this.beforeCommand();
+        document.execCommand('unlink');
+        this.afterCommand();
+      }
+    }
+
+    /**
+     * returns link info
+     *
+     * @return {Object}
+     * @return {WrappedRange} return.range
+     * @return {String} return.text
+     * @return {Boolean} [return.isNewWindow=true]
+     * @return {String} [return.url=""]
+     */
+  }, {
+    key: "getLinkInfo",
+    value: function getLinkInfo() {
+      if (!this.hasFocus()) {
+        this.focus();
+      }
+      var rng = this.getLastRange().expand(dom.isAnchor);
+      // Get the first anchor on range(for edit).
+      var $anchor = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(lists.head(rng.nodes(dom.isAnchor)));
+      var linkInfo = {
+        range: rng,
+        text: rng.toString(),
+        url: $anchor.length ? $anchor.attr('href') : ''
+      };
+
+      // When anchor exists,
+      if ($anchor.length) {
+        // Set isNewWindow by checking its target.
+        linkInfo.isNewWindow = $anchor.attr('target') === '_blank';
+      }
+      return linkInfo;
+    }
+  }, {
+    key: "addRow",
+    value: function addRow(position) {
+      var rng = this.getLastRange(this.$editable);
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.beforeCommand();
+        this.table.addRow(rng, position);
+        this.afterCommand();
+      }
+    }
+  }, {
+    key: "addCol",
+    value: function addCol(position) {
+      var rng = this.getLastRange(this.$editable);
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.beforeCommand();
+        this.table.addCol(rng, position);
+        this.afterCommand();
+      }
+    }
+  }, {
+    key: "deleteRow",
+    value: function deleteRow() {
+      var rng = this.getLastRange(this.$editable);
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.beforeCommand();
+        this.table.deleteRow(rng);
+        this.afterCommand();
+      }
+    }
+  }, {
+    key: "deleteCol",
+    value: function deleteCol() {
+      var rng = this.getLastRange(this.$editable);
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.beforeCommand();
+        this.table.deleteCol(rng);
+        this.afterCommand();
+      }
+    }
+  }, {
+    key: "deleteTable",
+    value: function deleteTable() {
+      var rng = this.getLastRange(this.$editable);
+      if (rng.isCollapsed() && rng.isOnCell()) {
+        this.beforeCommand();
+        this.table.deleteTable(rng);
+        this.afterCommand();
+      }
+    }
+
+    /**
+     * @param {Position} pos
+     * @param {jQuery} $target - target element
+     * @param {Boolean} [bKeepRatio] - keep ratio
+     */
+  }, {
+    key: "resizeTo",
+    value: function resizeTo(pos, $target, bKeepRatio) {
+      var imageSize;
+      if (bKeepRatio) {
+        var newRatio = pos.y / pos.x;
+        var ratio = $target.data('ratio');
+        imageSize = {
+          width: ratio > newRatio ? pos.x : pos.y / ratio,
+          height: ratio > newRatio ? pos.x * ratio : pos.y
+        };
+      } else {
+        imageSize = {
+          width: pos.x,
+          height: pos.y
+        };
+      }
+      $target.css(imageSize);
+    }
+
+    /**
+     * returns whether editable area has focus or not.
+     */
+  }, {
+    key: "hasFocus",
+    value: function hasFocus() {
+      return this.$editable.is(':focus');
+    }
+
+    /**
+     * set focus
+     */
+  }, {
+    key: "focus",
+    value: function focus() {
+      // [workaround] Screen will move when page is scolled in IE.
+      //  - do focus when not focused
+      if (!this.hasFocus()) {
+        this.$editable.trigger('focus');
+      }
+    }
+
+    /**
+     * returns whether contents is empty or not.
+     * @return {Boolean}
+     */
+  }, {
+    key: "isEmpty",
+    value: function isEmpty() {
+      return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();
+    }
+
+    /**
+     * Removes all contents and restores the editable instance to an _emptyPara_.
+     */
+  }, {
+    key: "empty",
+    value: function empty() {
+      this.context.invoke('code', dom.emptyPara);
+    }
+
+    /**
+     * normalize content
+     */
+  }, {
+    key: "normalizeContent",
+    value: function normalizeContent() {
+      this.$editable[0].normalize();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Clipboard.js
+function Clipboard_typeof(o) { "@babel/helpers - typeof"; return Clipboard_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Clipboard_typeof(o); }
+function Clipboard_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Clipboard_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Clipboard_toPropertyKey(o.key), o); } }
+function Clipboard_createClass(e, r, t) { return r && Clipboard_defineProperties(e.prototype, r), t && Clipboard_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Clipboard_toPropertyKey(t) { var i = Clipboard_toPrimitive(t, "string"); return "symbol" == Clipboard_typeof(i) ? i : i + ""; }
+function Clipboard_toPrimitive(t, r) { if ("object" != Clipboard_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Clipboard_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var Clipboard = /*#__PURE__*/function () {
+  function Clipboard(context) {
+    Clipboard_classCallCheck(this, Clipboard);
+    this.context = context;
+    this.options = context.options;
+    this.$editable = context.layoutInfo.editable;
+  }
+  return Clipboard_createClass(Clipboard, [{
+    key: "initialize",
+    value: function initialize() {
+      this.$editable.on('paste', this.pasteByEvent.bind(this));
+    }
+
+    /**
+     * paste by clipboard event
+     *
+     * @param {Event} event
+     */
+  }, {
+    key: "pasteByEvent",
+    value: function pasteByEvent(event) {
+      var _this = this;
+      if (this.context.isDisabled()) {
+        return;
+      }
+      var clipboardData = event.originalEvent.clipboardData;
+      if (clipboardData && clipboardData.items && clipboardData.items.length) {
+        var clipboardFiles = clipboardData.files;
+        var clipboardText = clipboardData.getData('Text');
+
+        // paste img file
+        if (clipboardFiles.length > 0 && this.options.allowClipboardImagePasting) {
+          this.context.invoke('editor.insertImagesOrCallback', clipboardFiles);
+          event.preventDefault();
+        }
+
+        // paste text with maxTextLength check
+        if (clipboardText.length > 0 && this.context.invoke('editor.isLimited', clipboardText.length)) {
+          event.preventDefault();
+        }
+      } else if (window.clipboardData) {
+        // for IE
+        var text = window.clipboardData.getData('text');
+        if (this.context.invoke('editor.isLimited', text.length)) {
+          event.preventDefault();
+        }
+      }
+
+      // Call editor.afterCommand after proceeding default event handler
+      setTimeout(function () {
+        _this.context.invoke('editor.afterCommand');
+      }, 10);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Dropzone.js
+function Dropzone_typeof(o) { "@babel/helpers - typeof"; return Dropzone_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Dropzone_typeof(o); }
+function Dropzone_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Dropzone_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Dropzone_toPropertyKey(o.key), o); } }
+function Dropzone_createClass(e, r, t) { return r && Dropzone_defineProperties(e.prototype, r), t && Dropzone_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Dropzone_toPropertyKey(t) { var i = Dropzone_toPrimitive(t, "string"); return "symbol" == Dropzone_typeof(i) ? i : i + ""; }
+function Dropzone_toPrimitive(t, r) { if ("object" != Dropzone_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Dropzone_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var Dropzone = /*#__PURE__*/function () {
+  function Dropzone(context) {
+    Dropzone_classCallCheck(this, Dropzone);
+    this.context = context;
+    this.$eventListener = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);
+    this.$editor = context.layoutInfo.editor;
+    this.$editable = context.layoutInfo.editable;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+    this.documentEventHandlers = {};
+    this.$dropzone = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class="note-dropzone">', '<div class="note-dropzone-message"></div>', '</div>'].join('')).prependTo(this.$editor);
+  }
+
+  /**
+   * attach Drag and Drop Events
+   */
+  return Dropzone_createClass(Dropzone, [{
+    key: "initialize",
+    value: function initialize() {
+      if (this.options.disableDragAndDrop) {
+        // prevent default drop event
+        this.documentEventHandlers.onDrop = function (e) {
+          e.preventDefault();
+        };
+        // do not consider outside of dropzone
+        this.$eventListener = this.$dropzone;
+        this.$eventListener.on('drop', this.documentEventHandlers.onDrop);
+      } else {
+        this.attachDragAndDropEvent();
+      }
+    }
+
+    /**
+     * attach Drag and Drop Events
+     */
+  }, {
+    key: "attachDragAndDropEvent",
+    value: function attachDragAndDropEvent() {
+      var _this = this;
+      var collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();
+      var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');
+      this.documentEventHandlers.onDragenter = function (e) {
+        var isCodeview = _this.context.invoke('codeview.isActivated');
+        var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0;
+        if (!isCodeview && !collection.length && hasEditorSize) {
+          _this.$editor.addClass('dragover');
+          _this.$dropzone.width(_this.$editor.width());
+          _this.$dropzone.height(_this.$editor.height());
+          $dropzoneMessage.text(_this.lang.image.dragImageHere);
+        }
+        collection = collection.add(e.target);
+      };
+      this.documentEventHandlers.onDragleave = function (e) {
+        collection = collection.not(e.target);
+
+        // If nodeName is BODY, then just make it over (fix for IE)
+        if (!collection.length || e.target.nodeName === 'BODY') {
+          collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();
+          _this.$editor.removeClass('dragover');
+        }
+      };
+      this.documentEventHandlers.onDrop = function () {
+        collection = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()();
+        _this.$editor.removeClass('dragover');
+      };
+
+      // show dropzone on dragenter when dragging a object to document
+      // -but only if the editor is visible, i.e. has a positive width and height
+      this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter).on('dragleave', this.documentEventHandlers.onDragleave).on('drop', this.documentEventHandlers.onDrop);
+
+      // change dropzone's message on hover.
+      this.$dropzone.on('dragenter', function () {
+        _this.$dropzone.addClass('hover');
+        $dropzoneMessage.text(_this.lang.image.dropImage);
+      }).on('dragleave', function () {
+        _this.$dropzone.removeClass('hover');
+        $dropzoneMessage.text(_this.lang.image.dragImageHere);
+      });
+
+      // attach dropImage
+      this.$dropzone.on('drop', function (event) {
+        var dataTransfer = event.originalEvent.dataTransfer;
+
+        // stop the browser from opening the dropped content
+        event.preventDefault();
+        if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
+          _this.$editable.trigger('focus');
+          _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);
+        } else {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(dataTransfer.types, function (idx, type) {
+            // skip moz-specific types
+            if (type.toLowerCase().indexOf('_moz_') > -1) {
+              return;
+            }
+            var content = dataTransfer.getData(type);
+            if (type.toLowerCase().indexOf('text') > -1) {
+              _this.context.invoke('editor.pasteHTML', content);
+            } else {
+              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(content).each(function (idx, item) {
+                _this.context.invoke('editor.insertNode', item);
+              });
+            }
+          });
+        }
+      }).on('dragover', false); // prevent default dragover event
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      var _this2 = this;
+      Object.keys(this.documentEventHandlers).forEach(function (key) {
+        _this2.$eventListener.off(key.slice(2).toLowerCase(), _this2.documentEventHandlers[key]);
+      });
+      this.documentEventHandlers = {};
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Codeview.js
+function Codeview_typeof(o) { "@babel/helpers - typeof"; return Codeview_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Codeview_typeof(o); }
+function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
+function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
+function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
+function Codeview_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Codeview_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Codeview_toPropertyKey(o.key), o); } }
+function Codeview_createClass(e, r, t) { return r && Codeview_defineProperties(e.prototype, r), t && Codeview_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Codeview_toPropertyKey(t) { var i = Codeview_toPrimitive(t, "string"); return "symbol" == Codeview_typeof(i) ? i : i + ""; }
+function Codeview_toPrimitive(t, r) { if ("object" != Codeview_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Codeview_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+/**
+ * @class Codeview
+ */
+var CodeView = /*#__PURE__*/function () {
+  function CodeView(context) {
+    Codeview_classCallCheck(this, CodeView);
+    this.context = context;
+    this.$editor = context.layoutInfo.editor;
+    this.$editable = context.layoutInfo.editable;
+    this.$codable = context.layoutInfo.codable;
+    this.options = context.options;
+    this.CodeMirrorConstructor = window.CodeMirror;
+    if (this.options.codemirror.CodeMirrorConstructor) {
+      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;
+    }
+  }
+  return Codeview_createClass(CodeView, [{
+    key: "sync",
+    value: function sync(html) {
+      var isCodeview = this.isActivated();
+      var CodeMirror = this.CodeMirrorConstructor;
+      if (isCodeview) {
+        if (html) {
+          if (CodeMirror) {
+            this.$codable.data('cmEditor').getDoc().setValue(html);
+          } else {
+            this.$codable.val(html);
+          }
+        } else {
+          if (CodeMirror) {
+            this.$codable.data('cmEditor').save();
+          }
+        }
+      }
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      var _this = this;
+      this.$codable.on('keyup', function (event) {
+        if (event.keyCode === key.code.ESCAPE) {
+          _this.deactivate();
+        }
+      });
+    }
+
+    /**
+     * @return {Boolean}
+     */
+  }, {
+    key: "isActivated",
+    value: function isActivated() {
+      return this.$editor.hasClass('codeview');
+    }
+
+    /**
+     * toggle codeview
+     */
+  }, {
+    key: "toggle",
+    value: function toggle() {
+      if (this.isActivated()) {
+        this.deactivate();
+      } else {
+        this.activate();
+      }
+      this.context.triggerEvent('codeview.toggled');
+    }
+
+    /**
+     * purify input value
+     * @param value
+     * @returns {*}
+     */
+  }, {
+    key: "purify",
+    value: function purify(value) {
+      if (this.options.codeviewFilter) {
+        // filter code view regex
+        value = value.replace(this.options.codeviewFilterRegex, '');
+        // allow specific iframe tag
+        if (this.options.codeviewIframeFilter) {
+          var whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);
+          value = value.replace(/(<iframe.*?>.*?(?:<\/iframe>)?)/gi, function (tag) {
+            // remove if src attribute is duplicated
+            if (/<.+src(?==?('|"|\s)?)[\s\S]+src(?=('|"|\s)?)[^>]*?>/i.test(tag)) {
+              return '';
+            }
+            var _iterator = _createForOfIteratorHelper(whitelist),
+              _step;
+            try {
+              for (_iterator.s(); !(_step = _iterator.n()).done;) {
+                var src = _step.value;
+                // pass if src is trusted
+                if (new RegExp('src="(https?:)?\/\/' + src.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '\/(.+)"').test(tag)) {
+                  return tag;
+                }
+              }
+            } catch (err) {
+              _iterator.e(err);
+            } finally {
+              _iterator.f();
+            }
+            return '';
+          });
+        }
+      }
+      return value;
+    }
+
+    /**
+     * activate code view
+     */
+  }, {
+    key: "activate",
+    value: function activate() {
+      var _this2 = this;
+      var CodeMirror = this.CodeMirrorConstructor;
+      this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));
+      this.$codable.height(this.$editable.height());
+      this.context.invoke('toolbar.updateCodeview', true);
+      this.context.invoke('airPopover.updateCodeview', true);
+      this.$editor.addClass('codeview');
+      this.$codable.trigger('focus');
+
+      // activate CodeMirror as codable
+      if (CodeMirror) {
+        var cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);
+
+        // CodeMirror TernServer
+        if (this.options.codemirror.tern) {
+          var server = new CodeMirror.TernServer(this.options.codemirror.tern);
+          cmEditor.ternServer = server;
+          cmEditor.on('cursorActivity', function (cm) {
+            server.updateArgHints(cm);
+          });
+        }
+        cmEditor.on('blur', function (event) {
+          _this2.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);
+        });
+        cmEditor.on('change', function () {
+          _this2.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);
+        });
+
+        // CodeMirror hasn't Padding.
+        cmEditor.setSize(null, this.$editable.outerHeight());
+        this.$codable.data('cmEditor', cmEditor);
+      } else {
+        this.$codable.on('blur', function (event) {
+          _this2.context.triggerEvent('blur.codeview', _this2.$codable.val(), event);
+        });
+        this.$codable.on('input', function () {
+          _this2.context.triggerEvent('change.codeview', _this2.$codable.val(), _this2.$codable);
+        });
+      }
+    }
+
+    /**
+     * deactivate code view
+     */
+  }, {
+    key: "deactivate",
+    value: function deactivate() {
+      var CodeMirror = this.CodeMirrorConstructor;
+      // deactivate CodeMirror as codable
+      if (CodeMirror) {
+        var cmEditor = this.$codable.data('cmEditor');
+        this.$codable.val(cmEditor.getValue());
+        cmEditor.toTextArea();
+      }
+      var value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);
+      var isChange = this.$editable.html() !== value;
+      this.$editable.html(value);
+      this.$editable.height(this.options.height ? this.$codable.height() : 'auto');
+      this.$editor.removeClass('codeview');
+      if (isChange) {
+        this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+      }
+      this.$editable.trigger('focus');
+      this.context.invoke('toolbar.updateCodeview', false);
+      this.context.invoke('airPopover.updateCodeview', false);
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      if (this.isActivated()) {
+        this.deactivate();
+      }
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Statusbar.js
+function Statusbar_typeof(o) { "@babel/helpers - typeof"; return Statusbar_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Statusbar_typeof(o); }
+function Statusbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Statusbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Statusbar_toPropertyKey(o.key), o); } }
+function Statusbar_createClass(e, r, t) { return r && Statusbar_defineProperties(e.prototype, r), t && Statusbar_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Statusbar_toPropertyKey(t) { var i = Statusbar_toPrimitive(t, "string"); return "symbol" == Statusbar_typeof(i) ? i : i + ""; }
+function Statusbar_toPrimitive(t, r) { if ("object" != Statusbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Statusbar_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var EDITABLE_PADDING = 24;
+var Statusbar = /*#__PURE__*/function () {
+  function Statusbar(context) {
+    Statusbar_classCallCheck(this, Statusbar);
+    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);
+    this.$statusbar = context.layoutInfo.statusbar;
+    this.$editable = context.layoutInfo.editable;
+    this.$codable = context.layoutInfo.codable;
+    this.options = context.options;
+  }
+  return Statusbar_createClass(Statusbar, [{
+    key: "initialize",
+    value: function initialize() {
+      var _this = this;
+      if (this.options.airMode || this.options.disableResizeEditor) {
+        this.destroy();
+        return;
+      }
+      this.$statusbar.on('mousedown touchstart', function (event) {
+        event.preventDefault();
+        event.stopPropagation();
+        var editableTop = _this.$editable.offset().top - _this.$document.scrollTop();
+        var editableCodeTop = _this.$codable.offset().top - _this.$document.scrollTop();
+        var onStatusbarMove = function onStatusbarMove(event) {
+          var originalEvent = event.type == 'mousemove' ? event : event.originalEvent.touches[0];
+          var height = originalEvent.clientY - (editableTop + EDITABLE_PADDING);
+          var heightCode = originalEvent.clientY - (editableCodeTop + EDITABLE_PADDING);
+          height = _this.options.minheight > 0 ? Math.max(height, _this.options.minheight) : height;
+          height = _this.options.maxHeight > 0 ? Math.min(height, _this.options.maxHeight) : height;
+          heightCode = _this.options.minheight > 0 ? Math.max(heightCode, _this.options.minheight) : heightCode;
+          heightCode = _this.options.maxHeight > 0 ? Math.min(heightCode, _this.options.maxHeight) : heightCode;
+          _this.$editable.height(height);
+          _this.$codable.height(heightCode);
+        };
+        _this.$document.on('mousemove touchmove', onStatusbarMove).one('mouseup touchend', function () {
+          _this.$document.off('mousemove touchmove', onStatusbarMove);
+        });
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$statusbar.off();
+      this.$statusbar.addClass('locked');
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Fullscreen.js
+function Fullscreen_typeof(o) { "@babel/helpers - typeof"; return Fullscreen_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Fullscreen_typeof(o); }
+function Fullscreen_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Fullscreen_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Fullscreen_toPropertyKey(o.key), o); } }
+function Fullscreen_createClass(e, r, t) { return r && Fullscreen_defineProperties(e.prototype, r), t && Fullscreen_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Fullscreen_toPropertyKey(t) { var i = Fullscreen_toPrimitive(t, "string"); return "symbol" == Fullscreen_typeof(i) ? i : i + ""; }
+function Fullscreen_toPrimitive(t, r) { if ("object" != Fullscreen_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Fullscreen_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var Fullscreen = /*#__PURE__*/function () {
+  function Fullscreen(context) {
+    var _this = this;
+    Fullscreen_classCallCheck(this, Fullscreen);
+    this.context = context;
+    this.$editor = context.layoutInfo.editor;
+    this.$toolbar = context.layoutInfo.toolbar;
+    this.$editable = context.layoutInfo.editable;
+    this.$codable = context.layoutInfo.codable;
+    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);
+    this.$scrollbar = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('html, body');
+    this.scrollbarClassName = 'note-fullscreen-body';
+    this.onResize = function () {
+      _this.resizeTo({
+        h: _this.$window.height() - _this.$toolbar.outerHeight()
+      });
+    };
+  }
+  return Fullscreen_createClass(Fullscreen, [{
+    key: "resizeTo",
+    value: function resizeTo(size) {
+      this.$editable.css('height', size.h);
+      this.$codable.css('height', size.h);
+      if (this.$codable.data('cmeditor')) {
+        this.$codable.data('cmeditor').setsize(null, size.h);
+      }
+    }
+
+    /**
+     * toggle fullscreen
+     */
+  }, {
+    key: "toggle",
+    value: function toggle() {
+      this.$editor.toggleClass('fullscreen');
+      var isFullscreen = this.isFullscreen();
+      this.$scrollbar.toggleClass(this.scrollbarClassName, isFullscreen);
+      if (isFullscreen) {
+        this.$editable.data('orgHeight', this.$editable.css('height'));
+        this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));
+        this.$editable.css('maxHeight', '');
+        this.$window.on('resize', this.onResize).trigger('resize');
+      } else {
+        this.$window.off('resize', this.onResize);
+        this.resizeTo({
+          h: this.$editable.data('orgHeight')
+        });
+        this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));
+      }
+      this.context.invoke('toolbar.updateFullscreen', isFullscreen);
+    }
+  }, {
+    key: "isFullscreen",
+    value: function isFullscreen() {
+      return this.$editor.hasClass('fullscreen');
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$scrollbar.removeClass(this.scrollbarClassName);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Handle.js
+function Handle_typeof(o) { "@babel/helpers - typeof"; return Handle_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Handle_typeof(o); }
+function Handle_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Handle_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Handle_toPropertyKey(o.key), o); } }
+function Handle_createClass(e, r, t) { return r && Handle_defineProperties(e.prototype, r), t && Handle_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Handle_toPropertyKey(t) { var i = Handle_toPrimitive(t, "string"); return "symbol" == Handle_typeof(i) ? i : i + ""; }
+function Handle_toPrimitive(t, r) { if ("object" != Handle_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Handle_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+var Handle = /*#__PURE__*/function () {
+  function Handle(context) {
+    var _this = this;
+    Handle_classCallCheck(this, Handle);
+    this.context = context;
+    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);
+    this.$editingArea = context.layoutInfo.editingArea;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+    this.events = {
+      'summernote.mousedown': function summernoteMousedown(we, e) {
+        if (_this.update(e.target, e)) {
+          e.preventDefault();
+        }
+      },
+      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown() {
+        _this.update();
+      },
+      'summernote.disable summernote.blur': function summernoteDisableSummernoteBlur() {
+        _this.hide();
+      },
+      'summernote.codeview.toggled': function summernoteCodeviewToggled() {
+        _this.update();
+      }
+    };
+  }
+  return Handle_createClass(Handle, [{
+    key: "initialize",
+    value: function initialize() {
+      var _this2 = this;
+      this.$handle = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class="note-handle">', '<div class="note-control-selection">', '<div class="note-control-selection-bg"></div>', '<div class="note-control-holder note-control-nw"></div>', '<div class="note-control-holder note-control-ne"></div>', '<div class="note-control-holder note-control-sw"></div>', '<div class="', this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing', ' note-control-se"></div>', this.options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>', '</div>', '</div>'].join('')).prependTo(this.$editingArea);
+      this.$handle.on('mousedown', function (event) {
+        if (dom.isControlSizing(event.target)) {
+          event.preventDefault();
+          event.stopPropagation();
+          var $target = _this2.$handle.find('.note-control-selection').data('target');
+          var posStart = $target.offset();
+          var scrollTop = _this2.$document.scrollTop();
+          var onMouseMove = function onMouseMove(event) {
+            _this2.context.invoke('editor.resizeTo', {
+              x: event.clientX - posStart.left,
+              y: event.clientY - (posStart.top - scrollTop)
+            }, $target, !event.shiftKey);
+            _this2.update($target[0], event);
+          };
+          _this2.$document.on('mousemove', onMouseMove).one('mouseup', function (e) {
+            e.preventDefault();
+            _this2.$document.off('mousemove', onMouseMove);
+            _this2.context.invoke('editor.afterCommand');
+          });
+          if (!$target.data('ratio')) {
+            // original ratio.
+            $target.data('ratio', $target.height() / $target.width());
+          }
+        }
+      });
+
+      // Listen for scrolling on the handle overlay.
+      this.$handle.on('wheel', function (event) {
+        event.preventDefault();
+        _this2.update();
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$handle.remove();
+    }
+  }, {
+    key: "update",
+    value: function update(target, event) {
+      if (this.context.isDisabled()) {
+        return false;
+      }
+      var isImage = dom.isImg(target);
+      var $selection = this.$handle.find('.note-control-selection');
+      this.context.invoke('imagePopover.update', target, event);
+      if (isImage) {
+        var $image = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target);
+        var areaRect = this.$editingArea[0].getBoundingClientRect();
+        var imageRect = target.getBoundingClientRect();
+        $selection.css({
+          display: 'block',
+          left: imageRect.left - areaRect.left,
+          top: imageRect.top - areaRect.top,
+          width: imageRect.width,
+          height: imageRect.height
+        }).data('target', $image); // save current image element.
+
+        var origImageObj = new Image();
+        origImageObj.src = $image.attr('src');
+        var sizingText = imageRect.width + 'x' + imageRect.height + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';
+        $selection.find('.note-control-selection-info').text(sizingText);
+        this.context.invoke('editor.saveTarget', target);
+      } else {
+        this.hide();
+      }
+      return isImage;
+    }
+
+    /**
+     * hide
+     *
+     * @param {jQuery} $handle
+     */
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.context.invoke('editor.clearTarget');
+      this.$handle.children().hide();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/AutoLink.js
+function AutoLink_typeof(o) { "@babel/helpers - typeof"; return AutoLink_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, AutoLink_typeof(o); }
+function AutoLink_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function AutoLink_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, AutoLink_toPropertyKey(o.key), o); } }
+function AutoLink_createClass(e, r, t) { return r && AutoLink_defineProperties(e.prototype, r), t && AutoLink_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function AutoLink_toPropertyKey(t) { var i = AutoLink_toPrimitive(t, "string"); return "symbol" == AutoLink_typeof(i) ? i : i + ""; }
+function AutoLink_toPrimitive(t, r) { if ("object" != AutoLink_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != AutoLink_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+var defaultScheme = 'http://';
+var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i;
+var AutoLink = /*#__PURE__*/function () {
+  function AutoLink(context) {
+    var _this = this;
+    AutoLink_classCallCheck(this, AutoLink);
+    this.context = context;
+    this.options = context.options;
+    this.$editable = context.layoutInfo.editable;
+    this.events = {
+      'summernote.keyup': function summernoteKeyup(we, event) {
+        if (!event.isDefaultPrevented()) {
+          _this.handleKeyup(event);
+        }
+      },
+      'summernote.keydown': function summernoteKeydown(we, event) {
+        _this.handleKeydown(event);
+      }
+    };
+  }
+  return AutoLink_createClass(AutoLink, [{
+    key: "initialize",
+    value: function initialize() {
+      this.lastWordRange = null;
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.lastWordRange = null;
+    }
+  }, {
+    key: "replace",
+    value: function replace() {
+      if (!this.lastWordRange) {
+        return;
+      }
+      var keyword = this.lastWordRange.toString();
+      var match = keyword.match(linkPattern);
+      if (match && (match[1] || match[2])) {
+        var link = match[1] ? keyword : defaultScheme + keyword;
+        var urlText = this.options.showDomainOnlyForAutolink ? keyword.replace(/^(?:https?:\/\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\.)?/i, '').split('/')[0] : keyword;
+        var node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a></a>').html(urlText).attr('href', link)[0];
+        if (this.context.options.linkTargetBlank) {
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).attr('target', '_blank');
+        }
+        this.lastWordRange.insertNode(node);
+        this.lastWordRange = null;
+        this.context.invoke('editor.focus');
+        this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+      }
+    }
+  }, {
+    key: "handleKeydown",
+    value: function handleKeydown(event) {
+      if (lists.contains([key.code.ENTER, key.code.SPACE], event.keyCode)) {
+        var wordRange = this.context.invoke('editor.createRange').getWordRange();
+        this.lastWordRange = wordRange;
+      }
+    }
+  }, {
+    key: "handleKeyup",
+    value: function handleKeyup(event) {
+      if (key.code.SPACE === event.keyCode || key.code.ENTER === event.keyCode && !event.shiftKey) {
+        this.replace();
+      }
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/AutoSync.js
+function AutoSync_typeof(o) { "@babel/helpers - typeof"; return AutoSync_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, AutoSync_typeof(o); }
+function AutoSync_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function AutoSync_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, AutoSync_toPropertyKey(o.key), o); } }
+function AutoSync_createClass(e, r, t) { return r && AutoSync_defineProperties(e.prototype, r), t && AutoSync_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function AutoSync_toPropertyKey(t) { var i = AutoSync_toPrimitive(t, "string"); return "symbol" == AutoSync_typeof(i) ? i : i + ""; }
+function AutoSync_toPrimitive(t, r) { if ("object" != AutoSync_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != AutoSync_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+/**
+ * textarea auto sync.
+ */
+var AutoSync = /*#__PURE__*/function () {
+  function AutoSync(context) {
+    var _this = this;
+    AutoSync_classCallCheck(this, AutoSync);
+    this.$note = context.layoutInfo.note;
+    this.events = {
+      'summernote.change': function summernoteChange() {
+        _this.$note.val(context.invoke('code'));
+      }
+    };
+  }
+  return AutoSync_createClass(AutoSync, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return dom.isTextarea(this.$note[0]);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/AutoReplace.js
+function AutoReplace_typeof(o) { "@babel/helpers - typeof"; return AutoReplace_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, AutoReplace_typeof(o); }
+function AutoReplace_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function AutoReplace_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, AutoReplace_toPropertyKey(o.key), o); } }
+function AutoReplace_createClass(e, r, t) { return r && AutoReplace_defineProperties(e.prototype, r), t && AutoReplace_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function AutoReplace_toPropertyKey(t) { var i = AutoReplace_toPrimitive(t, "string"); return "symbol" == AutoReplace_typeof(i) ? i : i + ""; }
+function AutoReplace_toPrimitive(t, r) { if ("object" != AutoReplace_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != AutoReplace_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+var AutoReplace = /*#__PURE__*/function () {
+  function AutoReplace(context) {
+    var _this = this;
+    AutoReplace_classCallCheck(this, AutoReplace);
+    this.context = context;
+    this.options = context.options.replace || {};
+    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];
+    this.previousKeydownCode = null;
+    this.events = {
+      'summernote.keyup': function summernoteKeyup(we, event) {
+        if (!event.isDefaultPrevented()) {
+          _this.handleKeyup(event);
+        }
+      },
+      'summernote.keydown': function summernoteKeydown(we, event) {
+        _this.handleKeydown(event);
+      }
+    };
+  }
+  return AutoReplace_createClass(AutoReplace, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return !!this.options.match;
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      this.lastWord = null;
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.lastWord = null;
+    }
+  }, {
+    key: "replace",
+    value: function replace() {
+      if (!this.lastWord) {
+        return;
+      }
+      var self = this;
+      var keyword = this.lastWord.toString();
+      this.options.match(keyword, function (match) {
+        if (match) {
+          var node = '';
+          if (typeof match === 'string') {
+            node = dom.createText(match);
+          } else if (match instanceof jQuery) {
+            node = match[0];
+          } else if (match instanceof Node) {
+            node = match;
+          }
+          if (!node) return;
+          self.lastWord.insertNode(node);
+          self.lastWord = null;
+          self.context.invoke('editor.focus');
+        }
+      });
+    }
+  }, {
+    key: "handleKeydown",
+    value: function handleKeydown(event) {
+      // this forces it to remember the last whole word, even if multiple termination keys are pressed
+      // before the previous key is let go.
+      if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {
+        this.previousKeydownCode = event.keyCode;
+        return;
+      }
+      if (lists.contains(this.keys, event.keyCode)) {
+        var wordRange = this.context.invoke('editor.createRange').getWordRange();
+        this.lastWord = wordRange;
+      }
+      this.previousKeydownCode = event.keyCode;
+    }
+  }, {
+    key: "handleKeyup",
+    value: function handleKeyup(event) {
+      if (lists.contains(this.keys, event.keyCode)) {
+        this.replace();
+      }
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Placeholder.js
+function Placeholder_typeof(o) { "@babel/helpers - typeof"; return Placeholder_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Placeholder_typeof(o); }
+function Placeholder_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Placeholder_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Placeholder_toPropertyKey(o.key), o); } }
+function Placeholder_createClass(e, r, t) { return r && Placeholder_defineProperties(e.prototype, r), t && Placeholder_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Placeholder_toPropertyKey(t) { var i = Placeholder_toPrimitive(t, "string"); return "symbol" == Placeholder_typeof(i) ? i : i + ""; }
+function Placeholder_toPrimitive(t, r) { if ("object" != Placeholder_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Placeholder_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var Placeholder = /*#__PURE__*/function () {
+  function Placeholder(context) {
+    var _this = this;
+    Placeholder_classCallCheck(this, Placeholder);
+    this.context = context;
+    this.$editingArea = context.layoutInfo.editingArea;
+    this.options = context.options;
+    if (this.options.inheritPlaceholder === true) {
+      // get placeholder value from the original element
+      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;
+    }
+    this.events = {
+      'summernote.init summernote.change': function summernoteInitSummernoteChange() {
+        _this.update();
+      },
+      'summernote.codeview.toggled': function summernoteCodeviewToggled() {
+        _this.update();
+      }
+    };
+  }
+  return Placeholder_createClass(Placeholder, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return !!this.options.placeholder;
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      var _this2 = this;
+      this.$placeholder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class="note-placeholder"></div>');
+      this.$placeholder.on('click', function () {
+        _this2.context.invoke('focus');
+      }).html(this.options.placeholder).prependTo(this.$editingArea);
+      this.update();
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$placeholder.remove();
+    }
+  }, {
+    key: "update",
+    value: function update() {
+      var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');
+      this.$placeholder.toggle(isShow);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Buttons.js
+function Buttons_typeof(o) { "@babel/helpers - typeof"; return Buttons_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Buttons_typeof(o); }
+function Buttons_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Buttons_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Buttons_toPropertyKey(o.key), o); } }
+function Buttons_createClass(e, r, t) { return r && Buttons_defineProperties(e.prototype, r), t && Buttons_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Buttons_toPropertyKey(t) { var i = Buttons_toPrimitive(t, "string"); return "symbol" == Buttons_typeof(i) ? i : i + ""; }
+function Buttons_toPrimitive(t, r) { if ("object" != Buttons_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Buttons_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+var Buttons = /*#__PURE__*/function () {
+  function Buttons(context) {
+    Buttons_classCallCheck(this, Buttons);
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.context = context;
+    this.$toolbar = context.layoutInfo.toolbar;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+    this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']);
+  }
+  return Buttons_createClass(Buttons, [{
+    key: "representShortcut",
+    value: function representShortcut(editorMethod) {
+      var shortcut = this.invertedKeyMap[editorMethod];
+      if (!this.options.shortcuts || !shortcut) {
+        return '';
+      }
+      if (env.isMac) {
+        shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');
+      }
+      shortcut = shortcut.replace('BACKSLASH', '\\').replace('SLASH', '/').replace('LEFTBRACKET', '[').replace('RIGHTBRACKET', ']');
+      return ' (' + shortcut + ')';
+    }
+  }, {
+    key: "button",
+    value: function button(o) {
+      if (!this.options.tooltip && o.tooltip) {
+        delete o.tooltip;
+      }
+      o.container = this.options.container;
+      return this.ui.button(o);
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      this.addToolbarButtons();
+      this.addImagePopoverButtons();
+      this.addLinkPopoverButtons();
+      this.addTablePopoverButtons();
+      this.fontInstalledMap = {};
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      delete this.fontInstalledMap;
+    }
+  }, {
+    key: "isFontInstalled",
+    value: function isFontInstalled(name) {
+      if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {
+        this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name);
+      }
+      return this.fontInstalledMap[name];
+    }
+  }, {
+    key: "isFontDeservedToAdd",
+    value: function isFontDeservedToAdd(name) {
+      name = name.toLowerCase();
+      return name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1;
+    }
+  }, {
+    key: "colorPalette",
+    value: function colorPalette(className, tooltip, backColor, foreColor) {
+      var _this = this;
+      return this.ui.buttonGroup({
+        className: 'note-color ' + className,
+        children: [this.button({
+          className: 'note-current-color-button',
+          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),
+          tooltip: tooltip,
+          click: function click(event) {
+            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget);
+            if (backColor && foreColor) {
+              _this.context.invoke('editor.color', {
+                backColor: $button.attr('data-backColor'),
+                foreColor: $button.attr('data-foreColor')
+              });
+            } else if (backColor) {
+              _this.context.invoke('editor.color', {
+                backColor: $button.attr('data-backColor')
+              });
+            } else if (foreColor) {
+              _this.context.invoke('editor.color', {
+                foreColor: $button.attr('data-foreColor')
+              });
+            }
+          },
+          callback: function callback($button) {
+            var $recentColor = $button.find('.note-recent-color');
+            if (backColor) {
+              $recentColor.css('background-color', _this.options.colorButton.backColor);
+              $button.attr('data-backColor', _this.options.colorButton.backColor);
+            }
+            if (foreColor) {
+              $recentColor.css('color', _this.options.colorButton.foreColor);
+              $button.attr('data-foreColor', _this.options.colorButton.foreColor);
+            } else {
+              $recentColor.css('color', 'transparent');
+            }
+          }
+        }), this.button({
+          className: 'dropdown-toggle',
+          contents: this.ui.dropdownButtonContents('', this.options),
+          tooltip: this.lang.color.more,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), this.ui.dropdown({
+          items: (backColor ? ['<div class="note-palette">', '<div class="note-palette-title">' + this.lang.color.background + '</div>', '<div>', '<button type="button" class="note-color-reset btn btn-light btn-default" data-event="backColor" data-value="transparent">', this.lang.color.transparent, '</button>', '</div>', '<div class="note-holder" data-event="backColor"><!-- back colors --></div>', '<div>', '<button type="button" class="note-color-select btn btn-light btn-default" data-event="openPalette" data-value="backColorPicker-' + this.options.id + '">', this.lang.color.cpSelect, '</button>', '<input type="color" id="backColorPicker-' + this.options.id + '" class="note-btn note-color-select-btn" value="' + this.options.colorButton.backColor + '" data-event="backColorPalette-' + this.options.id + '">', '</div>', '<div class="note-holder-custom" id="backColorPalette-' + this.options.id + '" data-event="backColor"></div>', '</div>'].join('') : '') + (foreColor ? ['<div class="note-palette">', '<div class="note-palette-title">' + this.lang.color.foreground + '</div>', '<div>', '<button type="button" class="note-color-reset btn btn-light btn-default" data-event="removeFormat" data-value="foreColor">', this.lang.color.resetToDefault, '</button>', '</div>', '<div class="note-holder" data-event="foreColor"><!-- fore colors --></div>', '<div>', '<button type="button" class="note-color-select btn btn-light btn-default" data-event="openPalette" data-value="foreColorPicker-' + this.options.id + '">', this.lang.color.cpSelect, '</button>', '<input type="color" id="foreColorPicker-' + this.options.id + '" class="note-btn note-color-select-btn" value="' + this.options.colorButton.foreColor + '" data-event="foreColorPalette-' + this.options.id + '">', '</div>',
+          // Fix missing Div, Commented to find easily if it's wrong
+          '<div class="note-holder-custom" id="foreColorPalette-' + this.options.id + '" data-event="foreColor"></div>', '</div>'].join('') : ''),
+          callback: function callback($dropdown) {
+            $dropdown.find('.note-holder').each(function (idx, item) {
+              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);
+              $holder.append(_this.ui.palette({
+                colors: _this.options.colors,
+                colorsName: _this.options.colorsName,
+                eventName: $holder.data('event'),
+                container: _this.options.container,
+                tooltip: _this.options.tooltip
+              }).render());
+            });
+            /* TODO: do we have to record recent custom colors within cookies? */
+            var customColors = [['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF']];
+            $dropdown.find('.note-holder-custom').each(function (idx, item) {
+              var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);
+              $holder.append(_this.ui.palette({
+                colors: customColors,
+                colorsName: customColors,
+                eventName: $holder.data('event'),
+                container: _this.options.container,
+                tooltip: _this.options.tooltip
+              }).render());
+            });
+            $dropdown.find('input[type=color]').each(function (idx, item) {
+              external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).on("change", function () {
+                var $chip = $dropdown.find('#' + external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('event')).find('.note-color-btn').first();
+                var color = this.value.toUpperCase();
+                $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);
+                $chip.trigger('click');
+              });
+            });
+          },
+          click: function click(event) {
+            event.stopPropagation();
+            var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.' + className).find('.note-dropdown-menu');
+            var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);
+            var eventName = $button.data('event');
+            var value = $button.attr('data-value');
+            if (eventName === 'openPalette') {
+              var $picker = $parent.find('#' + value);
+              var $palette = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);
+
+              // Shift palette chips
+              var $chip = $palette.find('.note-color-btn').last().detach();
+
+              // Set chip attributes
+              var color = $picker.val();
+              $chip.css('background-color', color).attr('aria-label', color).attr('data-value', color).attr('data-original-title', color);
+              $palette.prepend($chip);
+              $picker.trigger('click');
+            } else {
+              if (lists.contains(['backColor', 'foreColor'], eventName)) {
+                var key = eventName === 'backColor' ? 'background-color' : 'color';
+                var $color = $button.closest('.note-color').find('.note-recent-color');
+                var $currentButton = $button.closest('.note-color').find('.note-current-color-button');
+                $color.css(key, value);
+                $currentButton.attr('data-' + eventName, value);
+              }
+              _this.context.invoke('editor.' + eventName, value);
+            }
+          }
+        })]
+      }).render();
+    }
+  }, {
+    key: "addToolbarButtons",
+    value: function addToolbarButtons() {
+      var _this2 = this;
+      this.context.memo('button.style', function () {
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.magic), _this2.options),
+          tooltip: _this2.lang.style.style,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdown({
+          className: 'dropdown-style',
+          items: _this2.options.styleTags,
+          title: _this2.lang.style.style,
+          template: function template(item) {
+            // TBD: need to be simplified
+            if (typeof item === 'string') {
+              item = {
+                tag: item,
+                title: Object.prototype.hasOwnProperty.call(_this2.lang.style, item) ? _this2.lang.style[item] : item
+              };
+            }
+            var tag = item.tag;
+            var title = item.title;
+            var style = item.style ? ' style="' + item.style + '" ' : '';
+            var className = item.className ? ' class="' + item.className + '"' : '';
+            return '<' + tag + style + className + '>' + title + '</' + tag + '>';
+          },
+          click: _this2.context.createInvokeHandler('editor.formatBlock')
+        })]).render();
+      });
+      var _loop = function _loop() {
+        var item = _this2.options.styleTags[styleIdx];
+        _this2.context.memo('button.style.' + item, function () {
+          return _this2.button({
+            className: 'note-btn-style-' + item,
+            contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>',
+            tooltip: _this2.lang.style[item],
+            click: _this2.context.createInvokeHandler('editor.formatBlock')
+          }).render();
+        });
+      };
+      for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {
+        _loop();
+      }
+      this.context.memo('button.bold', function () {
+        return _this2.button({
+          className: 'note-btn-bold',
+          contents: _this2.ui.icon(_this2.options.icons.bold),
+          tooltip: _this2.lang.font.bold + _this2.representShortcut('bold'),
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.bold')
+        }).render();
+      });
+      this.context.memo('button.italic', function () {
+        return _this2.button({
+          className: 'note-btn-italic',
+          contents: _this2.ui.icon(_this2.options.icons.italic),
+          tooltip: _this2.lang.font.italic + _this2.representShortcut('italic'),
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.italic')
+        }).render();
+      });
+      this.context.memo('button.underline', function () {
+        return _this2.button({
+          className: 'note-btn-underline',
+          contents: _this2.ui.icon(_this2.options.icons.underline),
+          tooltip: _this2.lang.font.underline + _this2.representShortcut('underline'),
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.underline')
+        }).render();
+      });
+      this.context.memo('button.clear', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.eraser),
+          tooltip: _this2.lang.font.clear + _this2.representShortcut('removeFormat'),
+          click: _this2.context.createInvokeHandler('editor.removeFormat')
+        }).render();
+      });
+      this.context.memo('button.strikethrough', function () {
+        return _this2.button({
+          className: 'note-btn-strikethrough',
+          contents: _this2.ui.icon(_this2.options.icons.strikethrough),
+          tooltip: _this2.lang.font.strikethrough + _this2.representShortcut('strikethrough'),
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.strikethrough')
+        }).render();
+      });
+      this.context.memo('button.superscript', function () {
+        return _this2.button({
+          className: 'note-btn-superscript',
+          contents: _this2.ui.icon(_this2.options.icons.superscript),
+          tooltip: _this2.lang.font.superscript,
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.superscript')
+        }).render();
+      });
+      this.context.memo('button.subscript', function () {
+        return _this2.button({
+          className: 'note-btn-subscript',
+          contents: _this2.ui.icon(_this2.options.icons.subscript),
+          tooltip: _this2.lang.font.subscript,
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.subscript')
+        }).render();
+      });
+      this.context.memo('button.fontname', function () {
+        var styleInfo = _this2.context.invoke('editor.currentStyle');
+        if (_this2.options.addDefaultFonts) {
+          // Add 'default' fonts into the fontnames array if not exist
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(styleInfo['font-family'].split(','), function (idx, fontname) {
+            fontname = fontname.trim().replace(/['"]+/g, '');
+            if (_this2.isFontDeservedToAdd(fontname)) {
+              if (_this2.options.fontNames.indexOf(fontname) === -1) {
+                _this2.options.fontNames.push(fontname);
+              }
+            }
+          });
+        }
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents('<span class="note-current-fontname"></span>', _this2.options),
+          tooltip: _this2.lang.font.name,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdownCheck({
+          className: 'dropdown-fontname',
+          checkClassName: _this2.options.icons.menuCheck,
+          items: _this2.options.fontNames.filter(_this2.isFontInstalled.bind(_this2)),
+          title: _this2.lang.font.name,
+          template: function template(item) {
+            return '<span style="font-family: ' + env.validFontName(item) + '">' + item + '</span>';
+          },
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontName')
+        })]).render();
+      });
+      this.context.memo('button.fontsize', function () {
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents('<span class="note-current-fontsize"></span>', _this2.options),
+          tooltip: _this2.lang.font.size,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdownCheck({
+          className: 'dropdown-fontsize',
+          checkClassName: _this2.options.icons.menuCheck,
+          items: _this2.options.fontSizes,
+          title: _this2.lang.font.size,
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSize')
+        })]).render();
+      });
+      this.context.memo('button.fontsizeunit', function () {
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents('<span class="note-current-fontsizeunit"></span>', _this2.options),
+          tooltip: _this2.lang.font.sizeunit,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdownCheck({
+          className: 'dropdown-fontsizeunit',
+          checkClassName: _this2.options.icons.menuCheck,
+          items: _this2.options.fontSizeUnits,
+          title: _this2.lang.font.sizeunit,
+          click: _this2.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit')
+        })]).render();
+      });
+      this.context.memo('button.color', function () {
+        return _this2.colorPalette('note-color-all', _this2.lang.color.recent, true, true);
+      });
+      this.context.memo('button.forecolor', function () {
+        return _this2.colorPalette('note-color-fore', _this2.lang.color.foreground, false, true);
+      });
+      this.context.memo('button.backcolor', function () {
+        return _this2.colorPalette('note-color-back', _this2.lang.color.background, true, false);
+      });
+      this.context.memo('button.ul', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.unorderedlist),
+          tooltip: _this2.lang.lists.unordered + _this2.representShortcut('insertUnorderedList'),
+          click: _this2.context.createInvokeHandler('editor.insertUnorderedList')
+        }).render();
+      });
+      this.context.memo('button.ol', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.orderedlist),
+          tooltip: _this2.lang.lists.ordered + _this2.representShortcut('insertOrderedList'),
+          click: _this2.context.createInvokeHandler('editor.insertOrderedList')
+        }).render();
+      });
+      var justifyLeft = this.button({
+        contents: this.ui.icon(this.options.icons.alignLeft),
+        tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),
+        click: this.context.createInvokeHandler('editor.justifyLeft')
+      });
+      var justifyCenter = this.button({
+        contents: this.ui.icon(this.options.icons.alignCenter),
+        tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),
+        click: this.context.createInvokeHandler('editor.justifyCenter')
+      });
+      var justifyRight = this.button({
+        contents: this.ui.icon(this.options.icons.alignRight),
+        tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),
+        click: this.context.createInvokeHandler('editor.justifyRight')
+      });
+      var justifyFull = this.button({
+        contents: this.ui.icon(this.options.icons.alignJustify),
+        tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),
+        click: this.context.createInvokeHandler('editor.justifyFull')
+      });
+      var outdent = this.button({
+        contents: this.ui.icon(this.options.icons.outdent),
+        tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),
+        click: this.context.createInvokeHandler('editor.outdent')
+      });
+      var indent = this.button({
+        contents: this.ui.icon(this.options.icons.indent),
+        tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),
+        click: this.context.createInvokeHandler('editor.indent')
+      });
+      this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));
+      this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));
+      this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));
+      this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));
+      this.context.memo('button.outdent', func.invoke(outdent, 'render'));
+      this.context.memo('button.indent', func.invoke(indent, 'render'));
+      this.context.memo('button.paragraph', function () {
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.alignLeft), _this2.options),
+          tooltip: _this2.lang.paragraph.paragraph,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdown([_this2.ui.buttonGroup({
+          className: 'note-align',
+          children: [justifyLeft, justifyCenter, justifyRight, justifyFull]
+        }), _this2.ui.buttonGroup({
+          className: 'note-list',
+          children: [outdent, indent]
+        })])]).render();
+      });
+      this.context.memo('button.height', function () {
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.textHeight), _this2.options),
+          tooltip: _this2.lang.font.height,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdownCheck({
+          items: _this2.options.lineHeights,
+          checkClassName: _this2.options.icons.menuCheck,
+          className: 'dropdown-line-height',
+          title: _this2.lang.font.height,
+          click: _this2.context.createInvokeHandler('editor.lineHeight')
+        })]).render();
+      });
+      this.context.memo('button.table', function () {
+        return _this2.ui.buttonGroup([_this2.button({
+          className: 'dropdown-toggle',
+          contents: _this2.ui.dropdownButtonContents(_this2.ui.icon(_this2.options.icons.table), _this2.options),
+          tooltip: _this2.lang.table.table,
+          data: {
+            toggle: 'dropdown'
+          }
+        }), _this2.ui.dropdown({
+          title: _this2.lang.table.table,
+          className: 'note-table',
+          items: ['<div class="note-dimension-picker">', '<div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"></div>', '<div class="note-dimension-picker-highlighted"></div>', '<div class="note-dimension-picker-unhighlighted"></div>', '</div>', '<div class="note-dimension-display">1 x 1</div>'].join('')
+        })], {
+          callback: function callback($node) {
+            var $catcher = $node.find('.note-dimension-picker-mousecatcher');
+            $catcher.css({
+              width: _this2.options.insertTableMaxSize.col + 'em',
+              height: _this2.options.insertTableMaxSize.row + 'em'
+            }).on('mousedown', _this2.context.createInvokeHandler('editor.insertTable')).on('mousemove', _this2.tableMoveHandler.bind(_this2));
+          }
+        }).render();
+      });
+      this.context.memo('button.link', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.link),
+          tooltip: _this2.lang.link.link + _this2.representShortcut('linkDialog.show'),
+          click: _this2.context.createInvokeHandler('linkDialog.show')
+        }).render();
+      });
+      this.context.memo('button.picture', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.picture),
+          tooltip: _this2.lang.image.image,
+          click: _this2.context.createInvokeHandler('imageDialog.show')
+        }).render();
+      });
+      this.context.memo('button.video', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.video),
+          tooltip: _this2.lang.video.video,
+          click: _this2.context.createInvokeHandler('videoDialog.show')
+        }).render();
+      });
+      this.context.memo('button.hr', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.minus),
+          tooltip: _this2.lang.hr.insert + _this2.representShortcut('insertHorizontalRule'),
+          click: _this2.context.createInvokeHandler('editor.insertHorizontalRule')
+        }).render();
+      });
+      this.context.memo('button.fullscreen', function () {
+        return _this2.button({
+          className: 'btn-fullscreen note-codeview-keep',
+          contents: _this2.ui.icon(_this2.options.icons.arrowsAlt),
+          tooltip: _this2.lang.options.fullscreen,
+          click: _this2.context.createInvokeHandler('fullscreen.toggle')
+        }).render();
+      });
+      this.context.memo('button.codeview', function () {
+        return _this2.button({
+          className: 'btn-codeview note-codeview-keep',
+          contents: _this2.ui.icon(_this2.options.icons.code),
+          tooltip: _this2.lang.options.codeview,
+          click: _this2.context.createInvokeHandler('codeview.toggle')
+        }).render();
+      });
+      this.context.memo('button.redo', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.redo),
+          tooltip: _this2.lang.history.redo + _this2.representShortcut('redo'),
+          click: _this2.context.createInvokeHandler('editor.redo')
+        }).render();
+      });
+      this.context.memo('button.undo', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.undo),
+          tooltip: _this2.lang.history.undo + _this2.representShortcut('undo'),
+          click: _this2.context.createInvokeHandler('editor.undo')
+        }).render();
+      });
+      this.context.memo('button.help', function () {
+        return _this2.button({
+          contents: _this2.ui.icon(_this2.options.icons.question),
+          tooltip: _this2.lang.options.help,
+          click: _this2.context.createInvokeHandler('helpDialog.show')
+        }).render();
+      });
+    }
+
+    /**
+     * image: [
+     *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],
+     *   ['float', ['floatLeft', 'floatRight', 'floatNone']],
+     *   ['remove', ['removeMedia']],
+     * ],
+     */
+  }, {
+    key: "addImagePopoverButtons",
+    value: function addImagePopoverButtons() {
+      var _this3 = this;
+      // Image Size Buttons
+      this.context.memo('button.resizeFull', function () {
+        return _this3.button({
+          contents: '<span class="note-fontsize-10">100%</span>',
+          tooltip: _this3.lang.image.resizeFull,
+          click: _this3.context.createInvokeHandler('editor.resize', '1')
+        }).render();
+      });
+      this.context.memo('button.resizeHalf', function () {
+        return _this3.button({
+          contents: '<span class="note-fontsize-10">50%</span>',
+          tooltip: _this3.lang.image.resizeHalf,
+          click: _this3.context.createInvokeHandler('editor.resize', '0.5')
+        }).render();
+      });
+      this.context.memo('button.resizeQuarter', function () {
+        return _this3.button({
+          contents: '<span class="note-fontsize-10">25%</span>',
+          tooltip: _this3.lang.image.resizeQuarter,
+          click: _this3.context.createInvokeHandler('editor.resize', '0.25')
+        }).render();
+      });
+      this.context.memo('button.resizeNone', function () {
+        return _this3.button({
+          contents: _this3.ui.icon(_this3.options.icons.rollback),
+          tooltip: _this3.lang.image.resizeNone,
+          click: _this3.context.createInvokeHandler('editor.resize', '0')
+        }).render();
+      });
+
+      // Float Buttons
+      this.context.memo('button.floatLeft', function () {
+        return _this3.button({
+          contents: _this3.ui.icon(_this3.options.icons.floatLeft),
+          tooltip: _this3.lang.image.floatLeft,
+          click: _this3.context.createInvokeHandler('editor.floatMe', 'left')
+        }).render();
+      });
+      this.context.memo('button.floatRight', function () {
+        return _this3.button({
+          contents: _this3.ui.icon(_this3.options.icons.floatRight),
+          tooltip: _this3.lang.image.floatRight,
+          click: _this3.context.createInvokeHandler('editor.floatMe', 'right')
+        }).render();
+      });
+      this.context.memo('button.floatNone', function () {
+        return _this3.button({
+          contents: _this3.ui.icon(_this3.options.icons.rollback),
+          tooltip: _this3.lang.image.floatNone,
+          click: _this3.context.createInvokeHandler('editor.floatMe', 'none')
+        }).render();
+      });
+
+      // Remove Buttons
+      this.context.memo('button.removeMedia', function () {
+        return _this3.button({
+          contents: _this3.ui.icon(_this3.options.icons.trash),
+          tooltip: _this3.lang.image.remove,
+          click: _this3.context.createInvokeHandler('editor.removeMedia')
+        }).render();
+      });
+    }
+  }, {
+    key: "addLinkPopoverButtons",
+    value: function addLinkPopoverButtons() {
+      var _this4 = this;
+      this.context.memo('button.linkDialogShow', function () {
+        return _this4.button({
+          contents: _this4.ui.icon(_this4.options.icons.link),
+          tooltip: _this4.lang.link.edit,
+          click: _this4.context.createInvokeHandler('linkDialog.show')
+        }).render();
+      });
+      this.context.memo('button.unlink', function () {
+        return _this4.button({
+          contents: _this4.ui.icon(_this4.options.icons.unlink),
+          tooltip: _this4.lang.link.unlink,
+          click: _this4.context.createInvokeHandler('editor.unlink')
+        }).render();
+      });
+    }
+
+    /**
+     * table : [
+     *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],
+     *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]
+     * ],
+     */
+  }, {
+    key: "addTablePopoverButtons",
+    value: function addTablePopoverButtons() {
+      var _this5 = this;
+      this.context.memo('button.addRowUp', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.rowAbove),
+          tooltip: _this5.lang.table.addRowAbove,
+          click: _this5.context.createInvokeHandler('editor.addRow', 'top')
+        }).render();
+      });
+      this.context.memo('button.addRowDown', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.rowBelow),
+          tooltip: _this5.lang.table.addRowBelow,
+          click: _this5.context.createInvokeHandler('editor.addRow', 'bottom')
+        }).render();
+      });
+      this.context.memo('button.addColLeft', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.colBefore),
+          tooltip: _this5.lang.table.addColLeft,
+          click: _this5.context.createInvokeHandler('editor.addCol', 'left')
+        }).render();
+      });
+      this.context.memo('button.addColRight', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.colAfter),
+          tooltip: _this5.lang.table.addColRight,
+          click: _this5.context.createInvokeHandler('editor.addCol', 'right')
+        }).render();
+      });
+      this.context.memo('button.deleteRow', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.rowRemove),
+          tooltip: _this5.lang.table.delRow,
+          click: _this5.context.createInvokeHandler('editor.deleteRow')
+        }).render();
+      });
+      this.context.memo('button.deleteCol', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.colRemove),
+          tooltip: _this5.lang.table.delCol,
+          click: _this5.context.createInvokeHandler('editor.deleteCol')
+        }).render();
+      });
+      this.context.memo('button.deleteTable', function () {
+        return _this5.button({
+          className: 'btn-md',
+          contents: _this5.ui.icon(_this5.options.icons.trash),
+          tooltip: _this5.lang.table.delTable,
+          click: _this5.context.createInvokeHandler('editor.deleteTable')
+        }).render();
+      });
+    }
+  }, {
+    key: "build",
+    value: function build($container, groups) {
+      for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {
+        var group = groups[groupIdx];
+        var groupName = Array.isArray(group) ? group[0] : group;
+        var buttons = Array.isArray(group) ? group.length === 1 ? [group[0]] : group[1] : [group];
+        var $group = this.ui.buttonGroup({
+          className: 'note-' + groupName
+        }).render();
+        for (var idx = 0, len = buttons.length; idx < len; idx++) {
+          var btn = this.context.memo('button.' + buttons[idx]);
+          if (btn) {
+            $group.append(typeof btn === 'function' ? btn(this.context) : btn);
+          }
+        }
+        $group.appendTo($container);
+      }
+    }
+
+    /**
+     * @param {jQuery} [$container]
+     */
+  }, {
+    key: "updateCurrentStyle",
+    value: function updateCurrentStyle($container) {
+      var $cont = $container || this.$toolbar;
+      var styleInfo = this.context.invoke('editor.currentStyle');
+      this.updateBtnStates($cont, {
+        '.note-btn-bold': function noteBtnBold() {
+          return styleInfo['font-bold'] === 'bold';
+        },
+        '.note-btn-italic': function noteBtnItalic() {
+          return styleInfo['font-italic'] === 'italic';
+        },
+        '.note-btn-underline': function noteBtnUnderline() {
+          return styleInfo['font-underline'] === 'underline';
+        },
+        '.note-btn-subscript': function noteBtnSubscript() {
+          return styleInfo['font-subscript'] === 'subscript';
+        },
+        '.note-btn-superscript': function noteBtnSuperscript() {
+          return styleInfo['font-superscript'] === 'superscript';
+        },
+        '.note-btn-strikethrough': function noteBtnStrikethrough() {
+          return styleInfo['font-strikethrough'] === 'strikethrough';
+        }
+      });
+      if (styleInfo['font-family']) {
+        var fontNames = styleInfo['font-family'].split(',').map(function (name) {
+          return name.replace(/[\'\"]/g, '').replace(/\s+$/, '').replace(/^\s+/, '');
+        });
+        var fontName = lists.find(fontNames, this.isFontInstalled.bind(this));
+        $cont.find('.dropdown-fontname a').each(function (idx, item) {
+          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);
+          // always compare string to avoid creating another func.
+          var isChecked = $item.data('value') + '' === fontName + '';
+          $item.toggleClass('checked', isChecked);
+        });
+        $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);
+      }
+      if (styleInfo['font-size']) {
+        var fontSize = styleInfo['font-size'];
+        $cont.find('.dropdown-fontsize a').each(function (idx, item) {
+          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);
+          // always compare with string to avoid creating another func.
+          var isChecked = $item.data('value') + '' === fontSize + '';
+          $item.toggleClass('checked', isChecked);
+        });
+        $cont.find('.note-current-fontsize').text(fontSize);
+        var fontSizeUnit = styleInfo['font-size-unit'];
+        $cont.find('.dropdown-fontsizeunit a').each(function (idx, item) {
+          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);
+          var isChecked = $item.data('value') + '' === fontSizeUnit + '';
+          $item.toggleClass('checked', isChecked);
+        });
+        $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);
+      }
+      if (styleInfo['line-height']) {
+        var lineHeight = styleInfo['line-height'];
+        $cont.find('.dropdown-line-height a').each(function (idx, item) {
+          var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item);
+          // always compare with string to avoid creating another func.
+          var isChecked = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(item).data('value') + '' === lineHeight + '';
+          $item.toggleClass('checked', isChecked);
+        });
+        $cont.find('.note-current-line-height').text(lineHeight);
+      }
+    }
+  }, {
+    key: "updateBtnStates",
+    value: function updateBtnStates($container, infos) {
+      var _this6 = this;
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(infos, function (selector, pred) {
+        _this6.ui.toggleBtnActive($container.find(selector), pred());
+      });
+    }
+  }, {
+    key: "tableMoveHandler",
+    value: function tableMoveHandler(event) {
+      var PX_PER_EM = 18;
+      var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher
+      var $dimensionDisplay = $picker.next();
+      var $catcher = $picker.find('.note-dimension-picker-mousecatcher');
+      var $highlighted = $picker.find('.note-dimension-picker-highlighted');
+      var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');
+      var posOffset;
+      // HTML5 with jQuery - e.offsetX is undefined in Firefox
+      if (event.offsetX === undefined) {
+        var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();
+        posOffset = {
+          x: event.pageX - posCatcher.left,
+          y: event.pageY - posCatcher.top
+        };
+      } else {
+        posOffset = {
+          x: event.offsetX,
+          y: event.offsetY
+        };
+      }
+      var dim = {
+        c: Math.ceil(posOffset.x / PX_PER_EM) || 1,
+        r: Math.ceil(posOffset.y / PX_PER_EM) || 1
+      };
+      $highlighted.css({
+        width: dim.c + 'em',
+        height: dim.r + 'em'
+      });
+      $catcher.data('value', dim.c + 'x' + dim.r);
+      if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {
+        $unhighlighted.css({
+          width: dim.c + 1 + 'em'
+        });
+      }
+      if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {
+        $unhighlighted.css({
+          height: dim.r + 1 + 'em'
+        });
+      }
+      $dimensionDisplay.html(dim.c + ' x ' + dim.r);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/Toolbar.js
+function Toolbar_typeof(o) { "@babel/helpers - typeof"; return Toolbar_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, Toolbar_typeof(o); }
+function Toolbar_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function Toolbar_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, Toolbar_toPropertyKey(o.key), o); } }
+function Toolbar_createClass(e, r, t) { return r && Toolbar_defineProperties(e.prototype, r), t && Toolbar_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function Toolbar_toPropertyKey(t) { var i = Toolbar_toPrimitive(t, "string"); return "symbol" == Toolbar_typeof(i) ? i : i + ""; }
+function Toolbar_toPrimitive(t, r) { if ("object" != Toolbar_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != Toolbar_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var Toolbar = /*#__PURE__*/function () {
+  function Toolbar(context) {
+    Toolbar_classCallCheck(this, Toolbar);
+    this.context = context;
+    this.$window = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window);
+    this.$document = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document);
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.$note = context.layoutInfo.note;
+    this.$editor = context.layoutInfo.editor;
+    this.$toolbar = context.layoutInfo.toolbar;
+    this.$editable = context.layoutInfo.editable;
+    this.$statusbar = context.layoutInfo.statusbar;
+    this.options = context.options;
+    this.isFollowing = false;
+    this.followScroll = this.followScroll.bind(this);
+  }
+  return Toolbar_createClass(Toolbar, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return !this.options.airMode;
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      var _this = this;
+      this.options.toolbar = this.options.toolbar || [];
+      if (!this.options.toolbar.length) {
+        this.$toolbar.hide();
+      } else {
+        this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);
+      }
+      if (this.options.toolbarContainer) {
+        this.$toolbar.appendTo(this.options.toolbarContainer);
+      }
+      this.changeContainer(false);
+      this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () {
+        _this.context.invoke('buttons.updateCurrentStyle');
+      });
+      this.context.invoke('buttons.updateCurrentStyle');
+      if (this.options.followingToolbar) {
+        this.$window.on('scroll resize', this.followScroll);
+      }
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$toolbar.children().remove();
+      if (this.options.followingToolbar) {
+        this.$window.off('scroll resize', this.followScroll);
+      }
+    }
+  }, {
+    key: "followScroll",
+    value: function followScroll() {
+      if (this.$editor.hasClass('fullscreen')) {
+        return false;
+      }
+      var editorHeight = this.$editor.outerHeight();
+      var editorWidth = this.$editor.width();
+      var toolbarHeight = this.$toolbar.height();
+      var statusbarHeight = this.$statusbar.height();
+
+      // check if the web app is currently using another static bar
+      var otherBarHeight = 0;
+      if (this.options.otherStaticBar) {
+        otherBarHeight = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.otherStaticBar).outerHeight();
+      }
+      var currentOffset = this.$document.scrollTop();
+      var editorOffsetTop = this.$editor.offset().top;
+      var editorOffsetBottom = editorOffsetTop + editorHeight;
+      var activateOffset = editorOffsetTop - otherBarHeight;
+      var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;
+      if (!this.isFollowing && currentOffset > activateOffset && currentOffset < deactivateOffsetBottom - toolbarHeight) {
+        this.isFollowing = true;
+        this.$editable.css({
+          marginTop: this.$toolbar.outerHeight()
+        });
+        this.$toolbar.css({
+          position: 'fixed',
+          top: otherBarHeight,
+          width: editorWidth,
+          zIndex: 1000
+        });
+      } else if (this.isFollowing && (currentOffset < activateOffset || currentOffset > deactivateOffsetBottom)) {
+        this.isFollowing = false;
+        this.$toolbar.css({
+          position: 'relative',
+          top: 0,
+          width: '100%',
+          zIndex: 'auto'
+        });
+        this.$editable.css({
+          marginTop: ''
+        });
+      }
+    }
+  }, {
+    key: "changeContainer",
+    value: function changeContainer(isFullscreen) {
+      if (isFullscreen) {
+        this.$toolbar.prependTo(this.$editor);
+      } else {
+        if (this.options.toolbarContainer) {
+          this.$toolbar.appendTo(this.options.toolbarContainer);
+        }
+      }
+      if (this.options.followingToolbar) {
+        this.followScroll();
+      }
+    }
+  }, {
+    key: "updateFullscreen",
+    value: function updateFullscreen(isFullscreen) {
+      this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);
+      this.changeContainer(isFullscreen);
+    }
+  }, {
+    key: "updateCodeview",
+    value: function updateCodeview(isCodeview) {
+      this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);
+      if (isCodeview) {
+        this.deactivate();
+      } else {
+        this.activate();
+      }
+    }
+  }, {
+    key: "activate",
+    value: function activate(isIncludeCodeview) {
+      var $btn = this.$toolbar.find('button');
+      if (!isIncludeCodeview) {
+        $btn = $btn.not('.note-codeview-keep');
+      }
+      this.ui.toggleBtn($btn, true);
+    }
+  }, {
+    key: "deactivate",
+    value: function deactivate(isIncludeCodeview) {
+      var $btn = this.$toolbar.find('button');
+      if (!isIncludeCodeview) {
+        $btn = $btn.not('.note-codeview-keep');
+      }
+      this.ui.toggleBtn($btn, false);
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/LinkDialog.js
+function LinkDialog_typeof(o) { "@babel/helpers - typeof"; return LinkDialog_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, LinkDialog_typeof(o); }
+function LinkDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function LinkDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, LinkDialog_toPropertyKey(o.key), o); } }
+function LinkDialog_createClass(e, r, t) { return r && LinkDialog_defineProperties(e.prototype, r), t && LinkDialog_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function LinkDialog_toPropertyKey(t) { var i = LinkDialog_toPrimitive(t, "string"); return "symbol" == LinkDialog_typeof(i) ? i : i + ""; }
+function LinkDialog_toPrimitive(t, r) { if ("object" != LinkDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != LinkDialog_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+var LinkDialog_MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
+var LinkDialog_TEL_PATTERN = /^(\+?\d{1,3}[\s-]?)?(\d{1,4})[\s-]?(\d{1,4})[\s-]?(\d{1,4})$/;
+var LinkDialog_URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\:|#|\/)/;
+var LinkDialog = /*#__PURE__*/function () {
+  function LinkDialog(context) {
+    LinkDialog_classCallCheck(this, LinkDialog);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);
+    this.$editor = context.layoutInfo.editor;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);
+  }
+  return LinkDialog_createClass(LinkDialog, [{
+    key: "initialize",
+    value: function initialize() {
+      var $container = this.options.dialogsInBody ? this.$body : this.options.container;
+      var body = ['<div class="form-group note-form-group">', "<label for=\"note-dialog-link-txt-".concat(this.options.id, "\" class=\"note-form-label\">").concat(this.lang.link.textToDisplay, "</label>"), "<input id=\"note-dialog-link-txt-".concat(this.options.id, "\" class=\"note-link-text form-control note-form-control note-input\" type=\"text\"/>"), '</div>', '<div class="form-group note-form-group">', "<label for=\"note-dialog-link-url-".concat(this.options.id, "\" class=\"note-form-label\">").concat(this.lang.link.url, "</label>"), "<input id=\"note-dialog-link-url-".concat(this.options.id, "\" class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\"/>"), '</div>', !this.options.disableLinkTarget ? external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div></div>').append(this.ui.checkbox({
+        className: 'sn-checkbox-open-in-new-window',
+        text: this.lang.link.openInNewWindow,
+        checked: true
+      }).render()).html() : ''].join('');
+      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';
+      var footer = "<input type=\"button\" href=\"#\" class=\"".concat(buttonClass, "\" value=\"").concat(this.lang.link.insert, "\" disabled>");
+      this.$dialog = this.ui.dialog({
+        className: 'link-dialog',
+        title: this.lang.link.insert,
+        fade: this.options.dialogsFade,
+        body: body,
+        footer: footer
+      }).render().appendTo($container);
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.ui.hideDialog(this.$dialog);
+      this.$dialog.remove();
+    }
+  }, {
+    key: "bindEnterKey",
+    value: function bindEnterKey($input, $btn) {
+      $input.on('keypress', function (event) {
+        if (event.keyCode === key.code.ENTER) {
+          event.preventDefault();
+          $btn.trigger('click');
+        }
+      });
+    }
+  }, {
+    key: "checkLinkUrl",
+    value: function checkLinkUrl(linkUrl) {
+      if (LinkDialog_MAILTO_PATTERN.test(linkUrl)) {
+        return 'mailto://' + linkUrl;
+      } else if (LinkDialog_TEL_PATTERN.test(linkUrl)) {
+        return 'tel://' + linkUrl;
+      } else if (!LinkDialog_URL_SCHEME_PATTERN.test(linkUrl)) {
+        return 'http://' + linkUrl;
+      }
+      return linkUrl;
+    }
+  }, {
+    key: "onCheckLinkUrl",
+    value: function onCheckLinkUrl($input) {
+      var _this = this;
+      $input.on('blur', function (event) {
+        event.target.value = event.target.value == '' ? '' : _this.checkLinkUrl(event.target.value);
+      });
+    }
+
+    /**
+     * toggle update button
+     */
+  }, {
+    key: "toggleLinkBtn",
+    value: function toggleLinkBtn($linkBtn, $linkText, $linkUrl) {
+      this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());
+    }
+
+    /**
+     * Show link dialog and set event handlers on dialog controls.
+     *
+     * @param {Object} linkInfo
+     * @return {Promise}
+     */
+  }, {
+    key: "showLinkDialog",
+    value: function showLinkDialog(linkInfo) {
+      var _this2 = this;
+      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {
+        var $linkText = _this2.$dialog.find('.note-link-text');
+        var $linkUrl = _this2.$dialog.find('.note-link-url');
+        var $linkBtn = _this2.$dialog.find('.note-link-btn');
+        var $openInNewWindow = _this2.$dialog.find('.sn-checkbox-open-in-new-window input[type=checkbox]');
+        _this2.ui.onDialogShown(_this2.$dialog, function () {
+          _this2.context.triggerEvent('dialog.shown');
+
+          // If no url was given and given text is valid URL then copy that into URL Field
+          if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {
+            linkInfo.url = _this2.checkLinkUrl(linkInfo.text);
+          }
+          $linkText.on('input paste propertychange', function () {
+            // If linktext was modified by input events,
+            // cloning text from linkUrl will be stopped.
+            var text = $linkText.val();
+            var div = document.createElement('div');
+            div.innerText = text;
+            text = div.innerHTML;
+            linkInfo.text = text;
+            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);
+          }).val(linkInfo.text);
+          $linkUrl.on('input paste propertychange', function () {
+            // Display same text on `Text to display` as default
+            // when linktext has no text
+            if (!linkInfo.text) {
+              $linkText.val($linkUrl.val());
+            }
+            _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);
+          }).val(linkInfo.url);
+          if (!env.isSupportTouch) {
+            $linkUrl.trigger('focus');
+          }
+          _this2.toggleLinkBtn($linkBtn, $linkText, $linkUrl);
+          _this2.bindEnterKey($linkUrl, $linkBtn);
+          _this2.bindEnterKey($linkText, $linkBtn);
+          _this2.onCheckLinkUrl($linkUrl);
+          var isNewWindowChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this2.context.options.linkTargetBlank;
+          $openInNewWindow.prop('checked', isNewWindowChecked);
+          $linkBtn.one('click', function (event) {
+            event.preventDefault();
+            deferred.resolve({
+              range: linkInfo.range,
+              url: $linkUrl.val(),
+              text: $linkText.val(),
+              isNewWindow: $openInNewWindow.is(':checked')
+            });
+            _this2.ui.hideDialog(_this2.$dialog);
+          });
+        });
+        _this2.ui.onDialogHidden(_this2.$dialog, function () {
+          // detach events
+          $linkText.off();
+          $linkUrl.off();
+          $linkBtn.off();
+          if (deferred.state() === 'pending') {
+            deferred.reject();
+          }
+        });
+        _this2.ui.showDialog(_this2.$dialog);
+      }).promise();
+    }
+
+    /**
+     * @param {Object} layoutInfo
+     */
+  }, {
+    key: "show",
+    value: function show() {
+      var _this3 = this;
+      var linkInfo = this.context.invoke('editor.getLinkInfo');
+      this.context.invoke('editor.saveRange');
+      this.showLinkDialog(linkInfo).then(function (linkInfo) {
+        _this3.context.invoke('editor.restoreRange');
+        _this3.context.invoke('editor.createLink', linkInfo);
+      }).fail(function () {
+        _this3.context.invoke('editor.restoreRange');
+      });
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/LinkPopover.js
+function LinkPopover_typeof(o) { "@babel/helpers - typeof"; return LinkPopover_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, LinkPopover_typeof(o); }
+function LinkPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function LinkPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, LinkPopover_toPropertyKey(o.key), o); } }
+function LinkPopover_createClass(e, r, t) { return r && LinkPopover_defineProperties(e.prototype, r), t && LinkPopover_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function LinkPopover_toPropertyKey(t) { var i = LinkPopover_toPrimitive(t, "string"); return "symbol" == LinkPopover_typeof(i) ? i : i + ""; }
+function LinkPopover_toPrimitive(t, r) { if ("object" != LinkPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != LinkPopover_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+var LinkPopover = /*#__PURE__*/function () {
+  function LinkPopover(context) {
+    var _this = this;
+    LinkPopover_classCallCheck(this, LinkPopover);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.options = context.options;
+    this.events = {
+      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll() {
+        _this.update();
+      },
+      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {
+        _this.hide();
+      },
+      'summernote.blur': function summernoteBlur(we, event) {
+        if (event.originalEvent && event.originalEvent.relatedTarget) {
+          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {
+            _this.hide();
+          }
+        } else {
+          _this.hide();
+        }
+      }
+    };
+  }
+  return LinkPopover_createClass(LinkPopover, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return !lists.isEmpty(this.options.popover.link);
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      this.$popover = this.ui.popover({
+        className: 'note-link-popover',
+        callback: function callback($node) {
+          var $content = $node.find('.popover-content,.note-popover-content');
+          $content.prepend('<span><a target="_blank"></a>&nbsp;</span>');
+        }
+      }).render().appendTo(this.options.container);
+      var $content = this.$popover.find('.popover-content,.note-popover-content');
+      this.context.invoke('buttons.build', $content, this.options.popover.link);
+      this.$popover.on('mousedown', function (event) {
+        event.preventDefault();
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$popover.remove();
+    }
+  }, {
+    key: "update",
+    value: function update() {
+      // Prevent focusing on editable when invoke('code') is executed
+      if (!this.context.invoke('editor.hasFocus')) {
+        this.hide();
+        return;
+      }
+      var rng = this.context.invoke('editor.getLastRange');
+      if (rng.isCollapsed() && rng.isOnAnchor()) {
+        var anchor = dom.ancestor(rng.sc, dom.isAnchor);
+        var href = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(anchor).attr('href');
+        this.$popover.find('a').attr('href', href).text(href);
+        var pos = dom.posFromPlaceholder(anchor);
+        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();
+        pos.top -= containerOffset.top;
+        pos.left -= containerOffset.left;
+        this.$popover.css({
+          display: 'block',
+          left: pos.left,
+          top: pos.top
+        });
+      } else {
+        this.hide();
+      }
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.$popover.hide();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/ImageDialog.js
+function ImageDialog_typeof(o) { "@babel/helpers - typeof"; return ImageDialog_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, ImageDialog_typeof(o); }
+function ImageDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function ImageDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, ImageDialog_toPropertyKey(o.key), o); } }
+function ImageDialog_createClass(e, r, t) { return r && ImageDialog_defineProperties(e.prototype, r), t && ImageDialog_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function ImageDialog_toPropertyKey(t) { var i = ImageDialog_toPrimitive(t, "string"); return "symbol" == ImageDialog_typeof(i) ? i : i + ""; }
+function ImageDialog_toPrimitive(t, r) { if ("object" != ImageDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != ImageDialog_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+var ImageDialog = /*#__PURE__*/function () {
+  function ImageDialog(context) {
+    ImageDialog_classCallCheck(this, ImageDialog);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);
+    this.$editor = context.layoutInfo.editor;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+  }
+  return ImageDialog_createClass(ImageDialog, [{
+    key: "initialize",
+    value: function initialize() {
+      var imageLimitation = '';
+      if (this.options.maximumImageFileSize) {
+        var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));
+        var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B';
+        imageLimitation = "<small>".concat(this.lang.image.maximumFileSize + ' : ' + readableSize, "</small>");
+      }
+      var $container = this.options.dialogsInBody ? this.$body : this.options.container;
+      var body = ['<div class="form-group note-form-group note-group-select-from-files">', '<label for="note-dialog-image-file-' + this.options.id + '" class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', '<input id="note-dialog-image-file-' + this.options.id + '" class="note-image-input form-control-file note-form-control note-input" ', ' type="file" name="files" accept="' + this.options.acceptImageFileTypes + '" multiple="multiple"/>', imageLimitation, '</div>', '<div class="form-group note-group-image-url">', '<label for="note-dialog-image-url-' + this.options.id + '" class="note-form-label">' + this.lang.image.url + '</label>', '<input id="note-dialog-image-url-' + this.options.id + '" class="note-image-url form-control note-form-control note-input" type="text"/>', '</div>'].join('');
+      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';
+      var footer = "<input type=\"button\" href=\"#\" class=\"".concat(buttonClass, "\" value=\"").concat(this.lang.image.insert, "\" disabled>");
+      this.$dialog = this.ui.dialog({
+        title: this.lang.image.insert,
+        fade: this.options.dialogsFade,
+        body: body,
+        footer: footer
+      }).render().appendTo($container);
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.ui.hideDialog(this.$dialog);
+      this.$dialog.remove();
+    }
+  }, {
+    key: "bindEnterKey",
+    value: function bindEnterKey($input, $btn) {
+      $input.on('keypress', function (event) {
+        if (event.keyCode === key.code.ENTER) {
+          event.preventDefault();
+          $btn.trigger('click');
+        }
+      });
+    }
+  }, {
+    key: "show",
+    value: function show() {
+      var _this = this;
+      this.context.invoke('editor.saveRange');
+      this.showImageDialog().then(function (data) {
+        // [workaround] hide dialog before restore range for IE range focus
+        _this.ui.hideDialog(_this.$dialog);
+        _this.context.invoke('editor.restoreRange');
+        if (typeof data === 'string') {
+          // image url
+          // If onImageLinkInsert set,
+          if (_this.options.callbacks.onImageLinkInsert) {
+            _this.context.triggerEvent('image.link.insert', data);
+          } else {
+            _this.context.invoke('editor.insertImage', data);
+          }
+        } else {
+          // array of files
+          _this.context.invoke('editor.insertImagesOrCallback', data);
+        }
+      }).fail(function () {
+        _this.context.invoke('editor.restoreRange');
+      });
+    }
+
+    /**
+     * show image dialog
+     *
+     * @param {jQuery} $dialog
+     * @return {Promise}
+     */
+  }, {
+    key: "showImageDialog",
+    value: function showImageDialog() {
+      var _this2 = this;
+      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {
+        var $imageInput = _this2.$dialog.find('.note-image-input');
+        var $imageUrl = _this2.$dialog.find('.note-image-url');
+        var $imageBtn = _this2.$dialog.find('.note-image-btn');
+        _this2.ui.onDialogShown(_this2.$dialog, function () {
+          _this2.context.triggerEvent('dialog.shown');
+
+          // Cloning imageInput to clear element.
+          $imageInput.replaceWith($imageInput.clone().on('change', function (event) {
+            deferred.resolve(event.target.files || event.target.value);
+          }).val(''));
+          $imageUrl.on('input paste propertychange', function () {
+            _this2.ui.toggleBtn($imageBtn, $imageUrl.val());
+          }).val('');
+          if (!env.isSupportTouch) {
+            $imageUrl.trigger('focus');
+          }
+          $imageBtn.on('click', function (event) {
+            event.preventDefault();
+            deferred.resolve($imageUrl.val());
+          });
+          _this2.bindEnterKey($imageUrl, $imageBtn);
+        });
+        _this2.ui.onDialogHidden(_this2.$dialog, function () {
+          $imageInput.off();
+          $imageUrl.off();
+          $imageBtn.off();
+          if (deferred.state() === 'pending') {
+            deferred.reject();
+          }
+        });
+        _this2.ui.showDialog(_this2.$dialog);
+      });
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/ImagePopover.js
+function ImagePopover_typeof(o) { "@babel/helpers - typeof"; return ImagePopover_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, ImagePopover_typeof(o); }
+function ImagePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function ImagePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, ImagePopover_toPropertyKey(o.key), o); } }
+function ImagePopover_createClass(e, r, t) { return r && ImagePopover_defineProperties(e.prototype, r), t && ImagePopover_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function ImagePopover_toPropertyKey(t) { var i = ImagePopover_toPrimitive(t, "string"); return "symbol" == ImagePopover_typeof(i) ? i : i + ""; }
+function ImagePopover_toPrimitive(t, r) { if ("object" != ImagePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != ImagePopover_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+/**
+ * Image popover module
+ *  mouse events that show/hide popover will be handled by Handle.js.
+ *  Handle.js will receive the events and invoke 'imagePopover.update'.
+ */
+var ImagePopover = /*#__PURE__*/function () {
+  function ImagePopover(context) {
+    var _this = this;
+    ImagePopover_classCallCheck(this, ImagePopover);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.editable = context.layoutInfo.editable[0];
+    this.options = context.options;
+    this.events = {
+      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {
+        _this.hide();
+      },
+      'summernote.blur': function summernoteBlur(we, event) {
+        if (event.originalEvent && event.originalEvent.relatedTarget) {
+          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {
+            _this.hide();
+          }
+        } else {
+          _this.hide();
+        }
+      }
+    };
+  }
+  return ImagePopover_createClass(ImagePopover, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return !lists.isEmpty(this.options.popover.image);
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      this.$popover = this.ui.popover({
+        className: 'note-image-popover'
+      }).render().appendTo(this.options.container);
+      var $content = this.$popover.find('.popover-content,.note-popover-content');
+      this.context.invoke('buttons.build', $content, this.options.popover.image);
+      this.$popover.on('mousedown', function (event) {
+        event.preventDefault();
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$popover.remove();
+    }
+  }, {
+    key: "update",
+    value: function update(target, event) {
+      if (dom.isImg(target)) {
+        var position = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(target).offset();
+        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();
+        var pos = {};
+        if (this.options.popatmouse) {
+          pos.left = event.pageX - 20;
+          pos.top = event.pageY;
+        } else {
+          pos = position;
+        }
+        pos.top -= containerOffset.top;
+        pos.left -= containerOffset.left;
+        this.$popover.css({
+          display: 'block',
+          left: pos.left,
+          top: pos.top
+        });
+      } else {
+        this.hide();
+      }
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.$popover.hide();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/TablePopover.js
+function TablePopover_typeof(o) { "@babel/helpers - typeof"; return TablePopover_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, TablePopover_typeof(o); }
+function TablePopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function TablePopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, TablePopover_toPropertyKey(o.key), o); } }
+function TablePopover_createClass(e, r, t) { return r && TablePopover_defineProperties(e.prototype, r), t && TablePopover_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function TablePopover_toPropertyKey(t) { var i = TablePopover_toPrimitive(t, "string"); return "symbol" == TablePopover_typeof(i) ? i : i + ""; }
+function TablePopover_toPrimitive(t, r) { if ("object" != TablePopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != TablePopover_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+var TablePopover = /*#__PURE__*/function () {
+  function TablePopover(context) {
+    var _this = this;
+    TablePopover_classCallCheck(this, TablePopover);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.options = context.options;
+    this.events = {
+      'summernote.mousedown': function summernoteMousedown(we, event) {
+        _this.update(event.target);
+      },
+      'summernote.keyup summernote.scroll summernote.change': function summernoteKeyupSummernoteScrollSummernoteChange() {
+        _this.update();
+      },
+      'summernote.disable summernote.dialog.shown': function summernoteDisableSummernoteDialogShown() {
+        _this.hide();
+      },
+      'summernote.blur': function summernoteBlur(we, event) {
+        if (event.originalEvent && event.originalEvent.relatedTarget) {
+          if (!_this.$popover[0].contains(event.originalEvent.relatedTarget)) {
+            _this.hide();
+          }
+        } else {
+          _this.hide();
+        }
+      }
+    };
+  }
+  return TablePopover_createClass(TablePopover, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return !lists.isEmpty(this.options.popover.table);
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      this.$popover = this.ui.popover({
+        className: 'note-table-popover'
+      }).render().appendTo(this.options.container);
+      var $content = this.$popover.find('.popover-content,.note-popover-content');
+      this.context.invoke('buttons.build', $content, this.options.popover.table);
+
+      // [workaround] Disable Firefox's default table editor
+      if (env.isFF) {
+        document.execCommand('enableInlineTableEditing', false, false);
+      }
+      this.$popover.on('mousedown', function (event) {
+        event.preventDefault();
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$popover.remove();
+    }
+  }, {
+    key: "update",
+    value: function update(target) {
+      if (this.context.isDisabled()) {
+        return false;
+      }
+      var isCell = dom.isCell(target) || dom.isCell(target === null || target === void 0 ? void 0 : target.parentElement);
+      if (isCell) {
+        var pos = dom.posFromPlaceholder(target);
+        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();
+        pos.top -= containerOffset.top;
+        pos.left -= containerOffset.left;
+        this.$popover.css({
+          display: 'block',
+          left: pos.left,
+          top: pos.top
+        });
+      } else {
+        this.hide();
+      }
+      return isCell;
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.$popover.hide();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/VideoDialog.js
+function VideoDialog_typeof(o) { "@babel/helpers - typeof"; return VideoDialog_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, VideoDialog_typeof(o); }
+function VideoDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function VideoDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, VideoDialog_toPropertyKey(o.key), o); } }
+function VideoDialog_createClass(e, r, t) { return r && VideoDialog_defineProperties(e.prototype, r), t && VideoDialog_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function VideoDialog_toPropertyKey(t) { var i = VideoDialog_toPrimitive(t, "string"); return "symbol" == VideoDialog_typeof(i) ? i : i + ""; }
+function VideoDialog_toPrimitive(t, r) { if ("object" != VideoDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != VideoDialog_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+var VideoDialog = /*#__PURE__*/function () {
+  function VideoDialog(context) {
+    VideoDialog_classCallCheck(this, VideoDialog);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);
+    this.$editor = context.layoutInfo.editor;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+  }
+  return VideoDialog_createClass(VideoDialog, [{
+    key: "initialize",
+    value: function initialize() {
+      var $container = this.options.dialogsInBody ? this.$body : this.options.container;
+      var body = ['<div class="form-group note-form-group row-fluid">', "<label for=\"note-dialog-video-url-".concat(this.options.id, "\" class=\"note-form-label\">").concat(this.lang.video.url, " <small class=\"text-muted\">").concat(this.lang.video.providers, "</small></label>"), "<input id=\"note-dialog-video-url-".concat(this.options.id, "\" class=\"note-video-url form-control note-form-control note-input\" type=\"text\"/>"), '</div>'].join('');
+      var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';
+      var footer = "<input type=\"button\" href=\"#\" class=\"".concat(buttonClass, "\" value=\"").concat(this.lang.video.insert, "\" disabled>");
+      this.$dialog = this.ui.dialog({
+        title: this.lang.video.insert,
+        fade: this.options.dialogsFade,
+        body: body,
+        footer: footer
+      }).render().appendTo($container);
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.ui.hideDialog(this.$dialog);
+      this.$dialog.remove();
+    }
+  }, {
+    key: "bindEnterKey",
+    value: function bindEnterKey($input, $btn) {
+      $input.on('keypress', function (event) {
+        if (event.keyCode === key.code.ENTER) {
+          event.preventDefault();
+          $btn.trigger('click');
+        }
+      });
+    }
+  }, {
+    key: "createVideoNode",
+    value: function createVideoNode(url) {
+      // video url patterns(youtube, instagram, vimeo, dailymotion, youku, peertube, mp4, ogg, webm)
+      var ytRegExp = /(?:youtu\.be\/|youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=|shorts\/|live\/))([^&\n?]+)(?:.*[?&]t=([^&\n]+))?.*/;
+      var ytRegExpForStart = /^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/;
+      var ytMatch = url.match(ytRegExp);
+      var gdRegExp = /(?:\.|\/\/)drive\.google\.com\/file\/d\/(.[a-zA-Z0-9_-]*)\/view/;
+      var gdMatch = url.match(gdRegExp);
+      var igRegExp = /(?:www\.|\/\/)instagram\.com\/(reel|p)\/(.[a-zA-Z0-9_-]*)/;
+      var igMatch = url.match(igRegExp);
+      var vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/;
+      var vMatch = url.match(vRegExp);
+      var vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/;
+      var vimMatch = url.match(vimRegExp);
+      var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/;
+      var dmMatch = url.match(dmRegExp);
+      var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/;
+      var youkuMatch = url.match(youkuRegExp);
+      var peerTubeRegExp = /\/\/(.*)\/videos\/watch\/([^?]*)(?:\?(?:start=(\w*))?(?:&stop=(\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/;
+      var peerTubeMatch = url.match(peerTubeRegExp);
+      var qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/;
+      var qqMatch = url.match(qqRegExp);
+      var qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/;
+      var qqMatch2 = url.match(qqRegExp2);
+      var mp4RegExp = /^.+.(mp4|m4v)$/;
+      var mp4Match = url.match(mp4RegExp);
+      var oggRegExp = /^.+.(ogg|ogv)$/;
+      var oggMatch = url.match(oggRegExp);
+      var webmRegExp = /^.+.(webm)$/;
+      var webmMatch = url.match(webmRegExp);
+      var fbRegExp = /(?:www\.|\/\/)facebook\.com\/([^\/]+)\/videos\/([0-9]+)/;
+      var fbMatch = url.match(fbRegExp);
+      var $video;
+      if (ytMatch && ytMatch[1].length === 11) {
+        var youtubeId = ytMatch[1];
+        var start = 0;
+        if (typeof ytMatch[2] !== 'undefined') {
+          var ytMatchForStart = ytMatch[2].match(ytRegExpForStart);
+          if (ytMatchForStart) {
+            for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {
+              start += typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0;
+            }
+          } else {
+            start = parseInt(ytMatch[2], 10);
+          }
+        }
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : '')).attr('width', '640').attr('height', '360');
+      } else if (gdMatch && gdMatch[0].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://drive.google.com/file/d/' + gdMatch[1] + '/preview').attr('width', '640').attr('height', '480');
+      } else if (igMatch && igMatch[0].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://instagram.com/p/' + igMatch[2] + '/embed/').attr('width', '612').attr('height', '710').attr('scrolling', 'no').attr('allowtransparency', 'true');
+      } else if (vMatch && vMatch[0].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', vMatch[0] + '/embed/simple').attr('width', '600').attr('height', '600').attr('class', 'vine-embed');
+      } else if (vimMatch && vimMatch[3].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('src', '//player.vimeo.com/video/' + vimMatch[3]).attr('width', '640').attr('height', '360');
+      } else if (dmMatch && dmMatch[2].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]).attr('width', '640').attr('height', '360');
+      } else if (youkuMatch && youkuMatch[1].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '498').attr('width', '510').attr('src', '//player.youku.com/embed/' + youkuMatch[1]);
+      } else if (peerTubeMatch && peerTubeMatch[0].length) {
+        var begin = 0;
+        if (peerTubeMatch[2] !== 'undefined') begin = peerTubeMatch[2];
+        var end = 0;
+        if (peerTubeMatch[3] !== 'undefined') end = peerTubeMatch[3];
+        var loop = 0;
+        if (peerTubeMatch[4] !== 'undefined') loop = peerTubeMatch[4];
+        var autoplay = 0;
+        if (peerTubeMatch[5] !== 'undefined') autoplay = peerTubeMatch[5];
+        var muted = 0;
+        if (peerTubeMatch[6] !== 'undefined') muted = peerTubeMatch[6];
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe allowfullscreen sandbox="allow-same-origin allow-scripts allow-popups">').attr('frameborder', 0).attr('src', '//' + peerTubeMatch[1] + '/videos/embed/' + peerTubeMatch[2] + "?loop=" + loop + "&autoplay=" + autoplay + "&muted=" + muted + (begin > 0 ? '&start=' + begin : '') + (end > 0 ? '&end=' + start : '')).attr('width', '560').attr('height', '315');
+      } else if (qqMatch && qqMatch[1].length || qqMatch2 && qqMatch2[2].length) {
+        var vid = qqMatch && qqMatch[1].length ? qqMatch[1] : qqMatch2[2];
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>').attr('frameborder', 0).attr('height', '310').attr('width', '500').attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');
+      } else if (mp4Match || oggMatch || webmMatch) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<video controls>').attr('src', url).attr('width', '640').attr('height', '360');
+      } else if (fbMatch && fbMatch[0].length) {
+        $video = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<iframe>').attr('frameborder', 0).attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560').attr('width', '560').attr('height', '301').attr('scrolling', 'no').attr('allowtransparency', 'true');
+      } else {
+        // this is not a known video link. Now what, Cat? Now what?
+        return false;
+      }
+      $video.addClass('note-video-clip');
+      return $video[0];
+    }
+  }, {
+    key: "show",
+    value: function show() {
+      var _this = this;
+      var text = this.context.invoke('editor.getSelectedText');
+      this.context.invoke('editor.saveRange');
+      this.showVideoDialog(text).then(function (url) {
+        // [workaround] hide dialog before restore range for IE range focus
+        _this.ui.hideDialog(_this.$dialog);
+        _this.context.invoke('editor.restoreRange');
+
+        // build node
+        var $node = _this.createVideoNode(url);
+        if ($node) {
+          // insert video node
+          _this.context.invoke('editor.insertNode', $node);
+        }
+      }).fail(function () {
+        _this.context.invoke('editor.restoreRange');
+      });
+    }
+
+    /**
+     * show video dialog
+     *
+     * @param {jQuery} $dialog
+     * @return {Promise}
+     */
+  }, {
+    key: "showVideoDialog",
+    value: function showVideoDialog( /* text */
+    ) {
+      var _this2 = this;
+      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {
+        var $videoUrl = _this2.$dialog.find('.note-video-url');
+        var $videoBtn = _this2.$dialog.find('.note-video-btn');
+        _this2.ui.onDialogShown(_this2.$dialog, function () {
+          _this2.context.triggerEvent('dialog.shown');
+          $videoUrl.on('input paste propertychange', function () {
+            _this2.ui.toggleBtn($videoBtn, $videoUrl.val());
+          });
+          if (!env.isSupportTouch) {
+            $videoUrl.trigger('focus');
+          }
+          $videoBtn.on('click', function (event) {
+            event.preventDefault();
+            deferred.resolve($videoUrl.val());
+          });
+          _this2.bindEnterKey($videoUrl, $videoBtn);
+        });
+        _this2.ui.onDialogHidden(_this2.$dialog, function () {
+          $videoUrl.off();
+          $videoBtn.off();
+          if (deferred.state() === 'pending') {
+            deferred.reject();
+          }
+        });
+        _this2.ui.showDialog(_this2.$dialog);
+      });
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/HelpDialog.js
+function HelpDialog_typeof(o) { "@babel/helpers - typeof"; return HelpDialog_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, HelpDialog_typeof(o); }
+function HelpDialog_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function HelpDialog_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, HelpDialog_toPropertyKey(o.key), o); } }
+function HelpDialog_createClass(e, r, t) { return r && HelpDialog_defineProperties(e.prototype, r), t && HelpDialog_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function HelpDialog_toPropertyKey(t) { var i = HelpDialog_toPrimitive(t, "string"); return "symbol" == HelpDialog_typeof(i) ? i : i + ""; }
+function HelpDialog_toPrimitive(t, r) { if ("object" != HelpDialog_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != HelpDialog_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+var HelpDialog = /*#__PURE__*/function () {
+  function HelpDialog(context) {
+    HelpDialog_classCallCheck(this, HelpDialog);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.$body = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document.body);
+    this.$editor = context.layoutInfo.editor;
+    this.options = context.options;
+    this.lang = this.options.langInfo;
+  }
+  return HelpDialog_createClass(HelpDialog, [{
+    key: "initialize",
+    value: function initialize() {
+      var $container = this.options.dialogsInBody ? this.$body : this.options.container;
+      var body = ['<p class="text-center">', '<a href="http://summernote.org/" target="_blank" rel="noopener noreferrer">Summernote 0.9.0</a> · ', '<a href="https://github.com/summernote/summernote" target="_blank" rel="noopener noreferrer">Project</a> · ', '<a href="https://github.com/summernote/summernote/issues" target="_blank" rel="noopener noreferrer">Issues</a>', '</p>'].join('');
+      this.$dialog = this.ui.dialog({
+        title: this.lang.options.help,
+        fade: this.options.dialogsFade,
+        body: this.createShortcutList(),
+        footer: body,
+        callback: function callback($node) {
+          $node.find('.modal-body,.note-modal-body').css({
+            'max-height': 300,
+            'overflow': 'scroll'
+          });
+        }
+      }).render().appendTo($container);
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.ui.hideDialog(this.$dialog);
+      this.$dialog.remove();
+    }
+  }, {
+    key: "createShortcutList",
+    value: function createShortcutList() {
+      var _this = this;
+      var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];
+      return Object.keys(keyMap).map(function (key) {
+        var command = keyMap[key];
+        var $row = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div><div class="help-list-item"></div></div>');
+        $row.append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<label><kbd>' + key + '</kdb></label>').css({
+          'width': 180,
+          'margin-right': 10
+        })).append(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<span></span>').html(_this.context.memo('help.' + command) || command));
+        return $row.html();
+      }).join('');
+    }
+
+    /**
+     * show help dialog
+     *
+     * @return {Promise}
+     */
+  }, {
+    key: "showHelpDialog",
+    value: function showHelpDialog() {
+      var _this2 = this;
+      return external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().Deferred(function (deferred) {
+        _this2.ui.onDialogShown(_this2.$dialog, function () {
+          _this2.context.triggerEvent('dialog.shown');
+          deferred.resolve();
+        });
+        _this2.ui.showDialog(_this2.$dialog);
+      }).promise();
+    }
+  }, {
+    key: "show",
+    value: function show() {
+      var _this3 = this;
+      this.context.invoke('editor.saveRange');
+      this.showHelpDialog().then(function () {
+        _this3.context.invoke('editor.restoreRange');
+      });
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/AirPopover.js
+function AirPopover_typeof(o) { "@babel/helpers - typeof"; return AirPopover_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, AirPopover_typeof(o); }
+function AirPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function AirPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, AirPopover_toPropertyKey(o.key), o); } }
+function AirPopover_createClass(e, r, t) { return r && AirPopover_defineProperties(e.prototype, r), t && AirPopover_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function AirPopover_toPropertyKey(t) { var i = AirPopover_toPrimitive(t, "string"); return "symbol" == AirPopover_typeof(i) ? i : i + ""; }
+function AirPopover_toPrimitive(t, r) { if ("object" != AirPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != AirPopover_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+var AIRMODE_POPOVER_X_OFFSET = -5;
+var AIRMODE_POPOVER_Y_OFFSET = 5;
+var AirPopover = /*#__PURE__*/function () {
+  function AirPopover(context) {
+    var _this = this;
+    AirPopover_classCallCheck(this, AirPopover);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.options = context.options;
+    this.hidable = true;
+    this.onContextmenu = false;
+    this.pageX = null;
+    this.pageY = null;
+    this.events = {
+      'summernote.contextmenu': function summernoteContextmenu(event) {
+        if (_this.options.editing) {
+          event.preventDefault();
+          event.stopPropagation();
+          _this.onContextmenu = true;
+          _this.update(true);
+        }
+      },
+      'summernote.mousedown': function summernoteMousedown(we, event) {
+        _this.pageX = event.pageX;
+        _this.pageY = event.pageY;
+      },
+      'summernote.keyup summernote.mouseup summernote.scroll': function summernoteKeyupSummernoteMouseupSummernoteScroll(we, event) {
+        if (_this.options.editing && !_this.onContextmenu) {
+          if (event.type == 'keyup') {
+            var range = _this.context.invoke('editor.getLastRange');
+            var wordRange = range.getWordRange();
+            var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));
+            _this.pageX = bnd.left;
+            _this.pageY = bnd.top;
+          } else {
+            _this.pageX = event.pageX;
+            _this.pageY = event.pageY;
+          }
+          _this.update();
+        }
+        _this.onContextmenu = false;
+      },
+      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur() {
+        _this.hide();
+      },
+      'summernote.focusout': function summernoteFocusout() {
+        if (!_this.$popover.is(':active,:focus')) {
+          _this.hide();
+        }
+      }
+    };
+  }
+  return AirPopover_createClass(AirPopover, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return this.options.airMode && !lists.isEmpty(this.options.popover.air);
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      var _this2 = this;
+      this.$popover = this.ui.popover({
+        className: 'note-air-popover'
+      }).render().appendTo(this.options.container);
+      var $content = this.$popover.find('.popover-content');
+      this.context.invoke('buttons.build', $content, this.options.popover.air);
+
+      // disable hiding this popover preemptively by 'summernote.blur' event.
+      this.$popover.on('mousedown', function () {
+        _this2.hidable = false;
+      });
+      // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).
+      this.$popover.on('mouseup', function () {
+        _this2.hidable = true;
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$popover.remove();
+    }
+  }, {
+    key: "update",
+    value: function update(forcelyOpen) {
+      var styleInfo = this.context.invoke('editor.currentStyle');
+      if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {
+        var rect = {
+          left: this.pageX,
+          top: this.pageY
+        };
+        var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();
+        rect.top -= containerOffset.top;
+        rect.left -= containerOffset.left;
+        this.$popover.css({
+          display: 'block',
+          left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,
+          top: rect.top + AIRMODE_POPOVER_Y_OFFSET
+        });
+        this.context.invoke('buttons.updateCurrentStyle', this.$popover);
+      } else {
+        this.hide();
+      }
+    }
+  }, {
+    key: "updateCodeview",
+    value: function updateCodeview(isCodeview) {
+      this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);
+      if (isCodeview) {
+        this.hide();
+      }
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      if (this.hidable) {
+        this.$popover.hide();
+      }
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/module/HintPopover.js
+function HintPopover_typeof(o) { "@babel/helpers - typeof"; return HintPopover_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, HintPopover_typeof(o); }
+function HintPopover_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function HintPopover_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, HintPopover_toPropertyKey(o.key), o); } }
+function HintPopover_createClass(e, r, t) { return r && HintPopover_defineProperties(e.prototype, r), t && HintPopover_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function HintPopover_toPropertyKey(t) { var i = HintPopover_toPrimitive(t, "string"); return "symbol" == HintPopover_typeof(i) ? i : i + ""; }
+function HintPopover_toPrimitive(t, r) { if ("object" != HintPopover_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != HintPopover_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+
+var POPOVER_DIST = 5;
+var HintPopover = /*#__PURE__*/function () {
+  function HintPopover(context) {
+    var _this = this;
+    HintPopover_classCallCheck(this, HintPopover);
+    this.context = context;
+    this.ui = (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.ui;
+    this.$editable = context.layoutInfo.editable;
+    this.options = context.options;
+    this.hint = this.options.hint || [];
+    this.direction = this.options.hintDirection || 'bottom';
+    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];
+    this.events = {
+      'summernote.keyup': function summernoteKeyup(we, event) {
+        if (!event.isDefaultPrevented()) {
+          _this.handleKeyup(event);
+        }
+      },
+      'summernote.keydown': function summernoteKeydown(we, event) {
+        _this.handleKeydown(event);
+      },
+      'summernote.disable summernote.dialog.shown summernote.blur': function summernoteDisableSummernoteDialogShownSummernoteBlur() {
+        _this.hide();
+      }
+    };
+  }
+  return HintPopover_createClass(HintPopover, [{
+    key: "shouldInitialize",
+    value: function shouldInitialize() {
+      return this.hints.length > 0;
+    }
+  }, {
+    key: "initialize",
+    value: function initialize() {
+      var _this2 = this;
+      this.lastWordRange = null;
+      this.matchingWord = null;
+      this.$popover = this.ui.popover({
+        className: 'note-hint-popover',
+        hideArrow: true,
+        direction: ''
+      }).render().appendTo(this.options.container);
+      this.$popover.hide();
+      this.$content = this.$popover.find('.popover-content,.note-popover-content');
+      this.$content.on('click', '.note-hint-item', function (event) {
+        _this2.$content.find('.active').removeClass('active');
+        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.currentTarget).addClass('active');
+        _this2.replace();
+      });
+      this.$popover.on('mousedown', function (event) {
+        event.preventDefault();
+      });
+    }
+  }, {
+    key: "destroy",
+    value: function destroy() {
+      this.$popover.remove();
+    }
+  }, {
+    key: "selectItem",
+    value: function selectItem($item) {
+      this.$content.find('.active').removeClass('active');
+      $item.addClass('active');
+      this.$content[0].scrollTop = $item[0].offsetTop - this.$content.innerHeight() / 2;
+    }
+  }, {
+    key: "moveDown",
+    value: function moveDown() {
+      var $current = this.$content.find('.note-hint-item.active');
+      var $next = $current.next();
+      if ($next.length) {
+        this.selectItem($next);
+      } else {
+        var $nextGroup = $current.parent().next();
+        if (!$nextGroup.length) {
+          $nextGroup = this.$content.find('.note-hint-group').first();
+        }
+        this.selectItem($nextGroup.find('.note-hint-item').first());
+      }
+    }
+  }, {
+    key: "moveUp",
+    value: function moveUp() {
+      var $current = this.$content.find('.note-hint-item.active');
+      var $prev = $current.prev();
+      if ($prev.length) {
+        this.selectItem($prev);
+      } else {
+        var $prevGroup = $current.parent().prev();
+        if (!$prevGroup.length) {
+          $prevGroup = this.$content.find('.note-hint-group').last();
+        }
+        this.selectItem($prevGroup.find('.note-hint-item').last());
+      }
+    }
+  }, {
+    key: "replace",
+    value: function replace() {
+      var $item = this.$content.find('.note-hint-item.active');
+      if ($item.length) {
+        var node = this.nodeFromItem($item);
+        // If matchingWord length = 0 -> capture OK / open hint / but as mention capture "" (\w*)
+        if (this.matchingWord !== null && this.matchingWord.length === 0) {
+          this.lastWordRange.so = this.lastWordRange.eo;
+          // Else si > 0 and normal case -> adjust range "before" for correct position of insertion
+        } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {
+          var rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;
+          if (rangeCompute > 0) {
+            this.lastWordRange.so += rangeCompute;
+          }
+        }
+        this.lastWordRange.insertNode(node);
+        if (this.options.hintSelect === 'next') {
+          var blank = document.createTextNode('');
+          external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(node).after(blank);
+          range.createFromNodeBefore(blank).select();
+        } else {
+          range.createFromNodeAfter(node).select();
+        }
+        this.lastWordRange = null;
+        this.hide();
+        this.context.invoke('editor.focus');
+        this.context.triggerEvent('change', this.$editable.html(), this.$editable);
+      }
+    }
+  }, {
+    key: "nodeFromItem",
+    value: function nodeFromItem($item) {
+      var hint = this.hints[$item.data('index')];
+      var item = $item.data('item');
+      var node = hint.content ? hint.content(item) : item;
+      if (typeof node === 'string') {
+        node = dom.createText(node);
+      }
+      return node;
+    }
+  }, {
+    key: "createItemTemplates",
+    value: function createItemTemplates(hintIdx, items) {
+      var hint = this.hints[hintIdx];
+      return items.map(function (item, idx) {
+        var $item = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class="note-hint-item"></div>');
+        $item.append(hint.template ? hint.template(item) : item + '');
+        $item.data({
+          'index': hintIdx,
+          'item': item
+        });
+        if (hintIdx === 0 && idx === 0) {
+          $item.addClass('active');
+        }
+        return $item;
+      });
+    }
+  }, {
+    key: "handleKeydown",
+    value: function handleKeydown(event) {
+      if (!this.$popover.is(':visible')) {
+        return;
+      }
+      if (event.keyCode === key.code.ENTER) {
+        event.preventDefault();
+        this.replace();
+      } else if (event.keyCode === key.code.UP) {
+        event.preventDefault();
+        this.moveUp();
+      } else if (event.keyCode === key.code.DOWN) {
+        event.preventDefault();
+        this.moveDown();
+      }
+    }
+  }, {
+    key: "searchKeyword",
+    value: function searchKeyword(index, keyword, callback) {
+      var hint = this.hints[index];
+      if (hint && hint.match.test(keyword) && hint.search) {
+        var matches = hint.match.exec(keyword);
+        this.matchingWord = matches[0];
+        hint.search(matches[1], callback);
+      } else {
+        callback();
+      }
+    }
+  }, {
+    key: "createGroup",
+    value: function createGroup(idx, keyword) {
+      var _this3 = this;
+      var $group = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class="note-hint-group note-hint-group-' + idx + '"></div>');
+      this.searchKeyword(idx, keyword, function (items) {
+        items = items || [];
+        if (items.length) {
+          $group.html(_this3.createItemTemplates(idx, items));
+          _this3.show();
+        }
+      });
+      return $group;
+    }
+  }, {
+    key: "handleKeyup",
+    value: function handleKeyup(event) {
+      var _this4 = this;
+      if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], event.keyCode)) {
+        var _range = this.context.invoke('editor.getLastRange');
+        var wordRange, keyword;
+        if (this.options.hintMode === 'words') {
+          wordRange = _range.getWordsRange(_range);
+          keyword = wordRange.toString();
+          this.hints.forEach(function (hint) {
+            if (hint.match.test(keyword)) {
+              wordRange = _range.getWordsMatchRange(hint.match);
+              return false;
+            }
+          });
+          if (!wordRange) {
+            this.hide();
+            return;
+          }
+          keyword = wordRange.toString();
+        } else {
+          wordRange = _range.getWordRange();
+          keyword = wordRange.toString();
+        }
+        if (this.hints.length && keyword) {
+          this.$content.empty();
+          var bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));
+          var containerOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.container).offset();
+          if (bnd) {
+            bnd.top -= containerOffset.top;
+            bnd.left -= containerOffset.left;
+            this.$popover.hide();
+            this.lastWordRange = wordRange;
+            this.hints.forEach(function (hint, idx) {
+              if (hint.match.test(keyword)) {
+                _this4.createGroup(idx, keyword).appendTo(_this4.$content);
+              }
+            });
+            // select first .note-hint-item
+            this.$content.find('.note-hint-item').first().addClass('active');
+
+            // set position for popover after group is created
+            if (this.direction === 'top') {
+              this.$popover.css({
+                left: bnd.left,
+                top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST
+              });
+            } else {
+              this.$popover.css({
+                left: bnd.left,
+                top: bnd.top + bnd.height + POPOVER_DIST
+              });
+            }
+          }
+        } else {
+          this.hide();
+        }
+      }
+    }
+  }, {
+    key: "show",
+    value: function show() {
+      this.$popover.show();
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.$popover.hide();
+    }
+  }]);
+}();
+
+;// CONCATENATED MODULE: ./src/js/settings.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {
+  version: '0.9.0',
+  plugins: {},
+  dom: dom,
+  range: range,
+  lists: lists,
+  options: {
+    langInfo: (external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote.lang['en-US'],
+    editing: true,
+    modules: {
+      'editor': Editor,
+      'clipboard': Clipboard,
+      'dropzone': Dropzone,
+      'codeview': CodeView,
+      'statusbar': Statusbar,
+      'fullscreen': Fullscreen,
+      'handle': Handle,
+      // FIXME: HintPopover must be front of autolink
+      //  - Script error about range when Enter key is pressed on hint popover
+      'hintPopover': HintPopover,
+      'autoLink': AutoLink,
+      'autoSync': AutoSync,
+      'autoReplace': AutoReplace,
+      'placeholder': Placeholder,
+      'buttons': Buttons,
+      'toolbar': Toolbar,
+      'linkDialog': LinkDialog,
+      'linkPopover': LinkPopover,
+      'imageDialog': ImageDialog,
+      'imagePopover': ImagePopover,
+      'tablePopover': TablePopover,
+      'videoDialog': VideoDialog,
+      'helpDialog': HelpDialog,
+      'airPopover': AirPopover
+    },
+    buttons: {},
+    lang: 'en-US',
+    followingToolbar: false,
+    toolbarPosition: 'top',
+    otherStaticBar: '',
+    // toolbar
+    codeviewKeepButton: false,
+    toolbar: [['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']]],
+    // popover
+    popatmouse: true,
+    popover: {
+      image: [['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']], ['float', ['floatLeft', 'floatRight', 'floatNone']], ['remove', ['removeMedia']]],
+      link: [['link', ['linkDialogShow', 'unlink']]],
+      table: [['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]],
+      air: [['color', ['color']], ['font', ['bold', 'underline', 'clear']], ['para', ['ul', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture']], ['view', ['fullscreen', 'codeview']]]
+    },
+    // link options
+    linkAddNoReferrer: false,
+    addLinkNoOpener: false,
+    // air mode: inline editor
+    airMode: false,
+    overrideContextMenu: false,
+    // TBD
+
+    width: null,
+    height: null,
+    linkTargetBlank: true,
+    focus: false,
+    tabDisable: false,
+    tabSize: 4,
+    styleWithCSS: false,
+    shortcuts: true,
+    textareaAutoSync: true,
+    tooltip: 'auto',
+    container: null,
+    maxTextLength: 0,
+    blockquoteBreakingLevel: 2,
+    spellCheck: true,
+    disableGrammar: false,
+    placeholder: null,
+    inheritPlaceholder: false,
+    // TODO: need to be documented
+    recordEveryKeystroke: false,
+    historyLimit: 200,
+    // TODO: need to be documented
+    showDomainOnlyForAutolink: false,
+    // TODO: need to be documented
+    hintMode: 'word',
+    hintSelect: 'after',
+    hintDirection: 'bottom',
+    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
+    fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana'],
+    fontNamesIgnoreCheck: [],
+    addDefaultFonts: true,
+    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],
+    fontSizeUnits: ['px', 'pt'],
+    // pallete colors(n x n)
+    colors: [['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']],
+    // http://chir.ag/projects/name-that-color/
+    colorsName: [['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']],
+    colorButton: {
+      foreColor: '#000000',
+      backColor: '#FFFF00'
+    },
+    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],
+    tableClassName: 'table table-bordered',
+    insertTableMaxSize: {
+      col: 10,
+      row: 10
+    },
+    // By default, dialogs are attached in container.
+    dialogsInBody: false,
+    dialogsFade: false,
+    maximumImageFileSize: null,
+    acceptImageFileTypes: "image/*",
+    allowClipboardImagePasting: true,
+    callbacks: {
+      onBeforeCommand: null,
+      onBlur: null,
+      onBlurCodeview: null,
+      onChange: null,
+      onChangeCodeview: null,
+      onDialogShown: null,
+      onEnter: null,
+      onFocus: null,
+      onImageLinkInsert: null,
+      onImageUpload: null,
+      onImageUploadError: null,
+      onInit: null,
+      onKeydown: null,
+      onKeyup: null,
+      onMousedown: null,
+      onMouseup: null,
+      onPaste: null,
+      onScroll: null
+    },
+    codemirror: {
+      mode: 'text/html',
+      htmlMode: true,
+      lineNumbers: true
+    },
+    codeviewFilter: true,
+    codeviewFilterRegex: /<\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,
+    codeviewIframeFilter: true,
+    codeviewIframeWhitelistSrc: [],
+    codeviewIframeWhitelistSrcBase: ['www.youtube.com', 'www.youtube-nocookie.com', 'www.facebook.com', 'vine.co', 'instagram.com', 'player.vimeo.com', 'www.dailymotion.com', 'player.youku.com', 'jumpingbean.tv', 'v.qq.com'],
+    keyMap: {
+      pc: {
+        'ESC': 'escape',
+        'ENTER': 'insertParagraph',
+        'CTRL+Z': 'undo',
+        'CTRL+Y': 'redo',
+        'TAB': 'tab',
+        'SHIFT+TAB': 'untab',
+        'CTRL+B': 'bold',
+        'CTRL+I': 'italic',
+        'CTRL+U': 'underline',
+        'CTRL+SHIFT+S': 'strikethrough',
+        'CTRL+BACKSLASH': 'removeFormat',
+        'CTRL+SHIFT+L': 'justifyLeft',
+        'CTRL+SHIFT+E': 'justifyCenter',
+        'CTRL+SHIFT+R': 'justifyRight',
+        'CTRL+SHIFT+J': 'justifyFull',
+        'CTRL+SHIFT+NUM7': 'insertUnorderedList',
+        'CTRL+SHIFT+NUM8': 'insertOrderedList',
+        'CTRL+LEFTBRACKET': 'outdent',
+        'CTRL+RIGHTBRACKET': 'indent',
+        'CTRL+NUM0': 'formatPara',
+        'CTRL+NUM1': 'formatH1',
+        'CTRL+NUM2': 'formatH2',
+        'CTRL+NUM3': 'formatH3',
+        'CTRL+NUM4': 'formatH4',
+        'CTRL+NUM5': 'formatH5',
+        'CTRL+NUM6': 'formatH6',
+        'CTRL+ENTER': 'insertHorizontalRule',
+        'CTRL+K': 'linkDialog.show'
+      },
+      mac: {
+        'ESC': 'escape',
+        'ENTER': 'insertParagraph',
+        'CMD+Z': 'undo',
+        'CMD+SHIFT+Z': 'redo',
+        'TAB': 'tab',
+        'SHIFT+TAB': 'untab',
+        'CMD+B': 'bold',
+        'CMD+I': 'italic',
+        'CMD+U': 'underline',
+        'CMD+SHIFT+S': 'strikethrough',
+        'CMD+BACKSLASH': 'removeFormat',
+        'CMD+SHIFT+L': 'justifyLeft',
+        'CMD+SHIFT+E': 'justifyCenter',
+        'CMD+SHIFT+R': 'justifyRight',
+        'CMD+SHIFT+J': 'justifyFull',
+        'CMD+SHIFT+NUM7': 'insertUnorderedList',
+        'CMD+SHIFT+NUM8': 'insertOrderedList',
+        'CMD+LEFTBRACKET': 'outdent',
+        'CMD+RIGHTBRACKET': 'indent',
+        'CMD+NUM0': 'formatPara',
+        'CMD+NUM1': 'formatH1',
+        'CMD+NUM2': 'formatH2',
+        'CMD+NUM3': 'formatH3',
+        'CMD+NUM4': 'formatH4',
+        'CMD+NUM5': 'formatH5',
+        'CMD+NUM6': 'formatH6',
+        'CMD+ENTER': 'insertHorizontalRule',
+        'CMD+K': 'linkDialog.show'
+      }
+    },
+    icons: {
+      'align': 'note-icon-align',
+      'alignCenter': 'note-icon-align-center',
+      'alignJustify': 'note-icon-align-justify',
+      'alignLeft': 'note-icon-align-left',
+      'alignRight': 'note-icon-align-right',
+      'rowBelow': 'note-icon-row-below',
+      'colBefore': 'note-icon-col-before',
+      'colAfter': 'note-icon-col-after',
+      'rowAbove': 'note-icon-row-above',
+      'rowRemove': 'note-icon-row-remove',
+      'colRemove': 'note-icon-col-remove',
+      'indent': 'note-icon-align-indent',
+      'outdent': 'note-icon-align-outdent',
+      'arrowsAlt': 'note-icon-arrows-alt',
+      'bold': 'note-icon-bold',
+      'caret': 'note-icon-caret',
+      'circle': 'note-icon-circle',
+      'close': 'note-icon-close',
+      'code': 'note-icon-code',
+      'eraser': 'note-icon-eraser',
+      'floatLeft': 'note-icon-float-left',
+      'floatRight': 'note-icon-float-right',
+      'font': 'note-icon-font',
+      'frame': 'note-icon-frame',
+      'italic': 'note-icon-italic',
+      'link': 'note-icon-link',
+      'unlink': 'note-icon-chain-broken',
+      'magic': 'note-icon-magic',
+      'menuCheck': 'note-icon-menu-check',
+      'minus': 'note-icon-minus',
+      'orderedlist': 'note-icon-orderedlist',
+      'pencil': 'note-icon-pencil',
+      'picture': 'note-icon-picture',
+      'question': 'note-icon-question',
+      'redo': 'note-icon-redo',
+      'rollback': 'note-icon-rollback',
+      'square': 'note-icon-square',
+      'strikethrough': 'note-icon-strikethrough',
+      'subscript': 'note-icon-subscript',
+      'superscript': 'note-icon-superscript',
+      'table': 'note-icon-table',
+      'textHeight': 'note-icon-text-height',
+      'trash': 'note-icon-trash',
+      'underline': 'note-icon-underline',
+      'undo': 'note-icon-undo',
+      'unorderedlist': 'note-icon-unorderedlist',
+      'video': 'note-icon-video'
+    }
+  }
+});
+;// CONCATENATED MODULE: ./src/js/renderer.js
+function renderer_typeof(o) { "@babel/helpers - typeof"; return renderer_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, renderer_typeof(o); }
+function renderer_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function renderer_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, renderer_toPropertyKey(o.key), o); } }
+function renderer_createClass(e, r, t) { return r && renderer_defineProperties(e.prototype, r), t && renderer_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function renderer_toPropertyKey(t) { var i = renderer_toPrimitive(t, "string"); return "symbol" == renderer_typeof(i) ? i : i + ""; }
+function renderer_toPrimitive(t, r) { if ("object" != renderer_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != renderer_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var Renderer = /*#__PURE__*/function () {
+  function Renderer(markup, children, options, callback) {
+    renderer_classCallCheck(this, Renderer);
+    this.markup = markup;
+    this.children = children;
+    this.options = options;
+    this.callback = callback;
+  }
+  return renderer_createClass(Renderer, [{
+    key: "render",
+    value: function render($parent) {
+      var $node = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.markup);
+      if (this.options && this.options.contents) {
+        $node.html(this.options.contents);
+      }
+      if (this.options && this.options.className) {
+        $node.addClass(this.options.className);
+      }
+      if (this.options && this.options.data) {
+        external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().each(this.options.data, function (k, v) {
+          $node.attr('data-' + k, v);
+        });
+      }
+      if (this.options && this.options.click) {
+        $node.on('click', this.options.click);
+      }
+      if (this.children) {
+        var $container = $node.find('.note-children-container');
+        this.children.forEach(function (child) {
+          child.render($container.length ? $container : $node);
+        });
+      }
+      if (this.callback) {
+        this.callback($node, this.options);
+      }
+      if (this.options && this.options.callback) {
+        this.options.callback($node);
+      }
+      if ($parent) {
+        $parent.append($node);
+      }
+      return $node;
+    }
+  }]);
+}();
+/* harmony default export */ const renderer = ({
+  create: function create(markup, callback) {
+    return function () {
+      var options = renderer_typeof(arguments[1]) === 'object' ? arguments[1] : arguments[0];
+      var children = Array.isArray(arguments[0]) ? arguments[0] : [];
+      if (options && options.children) {
+        children = options.children;
+      }
+      return new Renderer(markup, children, options, callback);
+    };
+  }
+});
+;// CONCATENATED MODULE: ./src/styles/lite/js/TooltipUI.js
+function TooltipUI_typeof(o) { "@babel/helpers - typeof"; return TooltipUI_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, TooltipUI_typeof(o); }
+function TooltipUI_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function TooltipUI_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, TooltipUI_toPropertyKey(o.key), o); } }
+function TooltipUI_createClass(e, r, t) { return r && TooltipUI_defineProperties(e.prototype, r), t && TooltipUI_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function TooltipUI_toPropertyKey(t) { var i = TooltipUI_toPrimitive(t, "string"); return "symbol" == TooltipUI_typeof(i) ? i : i + ""; }
+function TooltipUI_toPrimitive(t, r) { if ("object" != TooltipUI_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != TooltipUI_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var TooltipUI = /*#__PURE__*/function () {
+  function TooltipUI($node, options) {
+    TooltipUI_classCallCheck(this, TooltipUI);
+    this.$node = $node;
+    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, {
+      title: '',
+      target: options.container,
+      trigger: 'hover focus',
+      placement: 'bottom'
+    }, options);
+
+    // create tooltip node
+    this.$tooltip = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(['<div class="note-tooltip">', '<div class="note-tooltip-arrow"></div>', '<div class="note-tooltip-content"></div>', '</div>'].join(''));
+
+    // define event
+    if (this.options.trigger !== 'manual') {
+      var showCallback = this.show.bind(this);
+      var hideCallback = this.hide.bind(this);
+      var toggleCallback = this.toggle.bind(this);
+      this.options.trigger.split(' ').forEach(function (eventName) {
+        if (eventName === 'hover') {
+          $node.off('mouseenter mouseleave');
+          $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);
+        } else if (eventName === 'click') {
+          $node.on('click', toggleCallback);
+        } else if (eventName === 'focus') {
+          $node.on('focus', showCallback).on('blur', hideCallback);
+        }
+      });
+    }
+  }
+  return TooltipUI_createClass(TooltipUI, [{
+    key: "show",
+    value: function show() {
+      var $node = this.$node;
+      var offset = $node.offset();
+      var targetOffset = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.target).offset();
+      offset.top -= targetOffset.top;
+      offset.left -= targetOffset.left;
+      var $tooltip = this.$tooltip;
+      var title = this.options.title || $node.attr('title') || $node.data('title');
+      var placement = this.options.placement || $node.data('placement');
+      $tooltip.addClass(placement);
+      $tooltip.find('.note-tooltip-content').text(title);
+      $tooltip.appendTo(this.options.target);
+      var nodeWidth = $node.outerWidth();
+      var nodeHeight = $node.outerHeight();
+      var tooltipWidth = $tooltip.outerWidth();
+      var tooltipHeight = $tooltip.outerHeight();
+      if (placement === 'bottom') {
+        $tooltip.css({
+          top: offset.top + nodeHeight,
+          left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)
+        });
+      } else if (placement === 'top') {
+        $tooltip.css({
+          top: offset.top - tooltipHeight,
+          left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)
+        });
+      } else if (placement === 'left') {
+        $tooltip.css({
+          top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),
+          left: offset.left - tooltipWidth
+        });
+      } else if (placement === 'right') {
+        $tooltip.css({
+          top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),
+          left: offset.left + nodeWidth
+        });
+      }
+      $tooltip.addClass('in');
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      var _this = this;
+      this.$tooltip.removeClass('in');
+      setTimeout(function () {
+        _this.$tooltip.remove();
+      }, 200);
+    }
+  }, {
+    key: "toggle",
+    value: function toggle() {
+      if (this.$tooltip.hasClass('in')) {
+        this.hide();
+      } else {
+        this.show();
+      }
+    }
+  }]);
+}();
+/* harmony default export */ const js_TooltipUI = (TooltipUI);
+;// CONCATENATED MODULE: ./src/styles/lite/js/DropdownUI.js
+function DropdownUI_typeof(o) { "@babel/helpers - typeof"; return DropdownUI_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, DropdownUI_typeof(o); }
+function DropdownUI_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function DropdownUI_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, DropdownUI_toPropertyKey(o.key), o); } }
+function DropdownUI_createClass(e, r, t) { return r && DropdownUI_defineProperties(e.prototype, r), t && DropdownUI_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function DropdownUI_toPropertyKey(t) { var i = DropdownUI_toPrimitive(t, "string"); return "symbol" == DropdownUI_typeof(i) ? i : i + ""; }
+function DropdownUI_toPrimitive(t, r) { if ("object" != DropdownUI_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != DropdownUI_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var DropdownUI = /*#__PURE__*/function () {
+  function DropdownUI($node, options) {
+    DropdownUI_classCallCheck(this, DropdownUI);
+    this.$button = $node;
+    this.options = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend({}, {
+      target: options.container
+    }, options);
+    this.setEvent();
+  }
+  return DropdownUI_createClass(DropdownUI, [{
+    key: "setEvent",
+    value: function setEvent() {
+      var _this = this;
+      this.$button.on('click', function (e) {
+        _this.toggle();
+        e.stopImmediatePropagation();
+      });
+    }
+  }, {
+    key: "clear",
+    value: function clear() {
+      var $parent = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.note-btn-group.open');
+      $parent.find('.note-btn.active').removeClass('active');
+      $parent.removeClass('open');
+    }
+  }, {
+    key: "show",
+    value: function show() {
+      this.$button.addClass('active');
+      this.$button.parent().addClass('open');
+      var $dropdown = this.$button.next();
+      var offset = $dropdown.offset();
+      var width = $dropdown.outerWidth();
+      var windowWidth = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(window).width();
+      var targetMarginRight = parseFloat(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this.options.target).css('margin-right'));
+      if (offset.left + width > windowWidth - targetMarginRight) {
+        $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));
+      } else {
+        $dropdown.css('margin-left', '');
+      }
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.$button.removeClass('active');
+      this.$button.parent().removeClass('open');
+    }
+  }, {
+    key: "toggle",
+    value: function toggle() {
+      var isOpened = this.$button.parent().hasClass('open');
+      this.clear();
+      if (isOpened) {
+        this.hide();
+      } else {
+        this.show();
+      }
+    }
+  }]);
+}();
+external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document).on('click.note-dropdown-menu', function (e) {
+  if (!external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.target).closest('.note-btn-group').length) {
+    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.note-btn-group.open .note-btn.active').removeClass('active');
+    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('.note-btn-group.open').removeClass('open');
+  }
+});
+external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(document).on('click.note-dropdown-menu', function (e) {
+  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.target).closest('.note-dropdown-menu').parent().removeClass('open');
+  external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.target).closest('.note-dropdown-menu').parent().find('.note-btn.active').removeClass('active');
+});
+/* harmony default export */ const js_DropdownUI = (DropdownUI);
+;// CONCATENATED MODULE: ./src/styles/lite/js/ModalUI.js
+function ModalUI_typeof(o) { "@babel/helpers - typeof"; return ModalUI_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, ModalUI_typeof(o); }
+function ModalUI_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function ModalUI_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, ModalUI_toPropertyKey(o.key), o); } }
+function ModalUI_createClass(e, r, t) { return r && ModalUI_defineProperties(e.prototype, r), t && ModalUI_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function ModalUI_toPropertyKey(t) { var i = ModalUI_toPrimitive(t, "string"); return "symbol" == ModalUI_typeof(i) ? i : i + ""; }
+function ModalUI_toPrimitive(t, r) { if ("object" != ModalUI_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != ModalUI_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var ModalUI = /*#__PURE__*/function () {
+  function ModalUI($node /*, options */) {
+    ModalUI_classCallCheck(this, ModalUI);
+    this.$modal = $node;
+    this.$backdrop = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<div class="note-modal-backdrop"></div>');
+  }
+  return ModalUI_createClass(ModalUI, [{
+    key: "show",
+    value: function show() {
+      var _this = this;
+      this.$backdrop.appendTo(document.body).show();
+      this.$modal.addClass('open').show();
+      this.$modal.trigger('note.modal.show');
+      this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));
+      this.$modal.on('keydown', function (event) {
+        if (event.which === 27) {
+          event.preventDefault();
+          _this.hide();
+        }
+      });
+    }
+  }, {
+    key: "hide",
+    value: function hide() {
+      this.$modal.removeClass('open').hide();
+      this.$backdrop.hide();
+      this.$modal.trigger('note.modal.hide');
+      this.$modal.off('keydown');
+    }
+  }]);
+}();
+/* harmony default export */ const js_ModalUI = (ModalUI);
+;// CONCATENATED MODULE: ./src/styles/lite/summernote-lite.js
+
+
+
+
+
+
+
+var editor = renderer.create('<div class="note-editor note-frame"></div>');
+var toolbar = renderer.create('<div class="note-toolbar" role="toolbar"></div>');
+var editingArea = renderer.create('<div class="note-editing-area"></div>');
+var codable = renderer.create('<textarea class="note-codable" aria-multiline="true"></textarea>');
+var editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"></div>');
+var statusbar = renderer.create(['<output class="note-status-output" role="status" aria-live="polite"></output>', '<div class="note-statusbar" role="status">', '<div class="note-resizebar" aria-label="resize">', '<div class="note-icon-bar"></div>', '<div class="note-icon-bar"></div>', '<div class="note-icon-bar"></div>', '</div>', '</div>'].join(''));
+var airEditor = renderer.create('<div class="note-editor note-airframe"></div>');
+var airEditable = renderer.create(['<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"></div>', '<output class="note-status-output" role="status" aria-live="polite"></output>'].join(''));
+var buttonGroup = renderer.create('<div class="note-btn-group"></div>');
+var summernote_lite_button = renderer.create('<button type="button" class="note-btn" tabindex="-1"></button>', function ($node, options) {
+  // set button type
+  if (options && options.tooltip) {
+    $node.attr({
+      'aria-label': options.tooltip
+    });
+    $node.data('_lite_tooltip', new js_TooltipUI($node, {
+      title: options.tooltip,
+      container: options.container
+    })).on('click', function (e) {
+      external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(e.currentTarget).data('_lite_tooltip').hide();
+    });
+  }
+  if (options.contents) {
+    $node.html(options.contents);
+  }
+  if (options && options.data && options.data.toggle === 'dropdown') {
+    $node.data('_lite_dropdown', new js_DropdownUI($node, {
+      container: options.container
+    }));
+  }
+  if (options && options.codeviewKeepButton) {
+    $node.addClass('note-codeview-keep');
+  }
+});
+var dropdown = renderer.create('<div class="note-dropdown-menu" role="list"></div>', function ($node, options) {
+  var markup = Array.isArray(options.items) ? options.items.map(function (item) {
+    var value = typeof item === 'string' ? item : item.value || '';
+    var content = options.template ? options.template(item) : item;
+    var $temp = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + value + '"></a>');
+    $temp.html(content).data('item', item);
+    return $temp;
+  }) : options.items;
+  $node.html(markup).attr({
+    'aria-label': options.title
+  });
+  $node.on('click', '> .note-dropdown-item', function (e) {
+    var $a = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this);
+    var item = $a.data('item');
+    var value = $a.data('value');
+    if (item.click) {
+      item.click($a);
+    } else if (options.itemClick) {
+      options.itemClick(e, item, value);
+    }
+  });
+  if (options && options.codeviewKeepButton) {
+    $node.addClass('note-codeview-keep');
+  }
+});
+var dropdownCheck = renderer.create('<div class="note-dropdown-menu note-check" role="list"></div>', function ($node, options) {
+  var markup = Array.isArray(options.items) ? options.items.map(function (item) {
+    var value = typeof item === 'string' ? item : item.value || '';
+    var content = options.template ? options.template(item) : item;
+    var $temp = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>');
+    $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);
+    return $temp;
+  }) : options.items;
+  $node.html(markup).attr({
+    'aria-label': options.title
+  });
+  $node.on('click', '> .note-dropdown-item', function (e) {
+    var $a = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this);
+    var item = $a.data('item');
+    var value = $a.data('value');
+    if (item.click) {
+      item.click($a);
+    } else if (options.itemClick) {
+      options.itemClick(e, item, value);
+    }
+  });
+  if (options && options.codeviewKeepButton) {
+    $node.addClass('note-codeview-keep');
+  }
+});
+var dropdownButtonContents = function dropdownButtonContents(contents, options) {
+  return contents + ' ' + icon(options.icons.caret, 'span');
+};
+var dropdownButton = function dropdownButton(opt, callback) {
+  return buttonGroup([summernote_lite_button({
+    className: 'dropdown-toggle',
+    contents: opt.title + ' ' + icon('note-icon-caret'),
+    tooltip: opt.tooltip,
+    data: {
+      toggle: 'dropdown'
+    }
+  }), dropdown({
+    className: opt.className,
+    items: opt.items,
+    template: opt.template,
+    itemClick: opt.itemClick
+  })], {
+    callback: callback
+  }).render();
+};
+var dropdownCheckButton = function dropdownCheckButton(opt, callback) {
+  return buttonGroup([summernote_lite_button({
+    className: 'dropdown-toggle',
+    contents: opt.title + ' ' + icon('note-icon-caret'),
+    tooltip: opt.tooltip,
+    data: {
+      toggle: 'dropdown'
+    }
+  }), dropdownCheck({
+    className: opt.className,
+    checkClassName: opt.checkClassName,
+    items: opt.items,
+    template: opt.template,
+    itemClick: opt.itemClick
+  })], {
+    callback: callback
+  }).render();
+};
+var paragraphDropdownButton = function paragraphDropdownButton(opt) {
+  return buttonGroup([summernote_lite_button({
+    className: 'dropdown-toggle',
+    contents: opt.title + ' ' + icon('note-icon-caret'),
+    tooltip: opt.tooltip,
+    data: {
+      toggle: 'dropdown'
+    }
+  }), dropdown([buttonGroup({
+    className: 'note-align',
+    children: opt.items[0]
+  }), buttonGroup({
+    className: 'note-list',
+    children: opt.items[1]
+  })])]).render();
+};
+var tableMoveHandler = function tableMoveHandler(event, col, row) {
+  var PX_PER_EM = 18;
+  var $picker = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target.parentNode); // target is mousecatcher
+  var $dimensionDisplay = $picker.next();
+  var $catcher = $picker.find('.note-dimension-picker-mousecatcher');
+  var $highlighted = $picker.find('.note-dimension-picker-highlighted');
+  var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');
+  var posOffset;
+  // HTML5 with jQuery - e.offsetX is undefined in Firefox
+  if (event.offsetX === undefined) {
+    var posCatcher = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target).offset();
+    posOffset = {
+      x: event.pageX - posCatcher.left,
+      y: event.pageY - posCatcher.top
+    };
+  } else {
+    posOffset = {
+      x: event.offsetX,
+      y: event.offsetY
+    };
+  }
+  var dim = {
+    c: Math.ceil(posOffset.x / PX_PER_EM) || 1,
+    r: Math.ceil(posOffset.y / PX_PER_EM) || 1
+  };
+  $highlighted.css({
+    width: dim.c + 'em',
+    height: dim.r + 'em'
+  });
+  $catcher.data('value', dim.c + 'x' + dim.r);
+  if (dim.c > 3 && dim.c < col) {
+    $unhighlighted.css({
+      width: dim.c + 1 + 'em'
+    });
+  }
+  if (dim.r > 3 && dim.r < row) {
+    $unhighlighted.css({
+      height: dim.r + 1 + 'em'
+    });
+  }
+  $dimensionDisplay.html(dim.c + ' x ' + dim.r);
+};
+var tableDropdownButton = function tableDropdownButton(opt) {
+  return buttonGroup([summernote_lite_button({
+    className: 'dropdown-toggle',
+    contents: opt.title + ' ' + icon('note-icon-caret'),
+    tooltip: opt.tooltip,
+    data: {
+      toggle: 'dropdown'
+    }
+  }), dropdown({
+    className: 'note-table',
+    items: ['<div class="note-dimension-picker">', '<div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"></div>', '<div class="note-dimension-picker-highlighted"></div>', '<div class="note-dimension-picker-unhighlighted"></div>', '</div>', '<div class="note-dimension-display">1 x 1</div>'].join('')
+  })], {
+    callback: function callback($node) {
+      var $catcher = $node.find('.note-dimension-picker-mousecatcher');
+      $catcher.css({
+        width: opt.col + 'em',
+        height: opt.row + 'em'
+      }).on('mouseup', opt.itemClick).on('mousemove', function (e) {
+        tableMoveHandler(e, opt.col, opt.row);
+      });
+    }
+  }).render();
+};
+var palette = renderer.create('<div class="note-color-palette"></div>', function ($node, options) {
+  var contents = [];
+  for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) {
+    var eventName = options.eventName;
+    var colors = options.colors[row];
+    var colorsName = options.colorsName[row];
+    var buttons = [];
+    for (var col = 0, colSize = colors.length; col < colSize; col++) {
+      var color = colors[col];
+      var colorName = colorsName[col];
+      buttons.push(['<button type="button" class="note-btn note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'data-title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>'].join(''));
+    }
+    contents.push('<div class="note-color-row">' + buttons.join('') + '</div>');
+  }
+  $node.html(contents.join(''));
+  $node.find('.note-color-btn').each(function () {
+    external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this).data('_lite_tooltip', new js_TooltipUI(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this), {
+      container: options.container
+    }));
+  });
+});
+var colorDropdownButton = function colorDropdownButton(opt, type) {
+  return buttonGroup({
+    className: 'note-color',
+    children: [summernote_lite_button({
+      className: 'note-current-color-button',
+      contents: opt.title,
+      tooltip: opt.lang.color.recent,
+      click: opt.currentClick,
+      callback: function callback($button) {
+        var $recentColor = $button.find('.note-recent-color');
+        if (type !== 'foreColor') {
+          $recentColor.css('background-color', '#FFFF00');
+          $button.attr('data-backColor', '#FFFF00');
+        }
+      }
+    }), summernote_lite_button({
+      className: 'dropdown-toggle',
+      contents: icon('note-icon-caret'),
+      tooltip: opt.lang.color.more,
+      data: {
+        toggle: 'dropdown'
+      }
+    }), dropdown({
+      items: ['<div>', '<div class="note-btn-group btn-background-color">', '<div class="note-palette-title">' + opt.lang.color.background + '</div>', '<div>', '<button type="button" class="note-color-reset note-btn note-btn-block" data-event="backColor" data-value="transparent">', opt.lang.color.transparent, '</button>', '</div>', '<div class="note-holder" data-event="backColor"></div>', '<div class="btn-sm">', '<input type="color" id="html5bcp" class="note-btn btn-default" value="#21104A" style="width:100%;" data-value="cp">', '<button type="button" class="note-color-reset btn" data-event="backColor" data-value="cpbackColor">', opt.lang.color.cpSelect, '</button>', '</div>', '</div>', '<div class="note-btn-group btn-foreground-color">', '<div class="note-palette-title">' + opt.lang.color.foreground + '</div>', '<div>', '<button type="button" class="note-color-reset note-btn note-btn-block" data-event="removeFormat" data-value="foreColor">', opt.lang.color.resetToDefault, '</button>', '</div>', '<div class="note-holder" data-event="foreColor"></div>', '<div class="btn-sm">', '<input type="color" id="html5fcp" class="note-btn btn-default" value="#21104A" style="width:100%;" data-value="cp">', '<button type="button" class="note-color-reset btn" data-event="foreColor" data-value="cpforeColor">', opt.lang.color.cpSelect, '</button>', '</div>', '</div>', '</div>'].join(''),
+      callback: function callback($dropdown) {
+        $dropdown.find('.note-holder').each(function () {
+          var $holder = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(this);
+          $holder.append(palette({
+            colors: opt.colors,
+            eventName: $holder.data('event')
+          }).render());
+        });
+        if (type === 'fore') {
+          $dropdown.find('.btn-background-color').hide();
+          $dropdown.css({
+            'min-width': '210px'
+          });
+        } else if (type === 'back') {
+          $dropdown.find('.btn-foreground-color').hide();
+          $dropdown.css({
+            'min-width': '210px'
+          });
+        }
+      },
+      click: function click(event) {
+        var $button = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()(event.target);
+        var eventName = $button.data('event');
+        var value = $button.data('value');
+        var foreinput = document.getElementById('html5fcp').value;
+        var backinput = document.getElementById('html5bcp').value;
+        if (value === 'cp') {
+          event.stopPropagation();
+        } else if (value === 'cpbackColor') {
+          value = backinput;
+        } else if (value === 'cpforeColor') {
+          value = foreinput;
+        }
+        if (eventName && value) {
+          var key = eventName === 'backColor' ? 'background-color' : 'color';
+          var $color = $button.closest('.note-color').find('.note-recent-color');
+          var $currentButton = $button.closest('.note-color').find('.note-current-color-button');
+          $color.css(key, value);
+          $currentButton.attr('data-' + eventName, value);
+          if (type === 'fore') {
+            opt.itemClick('foreColor', value);
+          } else if (type === 'back') {
+            opt.itemClick('backColor', value);
+          } else {
+            opt.itemClick(eventName, value);
+          }
+        }
+      }
+    })]
+  }).render();
+};
+var dialog = renderer.create('<div class="note-modal" aria-hidden="false" tabindex="-1" role="dialog"></div>', function ($node, options) {
+  if (options.fade) {
+    $node.addClass('fade');
+  }
+  $node.attr({
+    'aria-label': options.title
+  });
+  $node.html(['<div class="note-modal-content">', options.title ? '<div class="note-modal-header"><button type="button" class="close" aria-label="Close" aria-hidden="true"><i class="note-icon-close"></i></button><h4 class="note-modal-title">' + options.title + '</h4></div>' : '', '<div class="note-modal-body">' + options.body + '</div>', options.footer ? '<div class="note-modal-footer">' + options.footer + '</div>' : '', '</div>'].join(''));
+  $node.data('modal', new js_ModalUI($node, options));
+});
+var videoDialog = function videoDialog(opt) {
+  var body = '<div class="note-form-group">' + '<label for="note-dialog-video-url-' + opt.id + '" class="note-form-label">' + opt.lang.video.url + ' <small class="text-muted">' + opt.lang.video.providers + '</small></label>' + '<input id="note-dialog-video-url-' + opt.id + '" class="note-video-url note-input" type="text"/>' + '</div>';
+  var footer = ['<button type="button" href="#" class="note-btn note-btn-primary note-video-btn disabled" disabled>', opt.lang.video.insert, '</button>'].join('');
+  return dialog({
+    title: opt.lang.video.insert,
+    fade: opt.fade,
+    body: body,
+    footer: footer
+  }).render();
+};
+var imageDialog = function imageDialog(opt) {
+  var body = '<div class="note-form-group note-group-select-from-files">' + '<label for="note-dialog-image-file-' + opt.id + '" class="note-form-label">' + opt.lang.image.selectFromFiles + '</label>' + '<input id="note-dialog-image-file-' + opt.id + '" class="note-note-image-input note-input" type="file" name="files" accept="image/*" multiple="multiple"/>' + opt.imageLimitation + '</div>' + '<div class="note-form-group">' + '<label for="note-dialog-image-url-' + opt.id + '" class="note-form-label">' + opt.lang.image.url + '</label>' + '<input id="note-dialog-image-url-' + opt.id + '" class="note-image-url note-input" type="text"/>' + '</div>';
+  var footer = ['<button href="#" type="button" class="note-btn note-btn-primary note-btn-large note-image-btn disabled" disabled>', opt.lang.image.insert, '</button>'].join('');
+  return dialog({
+    title: opt.lang.image.insert,
+    fade: opt.fade,
+    body: body,
+    footer: footer
+  }).render();
+};
+var linkDialog = function linkDialog(opt) {
+  var body = '<div class="note-form-group">' + '<label for="note-dialog-link-txt-' + opt.id + '" class="note-form-label">' + opt.lang.link.textToDisplay + '</label>' + '<input id="note-dialog-link-txt-' + opt.id + '" class="note-link-text note-input" type="text"/>' + '</div>' + '<div class="note-form-group">' + '<label for="note-dialog-link-url-' + opt.id + '" class="note-form-label">' + opt.lang.link.url + '</label>' + '<input id="note-dialog-link-url-' + opt.id + '" class="note-link-url note-input" type="text" value="http://"/>' + '</div>' + (!opt.disableLinkTarget ? '<div class="checkbox"><label for="note-dialog-link-nw-' + opt.id + '"><input id="note-dialog-link-nw-' + opt.id + '" type="checkbox" checked> ' + opt.lang.link.openInNewWindow + '</label></div>' : '');
+  var footer = ['<button href="#" type="button" class="note-btn note-btn-primary note-link-btn disabled" disabled>', opt.lang.link.insert, '</button>'].join('');
+  return dialog({
+    className: 'link-dialog',
+    title: opt.lang.link.insert,
+    fade: opt.fade,
+    body: body,
+    footer: footer
+  }).render();
+};
+var popover = renderer.create(['<div class="note-popover bottom">', '<div class="note-popover-arrow"></div>', '<div class="popover-content note-children-container"></div>', '</div>'].join(''), function ($node, options) {
+  var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';
+  $node.addClass(direction).hide();
+  if (options.hideArrow) {
+    $node.find('.note-popover-arrow').hide();
+  }
+});
+var summernote_lite_checkbox = renderer.create('<div class="checkbox"></div>', function ($node, options) {
+  $node.html(['<label' + (options.id ? ' for="note-' + options.id + '"' : '') + '>', '<input role="checkbox" type="checkbox"' + (options.id ? ' id="note-' + options.id + '"' : ''), options.checked ? ' checked' : '', ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', options.text ? options.text : '', '</label>'].join(''));
+});
+var icon = function icon(iconClassName, tagName) {
+  if (iconClassName.match(/^</)) {
+    return iconClassName;
+  }
+  tagName = tagName || 'i';
+  return '<' + tagName + ' class="' + iconClassName + '"></' + tagName + '>';
+};
+var ui = function ui(editorOptions) {
+  return {
+    editor: editor,
+    toolbar: toolbar,
+    editingArea: editingArea,
+    codable: codable,
+    editable: editable,
+    statusbar: statusbar,
+    airEditor: airEditor,
+    airEditable: airEditable,
+    buttonGroup: buttonGroup,
+    button: summernote_lite_button,
+    dropdown: dropdown,
+    dropdownCheck: dropdownCheck,
+    dropdownButton: dropdownButton,
+    dropdownButtonContents: dropdownButtonContents,
+    dropdownCheckButton: dropdownCheckButton,
+    paragraphDropdownButton: paragraphDropdownButton,
+    tableDropdownButton: tableDropdownButton,
+    colorDropdownButton: colorDropdownButton,
+    palette: palette,
+    dialog: dialog,
+    videoDialog: videoDialog,
+    imageDialog: imageDialog,
+    linkDialog: linkDialog,
+    popover: popover,
+    checkbox: summernote_lite_checkbox,
+    icon: icon,
+    options: editorOptions,
+    toggleBtn: function toggleBtn($btn, isEnable) {
+      $btn.toggleClass('disabled', !isEnable);
+      $btn.attr('disabled', !isEnable);
+    },
+    toggleBtnActive: function toggleBtnActive($btn, isActive) {
+      $btn.toggleClass('active', isActive);
+    },
+    check: function check($dom, value) {
+      $dom.find('.checked').removeClass('checked');
+      $dom.find('[data-value="' + value + '"]').addClass('checked');
+    },
+    onDialogShown: function onDialogShown($dialog, handler) {
+      $dialog.one('note.modal.show', handler);
+    },
+    onDialogHidden: function onDialogHidden($dialog, handler) {
+      $dialog.one('note.modal.hide', handler);
+    },
+    showDialog: function showDialog($dialog) {
+      $dialog.data('modal').show();
+    },
+    hideDialog: function hideDialog($dialog) {
+      $dialog.data('modal').hide();
+    },
+    /**
+     * get popover content area
+     *
+     * @param $popover
+     * @returns {*}
+     */
+    getPopoverContent: function getPopoverContent($popover) {
+      return $popover.find('.note-popover-content');
+    },
+    /**
+     * get dialog's body area
+     *
+     * @param $dialog
+     * @returns {*}
+     */
+    getDialogBody: function getDialogBody($dialog) {
+      return $dialog.find('.note-modal-body');
+    },
+    createLayout: function createLayout($note) {
+      var $editor = (editorOptions.airMode ? airEditor([editingArea([codable(), airEditable()])]) : editorOptions.toolbarPosition === 'bottom' ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()]) : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])).render();
+      $editor.insertAfter($note);
+      return {
+        note: $note,
+        editor: $editor,
+        toolbar: $editor.find('.note-toolbar'),
+        editingArea: $editor.find('.note-editing-area'),
+        editable: $editor.find('.note-editable'),
+        codable: $editor.find('.note-codable'),
+        statusbar: $editor.find('.note-statusbar')
+      };
+    },
+    removeLayout: function removeLayout($note, layoutInfo) {
+      $note.html(layoutInfo.editable.html());
+      layoutInfo.editor.remove();
+      $note.off('summernote'); // remove summernote custom event
+      $note.show();
+    }
+  };
+};
+(external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote = external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default().extend((external_root_jQuery_commonjs_jquery_commonjs2_jquery_amd_jquery_default()).summernote, {
+  ui_template: ui,
+  "interface": 'lite'
+});
+/******/       return __webpack_exports__;
+/******/ })()
+;
+});
+//# sourceMappingURL=summernote-lite.js.map
\ No newline at end of file
diff --git a/erp24/web/js/summernote-lite.js.map b/erp24/web/js/summernote-lite.js.map
new file mode 100644 (file)
index 0000000..6e8a759
--- /dev/null
@@ -0,0 +1 @@
+{"version":3,"file":"summernote-lite.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///./src/lang/summernote-en-US.js","webpack:///external umd {\"root\":\"jQuery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\"}","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/js/core/env.js","webpack:///./src/js/core/func.js","webpack:///./src/js/core/lists.js","webpack:///./src/js/core/dom.js","webpack:///./src/js/Context.js","webpack:///./src/js/summernote.js","webpack:///./src/js/core/range.js","webpack:///./src/js/core/key.js","webpack:///./src/js/core/async.js","webpack:///./src/js/editing/History.js","webpack:///./src/js/editing/Style.js","webpack:///./src/js/editing/Bullet.js","webpack:///./src/js/editing/Typing.js","webpack:///./src/js/editing/Table.js","webpack:///./src/js/module/Editor.js","webpack:///./src/js/module/Clipboard.js","webpack:///./src/js/module/Dropzone.js","webpack:///./src/js/module/Codeview.js","webpack:///./src/js/module/Statusbar.js","webpack:///./src/js/module/Fullscreen.js","webpack:///./src/js/module/Handle.js","webpack:///./src/js/module/AutoLink.js","webpack:///./src/js/module/AutoSync.js","webpack:///./src/js/module/AutoReplace.js","webpack:///./src/js/module/Placeholder.js","webpack:///./src/js/module/Buttons.js","webpack:///./src/js/module/Toolbar.js","webpack:///./src/js/module/LinkDialog.js","webpack:///./src/js/module/LinkPopover.js","webpack:///./src/js/module/ImageDialog.js","webpack:///./src/js/module/ImagePopover.js","webpack:///./src/js/module/TablePopover.js","webpack:///./src/js/module/VideoDialog.js","webpack:///./src/js/module/HelpDialog.js","webpack:///./src/js/module/AirPopover.js","webpack:///./src/js/module/HintPopover.js","webpack:///./src/js/settings.js","webpack:///./src/js/renderer.js","webpack:///./src/styles/lite/js/TooltipUI.js","webpack:///./src/styles/lite/js/DropdownUI.js","webpack:///./src/styles/lite/js/ModalUI.js","webpack:///./src/styles/lite/summernote-lite.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, (__WEBPACK_EXTERNAL_MODULE__8938__) => {\nreturn ","import $ from 'jquery';\n\n$.summernote = $.summernote || {\n  lang: {},\n};\n\n$.extend(true, $.summernote.lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit',\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original',\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Google Drive, Vimeo, Vine, Instagram, DailyMotion, Youku, Peertube)',\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window',\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table',\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule',\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6',\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list',\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View',\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full',\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select',\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys',\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog',\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo',\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters',\n    },\n    output: {\n      noSelection: 'No Selection Made!',\n    },\n  },\n});\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8938__;","// 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](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\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};","// 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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import $ from 'jquery';\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nconst genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n\nfunction validFontName(fontName) {\n  return ($.inArray(fontName.toLowerCase(), genericFontFamilies) === -1) ? `'${fontName}'` : fontName;\n}\n\nfunction createIsFontInstalledFunc() {\n  const testText = \"mw\";\n  const fontSize = \"20px\";\n  const canvasWidth = 40;\n  const canvasHeight = 20;\n\n  var canvas = document.createElement(\"canvas\");\n  var context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  canvas.width = canvasWidth;\n  canvas.height = canvasHeight;\n  context.textAlign = \"center\";\n  context.fillStyle = \"black\";\n  context.textBaseline = \"middle\";\n\n  function getPxInfo(font, testFontName) {\n    context.clearRect(0, 0, canvasWidth, canvasHeight);\n    context.font = fontSize + ' ' + validFontName(font) + ', \"' + testFontName + '\"';\n    context.fillText(testText, canvasWidth / 2, canvasHeight / 2);\n    // Get pixel information\n    var pxInfo = context.getImageData(0, 0, canvasWidth, canvasHeight).data;\n    return pxInfo.join(\"\");\n  }\n\n  return (fontName) => {\n    const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n    let testInfo = getPxInfo(testFontName, testFontName);\n    let fontInfo = getPxInfo(fontName, testFontName);\n    return testInfo !== fontInfo;\n  };\n}\n\nconst userAgent = navigator.userAgent;\nconst isMSIE = /MSIE|Trident/i.test(userAgent);\nlet browserVersion;\nif (isMSIE) {\n  let matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\n\nconst isEdge = /Edge\\/\\d+/.test(userAgent);\n\nconst isSupportTouch =\n  (('ontouchstart' in window) ||\n   (navigator.MaxTouchPoints > 0) ||\n   (navigator.msMaxTouchPoints > 0));\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nconst inputEventName = (isMSIE) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\nexport default {\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE,\n  isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && (!/chrome/i.test(userAgent)),\n  browserVersion,\n  isSupportTouch,\n  isFontInstalled: createIsFontInstalledFunc(),\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName,\n  genericFontFamilies,\n  validFontName,\n};\n","import $ from 'jquery';\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n  return function(itemB) {\n    return itemA === itemB;\n  };\n}\n\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\n\nfunction peq2(propName) {\n  return function(itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\n\nfunction ok() {\n  return true;\n}\n\nfunction fail() {\n  return false;\n}\n\nfunction not(f) {\n  return function() {\n    return !f.apply(f, arguments);\n  };\n}\n\nfunction and(fA, fB) {\n  return function(item) {\n    return fA(item) && fB(item);\n  };\n}\n\nfunction self(a) {\n  return a;\n}\n\nfunction invoke(obj, method) {\n  return function() {\n    return obj[method].apply(obj, arguments);\n  };\n}\n\nlet idCounter = 0;\n\n/**\n * reset globally-unique id\n *\n */\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n  const id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n  const $document = $(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top,\n  };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n  const inverted = {};\n  for (const key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n  return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function(name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n  let timeout;\n  return function() {\n    const context = this;\n    const args = arguments;\n    const later = () => {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    const callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\nfunction isValidUrl(url) {\n  const expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n\nexport default {\n  eq,\n  eq2,\n  peq2,\n  ok,\n  fail,\n  self,\n  not,\n  and,\n  invoke,\n  resetUniqueId,\n  uniqueId,\n  rect2bnd,\n  invertObject,\n  namespaceToCamel,\n  debounce,\n  isValidUrl,\n};\n","import func from './func';\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n  return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n  return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n  return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    const item = array[idx];\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction all(array, pred) {\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n  return false;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function(memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n  const result = [];\n  const length = collection.length;\n  let idx = -1;\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n  return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n  return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n  if (!array.length) { return []; }\n  const aTail = tail(array);\n  return aTail.reduce(function(memo, v) {\n    const aLast = last(memo);\n    if (fn(last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n    return memo;\n  }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n  const aResult = [];\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) { aResult.push(array[idx]); }\n  }\n  return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n  const results = [];\n\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n\n  return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n  if (array && array.length && item) {\n    const idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n  return null;\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    const idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n  return null;\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\nexport default {\n  head,\n  last,\n  initial,\n  tail,\n  prev,\n  next,\n  find,\n  contains,\n  all,\n  sum,\n  from,\n  isEmpty,\n  clusterBy,\n  compact,\n  unique,\n};\n","import $ from 'jquery';\nimport func from './func';\nimport lists from './lists';\nimport env from './env';\n\nconst NBSP_CHAR = String.fromCharCode(160);\nconst ZERO_WIDTH_NBSP_CHAR = '\\ufeff';\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n  return node && $(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n  return node && $(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function(node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  }\n\n  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nconst isPre = makePredByNodeName('PRE');\n\nconst isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\n\nconst isTable = makePredByNodeName('TABLE');\n\nconst isData = makePredByNodeName('DATA');\n\nfunction isInline(node) {\n  return !isBodyContainer(node) &&\n         !isList(node) &&\n         !isHr(node) &&\n         !isPara(node) &&\n         !isTable(node) &&\n         !isBlockquote(node) &&\n         !isData(node);\n}\n\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nconst isHr = makePredByNodeName('HR');\n\nfunction isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nconst isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n  return isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nconst isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n  return isInline(node) && !!ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n  return isInline(node) && !ancestor(node, isPara);\n}\n\nconst isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB ||\n         nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n\n  const siblings = [];\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n  siblings.push(node);\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n  return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\nconst blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n\n  if (node) {\n    return node.childNodes.length;\n  }\n\n  return 0;\n}\n\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while ((node = node.firstElementChild));\n\n  return isEmpty(node);\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEmpty(node) {\n  const len = nodeLength(node);\n\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) { return node; }\n    if (isEditable(node)) { break; }\n\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n\n  while (node) {\n    if (nodeLength(node) !== 1) { break; }\n    if (pred(node)) { return node; }\n    if (isEditable(node)) { break; }\n\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n\n  const ancestors = [];\n  ancestor(node, function(el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n\n    return pred(el);\n  });\n  return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n  const ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n  const ancestors = listAncestor(nodeA);\n  for (let n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n  return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n\n  const nodes = [];\n  while (node) {\n    if (pred(node)) { break; }\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n\n  const nodes = [];\n  while (node) {\n    if (pred(node)) { break; }\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n  const descendants = [];\n  pred = pred || func.ok;\n\n  // start DFS(depth first search) with node\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n    for (let idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n\n  return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n  const parent = node.parentNode;\n  const wrapper = $('<' + wrapperName + '>')[0];\n\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n\n  return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n  const next = preceding.nextSibling;\n  let parent = preceding.parentNode;\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n  return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild, isSkipPaddingBlankHTML) {\n  $.each(aChild, function(idx, child) {\n    // special case: appending a pure UL/OL to a LI element creates inaccessible LI element\n    // e.g. press enter in last LI which has UL/OL-subelements\n    // Therefore, if current node is LI element with no child nodes (text-node) and appending a list, add a br before\n    if (!isSkipPaddingBlankHTML && isLi(node) && node.firstChild === null && isList(child)) {\n      node.appendChild(create(\"br\"));\n    }\n\n    node.appendChild(child);\n  });\n  return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (position(node) !== 0) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n  while (node && node !== ancestor) {\n    if (position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n  let offset = 0;\n  while ((node = node.previousSibling)) {\n    offset += 1;\n  }\n  return offset;\n}\n\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n  let node;\n  let offset;\n\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n\n  return {\n    node: node,\n    offset: offset,\n  };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n  let node, offset;\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    let nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n\n  return {\n    node: node,\n    offset: offset,\n  };\n}\n\n/**\n * Find next boundaryPoint for preorder / depth first traversal of the DOM\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  let node, offset = 0;\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = position(point.node) + 1;\n\n    // if parent node is editable,  return current node's sibling node.\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n\n  return {\n    node: node,\n    offset: offset,\n  };\n}\n\n/*\n* returns the next Text node index or 0 if not found.\n*/\nfunction getNextTextNode(actual) {\n  if(!actual.nextSibling) return undefined;\n  if(actual.parent !== actual.nextSibling.parent) return undefined;\n\n  if(isText(actual.nextSibling) ) return actual.nextSibling;\n  else return getNextTextNode(actual.nextSibling);\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {\n    return true;\n  }\n\n  const leftNode = point.node.childNodes[point.offset - 1];\n  const rightNode = point.node.childNodes[point.offset];\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode)) || isTable(rightNode)) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = prevPoint(point);\n  }\n\n  return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = nextPoint(point);\n  }\n\n  return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  const ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && (ch !== ' ' && ch !== NBSP_CHAR);\n}\n\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  const ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n\n/**\n * @method walkPoint - preorder / depth first traversal of the DOM\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  let point = startPoint;\n\n  while (point && point.node) {\n    handler(point);\n\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n\n    const isSkipOffset = isSkipInnerOffset &&\n                       startPoint.node !== point.node &&\n                       endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n  const ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n  let current = ancestor;\n  for (let i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n  return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n  let isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  const isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  }\n\n  // edge case\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  }\n\n  // split #text\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    const childNode = point.node.childNodes[point.offset];\n    let childNodes = listNext(childNode);\n\n    const clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, childNodes);\n\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n\n    if (isDiscardEmptySplits) {\n      if (isEmpty(point.node)) {\n        remove(point.node);\n      }\n      if (isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n\n    return clone;\n  }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  let ancestors = listAncestor(point.node, func.eq(root));\n\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n  // Filter elements with sibling elements\n  if (ancestors.length > 2) {\n    let domList = ancestors.slice(0, ancestors.length - 1);\n    let ifHasNextSibling = domList.find(item => item.nextSibling);\n    if (ifHasNextSibling && point.offset != 0 && isRightEdgePoint(point)) {\n      let nestSibling = ifHasNextSibling.nextSibling;\n      let textNode;\n      if (nestSibling.nodeType == 1) {\n        textNode = nestSibling.childNodes[0];\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0,\n        };\n      }\n      else if (nestSibling.nodeType == 3 && !nestSibling.data.match(/[\\n\\r]/g)) {\n        textNode = nestSibling;\n        ancestors = listAncestor(textNode, func.eq(root));\n        point = {\n          node: textNode,\n          offset: 0,\n        };\n      }\n    }\n  }\n  return ancestors.reduce(function(node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n\n    return splitNode({\n      node: parent,\n      offset: node ? position(node) : nodeLength(parent),\n    }, options);\n  });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  const pred = isInline ? isPara : isBodyContainer;\n  const ancestors = listAncestor(point.node, pred);\n  const topAncestor = lists.last(ancestors) || point.node;\n\n  let splitRoot, container;\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  }\n\n  // if splitRoot is exists, split with splitTree\n  let pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline,\n  });\n\n  // if container is point.node, find pivot with point.offset\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n\n  return {\n    rightNode: pivot,\n    container: container,\n  };\n}\n\nfunction create(nodeName) {\n  return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) { return; }\n  if (node.removeNode) { return node.removeNode(isRemoveChild); }\n\n  const parent = node.parentNode;\n  if (!isRemoveChild) {\n    const nodes = [];\n    for (let i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n\n    for (let i = 0, len = nodes.length; i < len; i++) {\n      parent.insertBefore(nodes[i], node);\n    }\n  }\n\n  parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n\n    const parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n\n  const newNode = create(nodeName);\n\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n\n  return newNode;\n}\n\nconst isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n  const val = isTextarea($node[0]) ? $node.val() : $node.html();\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n  return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n  let markup = value($node);\n\n  if (isNewlineOnBlock) {\n    const regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function(match, endSlash, name) {\n      name = name.toUpperCase();\n      const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&\n                                   !!endSlash;\n      const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n\n      return match + ((isEndOfInlineContainer || isBlockNode) ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n\n  return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n  const $placeholder = $(placeholder);\n  const pos = $placeholder.offset();\n  const height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height,\n  };\n}\n\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function(key) {\n    $node.on(key, events[key]);\n  });\n}\n\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function(key) {\n    $node.off(key, events[key]);\n  });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\nexport default {\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR,\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR,\n  /** @property {String} blank */\n  blank: blankHTML,\n  /** @property {String} emptyPara */\n  emptyPara: `<p>${blankHTML}</p>`,\n  makePredByNodeName,\n  isEditable,\n  isControlSizing,\n  isText,\n  isElement,\n  isVoid,\n  isPara,\n  isPurePara,\n  isHeading,\n  isInline,\n  isBlock: func.not(isInline),\n  isBodyInline,\n  isBody,\n  isParaInline,\n  isPre,\n  isList,\n  isTable,\n  isData,\n  isCell,\n  isBlockquote,\n  isBodyContainer,\n  isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea,\n  deepestChildIsEmpty,\n  isEmpty,\n  isEmptyAnchor: func.and(isAnchor, isEmpty),\n  isClosestSibling,\n  withClosestSiblings,\n  nodeLength,\n  isLeftEdgePoint,\n  isRightEdgePoint,\n  isEdgePoint,\n  isLeftEdgeOf,\n  isRightEdgeOf,\n  isLeftEdgePointOf,\n  isRightEdgePointOf,\n  prevPoint,\n  nextPoint,\n  nextPointWithEmptyNode,\n  isSamePoint,\n  isVisiblePoint,\n  prevPointUntil,\n  nextPointUntil,\n  isCharPoint,\n  isSpacePoint,\n  walkPoint,\n  ancestor,\n  singleChildAncestor,\n  listAncestor,\n  lastAncestor,\n  listNext,\n  listPrev,\n  listDescendant,\n  commonAncestor,\n  wrap,\n  insertAfter,\n  appendChildNodes,\n  position,\n  hasChildren,\n  makeOffsetPath,\n  fromOffsetPath,\n  splitTree,\n  splitPoint,\n  create,\n  createText,\n  remove,\n  removeWhile,\n  replace,\n  html,\n  value,\n  posFromPlaceholder,\n  attachEvents,\n  detachEvents,\n  isCustomStyleTag,\n};\n","import $ from 'jquery';\nimport func from './core/func';\nimport lists from './core/lists';\nimport dom from './core/dom';\n\nexport default class Context {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  constructor($note, options) {\n    this.$note = $note;\n\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = $.extend(true, {}, options);\n\n    // init ui with options\n    $.summernote.ui = $.summernote.ui_template(this.options);\n    this.ui = $.summernote.ui;\n\n    this.initialize();\n  }\n\n  /**\n   * create layout and initialize modules and other resources\n   */\n  initialize() {\n    this.layoutInfo = this.ui.createLayout(this.$note);\n    this._initialize();\n    this.$note.hide();\n    return this;\n  }\n\n  /**\n   * destroy modules and other resources and remove layout\n   */\n  destroy() {\n    this._destroy();\n    this.$note.removeData('summernote');\n    this.ui.removeLayout(this.$note, this.layoutInfo);\n  }\n\n  /**\n   * destory modules and other resources and initialize it again\n   */\n  reset() {\n    const disabled = this.isDisabled();\n    this.code(dom.emptyPara);\n    this._destroy();\n    this._initialize();\n\n    if (disabled) {\n      this.disable();\n    }\n  }\n\n  _initialize() {\n    // set own id\n    this.options.id = func.uniqueId($.now());\n    // set default container for tooltips, popovers, and dialogs\n    this.options.container = this.options.container || this.layoutInfo.editor;\n\n    // add optional buttons\n    const buttons = $.extend({}, this.options.buttons);\n    Object.keys(buttons).forEach((key) => {\n      this.memo('button.' + key, buttons[key]);\n    });\n\n    const modules = $.extend({}, this.options.modules, $.summernote.plugins || {});\n\n    // add and initialize modules\n    Object.keys(modules).forEach((key) => {\n      this.module(key, modules[key], true);\n    });\n\n    Object.keys(this.modules).forEach((key) => {\n      this.initializeModule(key);\n    });\n  }\n\n  _destroy() {\n    // destroy modules with reversed order\n    Object.keys(this.modules)\n      .reverse()\n      .forEach((key) => {\n        this.removeModule(key);\n      });\n\n    Object.keys(this.memos).forEach((key) => {\n      this.removeMemo(key);\n    });\n    // trigger custom onDestroy callback\n    this.triggerEvent('destroy', this);\n  }\n\n  code(html) {\n    const isActivated = this.invoke('codeview.isActivated');\n\n    if (html === undefined) {\n      this.invoke('codeview.sync');\n      return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n    } else {\n      if (isActivated) {\n        this.invoke('codeview.sync', html);\n      } else {\n        this.layoutInfo.editable.html(html);\n      }\n      this.$note.val(html);\n      this.triggerEvent('change', html, this.layoutInfo.editable);\n    }\n  }\n\n  isDisabled() {\n    return this.layoutInfo.editable.attr('contenteditable') === 'false';\n  }\n\n  enable() {\n    this.layoutInfo.editable.attr('contenteditable', true);\n    this.invoke('toolbar.activate', true);\n    this.triggerEvent('disable', false);\n    this.options.editing = true;\n  }\n\n  disable() {\n    // close codeview if codeview is opend\n    if (this.invoke('codeview.isActivated')) {\n      this.invoke('codeview.deactivate');\n    }\n    this.layoutInfo.editable.attr('contenteditable', false);\n    this.options.editing = false;\n    this.invoke('toolbar.deactivate', true);\n\n    this.triggerEvent('disable', true);\n  }\n\n  triggerEvent() {\n    const namespace = lists.head(arguments);\n    const args = lists.tail(lists.from(arguments));\n\n    const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n    if (callback) {\n      callback.apply(this.$note[0], args);\n    }\n    this.$note.trigger('summernote.' + namespace, args);\n  }\n\n  initializeModule(key) {\n    const module = this.modules[key];\n    module.shouldInitialize = module.shouldInitialize || func.ok;\n    if (!module.shouldInitialize()) {\n      return;\n    }\n\n    // initialize module\n    if (module.initialize) {\n      module.initialize();\n    }\n\n    // attach events\n    if (module.events) {\n      dom.attachEvents(this.$note, module.events);\n    }\n  }\n\n  module(key, ModuleClass, withoutIntialize) {\n    if (arguments.length === 1) {\n      return this.modules[key];\n    }\n\n    this.modules[key] = new ModuleClass(this);\n\n    if (!withoutIntialize) {\n      this.initializeModule(key);\n    }\n  }\n\n  removeModule(key) {\n    const module = this.modules[key];\n    if (module.shouldInitialize()) {\n      if (module.events) {\n        dom.detachEvents(this.$note, module.events);\n      }\n\n      if (module.destroy) {\n        module.destroy();\n      }\n    }\n\n    delete this.modules[key];\n  }\n\n  memo(key, obj) {\n    if (arguments.length === 1) {\n      return this.memos[key];\n    }\n    this.memos[key] = obj;\n  }\n\n  removeMemo(key) {\n    if (this.memos[key] && this.memos[key].destroy) {\n      this.memos[key].destroy();\n    }\n\n    delete this.memos[key];\n  }\n\n  /**\n   * Some buttons need to change their visual style immediately once they get pressed\n   */\n  createInvokeHandlerAndUpdateState(namespace, value) {\n    return (event) => {\n      this.createInvokeHandler(namespace, value)(event);\n      this.invoke('buttons.updateCurrentStyle');\n    };\n  }\n\n  createInvokeHandler(namespace, value) {\n    return (event) => {\n      event.preventDefault();\n      const $target = $(event.target);\n      this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n    };\n  }\n\n  invoke() {\n    const namespace = lists.head(arguments);\n    const args = lists.tail(lists.from(arguments));\n\n    const splits = namespace.split('.');\n    const hasSeparator = splits.length > 1;\n    const moduleName = hasSeparator && lists.head(splits);\n    const methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n\n    const module = this.modules[moduleName || 'editor'];\n    if (!moduleName && this[methodName]) {\n      return this[methodName].apply(this, args);\n    } else if (module && module[methodName] && module.shouldInitialize()) {\n      return module[methodName].apply(module, args);\n    }\n  }\n}\n","import $ from 'jquery';\nimport env from './core/env';\nimport lists from './core/lists';\nimport Context from './Context';\n\n$.fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function() {\n    const type = typeof(lists.head(arguments));\n    const isExternalAPICalled = type === 'string';\n    const hasInitOptions = type === 'object';\n\n    const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n    // Update options\n    options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);\n    options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n\n    this.each((idx, note) => {\n      const $note = $(note);\n      if (!$note.data('summernote')) {\n        const context = new Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n\n    const $note = this.first();\n    if ($note.length) {\n      const context = $note.data('summernote');\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n\n    return this;\n  },\n});\n","import $ from 'jquery';\nimport env from './env';\nimport func from './func';\nimport lists from './lists';\nimport dom from './dom';\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n  let container = textRange.parentElement();\n  let offset;\n\n  const tester = document.body.createTextRange();\n  let prevContainer;\n  const childNodes = lists.from(container.childNodes);\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n    tester.moveToElementText(childNodes[offset]);\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n    prevContainer = childNodes[offset];\n  }\n\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    const textRangeStart = document.body.createTextRange();\n    let curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n\n    const pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    let textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    // [workaround] enforce IE to re-reference curTextNode, hack\n    const dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&\n      textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    container = curTextNode;\n    offset = textCount;\n  }\n\n  return {\n    cont: container,\n    offset: offset,\n  };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n  const textRangeInfo = function(container, offset) {\n    let node, isCollapseToStart;\n\n    if (dom.isText(container)) {\n      const prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      const prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n\n      offset = 0;\n      isCollapseToStart = false;\n    }\n\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset,\n    };\n  };\n\n  const textRange = document.body.createTextRange();\n  const info = textRangeInfo(point.node, point.offset);\n\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\nclass WrappedRange {\n  constructor(sc, so, ec, eo) {\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo;\n\n    // isOnEditable: judge whether range is on editable or not\n    this.isOnEditable = this.makeIsOn(dom.isEditable);\n    // isOnList: judge whether range is on list node or not\n    this.isOnList = this.makeIsOn(dom.isList);\n    // isOnAnchor: judge whether range is on anchor node or not\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n    // isOnCell: judge whether range is on cell node or not\n    this.isOnCell = this.makeIsOn(dom.isCell);\n    // isOnData: judge whether range is on data node or not\n    this.isOnData = this.makeIsOn(dom.isData);\n  }\n\n  // nativeRange: get nativeRange from sc, so, ec, eo\n  nativeRange() {\n    if (env.isW3CRangeSupport) {\n      const w3cRange = document.createRange();\n      w3cRange.setStart(this.sc, this.so);\n      w3cRange.setEnd(this.ec, this.eo);\n\n      return w3cRange;\n    } else {\n      const textRange = pointToTextRange({\n        node: this.sc,\n        offset: this.so,\n      });\n\n      textRange.setEndPoint('EndToEnd', pointToTextRange({\n        node: this.ec,\n        offset: this.eo,\n      }));\n\n      return textRange;\n    }\n  }\n\n  getPoints() {\n    return {\n      sc: this.sc,\n      so: this.so,\n      ec: this.ec,\n      eo: this.eo,\n    };\n  }\n\n  getStartPoint() {\n    return {\n      node: this.sc,\n      offset: this.so,\n    };\n  }\n\n  getEndPoint() {\n    return {\n      node: this.ec,\n      offset: this.eo,\n    };\n  }\n\n  /**\n   * select update visible range\n   */\n  select() {\n    const nativeRng = this.nativeRange();\n    if (env.isW3CRangeSupport) {\n      const selection = document.getSelection();\n      if (selection.rangeCount > 0) {\n        selection.removeAllRanges();\n      }\n      selection.addRange(nativeRng);\n    } else {\n      nativeRng.select();\n    }\n\n    return this;\n  }\n\n  /**\n   * Moves the scrollbar to start container(sc) of current range\n   *\n   * @return {WrappedRange}\n   */\n  scrollIntoView(container) {\n    const height = $(container).height();\n    if (container.scrollTop + height < this.sc.offsetTop) {\n      container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n    }\n\n    return this;\n  }\n\n  /**\n   * @return {WrappedRange}\n   */\n  normalize() {\n    /**\n     * @param {BoundaryPoint} point\n     * @param {Boolean} isLeftToRight - true: prefer to choose right node\n     *                                - false: prefer to choose left node\n     * @return {BoundaryPoint}\n     */\n    const getVisiblePoint = function(point, isLeftToRight) {\n      if (!point) {\n        return point;\n      }\n\n      // Just use the given point [XXX:Adhoc]\n      //  - case 01. if the point is on the middle of the node\n      //  - case 02. if the point is on the right edge and prefer to choose left node\n      //  - case 03. if the point is on the left edge and prefer to choose right node\n      //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n      //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n      //  - case 06. if the point is on the block node and there is no children\n      if (dom.isVisiblePoint(point)) {\n        if (!dom.isEdgePoint(point) ||\n            (dom.isRightEdgePoint(point) && !isLeftToRight) ||\n            (dom.isLeftEdgePoint(point) && isLeftToRight) ||\n            (dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling)) ||\n            (dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling)) ||\n            (dom.isBlock(point.node) && dom.isEmpty(point.node))) {\n          return point;\n        }\n      }\n\n      // point on block's edge\n      const block = dom.ancestor(point.node, dom.isBlock);\n      let hasRightNode = false;\n\n      if (!hasRightNode) {\n        const prevPoint = dom.prevPoint(point) || { node: null };\n        hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n      }\n\n      let hasLeftNode = false;\n      if (!hasLeftNode) {\n        const nextPoint = dom.nextPoint(point) || { node: null };\n        hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(nextPoint.node)) && isLeftToRight;\n      }\n\n      if (hasRightNode || hasLeftNode) {\n        // returns point already on visible point\n        if (dom.isVisiblePoint(point)) {\n          return point;\n        }\n        // reverse direction\n        isLeftToRight = !isLeftToRight;\n      }\n\n      const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint)\n        : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n      return nextPoint || point;\n    };\n\n    const endPoint = getVisiblePoint(this.getEndPoint(), false);\n    const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n\n    return new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * returns matched nodes on range\n   *\n   * @param {Function} [pred] - predicate function\n   * @param {Object} [options]\n   * @param {Boolean} [options.includeAncestor]\n   * @param {Boolean} [options.fullyContains]\n   * @return {Node[]}\n   */\n  nodes(pred, options) {\n    pred = pred || func.ok;\n\n    const includeAncestor = options && options.includeAncestor;\n    const fullyContains = options && options.fullyContains;\n\n    // TODO compare points and sort\n    const startPoint = this.getStartPoint();\n    const endPoint = this.getEndPoint();\n\n    const nodes = [];\n    const leftEdgeNodes = [];\n\n    dom.walkPoint(startPoint, endPoint, function(point) {\n      if (dom.isEditable(point.node)) {\n        return;\n      }\n\n      let node;\n      if (fullyContains) {\n        if (dom.isLeftEdgePoint(point)) {\n          leftEdgeNodes.push(point.node);\n        }\n        if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n          node = point.node;\n        }\n      } else if (includeAncestor) {\n        node = dom.ancestor(point.node, pred);\n      } else {\n        node = point.node;\n      }\n\n      if (node && pred(node)) {\n        nodes.push(node);\n      }\n    }, true);\n\n    return lists.unique(nodes);\n  }\n\n  /**\n   * returns commonAncestor of range\n   * @return {Element} - commonAncestor\n   */\n  commonAncestor() {\n    return dom.commonAncestor(this.sc, this.ec);\n  }\n\n  /**\n   * returns expanded range by pred\n   *\n   * @param {Function} pred - predicate function\n   * @return {WrappedRange}\n   */\n  expand(pred) {\n    const startAncestor = dom.ancestor(this.sc, pred);\n    const endAncestor = dom.ancestor(this.ec, pred);\n\n    if (!startAncestor && !endAncestor) {\n      return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n    }\n\n    const boundaryPoints = this.getPoints();\n\n    if (startAncestor) {\n      boundaryPoints.sc = startAncestor;\n      boundaryPoints.so = 0;\n    }\n\n    if (endAncestor) {\n      boundaryPoints.ec = endAncestor;\n      boundaryPoints.eo = dom.nodeLength(endAncestor);\n    }\n\n    return new WrappedRange(\n      boundaryPoints.sc,\n      boundaryPoints.so,\n      boundaryPoints.ec,\n      boundaryPoints.eo\n    );\n  }\n\n  /**\n   * @param {Boolean} isCollapseToStart\n   * @return {WrappedRange}\n   */\n  collapse(isCollapseToStart) {\n    if (isCollapseToStart) {\n      return new WrappedRange(this.sc, this.so, this.sc, this.so);\n    } else {\n      return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n    }\n  }\n\n  /**\n   * splitText on range\n   */\n  splitText() {\n    const isSameContainer = this.sc === this.ec;\n    const boundaryPoints = this.getPoints();\n\n    if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n      this.ec.splitText(this.eo);\n    }\n\n    if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n      boundaryPoints.sc = this.sc.splitText(this.so);\n      boundaryPoints.so = 0;\n\n      if (isSameContainer) {\n        boundaryPoints.ec = boundaryPoints.sc;\n        boundaryPoints.eo = this.eo - this.so;\n      }\n    }\n\n    return new WrappedRange(\n      boundaryPoints.sc,\n      boundaryPoints.so,\n      boundaryPoints.ec,\n      boundaryPoints.eo\n    );\n  }\n\n  /**\n   * delete contents on range\n   * @return {WrappedRange}\n   */\n  deleteContents() {\n    if (this.isCollapsed()) {\n      return this;\n    }\n\n    const rng = this.splitText();\n    const nodes = rng.nodes(null, {\n      fullyContains: true,\n    });\n\n    // find new cursor point\n    const point = dom.prevPointUntil(rng.getStartPoint(), function(point) {\n      return !lists.contains(nodes, point.node);\n    });\n\n    const emptyParents = [];\n    $.each(nodes, function(idx, node) {\n      // find empty parents\n      const parent = node.parentNode;\n      if (point.node !== parent && dom.nodeLength(parent) === 1) {\n        emptyParents.push(parent);\n      }\n      dom.remove(node, false);\n    });\n\n    // remove empty parents\n    $.each(emptyParents, function(idx, node) {\n      dom.remove(node, false);\n    });\n\n    return new WrappedRange(\n      point.node,\n      point.offset,\n      point.node,\n      point.offset\n    ).normalize();\n  }\n\n  /**\n   * makeIsOn: return isOn(pred) function\n   */\n  makeIsOn(pred) {\n    return function() {\n      const ancestor = dom.ancestor(this.sc, pred);\n      return !!ancestor && (ancestor === dom.ancestor(this.ec, pred));\n    };\n  }\n\n  /**\n   * @param {Function} pred\n   * @return {Boolean}\n   */\n  isLeftEdgeOf(pred) {\n    if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n      return false;\n    }\n\n    const node = dom.ancestor(this.sc, pred);\n    return node && dom.isLeftEdgeOf(this.sc, node);\n  }\n\n  /**\n   * returns whether range was collapsed or not\n   */\n  isCollapsed() {\n    return this.sc === this.ec && this.so === this.eo;\n  }\n\n  /**\n   * wrap inline nodes which children of body with paragraph\n   *\n   * @return {WrappedRange}\n   */\n  wrapBodyInlineWithPara() {\n    if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n      this.sc.innerHTML = dom.emptyPara;\n      return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n    }\n\n    /**\n     * [workaround] firefox often create range on not visible point. so normalize here.\n     *  - firefox: |<p>text</p>|\n     *  - chrome: <p>|text|</p>\n     */\n    const rng = this.normalize();\n    if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n      return rng;\n    }\n\n    // find inline top ancestor\n    let topAncestor;\n    if (dom.isInline(rng.sc)) {\n      const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n      topAncestor = lists.last(ancestors);\n      if (!dom.isInline(topAncestor)) {\n        topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n      }\n    } else {\n      topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n    }\n\n    if (topAncestor) {\n      // siblings not in paragraph\n      let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n      inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n      // wrap with paragraph\n      if (inlineSiblings.length) {\n        const para = dom.wrap(lists.head(inlineSiblings), 'p');\n        dom.appendChildNodes(para, lists.tail(inlineSiblings));\n      }\n    }\n\n    return this.normalize();\n  }\n\n  /**\n   * insert node at current cursor\n   *\n   * @param {Node} node\n   * @param {Boolean} doNotInsertPara - default is false, removes added <p> that's added if true\n   * @return {Node}\n   */\n  insertNode(node, doNotInsertPara = false) {\n    let rng = this;\n\n    if (dom.isText(node) || dom.isInline(node)) {\n      rng = this.wrapBodyInlineWithPara().deleteContents();\n    }\n\n    const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n    if (info.rightNode) {\n      info.rightNode.parentNode.insertBefore(node, info.rightNode);\n      if (dom.isEmpty(info.rightNode) && (doNotInsertPara || dom.isPara(node))) {\n        info.rightNode.parentNode.removeChild(info.rightNode);\n      }\n    } else {\n      info.container.appendChild(node);\n    }\n\n    return node;\n  }\n\n  /**\n   * insert html at current cursor\n   */\n  pasteHTML(markup) {\n    markup = ((markup || '') + '').trim(markup);\n\n    const contentsContainer = $('<div></div>').html(markup)[0];\n    let childNodes = lists.from(contentsContainer.childNodes);\n\n    // const rng = this.wrapBodyInlineWithPara().deleteContents();\n    const rng = this;\n    let reversed = false;\n\n    if (rng.so >= 0) {\n      childNodes = childNodes.reverse();\n      reversed = true;\n    }\n\n    childNodes = childNodes.map(function(childNode) {\n      return rng.insertNode(childNode, !dom.isInline(childNode));\n    });\n\n    if (reversed) {\n      childNodes = childNodes.reverse();\n    }\n    return childNodes;\n  }\n\n  /**\n   * returns text in range\n   *\n   * @return {String}\n   */\n  toString() {\n    const nativeRng = this.nativeRange();\n    return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n  }\n\n  /**\n   * returns range for word before cursor\n   *\n   * @param {Boolean} [findAfter] - find after cursor, default: false\n   * @return {WrappedRange}\n   */\n  getWordRange(findAfter) {\n    let endPoint = this.getEndPoint();\n\n    if (!dom.isCharPoint(endPoint)) {\n      return this;\n    }\n\n    const startPoint = dom.prevPointUntil(endPoint, function(point) {\n      return !dom.isCharPoint(point);\n    });\n\n    if (findAfter) {\n      endPoint = dom.nextPointUntil(endPoint, function(point) {\n        return !dom.isCharPoint(point);\n      });\n    }\n\n    return new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * returns range for words before cursor\n   *\n   * @param {Boolean} [findAfter] - find after cursor, default: false\n   * @return {WrappedRange}\n   */\n  getWordsRange(findAfter) {\n    var endPoint = this.getEndPoint();\n\n    var isNotTextPoint = function(point) {\n      return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n    };\n\n    if (isNotTextPoint(endPoint)) {\n      return this;\n    }\n\n    var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n\n    if (findAfter) {\n      endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n    }\n\n    return new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * returns range for words before cursor that match with a Regex\n   *\n   * example:\n   *  range: 'hi @Peter Pan'\n   *  regex: '/@[a-z ]+/i'\n   *  return range: '@Peter Pan'\n   *\n   * @param {RegExp} [regex]\n   * @return {WrappedRange|null}\n   */\n  getWordsMatchRange(regex) {\n    var endPoint = this.getEndPoint();\n\n    var startPoint = dom.prevPointUntil(endPoint, function(point) {\n      if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n        return true;\n      }\n      var rng = new WrappedRange(\n        point.node,\n        point.offset,\n        endPoint.node,\n        endPoint.offset\n      );\n      var result = regex.exec(rng.toString());\n      return result && result.index === 0;\n    });\n\n    var rng = new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n\n    var text = rng.toString();\n    var result = regex.exec(text);\n\n    if (result && result[0].length === text.length) {\n      return rng;\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * create offsetPath bookmark\n   *\n   * @param {Node} editable\n   */\n  bookmark(editable) {\n    return {\n      s: {\n        path: dom.makeOffsetPath(editable, this.sc),\n        offset: this.so,\n      },\n      e: {\n        path: dom.makeOffsetPath(editable, this.ec),\n        offset: this.eo,\n      },\n    };\n  }\n\n  /**\n   * create offsetPath bookmark base on paragraph\n   *\n   * @param {Node[]} paras\n   */\n  paraBookmark(paras) {\n    return {\n      s: {\n        path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n        offset: this.so,\n      },\n      e: {\n        path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n        offset: this.eo,\n      },\n    };\n  }\n\n  /**\n   * getClientRects\n   * @return {Rect[]}\n   */\n  getClientRects() {\n    const nativeRng = this.nativeRange();\n    return nativeRng.getClientRects();\n  }\n}\n\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\nexport default {\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) { // collapsed\n      ec = sc;\n      eo = so;\n      return new WrappedRange(sc, so, ec, eo);\n    } else {\n      let wrappedRange = this.createFromSelection();\n\n      if (!wrappedRange && arguments.length === 1) {\n        let bodyElement = arguments[0];\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n      return wrappedRange;\n    }\n  },\n\n  createFromBodyElement: function(bodyElement, isCollapseToStart = false) {\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n\n  createFromSelection: function() {\n    let sc, so, ec, eo;\n    if (env.isW3CRangeSupport) {\n      const selection = document.getSelection();\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n\n      const nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else { // IE8: TextRange\n      const textRange = document.selection.createRange();\n      const textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      const textRangeStart = textRange;\n      textRangeStart.collapse(true);\n\n      let startPoint = textRangeToPoint(textRangeStart, true);\n      let endPoint = textRangeToPoint(textRangeEnd, false);\n\n      // same visible point case: range was collapsed.\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&\n        dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&\n        endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n\n    return new WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function(node) {\n    let sc = node;\n    let so = 0;\n    let ec = node;\n    let eo = dom.nodeLength(ec);\n\n    // browsers can't target a picture or void node\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n\n    return this.create(sc, so, ec, eo);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function(node) {\n    return this.createFromNode(node).collapse();\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function(editable, bookmark) {\n    const sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    const so = bookmark.s.offset;\n    const ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    const eo = bookmark.e.offset;\n    return new WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function(bookmark, paras) {\n    const so = bookmark.s.offset;\n    const eo = bookmark.e.offset;\n    const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n\n    return new WrappedRange(sc, so, ec, eo);\n  },\n};\n","import lists from './lists';\nimport func from './func';\n\nconst KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34,\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\nexport default {\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: (keyCode) => {\n    return lists.contains([\n      KEY_MAP.BACKSPACE,\n      KEY_MAP.TAB,\n      KEY_MAP.ENTER,\n      KEY_MAP.SPACE,\n      KEY_MAP.DELETE,\n    ], keyCode);\n  },\n  /**\n   * @method isRemove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isRemove: (keyCode) => { // LB\n    return lists.contains([\n      KEY_MAP.BACKSPACE,\n      KEY_MAP.DELETE,\n    ], keyCode);\n  },\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: (keyCode) => {\n    return lists.contains([\n      KEY_MAP.LEFT,\n      KEY_MAP.UP,\n      KEY_MAP.RIGHT,\n      KEY_MAP.DOWN,\n    ], keyCode);\n  },\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: (keyCode) => {\n    return lists.contains([\n      KEY_MAP.HOME,\n      KEY_MAP.END,\n      KEY_MAP.PAGEUP,\n      KEY_MAP.PAGEDOWN,\n    ], keyCode);\n  },\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP,\n};\n","import $ from 'jquery';\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nexport function readFileAsDataURL(file) {\n  return $.Deferred((deferred) => {\n    $.extend(new FileReader(), {\n      onload: (event) => {\n        const dataURL = event.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: (err) => {\n        deferred.reject(err);\n      },\n    }).readAsDataURL(file);\n  }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nexport function createImage(url) {\n  return $.Deferred((deferred) => {\n    const $img = $('<img>');\n\n    $img.one('load', () => {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', () => {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none',\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n","import range from '../core/range';\n\nexport default class History {\n  constructor(context) {\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n\n  makeSnapshot() {\n    const rng = range.create(this.editable);\n    const emptyBookmark = { s: { path: [], offset: 0 }, e: { path: [], offset: 0 } };\n\n    return {\n      contents: this.$editable.html(),\n      bookmark: ((rng && rng.isOnEditable()) ? rng.bookmark(this.editable) : emptyBookmark),\n    };\n  }\n\n  applySnapshot(snapshot) {\n    if (snapshot.contents !== null) {\n      this.$editable.html(snapshot.contents);\n    }\n    if (snapshot.bookmark !== null) {\n      range.createFromBookmark(this.editable, snapshot.bookmark).select();\n    }\n  }\n\n  /**\n  * @method rewind\n  * Rewinds the history stack back to the first snapshot taken.\n  * Leaves the stack intact, so that \"Redo\" can still be used.\n  */\n  rewind() {\n    // Create snap shot if not yet recorded\n    if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n      this.recordUndo();\n    }\n\n    // Return to the first available snapshot.\n    this.stackOffset = 0;\n\n    // Apply that snapshot.\n    this.applySnapshot(this.stack[this.stackOffset]);\n  }\n\n  /**\n  *  @method commit\n  *  Resets history stack, but keeps current editor's content.\n  */\n  commit() {\n    // Clear the stack.\n    this.stack = [];\n\n    // Restore stackOffset to its original value.\n    this.stackOffset = -1;\n\n    // Record our first snapshot (of nothing).\n    this.recordUndo();\n  }\n\n  /**\n  * @method reset\n  * Resets the history stack completely; reverting to an empty editor.\n  */\n  reset() {\n    // Clear the stack.\n    this.stack = [];\n\n    // Restore stackOffset to its original value.\n    this.stackOffset = -1;\n\n    // Clear the editable area.\n    this.$editable.html('');\n\n    // Record our first snapshot (of nothing).\n    this.recordUndo();\n  }\n\n  /**\n   * undo\n   */\n  undo() {\n    // Create snap shot if not yet recorded\n    if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n      this.recordUndo();\n    }\n\n    if (this.stackOffset > 0) {\n      this.stackOffset--;\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n  }\n\n  /**\n   * redo\n   */\n  redo() {\n    if (this.stack.length - 1 > this.stackOffset) {\n      this.stackOffset++;\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n  }\n\n  /**\n   * recorded undo\n   */\n  recordUndo() {\n    this.stackOffset++;\n\n    // Wash out stack after stackOffset\n    if (this.stack.length > this.stackOffset) {\n      this.stack = this.stack.slice(0, this.stackOffset);\n    }\n\n    // Create new snapshot and push it to the end\n    this.stack.push(this.makeSnapshot());\n\n    // If the stack size reachs to the limit, then slice it\n    if (this.stack.length > this.context.options.historyLimit) {\n      this.stack.shift();\n      this.stackOffset -= 1;\n    }\n  }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class Style {\n  /**\n   * @method jQueryCSS\n   *\n   * [workaround] for old jQuery\n   * passing an array of style properties to .css()\n   * will result in an object of property-value pairs.\n   * (compability with version < 1.9)\n   *\n   * @private\n   * @param  {jQuery} $obj\n   * @param  {Array} propertyNames - An array of one or more CSS properties.\n   * @return {Object}\n   */\n  jQueryCSS($obj, propertyNames) {\n    const result = {};\n    $.each(propertyNames, (idx, propertyName) => {\n      result[propertyName] = $obj.css(propertyName);\n    });\n    return result;\n  }\n\n  /**\n   * returns style object from node\n   *\n   * @param {jQuery} $node\n   * @return {Object}\n   */\n  fromNode($node) {\n    const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n    const styleInfo = this.jQueryCSS($node, properties) || {};\n\n    const fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n\n    styleInfo['font-size'] = parseInt(fontSize, 10);\n    styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n\n    return styleInfo;\n  }\n\n  /**\n   * paragraph level style\n   *\n   * @param {WrappedRange} rng\n   * @param {Object} styleInfo\n   */\n  stylePara(rng, styleInfo) {\n    $.each(rng.nodes(dom.isPara, {\n      includeAncestor: true,\n    }), (idx, para) => {\n      $(para).css(styleInfo);\n    });\n  }\n\n  /**\n   * insert and returns styleNodes on range.\n   *\n   * @param {WrappedRange} rng\n   * @param {Object} [options] - options for styleNodes\n   * @param {String} [options.nodeName] - default: `SPAN`\n   * @param {Boolean} [options.expandClosestSibling] - default: `false`\n   * @param {Boolean} [options.onlyPartialContains] - default: `false`\n   * @return {Node[]}\n   */\n  styleNodes(rng, options) {\n    rng = rng.splitText();\n\n    const nodeName = (options && options.nodeName) || 'SPAN';\n    const expandClosestSibling = !!(options && options.expandClosestSibling);\n    const onlyPartialContains = !!(options && options.onlyPartialContains);\n\n    if (rng.isCollapsed()) {\n      return [rng.insertNode(dom.create(nodeName))];\n    }\n\n    let pred = dom.makePredByNodeName(nodeName);\n    const nodes = rng.nodes(dom.isText, {\n      fullyContains: true,\n    }).map((text) => {\n      return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n    });\n\n    if (expandClosestSibling) {\n      if (onlyPartialContains) {\n        const nodesInRange = rng.nodes();\n        // compose with partial contains predication\n        pred = func.and(pred, (node) => {\n          return lists.contains(nodesInRange, node);\n        });\n      }\n\n      return nodes.map((node) => {\n        const siblings = dom.withClosestSiblings(node, pred);\n        const head = lists.head(siblings);\n        const tails = lists.tail(siblings);\n        $.each(tails, (idx, elem) => {\n          dom.appendChildNodes(head, elem.childNodes);\n          dom.remove(elem);\n        });\n        return lists.head(siblings);\n      });\n    } else {\n      return nodes;\n    }\n  }\n\n  /**\n   * get current style on cursor\n   *\n   * @param {WrappedRange} rng\n   * @return {Object} - object contains style properties.\n   */\n  current(rng) {\n    const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n    let styleInfo = this.fromNode($cont);\n\n    // document.queryCommandState for toggle state\n    // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n    try {\n      styleInfo = $.extend(styleInfo, {\n        'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n        'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n        'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n        'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n        'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n        'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n        'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'],\n      });\n    } catch (e) {\n      // eslint-disable-next-line\n    }\n\n    // list-style-type to list-style(unordered, ordered)\n    if (!rng.isOnList()) {\n      styleInfo['list-style'] = 'none';\n    } else {\n      const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n      const isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n      styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n    }\n\n    const para = dom.ancestor(rng.sc, dom.isPara);\n    if (para && para.style['line-height']) {\n      styleInfo['line-height'] = para.style.lineHeight;\n    } else {\n      const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n      styleInfo['line-height'] = lineHeight.toFixed(1);\n    }\n\n    styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n    styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n    styleInfo.range = rng;\n\n    return styleInfo;\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport func from '../core/func';\nimport dom from '../core/dom';\nimport range from '../core/range';\n\nexport default class Bullet {\n  /**\n   * toggle ordered list\n   */\n  insertOrderedList(editable) {\n    this.toggleList('OL', editable);\n  }\n\n  /**\n   * toggle unordered list\n   */\n  insertUnorderedList(editable) {\n    this.toggleList('UL', editable);\n  }\n\n  /**\n   * indent\n   */\n  indent(editable) {\n    const rng = range.create(editable).wrapBodyInlineWithPara();\n\n    const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n    const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n    $.each(clustereds, (idx, paras) => {\n      const head = lists.head(paras);\n      if (dom.isLi(head)) {\n        const previousList = this.findList(head.previousSibling);\n        if (previousList) {\n          paras.map((para) => previousList.appendChild(para));\n        } else {\n          this.wrapList(paras, head.parentNode.nodeName);\n          paras.map((para) => para.parentNode).map((para) => this.appendToPrevious(para));\n        }\n      } else {\n        $.each(paras, (idx, para) => {\n          $(para).css('marginLeft', (idx, val) => {\n            return (parseInt(val, 10) || 0) + 25;\n          });\n        });\n      }\n    });\n\n    rng.select();\n  }\n\n  /**\n   * outdent\n   */\n  outdent(editable) {\n    const rng = range.create(editable).wrapBodyInlineWithPara();\n\n    const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n    const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n    $.each(clustereds, (idx, paras) => {\n      const head = lists.head(paras);\n      if (dom.isLi(head)) {\n        this.releaseList([paras]);\n      } else {\n        $.each(paras, (idx, para) => {\n          $(para).css('marginLeft', (idx, val) => {\n            val = parseInt(val, 10) || 0;\n            return val > 25 ? val - 25 : '';\n          });\n        });\n      }\n    });\n\n    rng.select();\n  }\n\n  /**\n   * toggle list\n   *\n   * @param {String} listName - OL or UL\n   */\n  toggleList(listName, editable) {\n    const rng = range.create(editable).wrapBodyInlineWithPara();\n\n    let paras = rng.nodes(dom.isPara, { includeAncestor: true });\n    const bookmark = rng.paraBookmark(paras);\n    const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n    // paragraph to list\n    if (lists.find(paras, dom.isPurePara)) {\n      let wrappedParas = [];\n      $.each(clustereds, (idx, paras) => {\n        wrappedParas = wrappedParas.concat(this.wrapList(paras, listName));\n      });\n      paras = wrappedParas;\n      // list to paragraph or change list style\n    } else {\n      const diffLists = rng\n        .nodes(dom.isList, {\n          includeAncestor: true,\n        })\n        .filter((listNode) => {\n          return !$.nodeName(listNode, listName);\n        });\n\n      if (diffLists.length) {\n        $.each(diffLists, (idx, listNode) => {\n          dom.replace(listNode, listName);\n        });\n      } else {\n        paras = this.releaseList(clustereds, true);\n      }\n    }\n\n    range.createFromParaBookmark(bookmark, paras).select();\n  }\n\n  /**\n   * @param {Node[]} paras\n   * @param {String} listName\n   * @return {Node[]}\n   */\n  wrapList(paras, listName) {\n    const head = lists.head(paras);\n    const last = lists.last(paras);\n\n    const prevList = dom.isList(head.previousSibling) && head.previousSibling;\n    const nextList = dom.isList(last.nextSibling) && last.nextSibling;\n\n    const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n    // P to LI\n    paras = paras.map((para) => {\n      return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n    });\n\n    // append to list(<ul>, <ol>)\n    dom.appendChildNodes(listNode, paras, true);\n\n    if (nextList) {\n      dom.appendChildNodes(listNode, lists.from(nextList.childNodes), true);\n      dom.remove(nextList);\n    }\n\n    return paras;\n  }\n\n  /**\n   * @method releaseList\n   *\n   * @param {Array[]} clustereds\n   * @param {Boolean} isEscapseToBody\n   * @return {Node[]}\n   */\n  releaseList(clustereds, isEscapseToBody) {\n    let releasedParas = [];\n\n    $.each(clustereds, (idx, paras) => {\n      const head = lists.head(paras);\n      const last = lists.last(paras);\n\n      const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n      const parentItem = headList.parentNode;\n\n      if (headList.parentNode.nodeName === 'LI') {\n        paras.map((para) => {\n          const newList = this.findNextSiblings(para);\n\n          if (parentItem.nextSibling) {\n            parentItem.parentNode.insertBefore(para, parentItem.nextSibling);\n          } else {\n            parentItem.parentNode.appendChild(para);\n          }\n\n          if (newList.length) {\n            this.wrapList(newList, headList.nodeName);\n            para.appendChild(newList[0].parentNode);\n          }\n        });\n\n        if (headList.children.length === 0) {\n          parentItem.removeChild(headList);\n        }\n\n        if (parentItem.childNodes.length === 0) {\n          parentItem.parentNode.removeChild(parentItem);\n        }\n      } else {\n        const lastList =\n          headList.childNodes.length > 1\n            ? dom.splitTree(\n              headList,\n              {\n                node: last.parentNode,\n                offset: dom.position(last) + 1,\n              },\n              {\n                isSkipPaddingBlankHTML: true,\n              },\n            )\n            : null;\n\n        const middleList = dom.splitTree(\n          headList,\n          {\n            node: head.parentNode,\n            offset: dom.position(head),\n          },\n          {\n            isSkipPaddingBlankHTML: true,\n          },\n        );\n\n        paras = isEscapseToBody\n          ? dom.listDescendant(middleList, dom.isLi)\n          : lists.from(middleList.childNodes).filter(dom.isLi);\n\n        // LI to P\n        if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n          paras = paras.map((para) => {\n            return dom.replace(para, 'P');\n          });\n        }\n\n        $.each(lists.from(paras).reverse(), (idx, para) => {\n          dom.insertAfter(para, headList);\n        });\n\n        // remove empty lists\n        const rootLists = lists.compact([headList, middleList, lastList]);\n        $.each(rootLists, (idx, rootList) => {\n          const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n          $.each(listNodes.reverse(), (idx, listNode) => {\n            if (!dom.nodeLength(listNode)) {\n              dom.remove(listNode, true);\n            }\n          });\n        });\n      }\n\n      releasedParas = releasedParas.concat(paras);\n    });\n\n    return releasedParas;\n  }\n\n  /**\n   * @method appendToPrevious\n   *\n   * Appends list to previous list item, if\n   * none exist it wraps the list in a new list item.\n   *\n   * @param {HTMLNode} ListItem\n   * @return {HTMLNode}\n   */\n  appendToPrevious(node) {\n    return node.previousSibling ? dom.appendChildNodes(node.previousSibling, [node]) : this.wrapList([node], 'LI');\n  }\n\n  /**\n   * @method findList\n   *\n   * Finds an existing list in list item\n   *\n   * @param {HTMLNode} ListItem\n   * @return {Array[]}\n   */\n  findList(node) {\n    return node ? lists.find(node.children, (child) => ['OL', 'UL'].indexOf(child.nodeName) > -1) : null;\n  }\n\n  /**\n   * @method findNextSiblings\n   *\n   * Finds all list item siblings that follow it\n   *\n   * @param {HTMLNode} ListItem\n   * @return {HTMLNode}\n   */\n  findNextSiblings(node) {\n    const siblings = [];\n    while (node.nextSibling) {\n      siblings.push(node.nextSibling);\n      node = node.nextSibling;\n    }\n    return siblings;\n  }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport Bullet from '../editing/Bullet';\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nexport default class Typing {\n  constructor(context) {\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet();\n    this.options = context.options;\n  }\n\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n  insertTab(rng, tabsize) {\n    const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n    rng = rng.deleteContents();\n    rng.insertNode(tab, true);\n\n    rng = range.create(tab, tabsize);\n    rng.select();\n  }\n\n  /**\n   * insert paragraph\n   *\n   * @param {jQuery} $editable\n   * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n   *\n   * blockquoteBreakingLevel\n   *   0 - No break, the new paragraph remains inside the quote\n   *   1 - Break the first blockquote in the ancestors list\n   *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n   */\n  insertParagraph(editable, rng) {\n    rng = rng || range.create(editable);\n\n    // deleteContents on range.\n    rng = rng.deleteContents();\n\n    // Wrap range if it needs to be wrapped by paragraph\n    rng = rng.wrapBodyInlineWithPara();\n\n    // finding paragraph\n    const splitRoot = dom.ancestor(rng.sc, dom.isPara);\n\n    let nextPara;\n    // on paragraph: split paragraph\n    if (splitRoot) {\n      // if it is an empty line with li\n      if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n        // toggle UL/OL and escape\n        this.bullet.toggleList(splitRoot.parentNode.nodeName);\n        return;\n      } else {\n        let blockquote = null;\n        if (this.options.blockquoteBreakingLevel === 1) {\n          blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n        } else if (this.options.blockquoteBreakingLevel === 2) {\n          blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n        }\n\n        if (blockquote) {\n          // We're inside a blockquote and options ask us to break it\n          nextPara = $(dom.emptyPara)[0];\n          // If the split is right before a <br>, remove it so that there's no \"empty line\"\n          // after the split in the new blockquote created\n          if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n            $(rng.sc.nextSibling).remove();\n          }\n          const split = dom.splitTree(blockquote, rng.getStartPoint(), { isDiscardEmptySplits: true });\n          if (split) {\n            split.parentNode.insertBefore(nextPara, split);\n          } else {\n            dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n          }\n        } else {\n          nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n          // not a blockquote, just insert the paragraph\n          let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n          emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n\n          $.each(emptyAnchors, (idx, anchor) => {\n            dom.remove(anchor);\n          });\n\n          // replace empty heading, pre or custom-made styleTag with P tag\n          if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n            nextPara = dom.replace(nextPara, 'p');\n          }\n        }\n      }\n    // no paragraph: insert empty paragraph\n    } else {\n      const next = rng.sc.childNodes[rng.so];\n      nextPara = $(dom.emptyPara)[0];\n      if (next) {\n        rng.sc.insertBefore(nextPara, next);\n      } else {\n        rng.sc.appendChild(nextPara);\n      }\n    }\n\n    range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n  }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport lists from '../core/lists';\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nconst TableResultAction = function(startPoint, where, action, domTable) {\n  const _startPoint = { 'colPos': 0, 'rowPos': 0 };\n  const _virtualTable = [];\n  const _actionCellList = [];\n\n  /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) {\n      // Impossible to identify start Cell point\n      return;\n    }\n    _startPoint.colPos = startPoint.cellIndex;\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    const objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell,\n    };\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition,\n      },\n    };\n  }\n\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n\n    let newCellIndex = cellIndex;\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n  function addCellInfoToVirtual(row, cell) {\n    const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    const cellHasColspan = (cell.colSpan > 1);\n    const cellHasRowspan = (cell.rowSpan > 1);\n    const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos);\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n    // Add span rows to virtual Table.\n    const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n    if (rowspanNumber > 1) {\n      for (let rp = 1; rp < rowspanNumber; rp++) {\n        const rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    }\n\n    // Add span cols to virtual table.\n    const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n    if (colspanNumber > 1) {\n      for (let cp = 1; cp < colspanNumber; cp++) {\n        const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp));\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n  function createVirtualTable() {\n    const rows = domTable.rows;\n    for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      const cells = rows[rowIndex].cells;\n      for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.RemoveCell;\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.AddCell;\n  }\n\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  }\n\n  /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n  this.getActionList = function() {\n    const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1;\n    const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1;\n\n    let actualPosition = 0;\n    let canContinue = true;\n    while (canContinue) {\n      const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition;\n      const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition;\n      const row = _virtualTable[rowPosition];\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n      const cell = row[colPosition];\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      // Define action to be applied in this cell\n      let resultAction = TableResultAction.resultAction.Ignore;\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n      actualPosition++;\n    }\n\n    return _actionCellList;\n  };\n\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = { 'Row': 0, 'Column': 1 };\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = { 'Add': 0, 'Delete': 1 };\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 };\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nexport default class Table {\n  /**\n   * handle tab key\n   *\n   * @param {WrappedRange} rng\n   * @param {Boolean} isShift\n   */\n  tab(rng, isShift) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const table = dom.ancestor(cell, dom.isTable);\n    const cells = dom.listDescendant(table, dom.isCell);\n\n    const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n    if (nextCell) {\n      range.create(nextCell, 0).select();\n    }\n  }\n\n  /**\n   * Add a new row\n   *\n   * @param {WrappedRange} rng\n   * @param {String} position (top/bottom)\n   * @return {Node}\n   */\n  addRow(rng, position) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n\n    const currentTr = $(cell).closest('tr');\n    const trAttributes = this.recoverAttributes(currentTr);\n    const html = $('<tr' + trAttributes + '></tr>');\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n      TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let idCell = 0; idCell < actions.length; idCell++) {\n      const currentCell = actions[idCell];\n      const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n      switch (currentCell.action) {\n        case TableResultAction.resultAction.AddCell:\n          html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          break;\n        case TableResultAction.resultAction.SumSpanCount:\n          {\n            if (position === 'top') {\n              const baseCellTr = currentCell.baseCell.parent;\n              const isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n              if (isTopFromRowSpan) {\n                const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                html.append(newTd);\n                break;\n              }\n            }\n            let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n            rowspanNumber++;\n            currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n          }\n          break;\n      }\n    }\n\n    if (position === 'top') {\n      currentTr.before(html);\n    } else {\n      const cellHasRowspan = (cell.rowSpan > 1);\n      if (cellHasRowspan) {\n        const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n        $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html));\n        return;\n      }\n      currentTr.after(html);\n    }\n  }\n\n  /**\n   * Add a new col\n   *\n   * @param {WrappedRange} rng\n   * @param {String} position (left/right)\n   * @return {Node}\n   */\n  addCol(rng, position) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const row = $(cell).closest('tr');\n    const rowsGroup = $(row).siblings();\n    rowsGroup.push(row);\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n      TableResultAction.requestAction.Add, $(row).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n      const currentCell = actions[actionIndex];\n      const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n      switch (currentCell.action) {\n        case TableResultAction.resultAction.AddCell:\n          if (position === 'right') {\n            $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          } else {\n            $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          }\n          break;\n        case TableResultAction.resultAction.SumSpanCount:\n          if (position === 'right') {\n            let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n            colspanNumber++;\n            currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n          } else {\n            $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          }\n          break;\n      }\n    }\n  }\n\n  /*\n  * Copy attributes from element.\n  *\n  * @param {object} Element to recover attributes.\n  * @return {string} Copied string elements.\n  */\n  recoverAttributes(el) {\n    let resultStr = '';\n\n    if (!el) {\n      return resultStr;\n    }\n\n    const attrList = el.attributes || [];\n\n    for (let i = 0; i < attrList.length; i++) {\n      if (attrList[i].name.toLowerCase() === 'id') {\n        continue;\n      }\n\n      if (attrList[i].specified) {\n        resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n      }\n    }\n\n    return resultStr;\n  }\n\n  /**\n   * Delete current row\n   *\n   * @param {WrappedRange} rng\n   * @return {Node}\n   */\n  deleteRow(rng) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const row = $(cell).closest('tr');\n    const cellPos = row.children('td, th').index($(cell));\n    const rowPos = row[0].rowIndex;\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n      TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n      if (!actions[actionIndex]) {\n        continue;\n      }\n\n      const baseCell = actions[actionIndex].baseCell;\n      const virtualPosition = actions[actionIndex].virtualTable;\n      const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1);\n      let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0;\n      switch (actions[actionIndex].action) {\n        case TableResultAction.resultAction.Ignore:\n          continue;\n        case TableResultAction.resultAction.AddCell:\n          {\n            const nextRow = row.next('tr')[0];\n            if (!nextRow) { continue; }\n            const cloneRow = row[0].cells[cellPos];\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                nextRow.cells[cellPos].innerHTML = '';\n              } else if (rowspanNumber === 2) {\n                nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                nextRow.cells[cellPos].removeAttribute('rowSpan');\n                nextRow.cells[cellPos].innerHTML = '';\n              }\n            }\n          }\n          continue;\n        case TableResultAction.resultAction.SubtractSpanCount:\n          if (hasRowspan) {\n            if (rowspanNumber > 2) {\n              rowspanNumber--;\n              baseCell.setAttribute('rowSpan', rowspanNumber);\n              if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n            } else if (rowspanNumber === 2) {\n              baseCell.removeAttribute('rowSpan');\n              if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n            }\n          }\n          continue;\n        case TableResultAction.resultAction.RemoveCell:\n          // Do not need remove cell because row will be deleted.\n          continue;\n      }\n    }\n    row.remove();\n  }\n\n  /**\n   * Delete current col\n   *\n   * @param {WrappedRange} rng\n   * @return {Node}\n   */\n  deleteCol(rng) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const row = $(cell).closest('tr');\n    const cellPos = row.children('td, th').index($(cell));\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n      TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n      if (!actions[actionIndex]) {\n        continue;\n      }\n      switch (actions[actionIndex].action) {\n        case TableResultAction.resultAction.Ignore:\n          continue;\n        case TableResultAction.resultAction.SubtractSpanCount:\n          {\n            const baseCell = actions[actionIndex].baseCell;\n            const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1);\n            if (hasColspan) {\n              let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0;\n              if (colspanNumber > 2) {\n                colspanNumber--;\n                baseCell.setAttribute('colSpan', colspanNumber);\n                if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n              } else if (colspanNumber === 2) {\n                baseCell.removeAttribute('colSpan');\n                if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n              }\n            }\n          }\n          continue;\n        case TableResultAction.resultAction.RemoveCell:\n          dom.remove(actions[actionIndex].baseCell, true);\n          continue;\n      }\n    }\n  }\n\n  /**\n   * create empty table element\n   *\n   * @param {Number} rowCount\n   * @param {Number} colCount\n   * @return {Node}\n   */\n  createTable(colCount, rowCount, options) {\n    const tds = [];\n    let tdHTML;\n    for (let idxCol = 0; idxCol < colCount; idxCol++) {\n      tds.push('<td>' + dom.blank + '</td>');\n    }\n    tdHTML = tds.join('');\n\n    const trs = [];\n    let trHTML;\n    for (let idxRow = 0; idxRow < rowCount; idxRow++) {\n      trs.push('<tr>' + tdHTML + '</tr>');\n    }\n    trHTML = trs.join('');\n    const $table = $('<table>' + trHTML + '</table>');\n    if (options && options.tableClassName) {\n      $table.addClass(options.tableClassName);\n    }\n\n    return $table[0];\n  }\n\n  /**\n   * Delete current table\n   *\n   * @param {WrappedRange} rng\n   * @return {Node}\n   */\n  deleteTable(rng) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    $(cell).closest('table').remove();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport { readFileAsDataURL, createImage } from '../core/async';\nimport History from '../editing/History';\nimport Style from '../editing/Style';\nimport Typing from '../editing/Typing';\nimport Table from '../editing/Table';\nimport Bullet from '../editing/Bullet';\n\nconst KEY_BOGUS = 'bogus';\nconst MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nconst URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\n\n/**\n * @class Editor\n */\nexport default class Editor {\n  constructor(context) {\n    this.context = context;\n\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n\n    this.style = new Style();\n    this.table = new Table();\n    this.typing = new Typing(context);\n    this.bullet = new Bullet();\n    this.history = new History(context);\n\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName);\n\n    // native commands(with execCommand), generate function for execCommand\n    const commands = [\n      'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',\n      'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',\n      'formatBlock', 'removeFormat', 'backColor',\n    ];\n\n    for (let idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = ((sCmd) => {\n        return (value) => {\n          this.beforeCommand();\n          document.execCommand(sCmd, false, value);\n          this.afterCommand(true);\n        };\n      })(commands[idx]);\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n\n    this.fontName = this.wrapCommand((value) => {\n      return this.fontStyling('font-family', env.validFontName(value));\n    });\n\n    this.fontSize = this.wrapCommand((value) => {\n      const unit = this.currentStyle()['font-size-unit'];\n      return this.fontStyling('font-size', value + unit);\n    });\n\n    this.fontSizeUnit = this.wrapCommand((value) => {\n      const size = this.currentStyle()['font-size'];\n      return this.fontStyling('font-size', size + value);\n    });\n\n    for (let idx = 1; idx <= 6; idx++) {\n      this['formatH' + idx] = ((idx) => {\n        return () => {\n          this.formatBlock('H' + idx);\n        };\n      })(idx);\n      this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]);\n    }\n\n    this.insertParagraph = this.wrapCommand(() => {\n      this.typing.insertParagraph(this.editable);\n    });\n\n    this.insertOrderedList = this.wrapCommand(() => {\n      this.bullet.insertOrderedList(this.editable);\n    });\n\n    this.insertUnorderedList = this.wrapCommand(() => {\n      this.bullet.insertUnorderedList(this.editable);\n    });\n\n    this.indent = this.wrapCommand(() => {\n      this.bullet.indent(this.editable);\n    });\n\n    this.outdent = this.wrapCommand(() => {\n      this.bullet.outdent(this.editable);\n    });\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand((node) => {\n      if (this.isLimited($(node).text().length)) {\n        return;\n      }\n      const rng = this.getLastRange();\n      rng.insertNode(node);\n      this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand((text) => {\n      if (this.isLimited(text.length)) {\n        return;\n      }\n      const rng = this.getLastRange();\n      const textNode = rng.insertNode(dom.createText(text));\n      this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand((markup) => {\n      if (this.isLimited(markup.length)) {\n        return;\n      }\n      markup = this.context.invoke('codeview.purify', markup);\n      const contents = this.getLastRange().pasteHTML(markup);\n      this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand((tagName, $target) => {\n      const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle;\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock);\n      } else {\n        this.onFormatBlock(tagName, $target);\n      }\n    });\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(() => {\n      const hrNode = this.getLastRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand((value) => {\n      this.style.stylePara(this.getLastRange(), {\n        lineHeight: value,\n      });\n    });\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand((linkInfo) => {\n      let rel = [];\n      let linkUrl = linkInfo.url;\n      const linkText = linkInfo.text;\n      const isNewWindow = linkInfo.isNewWindow;\n      const addNoReferrer = this.options.linkAddNoReferrer;\n      const addNoOpener = this.options.linkAddNoOpener;\n      let rng = linkInfo.range || this.getLastRange();\n      const additionalTextLength = linkText.length - rng.toString().length;\n      if (additionalTextLength > 0 && this.isLimited(additionalTextLength)) {\n        return;\n      }\n      const isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n\n      if (this.options.onCreateLink) {\n        linkUrl = this.options.onCreateLink(linkUrl);\n      } else {\n        linkUrl = this.checkLinkUrl(linkUrl);\n      }\n\n      let anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        const anchor = rng.insertNode($('<A></A>').text(linkText)[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true,\n        });\n      }\n\n      $.each(anchors, (idx, anchor) => {\n        $(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          $(anchor).attr('target', '_blank');\n          if (addNoReferrer) {\n            rel.push('noreferrer');\n          }\n          if (addNoOpener) {\n            rel.push('noopener');\n          }\n          if (rel.length) {\n            $(anchor).attr('rel', rel.join(' '));\n          }\n        } else {\n          $(anchor).removeAttr('target');\n        }\n      });\n\n      this.setLastRange(\n        this.createRangeFromList(anchors).select()\n      );\n    });\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand((colorInfo) => {\n      const foreColor = colorInfo.foreColor;\n      const backColor = colorInfo.backColor;\n\n      if (foreColor) { document.execCommand('foreColor', false, foreColor); }\n      if (backColor) { document.execCommand('backColor', false, backColor); }\n    });\n\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n    this.foreColor = this.wrapCommand((colorInfo) => {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand((dim) => {\n      const dimension = dim.split('x');\n\n      const rng = this.getLastRange().deleteContents();\n      rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options));\n    });\n\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n    this.removeMedia = this.wrapCommand(() => {\n      let $target = $(this.restoreTarget()).parent();\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = $(this.restoreTarget()).detach();\n      }\n      \n      this.setLastRange(range.createFromSelection($target).select());\n      this.context.triggerEvent('media.delete', $target, this.$editable);\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand((value) => {\n      const $target = $(this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', (value === 'none' ? '' : value));\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand((value) => {\n      const $target = $(this.restoreTarget());\n      value = parseFloat(value);\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: '',\n        });\n      }\n    });\n  }\n\n  initialize() {\n    // bind custom events\n    this.$editable.on('keydown', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        this.context.triggerEvent('enter', event);\n      }\n      this.context.triggerEvent('keydown', event);\n\n      // keep a snapshot to limit text on input event\n      this.snapshot = this.history.makeSnapshot();\n      this.hasKeyShortCut = false;\n      if (!event.isDefaultPrevented()) {\n        if (this.options.shortcuts) {\n          this.hasKeyShortCut = this.handleKeyMap(event);\n        } else {\n          this.preventDefaultEditableShortCuts(event);\n        }\n      }\n      if (this.isLimited(1, event)) {\n        const lastRange = this.getLastRange();\n        if (lastRange.eo - lastRange.so === 0) {\n          return false;\n        }\n      }\n      this.setLastRange();\n\n      // record undo in the key event except keyMap.\n      if (this.options.recordEveryKeystroke) {\n        if (this.hasKeyShortCut === false) {\n          this.history.recordUndo();\n        }\n      }\n    }).on('keyup', (event) => {\n      this.setLastRange();\n      this.context.triggerEvent('keyup', event);\n    }).on('focus', (event) => {\n      this.setLastRange();\n      this.context.triggerEvent('focus', event);\n    }).on('blur', (event) => {\n      this.context.triggerEvent('blur', event);\n    }).on('mousedown', (event) => {\n      this.context.triggerEvent('mousedown', event);\n    }).on('mouseup', (event) => {\n      this.setLastRange();\n      this.history.recordUndo();\n      this.context.triggerEvent('mouseup', event);\n    }).on('scroll', (event) => {\n      this.context.triggerEvent('scroll', event);\n    }).on('paste', (event) => {\n      this.setLastRange();\n      this.context.triggerEvent('paste', event);\n    }).on('copy', (event) => {\n      this.context.triggerEvent('copy', event);\n    }).on('input', () => {\n      // To limit composition characters (e.g. Korean)\n      if (this.isLimited(0) && this.snapshot) {\n        this.history.applySnapshot(this.snapshot);\n      }\n    });\n\n    this.$editable.attr('spellcheck', this.options.spellCheck);\n\n    this.$editable.attr('autocorrect', this.options.spellCheck);\n\n    if (this.options.disableGrammar) {\n      this.$editable.attr('data-gramm', false);\n    }\n\n    // init content before set event\n    this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n\n    this.$editable.on(env.inputEventName, func.debounce(() => {\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }, 10));\n\n    this.$editable.on('focusin', (event) => {\n      this.context.triggerEvent('focusin', event);\n    }).on('focusout', (event) => {\n      this.context.triggerEvent('focusout', event);\n    });\n\n    if (this.options.airMode) {\n      if (this.options.overrideContextMenu) {\n        this.$editor.on('contextmenu', (event) => {\n          this.context.triggerEvent('contextmenu', event);\n          return false;\n        });\n      }\n    } else {\n      if (this.options.width) {\n        this.$editor.outerWidth(this.options.width);\n      }\n      if (this.options.height) {\n        this.$editable.outerHeight(this.options.height);\n      }\n      if (this.options.maxHeight) {\n        this.$editable.css('max-height', this.options.maxHeight);\n      }\n      if (this.options.minHeight) {\n        this.$editable.css('min-height', this.options.minHeight);\n      }\n    }\n\n    this.history.recordUndo();\n    this.setLastRange();\n  }\n\n  destroy() {\n    this.$editable.off();\n  }\n\n  handleKeyMap(event) {\n    const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n    const keys = [];\n\n    if (event.metaKey) { keys.push('CMD'); }\n    if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }\n    if (event.shiftKey) { keys.push('SHIFT'); }\n\n    const keyName = key.nameFromCode[event.keyCode];\n    if (keyName) {\n      keys.push(keyName);\n    }\n\n    const eventName = keyMap[keys.join('+')];\n\n    if (keyName === 'TAB' && !this.options.tabDisable) {\n      this.afterCommand();\n    } else if (eventName) {\n      if (this.context.invoke(eventName) !== false) {\n        event.preventDefault();\n        return true;\n      }\n    } else if (key.isEdit(event.keyCode)) {\n      if (key.isRemove(event.keyCode)) {\n        this.context.invoke('removed');\n      }\n      this.afterCommand();\n    }\n    return false;\n  }\n\n  preventDefaultEditableShortCuts(event) {\n    // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n    if ((event.ctrlKey || event.metaKey) &&\n      lists.contains([66, 73, 85], event.keyCode)) {\n      event.preventDefault();\n    }\n  }\n\n  isLimited(pad, event) {\n    pad = pad || 0;\n\n    if (typeof event !== 'undefined') {\n      if (key.isMove(event.keyCode) ||\n          key.isNavigation(event.keyCode) ||\n          (event.ctrlKey || event.metaKey) ||\n          lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n        return false;\n      }\n    }\n\n    if (this.options.maxTextLength > 0) {\n      if ((this.$editable.text().length + pad) > this.options.maxTextLength) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  checkLinkUrl(linkUrl) {\n    if (MAILTO_PATTERN.test(linkUrl)) {\n      return 'mailto://' + linkUrl;\n    } else if (TEL_PATTERN.test(linkUrl)) {\n      return 'tel://' + linkUrl;\n    } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {\n      return 'http://' + linkUrl;\n    }\n    return linkUrl;\n  }\n\n  /**\n   * create range\n   * @return {WrappedRange}\n   */\n  createRange() {\n    this.focus();\n    this.setLastRange();\n    return this.getLastRange();\n  }\n\n  /**\n   * create a new range from the list of elements\n   *\n   * @param {list} dom element list\n   * @return {WrappedRange}\n   */\n  createRangeFromList(lst) {\n    const startRange = range.createFromNodeBefore(lists.head(lst));\n    const startPoint = startRange.getStartPoint();\n    const endRange = range.createFromNodeAfter(lists.last(lst));\n    const endPoint = endRange.getEndPoint();\n\n    return range.create(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * set the last range\n   *\n   * if given rng is exist, set rng as the last range\n   * or create a new range at the end of the document\n   *\n   * @param {WrappedRange} rng\n   */\n  setLastRange(rng) {\n    if (rng) {\n      this.lastRange = rng;\n    } else {\n      this.lastRange = range.create(this.editable);\n\n      if ($(this.lastRange.sc).closest('.note-editable').length === 0) {\n        this.lastRange = range.createFromBodyElement(this.editable);\n      }\n    }\n  }\n\n  /**\n   * get the last range\n   *\n   * if there is a saved last range, return it\n   * or create a new range and return it\n   *\n   * @return {WrappedRange}\n   */\n  getLastRange() {\n    if (!this.lastRange) {\n      this.setLastRange();\n    }\n    return this.lastRange;\n  }\n\n  /**\n   * saveRange\n   *\n   * save current range\n   *\n   * @param {Boolean} [thenCollapse=false]\n   */\n  saveRange(thenCollapse) {\n    if (thenCollapse) {\n      this.getLastRange().collapse().select();\n    }\n  }\n\n  /**\n   * restoreRange\n   *\n   * restore lately range\n   */\n  restoreRange() {\n    if (this.lastRange) {\n      this.lastRange.select();\n      this.focus();\n    }\n  }\n\n  saveTarget(node) {\n    this.$editable.data('target', node);\n  }\n\n  clearTarget() {\n    this.$editable.removeData('target');\n  }\n\n  restoreTarget() {\n    return this.$editable.data('target');\n  }\n\n  /**\n   * currentStyle\n   *\n   * current style\n   * @return {Object|Boolean} unfocus\n   */\n  currentStyle() {\n    let rng = range.create();\n    if (rng) {\n      rng = rng.normalize();\n    }\n    return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n  }\n\n  /**\n   * style from node\n   *\n   * @param {jQuery} $node\n   * @return {Object}\n   */\n  styleFromNode($node) {\n    return this.style.fromNode($node);\n  }\n\n  /**\n   * undo\n   */\n  undo() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n    this.history.undo();\n    this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n  }\n\n  /*\n  * commit\n  */\n  commit() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n    this.history.commit();\n    this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n  }\n\n  /**\n   * redo\n   */\n  redo() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n    this.history.redo();\n    this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n  }\n\n  /**\n   * before command\n   */\n  beforeCommand() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n\n    // Set styleWithCSS before run a command\n    document.execCommand('styleWithCSS', false, this.options.styleWithCSS);\n\n    // keep focus on editable before command execution\n    this.focus();\n  }\n\n  /**\n   * after command\n   * @param {Boolean} isPreventTrigger\n   */\n  afterCommand(isPreventTrigger) {\n    this.normalizeContent();\n    this.history.recordUndo();\n    if (!isPreventTrigger) {\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n  }\n\n  /**\n   * handle tab key\n   */\n  tab() {\n    const rng = this.getLastRange();\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.table.tab(rng);\n    } else {\n      if (this.options.tabSize === 0) {\n        return false;\n      }\n\n      if (!this.isLimited(this.options.tabSize)) {\n        this.beforeCommand();\n        this.typing.insertTab(rng, this.options.tabSize);\n        this.afterCommand();\n      }\n    }\n  }\n\n  /**\n   * handle shift+tab key\n   */\n  untab() {\n    const rng = this.getLastRange();\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.table.tab(rng, true);\n    } else {\n      if (this.options.tabSize === 0) {\n        return false;\n      }\n    }\n  }\n\n  /**\n   * run given function between beforeCommand and afterCommand\n   */\n  wrapCommand(fn) {\n    return function() {\n      this.beforeCommand();\n      fn.apply(this, arguments);\n      this.afterCommand();\n    };\n  }\n  /**\n   * removed (function added by 1der1)\n  */\n  removed(rng, node, tagName) { // LB\n    rng = range.create();\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      node = rng.ec;\n      if( (tagName = node.tagName) &&\n\t\t\t\t(node.childElementCount === 1) &&\n\t\t\t\t(node.childNodes[0].tagName === \"BR\") ){\n\n        if(tagName === \"P\") {\n          node.remove();\n        } else if(['TH', 'TD'].indexOf(tagName) >=0) {\n          node.firstChild.remove();\n        }\n      }\n    }\n  }\n  /**\n   * insert image\n   *\n   * @param {String} src\n   * @param {String|Function} param\n   * @return {Promise}\n   */\n  insertImage(src, param) {\n    return createImage(src, param).then(($image) => {\n      this.beforeCommand();\n\n      if (typeof param === 'function') {\n        param($image);\n      } else {\n        if (typeof param === 'string') {\n          $image.attr('data-filename', param);\n        }\n        $image.css('width', Math.min(this.$editable.width(), $image.width()));\n      }\n\n      $image.show();\n      this.getLastRange().insertNode($image[0]);\n      this.setLastRange(range.createFromNodeAfter($image[0]).select());\n      this.afterCommand();\n    }).fail((e) => {\n      this.context.triggerEvent('image.upload.error', e);\n    });\n  }\n\n  /**\n   * insertImages\n   * @param {File[]} files\n   */\n  insertImagesAsDataURL(files) {\n    $.each(files, (idx, file) => {\n      const filename = file.name;\n      if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) {\n        this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError);\n      } else {\n        readFileAsDataURL(file).then((dataURL) => {\n          return this.insertImage(dataURL, filename);\n        }).fail(() => {\n          this.context.triggerEvent('image.upload.error');\n        });\n      }\n    });\n  }\n\n  /**\n   * insertImagesOrCallback\n   * @param {File[]} files\n   */\n  insertImagesOrCallback(files) {\n    const callbacks = this.options.callbacks;\n    // If onImageUpload set,\n    if (callbacks.onImageUpload) {\n      this.context.triggerEvent('image.upload', files);\n      // else insert Image as dataURL\n    } else {\n      this.insertImagesAsDataURL(files);\n    }\n  }\n\n  /**\n   * return selected plain text\n   * @return {String} text\n   */\n  getSelectedText() {\n    let rng = this.getLastRange();\n\n    // if range on anchor, expand range with anchor\n    if (rng.isOnAnchor()) {\n      rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n    }\n\n    return rng.toString();\n  }\n\n  onFormatBlock(tagName, $target) {\n    // [workaround] for MSIE, IE need `<`\n    document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);\n\n    // support custom class\n    if ($target && $target.length) {\n      // find the exact element has given tagName\n      if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n        $target = $target.find(tagName);\n      }\n\n      if ($target && $target.length) {\n        const currentRange = this.createRange();\n        const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName);\n        // remove class added for current block\n        $parent.removeClass();\n        const className = $target[0].className || '';\n        if (className) {\n          $parent.addClass(className);\n        }\n      }\n    }\n  }\n\n  formatPara() {\n    this.formatBlock('P');\n  }\n\n  fontStyling(target, value) {\n    const rng = this.getLastRange();\n\n    if (rng !== '') {\n      const spans = this.style.styleNodes(rng);\n      this.$editor.find('.note-status-output').html('');\n      $(spans).css(target, value);\n\n      // [workaround] added styled bogus span for style\n      //  - also bogus character needed for cursor position\n      if (rng.isCollapsed()) {\n        const firstSpan = lists.head(spans);\n        if (firstSpan && !dom.nodeLength(firstSpan)) {\n          firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n          range.createFromNode(firstSpan.firstChild).select();\n          this.setLastRange();\n          this.$editable.data(KEY_BOGUS, firstSpan);\n        }\n      } else {\n        rng.select();\n      }\n    } else {\n      const noteStatusOutput = $.now();\n      this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n      setTimeout(function() { $('#note-status-output-' + noteStatusOutput).remove(); }, 5000);\n    }\n  }\n\n  /**\n   * unlink\n   *\n   * @type command\n   */\n  unlink() {\n    let rng = this.getLastRange();\n    if (rng.isOnAnchor()) {\n      const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n      rng = range.createFromNode(anchor);\n      rng.select();\n      this.setLastRange();\n\n      this.beforeCommand();\n      document.execCommand('unlink');\n      this.afterCommand();\n    }\n  }\n\n  /**\n   * returns link info\n   *\n   * @return {Object}\n   * @return {WrappedRange} return.range\n   * @return {String} return.text\n   * @return {Boolean} [return.isNewWindow=true]\n   * @return {String} [return.url=\"\"]\n   */\n  getLinkInfo() {\n    if (!this.hasFocus()) {\n      this.focus();\n    }\n\n    const rng = this.getLastRange().expand(dom.isAnchor);\n    // Get the first anchor on range(for edit).\n    const $anchor = $(lists.head(rng.nodes(dom.isAnchor)));\n    const linkInfo = {\n      range: rng,\n      text: rng.toString(),\n      url: $anchor.length ? $anchor.attr('href') : '',\n    };\n\n    // When anchor exists,\n    if ($anchor.length) {\n      // Set isNewWindow by checking its target.\n      linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n    }\n\n    return linkInfo;\n  }\n\n  addRow(position) {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.addRow(rng, position);\n      this.afterCommand();\n    }\n  }\n\n  addCol(position) {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.addCol(rng, position);\n      this.afterCommand();\n    }\n  }\n\n  deleteRow() {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.deleteRow(rng);\n      this.afterCommand();\n    }\n  }\n\n  deleteCol() {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.deleteCol(rng);\n      this.afterCommand();\n    }\n  }\n\n  deleteTable() {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.deleteTable(rng);\n      this.afterCommand();\n    }\n  }\n\n  /**\n   * @param {Position} pos\n   * @param {jQuery} $target - target element\n   * @param {Boolean} [bKeepRatio] - keep ratio\n   */\n  resizeTo(pos, $target, bKeepRatio) {\n    let imageSize;\n    if (bKeepRatio) {\n      const newRatio = pos.y / pos.x;\n      const ratio = $target.data('ratio');\n      imageSize = {\n        width: ratio > newRatio ? pos.x : pos.y / ratio,\n        height: ratio > newRatio ? pos.x * ratio : pos.y,\n      };\n    } else {\n      imageSize = {\n        width: pos.x,\n        height: pos.y,\n      };\n    }\n\n    $target.css(imageSize);\n  }\n\n  /**\n   * returns whether editable area has focus or not.\n   */\n  hasFocus() {\n    return this.$editable.is(':focus');\n  }\n\n  /**\n   * set focus\n   */\n  focus() {\n    // [workaround] Screen will move when page is scolled in IE.\n    //  - do focus when not focused\n    if (!this.hasFocus()) {\n      this.$editable.trigger('focus');\n    }\n  }\n\n  /**\n   * returns whether contents is empty or not.\n   * @return {Boolean}\n   */\n  isEmpty() {\n    return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n  }\n\n  /**\n   * Removes all contents and restores the editable instance to an _emptyPara_.\n   */\n  empty() {\n    this.context.invoke('code', dom.emptyPara);\n  }\n\n  /**\n   * normalize content\n   */\n  normalizeContent() {\n    this.$editable[0].normalize();\n  }\n}\n","export default class Clipboard {\n  constructor(context) {\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n  }\n\n  initialize() {\n    this.$editable.on('paste', this.pasteByEvent.bind(this));\n  }\n\n  /**\n   * paste by clipboard event\n   *\n   * @param {Event} event\n   */\n  pasteByEvent(event) {\n\n    if (this.context.isDisabled()) {\n      return;\n    }\n    const clipboardData = event.originalEvent.clipboardData;\n\n    if (clipboardData && clipboardData.items && clipboardData.items.length) {\n      const clipboardFiles = clipboardData.files;\n      const clipboardText = clipboardData.getData('Text');\n\n      // paste img file\n      if (clipboardFiles.length > 0 && this.options.allowClipboardImagePasting) {\n        this.context.invoke('editor.insertImagesOrCallback', clipboardFiles);\n        event.preventDefault();\n      }\n\n      // paste text with maxTextLength check\n      if (clipboardText.length > 0 && this.context.invoke('editor.isLimited', clipboardText.length)) {\n        event.preventDefault();\n      }\n    } else if (window.clipboardData) {\n      // for IE\n      let text = window.clipboardData.getData('text');\n      if (this.context.invoke('editor.isLimited', text.length)) {\n        event.preventDefault();\n      }\n    }\n\n    // Call editor.afterCommand after proceeding default event handler\n    setTimeout(() => {\n      this.context.invoke('editor.afterCommand');\n    }, 10);\n  }\n}\n","import $ from 'jquery';\n\nexport default class Dropzone {\n  constructor(context) {\n    this.context = context;\n    this.$eventListener = $(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n\n    this.$dropzone = $([\n      '<div class=\"note-dropzone\">',\n        '<div class=\"note-dropzone-message\"></div>',\n      '</div>',\n    ].join('')).prependTo(this.$editor);\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  initialize() {\n    if (this.options.disableDragAndDrop) {\n      // prevent default drop event\n      this.documentEventHandlers.onDrop = (e) => {\n        e.preventDefault();\n      };\n      // do not consider outside of dropzone\n      this.$eventListener = this.$dropzone;\n      this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n    } else {\n      this.attachDragAndDropEvent();\n    }\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  attachDragAndDropEvent() {\n    let collection = $();\n    const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n    this.documentEventHandlers.onDragenter = (e) => {\n      const isCodeview = this.context.invoke('codeview.isActivated');\n      const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0;\n      if (!isCodeview && !collection.length && hasEditorSize) {\n        this.$editor.addClass('dragover');\n        this.$dropzone.width(this.$editor.width());\n        this.$dropzone.height(this.$editor.height());\n        $dropzoneMessage.text(this.lang.image.dragImageHere);\n      }\n      collection = collection.add(e.target);\n    };\n\n    this.documentEventHandlers.onDragleave = (e) => {\n      collection = collection.not(e.target);\n\n      // If nodeName is BODY, then just make it over (fix for IE)\n      if (!collection.length || e.target.nodeName === 'BODY') {\n        collection = $();\n        this.$editor.removeClass('dragover');\n      }\n    };\n\n    this.documentEventHandlers.onDrop = () => {\n      collection = $();\n      this.$editor.removeClass('dragover');\n    };\n\n    // show dropzone on dragenter when dragging a object to document\n    // -but only if the editor is visible, i.e. has a positive width and height\n    this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter)\n      .on('dragleave', this.documentEventHandlers.onDragleave)\n      .on('drop', this.documentEventHandlers.onDrop);\n\n    // change dropzone's message on hover.\n    this.$dropzone.on('dragenter', () => {\n      this.$dropzone.addClass('hover');\n      $dropzoneMessage.text(this.lang.image.dropImage);\n    }).on('dragleave', () => {\n      this.$dropzone.removeClass('hover');\n      $dropzoneMessage.text(this.lang.image.dragImageHere);\n    });\n\n    // attach dropImage\n    this.$dropzone.on('drop', (event) => {\n      const dataTransfer = event.originalEvent.dataTransfer;\n\n      // stop the browser from opening the dropped content\n      event.preventDefault();\n\n      if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n        this.$editable.trigger('focus');\n        this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n      } else {\n        $.each(dataTransfer.types, (idx, type) => {\n          // skip moz-specific types\n          if (type.toLowerCase().indexOf('_moz_') > -1) {\n            return;\n          }\n          const content = dataTransfer.getData(type);\n\n          if (type.toLowerCase().indexOf('text') > -1) {\n            this.context.invoke('editor.pasteHTML', content);\n          } else {\n            $(content).each((idx, item) => {\n              this.context.invoke('editor.insertNode', item);\n            });\n          }\n        });\n      }\n    }).on('dragover', false); // prevent default dragover event\n  }\n\n  destroy() {\n    Object.keys(this.documentEventHandlers).forEach((key) => {\n      this.$eventListener.off(key.slice(2).toLowerCase(), this.documentEventHandlers[key]);\n    });\n    this.documentEventHandlers = {};\n  }\n}\n","import dom from '../core/dom';\nimport key from '../core/key';\n\n/**\n * @class Codeview\n */\nexport default class CodeView {\n  constructor(context) {\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n\n  sync(html) {\n    const isCodeview = this.isActivated();\n    const CodeMirror = this.CodeMirrorConstructor;\n\n    if (isCodeview) {\n      if (html) {\n        if (CodeMirror) {\n          this.$codable.data('cmEditor').getDoc().setValue(html);\n        } else {\n          this.$codable.val(html);\n        }\n      } else {\n        if (CodeMirror) {\n          this.$codable.data('cmEditor').save();\n        }\n      }\n    }\n  }\n\n  initialize() {\n    this.$codable.on('keyup', (event) => {\n      if (event.keyCode === key.code.ESCAPE) {\n        this.deactivate();\n      }\n    });\n  }\n\n  /**\n   * @return {Boolean}\n   */\n  isActivated() {\n    return this.$editor.hasClass('codeview');\n  }\n\n  /**\n   * toggle codeview\n   */\n  toggle() {\n    if (this.isActivated()) {\n      this.deactivate();\n    } else {\n      this.activate();\n    }\n    this.context.triggerEvent('codeview.toggled');\n  }\n\n  /**\n   * purify input value\n   * @param value\n   * @returns {*}\n   */\n  purify(value) {\n    if (this.options.codeviewFilter) {\n      // filter code view regex\n      value = value.replace(this.options.codeviewFilterRegex, '');\n      // allow specific iframe tag\n      if (this.options.codeviewIframeFilter) {\n        const whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n        value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function(tag) {\n          // remove if src attribute is duplicated\n          if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n            return '';\n          }\n          for (const src of whitelist) {\n            // pass if src is trusted\n            if ((new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"')).test(tag)) {\n              return tag;\n            }\n          }\n          return '';\n        });\n      }\n    }\n    return value;\n  }\n\n  /**\n   * activate code view\n   */\n  activate() {\n    const CodeMirror = this.CodeMirrorConstructor;\n    this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n    this.$codable.height(this.$editable.height());\n\n    this.context.invoke('toolbar.updateCodeview', true);\n    this.context.invoke('airPopover.updateCodeview', true);\n\n    this.$editor.addClass('codeview');\n    this.$codable.trigger('focus');\n\n    // activate CodeMirror as codable\n    if (CodeMirror) {\n      const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n      // CodeMirror TernServer\n      if (this.options.codemirror.tern) {\n        const server = new CodeMirror.TernServer(this.options.codemirror.tern);\n        cmEditor.ternServer = server;\n        cmEditor.on('cursorActivity', (cm) => {\n          server.updateArgHints(cm);\n        });\n      }\n\n      cmEditor.on('blur', (event) => {\n        this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n      });\n      cmEditor.on('change', () => {\n        this.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n      });\n\n      // CodeMirror hasn't Padding.\n      cmEditor.setSize(null, this.$editable.outerHeight());\n      this.$codable.data('cmEditor', cmEditor);\n    } else {\n      this.$codable.on('blur', (event) => {\n        this.context.triggerEvent('blur.codeview', this.$codable.val(), event);\n      });\n      this.$codable.on('input', () => {\n        this.context.triggerEvent('change.codeview', this.$codable.val(), this.$codable);\n      });\n    }\n  }\n\n  /**\n   * deactivate code view\n   */\n  deactivate() {\n    const CodeMirror = this.CodeMirrorConstructor;\n    // deactivate CodeMirror as codable\n    if (CodeMirror) {\n      const cmEditor = this.$codable.data('cmEditor');\n      this.$codable.val(cmEditor.getValue());\n      cmEditor.toTextArea();\n    }\n\n    const value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n    const isChange = this.$editable.html() !== value;\n\n    this.$editable.html(value);\n    this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n    this.$editor.removeClass('codeview');\n\n    if (isChange) {\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    this.$editable.trigger('focus');\n\n    this.context.invoke('toolbar.updateCodeview', false);\n    this.context.invoke('airPopover.updateCodeview', false);\n  }\n\n  destroy() {\n    if (this.isActivated()) {\n      this.deactivate();\n    }\n  }\n}\n","import $ from 'jquery';\nconst EDITABLE_PADDING = 24;\n\nexport default class Statusbar {\n  constructor(context) {\n    this.$document = $(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n  }\n\n  initialize() {\n    if (this.options.airMode || this.options.disableResizeEditor) {\n      this.destroy();\n      return;\n    }\n\n    this.$statusbar.on('mousedown touchstart', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      const editableTop = this.$editable.offset().top - this.$document.scrollTop();\n      const editableCodeTop = this.$codable.offset().top - this.$document.scrollTop();\n\n      const onStatusbarMove = (event) => {\n        let originalEvent = (event.type == 'mousemove') ? event : event.originalEvent.touches[0];\n        let height = originalEvent.clientY - (editableTop + EDITABLE_PADDING);\n        let heightCode = originalEvent.clientY - (editableCodeTop + EDITABLE_PADDING);\n\n        height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height;\n        height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height;\n        heightCode = (this.options.minheight > 0) ? Math.max(heightCode, this.options.minheight) : heightCode;\n        heightCode = (this.options.maxHeight > 0) ? Math.min(heightCode, this.options.maxHeight) : heightCode;\n\n\n        this.$editable.height(height);\n        this.$codable.height(heightCode);\n      };\n\n      this.$document.on('mousemove touchmove', onStatusbarMove).one('mouseup touchend', () => {\n        this.$document.off('mousemove touchmove', onStatusbarMove);\n      });\n    });\n  }\n\n  destroy() {\n    this.$statusbar.off();\n    this.$statusbar.addClass('locked');\n  }\n}\n","import $ from 'jquery';\n\nexport default class Fullscreen {\n  constructor(context) {\n    this.context = context;\n\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n\n    this.$window = $(window);\n    this.$scrollbar = $('html, body');\n    this.scrollbarClassName = 'note-fullscreen-body';\n\n    this.onResize = () => {\n      this.resizeTo({\n        h: this.$window.height() - this.$toolbar.outerHeight(),\n      });\n    };\n  }\n\n  resizeTo(size) {\n    this.$editable.css('height', size.h);\n    this.$codable.css('height', size.h);\n    if (this.$codable.data('cmeditor')) {\n      this.$codable.data('cmeditor').setsize(null, size.h);\n    }\n  }\n\n  /**\n   * toggle fullscreen\n   */\n  toggle() {\n    this.$editor.toggleClass('fullscreen');\n    const isFullscreen = this.isFullscreen();\n    this.$scrollbar.toggleClass(this.scrollbarClassName, isFullscreen);\n    if (isFullscreen) {\n      this.$editable.data('orgHeight', this.$editable.css('height'));\n      this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n      this.$editable.css('maxHeight', '');\n      this.$window.on('resize', this.onResize).trigger('resize');\n    } else {\n      this.$window.off('resize', this.onResize);\n      this.resizeTo({ h: this.$editable.data('orgHeight') });\n      this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n    }\n\n    this.context.invoke('toolbar.updateFullscreen', isFullscreen);\n  }\n\n  isFullscreen() {\n    return this.$editor.hasClass('fullscreen');\n  }\n\n  destroy() {\n    this.$scrollbar.removeClass(this.scrollbarClassName);\n  }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\n\nexport default class Handle {\n  constructor(context) {\n    this.context = context;\n    this.$document = $(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n\n    this.events = {\n      'summernote.mousedown': (we, e) => {\n        if (this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => {\n        this.update();\n      },\n      'summernote.disable summernote.blur': () => {\n        this.hide();\n      },\n      'summernote.codeview.toggled': () => {\n        this.update();\n      },\n    };\n  }\n\n  initialize() {\n    this.$handle = $([\n      '<div class=\"note-handle\">',\n        '<div class=\"note-control-selection\">',\n          '<div class=\"note-control-selection-bg\"></div>',\n          '<div class=\"note-control-holder note-control-nw\"></div>',\n          '<div class=\"note-control-holder note-control-ne\"></div>',\n          '<div class=\"note-control-holder note-control-sw\"></div>',\n          '<div class=\"',\n            (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'),\n          ' note-control-se\"></div>',\n          (this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>'),\n        '</div>',\n      '</div>',\n    ].join('')).prependTo(this.$editingArea);\n\n    this.$handle.on('mousedown', (event) => {\n      if (dom.isControlSizing(event.target)) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const $target = this.$handle.find('.note-control-selection').data('target');\n        const posStart = $target.offset();\n        const scrollTop = this.$document.scrollTop();\n\n        const onMouseMove = (event) => {\n          this.context.invoke('editor.resizeTo', {\n            x: event.clientX - posStart.left,\n            y: event.clientY - (posStart.top - scrollTop),\n          }, $target, !event.shiftKey);\n\n          this.update($target[0], event);\n        };\n\n        this.$document\n          .on('mousemove', onMouseMove)\n          .one('mouseup', (e) => {\n            e.preventDefault();\n            this.$document.off('mousemove', onMouseMove);\n            this.context.invoke('editor.afterCommand');\n          });\n\n        if (!$target.data('ratio')) { // original ratio.\n          $target.data('ratio', $target.height() / $target.width());\n        }\n      }\n    });\n\n    // Listen for scrolling on the handle overlay.\n    this.$handle.on('wheel', (event) => {\n      event.preventDefault();\n      this.update();\n    });\n  }\n\n  destroy() {\n    this.$handle.remove();\n  }\n\n  update(target, event) {\n    if (this.context.isDisabled()) {\n      return false;\n    }\n\n    const isImage = dom.isImg(target);\n    const $selection = this.$handle.find('.note-control-selection');\n\n    this.context.invoke('imagePopover.update', target, event);\n\n    if (isImage) {\n      const $image = $(target);\n\n      const areaRect = this.$editingArea[0].getBoundingClientRect();\n      const imageRect = target.getBoundingClientRect();\n\n      $selection.css({\n        display: 'block',\n        left: imageRect.left - areaRect.left,\n        top: imageRect.top - areaRect.top,\n        width: imageRect.width,\n        height: imageRect.height,\n      }).data('target', $image); // save current image element.\n\n      const origImageObj = new Image();\n      origImageObj.src = $image.attr('src');\n\n      const sizingText = imageRect.width + 'x' + imageRect.height + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n      $selection.find('.note-control-selection-info').text(sizingText);\n      this.context.invoke('editor.saveTarget', target);\n    } else {\n      this.hide();\n    }\n\n    return isImage;\n  }\n\n  /**\n   * hide\n   *\n   * @param {jQuery} $handle\n   */\n  hide() {\n    this.context.invoke('editor.clearTarget');\n    this.$handle.children().hide();\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport key from '../core/key';\n\nconst defaultScheme = 'http://';\nconst linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@|xmpp:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nexport default class AutoLink {\n  constructor(context) {\n    this.context = context;\n    this.options = context.options;\n    this.$editable = context.layoutInfo.editable;\n    this.events = {\n      'summernote.keyup': (we, event) => {\n        if (!event.isDefaultPrevented()) {\n          this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': (we, event) => {\n        this.handleKeydown(event);\n      },\n    };\n  }\n\n  initialize() {\n    this.lastWordRange = null;\n  }\n\n  destroy() {\n    this.lastWordRange = null;\n  }\n\n  replace() {\n    if (!this.lastWordRange) {\n      return;\n    }\n\n    const keyword = this.lastWordRange.toString();\n    const match = keyword.match(linkPattern);\n\n    if (match && (match[1] || match[2])) {\n      const link = match[1] ? keyword : defaultScheme + keyword;\n      const urlText = this.options.showDomainOnlyForAutolink ?\n        keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:xmpp?:?)?(?:www\\.)?/i, '').split('/')[0]\n        : keyword;\n      const node = $('<a></a>').html(urlText).attr('href', link)[0];\n      if (this.context.options.linkTargetBlank) {\n        $(node).attr('target', '_blank');\n      }\n\n      this.lastWordRange.insertNode(node);\n      this.lastWordRange = null;\n      this.context.invoke('editor.focus');\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n  }\n\n  handleKeydown(event) {\n    if (lists.contains([key.code.ENTER, key.code.SPACE], event.keyCode)) {\n      const wordRange = this.context.invoke('editor.createRange').getWordRange();\n      this.lastWordRange = wordRange;\n    }\n  }\n\n  handleKeyup(event) {\n    if (key.code.SPACE === event.keyCode || (key.code.ENTER === event.keyCode && !event.shiftKey)) {\n      this.replace();\n    }\n  }\n}\n","import dom from '../core/dom';\n\n/**\n * textarea auto sync.\n */\nexport default class AutoSync {\n  constructor(context) {\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': () => {\n        this.$note.val(context.invoke('code'));\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return dom.isTextarea(this.$note[0]);\n  }\n}\n","import lists from '../core/lists';\nimport dom from '../core/dom';\nimport key from '../core/key';\n\nexport default class AutoReplace {\n  constructor(context) {\n    this.context = context;\n    this.options = context.options.replace || {};\n\n    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];\n    this.previousKeydownCode = null;\n\n    this.events = {\n      'summernote.keyup': (we, event) => {\n        if (!event.isDefaultPrevented()) {\n          this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': (we, event) => {\n        this.handleKeydown(event);\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !!this.options.match;\n  }\n\n  initialize() {\n    this.lastWord = null;\n  }\n\n  destroy() {\n    this.lastWord = null;\n  }\n\n  replace() {\n    if (!this.lastWord) {\n      return;\n    }\n\n    const self = this;\n    const keyword = this.lastWord.toString();\n    this.options.match(keyword, function(match) {\n      if (match) {\n        let node = '';\n\n        if (typeof match === 'string') {\n          node = dom.createText(match);\n        } else if (match instanceof jQuery) {\n          node = match[0];\n        } else if (match instanceof Node) {\n          node = match;\n        }\n\n        if (!node) return;\n        self.lastWord.insertNode(node);\n        self.lastWord = null;\n        self.context.invoke('editor.focus');\n      }\n    });\n  }\n\n  handleKeydown(event) {\n    // this forces it to remember the last whole word, even if multiple termination keys are pressed\n    // before the previous key is let go.\n    if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n      this.previousKeydownCode = event.keyCode;\n      return;\n    }\n\n    if (lists.contains(this.keys, event.keyCode)) {\n      const wordRange = this.context.invoke('editor.createRange').getWordRange();\n      this.lastWord = wordRange;\n    }\n    this.previousKeydownCode = event.keyCode;\n  }\n\n  handleKeyup(event) {\n    if (lists.contains(this.keys, event.keyCode)) {\n      this.replace();\n    }\n  }\n}\n","import $ from 'jquery';\nexport default class Placeholder {\n  constructor(context) {\n    this.context = context;\n\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n\n    this.events = {\n      'summernote.init summernote.change': () => {\n        this.update();\n      },\n      'summernote.codeview.toggled': () => {\n        this.update();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !!this.options.placeholder;\n  }\n\n  initialize() {\n    this.$placeholder = $('<div class=\"note-placeholder\"></div>');\n    this.$placeholder.on('click', () => {\n      this.context.invoke('focus');\n    }).html(this.options.placeholder).prependTo(this.$editingArea);\n\n    this.update();\n  }\n\n  destroy() {\n    this.$placeholder.remove();\n  }\n\n  update() {\n    const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n    this.$placeholder.toggle(isShow);\n  }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport env from '../core/env';\n\nexport default class Buttons {\n  constructor(context) {\n    this.ui = $.summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(\n      this.options.keyMap[env.isMac ? 'mac' : 'pc']\n    );\n  }\n\n  representShortcut(editorMethod) {\n    let shortcut = this.invertedKeyMap[editorMethod];\n    if (!this.options.shortcuts || !shortcut) {\n      return '';\n    }\n\n    if (env.isMac) {\n      shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n    }\n\n    shortcut = shortcut.replace('BACKSLASH', '\\\\')\n      .replace('SLASH', '/')\n      .replace('LEFTBRACKET', '[')\n      .replace('RIGHTBRACKET', ']');\n\n    return ' (' + shortcut + ')';\n  }\n\n  button(o) {\n    if (!this.options.tooltip && o.tooltip) {\n      delete o.tooltip;\n    }\n    o.container = this.options.container;\n    return this.ui.button(o);\n  }\n\n  initialize() {\n    this.addToolbarButtons();\n    this.addImagePopoverButtons();\n    this.addLinkPopoverButtons();\n    this.addTablePopoverButtons();\n    this.fontInstalledMap = {};\n  }\n\n  destroy() {\n    delete this.fontInstalledMap;\n  }\n\n  isFontInstalled(name) {\n    if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n      this.fontInstalledMap[name] = env.isFontInstalled(name) ||\n        lists.contains(this.options.fontNamesIgnoreCheck, name);\n    }\n    return this.fontInstalledMap[name];\n  }\n\n  isFontDeservedToAdd(name) {\n    name = name.toLowerCase();\n    return (name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1);\n  }\n\n  colorPalette(className, tooltip, backColor, foreColor) {\n    return this.ui.buttonGroup({\n      className: 'note-color ' + className,\n      children: [\n        this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: (event) => {\n            const $button = $(event.currentTarget);\n            if (backColor && foreColor) {\n              this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor'),\n              });\n            } else if (backColor) {\n              this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n              });\n            } else if (foreColor) {\n              this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor'),\n              });\n            }\n          },\n          callback: ($button) => {\n            const $recentColor = $button.find('.note-recent-color');\n            if (backColor) {\n              $recentColor.css('background-color', this.options.colorButton.backColor);\n              $button.attr('data-backColor', this.options.colorButton.backColor);\n            }\n            if (foreColor) {\n              $recentColor.css('color', this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          },\n        }),\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown({\n          items: (backColor ? [\n            '<div class=\"note-palette\">',\n              '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">',\n                  this.lang.color.transparent,\n                '</button>',\n              '</div>',\n              '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker-'+this.options.id+'\">',\n                  this.lang.color.cpSelect,\n                '</button>',\n                '<input type=\"color\" id=\"backColorPicker-'+this.options.id+'\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette-'+this.options.id+'\">',\n              '</div>',\n              '<div class=\"note-holder-custom\" id=\"backColorPalette-'+this.options.id+'\" data-event=\"backColor\"></div>',\n            '</div>',\n          ].join('') : '') +\n          (foreColor ? [\n            '<div class=\"note-palette\">',\n              '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n                  this.lang.color.resetToDefault,\n                '</button>',\n              '</div>',\n              '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker-'+this.options.id+'\">',\n                  this.lang.color.cpSelect,\n                '</button>',\n                '<input type=\"color\" id=\"foreColorPicker-'+this.options.id+'\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette-'+this.options.id+'\">',\n              '</div>', // Fix missing Div, Commented to find easily if it's wrong\n              '<div class=\"note-holder-custom\" id=\"foreColorPalette-'+this.options.id+'\" data-event=\"foreColor\"></div>',\n            '</div>',\n          ].join('') : ''),\n          callback: ($dropdown) => {\n            $dropdown.find('.note-holder').each((idx, item) => {\n              const $holder = $(item);\n              $holder.append(this.ui.palette({\n                colors: this.options.colors,\n                colorsName: this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: this.options.container,\n                tooltip: this.options.tooltip,\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n            var customColors = [\n              ['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF'],\n            ];\n            $dropdown.find('.note-holder-custom').each((idx, item) => {\n              const $holder = $(item);\n              $holder.append(this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: this.options.container,\n                tooltip: this.options.tooltip,\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each((idx, item) => {\n              $(item).on(\"change\", function() {\n                const $chip = $dropdown.find('#' + $(this).data('event')).find('.note-color-btn').first();\n                const color = this.value.toUpperCase();\n                $chip.css('background-color', color)\n                  .attr('aria-label', color)\n                  .attr('data-value', color)\n                  .attr('data-original-title', color);\n                $chip.trigger('click');\n              });\n            });\n          },\n          click: (event) => {\n            event.stopPropagation();\n\n            const $parent = $('.' + className).find('.note-dropdown-menu');\n            const $button = $(event.target);\n            const eventName = $button.data('event');\n            const value = $button.attr('data-value');\n\n            if (eventName === 'openPalette') {\n              const $picker = $parent.find('#' + value);\n              const $palette = $($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);\n\n              // Shift palette chips\n              const $chip = $palette.find('.note-color-btn').last().detach();\n\n              // Set chip attributes\n              const color = $picker.val();\n              $chip.css('background-color', color)\n                .attr('aria-label', color)\n                .attr('data-value', color)\n                .attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.trigger('click');\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                const key = eventName === 'backColor' ? 'background-color' : 'color';\n                const $color = $button.closest('.note-color').find('.note-recent-color');\n                const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n              this.context.invoke('editor.' + eventName, value);\n            }\n          },\n        }),\n      ],\n    }).render();\n  }\n\n  addToolbarButtons() {\n    this.context.memo('button.style', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(\n            this.ui.icon(this.options.icons.magic), this.options\n          ),\n          tooltip: this.lang.style.style,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown({\n          className: 'dropdown-style',\n          items: this.options.styleTags,\n          title: this.lang.style.style,\n          template: (item) => {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: (Object.prototype.hasOwnProperty.call(this.lang.style, item) ? this.lang.style[item] : item),\n              };\n            }\n\n            const tag = item.tag;\n            const title = item.title;\n            const style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            const className = item.className ? ' class=\"' + item.className + '\"' : '';\n\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: this.context.createInvokeHandler('editor.formatBlock'),\n        }),\n      ]).render();\n    });\n\n    for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n      const item = this.options.styleTags[styleIdx];\n\n      this.context.memo('button.style.' + item, () => {\n        return this.button({\n          className: 'note-btn-style-' + item,\n          contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n          tooltip: this.lang.style[item],\n          click: this.context.createInvokeHandler('editor.formatBlock'),\n        }).render();\n      });\n    }\n\n    this.context.memo('button.bold', () => {\n      return this.button({\n        className: 'note-btn-bold',\n        contents: this.ui.icon(this.options.icons.bold),\n        tooltip: this.lang.font.bold + this.representShortcut('bold'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.bold'),\n      }).render();\n    });\n\n    this.context.memo('button.italic', () => {\n      return this.button({\n        className: 'note-btn-italic',\n        contents: this.ui.icon(this.options.icons.italic),\n        tooltip: this.lang.font.italic + this.representShortcut('italic'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.italic'),\n      }).render();\n    });\n\n    this.context.memo('button.underline', () => {\n      return this.button({\n        className: 'note-btn-underline',\n        contents: this.ui.icon(this.options.icons.underline),\n        tooltip: this.lang.font.underline + this.representShortcut('underline'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.underline'),\n      }).render();\n    });\n\n    this.context.memo('button.clear', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.eraser),\n        tooltip: this.lang.font.clear + this.representShortcut('removeFormat'),\n        click: this.context.createInvokeHandler('editor.removeFormat'),\n      }).render();\n    });\n\n    this.context.memo('button.strikethrough', () => {\n      return this.button({\n        className: 'note-btn-strikethrough',\n        contents: this.ui.icon(this.options.icons.strikethrough),\n        tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough'),\n      }).render();\n    });\n\n    this.context.memo('button.superscript', () => {\n      return this.button({\n        className: 'note-btn-superscript',\n        contents: this.ui.icon(this.options.icons.superscript),\n        tooltip: this.lang.font.superscript,\n        click: this.context.createInvokeHandlerAndUpdateState('editor.superscript'),\n      }).render();\n    });\n\n    this.context.memo('button.subscript', () => {\n      return this.button({\n        className: 'note-btn-subscript',\n        contents: this.ui.icon(this.options.icons.subscript),\n        tooltip: this.lang.font.subscript,\n        click: this.context.createInvokeHandlerAndUpdateState('editor.subscript'),\n      }).render();\n    });\n\n    this.context.memo('button.fontname', () => {\n      const styleInfo = this.context.invoke('editor.currentStyle');\n\n      if (this.options.addDefaultFonts) {\n        // Add 'default' fonts into the fontnames array if not exist\n        $.each(styleInfo['font-family'].split(','), (idx, fontname) => {\n          fontname = fontname.trim().replace(/['\"]+/g, '');\n          if (this.isFontDeservedToAdd(fontname)) {\n            if (this.options.fontNames.indexOf(fontname) === -1) {\n              this.options.fontNames.push(fontname);\n            }\n          }\n        });\n      }\n\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(\n            '<span class=\"note-current-fontname\"></span>', this.options\n          ),\n          tooltip: this.lang.font.name,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: this.options.icons.menuCheck,\n          items: this.options.fontNames.filter(this.isFontInstalled.bind(this)),\n          title: this.lang.font.name,\n          template: (item) => {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: this.context.createInvokeHandlerAndUpdateState('editor.fontName'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.fontsize', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', this.options),\n          tooltip: this.lang.font.size,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: this.options.icons.menuCheck,\n          items: this.options.fontSizes,\n          title: this.lang.font.size,\n          click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.fontsizeunit', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', this.options),\n          tooltip: this.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: this.options.icons.menuCheck,\n          items: this.options.fontSizeUnits,\n          title: this.lang.font.sizeunit,\n          click: this.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.color', () => {\n      return this.colorPalette('note-color-all', this.lang.color.recent, true, true);\n    });\n\n    this.context.memo('button.forecolor', () => {\n      return this.colorPalette('note-color-fore', this.lang.color.foreground, false, true);\n    });\n\n    this.context.memo('button.backcolor', () => {\n      return this.colorPalette('note-color-back', this.lang.color.background, true, false);\n    });\n\n    this.context.memo('button.ul', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.unorderedlist),\n        tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'),\n        click: this.context.createInvokeHandler('editor.insertUnorderedList'),\n      }).render();\n    });\n\n    this.context.memo('button.ol', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.orderedlist),\n        tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'),\n        click: this.context.createInvokeHandler('editor.insertOrderedList'),\n      }).render();\n    });\n\n    const justifyLeft = this.button({\n      contents: this.ui.icon(this.options.icons.alignLeft),\n      tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n      click: this.context.createInvokeHandler('editor.justifyLeft'),\n    });\n\n    const justifyCenter = this.button({\n      contents: this.ui.icon(this.options.icons.alignCenter),\n      tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n      click: this.context.createInvokeHandler('editor.justifyCenter'),\n    });\n\n    const justifyRight = this.button({\n      contents: this.ui.icon(this.options.icons.alignRight),\n      tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n      click: this.context.createInvokeHandler('editor.justifyRight'),\n    });\n\n    const justifyFull = this.button({\n      contents: this.ui.icon(this.options.icons.alignJustify),\n      tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n      click: this.context.createInvokeHandler('editor.justifyFull'),\n    });\n\n    const outdent = this.button({\n      contents: this.ui.icon(this.options.icons.outdent),\n      tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n      click: this.context.createInvokeHandler('editor.outdent'),\n    });\n\n    const indent = this.button({\n      contents: this.ui.icon(this.options.icons.indent),\n      tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n      click: this.context.createInvokeHandler('editor.indent'),\n    });\n\n    this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n    this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n    this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n    this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n    this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n    this.context.memo('button.indent', func.invoke(indent, 'render'));\n\n    this.context.memo('button.paragraph', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options),\n          tooltip: this.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown([\n          this.ui.buttonGroup({\n            className: 'note-align',\n            children: [justifyLeft, justifyCenter, justifyRight, justifyFull],\n          }),\n          this.ui.buttonGroup({\n            className: 'note-list',\n            children: [outdent, indent],\n          }),\n        ]),\n      ]).render();\n    });\n\n    this.context.memo('button.height', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options),\n          tooltip: this.lang.font.height,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          items: this.options.lineHeights,\n          checkClassName: this.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: this.lang.font.height,\n          click: this.context.createInvokeHandler('editor.lineHeight'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.table', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options),\n          tooltip: this.lang.table.table,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown({\n          title: this.lang.table.table,\n          className: 'note-table',\n          items: [\n            '<div class=\"note-dimension-picker\">',\n              '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>',\n              '<div class=\"note-dimension-picker-highlighted\"></div>',\n              '<div class=\"note-dimension-picker-unhighlighted\"></div>',\n            '</div>',\n            '<div class=\"note-dimension-display\">1 x 1</div>',\n          ].join(''),\n        }),\n      ], {\n        callback: ($node) => {\n          const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n          $catcher.css({\n            width: this.options.insertTableMaxSize.col + 'em',\n            height: this.options.insertTableMaxSize.row + 'em',\n          }).on('mousedown', this.context.createInvokeHandler('editor.insertTable'))\n            .on('mousemove', this.tableMoveHandler.bind(this));\n        },\n      }).render();\n    });\n\n    this.context.memo('button.link', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.link),\n        tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'),\n        click: this.context.createInvokeHandler('linkDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.picture', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.picture),\n        tooltip: this.lang.image.image,\n        click: this.context.createInvokeHandler('imageDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.video', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.video),\n        tooltip: this.lang.video.video,\n        click: this.context.createInvokeHandler('videoDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.hr', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.minus),\n        tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'),\n        click: this.context.createInvokeHandler('editor.insertHorizontalRule'),\n      }).render();\n    });\n\n    this.context.memo('button.fullscreen', () => {\n      return this.button({\n        className: 'btn-fullscreen note-codeview-keep',\n        contents: this.ui.icon(this.options.icons.arrowsAlt),\n        tooltip: this.lang.options.fullscreen,\n        click: this.context.createInvokeHandler('fullscreen.toggle'),\n      }).render();\n    });\n\n    this.context.memo('button.codeview', () => {\n      return this.button({\n        className: 'btn-codeview note-codeview-keep',\n        contents: this.ui.icon(this.options.icons.code),\n        tooltip: this.lang.options.codeview,\n        click: this.context.createInvokeHandler('codeview.toggle'),\n      }).render();\n    });\n\n    this.context.memo('button.redo', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.redo),\n        tooltip: this.lang.history.redo + this.representShortcut('redo'),\n        click: this.context.createInvokeHandler('editor.redo'),\n      }).render();\n    });\n\n    this.context.memo('button.undo', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.undo),\n        tooltip: this.lang.history.undo + this.representShortcut('undo'),\n        click: this.context.createInvokeHandler('editor.undo'),\n      }).render();\n    });\n\n    this.context.memo('button.help', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.question),\n        tooltip: this.lang.options.help,\n        click: this.context.createInvokeHandler('helpDialog.show'),\n      }).render();\n    });\n  }\n\n  /**\n   * image: [\n   *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n   *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n   *   ['remove', ['removeMedia']],\n   * ],\n   */\n  addImagePopoverButtons() {\n    // Image Size Buttons\n    this.context.memo('button.resizeFull', () => {\n      return this.button({\n        contents: '<span class=\"note-fontsize-10\">100%</span>',\n        tooltip: this.lang.image.resizeFull,\n        click: this.context.createInvokeHandler('editor.resize', '1'),\n      }).render();\n    });\n    this.context.memo('button.resizeHalf', () => {\n      return this.button({\n        contents: '<span class=\"note-fontsize-10\">50%</span>',\n        tooltip: this.lang.image.resizeHalf,\n        click: this.context.createInvokeHandler('editor.resize', '0.5'),\n      }).render();\n    });\n    this.context.memo('button.resizeQuarter', () => {\n      return this.button({\n        contents: '<span class=\"note-fontsize-10\">25%</span>',\n        tooltip: this.lang.image.resizeQuarter,\n        click: this.context.createInvokeHandler('editor.resize', '0.25'),\n      }).render();\n    });\n    this.context.memo('button.resizeNone', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.rollback),\n        tooltip: this.lang.image.resizeNone,\n        click: this.context.createInvokeHandler('editor.resize', '0'),\n      }).render();\n    });\n\n    // Float Buttons\n    this.context.memo('button.floatLeft', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.floatLeft),\n        tooltip: this.lang.image.floatLeft,\n        click: this.context.createInvokeHandler('editor.floatMe', 'left'),\n      }).render();\n    });\n\n    this.context.memo('button.floatRight', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.floatRight),\n        tooltip: this.lang.image.floatRight,\n        click: this.context.createInvokeHandler('editor.floatMe', 'right'),\n      }).render();\n    });\n\n    this.context.memo('button.floatNone', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.rollback),\n        tooltip: this.lang.image.floatNone,\n        click: this.context.createInvokeHandler('editor.floatMe', 'none'),\n      }).render();\n    });\n\n    // Remove Buttons\n    this.context.memo('button.removeMedia', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.trash),\n        tooltip: this.lang.image.remove,\n        click: this.context.createInvokeHandler('editor.removeMedia'),\n      }).render();\n    });\n  }\n\n  addLinkPopoverButtons() {\n    this.context.memo('button.linkDialogShow', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.link),\n        tooltip: this.lang.link.edit,\n        click: this.context.createInvokeHandler('linkDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.unlink', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.unlink),\n        tooltip: this.lang.link.unlink,\n        click: this.context.createInvokeHandler('editor.unlink'),\n      }).render();\n    });\n  }\n\n  /**\n   * table : [\n   *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n   *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n   * ],\n   */\n  addTablePopoverButtons() {\n    this.context.memo('button.addRowUp', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.rowAbove),\n        tooltip: this.lang.table.addRowAbove,\n        click: this.context.createInvokeHandler('editor.addRow', 'top'),\n      }).render();\n    });\n    this.context.memo('button.addRowDown', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.rowBelow),\n        tooltip: this.lang.table.addRowBelow,\n        click: this.context.createInvokeHandler('editor.addRow', 'bottom'),\n      }).render();\n    });\n    this.context.memo('button.addColLeft', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.colBefore),\n        tooltip: this.lang.table.addColLeft,\n        click: this.context.createInvokeHandler('editor.addCol', 'left'),\n      }).render();\n    });\n    this.context.memo('button.addColRight', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.colAfter),\n        tooltip: this.lang.table.addColRight,\n        click: this.context.createInvokeHandler('editor.addCol', 'right'),\n      }).render();\n    });\n    this.context.memo('button.deleteRow', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.rowRemove),\n        tooltip: this.lang.table.delRow,\n        click: this.context.createInvokeHandler('editor.deleteRow'),\n      }).render();\n    });\n    this.context.memo('button.deleteCol', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.colRemove),\n        tooltip: this.lang.table.delCol,\n        click: this.context.createInvokeHandler('editor.deleteCol'),\n      }).render();\n    });\n    this.context.memo('button.deleteTable', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.trash),\n        tooltip: this.lang.table.delTable,\n        click: this.context.createInvokeHandler('editor.deleteTable'),\n      }).render();\n    });\n  }\n\n  build($container, groups) {\n    for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n      const group = groups[groupIdx];\n      const groupName = Array.isArray(group) ? group[0] : group;\n      const buttons = Array.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group];\n\n      const $group = this.ui.buttonGroup({\n        className: 'note-' + groupName,\n      }).render();\n\n      for (let idx = 0, len = buttons.length; idx < len; idx++) {\n        const btn = this.context.memo('button.' + buttons[idx]);\n        if (btn) {\n          $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n        }\n      }\n      $group.appendTo($container);\n    }\n  }\n\n  /**\n   * @param {jQuery} [$container]\n   */\n  updateCurrentStyle($container) {\n    const $cont = $container || this.$toolbar;\n\n    const styleInfo = this.context.invoke('editor.currentStyle');\n    this.updateBtnStates($cont, {\n      '.note-btn-bold': () => {\n        return styleInfo['font-bold'] === 'bold';\n      },\n      '.note-btn-italic': () => {\n        return styleInfo['font-italic'] === 'italic';\n      },\n      '.note-btn-underline': () => {\n        return styleInfo['font-underline'] === 'underline';\n      },\n      '.note-btn-subscript': () => {\n        return styleInfo['font-subscript'] === 'subscript';\n      },\n      '.note-btn-superscript': () => {\n        return styleInfo['font-superscript'] === 'superscript';\n      },\n      '.note-btn-strikethrough': () => {\n        return styleInfo['font-strikethrough'] === 'strikethrough';\n      },\n    });\n\n    if (styleInfo['font-family']) {\n      const fontNames = styleInfo['font-family'].split(',').map((name) => {\n        return name.replace(/[\\'\\\"]/g, '')\n          .replace(/\\s+$/, '')\n          .replace(/^\\s+/, '');\n      });\n      const fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n\n      $cont.find('.dropdown-fontname a').each((idx, item) => {\n        const $item = $(item);\n        // always compare string to avoid creating another func.\n        const isChecked = ($item.data('value') + '') === (fontName + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n    }\n\n    if (styleInfo['font-size']) {\n      const fontSize = styleInfo['font-size'];\n      $cont.find('.dropdown-fontsize a').each((idx, item) => {\n        const $item = $(item);\n        // always compare with string to avoid creating another func.\n        const isChecked = ($item.data('value') + '') === (fontSize + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-fontsize').text(fontSize);\n\n      const fontSizeUnit = styleInfo['font-size-unit'];\n      $cont.find('.dropdown-fontsizeunit a').each((idx, item) => {\n        const $item = $(item);\n        const isChecked = ($item.data('value') + '') === (fontSizeUnit + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n    }\n\n    if (styleInfo['line-height']) {\n      const lineHeight = styleInfo['line-height'];\n      $cont.find('.dropdown-line-height a').each((idx, item) => {\n        const $item = $(item);\n        // always compare with string to avoid creating another func.\n        const isChecked = ($(item).data('value') + '') === (lineHeight + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-line-height').text(lineHeight);\n    }\n  }\n\n  updateBtnStates($container, infos) {\n    $.each(infos, (selector, pred) => {\n      this.ui.toggleBtnActive($container.find(selector), pred());\n    });\n  }\n\n  tableMoveHandler(event) {\n    const PX_PER_EM = 18;\n    const $picker = $(event.target.parentNode); // target is mousecatcher\n    const $dimensionDisplay = $picker.next();\n    const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n    const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n    const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n    let posOffset;\n    // HTML5 with jQuery - e.offsetX is undefined in Firefox\n    if (event.offsetX === undefined) {\n      const posCatcher = $(event.target).offset();\n      posOffset = {\n        x: event.pageX - posCatcher.left,\n        y: event.pageY - posCatcher.top,\n      };\n    } else {\n      posOffset = {\n        x: event.offsetX,\n        y: event.offsetY,\n      };\n    }\n\n    const dim = {\n      c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n      r: Math.ceil(posOffset.y / PX_PER_EM) || 1,\n    };\n\n    $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n    $catcher.data('value', dim.c + 'x' + dim.r);\n\n    if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n      $unhighlighted.css({ width: dim.c + 1 + 'em' });\n    }\n\n    if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n      $unhighlighted.css({ height: dim.r + 1 + 'em' });\n    }\n\n    $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n  }\n}\n","import $ from 'jquery';\nexport default class Toolbar {\n  constructor(context) {\n    this.context = context;\n\n    this.$window = $(window);\n    this.$document = $(document);\n\n    this.ui = $.summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n\n  shouldInitialize() {\n    return !this.options.airMode;\n  }\n\n  initialize() {\n    this.options.toolbar = this.options.toolbar || [];\n\n    if (!this.options.toolbar.length) {\n      this.$toolbar.hide();\n    } else {\n      this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n    }\n\n    if (this.options.toolbarContainer) {\n      this.$toolbar.appendTo(this.options.toolbarContainer);\n    }\n\n    this.changeContainer(false);\n\n    this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => {\n      this.context.invoke('buttons.updateCurrentStyle');\n    });\n\n    this.context.invoke('buttons.updateCurrentStyle');\n    if (this.options.followingToolbar) {\n      this.$window.on('scroll resize', this.followScroll);\n    }\n  }\n\n  destroy() {\n    this.$toolbar.children().remove();\n\n    if (this.options.followingToolbar) {\n      this.$window.off('scroll resize', this.followScroll);\n    }\n  }\n\n  followScroll() {\n    if (this.$editor.hasClass('fullscreen')) {\n      return false;\n    }\n\n    const editorHeight = this.$editor.outerHeight();\n    const editorWidth = this.$editor.width();\n    const toolbarHeight = this.$toolbar.height();\n    const statusbarHeight = this.$statusbar.height();\n\n    // check if the web app is currently using another static bar\n    let otherBarHeight = 0;\n    if (this.options.otherStaticBar) {\n      otherBarHeight = $(this.options.otherStaticBar).outerHeight();\n    }\n\n    const currentOffset = this.$document.scrollTop();\n    const editorOffsetTop = this.$editor.offset().top;\n    const editorOffsetBottom = editorOffsetTop + editorHeight;\n    const activateOffset = editorOffsetTop - otherBarHeight;\n    const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n\n    if (!this.isFollowing &&\n      (currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom - toolbarHeight)) {\n      this.isFollowing = true;\n      this.$editable.css({\n        marginTop: this.$toolbar.outerHeight(),\n      });\n      this.$toolbar.css({\n        position: 'fixed',\n        top: otherBarHeight,\n        width: editorWidth,\n        zIndex: 1000,\n      });\n    } else if (this.isFollowing &&\n      ((currentOffset < activateOffset) || (currentOffset > deactivateOffsetBottom))) {\n      this.isFollowing = false;\n      this.$toolbar.css({\n        position: 'relative',\n        top: 0,\n        width: '100%',\n        zIndex: 'auto',\n      });\n      this.$editable.css({\n        marginTop: '',\n      });\n    }\n  }\n\n  changeContainer(isFullscreen) {\n    if (isFullscreen) {\n      this.$toolbar.prependTo(this.$editor);\n    } else {\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n    }\n    if (this.options.followingToolbar) {\n      this.followScroll();\n    }\n  }\n\n  updateFullscreen(isFullscreen) {\n    this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n\n    this.changeContainer(isFullscreen);\n  }\n\n  updateCodeview(isCodeview) {\n    this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n    if (isCodeview) {\n      this.deactivate();\n    } else {\n      this.activate();\n    }\n  }\n\n  activate(isIncludeCodeview) {\n    let $btn = this.$toolbar.find('button');\n    if (!isIncludeCodeview) {\n      $btn = $btn.not('.note-codeview-keep');\n    }\n    this.ui.toggleBtn($btn, true);\n  }\n\n  deactivate(isIncludeCodeview) {\n    let $btn = this.$toolbar.find('button');\n    if (!isIncludeCodeview) {\n      $btn = $btn.not('.note-codeview-keep');\n    }\n    this.ui.toggleBtn($btn, false);\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\n\nconst MAILTO_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst TEL_PATTERN = /^(\\+?\\d{1,3}[\\s-]?)?(\\d{1,4})[\\s-]?(\\d{1,4})[\\s-]?(\\d{1,4})$/;\nconst URL_SCHEME_PATTERN = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/;\n\nexport default class LinkDialog {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n\n  initialize() {\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<div class=\"form-group note-form-group\">',\n        `<label for=\"note-dialog-link-txt-${this.options.id}\" class=\"note-form-label\">${this.lang.link.textToDisplay}</label>`,\n        `<input id=\"note-dialog-link-txt-${this.options.id}\" class=\"note-link-text form-control note-form-control note-input\" type=\"text\"/>`,\n      '</div>',\n      '<div class=\"form-group note-form-group\">',\n        `<label for=\"note-dialog-link-url-${this.options.id}\" class=\"note-form-label\">${this.lang.link.url}</label>`,\n        `<input id=\"note-dialog-link-url-${this.options.id}\" class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\"/>`,\n      '</div>',\n      !this.options.disableLinkTarget\n        ? $('<div></div>').append(this.ui.checkbox({\n          className: 'sn-checkbox-open-in-new-window',\n          text: this.lang.link.openInNewWindow,\n          checked: true,\n        }).render()).html()\n        : '',\n    ].join('');\n\n    const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n    const footer = `<input type=\"button\" href=\"#\" class=\"${buttonClass}\" value=\"${this.lang.link.insert}\" disabled>`;\n\n    this.$dialog = this.ui.dialog({\n      className: 'link-dialog',\n      title: this.lang.link.insert,\n      fade: this.options.dialogsFade,\n      body: body,\n      footer: footer,\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  bindEnterKey($input, $btn) {\n    $input.on('keypress', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        $btn.trigger('click');\n      }\n    });\n  }\n\n  checkLinkUrl(linkUrl) {\n    if (MAILTO_PATTERN.test(linkUrl)) {\n      return 'mailto://' + linkUrl;\n    } else if (TEL_PATTERN.test(linkUrl)) {\n      return 'tel://' + linkUrl;\n    } else if (!URL_SCHEME_PATTERN.test(linkUrl)) {\n      return 'http://' + linkUrl;\n    }\n    return linkUrl;\n  }\n\n  onCheckLinkUrl($input) {\n    $input.on('blur', (event) => {\n      event.target.value =\n        event.target.value == '' ? '' : this.checkLinkUrl(event.target.value);\n    });\n  }\n\n  /**\n   * toggle update button\n   */\n  toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n    this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n  }\n\n  /**\n   * Show link dialog and set event handlers on dialog controls.\n   *\n   * @param {Object} linkInfo\n   * @return {Promise}\n   */\n  showLinkDialog(linkInfo) {\n    return $.Deferred((deferred) => {\n      const $linkText = this.$dialog.find('.note-link-text');\n      const $linkUrl = this.$dialog.find('.note-link-url');\n      const $linkBtn = this.$dialog.find('.note-link-btn');\n      const $openInNewWindow = this.$dialog\n        .find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n\n        // If no url was given and given text is valid URL then copy that into URL Field\n        if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n          linkInfo.url = this.checkLinkUrl(linkInfo.text);\n        }\n\n        $linkText.on('input paste propertychange', () => {\n          // If linktext was modified by input events,\n          // cloning text from linkUrl will be stopped.\n          let text = $linkText.val();\n          let div = document.createElement('div');\n          div.innerText = text;\n          text = div.innerHTML;\n          linkInfo.text = text;\n          this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n        }).val(linkInfo.text);\n\n        $linkUrl.on('input paste propertychange', () => {\n          // Display same text on `Text to display` as default\n          // when linktext has no text\n          if (!linkInfo.text) {\n            $linkText.val($linkUrl.val());\n          }\n          this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n        }).val(linkInfo.url);\n\n        if (!env.isSupportTouch) {\n          $linkUrl.trigger('focus');\n        }\n\n        this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n        this.bindEnterKey($linkUrl, $linkBtn);\n        this.bindEnterKey($linkText, $linkBtn);\n        this.onCheckLinkUrl($linkUrl);\n\n        const isNewWindowChecked = linkInfo.isNewWindow !== undefined\n          ? linkInfo.isNewWindow : this.context.options.linkTargetBlank;\n\n        $openInNewWindow.prop('checked', isNewWindowChecked);\n\n        $linkBtn.one('click', (event) => {\n          event.preventDefault();\n\n          deferred.resolve({\n            range: linkInfo.range,\n            url: $linkUrl.val(),\n            text: $linkText.val(),\n            isNewWindow: $openInNewWindow.is(':checked'),\n          });\n          this.ui.hideDialog(this.$dialog);\n        });\n      });\n\n      this.ui.onDialogHidden(this.$dialog, () => {\n        // detach events\n        $linkText.off();\n        $linkUrl.off();\n        $linkBtn.off();\n\n        if (deferred.state() === 'pending') {\n          deferred.reject();\n        }\n      });\n\n      this.ui.showDialog(this.$dialog);\n    }).promise();\n  }\n\n  /**\n   * @param {Object} layoutInfo\n   */\n  show() {\n    const linkInfo = this.context.invoke('editor.getLinkInfo');\n\n    this.context.invoke('editor.saveRange');\n    this.showLinkDialog(linkInfo).then((linkInfo) => {\n      this.context.invoke('editor.restoreRange');\n      this.context.invoke('editor.createLink', linkInfo);\n    }).fail(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class LinkPopover {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => {\n        this.update();\n      },\n      'summernote.disable summernote.dialog.shown': () => {\n        this.hide();\n      },\n      'summernote.blur': (we, event) => {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            this.hide();\n          }\n        } else {\n          this.hide();\n        }\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !lists.isEmpty(this.options.popover.link);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-link-popover',\n      callback: ($node) => {\n        const $content = $node.find('.popover-content,.note-popover-content');\n        $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n      },\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n    this.context.invoke('buttons.build', $content, this.options.popover.link);\n\n    this.$popover.on('mousedown', (event) => { event.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update() {\n    // Prevent focusing on editable when invoke('code') is executed\n    if (!this.context.invoke('editor.hasFocus')) {\n      this.hide();\n      return;\n    }\n\n    const rng = this.context.invoke('editor.getLastRange');\n    if (rng.isCollapsed() && rng.isOnAnchor()) {\n      const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n      const href = $(anchor).attr('href');\n      this.$popover.find('a').attr('href', href).text(href);\n\n      const pos = dom.posFromPlaceholder(anchor);\n      const containerOffset = $(this.options.container).offset();\n      pos.top -= containerOffset.top;\n      pos.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n      });\n    } else {\n      this.hide();\n    }\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class ImageDialog {\n  constructor(context) {\n    this.context = context;\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  initialize() {\n    let imageLimitation = '';\n    if (this.options.maximumImageFileSize) {\n      const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n      const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +\n                         ' ' + ' KMGTP'[unit] + 'B';\n      imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`;\n    }\n\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<div class=\"form-group note-form-group note-group-select-from-files\">',\n        '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>',\n        '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ',\n        ' type=\"file\" name=\"files\" accept=\"'+this.options.acceptImageFileTypes+'\" multiple=\"multiple\"/>',\n        imageLimitation,\n      '</div>',\n      '<div class=\"form-group note-group-image-url\">',\n        '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>',\n        '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>',\n      '</div>',\n    ].join('');\n    const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n    const footer = `<input type=\"button\" href=\"#\" class=\"${buttonClass}\" value=\"${this.lang.image.insert}\" disabled>`;\n\n    this.$dialog = this.ui.dialog({\n      title: this.lang.image.insert,\n      fade: this.options.dialogsFade,\n      body: body,\n      footer: footer,\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  bindEnterKey($input, $btn) {\n    $input.on('keypress', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        $btn.trigger('click');\n      }\n    });\n  }\n\n  show() {\n    this.context.invoke('editor.saveRange');\n    this.showImageDialog().then((data) => {\n      // [workaround] hide dialog before restore range for IE range focus\n      this.ui.hideDialog(this.$dialog);\n      this.context.invoke('editor.restoreRange');\n\n      if (typeof data === 'string') { // image url\n        // If onImageLinkInsert set,\n        if (this.options.callbacks.onImageLinkInsert) {\n          this.context.triggerEvent('image.link.insert', data);\n        } else {\n          this.context.invoke('editor.insertImage', data);\n        }\n      } else { // array of files\n        this.context.invoke('editor.insertImagesOrCallback', data);\n      }\n    }).fail(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n\n  /**\n   * show image dialog\n   *\n   * @param {jQuery} $dialog\n   * @return {Promise}\n   */\n  showImageDialog() {\n    return $.Deferred((deferred) => {\n      const $imageInput = this.$dialog.find('.note-image-input');\n      const $imageUrl = this.$dialog.find('.note-image-url');\n      const $imageBtn = this.$dialog.find('.note-image-btn');\n\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n\n        // Cloning imageInput to clear element.\n        $imageInput.replaceWith($imageInput.clone().on('change', (event) => {\n          deferred.resolve(event.target.files || event.target.value);\n        }).val(''));\n\n        $imageUrl.on('input paste propertychange', () => {\n          this.ui.toggleBtn($imageBtn, $imageUrl.val());\n        }).val('');\n\n        if (!env.isSupportTouch) {\n          $imageUrl.trigger('focus');\n        }\n\n        $imageBtn.on('click', (event) => {\n          event.preventDefault();\n          deferred.resolve($imageUrl.val());\n        });\n\n        this.bindEnterKey($imageUrl, $imageBtn);\n      });\n\n      this.ui.onDialogHidden(this.$dialog, () => {\n        $imageInput.off();\n        $imageUrl.off();\n        $imageBtn.off();\n\n        if (deferred.state() === 'pending') {\n          deferred.reject();\n        }\n      });\n\n      this.ui.showDialog(this.$dialog);\n    });\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nexport default class ImagePopover {\n  constructor(context) {\n    this.context = context;\n    this.ui = $.summernote.ui;\n\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n\n    this.events = {\n      'summernote.disable summernote.dialog.shown': () => {\n        this.hide();\n      },\n      'summernote.blur': (we, event) => {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            this.hide();\n          }\n        } else {\n          this.hide();\n        }\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !lists.isEmpty(this.options.popover.image);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-image-popover',\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content,.note-popover-content');\n    this.context.invoke('buttons.build', $content, this.options.popover.image);\n\n    this.$popover.on('mousedown', (event) => { event.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update(target, event) {\n    if (dom.isImg(target)) {\n      const position = $(target).offset();\n      const containerOffset = $(this.options.container).offset();\n      let pos = {};\n      if (this.options.popatmouse) {\n        pos.left = event.pageX - 20;\n        pos.top = event.pageY;\n      } else {\n        pos = position;\n      }\n      pos.top -= containerOffset.top;\n      pos.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n      });\n    } else {\n      this.hide();\n    }\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class TablePopover {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': (we, event) => {\n        this.update(event.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': () => {\n        this.update();\n      },\n      'summernote.disable summernote.dialog.shown': () => {\n        this.hide();\n      },\n      'summernote.blur': (we, event) => {\n        if (event.originalEvent && event.originalEvent.relatedTarget) {\n          if (!this.$popover[0].contains(event.originalEvent.relatedTarget)) {\n            this.hide();\n          }\n        } else {\n          this.hide();\n        }\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !lists.isEmpty(this.options.popover.table);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-table-popover',\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n    this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n    // [workaround] Disable Firefox's default table editor\n    if (env.isFF) {\n      document.execCommand('enableInlineTableEditing', false, false);\n    }\n\n    this.$popover.on('mousedown', (event) => { event.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update(target) {\n    if (this.context.isDisabled()) {\n      return false;\n    }\n\n    const isCell = dom.isCell(target) || dom.isCell(target?.parentElement);\n\n    if (isCell) {\n      const pos = dom.posFromPlaceholder(target);\n      const containerOffset = $(this.options.container).offset();\n      pos.top -= containerOffset.top;\n      pos.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n      });\n    } else {\n      this.hide();\n    }\n\n    return isCell;\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class VideoDialog {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  initialize() {\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<div class=\"form-group note-form-group row-fluid\">',\n        `<label for=\"note-dialog-video-url-${this.options.id}\" class=\"note-form-label\">${this.lang.video.url} <small class=\"text-muted\">${this.lang.video.providers}</small></label>`,\n        `<input id=\"note-dialog-video-url-${this.options.id}\" class=\"note-video-url form-control note-form-control note-input\" type=\"text\"/>`,\n      '</div>',\n    ].join('');\n    const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n    const footer = `<input type=\"button\" href=\"#\" class=\"${buttonClass}\" value=\"${this.lang.video.insert}\" disabled>`;\n\n    this.$dialog = this.ui.dialog({\n      title: this.lang.video.insert,\n      fade: this.options.dialogsFade,\n      body: body,\n      footer: footer,\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  bindEnterKey($input, $btn) {\n    $input.on('keypress', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        $btn.trigger('click');\n      }\n    });\n  }\n\n  createVideoNode(url) {\n    // video url patterns(youtube, instagram, vimeo, dailymotion, youku, peertube, mp4, ogg, webm)\n    const ytRegExp = /(?:youtu\\.be\\/|youtube\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=|shorts\\/|live\\/))([^&\\n?]+)(?:.*[?&]t=([^&\\n]+))?.*/;\n    const ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n    const ytMatch = url.match(ytRegExp);\n\n    const gdRegExp = /(?:\\.|\\/\\/)drive\\.google\\.com\\/file\\/d\\/(.[a-zA-Z0-9_-]*)\\/view/;\n    const gdMatch = url.match(gdRegExp);\n\n    const igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/(reel|p)\\/(.[a-zA-Z0-9_-]*)/;\n    const igMatch = url.match(igRegExp);\n\n    const vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n    const vMatch = url.match(vRegExp);\n\n    const vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n    const vimMatch = url.match(vimRegExp);\n\n    const dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n    const dmMatch = url.match(dmRegExp);\n\n    const youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n    const youkuMatch = url.match(youkuRegExp);\n\n    const peerTubeRegExp =/\\/\\/(.*)\\/videos\\/watch\\/([^?]*)(?:\\?(?:start=(\\w*))?(?:&stop=(\\w*))?(?:&loop=([10]))?(?:&autoplay=([10]))?(?:&muted=([10]))?)?/;\n    const peerTubeMatch = url.match(peerTubeRegExp);\n\n    const qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n    const qqMatch = url.match(qqRegExp);\n\n    const qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n    const qqMatch2 = url.match(qqRegExp2);\n\n    const mp4RegExp = /^.+.(mp4|m4v)$/;\n    const mp4Match = url.match(mp4RegExp);\n\n    const oggRegExp = /^.+.(ogg|ogv)$/;\n    const oggMatch = url.match(oggRegExp);\n\n    const webmRegExp = /^.+.(webm)$/;\n    const webmMatch = url.match(webmRegExp);\n\n    const fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n    const fbMatch = url.match(fbRegExp);\n\n    let $video;\n    if (ytMatch && ytMatch[1].length === 11) {\n      const youtubeId = ytMatch[1];\n      var start = 0;\n      if (typeof ytMatch[2] !== 'undefined') {\n        const ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n        if (ytMatchForStart) {\n          for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n            start += (typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0);\n          }\n        }else{\n          start = parseInt(ytMatch[2], 10);\n        }\n      }\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : ''))\n        .attr('width', '640').attr('height', '360');\n    } else if (gdMatch && gdMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', 'https://drive.google.com/file/d/' + gdMatch[1] + '/preview')\n        .attr('width', '640').attr('height', '480');\n    } else if (igMatch && igMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', 'https://instagram.com/p/' + igMatch[2] + '/embed/')\n        .attr('width', '612').attr('height', '710')\n        .attr('scrolling', 'no')\n        .attr('allowtransparency', 'true');\n    } else if (vMatch && vMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', vMatch[0] + '/embed/simple')\n        .attr('width', '600').attr('height', '600')\n        .attr('class', 'vine-embed');\n    } else if (vimMatch && vimMatch[3].length) {\n      $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n        .attr('frameborder', 0)\n        .attr('src', '//player.vimeo.com/video/' + vimMatch[3])\n        .attr('width', '640').attr('height', '360');\n    } else if (dmMatch && dmMatch[2].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])\n        .attr('width', '640').attr('height', '360');\n    } else if (youkuMatch && youkuMatch[1].length) {\n      $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n        .attr('frameborder', 0)\n        .attr('height', '498')\n        .attr('width', '510')\n        .attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n    } else if (peerTubeMatch && peerTubeMatch[0].length){\n      var begin = 0;\n      if (peerTubeMatch[2] !== 'undefined') begin = peerTubeMatch[2];\n      var end =0;\n      if (peerTubeMatch[3] !== 'undefined') end = peerTubeMatch[3];\n      var loop = 0;\n      if (peerTubeMatch[4] !== 'undefined') loop = peerTubeMatch[4];\n      var autoplay = 0;\n      if (peerTubeMatch[5] !== 'undefined') autoplay = peerTubeMatch[5];\n      var muted = 0;\n      if (peerTubeMatch[6] !== 'undefined') muted = peerTubeMatch[6];\n      $video = $('<iframe allowfullscreen sandbox=\"allow-same-origin allow-scripts allow-popups\">')\n        .attr('frameborder', 0)\n        .attr('src', '//'+ peerTubeMatch[1] +'/videos/embed/' + peerTubeMatch[2]+\"?loop=\"+loop\n      +\"&autoplay=\"+autoplay+\"&muted=\"+muted +(begin > 0 ? '&start=' + begin : '')+(end > 0 ? '&end=' + start : ''))\n        .attr('width', '560')\n        .attr('height', '315');\n    }else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) {\n      const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]);\n      $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n        .attr('frameborder', 0)\n        .attr('height', '310')\n        .attr('width', '500')\n        .attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n    } else if (mp4Match || oggMatch || webmMatch) {\n      $video = $('<video controls>')\n        .attr('src', url)\n        .attr('width', '640').attr('height', '360');\n    } else if (fbMatch && fbMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560')\n        .attr('width', '560').attr('height', '301')\n        .attr('scrolling', 'no')\n        .attr('allowtransparency', 'true');\n    } else {\n      // this is not a known video link. Now what, Cat? Now what?\n      return false;\n    }\n\n    $video.addClass('note-video-clip');\n\n    return $video[0];\n  }\n\n  show() {\n    const text = this.context.invoke('editor.getSelectedText');\n    this.context.invoke('editor.saveRange');\n    this.showVideoDialog(text).then((url) => {\n      // [workaround] hide dialog before restore range for IE range focus\n      this.ui.hideDialog(this.$dialog);\n      this.context.invoke('editor.restoreRange');\n\n      // build node\n      const $node = this.createVideoNode(url);\n\n      if ($node) {\n        // insert video node\n        this.context.invoke('editor.insertNode', $node);\n      }\n    }).fail(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n\n  /**\n   * show video dialog\n   *\n   * @param {jQuery} $dialog\n   * @return {Promise}\n   */\n  showVideoDialog(/* text */) {\n    return $.Deferred((deferred) => {\n      const $videoUrl = this.$dialog.find('.note-video-url');\n      const $videoBtn = this.$dialog.find('.note-video-btn');\n\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n\n        $videoUrl.on('input paste propertychange', () => {\n          this.ui.toggleBtn($videoBtn, $videoUrl.val());\n        });\n\n        if (!env.isSupportTouch) {\n          $videoUrl.trigger('focus');\n        }\n\n        $videoBtn.on('click', (event) => {\n          event.preventDefault();\n          deferred.resolve($videoUrl.val());\n        });\n\n        this.bindEnterKey($videoUrl, $videoBtn);\n      });\n\n      this.ui.onDialogHidden(this.$dialog, () => {\n        $videoUrl.off();\n        $videoBtn.off();\n\n        if (deferred.state() === 'pending') {\n          deferred.reject();\n        }\n      });\n\n      this.ui.showDialog(this.$dialog);\n    });\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\n\nexport default class HelpDialog {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  initialize() {\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<p class=\"text-center\">',\n        '<a href=\"http://summernote.org/\" target=\"_blank\" rel=\"noopener noreferrer\">Summernote @@VERSION@@</a> · ',\n        '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\" rel=\"noopener noreferrer\">Project</a> · ',\n        '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\" rel=\"noopener noreferrer\">Issues</a>',\n      '</p>',\n    ].join('');\n\n    this.$dialog = this.ui.dialog({\n      title: this.lang.options.help,\n      fade: this.options.dialogsFade,\n      body: this.createShortcutList(),\n      footer: body,\n      callback: ($node) => {\n        $node.find('.modal-body,.note-modal-body').css({\n          'max-height': 300,\n          'overflow': 'scroll',\n        });\n      },\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  createShortcutList() {\n    const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n    return Object.keys(keyMap).map((key) => {\n      const command = keyMap[key];\n      const $row = $('<div><div class=\"help-list-item\"></div></div>');\n      $row.append($('<label><kbd>' + key + '</kdb></label>').css({\n        'width': 180,\n        'margin-right': 10,\n      })).append($('<span></span>').html(this.context.memo('help.' + command) || command));\n      return $row.html();\n    }).join('');\n  }\n\n  /**\n   * show help dialog\n   *\n   * @return {Promise}\n   */\n  showHelpDialog() {\n    return $.Deferred((deferred) => {\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n        deferred.resolve();\n      });\n      this.ui.showDialog(this.$dialog);\n    }).promise();\n  }\n\n  show() {\n    this.context.invoke('editor.saveRange');\n    this.showHelpDialog().then(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport func from '../core/func';\n\nconst AIRMODE_POPOVER_X_OFFSET = -5;\nconst AIRMODE_POPOVER_Y_OFFSET = 5;\n\nexport default class AirPopover {\n  constructor(context) {\n    this.context = context;\n    this.ui = $.summernote.ui;\n    this.options = context.options;\n\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n\n    this.events = {\n      'summernote.contextmenu': (event) => {\n        if (this.options.editing) {\n          event.preventDefault();\n          event.stopPropagation();\n          this.onContextmenu = true;\n          this.update(true);\n        }\n      },\n      'summernote.mousedown': (we, event) => {\n        this.pageX = event.pageX;\n        this.pageY = event.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': (we, event) => {\n        if (this.options.editing && !this.onContextmenu) {\n          if (event.type == 'keyup') {\n            let range = this.context.invoke('editor.getLastRange');\n            let wordRange = range.getWordRange();\n            const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n            this.pageX = bnd.left;\n            this.pageY = bnd.top;\n          } else {\n            this.pageX = event.pageX;\n            this.pageY = event.pageY;\n          }\n          this.update();\n        }\n        this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': () => {\n        this.hide();\n      },\n      'summernote.focusout': () => {\n        if (!this.$popover.is(':active,:focus')) {\n          this.hide();\n        }\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-air-popover',\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content');\n\n    this.context.invoke('buttons.build', $content, this.options.popover.air);\n\n    // disable hiding this popover preemptively by 'summernote.blur' event.\n    this.$popover.on('mousedown', () => { this.hidable = false; });\n    // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n    this.$popover.on('mouseup', () => { this.hidable = true; });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update(forcelyOpen) {\n    const styleInfo = this.context.invoke('editor.currentStyle');\n    if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n      let rect = {\n        left: this.pageX,\n        top: this.pageY,\n      };\n\n      const containerOffset = $(this.options.container).offset();\n      rect.top -= containerOffset.top;\n      rect.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n        top: rect.top + AIRMODE_POPOVER_Y_OFFSET,\n      });\n      this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n    } else {\n      this.hide();\n    }\n  }\n\n  updateCodeview(isCodeview) {\n    this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n    if (isCodeview) {\n      this.hide();\n    }\n  }\n\n  hide() {\n    if (this.hidable) {\n      this.$popover.hide();\n    }\n  }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport key from '../core/key';\n\nconst POPOVER_DIST = 5;\n\nexport default class HintPopover {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n\n    this.events = {\n      'summernote.keyup': (we, event) => {\n        if (!event.isDefaultPrevented()) {\n          this.handleKeyup(event);\n        }\n      },\n      'summernote.keydown': (we, event) => {\n        this.handleKeydown(event);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': () => {\n        this.hide();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return this.hints.length > 0;\n  }\n\n  initialize() {\n    this.lastWordRange = null;\n    this.matchingWord = null;\n    this.$popover = this.ui.popover({\n      className: 'note-hint-popover',\n      hideArrow: true,\n      direction: '',\n    }).render().appendTo(this.options.container);\n\n    this.$popover.hide();\n    this.$content = this.$popover.find('.popover-content,.note-popover-content');\n    this.$content.on('click', '.note-hint-item', (event) => {\n      this.$content.find('.active').removeClass('active');\n      $(event.currentTarget).addClass('active');\n      this.replace();\n    });\n\n    this.$popover.on('mousedown', (event) => { event.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  selectItem($item) {\n    this.$content.find('.active').removeClass('active');\n    $item.addClass('active');\n\n    this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);\n  }\n\n  moveDown() {\n    const $current = this.$content.find('.note-hint-item.active');\n    const $next = $current.next();\n\n    if ($next.length) {\n      this.selectItem($next);\n    } else {\n      let $nextGroup = $current.parent().next();\n\n      if (!$nextGroup.length) {\n        $nextGroup = this.$content.find('.note-hint-group').first();\n      }\n\n      this.selectItem($nextGroup.find('.note-hint-item').first());\n    }\n  }\n\n  moveUp() {\n    const $current = this.$content.find('.note-hint-item.active');\n    const $prev = $current.prev();\n\n    if ($prev.length) {\n      this.selectItem($prev);\n    } else {\n      let $prevGroup = $current.parent().prev();\n\n      if (!$prevGroup.length) {\n        $prevGroup = this.$content.find('.note-hint-group').last();\n      }\n\n      this.selectItem($prevGroup.find('.note-hint-item').last());\n    }\n  }\n\n  replace() {\n    const $item = this.$content.find('.note-hint-item.active');\n\n    if ($item.length) {\n      var node = this.nodeFromItem($item);\n      // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n      if (this.matchingWord !== null && this.matchingWord.length === 0) {\n        this.lastWordRange.so = this.lastWordRange.eo;\n      // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n      } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n        let rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n        if (rangeCompute > 0) {\n          this.lastWordRange.so += rangeCompute;\n        }\n      }\n      this.lastWordRange.insertNode(node);\n\n      if (this.options.hintSelect === 'next') {\n        var blank = document.createTextNode('');\n        $(node).after(blank);\n        range.createFromNodeBefore(blank).select();\n      } else {\n        range.createFromNodeAfter(node).select();\n      }\n\n      this.lastWordRange = null;\n      this.hide();\n      this.context.invoke('editor.focus');\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n  }\n\n  nodeFromItem($item) {\n    const hint = this.hints[$item.data('index')];\n    const item = $item.data('item');\n    let node = hint.content ? hint.content(item) : item;\n    if (typeof node === 'string') {\n      node = dom.createText(node);\n    }\n    return node;\n  }\n\n  createItemTemplates(hintIdx, items) {\n    const hint = this.hints[hintIdx];\n    return items.map((item , idx) => {\n      const $item = $('<div class=\"note-hint-item\"></div>');\n      $item.append(hint.template ? hint.template(item) : item + '');\n      $item.data({\n        'index': hintIdx,\n        'item': item,\n      });\n\n      if (hintIdx === 0 && idx === 0) {\n        $item.addClass('active');\n      }\n\n      return $item;\n    });\n  }\n\n  handleKeydown(event) {\n    if (!this.$popover.is(':visible')) {\n      return;\n    }\n\n    if (event.keyCode === key.code.ENTER) {\n      event.preventDefault();\n      this.replace();\n    } else if (event.keyCode === key.code.UP) {\n      event.preventDefault();\n      this.moveUp();\n    } else if (event.keyCode === key.code.DOWN) {\n      event.preventDefault();\n      this.moveDown();\n    }\n  }\n\n  searchKeyword(index, keyword, callback) {\n    const hint = this.hints[index];\n    if (hint && hint.match.test(keyword) && hint.search) {\n      const matches = hint.match.exec(keyword);\n      this.matchingWord = matches[0];\n      hint.search(matches[1], callback);\n    } else {\n      callback();\n    }\n  }\n\n  createGroup(idx, keyword) {\n    const $group = $('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n    this.searchKeyword(idx, keyword, (items) => {\n      items = items || [];\n      if (items.length) {\n        $group.html(this.createItemTemplates(idx, items));\n        this.show();\n      }\n    });\n\n    return $group;\n  }\n\n  handleKeyup(event) {\n    if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], event.keyCode)) {\n      let range = this.context.invoke('editor.getLastRange');\n      let wordRange, keyword;\n      if (this.options.hintMode === 'words') {\n        wordRange = range.getWordsRange(range);\n        keyword = wordRange.toString();\n\n        this.hints.forEach((hint) => {\n          if (hint.match.test(keyword)) {\n            wordRange = range.getWordsMatchRange(hint.match);\n            return false;\n          }\n        });\n\n        if (!wordRange) {\n          this.hide();\n          return;\n        }\n\n        keyword = wordRange.toString();\n      } else {\n        wordRange = range.getWordRange();\n        keyword = wordRange.toString();\n      }\n\n      if (this.hints.length && keyword) {\n        this.$content.empty();\n\n        const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n        const containerOffset = $(this.options.container).offset();\n        if (bnd) {\n          bnd.top -= containerOffset.top;\n          bnd.left -= containerOffset.left;\n\n          this.$popover.hide();\n          this.lastWordRange = wordRange;\n          this.hints.forEach((hint, idx) => {\n            if (hint.match.test(keyword)) {\n              this.createGroup(idx, keyword).appendTo(this.$content);\n            }\n          });\n          // select first .note-hint-item\n          this.$content.find('.note-hint-item').first().addClass('active');\n\n          // set position for popover after group is created\n          if (this.direction === 'top') {\n            this.$popover.css({\n              left: bnd.left,\n              top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST,\n            });\n          } else {\n            this.$popover.css({\n              left: bnd.left,\n              top: bnd.top + bnd.height + POPOVER_DIST,\n            });\n          }\n        }\n      } else {\n        this.hide();\n      }\n    }\n  }\n\n  show() {\n    this.$popover.show();\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport '../lang/summernote-en-US';\nimport './summernote';\nimport dom from './core/dom';\nimport range from './core/range';\nimport lists from './core/lists';\nimport Editor from './module/Editor';\nimport Clipboard from './module/Clipboard';\nimport Dropzone from './module/Dropzone';\nimport Codeview from './module/Codeview';\nimport Statusbar from './module/Statusbar';\nimport Fullscreen from './module/Fullscreen';\nimport Handle from './module/Handle';\nimport AutoLink from './module/AutoLink';\nimport AutoSync from './module/AutoSync';\nimport AutoReplace from './module/AutoReplace';\nimport Placeholder from './module/Placeholder';\nimport Buttons from './module/Buttons';\nimport Toolbar from './module/Toolbar';\nimport LinkDialog from './module/LinkDialog';\nimport LinkPopover from './module/LinkPopover';\nimport ImageDialog from './module/ImageDialog';\nimport ImagePopover from './module/ImagePopover';\nimport TablePopover from './module/TablePopover';\nimport VideoDialog from './module/VideoDialog';\nimport HelpDialog from './module/HelpDialog';\nimport AirPopover from './module/AirPopover';\nimport HintPopover from './module/HintPopover';\n\n$.summernote = $.extend($.summernote, {\n  version: '@@VERSION@@',\n  plugins: {},\n\n  dom: dom,\n  range: range,\n  lists: lists,\n\n  options: {\n    langInfo: $.summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor,\n      'clipboard': Clipboard,\n      'dropzone': Dropzone,\n      'codeview': Codeview,\n      'statusbar': Statusbar,\n      'fullscreen': Fullscreen,\n      'handle': Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover,\n      'autoLink': AutoLink,\n      'autoSync': AutoSync,\n      'autoReplace': AutoReplace,\n      'placeholder': Placeholder,\n      'buttons': Buttons,\n      'toolbar': Toolbar,\n      'linkDialog': LinkDialog,\n      'linkPopover': LinkPopover,\n      'imageDialog': ImageDialog,\n      'imagePopover': ImagePopover,\n      'tablePopover': TablePopover,\n      'videoDialog': VideoDialog,\n      'helpDialog': HelpDialog,\n      'airPopover': AirPopover,\n    },\n\n    buttons: {},\n\n    lang: 'en-US',\n\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [\n      ['style', ['style']],\n      ['font', ['bold', 'underline', 'clear']],\n      ['fontname', ['fontname']],\n      ['color', ['color']],\n      ['para', ['ul', 'ol', 'paragraph']],\n      ['table', ['table']],\n      ['insert', ['link', 'picture', 'video']],\n      ['view', ['fullscreen', 'codeview', 'help']],\n    ],\n\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [\n        ['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n        ['float', ['floatLeft', 'floatRight', 'floatNone']],\n        ['remove', ['removeMedia']],\n      ],\n      link: [\n        ['link', ['linkDialogShow', 'unlink']],\n      ],\n      table: [\n        ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n        ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n      ],\n      air: [\n        ['color', ['color']],\n        ['font', ['bold', 'underline', 'clear']],\n        ['para', ['ul', 'paragraph']],\n        ['table', ['table']],\n        ['insert', ['link', 'picture']],\n        ['view', ['fullscreen', 'codeview']],\n      ],\n    },\n\n    // link options\n    linkAddNoReferrer: false,\n    addLinkNoOpener: false,\n\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false, // TBD\n\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n\n    focus: false,\n    tabDisable: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n    fontNames: [\n      'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n      'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande',\n      'Tahoma', 'Times New Roman', 'Verdana',\n    ],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n\n    fontSizeUnits: ['px', 'pt'],\n\n    // pallete colors(n x n)\n    colors: [\n      ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],\n      ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],\n      ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],\n      ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],\n      ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],\n      ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],\n      ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],\n      ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'],\n    ],\n\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [\n      ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'],\n      ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'],\n      ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'],\n      ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'],\n      ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'],\n      ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'],\n      ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'],\n      ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'],\n    ],\n\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00',\n    },\n\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n\n    tableClassName: 'table table-bordered',\n\n    insertTableMaxSize: {\n      col: 10,\n      row: 10,\n    },\n\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n\n    maximumImageFileSize: null,\n    acceptImageFileTypes: \"image/*\",\n\n    allowClipboardImagePasting: true,\n\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null,\n    },\n\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true,\n    },\n\n    codeviewFilter: true,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: [\n      'www.youtube.com',\n      'www.youtube-nocookie.com',\n      'www.facebook.com',\n      'vine.co',\n      'instagram.com',\n      'player.vimeo.com',\n      'www.dailymotion.com',\n      'player.youku.com',\n      'jumpingbean.tv',\n      'v.qq.com',\n    ],\n\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show',\n      },\n\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show',\n      },\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video',\n    },\n  },\n});\n","import $ from 'jquery';\n\nclass Renderer {\n  constructor(markup, children, options, callback) {\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n\n  render($parent) {\n    const $node = $(this.markup);\n\n    if (this.options && this.options.contents) {\n      $node.html(this.options.contents);\n    }\n\n    if (this.options && this.options.className) {\n      $node.addClass(this.options.className);\n    }\n\n    if (this.options && this.options.data) {\n      $.each(this.options.data, (k, v) => {\n        $node.attr('data-' + k, v);\n      });\n    }\n\n    if (this.options && this.options.click) {\n      $node.on('click', this.options.click);\n    }\n\n    if (this.children) {\n      const $container = $node.find('.note-children-container');\n      this.children.forEach((child) => {\n        child.render($container.length ? $container : $node);\n      });\n    }\n\n    if (this.callback) {\n      this.callback($node, this.options);\n    }\n\n    if (this.options && this.options.callback) {\n      this.options.callback($node);\n    }\n\n    if ($parent) {\n      $parent.append($node);\n    }\n\n    return $node;\n  }\n}\n\nexport default {\n  create: (markup, callback) => {\n    return function() {\n      const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0];\n      let children = Array.isArray(arguments[0]) ? arguments[0] : [];\n      if (options && options.children) {\n        children = options.children;\n      }\n      return new Renderer(markup, children, options, callback);\n    };\n  },\n};\n","import $ from 'jquery';\n\nclass TooltipUI {\n  constructor($node, options) {\n    this.$node = $node;\n    this.options = $.extend({}, {\n      title: '',\n      target: options.container,\n      trigger: 'hover focus',\n      placement: 'bottom',\n    }, options);\n\n    // create tooltip node\n    this.$tooltip = $([\n      '<div class=\"note-tooltip\">',\n        '<div class=\"note-tooltip-arrow\"></div>',\n        '<div class=\"note-tooltip-content\"></div>',\n      '</div>',\n    ].join(''));\n\n    // define event\n    if (this.options.trigger !== 'manual') {\n      const showCallback = this.show.bind(this);\n      const hideCallback = this.hide.bind(this);\n      const toggleCallback = this.toggle.bind(this);\n\n      this.options.trigger.split(' ').forEach(function(eventName) {\n        if (eventName === 'hover') {\n          $node.off('mouseenter mouseleave');\n          $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);\n        } else if (eventName === 'click') {\n          $node.on('click', toggleCallback);\n        } else if (eventName === 'focus') {\n          $node.on('focus', showCallback).on('blur', hideCallback);\n        }\n      });\n    }\n  }\n\n  show() {\n    const $node = this.$node;\n    const offset = $node.offset();\n    const targetOffset = $(this.options.target).offset();\n    offset.top -= targetOffset.top;\n    offset.left -= targetOffset.left;\n\n    const $tooltip = this.$tooltip;\n    const title = this.options.title || $node.attr('title') || $node.data('title');\n    const placement = this.options.placement || $node.data('placement');\n\n    $tooltip.addClass(placement);\n    $tooltip.find('.note-tooltip-content').text(title);\n    $tooltip.appendTo(this.options.target);\n\n    const nodeWidth = $node.outerWidth();\n    const nodeHeight = $node.outerHeight();\n    const tooltipWidth = $tooltip.outerWidth();\n    const tooltipHeight = $tooltip.outerHeight();\n\n    if (placement === 'bottom') {\n      $tooltip.css({\n        top: offset.top + nodeHeight,\n        left: offset.left + (nodeWidth / 2 - tooltipWidth / 2),\n      });\n    } else if (placement === 'top') {\n      $tooltip.css({\n        top: offset.top - tooltipHeight,\n        left: offset.left + (nodeWidth / 2 - tooltipWidth / 2),\n      });\n    } else if (placement === 'left') {\n      $tooltip.css({\n        top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n        left: offset.left - tooltipWidth,\n      });\n    } else if (placement === 'right') {\n      $tooltip.css({\n        top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n        left: offset.left + nodeWidth,\n      });\n    }\n\n    $tooltip.addClass('in');\n  }\n\n  hide() {\n    this.$tooltip.removeClass('in');\n    setTimeout(() => {\n      this.$tooltip.remove();\n    }, 200);\n  }\n\n  toggle() {\n    if (this.$tooltip.hasClass('in')) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n}\n\nexport default TooltipUI;\n","import $ from 'jquery';\n\nclass DropdownUI {\n  constructor($node, options) {\n    this.$button = $node;\n    this.options = $.extend({}, {\n      target: options.container,\n    }, options);\n    this.setEvent();\n  }\n\n  setEvent() {\n    this.$button.on('click', (e) => {\n      this.toggle();\n      e.stopImmediatePropagation();\n    });\n  }\n\n  clear() {\n    var $parent = $('.note-btn-group.open');\n    $parent.find('.note-btn.active').removeClass('active');\n    $parent.removeClass('open');\n  }\n\n  show() {\n    this.$button.addClass('active');\n    this.$button.parent().addClass('open');\n\n    var $dropdown = this.$button.next();\n    var offset = $dropdown.offset();\n    var width = $dropdown.outerWidth();\n    var windowWidth = $(window).width();\n    var targetMarginRight = parseFloat($(this.options.target).css('margin-right'));\n\n    if (offset.left + width > windowWidth - targetMarginRight) {\n      $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));\n    } else {\n      $dropdown.css('margin-left', '');\n    }\n  }\n\n  hide() {\n    this.$button.removeClass('active');\n    this.$button.parent().removeClass('open');\n  }\n\n  toggle() {\n    var isOpened = this.$button.parent().hasClass('open');\n\n    this.clear();\n\n    if (isOpened) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n}\n\n$(document).on('click.note-dropdown-menu', function(e) {\n  if (!$(e.target).closest('.note-btn-group').length) {\n    $('.note-btn-group.open .note-btn.active').removeClass('active');\n    $('.note-btn-group.open').removeClass('open');\n  }\n});\n\n$(document).on('click.note-dropdown-menu', function(e) {\n  $(e.target).closest('.note-dropdown-menu').parent().removeClass('open');\n  $(e.target).closest('.note-dropdown-menu').parent().find('.note-btn.active').removeClass('active');\n});\n\nexport default DropdownUI;\n","import $ from 'jquery';\n\nclass ModalUI {\n  constructor($node /*, options */) {\n    this.$modal = $node;\n    this.$backdrop = $('<div class=\"note-modal-backdrop\"></div>');\n  }\n\n  show() {\n    this.$backdrop.appendTo(document.body).show();\n    this.$modal.addClass('open').show();\n    this.$modal.trigger('note.modal.show');\n    this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));\n    this.$modal.on('keydown', (event) => {\n      if (event.which === 27) {\n        event.preventDefault();\n        this.hide();\n      }\n    });\n  }\n\n  hide() {\n    this.$modal.removeClass('open').hide();\n    this.$backdrop.hide();\n    this.$modal.trigger('note.modal.hide');\n    this.$modal.off('keydown');\n  }\n}\n\nexport default ModalUI;\n","import $ from 'jquery';\nimport '../../js/settings';\nimport renderer from '../../js/renderer';\n\nimport './summernote-lite.scss';\nimport TooltipUI from './js/TooltipUI';\nimport DropdownUI from './js/DropdownUI';\nimport ModalUI from './js/ModalUI';\n\nconst editor = renderer.create('<div class=\"note-editor note-frame\"></div>');\nconst toolbar = renderer.create('<div class=\"note-toolbar\" role=\"toolbar\"></div>');\nconst editingArea = renderer.create('<div class=\"note-editing-area\"></div>');\nconst codable = renderer.create('<textarea class=\"note-codable\" aria-multiline=\"true\"></textarea>');\nconst editable = renderer.create(\n  '<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>',\n);\nconst statusbar = renderer.create(\n  [\n    '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>',\n    '<div class=\"note-statusbar\" role=\"status\">',\n    '<div class=\"note-resizebar\" aria-label=\"resize\">',\n    '<div class=\"note-icon-bar\"></div>',\n    '<div class=\"note-icon-bar\"></div>',\n    '<div class=\"note-icon-bar\"></div>',\n    '</div>',\n    '</div>',\n  ].join(''),\n);\n\nconst airEditor = renderer.create('<div class=\"note-editor note-airframe\"></div>');\nconst airEditable = renderer.create(\n  [\n    '<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>',\n    '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>',\n  ].join(''),\n);\n\nconst buttonGroup = renderer.create('<div class=\"note-btn-group\"></div>');\nconst button = renderer.create(\n  '<button type=\"button\" class=\"note-btn\" tabindex=\"-1\"></button>',\n  function($node, options) {\n    // set button type\n    if (options && options.tooltip) {\n      $node.attr({\n        'aria-label': options.tooltip,\n      });\n      $node\n        .data(\n          '_lite_tooltip',\n          new TooltipUI($node, {\n            title: options.tooltip,\n            container: options.container,\n          }),\n        )\n        .on('click', (e) => {\n          $(e.currentTarget).data('_lite_tooltip').hide();\n        });\n    }\n    if (options.contents) {\n      $node.html(options.contents);\n    }\n\n    if (options && options.data && options.data.toggle === 'dropdown') {\n      $node.data(\n        '_lite_dropdown',\n        new DropdownUI($node, {\n          container: options.container,\n        }),\n      );\n    }\n\n    if (options && options.codeviewKeepButton) {\n      $node.addClass('note-codeview-keep');\n    }\n  },\n);\n\nconst dropdown = renderer.create('<div class=\"note-dropdown-menu\" role=\"list\"></div>', function($node, options) {\n  const markup = Array.isArray(options.items)\n    ? options.items.map(function(item) {\n      const value = typeof item === 'string' ? item : item.value || '';\n      const content = options.template ? options.template(item) : item;\n      const $temp = $(\n        '<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' +\n            value +\n            '\" role=\"listitem\" aria-label=\"' +\n            value +\n            '\"></a>',\n      );\n\n      $temp.html(content).data('item', item);\n\n      return $temp;\n    })\n    : options.items;\n\n  $node.html(markup).attr({ 'aria-label': options.title });\n\n  $node.on('click', '> .note-dropdown-item', function(e) {\n    const $a = $(this);\n\n    const item = $a.data('item');\n    const value = $a.data('value');\n\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nconst dropdownCheck = renderer.create(\n  '<div class=\"note-dropdown-menu note-check\" role=\"list\"></div>',\n  function($node, options) {\n    const markup = Array.isArray(options.items)\n      ? options.items.map(function(item) {\n        const value = typeof item === 'string' ? item : item.value || '';\n        const content = options.template ? options.template(item) : item;\n\n        const $temp = $(\n          '<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' +\n              value +\n              '\" role=\"listitem\" aria-label=\"' +\n              item +\n              '\"></a>',\n        );\n        $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);\n        return $temp;\n      })\n      : options.items;\n\n    $node.html(markup).attr({ 'aria-label': options.title });\n\n    $node.on('click', '> .note-dropdown-item', function(e) {\n      const $a = $(this);\n\n      const item = $a.data('item');\n      const value = $a.data('value');\n\n      if (item.click) {\n        item.click($a);\n      } else if (options.itemClick) {\n        options.itemClick(e, item, value);\n      }\n    });\n    if (options && options.codeviewKeepButton) {\n      $node.addClass('note-codeview-keep');\n    }\n  },\n);\n\nconst dropdownButtonContents = function(contents, options) {\n  return contents + ' ' + icon(options.icons.caret, 'span');\n};\n\nconst dropdownButton = function(opt, callback) {\n  return buttonGroup(\n    [\n      button({\n        className: 'dropdown-toggle',\n        contents: opt.title + ' ' + icon('note-icon-caret'),\n        tooltip: opt.tooltip,\n        data: {\n          toggle: 'dropdown',\n        },\n      }),\n      dropdown({\n        className: opt.className,\n        items: opt.items,\n        template: opt.template,\n        itemClick: opt.itemClick,\n      }),\n    ],\n    { callback: callback },\n  ).render();\n};\n\nconst dropdownCheckButton = function(opt, callback) {\n  return buttonGroup(\n    [\n      button({\n        className: 'dropdown-toggle',\n        contents: opt.title + ' ' + icon('note-icon-caret'),\n        tooltip: opt.tooltip,\n        data: {\n          toggle: 'dropdown',\n        },\n      }),\n      dropdownCheck({\n        className: opt.className,\n        checkClassName: opt.checkClassName,\n        items: opt.items,\n        template: opt.template,\n        itemClick: opt.itemClick,\n      }),\n    ],\n    { callback: callback },\n  ).render();\n};\n\nconst paragraphDropdownButton = function(opt) {\n  return buttonGroup([\n    button({\n      className: 'dropdown-toggle',\n      contents: opt.title + ' ' + icon('note-icon-caret'),\n      tooltip: opt.tooltip,\n      data: {\n        toggle: 'dropdown',\n      },\n    }),\n    dropdown([\n      buttonGroup({\n        className: 'note-align',\n        children: opt.items[0],\n      }),\n      buttonGroup({\n        className: 'note-list',\n        children: opt.items[1],\n      }),\n    ]),\n  ]).render();\n};\n\nconst tableMoveHandler = function(event, col, row) {\n  const PX_PER_EM = 18;\n  const $picker = $(event.target.parentNode); // target is mousecatcher\n  const $dimensionDisplay = $picker.next();\n  const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n  const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n  const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n  let posOffset;\n  // HTML5 with jQuery - e.offsetX is undefined in Firefox\n  if (event.offsetX === undefined) {\n    const posCatcher = $(event.target).offset();\n    posOffset = {\n      x: event.pageX - posCatcher.left,\n      y: event.pageY - posCatcher.top,\n    };\n  } else {\n    posOffset = {\n      x: event.offsetX,\n      y: event.offsetY,\n    };\n  }\n\n  const dim = {\n    c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n    r: Math.ceil(posOffset.y / PX_PER_EM) || 1,\n  };\n\n  $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n  $catcher.data('value', dim.c + 'x' + dim.r);\n\n  if (dim.c > 3 && dim.c < col) {\n    $unhighlighted.css({ width: dim.c + 1 + 'em' });\n  }\n\n  if (dim.r > 3 && dim.r < row) {\n    $unhighlighted.css({ height: dim.r + 1 + 'em' });\n  }\n\n  $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n};\n\nconst tableDropdownButton = function(opt) {\n  return buttonGroup(\n    [\n      button({\n        className: 'dropdown-toggle',\n        contents: opt.title + ' ' + icon('note-icon-caret'),\n        tooltip: opt.tooltip,\n        data: {\n          toggle: 'dropdown',\n        },\n      }),\n      dropdown({\n        className: 'note-table',\n        items: [\n          '<div class=\"note-dimension-picker\">',\n          '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>',\n          '<div class=\"note-dimension-picker-highlighted\"></div>',\n          '<div class=\"note-dimension-picker-unhighlighted\"></div>',\n          '</div>',\n          '<div class=\"note-dimension-display\">1 x 1</div>',\n        ].join(''),\n      }),\n    ],\n    {\n      callback: function($node) {\n        const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n        $catcher\n          .css({\n            width: opt.col + 'em',\n            height: opt.row + 'em',\n          })\n          .on('mouseup', opt.itemClick)\n          .on('mousemove', function(e) {\n            tableMoveHandler(e, opt.col, opt.row);\n          });\n      },\n    },\n  ).render();\n};\n\nconst palette = renderer.create('<div class=\"note-color-palette\"></div>', function($node, options) {\n  const contents = [];\n  for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n    const eventName = options.eventName;\n    const colors = options.colors[row];\n    const colorsName = options.colorsName[row];\n    const buttons = [];\n    for (let col = 0, colSize = colors.length; col < colSize; col++) {\n      const color = colors[col];\n      const colorName = colorsName[col];\n      buttons.push(\n        [\n          '<button type=\"button\" class=\"note-btn note-color-btn\"',\n          'style=\"background-color:',\n          color,\n          '\" ',\n          'data-event=\"',\n          eventName,\n          '\" ',\n          'data-value=\"',\n          color,\n          '\" ',\n          'data-title=\"',\n          colorName,\n          '\" ',\n          'aria-label=\"',\n          colorName,\n          '\" ',\n          'data-toggle=\"button\" tabindex=\"-1\"></button>',\n        ].join(''),\n      );\n    }\n    contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n  }\n  $node.html(contents.join(''));\n\n  $node.find('.note-color-btn').each(function() {\n    $(this).data(\n      '_lite_tooltip',\n      new TooltipUI($(this), {\n        container: options.container,\n      }),\n    );\n  });\n});\n\nconst colorDropdownButton = function(opt, type) {\n  return buttonGroup({\n    className: 'note-color',\n    children: [\n      button({\n        className: 'note-current-color-button',\n        contents: opt.title,\n        tooltip: opt.lang.color.recent,\n        click: opt.currentClick,\n        callback: function($button) {\n          const $recentColor = $button.find('.note-recent-color');\n\n          if (type !== 'foreColor') {\n            $recentColor.css('background-color', '#FFFF00');\n            $button.attr('data-backColor', '#FFFF00');\n          }\n        },\n      }),\n      button({\n        className: 'dropdown-toggle',\n        contents: icon('note-icon-caret'),\n        tooltip: opt.lang.color.more,\n        data: {\n          toggle: 'dropdown',\n        },\n      }),\n      dropdown({\n        items: [\n          '<div>',\n          '<div class=\"note-btn-group btn-background-color\">',\n          '<div class=\"note-palette-title\">' + opt.lang.color.background + '</div>',\n          '<div>',\n          '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"backColor\" data-value=\"transparent\">',\n          opt.lang.color.transparent,\n          '</button>',\n          '</div>',\n          '<div class=\"note-holder\" data-event=\"backColor\"></div>',\n          '<div class=\"btn-sm\">',\n          '<input type=\"color\" id=\"html5bcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">',\n          '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"backColor\" data-value=\"cpbackColor\">',\n          opt.lang.color.cpSelect,\n          '</button>',\n          '</div>',\n          '</div>',\n          '<div class=\"note-btn-group btn-foreground-color\">',\n          '<div class=\"note-palette-title\">' + opt.lang.color.foreground + '</div>',\n          '<div>',\n          '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n          opt.lang.color.resetToDefault,\n          '</button>',\n          '</div>',\n          '<div class=\"note-holder\" data-event=\"foreColor\"></div>',\n          '<div class=\"btn-sm\">',\n          '<input type=\"color\" id=\"html5fcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">',\n          '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"foreColor\" data-value=\"cpforeColor\">',\n          opt.lang.color.cpSelect,\n          '</button>',\n          '</div>',\n          '</div>',\n          '</div>',\n        ].join(''),\n        callback: function($dropdown) {\n          $dropdown.find('.note-holder').each(function() {\n            const $holder = $(this);\n            $holder.append(\n              palette({\n                colors: opt.colors,\n                eventName: $holder.data('event'),\n              }).render(),\n            );\n          });\n\n          if (type === 'fore') {\n            $dropdown.find('.btn-background-color').hide();\n            $dropdown.css({ 'min-width': '210px' });\n          } else if (type === 'back') {\n            $dropdown.find('.btn-foreground-color').hide();\n            $dropdown.css({ 'min-width': '210px' });\n          }\n        },\n        click: function(event) {\n          const $button = $(event.target);\n          const eventName = $button.data('event');\n          let value = $button.data('value');\n          const foreinput = document.getElementById('html5fcp').value;\n          const backinput = document.getElementById('html5bcp').value;\n          if (value === 'cp') {\n            event.stopPropagation();\n          } else if (value === 'cpbackColor') {\n            value = backinput;\n          } else if (value === 'cpforeColor') {\n            value = foreinput;\n          }\n\n          if (eventName && value) {\n            const key = eventName === 'backColor' ? 'background-color' : 'color';\n            const $color = $button.closest('.note-color').find('.note-recent-color');\n            const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n            $color.css(key, value);\n            $currentButton.attr('data-' + eventName, value);\n\n            if (type === 'fore') {\n              opt.itemClick('foreColor', value);\n            } else if (type === 'back') {\n              opt.itemClick('backColor', value);\n            } else {\n              opt.itemClick(eventName, value);\n            }\n          }\n        },\n      }),\n    ],\n  }).render();\n};\n\nconst dialog = renderer.create(\n  '<div class=\"note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"></div>',\n  function($node, options) {\n    if (options.fade) {\n      $node.addClass('fade');\n    }\n    $node.attr({\n      'aria-label': options.title,\n    });\n    $node.html(\n      [\n        '<div class=\"note-modal-content\">',\n        options.title\n          ? '<div class=\"note-modal-header\"><button type=\"button\" class=\"close\" aria-label=\"Close\" aria-hidden=\"true\"><i class=\"note-icon-close\"></i></button><h4 class=\"note-modal-title\">' +\n            options.title +\n            '</h4></div>'\n          : '',\n        '<div class=\"note-modal-body\">' + options.body + '</div>',\n        options.footer ? '<div class=\"note-modal-footer\">' + options.footer + '</div>' : '',\n        '</div>',\n      ].join(''),\n    );\n\n    $node.data('modal', new ModalUI($node, options));\n  },\n);\n\nconst videoDialog = function(opt) {\n  const body =\n    '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-video-url-' +\n    opt.id +\n    '\" class=\"note-form-label\">' +\n    opt.lang.video.url +\n    ' <small class=\"text-muted\">' +\n    opt.lang.video.providers +\n    '</small></label>' +\n    '<input id=\"note-dialog-video-url-' +\n    opt.id +\n    '\" class=\"note-video-url note-input\" type=\"text\"/>' +\n    '</div>';\n  const footer = [\n    '<button type=\"button\" href=\"#\" class=\"note-btn note-btn-primary note-video-btn disabled\" disabled>',\n    opt.lang.video.insert,\n    '</button>',\n  ].join('');\n\n  return dialog({\n    title: opt.lang.video.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer,\n  }).render();\n};\n\nconst imageDialog = function(opt) {\n  const body =\n    '<div class=\"note-form-group note-group-select-from-files\">' +\n    '<label for=\"note-dialog-image-file-' +\n    opt.id +\n    '\" class=\"note-form-label\">' +\n    opt.lang.image.selectFromFiles +\n    '</label>' +\n    '<input id=\"note-dialog-image-file-' +\n    opt.id +\n    '\" class=\"note-note-image-input note-input\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>' +\n    opt.imageLimitation +\n    '</div>' +\n    '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-image-url-' +\n    opt.id +\n    '\" class=\"note-form-label\">' +\n    opt.lang.image.url +\n    '</label>' +\n    '<input id=\"note-dialog-image-url-' +\n    opt.id +\n    '\" class=\"note-image-url note-input\" type=\"text\"/>' +\n    '</div>';\n  const footer = [\n    '<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-btn-large note-image-btn disabled\" disabled>',\n    opt.lang.image.insert,\n    '</button>',\n  ].join('');\n\n  return dialog({\n    title: opt.lang.image.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer,\n  }).render();\n};\n\nconst linkDialog = function(opt) {\n  const body =\n    '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-link-txt-' +\n    opt.id +\n    '\" class=\"note-form-label\">' +\n    opt.lang.link.textToDisplay +\n    '</label>' +\n    '<input id=\"note-dialog-link-txt-' +\n    opt.id +\n    '\" class=\"note-link-text note-input\" type=\"text\"/>' +\n    '</div>' +\n    '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-link-url-' +\n    opt.id +\n    '\" class=\"note-form-label\">' +\n    opt.lang.link.url +\n    '</label>' +\n    '<input id=\"note-dialog-link-url-' +\n    opt.id +\n    '\" class=\"note-link-url note-input\" type=\"text\" value=\"http://\"/>' +\n    '</div>' +\n    (!opt.disableLinkTarget\n      ? '<div class=\"checkbox\"><label for=\"note-dialog-link-nw-' +\n        opt.id +\n        '\"><input id=\"note-dialog-link-nw-' +\n        opt.id +\n        '\" type=\"checkbox\" checked> ' +\n        opt.lang.link.openInNewWindow +\n        '</label></div>'\n      : '');\n  const footer = [\n    '<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-link-btn disabled\" disabled>',\n    opt.lang.link.insert,\n    '</button>',\n  ].join('');\n\n  return dialog({\n    className: 'link-dialog',\n    title: opt.lang.link.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer,\n  }).render();\n};\n\nconst popover = renderer.create(\n  [\n    '<div class=\"note-popover bottom\">',\n    '<div class=\"note-popover-arrow\"></div>',\n    '<div class=\"popover-content note-children-container\"></div>',\n    '</div>',\n  ].join(''),\n  function($node, options) {\n    const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n    $node.addClass(direction).hide();\n\n    if (options.hideArrow) {\n      $node.find('.note-popover-arrow').hide();\n    }\n  },\n);\n\nconst checkbox = renderer.create('<div class=\"checkbox\"></div>', function($node, options) {\n  $node.html(\n    [\n      '<label' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>',\n      '<input role=\"checkbox\" type=\"checkbox\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''),\n      options.checked ? ' checked' : '',\n      ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>',\n      options.text ? options.text : '',\n      '</label>',\n    ].join(''),\n  );\n});\n\nconst icon = function(iconClassName, tagName) {\n  if (iconClassName.match(/^</)) {\n    return iconClassName;\n  }\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"></' + tagName + '>';\n};\n\nconst ui = function(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    button: button,\n    dropdown: dropdown,\n    dropdownCheck: dropdownCheck,\n    dropdownButton: dropdownButton,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheckButton: dropdownCheckButton,\n    paragraphDropdownButton: paragraphDropdownButton,\n    tableDropdownButton: tableDropdownButton,\n    colorDropdownButton: colorDropdownButton,\n    palette: palette,\n    dialog: dialog,\n    videoDialog: videoDialog,\n    imageDialog: imageDialog,\n    linkDialog: linkDialog,\n    popover: popover,\n    checkbox: checkbox,\n    icon: icon,\n    options: editorOptions,\n\n    toggleBtn: function($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n\n    toggleBtnActive: function($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n\n    check: function($dom, value) {\n      $dom.find('.checked').removeClass('checked');\n      $dom.find('[data-value=\"' + value + '\"]').addClass('checked');\n    },\n\n    onDialogShown: function($dialog, handler) {\n      $dialog.one('note.modal.show', handler);\n    },\n\n    onDialogHidden: function($dialog, handler) {\n      $dialog.one('note.modal.hide', handler);\n    },\n\n    showDialog: function($dialog) {\n      $dialog.data('modal').show();\n    },\n\n    hideDialog: function($dialog) {\n      $dialog.data('modal').hide();\n    },\n\n    /**\n     * get popover content area\n     *\n     * @param $popover\n     * @returns {*}\n     */\n    getPopoverContent: function($popover) {\n      return $popover.find('.note-popover-content');\n    },\n\n    /**\n     * get dialog's body area\n     *\n     * @param $dialog\n     * @returns {*}\n     */\n    getDialogBody: function($dialog) {\n      return $dialog.find('.note-modal-body');\n    },\n\n    createLayout: function($note) {\n      const $editor = (\n        editorOptions.airMode\n          ? airEditor([editingArea([codable(), airEditable()])])\n          : editorOptions.toolbarPosition === 'bottom'\n            ? editor([editingArea([codable(), editable()]), toolbar(), statusbar()])\n            : editor([toolbar(), editingArea([codable(), editable()]), statusbar()])\n      ).render();\n\n      $editor.insertAfter($note);\n\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar'),\n      };\n    },\n\n    removeLayout: function($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.off('summernote'); // remove summernote custom event\n      $note.show();\n    },\n  };\n};\n\n$.summernote = $.extend($.summernote, {\n  ui_template: ui,\n  interface: 'lite',\n});\n"],"names":["$","summernote","lang","extend","font","bold","italic","underline","clear","height","name","strikethrough","subscript","superscript","size","sizeunit","image","insert","resizeFull","resizeHalf","resizeQuarter","resizeNone","floatLeft","floatRight","floatNone","shapeRounded","shapeCircle","shapeThumbnail","shapeNone","dragImageHere","dropImage","selectFromFiles","maximumFileSize","maximumFileSizeError","url","remove","original","video","videoLink","providers","link","unlink","edit","textToDisplay","openInNewWindow","table","addRowAbove","addRowBelow","addColLeft","addColRight","delRow","delCol","delTable","hr","style","p","blockquote","pre","h1","h2","h3","h4","h5","h6","lists","unordered","ordered","options","help","fullscreen","codeview","paragraph","outdent","indent","left","center","right","justify","color","recent","more","background","foreground","transparent","setTransparent","reset","resetToDefault","cpSelect","shortcut","shortcuts","close","textFormatting","action","paragraphFormatting","documentStyle","extraKeys","history","undo","redo","specialChar","select","output","noSelection","genericFontFamilies","validFontName","fontName","inArray","toLowerCase","concat","createIsFontInstalledFunc","testText","fontSize","canvasWidth","canvasHeight","canvas","document","createElement","context","getContext","willReadFrequently","width","textAlign","fillStyle","textBaseline","getPxInfo","testFontName","clearRect","fillText","pxInfo","getImageData","data","join","testInfo","fontInfo","userAgent","navigator","isMSIE","test","browserVersion","matches","exec","parseFloat","isEdge","isSupportTouch","window","MaxTouchPoints","msMaxTouchPoints","inputEventName","isMac","appVersion","indexOf","isFF","isPhantom","isWebkit","isChrome","isSafari","isFontInstalled","isW3CRangeSupport","createRange","eq","itemA","itemB","eq2","peq2","propName","ok","fail","not","f","apply","arguments","and","fA","fB","item","self","a","invoke","obj","method","idCounter","resetUniqueId","uniqueId","prefix","id","rect2bnd","rect","$document","top","scrollTop","scrollLeft","bottom","invertObject","inverted","key","Object","prototype","hasOwnProperty","call","namespaceToCamel","namespace","split","map","substring","toUpperCase","debounce","func","wait","immediate","timeout","args","later","callNow","clearTimeout","setTimeout","isValidUrl","expression","head","array","last","length","initial","slice","tail","find","pred","idx","len","all","contains","sum","fn","reduce","memo","v","from","collection","result","isEmpty","clusterBy","aTail","aLast","compact","aResult","push","unique","results","next","prev","env","NBSP_CHAR","String","fromCharCode","ZERO_WIDTH_NBSP_CHAR","isEditable","node","hasClass","isControlSizing","makePredByNodeName","nodeName","isText","nodeType","isElement","isVoid","isPara","isHeading","isPre","isLi","isPurePara","isTable","isData","isInline","isBodyContainer","isList","isHr","isBlockquote","isCell","isAnchor","isParaInline","ancestor","isBodyInline","isBody","isClosestSibling","nodeA","nodeB","nextSibling","previousSibling","withClosestSiblings","siblings","blankHTML","nodeLength","nodeValue","childNodes","deepestChildIsEmpty","firstElementChild","innerHTML","paddingBlankHTML","parentNode","singleChildAncestor","listAncestor","ancestors","el","lastAncestor","filter","commonAncestor","n","listPrev","nodes","listNext","listDescendant","descendants","fnWalk","current","wrap","wrapperName","parent","wrapper","insertBefore","appendChild","insertAfter","preceding","appendChildNodes","aChild","isSkipPaddingBlankHTML","each","child","firstChild","create","isLeftEdgePoint","point","offset","isRightEdgePoint","isEdgePoint","isLeftEdgeOf","position","isRightEdgeOf","isLeftEdgePointOf","isRightEdgePointOf","hasChildren","prevPoint","isSkipInnerOffset","nextPoint","nextTextNode","getNextTextNode","nextPointWithEmptyNode","actual","undefined","isSamePoint","pointA","pointB","isVisiblePoint","leftNode","rightNode","prevPointUntil","nextPointUntil","isCharPoint","ch","charAt","isSpacePoint","walkPoint","startPoint","endPoint","handler","isSkipOffset","makeOffsetPath","reverse","fromOffsetPath","offsets","i","splitNode","isNotSplitEdgePoint","isDiscardEmptySplits","splitText","childNode","clone","cloneNode","splitTree","root","domList","ifHasNextSibling","nestSibling","textNode","match","splitPoint","topAncestor","splitRoot","container","pivot","createText","text","createTextNode","isRemoveChild","removeNode","removeChild","removeWhile","replace","newNode","cssText","isTextarea","value","$node","stripLinebreaks","val","html","isNewlineOnBlock","markup","regexTag","endSlash","isEndOfInlineContainer","isBlockNode","trim","posFromPlaceholder","placeholder","$placeholder","pos","outerHeight","attachEvents","events","keys","forEach","on","detachEvents","off","isCustomStyleTag","classList","blank","emptyPara","isBlock","isDiv","isBR","isSpan","isB","isU","isS","isI","isImg","isEmptyAnchor","dom","Context","$note","_classCallCheck","memos","modules","layoutInfo","ui","ui_template","initialize","_createClass","createLayout","_initialize","hide","destroy","_destroy","removeData","removeLayout","disabled","isDisabled","code","disable","_this","now","editor","buttons","plugins","module","initializeModule","_this2","removeModule","removeMemo","triggerEvent","isActivated","codable","editable","attr","enable","editing","callback","callbacks","trigger","shouldInitialize","ModuleClass","withoutIntialize","createInvokeHandlerAndUpdateState","_this3","event","createInvokeHandler","_this4","preventDefault","$target","target","closest","splits","hasSeparator","moduleName","methodName","default","type","_typeof","isExternalAPICalled","hasInitOptions","langInfo","icons","tooltip","note","first","focus","textRangeToPoint","textRange","isStart","parentElement","tester","body","createTextRange","prevContainer","moveToElementText","compareEndPoints","textRangeStart","curTextNode","collapse","pointTester","duplicate","setEndPoint","textCount","dummy","cont","pointToTextRange","textRangeInfo","isCollapseToStart","prevTextNodes","collapseToStart","info","moveStart","WrappedRange","sc","so","ec","eo","isOnEditable","makeIsOn","isOnList","isOnAnchor","isOnCell","isOnData","nativeRange","w3cRange","setStart","setEnd","getPoints","getStartPoint","getEndPoint","nativeRng","selection","getSelection","rangeCount","removeAllRanges","addRange","scrollIntoView","offsetTop","Math","abs","normalize","getVisiblePoint","isLeftToRight","block","hasRightNode","hasLeftNode","isCollapsed","includeAncestor","fullyContains","leftEdgeNodes","expand","startAncestor","endAncestor","boundaryPoints","isSameContainer","deleteContents","rng","emptyParents","wrapBodyInlineWithPara","inlineSiblings","para","insertNode","doNotInsertPara","pasteHTML","contentsContainer","reversed","toString","getWordRange","findAfter","getWordsRange","isNotTextPoint","getWordsMatchRange","regex","index","bookmark","s","path","e","paraBookmark","paras","getClientRects","wrappedRange","createFromSelection","bodyElement","lastChild","createFromBodyElement","createFromNode","anchorNode","getRangeAt","startContainer","startOffset","endContainer","endOffset","textRangeEnd","isTextNode","createFromNodeBefore","createFromNodeAfter","createFromBookmark","createFromParaBookmark","KEY_MAP","isEdit","keyCode","BACKSPACE","TAB","ENTER","SPACE","DELETE","isRemove","isMove","LEFT","UP","RIGHT","DOWN","isNavigation","HOME","END","PAGEUP","PAGEDOWN","nameFromCode","readFileAsDataURL","file","Deferred","deferred","FileReader","onload","dataURL","resolve","onerror","err","reject","readAsDataURL","promise","createImage","$img","one","detach","css","display","appendTo","range","History","stack","stackOffset","$editable","makeSnapshot","emptyBookmark","contents","applySnapshot","snapshot","rewind","recordUndo","commit","historyLimit","shift","Style","jQueryCSS","$obj","propertyNames","propertyName","fromNode","properties","styleInfo","parseInt","stylePara","styleNodes","expandClosestSibling","onlyPartialContains","nodesInRange","tails","elem","$cont","queryCommandState","queryCommandValue","orderedTypes","isUnordered","lineHeight","toFixed","anchor","Bullet","insertOrderedList","toggleList","insertUnorderedList","clustereds","previousList","findList","wrapList","appendToPrevious","releaseList","listName","wrappedParas","diffLists","listNode","prevList","nextList","isEscapseToBody","releasedParas","headList","parentItem","newList","findNextSiblings","children","lastList","middleList","rootLists","rootList","listNodes","Typing","bullet","insertTab","tabsize","tab","Array","insertParagraph","nextPara","blockquoteBreakingLevel","emptyAnchors","TableResultAction","where","domTable","_startPoint","_virtualTable","_actionCellList","setStartPoint","tagName","colPos","cellIndex","rowPos","rowIndex","setVirtualTablePosition","baseRow","baseCell","isRowSpan","isColSpan","isVirtualCell","objPosition","getActionCell","virtualTableCellObj","resultAction","virtualRowPosition","virtualColPosition","recoverCellIndex","newCellIndex","addCellInfoToVirtual","row","cell","cellHasColspan","colSpan","cellHasRowspan","rowSpan","isThisSelectedCell","rowspanNumber","attributes","rp","rowspanIndex","adjustStartPoint","colspanNumber","cp","cellspanIndex","isSelectedCell","createVirtualTable","rows","cells","getDeleteResultActionToCell","Column","SubtractSpanCount","Row","isVirtual","AddCell","RemoveCell","getAddResultActionToCell","SumSpanCount","Ignore","init","getActionList","fixedRow","fixedCol","actualPosition","canContinue","rowPosition","colPosition","requestAction","Add","Delete","Table","isShift","nextCell","addRow","currentTr","trAttributes","recoverAttributes","vTable","actions","idCell","currentCell","tdAttributes","append","baseCellTr","isTopFromRowSpan","newTd","removeAttr","setAttribute","before","lastTrIndex","after","addCol","rowsGroup","actionIndex","resultStr","attrList","specified","deleteRow","cellPos","virtualPosition","virtualTable","hasRowspan","nextRow","cloneRow","removeAttribute","deleteCol","hasColspan","createTable","colCount","rowCount","tds","tdHTML","idxCol","trs","trHTML","idxRow","$table","tableClassName","addClass","deleteTable","KEY_BOGUS","MAILTO_PATTERN","TEL_PATTERN","URL_SCHEME_PATTERN","Editor","$editor","lastRange","typing","escape","untab","formatPara","insertHorizontalRule","commands","sCmd","beforeCommand","execCommand","afterCommand","wrapCommand","fontStyling","unit","currentStyle","fontSizeUnit","formatBlock","isLimited","getLastRange","setLastRange","insertText","onApplyCustomStyle","onFormatBlock","hrNode","createLink","linkInfo","rel","linkUrl","linkText","isNewWindow","addNoReferrer","linkAddNoReferrer","addNoOpener","linkAddNoOpener","additionalTextLength","isTextChanged","onCreateLink","checkLinkUrl","anchors","createRangeFromList","colorInfo","foreColor","backColor","insertTable","dim","dimension","removeMedia","restoreTarget","floatMe","toggleClass","resize","hasKeyShortCut","isDefaultPrevented","handleKeyMap","preventDefaultEditableShortCuts","recordEveryKeystroke","spellCheck","disableGrammar","airMode","overrideContextMenu","outerWidth","maxHeight","minHeight","keyMap","metaKey","ctrlKey","altKey","shiftKey","keyName","eventName","tabDisable","pad","maxTextLength","lst","startRange","endRange","saveRange","thenCollapse","restoreRange","saveTarget","clearTarget","styleFromNode","styleWithCSS","isPreventTrigger","normalizeContent","tabSize","removed","childElementCount","insertImage","src","param","then","$image","min","show","insertImagesAsDataURL","files","filename","maximumImageFileSize","insertImagesOrCallback","onImageUpload","getSelectedText","currentRange","$parent","removeClass","className","spans","firstSpan","noteStatusOutput","getLinkInfo","hasFocus","$anchor","resizeTo","bKeepRatio","imageSize","newRatio","y","x","ratio","is","empty","Clipboard","pasteByEvent","bind","clipboardData","originalEvent","items","clipboardFiles","clipboardText","getData","allowClipboardImagePasting","Dropzone","$eventListener","documentEventHandlers","$dropzone","prependTo","disableDragAndDrop","onDrop","attachDragAndDropEvent","$dropzoneMessage","onDragenter","isCodeview","hasEditorSize","add","onDragleave","dataTransfer","types","content","CodeView","$codable","CodeMirrorConstructor","CodeMirror","codemirror","sync","getDoc","setValue","save","ESCAPE","deactivate","toggle","activate","purify","codeviewFilter","codeviewFilterRegex","codeviewIframeFilter","whitelist","codeviewIframeWhitelistSrc","codeviewIframeWhitelistSrcBase","tag","_iterator","_createForOfIteratorHelper","_step","done","RegExp","prettifyHtml","cmEditor","fromTextArea","tern","server","TernServer","ternServer","cm","updateArgHints","getValue","setSize","toTextArea","isChange","EDITABLE_PADDING","Statusbar","$statusbar","statusbar","disableResizeEditor","stopPropagation","editableTop","editableCodeTop","onStatusbarMove","touches","clientY","heightCode","minheight","max","Fullscreen","$toolbar","toolbar","$window","$scrollbar","scrollbarClassName","onResize","h","setsize","isFullscreen","Handle","$editingArea","editingArea","summernoteMousedown","we","update","summernoteKeyupSummernoteScrollSummernoteChangeSummernoteDialogShown","summernoteDisableSummernoteBlur","summernoteCodeviewToggled","$handle","disableResizeImage","posStart","onMouseMove","clientX","isImage","$selection","areaRect","getBoundingClientRect","imageRect","origImageObj","Image","sizingText","defaultScheme","linkPattern","AutoLink","summernoteKeyup","handleKeyup","summernoteKeydown","handleKeydown","lastWordRange","keyword","urlText","showDomainOnlyForAutolink","linkTargetBlank","wordRange","AutoSync","summernoteChange","AutoReplace","PERIOD","COMMA","SEMICOLON","SLASH","previousKeydownCode","lastWord","jQuery","Node","Placeholder","inheritPlaceholder","summernoteInitSummernoteChange","isShow","Buttons","invertedKeyMap","representShortcut","editorMethod","button","o","addToolbarButtons","addImagePopoverButtons","addLinkPopoverButtons","addTablePopoverButtons","fontInstalledMap","fontNamesIgnoreCheck","isFontDeservedToAdd","colorPalette","buttonGroup","icon","click","$button","currentTarget","$recentColor","colorButton","dropdownButtonContents","dropdown","$dropdown","$holder","palette","colors","colorsName","render","customColors","$chip","$picker","$palette","prepend","$color","$currentButton","magic","styleTags","title","template","_loop","styleIdx","styleLen","eraser","addDefaultFonts","fontname","fontNames","dropdownCheck","checkClassName","menuCheck","fontSizes","fontSizeUnits","unorderedlist","orderedlist","justifyLeft","alignLeft","justifyCenter","alignCenter","justifyRight","alignRight","justifyFull","alignJustify","textHeight","lineHeights","$catcher","insertTableMaxSize","col","tableMoveHandler","picture","minus","arrowsAlt","question","rollback","trash","_this5","rowAbove","rowBelow","colBefore","colAfter","rowRemove","colRemove","build","$container","groups","groupIdx","groupLen","group","groupName","isArray","$group","btn","updateCurrentStyle","updateBtnStates","noteBtnBold","noteBtnItalic","noteBtnUnderline","noteBtnSubscript","noteBtnSuperscript","noteBtnStrikethrough","$item","isChecked","infos","_this6","selector","toggleBtnActive","PX_PER_EM","$dimensionDisplay","$highlighted","$unhighlighted","posOffset","offsetX","posCatcher","pageX","pageY","offsetY","c","ceil","r","Toolbar","isFollowing","followScroll","toolbarContainer","changeContainer","followingToolbar","editorHeight","editorWidth","toolbarHeight","statusbarHeight","otherBarHeight","otherStaticBar","currentOffset","editorOffsetTop","editorOffsetBottom","activateOffset","deactivateOffsetBottom","marginTop","zIndex","updateFullscreen","updateCodeview","isIncludeCodeview","$btn","toggleBtn","LinkDialog","$body","dialogsInBody","disableLinkTarget","checkbox","checked","buttonClass","footer","$dialog","dialog","fade","dialogsFade","hideDialog","bindEnterKey","$input","onCheckLinkUrl","toggleLinkBtn","$linkBtn","$linkText","$linkUrl","showLinkDialog","$openInNewWindow","onDialogShown","div","innerText","isNewWindowChecked","prop","onDialogHidden","state","showDialog","LinkPopover","summernoteKeyupSummernoteMouseupSummernoteChangeSummernoteScroll","summernoteDisableSummernoteDialogShown","summernoteBlur","relatedTarget","$popover","popover","$content","href","containerOffset","ImageDialog","imageLimitation","floor","log","readableSize","pow","acceptImageFileTypes","showImageDialog","onImageLinkInsert","$imageInput","$imageUrl","$imageBtn","replaceWith","ImagePopover","popatmouse","TablePopover","summernoteKeyupSummernoteScrollSummernoteChange","VideoDialog","createVideoNode","ytRegExp","ytRegExpForStart","ytMatch","gdRegExp","gdMatch","igRegExp","igMatch","vRegExp","vMatch","vimRegExp","vimMatch","dmRegExp","dmMatch","youkuRegExp","youkuMatch","peerTubeRegExp","peerTubeMatch","qqRegExp","qqMatch","qqRegExp2","qqMatch2","mp4RegExp","mp4Match","oggRegExp","oggMatch","webmRegExp","webmMatch","fbRegExp","fbMatch","$video","youtubeId","start","ytMatchForStart","begin","end","loop","autoplay","muted","vid","encodeURIComponent","showVideoDialog","$videoUrl","$videoBtn","HelpDialog","createShortcutList","command","$row","showHelpDialog","AIRMODE_POPOVER_X_OFFSET","AIRMODE_POPOVER_Y_OFFSET","AirPopover","hidable","onContextmenu","summernoteContextmenu","summernoteKeyupSummernoteMouseupSummernoteScroll","bnd","summernoteDisableSummernoteChangeSummernoteDialogShownSummernoteBlur","summernoteFocusout","air","forcelyOpen","POPOVER_DIST","HintPopover","hint","direction","hintDirection","hints","summernoteDisableSummernoteDialogShownSummernoteBlur","matchingWord","hideArrow","selectItem","innerHeight","moveDown","$current","$next","$nextGroup","moveUp","$prev","$prevGroup","nodeFromItem","rangeCompute","hintSelect","createItemTemplates","hintIdx","searchKeyword","search","createGroup","hintMode","Codeview","version","toolbarPosition","codeviewKeepButton","addLinkNoOpener","textareaAutoSync","onBeforeCommand","onBlur","onBlurCodeview","onChange","onChangeCodeview","onEnter","onFocus","onImageUploadError","onInit","onKeydown","onKeyup","onMousedown","onMouseup","onPaste","onScroll","mode","htmlMode","lineNumbers","pc","mac","Renderer","k","TooltipUI","placement","$tooltip","showCallback","hideCallback","toggleCallback","targetOffset","nodeWidth","nodeHeight","tooltipWidth","tooltipHeight","DropdownUI","setEvent","stopImmediatePropagation","windowWidth","targetMarginRight","isOpened","ModalUI","$modal","$backdrop","which","renderer","airEditor","airEditable","$temp","$a","itemClick","caret","dropdownButton","opt","dropdownCheckButton","paragraphDropdownButton","tableDropdownButton","rowSize","colSize","colorName","colorDropdownButton","currentClick","foreinput","getElementById","backinput","videoDialog","imageDialog","linkDialog","iconClassName","editorOptions","isEnable","isActive","check","$dom","getPopoverContent","getDialogBody"],"sourceRoot":""}
\ No newline at end of file