text: /*! For license information please see summernote.min.js.LICENSE.txt */ ! function(t, e) {
  	if ("object" == typeof exports && "object" == typeof module) module.exports = e(require("jquery"));
  	else if ("function" == typeof define && define.amd) define(["jquery"], e);
  	else {
  		var n = "object" == typeof exports ? e(require("jquery")) : e(t.jQuery);
  		for (var o in n)("object" == typeof exports ? exports : t)[o] = n[o]
  	}
  }(window, (function(t) {
  	return function(t) {
  		var e = {};
  
  		function n(o) {
  			if (e[o]) return e[o].exports;
  			var i = e[o] = {
  				i: o,
  				l: !1,
  				exports: {}
  			};
  			return t[o].call(i.exports, i, i.exports, n), i.l = !0, i.exports
  		}
  		return n.m = t, n.c = e, n.d = function(t, e, o) {
  			n.o(t, e) || Object.defineProperty(t, e, {
  				enumerable: !0,
  				get: o
  			})
  		}, n.r = function(t) {
  			"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
  				value: "Module"
  			}), Object.defineProperty(t, "__esModule", {
  				value: !0
  			})
  		}, n.t = function(t, e) {
  			if (1 & e && (t = n(t)), 8 & e) return t;
  			if (4 & e && "object" == typeof t && t && t.__esModule) return t;
  			var o = Object.create(null);
  			if (n.r(o), Object.defineProperty(o, "default", {
  					enumerable: !0,
  					value: t
  				}), 2 & e && "string" != typeof t)
  				for (var i in t) n.d(o, i, function(e) {
  					return t[e]
  				}.bind(null, i));
  			return o
  		}, n.n = function(t) {
  			var e = t && t.__esModule ? function() {
  				return t.default
  			} : function() {
  				return t
  			};
  			return n.d(e, "a", e), e
  		}, n.o = function(t, e) {
  			return Object.prototype.hasOwnProperty.call(t, e)
  		}, n.p = "", n(n.s = 52)
  	}({
  		0: function(e, n) {
  			e.exports = t
  		},
  		1: function(t, e, n) {
  			"use strict";
  			var o = n(0),
  				i = n.n(o);
  
  			function r(t) {
  				return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
  					return typeof t
  				} : function(t) {
  					return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
  				})(t)
  			}
  
  			function a(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var s = function() {
  				function t(e, n, o, i) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.markup = e, this.children = n, this.options = o, this.callback = i
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "render",
  					value: function(t) {
  						var e = i()(this.markup);
  						if (this.options && this.options.contents && e.html(this.options.contents), this.options && this.options.className && e.addClass(this.options.className), this.options && this.options.data && i.a.each(this.options.data, (function(t, n) {
  								e.attr("data-bs-" + t, n)
  							})), this.options && this.options.click && e.on("click", this.options.click), this.children) {
  							var n = e.find(".note-children-container");
  							this.children.forEach((function(t) {
  								t.render(n.length ? n : e)
  							}))
  						}
  						return this.callback && this.callback(e, this.options), this.options && this.options.callback && this.options.callback(e), t && t.append(e), e
  					}
  				}]) && a(e.prototype, n), o && a(e, o), t
  			}();
  			e.a = {
  				create: function(t, e) {
  					return function() {
  						var n = "object" === r(arguments[1]) ? arguments[1] : arguments[0],
  							o = Array.isArray(arguments[0]) ? arguments[0] : [];
  						return n && n.children && (o = n.children), new s(t, o, n, e)
  					}
  				}
  			}
  		},
  		2: function(t, e) {
  			(function(e) {
  				t.exports = e
  			}).call(this, {})
  		},
  		3: function(t, e, n) {
  			"use strict";
  			var o = n(0),
  				i = n.n(o);
  			i.a.summernote = i.a.summernote || {
  				lang: {}
  			}, i.a.extend(i.a.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, Vimeo, Vine, Instagram, DailyMotion or Youku)"
  					},
  					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",
  						useProtocol: "Use default protocol"
  					},
  					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!"
  					}
  				}
  			});
  			var r = "function" == typeof define && n(2),
  				a = ["sans-serif", "serif", "monospace", "cursive", "fantasy"];
  
  			function s(t) {
  				return -1 === i.a.inArray(t.toLowerCase(), a) ? "'".concat(t, "'") : t
  			}
  			var l, c = navigator.userAgent,
  				u = /MSIE|Trident/i.test(c);
  			if (u) {
  				var d = /MSIE (\d+[.]\d+)/.exec(c);
  				d && (l = parseFloat(d[1])), (d = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(c)) && (l = parseFloat(d[1]))
  			}
  			var h = /Edge\/\d+/.test(c),
  				f = "ontouchstart" in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0,
  				p = u ? "DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted" : "input",
  				m = {
  					isMac: navigator.appVersion.indexOf("Mac") > -1,
  					isMSIE: u,
  					isEdge: h,
  					isFF: !h && /firefox/i.test(c),
  					isPhantom: /PhantomJS/i.test(c),
  					isWebkit: !h && /webkit/i.test(c),
  					isChrome: !h && /chrome/i.test(c),
  					isSafari: !h && /safari/i.test(c) && !/chrome/i.test(c),
  					browserVersion: l,
  					jqueryVersion: parseFloat(i.a.fn.jquery),
  					isSupportAmd: r,
  					isSupportTouch: f,
  					isFontInstalled: function(t) {
  						var e = "Comic Sans MS" === t ? "Courier New" : "Comic Sans MS",
  							n = document.createElement("canvas").getContext("2d");
  						n.font = "200px '" + e + "'";
  						var o = n.measureText("mmmmmmmmmmwwwww").width;
  						return n.font = "200px " + s(t) + ', "' + e + '"', o !== n.measureText("mmmmmmmmmmwwwww").width
  					},
  					isW3CRangeSupport: !!document.createRange,
  					inputEventName: p,
  					genericFontFamilies: a,
  					validFontName: s
  				};
  			var v = 0;
  			var g = {
  				eq: function(t) {
  					return function(e) {
  						return t === e
  					}
  				},
  				eq2: function(t, e) {
  					return t === e
  				},
  				peq2: function(t) {
  					return function(e, n) {
  						return e[t] === n[t]
  					}
  				},
  				ok: function() {
  					return !0
  				},
  				fail: function() {
  					return !1
  				},
  				self: function(t) {
  					return t
  				},
  				not: function(t) {
  					return function() {
  						return !t.apply(t, arguments)
  					}
  				},
  				and: function(t, e) {
  					return function(n) {
  						return t(n) && e(n)
  					}
  				},
  				invoke: function(t, e) {
  					return function() {
  						return t[e].apply(t, arguments)
  					}
  				},
  				resetUniqueId: function() {
  					v = 0
  				},
  				uniqueId: function(t) {
  					var e = ++v + "";
  					return t ? t + e : e
  				},
  				rect2bnd: function(t) {
  					var e = i()(document);
  					return {
  						top: t.top + e.scrollTop(),
  						left: t.left + e.scrollLeft(),
  						width: t.right - t.left,
  						height: t.bottom - t.top
  					}
  				},
  				invertObject: function(t) {
  					var e = {};
  					for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[t[n]] = n);
  					return e
  				},
  				namespaceToCamel: function(t, e) {
  					return (e = e || "") + t.split(".").map((function(t) {
  						return t.substring(0, 1).toUpperCase() + t.substring(1)
  					})).join("")
  				},
  				debounce: function(t, e, n) {
  					var o;
  					return function() {
  						var i = this,
  							r = arguments,
  							a = function() {
  								o = null, n || t.apply(i, r)
  							},
  							s = n && !o;
  						clearTimeout(o), o = setTimeout(a, e), s && t.apply(i, r)
  					}
  				},
  				isValidUrl: function(t) {
  					return /[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gi.test(t)
  				}
  			};
  
  			function b(t) {
  				return t[0]
  			}
  
  			function y(t) {
  				return t[t.length - 1]
  			}
  
  			function k(t) {
  				return t.slice(1)
  			}
  
  			function w(t, e) {
  				if (t && t.length && e) {
  					if (t.indexOf) return -1 !== t.indexOf(e);
  					if (t.contains) return t.contains(e)
  				}
  				return !1
  			}
  			var C = {
  					head: b,
  					last: y,
  					initial: function(t) {
  						return t.slice(0, t.length - 1)
  					},
  					tail: k,
  					prev: function(t, e) {
  						if (t && t.length && e) {
  							var n = t.indexOf(e);
  							return -1 === n ? null : t[n - 1]
  						}
  						return null
  					},
  					next: function(t, e) {
  						if (t && t.length && e) {
  							var n = t.indexOf(e);
  							return -1 === n ? null : t[n + 1]
  						}
  						return null
  					},
  					find: function(t, e) {
  						for (var n = 0, o = t.length; n < o; n++) {
  							var i = t[n];
  							if (e(i)) return i
  						}
  					},
  					contains: w,
  					all: function(t, e) {
  						for (var n = 0, o = t.length; n < o; n++)
  							if (!e(t[n])) return !1;
  						return !0
  					},
  					sum: function(t, e) {
  						return e = e || g.self, t.reduce((function(t, n) {
  							return t + e(n)
  						}), 0)
  					},
  					from: function(t) {
  						for (var e = [], n = t.length, o = -1; ++o < n;) e[o] = t[o];
  						return e
  					},
  					isEmpty: function(t) {
  						return !t || !t.length
  					},
  					clusterBy: function(t, e) {
  						return t.length ? k(t).reduce((function(t, n) {
  							var o = y(t);
  							return e(y(o), n) ? o[o.length] = n : t[t.length] = [n], t
  						}), [
  							[b(t)]
  						]) : []
  					},
  					compact: function(t) {
  						for (var e = [], n = 0, o = t.length; n < o; n++) t[n] && e.push(t[n]);
  						return e
  					},
  					unique: function(t) {
  						for (var e = [], n = 0, o = t.length; n < o; n++) w(e, t[n]) || e.push(t[n]);
  						return e
  					}
  				},
  				x = String.fromCharCode(160);
  
  			function S(t) {
  				return t && i()(t).hasClass("note-editable")
  			}
  
  			function T(t) {
  				return t = t.toUpperCase(),
  					function(e) {
  						return e && e.nodeName.toUpperCase() === t
  					}
  			}
  
  			function E(t) {
  				return t && 3 === t.nodeType
  			}
  
  			function I(t) {
  				return t && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(t.nodeName.toUpperCase())
  			}
  
  			function $(t) {
  				return !S(t) && (t && /^DIV|^P|^LI|^H[1-7]/.test(t.nodeName.toUpperCase()))
  			}
  			var N = T("PRE"),
  				P = T("LI");
  			var R = T("TABLE"),
  				L = T("DATA");
  
  			function A(t) {
  				return !(B(t) || F(t) || D(t) || $(t) || R(t) || z(t) || L(t))
  			}
  
  			function F(t) {
  				return t && /^UL|^OL/.test(t.nodeName.toUpperCase())
  			}
  			var D = T("HR");
  
  			function H(t) {
  				return t && /^TD|^TH/.test(t.nodeName.toUpperCase())
  			}
  			var z = T("BLOCKQUOTE");
  
  			function B(t) {
  				return H(t) || z(t) || S(t)
  			}
  			var M = T("A");
  			var O = T("BODY");
  			var j = m.isMSIE && m.browserVersion < 11 ? "&nbsp;" : "<br>";
  
  			function U(t) {
  				return E(t) ? t.nodeValue.length : t ? t.childNodes.length : 0
  			}
  
  			function W(t) {
  				var e = U(t);
  				return 0 === e || (!E(t) && 1 === e && t.innerHTML === j || !(!C.all(t.childNodes, E) || "" !== t.innerHTML))
  			}
  
  			function K(t) {
  				I(t) || U(t) || (t.innerHTML = j)
  			}
  
  			function V(t, e) {
  				for (; t;) {
  					if (e(t)) return t;
  					if (S(t)) break;
  					t = t.parentNode
  				}
  				return null
  			}
  
  			function q(t, e) {
  				e = e || g.fail;
  				var n = [];
  				return V(t, (function(t) {
  					return S(t) || n.push(t), e(t)
  				})), n
  			}
  
  			function _(t, e) {
  				e = e || g.fail;
  				for (var n = []; t && !e(t);) n.push(t), t = t.nextSibling;
  				return n
  			}
  
  			function G(t, e) {
  				var n = e.nextSibling,
  					o = e.parentNode;
  				return n ? o.insertBefore(t, n) : o.appendChild(t), t
  			}
  
  			function Y(t, e) {
  				return i.a.each(e, (function(e, n) {
  					t.appendChild(n)
  				})), t
  			}
  
  			function Z(t) {
  				return 0 === t.offset
  			}
  
  			function X(t) {
  				return t.offset === U(t.node)
  			}
  
  			function Q(t) {
  				return Z(t) || X(t)
  			}
  
  			function J(t, e) {
  				for (; t && t !== e;) {
  					if (0 !== et(t)) return !1;
  					t = t.parentNode
  				}
  				return !0
  			}
  
  			function tt(t, e) {
  				if (!e) return !1;
  				for (; t && t !== e;) {
  					if (et(t) !== U(t.parentNode) - 1) return !1;
  					t = t.parentNode
  				}
  				return !0
  			}
  
  			function et(t) {
  				for (var e = 0; t = t.previousSibling;) e += 1;
  				return e
  			}
  
  			function nt(t) {
  				return !!(t && t.childNodes && t.childNodes.length)
  			}
  
  			function ot(t, e) {
  				var n, o;
  				if (0 === t.offset) {
  					if (S(t.node)) return null;
  					n = t.node.parentNode, o = et(t.node)
  				} else nt(t.node) ? o = U(n = t.node.childNodes[t.offset - 1]) : (n = t.node, o = e ? 0 : t.offset - 1);
  				return {
  					node: n,
  					offset: o
  				}
  			}
  
  			function it(t, e) {
  				var n, o;
  				if (U(t.node) === t.offset) {
  					if (S(t.node)) return null;
  					var i = at(t.node);
  					i ? (n = i, o = 0) : (n = t.node.parentNode, o = et(t.node) + 1)
  				} else nt(t.node) ? (n = t.node.childNodes[t.offset], o = 0) : (n = t.node, o = e ? U(t.node) : t.offset + 1);
  				return {
  					node: n,
  					offset: o
  				}
  			}
  
  			function rt(t, e) {
  				var n, o;
  				if (W(t.node)) return {
  					node: n = t.node.nextSibling,
  					offset: o = 0
  				};
  				if (U(t.node) === t.offset) {
  					if (S(t.node)) return null;
  					var i = at(t.node);
  					i ? (n = i, o = 0) : (n = t.node.parentNode, o = et(t.node) + 1), S(n) && (n = t.node.nextSibling, o = 0)
  				} else if (nt(t.node)) {
  					if (o = 0, W(n = t.node.childNodes[t.offset])) return null
  				} else if (n = t.node, o = e ? U(t.node) : t.offset + 1, W(n)) return null;
  				return {
  					node: n,
  					offset: o
  				}
  			}
  
  			function at(t) {
  				if (t.nextSibling && t.parent === t.nextSibling.parent) return E(t.nextSibling) ? t.nextSibling : at(t.nextSibling)
  			}
  
  			function st(t, e) {
  				return t.node === e.node && t.offset === e.offset
  			}
  
  			function lt(t, e) {
  				var n = e && e.isSkipPaddingBlankHTML,
  					o = e && e.isNotSplitEdgePoint,
  					i = e && e.isDiscardEmptySplits;
  				if (i && (n = !0), Q(t) && (E(t.node) || o)) {
  					if (Z(t)) return t.node;
  					if (X(t)) return t.node.nextSibling
  				}
  				if (E(t.node)) return t.node.splitText(t.offset);
  				var r = t.node.childNodes[t.offset],
  					a = G(t.node.cloneNode(!1), t.node);
  				return Y(a, _(r)), n || (K(t.node), K(a)), i && (W(t.node) && dt(t.node), W(a)) ? (dt(a), t.node.nextSibling) : a
  			}
  
  			function ct(t, e, n) {
  				var o = q(e.node, g.eq(t));
  				return o.length ? 1 === o.length ? lt(e, n) : o.reduce((function(t, o) {
  					return t === e.node && (t = lt(e, n)), lt({
  						node: o,
  						offset: t ? et(t) : U(o)
  					}, n)
  				})) : null
  			}
  
  			function ut(t) {
  				return document.createElement(t)
  			}
  
  			function dt(t, e) {
  				if (t && t.parentNode) {
  					if (t.removeNode) return t.removeNode(e);
  					var n = t.parentNode;
  					if (!e) {
  						for (var o = [], i = 0, r = t.childNodes.length; i < r; i++) o.push(t.childNodes[i]);
  						for (var a = 0, s = o.length; a < s; a++) n.insertBefore(o[a], t)
  					}
  					n.removeChild(t)
  				}
  			}
  			var ht = T("TEXTAREA");
  
  			function ft(t, e) {
  				var n = ht(t[0]) ? t.val() : t.html();
  				return e ? n.replace(/[\n\r]/g, "") : n
  			}
  			var pt = {
  				NBSP_CHAR: x,
  				ZERO_WIDTH_NBSP_CHAR: "\ufeff",
  				blank: j,
  				emptyPara: "<p>".concat(j, "</p>"),
  				makePredByNodeName: T,
  				isEditable: S,
  				isControlSizing: function(t) {
  					return t && i()(t).hasClass("note-control-sizing")
  				},
  				isText: E,
  				isElement: function(t) {
  					return t && 1 === t.nodeType
  				},
  				isVoid: I,
  				isPara: $,
  				isPurePara: function(t) {
  					return $(t) && !P(t)
  				},
  				isHeading: function(t) {
  					return t && /^H[1-7]/.test(t.nodeName.toUpperCase())
  				},
  				isInline: A,
  				isBlock: g.not(A),
  				isBodyInline: function(t) {
  					return A(t) && !V(t, $)
  				},
  				isBody: O,
  				isParaInline: function(t) {
  					return A(t) && !!V(t, $)
  				},
  				isPre: N,
  				isList: F,
  				isTable: R,
  				isData: L,
  				isCell: H,
  				isBlockquote: z,
  				isBodyContainer: B,
  				isAnchor: M,
  				isDiv: T("DIV"),
  				isLi: P,
  				isBR: T("BR"),
  				isSpan: T("SPAN"),
  				isB: T("B"),
  				isU: T("U"),
  				isS: T("S"),
  				isI: T("I"),
  				isImg: T("IMG"),
  				isTextarea: ht,
  				deepestChildIsEmpty: function(t) {
  					do {
  						if (null === t.firstElementChild || "" === t.firstElementChild.innerHTML) break
  					} while (t = t.firstElementChild);
  					return W(t)
  				},
  				isEmpty: W,
  				isEmptyAnchor: g.and(M, W),
  				isClosestSibling: function(t, e) {
  					return t.nextSibling === e || t.previousSibling === e
  				},
  				withClosestSiblings: function(t, e) {
  					e = e || g.ok;
  					var n = [];
  					return t.previousSibling && e(t.previousSibling) && n.push(t.previousSibling), n.push(t), t.nextSibling && e(t.nextSibling) && n.push(t.nextSibling), n
  				},
  				nodeLength: U,
  				isLeftEdgePoint: Z,
  				isRightEdgePoint: X,
  				isEdgePoint: Q,
  				isLeftEdgeOf: J,
  				isRightEdgeOf: tt,
  				isLeftEdgePointOf: function(t, e) {
  					return Z(t) && J(t.node, e)
  				},
  				isRightEdgePointOf: function(t, e) {
  					return X(t) && tt(t.node, e)
  				},
  				prevPoint: ot,
  				nextPoint: it,
  				nextPointWithEmptyNode: rt,
  				isSamePoint: st,
  				isVisiblePoint: function(t) {
  					if (E(t.node) || !nt(t.node) || W(t.node)) return !0;
  					var e = t.node.childNodes[t.offset - 1],
  						n = t.node.childNodes[t.offset];
  					return !(e && !I(e) || n && !I(n))
  				},
  				prevPointUntil: function(t, e) {
  					for (; t;) {
  						if (e(t)) return t;
  						t = ot(t)
  					}
  					return null
  				},
  				nextPointUntil: function(t, e) {
  					for (; t;) {
  						if (e(t)) return t;
  						t = it(t)
  					}
  					return null
  				},
  				isCharPoint: function(t) {
  					if (!E(t.node)) return !1;
  					var e = t.node.nodeValue.charAt(t.offset - 1);
  					return e && " " !== e && e !== x
  				},
  				isSpacePoint: function(t) {
  					if (!E(t.node)) return !1;
  					var e = t.node.nodeValue.charAt(t.offset - 1);
  					return " " === e || e === x
  				},
  				walkPoint: function(t, e, n, o) {
  					for (var i = t; i && (n(i), !st(i, e));) {
  						i = rt(i, o && t.node !== i.node && e.node !== i.node)
  					}
  				},
  				ancestor: V,
  				singleChildAncestor: function(t, e) {
  					for (t = t.parentNode; t && 1 === U(t);) {
  						if (e(t)) return t;
  						if (S(t)) break;
  						t = t.parentNode
  					}
  					return null
  				},
  				listAncestor: q,
  				lastAncestor: function(t, e) {
  					var n = q(t);
  					return C.last(n.filter(e))
  				},
  				listNext: _,
  				listPrev: function(t, e) {
  					e = e || g.fail;
  					for (var n = []; t && !e(t);) n.push(t), t = t.previousSibling;
  					return n
  				},
  				listDescendant: function(t, e) {
  					var n = [];
  					return e = e || g.ok,
  						function o(i) {
  							t !== i && e(i) && n.push(i);
  							for (var r = 0, a = i.childNodes.length; r < a; r++) o(i.childNodes[r])
  						}(t), n
  				},
  				commonAncestor: function(t, e) {
  					for (var n = q(t), o = e; o; o = o.parentNode)
  						if (n.indexOf(o) > -1) return o;
  					return null
  				},
  				wrap: function(t, e) {
  					var n = t.parentNode,
  						o = i()("<" + e + ">")[0];
  					return n.insertBefore(o, t), o.appendChild(t), o
  				},
  				insertAfter: G,
  				appendChildNodes: Y,
  				position: et,
  				hasChildren: nt,
  				makeOffsetPath: function(t, e) {
  					return q(e, g.eq(t)).map(et).reverse()
  				},
  				fromOffsetPath: function(t, e) {
  					for (var n = t, o = 0, i = e.length; o < i; o++) n = n.childNodes.length <= e[o] ? n.childNodes[n.childNodes.length - 1] : n.childNodes[e[o]];
  					return n
  				},
  				splitTree: ct,
  				splitPoint: function(t, e) {
  					var n, o, i = e ? $ : B,
  						r = q(t.node, i),
  						a = C.last(r) || t.node;
  					i(a) ? (n = r[r.length - 2], o = a) : o = (n = a).parentNode;
  					var s = n && ct(n, t, {
  						isSkipPaddingBlankHTML: e,
  						isNotSplitEdgePoint: e
  					});
  					return s || o !== t.node || (s = t.node.childNodes[t.offset]), {
  						rightNode: s,
  						container: o
  					}
  				},
  				create: ut,
  				createText: function(t) {
  					return document.createTextNode(t)
  				},
  				remove: dt,
  				removeWhile: function(t, e) {
  					for (; t && !S(t) && e(t);) {
  						var n = t.parentNode;
  						dt(t), t = n
  					}
  				},
  				replace: function(t, e) {
  					if (t.nodeName.toUpperCase() === e.toUpperCase()) return t;
  					var n = ut(e);
  					return t.style.cssText && (n.style.cssText = t.style.cssText), Y(n, C.from(t.childNodes)), G(n, t), dt(t), n
  				},
  				html: function(t, e) {
  					var n = ft(t);
  					if (e) {
  						n = (n = n.replace(/<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g, (function(t, e, n) {
  							n = n.toUpperCase();
  							var o = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(n) && !!e,
  								i = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(n);
  							return t + (o || i ? "\n" : "")
  						}))).trim()
  					}
  					return n
  				},
  				value: ft,
  				posFromPlaceholder: function(t) {
  					var e = i()(t),
  						n = e.offset(),
  						o = e.outerHeight(!0);
  					return {
  						left: n.left,
  						top: n.top + o
  					}
  				},
  				attachEvents: function(t, e) {
  					Object.keys(e).forEach((function(n) {
  						t.on(n, e[n])
  					}))
  				},
  				detachEvents: function(t, e) {
  					Object.keys(e).forEach((function(n) {
  						t.off(n, e[n])
  					}))
  				},
  				isCustomStyleTag: function(t) {
  					return t && !E(t) && C.contains(t.classList, "note-styletag")
  				}
  			};
  
  			function mt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var vt = function() {
  				function t(e, n) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.$note = e, this.memos = {}, this.modules = {}, this.layoutInfo = {}, this.options = i.a.extend(!0, {}, n), i.a.summernote.ui = i.a.summernote.ui_template(this.options), this.ui = i.a.summernote.ui, this.initialize()
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						return this.layoutInfo = this.ui.createLayout(this.$note), this._initialize(), this.$note.hide(), this
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this._destroy(), this.$note.removeData("summernote"), this.ui.removeLayout(this.$note, this.layoutInfo)
  					}
  				}, {
  					key: "reset",
  					value: function() {
  						var t = this.isDisabled();
  						this.code(pt.emptyPara), this._destroy(), this._initialize(), t && this.disable()
  					}
  				}, {
  					key: "_initialize",
  					value: function() {
  						var t = this;
  						this.options.id = g.uniqueId(i.a.now()), this.options.container = this.options.container || this.layoutInfo.editor;
  						var e = i.a.extend({}, this.options.buttons);
  						Object.keys(e).forEach((function(n) {
  							t.memo("button." + n, e[n])
  						}));
  						var n = i.a.extend({}, this.options.modules, i.a.summernote.plugins || {});
  						Object.keys(n).forEach((function(e) {
  							t.module(e, n[e], !0)
  						})), Object.keys(this.modules).forEach((function(e) {
  							t.initializeModule(e)
  						}))
  					}
  				}, {
  					key: "_destroy",
  					value: function() {
  						var t = this;
  						Object.keys(this.modules).reverse().forEach((function(e) {
  							t.removeModule(e)
  						})), Object.keys(this.memos).forEach((function(e) {
  							t.removeMemo(e)
  						})), this.triggerEvent("destroy", this)
  					}
  				}, {
  					key: "code",
  					value: function(t) {
  						var e = this.invoke("codeview.isActivated");
  						if (void 0 === t) return this.invoke("codeview.sync"), e ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();
  						e ? this.invoke("codeview.sync", t) : this.layoutInfo.editable.html(t), this.$note.val(t), this.triggerEvent("change", t, this.layoutInfo.editable)
  					}
  				}, {
  					key: "isDisabled",
  					value: function() {
  						return "false" === this.layoutInfo.editable.attr("contenteditable")
  					}
  				}, {
  					key: "enable",
  					value: function() {
  						this.layoutInfo.editable.attr("contenteditable", !0), this.invoke("toolbar.activate", !0), this.triggerEvent("disable", !1), this.options.editing = !0
  					}
  				}, {
  					key: "disable",
  					value: function() {
  						this.invoke("codeview.isActivated") && this.invoke("codeview.deactivate"), this.layoutInfo.editable.attr("contenteditable", !1), this.options.editing = !1, this.invoke("toolbar.deactivate", !0), this.triggerEvent("disable", !0)
  					}
  				}, {
  					key: "triggerEvent",
  					value: function() {
  						var t = C.head(arguments),
  							e = C.tail(C.from(arguments)),
  							n = this.options.callbacks[g.namespaceToCamel(t, "on")];
  						n && n.apply(this.$note[0], e), this.$note.trigger("summernote." + t, e)
  					}
  				}, {
  					key: "initializeModule",
  					value: function(t) {
  						var e = this.modules[t];
  						e.shouldInitialize = e.shouldInitialize || g.ok, e.shouldInitialize() && (e.initialize && e.initialize(), e.events && pt.attachEvents(this.$note, e.events))
  					}
  				}, {
  					key: "module",
  					value: function(t, e, n) {
  						if (1 === arguments.length) return this.modules[t];
  						this.modules[t] = new e(this), n || this.initializeModule(t)
  					}
  				}, {
  					key: "removeModule",
  					value: function(t) {
  						var e = this.modules[t];
  						e.shouldInitialize() && (e.events && pt.detachEvents(this.$note, e.events), e.destroy && e.destroy()), delete this.modules[t]
  					}
  				}, {
  					key: "memo",
  					value: function(t, e) {
  						if (1 === arguments.length) return this.memos[t];
  						this.memos[t] = e
  					}
  				}, {
  					key: "removeMemo",
  					value: function(t) {
  						this.memos[t] && this.memos[t].destroy && this.memos[t].destroy(), delete this.memos[t]
  					}
  				}, {
  					key: "createInvokeHandlerAndUpdateState",
  					value: function(t, e) {
  						var n = this;
  						return function(o) {
  							n.createInvokeHandler(t, e)(o), n.invoke("buttons.updateCurrentStyle")
  						}
  					}
  				}, {
  					key: "createInvokeHandler",
  					value: function(t, e) {
  						var n = this;
  						return function(o) {
  							o.preventDefault();
  							var r = i()(o.target);
  							n.invoke(t, e || r.closest("[data-value]").data("value"), r)
  						}
  					}
  				}, {
  					key: "invoke",
  					value: function() {
  						var t = C.head(arguments),
  							e = C.tail(C.from(arguments)),
  							n = t.split("."),
  							o = n.length > 1,
  							i = o && C.head(n),
  							r = o ? C.last(n) : C.head(n),
  							a = this.modules[i || "editor"];
  						return !i && this[r] ? this[r].apply(this, e) : a && a[r] && a.shouldInitialize() ? a[r].apply(a, e) : void 0
  					}
  				}]) && mt(e.prototype, n), o && mt(e, o), t
  			}();
  
  			function gt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  
  			function bt(t, e) {
  				var n, o, i = t.parentElement(),
  					r = document.body.createTextRange(),
  					a = C.from(i.childNodes);
  				for (n = 0; n < a.length; n++)
  					if (!pt.isText(a[n])) {
  						if (r.moveToElementText(a[n]), r.compareEndPoints("StartToStart", t) >= 0) break;
  						o = a[n]
  					}
  				if (0 !== n && pt.isText(a[n - 1])) {
  					var s = document.body.createTextRange(),
  						l = null;
  					s.moveToElementText(o || i), s.collapse(!o), l = o ? o.nextSibling : i.firstChild;
  					var c = t.duplicate();
  					c.setEndPoint("StartToStart", s);
  					for (var u = c.text.replace(/[\r\n]/g, "").length; u > l.nodeValue.length && l.nextSibling;) u -= l.nodeValue.length, l = l.nextSibling;
  					l.nodeValue;
  					e && l.nextSibling && pt.isText(l.nextSibling) && u === l.nodeValue.length && (u -= l.nodeValue.length, l = l.nextSibling), i = l, n = u
  				}
  				return {
  					cont: i,
  					offset: n
  				}
  			}
  
  			function yt(t) {
  				var e = document.body.createTextRange(),
  					n = function t(e, n) {
  						var o, i;
  						if (pt.isText(e)) {
  							var r = pt.listPrev(e, g.not(pt.isText)),
  								a = C.last(r).previousSibling;
  							o = a || e.parentNode, n += C.sum(C.tail(r), pt.nodeLength), i = !a
  						} else {
  							if (o = e.childNodes[n] || e, pt.isText(o)) return t(o, 0);
  							n = 0, i = !1
  						}
  						return {
  							node: o,
  							collapseToStart: i,
  							offset: n
  						}
  					}(t.node, t.offset);
  				return e.moveToElementText(n.node), e.collapse(n.collapseToStart), e.moveStart("character", n.offset), e
  			}
  			i.a.fn.extend({
  				summernote: function() {
  					var t = i.a.type(C.head(arguments)),
  						e = "string" === t,
  						n = "object" === t,
  						o = i.a.extend({}, i.a.summernote.options, n ? C.head(arguments) : {});
  					o.langInfo = i.a.extend(!0, {}, i.a.summernote.lang["en-US"], i.a.summernote.lang[o.lang]), o.icons = i.a.extend(!0, {}, i.a.summernote.options.icons, o.icons), o.tooltip = "auto" === o.tooltip ? !m.isSupportTouch : o.tooltip, this.each((function(t, e) {
  						var n = i()(e);
  						if (!n.data("summernote")) {
  							var r = new vt(n, o);
  							n.data("summernote", r), n.data("summernote").triggerEvent("init", r.layoutInfo)
  						}
  					}));
  					var r = this.first();
  					if (r.length) {
  						var a = r.data("summernote");
  						if (e) return a.invoke.apply(a, C.from(arguments));
  						o.focus && a.invoke("editor.focus")
  					}
  					return this
  				}
  			});
  			var kt = function() {
  					function t(e, n, o, i) {
  						! function(t, e) {
  							if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  						}(this, t), this.sc = e, this.so = n, this.ec = o, this.eo = i, this.isOnEditable = this.makeIsOn(pt.isEditable), this.isOnList = this.makeIsOn(pt.isList), this.isOnAnchor = this.makeIsOn(pt.isAnchor), this.isOnCell = this.makeIsOn(pt.isCell), this.isOnData = this.makeIsOn(pt.isData)
  					}
  					var e, n, o;
  					return e = t, (n = [{
  						key: "nativeRange",
  						value: function() {
  							if (m.isW3CRangeSupport) {
  								var t = document.createRange();
  								return t.setStart(this.sc, this.so), t.setEnd(this.ec, this.eo), t
  							}
  							var e = yt({
  								node: this.sc,
  								offset: this.so
  							});
  							return e.setEndPoint("EndToEnd", yt({
  								node: this.ec,
  								offset: this.eo
  							})), e
  						}
  					}, {
  						key: "getPoints",
  						value: function() {
  							return {
  								sc: this.sc,
  								so: this.so,
  								ec: this.ec,
  								eo: this.eo
  							}
  						}
  					}, {
  						key: "getStartPoint",
  						value: function() {
  							return {
  								node: this.sc,
  								offset: this.so
  							}
  						}
  					}, {
  						key: "getEndPoint",
  						value: function() {
  							return {
  								node: this.ec,
  								offset: this.eo
  							}
  						}
  					}, {
  						key: "select",
  						value: function() {
  							var t = this.nativeRange();
  							if (m.isW3CRangeSupport) {
  								var e = document.getSelection();
  								e.rangeCount > 0 && e.removeAllRanges(), e.addRange(t)
  							} else t.select();
  							return this
  						}
  					}, {
  						key: "scrollIntoView",
  						value: function(t) {
  							var e = i()(t).height();
  							return t.scrollTop + e < this.sc.offsetTop && (t.scrollTop += Math.abs(t.scrollTop + e - this.sc.offsetTop)), this
  						}
  					}, {
  						key: "normalize",
  						value: function() {
  							var e = function(t, e) {
  									if (!t) return t;
  									if (pt.isVisiblePoint(t) && (!pt.isEdgePoint(t) || pt.isRightEdgePoint(t) && !e || pt.isLeftEdgePoint(t) && e || pt.isRightEdgePoint(t) && e && pt.isVoid(t.node.nextSibling) || pt.isLeftEdgePoint(t) && !e && pt.isVoid(t.node.previousSibling) || pt.isBlock(t.node) && pt.isEmpty(t.node))) return t;
  									var n = pt.ancestor(t.node, pt.isBlock),
  										o = !1;
  									if (!o) {
  										var i = pt.prevPoint(t) || {
  											node: null
  										};
  										o = (pt.isLeftEdgePointOf(t, n) || pt.isVoid(i.node)) && !e
  									}
  									var r = !1;
  									if (!r) {
  										var a = pt.nextPoint(t) || {
  											node: null
  										};
  										r = (pt.isRightEdgePointOf(t, n) || pt.isVoid(a.node)) && e
  									}
  									if (o || r) {
  										if (pt.isVisiblePoint(t)) return t;
  										e = !e
  									}
  									return (e ? pt.nextPointUntil(pt.nextPoint(t), pt.isVisiblePoint) : pt.prevPointUntil(pt.prevPoint(t), pt.isVisiblePoint)) || t
  								},
  								n = e(this.getEndPoint(), !1),
  								o = this.isCollapsed() ? n : e(this.getStartPoint(), !0);
  							return new t(o.node, o.offset, n.node, n.offset)
  						}
  					}, {
  						key: "nodes",
  						value: function(t, e) {
  							t = t || g.ok;
  							var n = e && e.includeAncestor,
  								o = e && e.fullyContains,
  								i = this.getStartPoint(),
  								r = this.getEndPoint(),
  								a = [],
  								s = [];
  							return pt.walkPoint(i, r, (function(e) {
  								var i;
  								pt.isEditable(e.node) || (o ? (pt.isLeftEdgePoint(e) && s.push(e.node), pt.isRightEdgePoint(e) && C.contains(s, e.node) && (i = e.node)) : i = n ? pt.ancestor(e.node, t) : e.node, i && t(i) && a.push(i))
  							}), !0), C.unique(a)
  						}
  					}, {
  						key: "commonAncestor",
  						value: function() {
  							return pt.commonAncestor(this.sc, this.ec)
  						}
  					}, {
  						key: "expand",
  						value: function(e) {
  							var n = pt.ancestor(this.sc, e),
  								o = pt.ancestor(this.ec, e);
  							if (!n && !o) return new t(this.sc, this.so, this.ec, this.eo);
  							var i = this.getPoints();
  							return n && (i.sc = n, i.so = 0), o && (i.ec = o, i.eo = pt.nodeLength(o)), new t(i.sc, i.so, i.ec, i.eo)
  						}
  					}, {
  						key: "collapse",
  						value: function(e) {
  							return e ? new t(this.sc, this.so, this.sc, this.so) : new t(this.ec, this.eo, this.ec, this.eo)
  						}
  					}, {
  						key: "splitText",
  						value: function() {
  							var e = this.sc === this.ec,
  								n = this.getPoints();
  							return pt.isText(this.ec) && !pt.isEdgePoint(this.getEndPoint()) && this.ec.splitText(this.eo), pt.isText(this.sc) && !pt.isEdgePoint(this.getStartPoint()) && (n.sc = this.sc.splitText(this.so), n.so = 0, e && (n.ec = n.sc, n.eo = this.eo - this.so)), new t(n.sc, n.so, n.ec, n.eo)
  						}
  					}, {
  						key: "deleteContents",
  						value: function() {
  							if (this.isCollapsed()) return this;
  							var e = this.splitText(),
  								n = e.nodes(null, {
  									fullyContains: !0
  								}),
  								o = pt.prevPointUntil(e.getStartPoint(), (function(t) {
  									return !C.contains(n, t.node)
  								})),
  								r = [];
  							return i.a.each(n, (function(t, e) {
  								var n = e.parentNode;
  								o.node !== n && 1 === pt.nodeLength(n) && r.push(n), pt.remove(e, !1)
  							})), i.a.each(r, (function(t, e) {
  								pt.remove(e, !1)
  							})), new t(o.node, o.offset, o.node, o.offset).normalize()
  						}
  					}, {
  						key: "makeIsOn",
  						value: function(t) {
  							return function() {
  								var e = pt.ancestor(this.sc, t);
  								return !!e && e === pt.ancestor(this.ec, t)
  							}
  						}
  					}, {
  						key: "isLeftEdgeOf",
  						value: function(t) {
  							if (!pt.isLeftEdgePoint(this.getStartPoint())) return !1;
  							var e = pt.ancestor(this.sc, t);
  							return e && pt.isLeftEdgeOf(this.sc, e)
  						}
  					}, {
  						key: "isCollapsed",
  						value: function() {
  							return this.sc === this.ec && this.so === this.eo
  						}
  					}, {
  						key: "wrapBodyInlineWithPara",
  						value: function() {
  							if (pt.isBodyContainer(this.sc) && pt.isEmpty(this.sc)) return this.sc.innerHTML = pt.emptyPara, new t(this.sc.firstChild, 0, this.sc.firstChild, 0);
  							var e, n = this.normalize();
  							if (pt.isParaInline(this.sc) || pt.isPara(this.sc)) return n;
  							if (pt.isInline(n.sc)) {
  								var o = pt.listAncestor(n.sc, g.not(pt.isInline));
  								e = C.last(o), pt.isInline(e) || (e = o[o.length - 2] || n.sc.childNodes[n.so])
  							} else e = n.sc.childNodes[n.so > 0 ? n.so - 1 : 0];
  							if (e) {
  								var i = pt.listPrev(e, pt.isParaInline).reverse();
  								if ((i = i.concat(pt.listNext(e.nextSibling, pt.isParaInline))).length) {
  									var r = pt.wrap(C.head(i), "p");
  									pt.appendChildNodes(r, C.tail(i))
  								}
  							}
  							return this.normalize()
  						}
  					}, {
  						key: "insertNode",
  						value: function(t) {
  							var e = this;
  							(pt.isText(t) || pt.isInline(t)) && (e = this.wrapBodyInlineWithPara().deleteContents());
  							var n = pt.splitPoint(e.getStartPoint(), pt.isInline(t));
  							return n.rightNode ? (n.rightNode.parentNode.insertBefore(t, n.rightNode), pt.isEmpty(n.rightNode) && pt.isPara(t) && n.rightNode.parentNode.removeChild(n.rightNode)) : n.container.appendChild(t), t
  						}
  					}, {
  						key: "pasteHTML",
  						value: function(t) {
  							t = i.a.trim(t);
  							var e = i()("<div></div>").html(t)[0],
  								n = C.from(e.childNodes),
  								o = this,
  								r = !1;
  							return o.so >= 0 && (n = n.reverse(), r = !0), n = n.map((function(t) {
  								return o.insertNode(t)
  							})), r && (n = n.reverse()), n
  						}
  					}, {
  						key: "toString",
  						value: function() {
  							var t = this.nativeRange();
  							return m.isW3CRangeSupport ? t.toString() : t.text
  						}
  					}, {
  						key: "getWordRange",
  						value: function(e) {
  							var n = this.getEndPoint();
  							if (!pt.isCharPoint(n)) return this;
  							var o = pt.prevPointUntil(n, (function(t) {
  								return !pt.isCharPoint(t)
  							}));
  							return e && (n = pt.nextPointUntil(n, (function(t) {
  								return !pt.isCharPoint(t)
  							}))), new t(o.node, o.offset, n.node, n.offset)
  						}
  					}, {
  						key: "getWordsRange",
  						value: function(e) {
  							var n = this.getEndPoint(),
  								o = function(t) {
  									return !pt.isCharPoint(t) && !pt.isSpacePoint(t)
  								};
  							if (o(n)) return this;
  							var i = pt.prevPointUntil(n, o);
  							return e && (n = pt.nextPointUntil(n, o)), new t(i.node, i.offset, n.node, n.offset)
  						}
  					}, {
  						key: "getWordsMatchRange",
  						value: function(e) {
  							var n = this.getEndPoint(),
  								o = pt.prevPointUntil(n, (function(o) {
  									if (!pt.isCharPoint(o) && !pt.isSpacePoint(o)) return !0;
  									var i = new t(o.node, o.offset, n.node, n.offset),
  										r = e.exec(i.toString());
  									return r && 0 === r.index
  								})),
  								i = new t(o.node, o.offset, n.node, n.offset),
  								r = i.toString(),
  								a = e.exec(r);
  							return a && a[0].length === r.length ? i : null
  						}
  					}, {
  						key: "bookmark",
  						value: function(t) {
  							return {
  								s: {
  									path: pt.makeOffsetPath(t, this.sc),
  									offset: this.so
  								},
  								e: {
  									path: pt.makeOffsetPath(t, this.ec),
  									offset: this.eo
  								}
  							}
  						}
  					}, {
  						key: "paraBookmark",
  						value: function(t) {
  							return {
  								s: {
  									path: C.tail(pt.makeOffsetPath(C.head(t), this.sc)),
  									offset: this.so
  								},
  								e: {
  									path: C.tail(pt.makeOffsetPath(C.last(t), this.ec)),
  									offset: this.eo
  								}
  							}
  						}
  					}, {
  						key: "getClientRects",
  						value: function() {
  							return this.nativeRange().getClientRects()
  						}
  					}]) && gt(e.prototype, n), o && gt(e, o), t
  				}(),
  				wt = {
  					create: function(t, e, n, o) {
  						if (4 === arguments.length) return new kt(t, e, n, o);
  						if (2 === arguments.length) return new kt(t, e, n = t, o = e);
  						var i = this.createFromSelection();
  						if (!i && 1 === arguments.length) {
  							var r = arguments[0];
  							return pt.isEditable(r) && (r = r.lastChild), this.createFromBodyElement(r, pt.emptyPara === arguments[0].innerHTML)
  						}
  						return i
  					},
  					createFromBodyElement: function(t) {
  						var e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],
  							n = this.createFromNode(t);
  						return n.collapse(e)
  					},
  					createFromSelection: function() {
  						var t, e, n, o;
  						if (m.isW3CRangeSupport) {
  							var i = document.getSelection();
  							if (!i || 0 === i.rangeCount) return null;
  							if (pt.isBody(i.anchorNode)) return null;
  							var r = i.getRangeAt(0);
  							t = r.startContainer, e = r.startOffset, n = r.endContainer, o = r.endOffset
  						} else {
  							var a = document.selection.createRange(),
  								s = a.duplicate();
  							s.collapse(!1);
  							var l = a;
  							l.collapse(!0);
  							var c = bt(l, !0),
  								u = bt(s, !1);
  							pt.isText(c.node) && pt.isLeftEdgePoint(c) && pt.isTextNode(u.node) && pt.isRightEdgePoint(u) && u.node.nextSibling === c.node && (c = u), t = c.cont, e = c.offset, n = u.cont, o = u.offset
  						}
  						return new kt(t, e, n, o)
  					},
  					createFromNode: function(t) {
  						var e = t,
  							n = 0,
  							o = t,
  							i = pt.nodeLength(o);
  						return pt.isVoid(e) && (n = pt.listPrev(e).length - 1, e = e.parentNode), pt.isBR(o) ? (i = pt.listPrev(o).length - 1, o = o.parentNode) : pt.isVoid(o) && (i = pt.listPrev(o).length, o = o.parentNode), this.create(e, n, o, i)
  					},
  					createFromNodeBefore: function(t) {
  						return this.createFromNode(t).collapse(!0)
  					},
  					createFromNodeAfter: function(t) {
  						return this.createFromNode(t).collapse()
  					},
  					createFromBookmark: function(t, e) {
  						var n = pt.fromOffsetPath(t, e.s.path),
  							o = e.s.offset,
  							i = pt.fromOffsetPath(t, e.e.path),
  							r = e.e.offset;
  						return new kt(n, o, i, r)
  					},
  					createFromParaBookmark: function(t, e) {
  						var n = t.s.offset,
  							o = t.e.offset,
  							i = pt.fromOffsetPath(C.head(e), t.s.path),
  							r = pt.fromOffsetPath(C.last(e), t.e.path);
  						return new kt(i, n, r, o)
  					}
  				},
  				Ct = {
  					BACKSPACE: 8,
  					TAB: 9,
  					ENTER: 13,
  					ESCAPE: 27,
  					SPACE: 32,
  					DELETE: 46,
  					LEFT: 37,
  					UP: 38,
  					RIGHT: 39,
  					DOWN: 40,
  					NUM0: 48,
  					NUM1: 49,
  					NUM2: 50,
  					NUM3: 51,
  					NUM4: 52,
  					NUM5: 53,
  					NUM6: 54,
  					NUM7: 55,
  					NUM8: 56,
  					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,
  					HOME: 36,
  					END: 35,
  					PAGEUP: 33,
  					PAGEDOWN: 34
  				},
  				xt = {
  					isEdit: function(t) {
  						return C.contains([Ct.BACKSPACE, Ct.TAB, Ct.ENTER, Ct.SPACE, Ct.DELETE], t)
  					},
  					isMove: function(t) {
  						return C.contains([Ct.LEFT, Ct.UP, Ct.RIGHT, Ct.DOWN], t)
  					},
  					isNavigation: function(t) {
  						return C.contains([Ct.HOME, Ct.END, Ct.PAGEUP, Ct.PAGEDOWN], t)
  					},
  					nameFromCode: g.invertObject(Ct),
  					code: Ct
  				};
  
  			function St(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Tt = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.stack = [], this.stackOffset = -1, this.context = e, this.$editable = e.layoutInfo.editable, this.editable = this.$editable[0]
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "makeSnapshot",
  					value: function() {
  						var t = wt.create(this.editable);
  						return {
  							contents: this.$editable.html(),
  							bookmark: t && t.isOnEditable() ? t.bookmark(this.editable) : {
  								s: {
  									path: [],
  									offset: 0
  								},
  								e: {
  									path: [],
  									offset: 0
  								}
  							}
  						}
  					}
  				}, {
  					key: "applySnapshot",
  					value: function(t) {
  						null !== t.contents && this.$editable.html(t.contents), null !== t.bookmark && wt.createFromBookmark(this.editable, t.bookmark).select()
  					}
  				}, {
  					key: "rewind",
  					value: function() {
  						this.$editable.html() !== this.stack[this.stackOffset].contents && this.recordUndo(), this.stackOffset = 0, this.applySnapshot(this.stack[this.stackOffset])
  					}
  				}, {
  					key: "commit",
  					value: function() {
  						this.stack = [], this.stackOffset = -1, this.recordUndo()
  					}
  				}, {
  					key: "reset",
  					value: function() {
  						this.stack = [], this.stackOffset = -1, this.$editable.html(""), this.recordUndo()
  					}
  				}, {
  					key: "undo",
  					value: function() {
  						this.$editable.html() !== this.stack[this.stackOffset].contents && this.recordUndo(), this.stackOffset > 0 && (this.stackOffset--, this.applySnapshot(this.stack[this.stackOffset]))
  					}
  				}, {
  					key: "redo",
  					value: function() {
  						this.stack.length - 1 > this.stackOffset && (this.stackOffset++, this.applySnapshot(this.stack[this.stackOffset]))
  					}
  				}, {
  					key: "recordUndo",
  					value: function() {
  						this.stackOffset++, this.stack.length > this.stackOffset && (this.stack = this.stack.slice(0, this.stackOffset)), this.stack.push(this.makeSnapshot()), this.stack.length > this.context.options.historyLimit && (this.stack.shift(), this.stackOffset -= 1)
  					}
  				}]) && St(e.prototype, n), o && St(e, o), t
  			}();
  
  			function Et(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var It = function() {
  				function t() {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t)
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "jQueryCSS",
  					value: function(t, e) {
  						if (m.jqueryVersion < 1.9) {
  							var n = {};
  							return i.a.each(e, (function(e, o) {
  								n[o] = t.css(o)
  							})), n
  						}
  						return t.css(e)
  					}
  				}, {
  					key: "fromNode",
  					value: function(t) {
  						var e = this.jQueryCSS(t, ["font-family", "font-size", "text-align", "list-style-type", "line-height"]) || {},
  							n = t[0].style.fontSize || e["font-size"];
  						return e["font-size"] = parseInt(n, 10), e["font-size-unit"] = n.match(/[a-z%]+$/), e
  					}
  				}, {
  					key: "stylePara",
  					value: function(t, e) {
  						i.a.each(t.nodes(pt.isPara, {
  							includeAncestor: !0
  						}), (function(t, n) {
  							i()(n).css(e)
  						}))
  					}
  				}, {
  					key: "styleNodes",
  					value: function(t, e) {
  						t = t.splitText();
  						var n = e && e.nodeName || "SPAN",
  							o = !(!e || !e.expandClosestSibling),
  							r = !(!e || !e.onlyPartialContains);
  						if (t.isCollapsed()) return [t.insertNode(pt.create(n))];
  						var a = pt.makePredByNodeName(n),
  							s = t.nodes(pt.isText, {
  								fullyContains: !0
  							}).map((function(t) {
  								return pt.singleChildAncestor(t, a) || pt.wrap(t, n)
  							}));
  						if (o) {
  							if (r) {
  								var l = t.nodes();
  								a = g.and(a, (function(t) {
  									return C.contains(l, t)
  								}))
  							}
  							return s.map((function(t) {
  								var e = pt.withClosestSiblings(t, a),
  									n = C.head(e),
  									o = C.tail(e);
  								return i.a.each(o, (function(t, e) {
  									pt.appendChildNodes(n, e.childNodes), pt.remove(e)
  								})), C.head(e)
  							}))
  						}
  						return s
  					}
  				}, {
  					key: "current",
  					value: function(t) {
  						var e = i()(pt.isElement(t.sc) ? t.sc : t.sc.parentNode),
  							n = this.fromNode(e);
  						try {
  							n = i.a.extend(n, {
  								"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") || n["font-family"]
  							})
  						} catch (t) {}
  						if (t.isOnList()) {
  							var o = ["circle", "disc", "disc-leading-zero", "square"].indexOf(n["list-style-type"]) > -1;
  							n["list-style"] = o ? "unordered" : "ordered"
  						} else n["list-style"] = "none";
  						var r = pt.ancestor(t.sc, pt.isPara);
  						if (r && r.style["line-height"]) n["line-height"] = r.style.lineHeight;
  						else {
  							var a = parseInt(n["line-height"], 10) / parseInt(n["font-size"], 10);
  							n["line-height"] = a.toFixed(1)
  						}
  						return n.anchor = t.isOnAnchor() && pt.ancestor(t.sc, pt.isAnchor), n.ancestors = pt.listAncestor(t.sc, pt.isEditable), n.range = t, n
  					}
  				}]) && Et(e.prototype, n), o && Et(e, o), t
  			}();
  
  			function $t(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Nt = function() {
  				function t() {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t)
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "insertOrderedList",
  					value: function(t) {
  						this.toggleList("OL", t)
  					}
  				}, {
  					key: "insertUnorderedList",
  					value: function(t) {
  						this.toggleList("UL", t)
  					}
  				}, {
  					key: "indent",
  					value: function(t) {
  						var e = this,
  							n = wt.create(t).wrapBodyInlineWithPara(),
  							o = n.nodes(pt.isPara, {
  								includeAncestor: !0
  							}),
  							r = C.clusterBy(o, g.peq2("parentNode"));
  						i.a.each(r, (function(t, n) {
  							var o = C.head(n);
  							if (pt.isLi(o)) {
  								var r = e.findList(o.previousSibling);
  								r ? n.map((function(t) {
  									return r.appendChild(t)
  								})) : (e.wrapList(n, o.parentNode.nodeName), n.map((function(t) {
  									return t.parentNode
  								})).map((function(t) {
  									return e.appendToPrevious(t)
  								})))
  							} else i.a.each(n, (function(t, e) {
  								i()(e).css("marginLeft", (function(t, e) {
  									return (parseInt(e, 10) || 0) + 25
  								}))
  							}))
  						})), n.select()
  					}
  				}, {
  					key: "outdent",
  					value: function(t) {
  						var e = this,
  							n = wt.create(t).wrapBodyInlineWithPara(),
  							o = n.nodes(pt.isPara, {
  								includeAncestor: !0
  							}),
  							r = C.clusterBy(o, g.peq2("parentNode"));
  						i.a.each(r, (function(t, n) {
  							var o = C.head(n);
  							pt.isLi(o) ? e.releaseList([n]) : i.a.each(n, (function(t, e) {
  								i()(e).css("marginLeft", (function(t, e) {
  									return (e = parseInt(e, 10) || 0) > 25 ? e - 25 : ""
  								}))
  							}))
  						})), n.select()
  					}
  				}, {
  					key: "toggleList",
  					value: function(t, e) {
  						var n = this,
  							o = wt.create(e).wrapBodyInlineWithPara(),
  							r = o.nodes(pt.isPara, {
  								includeAncestor: !0
  							}),
  							a = o.paraBookmark(r),
  							s = C.clusterBy(r, g.peq2("parentNode"));
  						if (C.find(r, pt.isPurePara)) {
  							var l = [];
  							i.a.each(s, (function(e, o) {
  								l = l.concat(n.wrapList(o, t))
  							})), r = l
  						} else {
  							var c = o.nodes(pt.isList, {
  								includeAncestor: !0
  							}).filter((function(e) {
  								return !i.a.nodeName(e, t)
  							}));
  							c.length ? i.a.each(c, (function(e, n) {
  								pt.replace(n, t)
  							})) : r = this.releaseList(s, !0)
  						}
  						wt.createFromParaBookmark(a, r).select()
  					}
  				}, {
  					key: "wrapList",
  					value: function(t, e) {
  						var n = C.head(t),
  							o = C.last(t),
  							i = pt.isList(n.previousSibling) && n.previousSibling,
  							r = pt.isList(o.nextSibling) && o.nextSibling,
  							a = i || pt.insertAfter(pt.create(e || "UL"), o);
  						return t = t.map((function(t) {
  							return pt.isPurePara(t) ? pt.replace(t, "LI") : t
  						})), pt.appendChildNodes(a, t), r && (pt.appendChildNodes(a, C.from(r.childNodes)), pt.remove(r)), t
  					}
  				}, {
  					key: "releaseList",
  					value: function(t, e) {
  						var n = this,
  							o = [];
  						return i.a.each(t, (function(t, r) {
  							var a = C.head(r),
  								s = C.last(r),
  								l = e ? pt.lastAncestor(a, pt.isList) : a.parentNode,
  								c = l.parentNode;
  							if ("LI" === l.parentNode.nodeName) r.map((function(t) {
  								var e = n.findNextSiblings(t);
  								c.nextSibling ? c.parentNode.insertBefore(t, c.nextSibling) : c.parentNode.appendChild(t), e.length && (n.wrapList(e, l.nodeName), t.appendChild(e[0].parentNode))
  							})), 0 === l.children.length && c.removeChild(l), 0 === c.childNodes.length && c.parentNode.removeChild(c);
  							else {
  								var u = l.childNodes.length > 1 ? pt.splitTree(l, {
  										node: s.parentNode,
  										offset: pt.position(s) + 1
  									}, {
  										isSkipPaddingBlankHTML: !0
  									}) : null,
  									d = pt.splitTree(l, {
  										node: a.parentNode,
  										offset: pt.position(a)
  									}, {
  										isSkipPaddingBlankHTML: !0
  									});
  								r = e ? pt.listDescendant(d, pt.isLi) : C.from(d.childNodes).filter(pt.isLi), !e && pt.isList(l.parentNode) || (r = r.map((function(t) {
  									return pt.replace(t, "P")
  								}))), i.a.each(C.from(r).reverse(), (function(t, e) {
  									pt.insertAfter(e, l)
  								}));
  								var h = C.compact([l, d, u]);
  								i.a.each(h, (function(t, e) {
  									var n = [e].concat(pt.listDescendant(e, pt.isList));
  									i.a.each(n.reverse(), (function(t, e) {
  										pt.nodeLength(e) || pt.remove(e, !0)
  									}))
  								}))
  							}
  							o = o.concat(r)
  						})), o
  					}
  				}, {
  					key: "appendToPrevious",
  					value: function(t) {
  						return t.previousSibling ? pt.appendChildNodes(t.previousSibling, [t]) : this.wrapList([t], "LI")
  					}
  				}, {
  					key: "findList",
  					value: function(t) {
  						return t ? C.find(t.children, (function(t) {
  							return ["OL", "UL"].indexOf(t.nodeName) > -1
  						})) : null
  					}
  				}, {
  					key: "findNextSiblings",
  					value: function(t) {
  						for (var e = []; t.nextSibling;) e.push(t.nextSibling), t = t.nextSibling;
  						return e
  					}
  				}]) && $t(e.prototype, n), o && $t(e, o), t
  			}();
  
  			function Pt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Rt = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.bullet = new Nt, this.options = e.options
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "insertTab",
  					value: function(t, e) {
  						var n = pt.createText(new Array(e + 1).join(pt.NBSP_CHAR));
  						(t = t.deleteContents()).insertNode(n, !0), (t = wt.create(n, e)).select()
  					}
  				}, {
  					key: "insertParagraph",
  					value: function(t, e) {
  						e = (e = (e = e || wt.create(t)).deleteContents()).wrapBodyInlineWithPara();
  						var n, o = pt.ancestor(e.sc, pt.isPara);
  						if (o) {
  							if (pt.isLi(o) && (pt.isEmpty(o) || pt.deepestChildIsEmpty(o))) return void this.bullet.toggleList(o.parentNode.nodeName);
  							var r = null;
  							if (1 === this.options.blockquoteBreakingLevel ? r = pt.ancestor(o, pt.isBlockquote) : 2 === this.options.blockquoteBreakingLevel && (r = pt.lastAncestor(o, pt.isBlockquote)), r) {
  								n = i()(pt.emptyPara)[0], pt.isRightEdgePoint(e.getStartPoint()) && pt.isBR(e.sc.nextSibling) && i()(e.sc.nextSibling).remove();
  								var a = pt.splitTree(r, e.getStartPoint(), {
  									isDiscardEmptySplits: !0
  								});
  								a ? a.parentNode.insertBefore(n, a) : pt.insertAfter(n, r)
  							} else {
  								n = pt.splitTree(o, e.getStartPoint());
  								var s = pt.listDescendant(o, pt.isEmptyAnchor);
  								s = s.concat(pt.listDescendant(n, pt.isEmptyAnchor)), i.a.each(s, (function(t, e) {
  									pt.remove(e)
  								})), (pt.isHeading(n) || pt.isPre(n) || pt.isCustomStyleTag(n)) && pt.isEmpty(n) && (n = pt.replace(n, "p"))
  							}
  						} else {
  							var l = e.sc.childNodes[e.so];
  							n = i()(pt.emptyPara)[0], l ? e.sc.insertBefore(n, l) : e.sc.appendChild(n)
  						}
  						wt.create(n, 0).normalize().select().scrollIntoView(t)
  					}
  				}]) && Pt(e.prototype, n), o && Pt(e, o), t
  			}();
  
  			function Lt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var At = function t(e, n, o, i) {
  				var r = {
  						colPos: 0,
  						rowPos: 0
  					},
  					a = [],
  					s = [];
  
  				function l(t, e, n, o, i, r, s) {
  					var l = {
  						baseRow: n,
  						baseCell: o,
  						isRowSpan: i,
  						isColSpan: r,
  						isVirtual: s
  					};
  					a[t] || (a[t] = []), a[t][e] = l
  				}
  
  				function c(t, e, n, o) {
  					return {
  						baseCell: t.baseCell,
  						action: e,
  						virtualTable: {
  							rowIndex: n,
  							cellIndex: o
  						}
  					}
  				}
  
  				function u(t, e) {
  					if (!a[t]) return e;
  					if (!a[t][e]) return e;
  					for (var n = e; a[t][n];)
  						if (n++, !a[t][n]) return n
  				}
  
  				function d(t, e) {
  					var n = u(t.rowIndex, e.cellIndex),
  						o = e.colSpan > 1,
  						i = e.rowSpan > 1,
  						a = t.rowIndex === r.rowPos && e.cellIndex === r.colPos;
  					l(t.rowIndex, n, t, e, i, o, !1);
  					var s = e.attributes.rowSpan ? parseInt(e.attributes.rowSpan.value, 10) : 0;
  					if (s > 1)
  						for (var c = 1; c < s; c++) {
  							var d = t.rowIndex + c;
  							h(d, n, e, a), l(d, n, t, e, !0, o, !0)
  						}
  					var f = e.attributes.colSpan ? parseInt(e.attributes.colSpan.value, 10) : 0;
  					if (f > 1)
  						for (var p = 1; p < f; p++) {
  							var m = u(t.rowIndex, n + p);
  							h(t.rowIndex, m, e, a), l(t.rowIndex, m, t, e, i, !0, !0)
  						}
  				}
  
  				function h(t, e, n, o) {
  					t === r.rowPos && r.colPos >= n.cellIndex && n.cellIndex <= e && !o && r.colPos++
  				}
  
  				function f(e) {
  					switch (n) {
  						case t.where.Column:
  							if (e.isColSpan) return t.resultAction.SubtractSpanCount;
  							break;
  						case t.where.Row:
  							if (!e.isVirtual && e.isRowSpan) return t.resultAction.AddCell;
  							if (e.isRowSpan) return t.resultAction.SubtractSpanCount
  					}
  					return t.resultAction.RemoveCell
  				}
  
  				function p(e) {
  					switch (n) {
  						case t.where.Column:
  							if (e.isColSpan) return t.resultAction.SumSpanCount;
  							if (e.isRowSpan && e.isVirtual) return t.resultAction.Ignore;
  							break;
  						case t.where.Row:
  							if (e.isRowSpan) return t.resultAction.SumSpanCount;
  							if (e.isColSpan && e.isVirtual) return t.resultAction.Ignore
  					}
  					return t.resultAction.AddCell
  				}
  				this.getActionList = function() {
  						for (var e = n === t.where.Row ? r.rowPos : -1, i = n === t.where.Column ? r.colPos : -1, l = 0, u = !0; u;) {
  							var d = e >= 0 ? e : l,
  								h = i >= 0 ? i : l,
  								m = a[d];
  							if (!m) return u = !1, s;
  							var v = m[h];
  							if (!v) return u = !1, s;
  							var g = t.resultAction.Ignore;
  							switch (o) {
  								case t.requestAction.Add:
  									g = p(v);
  									break;
  								case t.requestAction.Delete:
  									g = f(v)
  							}
  							s.push(c(v, g, d, h)), l++
  						}
  						return s
  					}, e && e.tagName && ("td" === e.tagName.toLowerCase() || "th" === e.tagName.toLowerCase()) && (r.colPos = e.cellIndex, e.parentElement && e.parentElement.tagName && "tr" === e.parentElement.tagName.toLowerCase() && (r.rowPos = e.parentElement.rowIndex)),
  					function() {
  						for (var t = i.rows, e = 0; e < t.length; e++)
  							for (var n = t[e].cells, o = 0; o < n.length; o++) d(t[e], n[o])
  					}()
  			};
  			At.where = {
  				Row: 0,
  				Column: 1
  			}, At.requestAction = {
  				Add: 0,
  				Delete: 1
  			}, At.resultAction = {
  				Ignore: 0,
  				SubtractSpanCount: 1,
  				RemoveCell: 2,
  				AddCell: 3,
  				SumSpanCount: 4
  			};
  			var Ft = function() {
  				function t() {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t)
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "tab",
  					value: function(t, e) {
  						var n = pt.ancestor(t.commonAncestor(), pt.isCell),
  							o = pt.ancestor(n, pt.isTable),
  							i = pt.listDescendant(o, pt.isCell),
  							r = C[e ? "prev" : "next"](i, n);
  						r && wt.create(r, 0).select()
  					}
  				}, {
  					key: "addRow",
  					value: function(t, e) {
  						for (var n = pt.ancestor(t.commonAncestor(), pt.isCell), o = i()(n).closest("tr"), r = this.recoverAttributes(o), a = i()("<tr" + r + "></tr>"), s = new At(n, At.where.Row, At.requestAction.Add, i()(o).closest("table")[0]).getActionList(), l = 0; l < s.length; l++) {
  							var c = s[l],
  								u = this.recoverAttributes(c.baseCell);
  							switch (c.action) {
  								case At.resultAction.AddCell:
  									a.append("<td" + u + ">" + pt.blank + "</td>");
  									break;
  								case At.resultAction.SumSpanCount:
  									if ("top" === e && (c.baseCell.parent ? c.baseCell.closest("tr").rowIndex : 0) <= o[0].rowIndex) {
  										var d = i()("<div></div>").append(i()("<td" + u + ">" + pt.blank + "</td>").removeAttr("rowspan")).html();
  										a.append(d);
  										break
  									}
  									var h = parseInt(c.baseCell.rowSpan, 10);
  									h++, c.baseCell.setAttribute("rowSpan", h)
  							}
  						}
  						if ("top" === e) o.before(a);
  						else {
  							if (n.rowSpan > 1) {
  								var f = o[0].rowIndex + (n.rowSpan - 2);
  								return void i()(i()(o).parent().find("tr")[f]).after(i()(a))
  							}
  							o.after(a)
  						}
  					}
  				}, {
  					key: "addCol",
  					value: function(t, e) {
  						var n = pt.ancestor(t.commonAncestor(), pt.isCell),
  							o = i()(n).closest("tr");
  						i()(o).siblings().push(o);
  						for (var r = new At(n, At.where.Column, At.requestAction.Add, i()(o).closest("table")[0]).getActionList(), a = 0; a < r.length; a++) {
  							var s = r[a],
  								l = this.recoverAttributes(s.baseCell);
  							switch (s.action) {
  								case At.resultAction.AddCell:
  									"right" === e ? i()(s.baseCell).after("<td" + l + ">" + pt.blank + "</td>") : i()(s.baseCell).before("<td" + l + ">" + pt.blank + "</td>");
  									break;
  								case At.resultAction.SumSpanCount:
  									if ("right" === e) {
  										var c = parseInt(s.baseCell.colSpan, 10);
  										c++, s.baseCell.setAttribute("colSpan", c)
  									} else i()(s.baseCell).before("<td" + l + ">" + pt.blank + "</td>")
  							}
  						}
  					}
  				}, {
  					key: "recoverAttributes",
  					value: function(t) {
  						var e = "";
  						if (!t) return e;
  						for (var n = t.attributes || [], o = 0; o < n.length; o++) "id" !== n[o].name.toLowerCase() && n[o].specified && (e += " " + n[o].name + "='" + n[o].value + "'");
  						return e
  					}
  				}, {
  					key: "deleteRow",
  					value: function(t) {
  						for (var e = pt.ancestor(t.commonAncestor(), pt.isCell), n = i()(e).closest("tr"), o = n.children("td, th").index(i()(e)), r = n[0].rowIndex, a = new At(e, At.where.Row, At.requestAction.Delete, i()(n).closest("table")[0]).getActionList(), s = 0; s < a.length; s++)
  							if (a[s]) {
  								var l = a[s].baseCell,
  									c = a[s].virtualTable,
  									u = l.rowSpan && l.rowSpan > 1,
  									d = u ? parseInt(l.rowSpan, 10) : 0;
  								switch (a[s].action) {
  									case At.resultAction.Ignore:
  										continue;
  									case At.resultAction.AddCell:
  										var h = n.next("tr")[0];
  										if (!h) continue;
  										var f = n[0].cells[o];
  										u && (d > 2 ? (d--, h.insertBefore(f, h.cells[o]), h.cells[o].setAttribute("rowSpan", d), h.cells[o].innerHTML = "") : 2 === d && (h.insertBefore(f, h.cells[o]), h.cells[o].removeAttribute("rowSpan"), h.cells[o].innerHTML = ""));
  										continue;
  									case At.resultAction.SubtractSpanCount:
  										u && (d > 2 ? (d--, l.setAttribute("rowSpan", d), c.rowIndex !== r && l.cellIndex === o && (l.innerHTML = "")) : 2 === d && (l.removeAttribute("rowSpan"), c.rowIndex !== r && l.cellIndex === o && (l.innerHTML = "")));
  										continue;
  									case At.resultAction.RemoveCell:
  										continue
  								}
  							}
  						n.remove()
  					}
  				}, {
  					key: "deleteCol",
  					value: function(t) {
  						for (var e = pt.ancestor(t.commonAncestor(), pt.isCell), n = i()(e).closest("tr"), o = n.children("td, th").index(i()(e)), r = new At(e, At.where.Column, At.requestAction.Delete, i()(n).closest("table")[0]).getActionList(), a = 0; a < r.length; a++)
  							if (r[a]) switch (r[a].action) {
  								case At.resultAction.Ignore:
  									continue;
  								case At.resultAction.SubtractSpanCount:
  									var s = r[a].baseCell;
  									if (s.colSpan && s.colSpan > 1) {
  										var l = s.colSpan ? parseInt(s.colSpan, 10) : 0;
  										l > 2 ? (l--, s.setAttribute("colSpan", l), s.cellIndex === o && (s.innerHTML = "")) : 2 === l && (s.removeAttribute("colSpan"), s.cellIndex === o && (s.innerHTML = ""))
  									}
  									continue;
  								case At.resultAction.RemoveCell:
  									pt.remove(r[a].baseCell, !0);
  									continue
  							}
  					}
  				}, {
  					key: "createTable",
  					value: function(t, e, n) {
  						for (var o, r = [], a = 0; a < t; a++) r.push("<td>" + pt.blank + "</td>");
  						o = r.join("");
  						for (var s, l = [], c = 0; c < e; c++) l.push("<tr>" + o + "</tr>");
  						s = l.join("");
  						var u = i()("<table>" + s + "</table>");
  						return n && n.tableClassName && u.addClass(n.tableClassName), u[0]
  					}
  				}, {
  					key: "deleteTable",
  					value: function(t) {
  						var e = pt.ancestor(t.commonAncestor(), pt.isCell);
  						i()(e).closest("table").remove()
  					}
  				}]) && Lt(e.prototype, n), o && Lt(e, o), t
  			}();
  
  			function Dt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Ht = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$note = e.layoutInfo.note, this.$editor = e.layoutInfo.editor, this.$editable = e.layoutInfo.editable, this.options = e.options, this.lang = this.options.langInfo, this.editable = this.$editable[0], this.lastRange = null, this.snapshot = null, this.style = new It, this.table = new Ft, this.typing = new Rt(e), this.bullet = new Nt, this.history = new Tt(e), 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);
  					for (var o = ["bold", "italic", "underline", "strikethrough", "superscript", "subscript", "justifyLeft", "justifyCenter", "justifyRight", "justifyFull", "formatBlock", "removeFormat", "backColor"], r = 0, a = o.length; r < a; r++) this[o[r]] = function(t) {
  						return function(e) {
  							n.beforeCommand(), document.execCommand(t, !1, e), n.afterCommand(!0)
  						}
  					}(o[r]), this.context.memo("help." + o[r], this.lang.help[o[r]]);
  					this.fontName = this.wrapCommand((function(t) {
  						return n.fontStyling("font-family", m.validFontName(t))
  					})), this.fontSize = this.wrapCommand((function(t) {
  						var e = n.currentStyle()["font-size-unit"];
  						return n.fontStyling("font-size", t + e)
  					})), this.fontSizeUnit = this.wrapCommand((function(t) {
  						var e = n.currentStyle()["font-size"];
  						return n.fontStyling("font-size", e + t)
  					}));
  					for (var s = 1; s <= 6; s++) this["formatH" + s] = function(t) {
  						return function() {
  							n.formatBlock("H" + t)
  						}
  					}(s), this.context.memo("help.formatH" + s, this.lang.help["formatH" + s]);
  					this.insertParagraph = this.wrapCommand((function() {
  						n.typing.insertParagraph(n.editable)
  					})), this.insertOrderedList = this.wrapCommand((function() {
  						n.bullet.insertOrderedList(n.editable)
  					})), this.insertUnorderedList = this.wrapCommand((function() {
  						n.bullet.insertUnorderedList(n.editable)
  					})), this.indent = this.wrapCommand((function() {
  						n.bullet.indent(n.editable)
  					})), this.outdent = this.wrapCommand((function() {
  						n.bullet.outdent(n.editable)
  					})), this.insertNode = this.wrapCommand((function(t) {
  						n.isLimited(i()(t).text().length) || (n.getLastRange().insertNode(t), n.setLastRange(wt.createFromNodeAfter(t).select()))
  					})), this.insertText = this.wrapCommand((function(t) {
  						if (!n.isLimited(t.length)) {
  							var e = n.getLastRange().insertNode(pt.createText(t));
  							n.setLastRange(wt.create(e, pt.nodeLength(e)).select())
  						}
  					})), this.pasteHTML = this.wrapCommand((function(t) {
  						if (!n.isLimited(t.length)) {
  							t = n.context.invoke("codeview.purify", t);
  							var e = n.getLastRange().pasteHTML(t);
  							n.setLastRange(wt.createFromNodeAfter(C.last(e)).select())
  						}
  					})), this.formatBlock = this.wrapCommand((function(t, e) {
  						var o = n.options.callbacks.onApplyCustomStyle;
  						o ? o.call(n, e, n.context, n.onFormatBlock) : n.onFormatBlock(t, e)
  					})), this.insertHorizontalRule = this.wrapCommand((function() {
  						var t = n.getLastRange().insertNode(pt.create("HR"));
  						t.nextSibling && n.setLastRange(wt.create(t.nextSibling, 0).normalize().select())
  					})), this.lineHeight = this.wrapCommand((function(t) {
  						n.style.stylePara(n.getLastRange(), {
  							lineHeight: t
  						})
  					})), this.createLink = this.wrapCommand((function(t) {
  						var e = t.url,
  							o = t.text,
  							r = t.isNewWindow,
  							a = t.checkProtocol,
  							s = t.range || n.getLastRange(),
  							l = o.length - s.toString().length;
  						if (!(l > 0 && n.isLimited(l))) {
  							var c = s.toString() !== o;
  							"string" == typeof e && (e = e.trim()), n.options.onCreateLink ? e = n.options.onCreateLink(e) : a && (e = /^([A-Za-z][A-Za-z0-9+-.]*\:|#|\/)/.test(e) ? e : n.options.defaultProtocol + e);
  							var u = [];
  							if (c) {
  								var d = (s = s.deleteContents()).insertNode(i()("<A>" + o + "</A>")[0]);
  								u.push(d)
  							} else u = n.style.styleNodes(s, {
  								nodeName: "A",
  								expandClosestSibling: !0,
  								onlyPartialContains: !0
  							});
  							i.a.each(u, (function(t, n) {
  								i()(n).attr("href", e), r ? i()(n).attr("target", "_blank") : i()(n).removeAttr("target")
  							})), n.setLastRange(n.createRangeFromList(u).select())
  						}
  					})), this.color = this.wrapCommand((function(t) {
  						var e = t.foreColor,
  							n = t.backColor;
  						e && document.execCommand("foreColor", !1, e), n && document.execCommand("backColor", !1, n)
  					})), this.foreColor = this.wrapCommand((function(t) {
  						document.execCommand("foreColor", !1, t)
  					})), this.insertTable = this.wrapCommand((function(t) {
  						var e = t.split("x");
  						n.getLastRange().deleteContents().insertNode(n.table.createTable(e[0], e[1], n.options))
  					})), this.removeMedia = this.wrapCommand((function() {
  						var t = i()(n.restoreTarget()).parent();
  						t.closest("figure").length ? t.closest("figure").remove() : t = i()(n.restoreTarget()).detach(), n.context.triggerEvent("media.delete", t, n.$editable)
  					})), this.floatMe = this.wrapCommand((function(t) {
  						var e = i()(n.restoreTarget());
  						e.toggleClass("note-float-left", "left" === t), e.toggleClass("note-float-right", "right" === t), e.css("float", "none" === t ? "" : t)
  					})), this.resize = this.wrapCommand((function(t) {
  						var e = i()(n.restoreTarget());
  						0 === (t = parseFloat(t)) ? e.css("width", "") : e.css({
  							width: 100 * t + "%",
  							height: ""
  						})
  					}))
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.$editable.on("keydown", (function(e) {
  							if (e.keyCode === xt.code.ENTER && t.context.triggerEvent("enter", e), t.context.triggerEvent("keydown", e), t.snapshot = t.history.makeSnapshot(), t.hasKeyShortCut = !1, e.isDefaultPrevented() || (t.options.shortcuts ? t.hasKeyShortCut = t.handleKeyMap(e) : t.preventDefaultEditableShortCuts(e)), t.isLimited(1, e)) {
  								var n = t.getLastRange();
  								if (n.eo - n.so == 0) return !1
  							}
  							t.setLastRange(), t.options.recordEveryKeystroke && !1 === t.hasKeyShortCut && t.history.recordUndo()
  						})).on("keyup", (function(e) {
  							t.setLastRange(), t.context.triggerEvent("keyup", e)
  						})).on("focus", (function(e) {
  							t.setLastRange(), t.context.triggerEvent("focus", e)
  						})).on("blur", (function(e) {
  							t.context.triggerEvent("blur", e)
  						})).on("mousedown", (function(e) {
  							t.context.triggerEvent("mousedown", e)
  						})).on("mouseup", (function(e) {
  							t.setLastRange(), t.history.recordUndo(), t.context.triggerEvent("mouseup", e)
  						})).on("scroll", (function(e) {
  							t.context.triggerEvent("scroll", e)
  						})).on("paste", (function(e) {
  							t.setLastRange(), t.context.triggerEvent("paste", e)
  						})).on("input", (function() {
  							t.isLimited(0) && t.snapshot && t.history.applySnapshot(t.snapshot)
  						})), this.$editable.attr("spellcheck", this.options.spellCheck), this.$editable.attr("autocorrect", this.options.spellCheck), this.options.disableGrammar && this.$editable.attr("data-bs-gramm", !1), this.$editable.html(pt.html(this.$note) || pt.emptyPara), this.$editable.on(m.inputEventName, g.debounce((function() {
  							t.context.triggerEvent("change", t.$editable.html(), t.$editable)
  						}), 10)), this.$editable.on("focusin", (function(e) {
  							t.context.triggerEvent("focusin", e)
  						})).on("focusout", (function(e) {
  							t.context.triggerEvent("focusout", e)
  						})), this.options.airMode ? this.options.overrideContextMenu && this.$editor.on("contextmenu", (function(e) {
  							return t.context.triggerEvent("contextmenu", e), !1
  						})) : (this.options.width && this.$editor.outerWidth(this.options.width), this.options.height && this.$editable.outerHeight(this.options.height), this.options.maxHeight && this.$editable.css("max-height", this.options.maxHeight), this.options.minHeight && this.$editable.css("min-height", this.options.minHeight)), this.history.recordUndo(), this.setLastRange()
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$editable.off()
  					}
  				}, {
  					key: "handleKeyMap",
  					value: function(t) {
  						var e = this.options.keyMap[m.isMac ? "mac" : "pc"],
  							n = [];
  						t.metaKey && n.push("CMD"), t.ctrlKey && !t.altKey && n.push("CTRL"), t.shiftKey && n.push("SHIFT");
  						var o = xt.nameFromCode[t.keyCode];
  						o && n.push(o);
  						var i = e[n.join("+")];
  						if ("TAB" !== o || this.options.tabDisable)
  							if (i) {
  								if (!1 !== this.context.invoke(i)) return t.preventDefault(), !0
  							} else xt.isEdit(t.keyCode) && this.afterCommand();
  						else this.afterCommand();
  						return !1
  					}
  				}, {
  					key: "preventDefaultEditableShortCuts",
  					value: function(t) {
  						(t.ctrlKey || t.metaKey) && C.contains([66, 73, 85], t.keyCode) && t.preventDefault()
  					}
  				}, {
  					key: "isLimited",
  					value: function(t, e) {
  						return t = t || 0, (void 0 === e || !(xt.isMove(e.keyCode) || xt.isNavigation(e.keyCode) || e.ctrlKey || e.metaKey || C.contains([xt.code.BACKSPACE, xt.code.DELETE], e.keyCode))) && this.options.maxTextLength > 0 && this.$editable.text().length + t > this.options.maxTextLength
  					}
  				}, {
  					key: "createRange",
  					value: function() {
  						return this.focus(), this.setLastRange(), this.getLastRange()
  					}
  				}, {
  					key: "createRangeFromList",
  					value: function(t) {
  						var e = wt.createFromNodeBefore(C.head(t)).getStartPoint(),
  							n = wt.createFromNodeAfter(C.last(t)).getEndPoint();
  						return wt.create(e.node, e.offset, n.node, n.offset)
  					}
  				}, {
  					key: "setLastRange",
  					value: function(t) {
  						t ? this.lastRange = t : (this.lastRange = wt.create(this.editable), 0 === i()(this.lastRange.sc).closest(".note-editable").length && (this.lastRange = wt.createFromBodyElement(this.editable)))
  					}
  				}, {
  					key: "getLastRange",
  					value: function() {
  						return this.lastRange || this.setLastRange(), this.lastRange
  					}
  				}, {
  					key: "saveRange",
  					value: function(t) {
  						t && this.getLastRange().collapse().select()
  					}
  				}, {
  					key: "restoreRange",
  					value: function() {
  						this.lastRange && (this.lastRange.select(), this.focus())
  					}
  				}, {
  					key: "saveTarget",
  					value: function(t) {
  						this.$editable.data("target", t)
  					}
  				}, {
  					key: "clearTarget",
  					value: function() {
  						this.$editable.removeData("target")
  					}
  				}, {
  					key: "restoreTarget",
  					value: function() {
  						return this.$editable.data("target")
  					}
  				}, {
  					key: "currentStyle",
  					value: function() {
  						var t = wt.create();
  						return t && (t = t.normalize()), t ? this.style.current(t) : this.style.fromNode(this.$editable)
  					}
  				}, {
  					key: "styleFromNode",
  					value: function(t) {
  						return this.style.fromNode(t)
  					}
  				}, {
  					key: "undo",
  					value: function() {
  						this.context.triggerEvent("before.command", this.$editable.html()), this.history.undo(), this.context.triggerEvent("change", this.$editable.html(), this.$editable)
  					}
  				}, {
  					key: "commit",
  					value: function() {
  						this.context.triggerEvent("before.command", this.$editable.html()), this.history.commit(), this.context.triggerEvent("change", this.$editable.html(), this.$editable)
  					}
  				}, {
  					key: "redo",
  					value: function() {
  						this.context.triggerEvent("before.command", this.$editable.html()), this.history.redo(), this.context.triggerEvent("change", this.$editable.html(), this.$editable)
  					}
  				}, {
  					key: "beforeCommand",
  					value: function() {
  						this.context.triggerEvent("before.command", this.$editable.html()), document.execCommand("styleWithCSS", !1, this.options.styleWithCSS), this.focus()
  					}
  				}, {
  					key: "afterCommand",
  					value: function(t) {
  						this.normalizeContent(), this.history.recordUndo(), t || this.context.triggerEvent("change", this.$editable.html(), this.$editable)
  					}
  				}, {
  					key: "tab",
  					value: function() {
  						var t = this.getLastRange();
  						if (t.isCollapsed() && t.isOnCell()) this.table.tab(t);
  						else {
  							if (0 === this.options.tabSize) return !1;
  							this.isLimited(this.options.tabSize) || (this.beforeCommand(), this.typing.insertTab(t, this.options.tabSize), this.afterCommand())
  						}
  					}
  				}, {
  					key: "untab",
  					value: function() {
  						var t = this.getLastRange();
  						if (t.isCollapsed() && t.isOnCell()) this.table.tab(t, !0);
  						else if (0 === this.options.tabSize) return !1
  					}
  				}, {
  					key: "wrapCommand",
  					value: function(t) {
  						return function() {
  							this.beforeCommand(), t.apply(this, arguments), this.afterCommand()
  						}
  					}
  				}, {
  					key: "insertImage",
  					value: function(t, e) {
  						var n, o = this;
  						return (n = t, i.a.Deferred((function(t) {
  							var e = i()("<img>");
  							e.one("load", (function() {
  								e.off("error abort"), t.resolve(e)
  							})).one("error abort", (function() {
  								e.off("load").detach(), t.reject(e)
  							})).css({
  								display: "none"
  							}).appendTo(document.body).attr("src", n)
  						})).promise()).then((function(t) {
  							o.beforeCommand(), "function" == typeof e ? e(t) : ("string" == typeof e && t.attr("data-bs-filename", e), t.css("width", Math.min(o.$editable.width(), t.width()))), t.show(), o.getLastRange().insertNode(t[0]), o.setLastRange(wt.createFromNodeAfter(t[0]).select()), o.afterCommand()
  						})).fail((function(t) {
  							o.context.triggerEvent("image.upload.error", t)
  						}))
  					}
  				}, {
  					key: "insertImagesAsDataURL",
  					value: function(t) {
  						var e = this;
  						i.a.each(t, (function(t, n) {
  							var o = n.name;
  							e.options.maximumImageFileSize && e.options.maximumImageFileSize < n.size ? e.context.triggerEvent("image.upload.error", e.lang.image.maximumFileSizeError) : function(t) {
  								return i.a.Deferred((function(e) {
  									i.a.extend(new FileReader, {
  										onload: function(t) {
  											var n = t.target.result;
  											e.resolve(n)
  										},
  										onerror: function(t) {
  											e.reject(t)
  										}
  									}).readAsDataURL(t)
  								})).promise()
  							}(n).then((function(t) {
  								return e.insertImage(t, o)
  							})).fail((function() {
  								e.context.triggerEvent("image.upload.error")
  							}))
  						}))
  					}
  				}, {
  					key: "insertImagesOrCallback",
  					value: function(t) {
  						this.options.callbacks.onImageUpload ? this.context.triggerEvent("image.upload", t) : this.insertImagesAsDataURL(t)
  					}
  				}, {
  					key: "getSelectedText",
  					value: function() {
  						var t = this.getLastRange();
  						return t.isOnAnchor() && (t = wt.createFromNode(pt.ancestor(t.sc, pt.isAnchor))), t.toString()
  					}
  				}, {
  					key: "onFormatBlock",
  					value: function(t, e) {
  						if (document.execCommand("FormatBlock", !1, m.isMSIE ? "<" + t + ">" : t), e && e.length && (e[0].tagName.toUpperCase() !== t.toUpperCase() && (e = e.find(t)), e && e.length)) {
  							var n = e[0].className || "";
  							if (n) {
  								var o = this.createRange();
  								i()([o.sc, o.ec]).closest(t).addClass(n)
  							}
  						}
  					}
  				}, {
  					key: "formatPara",
  					value: function() {
  						this.formatBlock("P")
  					}
  				}, {
  					key: "fontStyling",
  					value: function(t, e) {
  						var n = this.getLastRange();
  						if ("" !== n) {
  							var o = this.style.styleNodes(n);
  							if (this.$editor.find(".note-status-output").html(""), i()(o).css(t, e), n.isCollapsed()) {
  								var r = C.head(o);
  								r && !pt.nodeLength(r) && (r.innerHTML = pt.ZERO_WIDTH_NBSP_CHAR, wt.createFromNode(r.firstChild).select(), this.setLastRange(), this.$editable.data("bogus", r))
  							} else this.setLastRange(this.createRangeFromList(o).select())
  						} else {
  							var a = i.a.now();
  							this.$editor.find(".note-status-output").html('<div id="note-status-output-' + a + '" class="alert alert-info">' + this.lang.output.noSelection + "</div>"), setTimeout((function() {
  								i()("#note-status-output-" + a).remove()
  							}), 5e3)
  						}
  					}
  				}, {
  					key: "unlink",
  					value: function() {
  						var t = this.getLastRange();
  						if (t.isOnAnchor()) {
  							var e = pt.ancestor(t.sc, pt.isAnchor);
  							(t = wt.createFromNode(e)).select(), this.setLastRange(), this.beforeCommand(), document.execCommand("unlink"), this.afterCommand()
  						}
  					}
  				}, {
  					key: "getLinkInfo",
  					value: function() {
  						var t = this.getLastRange().expand(pt.isAnchor),
  							e = i()(C.head(t.nodes(pt.isAnchor))),
  							n = {
  								range: t,
  								text: t.toString(),
  								url: e.length ? e.attr("href") : ""
  							};
  						return e.length && (n.isNewWindow = "_blank" === e.attr("target")), n
  					}
  				}, {
  					key: "addRow",
  					value: function(t) {
  						var e = this.getLastRange(this.$editable);
  						e.isCollapsed() && e.isOnCell() && (this.beforeCommand(), this.table.addRow(e, t), this.afterCommand())
  					}
  				}, {
  					key: "addCol",
  					value: function(t) {
  						var e = this.getLastRange(this.$editable);
  						e.isCollapsed() && e.isOnCell() && (this.beforeCommand(), this.table.addCol(e, t), this.afterCommand())
  					}
  				}, {
  					key: "deleteRow",
  					value: function() {
  						var t = this.getLastRange(this.$editable);
  						t.isCollapsed() && t.isOnCell() && (this.beforeCommand(), this.table.deleteRow(t), this.afterCommand())
  					}
  				}, {
  					key: "deleteCol",
  					value: function() {
  						var t = this.getLastRange(this.$editable);
  						t.isCollapsed() && t.isOnCell() && (this.beforeCommand(), this.table.deleteCol(t), this.afterCommand())
  					}
  				}, {
  					key: "deleteTable",
  					value: function() {
  						var t = this.getLastRange(this.$editable);
  						t.isCollapsed() && t.isOnCell() && (this.beforeCommand(), this.table.deleteTable(t), this.afterCommand())
  					}
  				}, {
  					key: "resizeTo",
  					value: function(t, e, n) {
  						var o;
  						if (n) {
  							var i = t.y / t.x,
  								r = e.data("ratio");
  							o = {
  								width: r > i ? t.x : t.y / r,
  								height: r > i ? t.x * r : t.y
  							}
  						} else o = {
  							width: t.x,
  							height: t.y
  						};
  						e.css(o)
  					}
  				}, {
  					key: "hasFocus",
  					value: function() {
  						return this.$editable.is(":focus")
  					}
  				}, {
  					key: "focus",
  					value: function() {
  						this.hasFocus() || this.$editable.focus()
  					}
  				}, {
  					key: "isEmpty",
  					value: function() {
  						return pt.isEmpty(this.$editable[0]) || pt.emptyPara === this.$editable.html()
  					}
  				}, {
  					key: "empty",
  					value: function() {
  						this.context.invoke("code", pt.emptyPara)
  					}
  				}, {
  					key: "normalizeContent",
  					value: function() {
  						this.$editable[0].normalize()
  					}
  				}]) && Dt(e.prototype, n), o && Dt(e, o), t
  			}();
  
  			function zt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Bt = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$editable = e.layoutInfo.editable
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						this.$editable.on("paste", this.pasteByEvent.bind(this))
  					}
  				}, {
  					key: "pasteByEvent",
  					value: function(t) {
  						var e = this,
  							n = t.originalEvent.clipboardData;
  						if (n && n.items && n.items.length) {
  							var o = n.items.length > 1 ? n.items[1] : C.head(n.items);
  							"file" === o.kind && -1 !== o.type.indexOf("image/") ? (this.context.invoke("editor.insertImagesOrCallback", [o.getAsFile()]), t.preventDefault()) : "string" === o.kind && this.context.invoke("editor.isLimited", n.getData("Text").length) && t.preventDefault()
  						} else if (window.clipboardData) {
  							var i = window.clipboardData.getData("text");
  							this.context.invoke("editor.isLimited", i.length) && t.preventDefault()
  						}
  						setTimeout((function() {
  							e.context.invoke("editor.afterCommand")
  						}), 10)
  					}
  				}]) && zt(e.prototype, n), o && zt(e, o), t
  			}();
  
  			function Mt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Ot = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$eventListener = i()(document), this.$editor = e.layoutInfo.editor, this.$editable = e.layoutInfo.editable, this.options = e.options, this.lang = this.options.langInfo, this.documentEventHandlers = {}, this.$dropzone = i()(['<div class="note-dropzone">', '<div class="note-dropzone-message"></div>', "</div>"].join("")).prependTo(this.$editor)
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						this.options.disableDragAndDrop ? (this.documentEventHandlers.onDrop = function(t) {
  							t.preventDefault()
  						}, this.$eventListener = this.$dropzone, this.$eventListener.on("drop", this.documentEventHandlers.onDrop)) : this.attachDragAndDropEvent()
  					}
  				}, {
  					key: "attachDragAndDropEvent",
  					value: function() {
  						var t = this,
  							e = i()(),
  							n = this.$dropzone.find(".note-dropzone-message");
  						this.documentEventHandlers.onDragenter = function(o) {
  							var i = t.context.invoke("codeview.isActivated"),
  								r = t.$editor.width() > 0 && t.$editor.height() > 0;
  							i || e.length || !r || (t.$editor.addClass("dragover"), t.$dropzone.width(t.$editor.width()), t.$dropzone.height(t.$editor.height()), n.text(t.lang.image.dragImageHere)), e = e.add(o.target)
  						}, this.documentEventHandlers.onDragleave = function(n) {
  							(e = e.not(n.target)).length && "BODY" !== n.target.nodeName || (e = i()(), t.$editor.removeClass("dragover"))
  						}, this.documentEventHandlers.onDrop = function() {
  							e = i()(), t.$editor.removeClass("dragover")
  						}, this.$eventListener.on("dragenter", this.documentEventHandlers.onDragenter).on("dragleave", this.documentEventHandlers.onDragleave).on("drop", this.documentEventHandlers.onDrop), this.$dropzone.on("dragenter", (function() {
  							t.$dropzone.addClass("hover"), n.text(t.lang.image.dropImage)
  						})).on("dragleave", (function() {
  							t.$dropzone.removeClass("hover"), n.text(t.lang.image.dragImageHere)
  						})), this.$dropzone.on("drop", (function(e) {
  							var n = e.originalEvent.dataTransfer;
  							e.preventDefault(), n && n.files && n.files.length ? (t.$editable.focus(), t.context.invoke("editor.insertImagesOrCallback", n.files)) : i.a.each(n.types, (function(e, o) {
  								if (!(o.toLowerCase().indexOf("_moz_") > -1)) {
  									var r = n.getData(o);
  									o.toLowerCase().indexOf("text") > -1 ? t.context.invoke("editor.pasteHTML", r) : i()(r).each((function(e, n) {
  										t.context.invoke("editor.insertNode", n)
  									}))
  								}
  							}))
  						})).on("dragover", !1)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						var t = this;
  						Object.keys(this.documentEventHandlers).forEach((function(e) {
  							t.$eventListener.off(e.substr(2).toLowerCase(), t.documentEventHandlers[e])
  						})), this.documentEventHandlers = {}
  					}
  				}]) && Mt(e.prototype, n), o && Mt(e, o), t
  			}();
  
  			function jt(t) {
  				if ("undefined" == typeof Symbol || null == t[Symbol.iterator]) {
  					if (Array.isArray(t) || (t = function(t, e) {
  							if (!t) return;
  							if ("string" == typeof t) return Ut(t, e);
  							var n = Object.prototype.toString.call(t).slice(8, -1);
  							"Object" === n && t.constructor && (n = t.constructor.name);
  							if ("Map" === n || "Set" === n) return Array.from(n);
  							if ("Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Ut(t, e)
  						}(t))) {
  						var e = 0,
  							n = function() {};
  						return {
  							s: n,
  							n: function() {
  								return e >= t.length ? {
  									done: !0
  								} : {
  									done: !1,
  									value: t[e++]
  								}
  							},
  							e: function(t) {
  								throw t
  							},
  							f: n
  						}
  					}
  					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, i, r = !0,
  					a = !1;
  				return {
  					s: function() {
  						o = t[Symbol.iterator]()
  					},
  					n: function() {
  						var t = o.next();
  						return r = t.done, t
  					},
  					e: function(t) {
  						a = !0, i = t
  					},
  					f: function() {
  						try {
  							r || null == o.return || o.return()
  						} finally {
  							if (a) throw i
  						}
  					}
  				}
  			}
  
  			function Ut(t, e) {
  				(null == e || e > t.length) && (e = t.length);
  				for (var n = 0, o = new Array(e); n < e; n++) o[n] = t[n];
  				return o
  			}
  
  			function Wt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Kt = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$editor = e.layoutInfo.editor, this.$editable = e.layoutInfo.editable, this.$codable = e.layoutInfo.codable, this.options = e.options, this.CodeMirrorConstructor = window.CodeMirror, this.options.codemirror.CodeMirrorConstructor && (this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor)
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "sync",
  					value: function(t) {
  						var e = this.isActivated(),
  							n = this.CodeMirrorConstructor;
  						e && (t ? n ? this.$codable.data("cmEditor").getDoc().setValue(t) : this.$codable.val(t) : n && this.$codable.data("cmEditor").save())
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.$codable.on("keyup", (function(e) {
  							e.keyCode === xt.code.ESCAPE && t.deactivate()
  						}))
  					}
  				}, {
  					key: "isActivated",
  					value: function() {
  						return this.$editor.hasClass("codeview")
  					}
  				}, {
  					key: "toggle",
  					value: function() {
  						this.isActivated() ? this.deactivate() : this.activate(), this.context.triggerEvent("codeview.toggled")
  					}
  				}, {
  					key: "purify",
  					value: function(t) {
  						if (this.options.codeviewFilter && (t = t.replace(this.options.codeviewFilterRegex, ""), this.options.codeviewIframeFilter)) {
  							var e = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);
  							t = t.replace(/(<iframe.*?>.*?(?:<\/iframe>)?)/gi, (function(t) {
  								if (/<.+src(?==?('|"|\s)?)[\s\S]+src(?=('|"|\s)?)[^>]*?>/i.test(t)) return "";
  								var n, o = jt(e);
  								try {
  									for (o.s(); !(n = o.n()).done;) {
  										var i = n.value;
  										if (new RegExp('src="(https?:)?//' + i.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&") + '/(.+)"').test(t)) return t
  									}
  								} catch (t) {
  									o.e(t)
  								} finally {
  									o.f()
  								}
  								return ""
  							}))
  						}
  						return t
  					}
  				}, {
  					key: "activate",
  					value: function() {
  						var t = this,
  							e = this.CodeMirrorConstructor;
  						if (this.$codable.val(pt.html(this.$editable, this.options.prettifyHtml)), this.$codable.height(this.$editable.height()), this.context.invoke("toolbar.updateCodeview", !0), this.context.invoke("airPopover.updateCodeview", !0), this.$editor.addClass("codeview"), this.$codable.focus(), e) {
  							var n = e.fromTextArea(this.$codable[0], this.options.codemirror);
  							if (this.options.codemirror.tern) {
  								var o = new e.TernServer(this.options.codemirror.tern);
  								n.ternServer = o, n.on("cursorActivity", (function(t) {
  									o.updateArgHints(t)
  								}))
  							}
  							n.on("blur", (function(e) {
  								t.context.triggerEvent("blur.codeview", n.getValue(), e)
  							})), n.on("change", (function() {
  								t.context.triggerEvent("change.codeview", n.getValue(), n)
  							})), n.setSize(null, this.$editable.outerHeight()), this.$codable.data("cmEditor", n)
  						} else this.$codable.on("blur", (function(e) {
  							t.context.triggerEvent("blur.codeview", t.$codable.val(), e)
  						})), this.$codable.on("input", (function() {
  							t.context.triggerEvent("change.codeview", t.$codable.val(), t.$codable)
  						}))
  					}
  				}, {
  					key: "deactivate",
  					value: function() {
  						if (this.CodeMirrorConstructor) {
  							var t = this.$codable.data("cmEditor");
  							this.$codable.val(t.getValue()), t.toTextArea()
  						}
  						var e = this.purify(pt.value(this.$codable, this.options.prettifyHtml) || pt.emptyPara),
  							n = this.$editable.html() !== e;
  						this.$editable.html(e), this.$editable.height(this.options.height ? this.$codable.height() : "auto"), this.$editor.removeClass("codeview"), n && this.context.triggerEvent("change", this.$editable.html(), this.$editable), this.$editable.focus(), this.context.invoke("toolbar.updateCodeview", !1), this.context.invoke("airPopover.updateCodeview", !1)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.isActivated() && this.deactivate()
  					}
  				}]) && Wt(e.prototype, n), o && Wt(e, o), t
  			}();
  
  			function Vt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var qt = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.$document = i()(document), this.$statusbar = e.layoutInfo.statusbar, this.$editable = e.layoutInfo.editable, this.options = e.options
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.options.airMode || this.options.disableResizeEditor ? this.destroy() : this.$statusbar.on("mousedown", (function(e) {
  							e.preventDefault(), e.stopPropagation();
  							var n = t.$editable.offset().top - t.$document.scrollTop(),
  								o = function(e) {
  									var o = e.clientY - (n + 24);
  									o = t.options.minheight > 0 ? Math.max(o, t.options.minheight) : o, o = t.options.maxHeight > 0 ? Math.min(o, t.options.maxHeight) : o, t.$editable.height(o)
  								};
  							t.$document.on("mousemove", o).one("mouseup", (function() {
  								t.$document.off("mousemove", o)
  							}))
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$statusbar.off(), this.$statusbar.addClass("locked")
  					}
  				}]) && Vt(e.prototype, n), o && Vt(e, o), t
  			}();
  
  			function _t(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Gt = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$editor = e.layoutInfo.editor, this.$toolbar = e.layoutInfo.toolbar, this.$editable = e.layoutInfo.editable, this.$codable = e.layoutInfo.codable, this.$window = i()(window), this.$scrollbar = i()("html, body"), this.onResize = function() {
  						n.resizeTo({
  							h: n.$window.height() - n.$toolbar.outerHeight()
  						})
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "resizeTo",
  					value: function(t) {
  						this.$editable.css("height", t.h), this.$codable.css("height", t.h), this.$codable.data("cmeditor") && this.$codable.data("cmeditor").setsize(null, t.h)
  					}
  				}, {
  					key: "toggle",
  					value: function() {
  						this.$editor.toggleClass("fullscreen"), this.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"), this.$scrollbar.css("overflow", "hidden")) : (this.$window.off("resize", this.onResize), this.resizeTo({
  							h: this.$editable.data("orgHeight")
  						}), this.$editable.css("maxHeight", this.$editable.css("orgMaxHeight")), this.$scrollbar.css("overflow", "visible")), this.context.invoke("toolbar.updateFullscreen", this.isFullscreen())
  					}
  				}, {
  					key: "isFullscreen",
  					value: function() {
  						return this.$editor.hasClass("fullscreen")
  					}
  				}]) && _t(e.prototype, n), o && _t(e, o), t
  			}();
  
  			function Yt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Zt = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$document = i()(document), this.$editingArea = e.layoutInfo.editingArea, this.options = e.options, this.lang = this.options.langInfo, this.events = {
  						"summernote.mousedown": function(t, e) {
  							n.update(e.target, e) && e.preventDefault()
  						},
  						"summernote.keyup summernote.scroll summernote.change summernote.dialog.shown": function() {
  							n.update()
  						},
  						"summernote.disable summernote.blur": function() {
  							n.hide()
  						},
  						"summernote.codeview.toggled": function() {
  							n.update()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.$handle = i()(['<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(e) {
  							if (pt.isControlSizing(e.target)) {
  								e.preventDefault(), e.stopPropagation();
  								var n = t.$handle.find(".note-control-selection").data("target"),
  									o = n.offset(),
  									i = t.$document.scrollTop(),
  									r = function(e) {
  										t.context.invoke("editor.resizeTo", {
  											x: e.clientX - o.left,
  											y: e.clientY - (o.top - i)
  										}, n, !e.shiftKey), t.update(n[0], e)
  									};
  								t.$document.on("mousemove", r).one("mouseup", (function(e) {
  									e.preventDefault(), t.$document.off("mousemove", r), t.context.invoke("editor.afterCommand")
  								})), n.data("ratio") || n.data("ratio", n.height() / n.width())
  							}
  						})), this.$handle.on("wheel", (function(e) {
  							e.preventDefault(), t.update()
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$handle.remove()
  					}
  				}, {
  					key: "update",
  					value: function(t, e) {
  						if (this.context.isDisabled()) return !1;
  						var n = pt.isImg(t),
  							o = this.$handle.find(".note-control-selection");
  						if (this.context.invoke("imagePopover.update", t, e), n) {
  							var r = i()(t),
  								a = r.position(),
  								s = {
  									left: a.left + parseInt(r.css("marginLeft"), 10),
  									top: a.top + parseInt(r.css("marginTop"), 10)
  								},
  								l = {
  									w: r.outerWidth(!1),
  									h: r.outerHeight(!1)
  								};
  							o.css({
  								display: "block",
  								left: s.left,
  								top: s.top,
  								width: l.w,
  								height: l.h
  							}).data("target", r);
  							var c = new Image;
  							c.src = r.attr("src");
  							var u = l.w + "x" + l.h + " (" + this.lang.image.original + ": " + c.width + "x" + c.height + ")";
  							o.find(".note-control-selection-info").text(u), this.context.invoke("editor.saveTarget", t)
  						} else this.hide();
  						return n
  					}
  				}, {
  					key: "hide",
  					value: function() {
  						this.context.invoke("editor.clearTarget"), this.$handle.children().hide()
  					}
  				}]) && Yt(e.prototype, n), o && Yt(e, o), t
  			}();
  
  			function Xt(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Qt = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i,
  				Jt = function() {
  					function t(e) {
  						var n = this;
  						! function(t, e) {
  							if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  						}(this, t), this.context = e, this.options = e.options, this.events = {
  							"summernote.keyup": function(t, e) {
  								e.isDefaultPrevented() || n.handleKeyup(e)
  							},
  							"summernote.keydown": function(t, e) {
  								n.handleKeydown(e)
  							}
  						}
  					}
  					var e, n, o;
  					return e = t, (n = [{
  						key: "initialize",
  						value: function() {
  							this.lastWordRange = null
  						}
  					}, {
  						key: "destroy",
  						value: function() {
  							this.lastWordRange = null
  						}
  					}, {
  						key: "replace",
  						value: function() {
  							if (this.lastWordRange) {
  								var t = this.lastWordRange.toString(),
  									e = t.match(Qt);
  								if (e && (e[1] || e[2])) {
  									var n = e[1] ? t : "http://" + t,
  										o = this.options.showDomainOnlyForAutolink ? t.replace(/^(?:https?:\/\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\.)?/i, "").split("/")[0] : t,
  										r = i()("<a />").html(o).attr("href", n)[0];
  									this.context.options.linkTargetBlank && i()(r).attr("target", "_blank"), this.lastWordRange.insertNode(r), this.lastWordRange = null, this.context.invoke("editor.focus")
  								}
  							}
  						}
  					}, {
  						key: "handleKeydown",
  						value: function(t) {
  							if (C.contains([xt.code.ENTER, xt.code.SPACE], t.keyCode)) {
  								var e = this.context.invoke("editor.createRange").getWordRange();
  								this.lastWordRange = e
  							}
  						}
  					}, {
  						key: "handleKeyup",
  						value: function(t) {
  							C.contains([xt.code.ENTER, xt.code.SPACE], t.keyCode) && this.replace()
  						}
  					}]) && Xt(e.prototype, n), o && Xt(e, o), t
  				}();
  
  			function te(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var ee = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.$note = e.layoutInfo.note, this.events = {
  						"summernote.change": function() {
  							n.$note.val(e.invoke("code"))
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return pt.isTextarea(this.$note[0])
  					}
  				}]) && te(e.prototype, n), o && te(e, o), t
  			}();
  
  			function ne(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var oe = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.options = e.options.replace || {}, this.keys = [xt.code.ENTER, xt.code.SPACE, xt.code.PERIOD, xt.code.COMMA, xt.code.SEMICOLON, xt.code.SLASH], this.previousKeydownCode = null, this.events = {
  						"summernote.keyup": function(t, e) {
  							e.isDefaultPrevented() || n.handleKeyup(e)
  						},
  						"summernote.keydown": function(t, e) {
  							n.handleKeydown(e)
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return !!this.options.match
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						this.lastWord = null
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.lastWord = null
  					}
  				}, {
  					key: "replace",
  					value: function() {
  						if (this.lastWord) {
  							var t = this,
  								e = this.lastWord.toString();
  							this.options.match(e, (function(e) {
  								if (e) {
  									var n = "";
  									if ("string" == typeof e ? n = pt.createText(e) : e instanceof jQuery ? n = e[0] : e instanceof Node && (n = e), !n) return;
  									t.lastWord.insertNode(n), t.lastWord = null, t.context.invoke("editor.focus")
  								}
  							}))
  						}
  					}
  				}, {
  					key: "handleKeydown",
  					value: function(t) {
  						if (this.previousKeydownCode && C.contains(this.keys, this.previousKeydownCode)) this.previousKeydownCode = t.keyCode;
  						else {
  							if (C.contains(this.keys, t.keyCode)) {
  								var e = this.context.invoke("editor.createRange").getWordRange();
  								this.lastWord = e
  							}
  							this.previousKeydownCode = t.keyCode
  						}
  					}
  				}, {
  					key: "handleKeyup",
  					value: function(t) {
  						C.contains(this.keys, t.keyCode) && this.replace()
  					}
  				}]) && ne(e.prototype, n), o && ne(e, o), t
  			}();
  
  			function ie(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var re = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$editingArea = e.layoutInfo.editingArea, this.options = e.options, !0 === this.options.inheritPlaceholder && (this.options.placeholder = this.context.$note.attr("placeholder") || this.options.placeholder), this.events = {
  						"summernote.init summernote.change": function() {
  							n.update()
  						},
  						"summernote.codeview.toggled": function() {
  							n.update()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return !!this.options.placeholder
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.$placeholder = i()('<div class="note-placeholder">'), this.$placeholder.on("click", (function() {
  							t.context.invoke("focus")
  						})).html(this.options.placeholder).prependTo(this.$editingArea), this.update()
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$placeholder.remove()
  					}
  				}, {
  					key: "update",
  					value: function() {
  						var t = !this.context.invoke("codeview.isActivated") && this.context.invoke("editor.isEmpty");
  						this.$placeholder.toggle(t)
  					}
  				}]) && ie(e.prototype, n), o && ie(e, o), t
  			}();
  
  			function ae(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var se = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.ui = i.a.summernote.ui, this.context = e, this.$toolbar = e.layoutInfo.toolbar, this.options = e.options, this.lang = this.options.langInfo, this.invertedKeyMap = g.invertObject(this.options.keyMap[m.isMac ? "mac" : "pc"])
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "representShortcut",
  					value: function(t) {
  						var e = this.invertedKeyMap[t];
  						return this.options.shortcuts && e ? (m.isMac && (e = e.replace("CMD", "⌘").replace("SHIFT", "⇧")), " (" + (e = e.replace("BACKSLASH", "\\").replace("SLASH", "/").replace("LEFTBRACKET", "[").replace("RIGHTBRACKET", "]")) + ")") : ""
  					}
  				}, {
  					key: "button",
  					value: function(t) {
  						return !this.options.tooltip && t.tooltip && delete t.tooltip, t.container = this.options.container, this.ui.button(t)
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						this.addToolbarButtons(), this.addImagePopoverButtons(), this.addLinkPopoverButtons(), this.addTablePopoverButtons(), this.fontInstalledMap = {}
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						delete this.fontInstalledMap
  					}
  				}, {
  					key: "isFontInstalled",
  					value: function(t) {
  						return Object.prototype.hasOwnProperty.call(this.fontInstalledMap, t) || (this.fontInstalledMap[t] = m.isFontInstalled(t) || C.contains(this.options.fontNamesIgnoreCheck, t)), this.fontInstalledMap[t]
  					}
  				}, {
  					key: "isFontDeservedToAdd",
  					value: function(t) {
  						return "" !== (t = t.toLowerCase()) && this.isFontInstalled(t) && -1 === m.genericFontFamilies.indexOf(t)
  					}
  				}, {
  					key: "colorPalette",
  					value: function(t, e, n, o) {
  						var r = this;
  						return this.ui.buttonGroup({
  							className: "note-color " + t,
  							children: [this.button({
  								className: "note-current-color-button",
  								contents: this.ui.icon(this.options.icons.font + " note-recent-color"),
  								tooltip: e,
  								click: function(t) {
  									var e = i()(t.currentTarget);
  									n && o ? r.context.invoke("editor.color", {
  										backColor: e.attr("data-bs-backColor"),
  										foreColor: e.attr("data-bs-foreColor")
  									}) : n ? r.context.invoke("editor.color", {
  										backColor: e.attr("data-bs-backColor")
  									}) : o && r.context.invoke("editor.color", {
  										foreColor: e.attr("data-bs-foreColor")
  									})
  								},
  								callback: function(t) {
  									var e = t.find(".note-recent-color");
  									n && (e.css("background-color", r.options.colorButton.backColor), t.attr("data-bs-backColor", r.options.colorButton.backColor)), o ? (e.css("color", r.options.colorButton.foreColor), t.attr("data-bs-foreColor", r.options.colorButton.foreColor)) : e.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: (n ? ['<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">\x3c!-- back colors --\x3e</div>', "<div>", '<button type="button" class="note-color-select btn btn-light btn-default" data-event="openPalette" data-value="backColorPicker">', this.lang.color.cpSelect, "</button>", '<input type="color" id="backColorPicker" class="note-btn note-color-select-btn" value="' + this.options.colorButton.backColor + '" data-event="backColorPalette">', "</div>", '<div class="note-holder-custom" id="backColorPalette" data-event="backColor"></div>', "</div>"].join("") : "") + (o ? ['<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">\x3c!-- fore colors --\x3e</div>', "<div>", '<button type="button" class="note-color-select btn btn-light btn-default" data-event="openPalette" data-value="foreColorPicker">', this.lang.color.cpSelect, "</button>", '<input type="color" id="foreColorPicker" class="note-btn note-color-select-btn" value="' + this.options.colorButton.foreColor + '" data-event="foreColorPalette">', "</div>", '<div class="note-holder-custom" id="foreColorPalette" data-event="foreColor"></div>', "</div>"].join("") : ""),
  								callback: function(t) {
  									t.find(".note-holder").each((function(t, e) {
  										var n = i()(e);
  										n.append(r.ui.palette({
  											colors: r.options.colors,
  											colorsName: r.options.colorsName,
  											eventName: n.data("event"),
  											container: r.options.container,
  											// tooltip: r.options.tooltip
  										}).render())
  									}));
  									var e = [
  										["#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF", "#FFFFFF"]
  									];
  									t.find(".note-holder-custom").each((function(t, n) {
  										var o = i()(n);
  										o.append(r.ui.palette({
  											colors: e,
  											colorsName: e,
  											eventName: o.data("event"),
  											container: r.options.container,
  											// tooltip: r.options.tooltip
  										}).render())
  									})), t.find("input[type=color]").each((function(e, n) {
  										i()(n).change((function() {
  											var e = t.find("#" + i()(this).data("event")).find(".note-color-btn").first(),
  												n = this.value.toUpperCase();
  											e.css("background-color", n).attr("aria-label", n).attr("data-value", n).attr("data-bs-original-title", n), e.click()
  										}))
  									}))
  								},
  								click: function(e) {
  									e.stopPropagation();
  									var n = i()("." + t).find(".note-dropdown-menu"),
  										o = i()(e.target),
  										a = o.data("event"),
  										s = o.attr("data-value");
  									if ("openPalette" === a) {
  										var l = n.find("#" + s),
  											c = i()(n.find("#" + l.data("event")).find(".note-color-row")[0]),
  											u = c.find(".note-color-btn").last().detach(),
  											d = l.val();
  										u.css("background-color", d).attr("aria-label", d).attr("data-value", d).attr("data-bs-original-title", d), c.prepend(u), l.click()
  									} else {
  										if (C.contains(["backColor", "foreColor"], a)) {
  											var h = "backColor" === a ? "background-color" : "color",
  												f = o.closest(".note-color").find(".note-recent-color"),
  												p = o.closest(".note-color").find(".note-current-color-button");
  											f.css(h, s), p.attr("data-bs-" + a, s)
  										}
  										r.context.invoke("editor." + a, s)
  									}
  								}
  							})]
  						}).render()
  					}
  				}, {
  					key: "addToolbarButtons",
  					value: function() {
  						var t = this;
  						this.context.memo("button.style", (function() {
  							return t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.magic), t.options),
  								tooltip: t.lang.style.style,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdown({
  								className: "dropdown-style",
  								items: t.options.styleTags,
  								title: t.lang.style.style,
  								template: function(e) {
  									"string" == typeof e && (e = {
  										tag: e,
  										title: Object.prototype.hasOwnProperty.call(t.lang.style, e) ? t.lang.style[e] : e
  									});
  									var n = e.tag,
  										o = e.title;
  									return "<" + n + (e.style ? ' style="' + e.style + '" ' : "") + (e.className ? ' class="' + e.className + '"' : "") + ">" + o + "</" + n + ">"
  								},
  								click: t.context.createInvokeHandler("editor.formatBlock")
  							})]).render()
  						}));
  						for (var e = function(e, n) {
  								var o = t.options.styleTags[e];
  								t.context.memo("button.style." + o, (function() {
  									return t.button({
  										className: "note-btn-style-" + o,
  										contents: '<div data-value="' + o + '">' + o.toUpperCase() + "</div>",
  										tooltip: t.lang.style[o],
  										click: t.context.createInvokeHandler("editor.formatBlock")
  									}).render()
  								}))
  							}, n = 0, o = this.options.styleTags.length; n < o; n++) e(n);
  						this.context.memo("button.bold", (function() {
  							return t.button({
  								className: "note-btn-bold",
  								contents: t.ui.icon(t.options.icons.bold),
  								tooltip: t.lang.font.bold + t.representShortcut("bold"),
  								click: t.context.createInvokeHandlerAndUpdateState("editor.bold")
  							}).render()
  						})), this.context.memo("button.italic", (function() {
  							return t.button({
  								className: "note-btn-italic",
  								contents: t.ui.icon(t.options.icons.italic),
  								tooltip: t.lang.font.italic + t.representShortcut("italic"),
  								click: t.context.createInvokeHandlerAndUpdateState("editor.italic")
  							}).render()
  						})), this.context.memo("button.underline", (function() {
  							return t.button({
  								className: "note-btn-underline",
  								contents: t.ui.icon(t.options.icons.underline),
  								tooltip: t.lang.font.underline + t.representShortcut("underline"),
  								click: t.context.createInvokeHandlerAndUpdateState("editor.underline")
  							}).render()
  						})), this.context.memo("button.clear", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.eraser),
  								tooltip: t.lang.font.clear + t.representShortcut("removeFormat"),
  								click: t.context.createInvokeHandler("editor.removeFormat")
  							}).render()
  						})), this.context.memo("button.strikethrough", (function() {
  							return t.button({
  								className: "note-btn-strikethrough",
  								contents: t.ui.icon(t.options.icons.strikethrough),
  								tooltip: t.lang.font.strikethrough + t.representShortcut("strikethrough"),
  								click: t.context.createInvokeHandlerAndUpdateState("editor.strikethrough")
  							}).render()
  						})), this.context.memo("button.superscript", (function() {
  							return t.button({
  								className: "note-btn-superscript",
  								contents: t.ui.icon(t.options.icons.superscript),
  								tooltip: t.lang.font.superscript,
  								click: t.context.createInvokeHandlerAndUpdateState("editor.superscript")
  							}).render()
  						})), this.context.memo("button.subscript", (function() {
  							return t.button({
  								className: "note-btn-subscript",
  								contents: t.ui.icon(t.options.icons.subscript),
  								tooltip: t.lang.font.subscript,
  								click: t.context.createInvokeHandlerAndUpdateState("editor.subscript")
  							}).render()
  						})), this.context.memo("button.fontname", (function() {
  							var e = t.context.invoke("editor.currentStyle");
  							return t.options.addDefaultFonts && i.a.each(e["font-family"].split(","), (function(e, n) {
  								n = n.trim().replace(/['"]+/g, ""), t.isFontDeservedToAdd(n) && -1 === t.options.fontNames.indexOf(n) && t.options.fontNames.push(n)
  							})), t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents('<span class="note-current-fontname"></span>', t.options),
  								tooltip: t.lang.font.name,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdownCheck({
  								className: "dropdown-fontname",
  								checkClassName: t.options.icons.menuCheck,
  								items: t.options.fontNames.filter(t.isFontInstalled.bind(t)),
  								title: t.lang.font.name,
  								template: function(t) {
  									return '<span style="font-family: ' + m.validFontName(t) + '">' + t + "</span>"
  								},
  								click: t.context.createInvokeHandlerAndUpdateState("editor.fontName")
  							})]).render()
  						})), this.context.memo("button.fontsize", (function() {
  							return t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents('<span class="note-current-fontsize"></span>', t.options),
  								tooltip: t.lang.font.size,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdownCheck({
  								className: "dropdown-fontsize",
  								checkClassName: t.options.icons.menuCheck,
  								items: t.options.fontSizes,
  								title: t.lang.font.size,
  								click: t.context.createInvokeHandlerAndUpdateState("editor.fontSize")
  							})]).render()
  						})), this.context.memo("button.fontsizeunit", (function() {
  							return t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents('<span class="note-current-fontsizeunit"></span>', t.options),
  								tooltip: t.lang.font.sizeunit,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdownCheck({
  								className: "dropdown-fontsizeunit",
  								checkClassName: t.options.icons.menuCheck,
  								items: t.options.fontSizeUnits,
  								title: t.lang.font.sizeunit,
  								click: t.context.createInvokeHandlerAndUpdateState("editor.fontSizeUnit")
  							})]).render()
  						})), this.context.memo("button.color", (function() {
  							return t.colorPalette("note-color-all", t.lang.color.recent, !0, !0)
  						})), this.context.memo("button.forecolor", (function() {
  							return t.colorPalette("note-color-fore", t.lang.color.foreground, !1, !0)
  						})), this.context.memo("button.backcolor", (function() {
  							return t.colorPalette("note-color-back", t.lang.color.background, !0, !1)
  						})), this.context.memo("button.ul", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.unorderedlist),
  								tooltip: t.lang.lists.unordered + t.representShortcut("insertUnorderedList"),
  								click: t.context.createInvokeHandler("editor.insertUnorderedList")
  							}).render()
  						})), this.context.memo("button.ol", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.orderedlist),
  								tooltip: t.lang.lists.ordered + t.representShortcut("insertOrderedList"),
  								click: t.context.createInvokeHandler("editor.insertOrderedList")
  							}).render()
  						}));
  						var r = this.button({
  								contents: this.ui.icon(this.options.icons.alignLeft),
  								tooltip: this.lang.paragraph.left + this.representShortcut("justifyLeft"),
  								click: this.context.createInvokeHandler("editor.justifyLeft")
  							}),
  							a = this.button({
  								contents: this.ui.icon(this.options.icons.alignCenter),
  								tooltip: this.lang.paragraph.center + this.representShortcut("justifyCenter"),
  								click: this.context.createInvokeHandler("editor.justifyCenter")
  							}),
  							s = this.button({
  								contents: this.ui.icon(this.options.icons.alignRight),
  								tooltip: this.lang.paragraph.right + this.representShortcut("justifyRight"),
  								click: this.context.createInvokeHandler("editor.justifyRight")
  							}),
  							l = this.button({
  								contents: this.ui.icon(this.options.icons.alignJustify),
  								tooltip: this.lang.paragraph.justify + this.representShortcut("justifyFull"),
  								click: this.context.createInvokeHandler("editor.justifyFull")
  							}),
  							c = this.button({
  								contents: this.ui.icon(this.options.icons.outdent),
  								tooltip: this.lang.paragraph.outdent + this.representShortcut("outdent"),
  								click: this.context.createInvokeHandler("editor.outdent")
  							}),
  							u = 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", g.invoke(r, "render")), this.context.memo("button.justifyCenter", g.invoke(a, "render")), this.context.memo("button.justifyRight", g.invoke(s, "render")), this.context.memo("button.justifyFull", g.invoke(l, "render")), this.context.memo("button.outdent", g.invoke(c, "render")), this.context.memo("button.indent", g.invoke(u, "render")), this.context.memo("button.paragraph", (function() {
  							return t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.alignLeft), t.options),
  								tooltip: t.lang.paragraph.paragraph,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdown([t.ui.buttonGroup({
  								className: "note-align",
  								children: [r, a, s, l]
  							}), t.ui.buttonGroup({
  								className: "note-list",
  								children: [c, u]
  							})])]).render()
  						})), this.context.memo("button.height", (function() {
  							return t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.textHeight), t.options),
  								tooltip: t.lang.font.height,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdownCheck({
  								items: t.options.lineHeights,
  								checkClassName: t.options.icons.menuCheck,
  								className: "dropdown-line-height",
  								title: t.lang.font.height,
  								click: t.context.createInvokeHandler("editor.lineHeight")
  							})]).render()
  						})), this.context.memo("button.table", (function() {
  							return t.ui.buttonGroup([t.button({
  								className: "dropdown-toggle",
  								contents: t.ui.dropdownButtonContents(t.ui.icon(t.options.icons.table), t.options),
  								tooltip: t.lang.table.table,
  								data: {
  									toggle: "dropdown"
  								}
  							}), t.ui.dropdown({
  								title: t.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(e) {
  									e.find(".note-dimension-picker-mousecatcher").css({
  										width: t.options.insertTableMaxSize.col + "em",
  										height: t.options.insertTableMaxSize.row + "em"
  									}).mousedown(t.context.createInvokeHandler("editor.insertTable")).on("mousemove", t.tableMoveHandler.bind(t))
  								}
  							}).render()
  						})), this.context.memo("button.link", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.link),
  								tooltip: t.lang.link.link + t.representShortcut("linkDialog.show"),
  								click: t.context.createInvokeHandler("linkDialog.show")
  							}).render()
  						})), this.context.memo("button.picture", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.picture),
  								tooltip: t.lang.image.image,
  								click: t.context.createInvokeHandler("imageDialog.show")
  							}).render()
  						})), this.context.memo("button.video", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.video),
  								tooltip: t.lang.video.video,
  								click: t.context.createInvokeHandler("videoDialog.show")
  							}).render()
  						})), this.context.memo("button.hr", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.minus),
  								tooltip: t.lang.hr.insert + t.representShortcut("insertHorizontalRule"),
  								click: t.context.createInvokeHandler("editor.insertHorizontalRule")
  							}).render()
  						})), this.context.memo("button.fullscreen", (function() {
  							return t.button({
  								className: "btn-fullscreen note-codeview-keep",
  								contents: t.ui.icon(t.options.icons.arrowsAlt),
  								tooltip: t.lang.options.fullscreen,
  								click: t.context.createInvokeHandler("fullscreen.toggle")
  							}).render()
  						})), this.context.memo("button.codeview", (function() {
  							return t.button({
  								className: "btn-codeview note-codeview-keep",
  								contents: t.ui.icon(t.options.icons.code),
  								tooltip: t.lang.options.codeview,
  								click: t.context.createInvokeHandler("codeview.toggle")
  							}).render()
  						})), this.context.memo("button.redo", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.redo),
  								tooltip: t.lang.history.redo + t.representShortcut("redo"),
  								click: t.context.createInvokeHandler("editor.redo")
  							}).render()
  						})), this.context.memo("button.undo", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.undo),
  								tooltip: t.lang.history.undo + t.representShortcut("undo"),
  								click: t.context.createInvokeHandler("editor.undo")
  							}).render()
  						})), this.context.memo("button.help", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.question),
  								tooltip: t.lang.options.help,
  								click: t.context.createInvokeHandler("helpDialog.show")
  							}).render()
  						}))
  					}
  				}, {
  					key: "addImagePopoverButtons",
  					value: function() {
  						var t = this;
  						this.context.memo("button.resizeFull", (function() {
  							return t.button({
  								contents: '<span class="note-fontsize-10">100%</span>',
  								tooltip: t.lang.image.resizeFull,
  								click: t.context.createInvokeHandler("editor.resize", "1")
  							}).render()
  						})), this.context.memo("button.resizeHalf", (function() {
  							return t.button({
  								contents: '<span class="note-fontsize-10">50%</span>',
  								tooltip: t.lang.image.resizeHalf,
  								click: t.context.createInvokeHandler("editor.resize", "0.5")
  							}).render()
  						})), this.context.memo("button.resizeQuarter", (function() {
  							return t.button({
  								contents: '<span class="note-fontsize-10">25%</span>',
  								tooltip: t.lang.image.resizeQuarter,
  								click: t.context.createInvokeHandler("editor.resize", "0.25")
  							}).render()
  						})), this.context.memo("button.resizeNone", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.rollback),
  								tooltip: t.lang.image.resizeNone,
  								click: t.context.createInvokeHandler("editor.resize", "0")
  							}).render()
  						})), this.context.memo("button.floatLeft", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.floatLeft),
  								tooltip: t.lang.image.floatLeft,
  								click: t.context.createInvokeHandler("editor.floatMe", "left")
  							}).render()
  						})), this.context.memo("button.floatRight", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.floatRight),
  								tooltip: t.lang.image.floatRight,
  								click: t.context.createInvokeHandler("editor.floatMe", "right")
  							}).render()
  						})), this.context.memo("button.floatNone", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.rollback),
  								tooltip: t.lang.image.floatNone,
  								click: t.context.createInvokeHandler("editor.floatMe", "none")
  							}).render()
  						})), this.context.memo("button.removeMedia", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.trash),
  								tooltip: t.lang.image.remove,
  								click: t.context.createInvokeHandler("editor.removeMedia")
  							}).render()
  						}))
  					}
  				}, {
  					key: "addLinkPopoverButtons",
  					value: function() {
  						var t = this;
  						this.context.memo("button.linkDialogShow", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.link),
  								tooltip: t.lang.link.edit,
  								click: t.context.createInvokeHandler("linkDialog.show")
  							}).render()
  						})), this.context.memo("button.unlink", (function() {
  							return t.button({
  								contents: t.ui.icon(t.options.icons.unlink),
  								tooltip: t.lang.link.unlink,
  								click: t.context.createInvokeHandler("editor.unlink")
  							}).render()
  						}))
  					}
  				}, {
  					key: "addTablePopoverButtons",
  					value: function() {
  						var t = this;
  						this.context.memo("button.addRowUp", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.rowAbove),
  								tooltip: t.lang.table.addRowAbove,
  								click: t.context.createInvokeHandler("editor.addRow", "top")
  							}).render()
  						})), this.context.memo("button.addRowDown", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.rowBelow),
  								tooltip: t.lang.table.addRowBelow,
  								click: t.context.createInvokeHandler("editor.addRow", "bottom")
  							}).render()
  						})), this.context.memo("button.addColLeft", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.colBefore),
  								tooltip: t.lang.table.addColLeft,
  								click: t.context.createInvokeHandler("editor.addCol", "left")
  							}).render()
  						})), this.context.memo("button.addColRight", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.colAfter),
  								tooltip: t.lang.table.addColRight,
  								click: t.context.createInvokeHandler("editor.addCol", "right")
  							}).render()
  						})), this.context.memo("button.deleteRow", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.rowRemove),
  								tooltip: t.lang.table.delRow,
  								click: t.context.createInvokeHandler("editor.deleteRow")
  							}).render()
  						})), this.context.memo("button.deleteCol", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.colRemove),
  								tooltip: t.lang.table.delCol,
  								click: t.context.createInvokeHandler("editor.deleteCol")
  							}).render()
  						})), this.context.memo("button.deleteTable", (function() {
  							return t.button({
  								className: "btn-md",
  								contents: t.ui.icon(t.options.icons.trash),
  								tooltip: t.lang.table.delTable,
  								click: t.context.createInvokeHandler("editor.deleteTable")
  							}).render()
  						}))
  					}
  				}, {
  					key: "build",
  					value: function(t, e) {
  						for (var n = 0, o = e.length; n < o; n++) {
  							for (var i = e[n], r = Array.isArray(i) ? i[0] : i, a = Array.isArray(i) ? 1 === i.length ? [i[0]] : i[1] : [i], s = this.ui.buttonGroup({
  									className: "note-" + r
  								}).render(), l = 0, c = a.length; l < c; l++) {
  								var u = this.context.memo("button." + a[l]);
  								u && s.append("function" == typeof u ? u(this.context) : u)
  							}
  							s.appendTo(t)
  						}
  					}
  				}, {
  					key: "updateCurrentStyle",
  					value: function(t) {
  						var e = this,
  							n = t || this.$toolbar,
  							o = this.context.invoke("editor.currentStyle");
  						if (this.updateBtnStates(n, {
  								".note-btn-bold": function() {
  									return "bold" === o["font-bold"]
  								},
  								".note-btn-italic": function() {
  									return "italic" === o["font-italic"]
  								},
  								".note-btn-underline": function() {
  									return "underline" === o["font-underline"]
  								},
  								".note-btn-subscript": function() {
  									return "subscript" === o["font-subscript"]
  								},
  								".note-btn-superscript": function() {
  									return "superscript" === o["font-superscript"]
  								},
  								".note-btn-strikethrough": function() {
  									return "strikethrough" === o["font-strikethrough"]
  								}
  							}), o["font-family"]) {
  							var r = o["font-family"].split(",").map((function(t) {
  									return t.replace(/[\'\"]/g, "").replace(/\s+$/, "").replace(/^\s+/, "")
  								})),
  								a = C.find(r, this.isFontInstalled.bind(this));
  							n.find(".dropdown-fontname a").each((function(t, e) {
  								var n = i()(e),
  									o = n.data("value") + "" == a + "";
  								n.toggleClass("checked", o)
  							})), n.find(".note-current-fontname").text(a).css("font-family", a)
  						}
  						if (o["font-size"]) {
  							var s = o["font-size"];
  							n.find(".dropdown-fontsize a").each((function(t, e) {
  								var n = i()(e),
  									o = n.data("value") + "" == s + "";
  								n.toggleClass("checked", o)
  							})), n.find(".note-current-fontsize").text(s);
  							var l = o["font-size-unit"];
  							n.find(".dropdown-fontsizeunit a").each((function(t, e) {
  								var n = i()(e),
  									o = n.data("value") + "" == l + "";
  								n.toggleClass("checked", o)
  							})), n.find(".note-current-fontsizeunit").text(l)
  						}
  						if (o["line-height"]) {
  							var c = o["line-height"];
  							n.find(".dropdown-line-height li a").each((function(t, n) {
  								var o = i()(n).data("value") + "" == c + "";
  								e.className = o ? "checked" : ""
  							}))
  						}
  					}
  				}, {
  					key: "updateBtnStates",
  					value: function(t, e) {
  						var n = this;
  						i.a.each(e, (function(e, o) {
  							n.ui.toggleBtnActive(t.find(e), o())
  						}))
  					}
  				}, {
  					key: "tableMoveHandler",
  					value: function(t) {
  						var e, n = i()(t.target.parentNode),
  							o = n.next(),
  							r = n.find(".note-dimension-picker-mousecatcher"),
  							a = n.find(".note-dimension-picker-highlighted"),
  							s = n.find(".note-dimension-picker-unhighlighted");
  						if (void 0 === t.offsetX) {
  							var l = i()(t.target).offset();
  							e = {
  								x: t.pageX - l.left,
  								y: t.pageY - l.top
  							}
  						} else e = {
  							x: t.offsetX,
  							y: t.offsetY
  						};
  						var c = Math.ceil(e.x / 18) || 1,
  							u = Math.ceil(e.y / 18) || 1;
  						a.css({
  							width: c + "em",
  							height: u + "em"
  						}), r.data("value", c + "x" + u), c > 3 && c < this.options.insertTableMaxSize.col && s.css({
  							width: c + 1 + "em"
  						}), u > 3 && u < this.options.insertTableMaxSize.row && s.css({
  							height: u + 1 + "em"
  						}), o.html(c + " x " + u)
  					}
  				}]) && ae(e.prototype, n), o && ae(e, o), t
  			}();
  
  			function le(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var ce = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.$window = i()(window), this.$document = i()(document), this.ui = i.a.summernote.ui, this.$note = e.layoutInfo.note, this.$editor = e.layoutInfo.editor, this.$toolbar = e.layoutInfo.toolbar, this.$editable = e.layoutInfo.editable, this.$statusbar = e.layoutInfo.statusbar, this.options = e.options, this.isFollowing = !1, this.followScroll = this.followScroll.bind(this)
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return !this.options.airMode
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.options.toolbar = this.options.toolbar || [], this.options.toolbar.length ? this.context.invoke("buttons.build", this.$toolbar, this.options.toolbar) : this.$toolbar.hide(), this.options.toolbarContainer && this.$toolbar.appendTo(this.options.toolbarContainer), this.changeContainer(!1), this.$note.on("summernote.keyup summernote.mouseup summernote.change", (function() {
  							t.context.invoke("buttons.updateCurrentStyle")
  						})), this.context.invoke("buttons.updateCurrentStyle"), this.options.followingToolbar && this.$window.on("scroll resize", this.followScroll)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$toolbar.children().remove(), this.options.followingToolbar && this.$window.off("scroll resize", this.followScroll)
  					}
  				}, {
  					key: "followScroll",
  					value: function() {
  						if (this.$editor.hasClass("fullscreen")) return !1;
  						var t = this.$editor.outerHeight(),
  							e = this.$editor.width(),
  							n = this.$toolbar.height(),
  							o = this.$statusbar.height(),
  							r = 0;
  						this.options.otherStaticBar && (r = i()(this.options.otherStaticBar).outerHeight());
  						var a = this.$document.scrollTop(),
  							s = this.$editor.offset().top,
  							l = s - r,
  							c = s + t - r - n - o;
  						!this.isFollowing && a > l && a < c - n ? (this.isFollowing = !0, this.$editable.css({
  							marginTop: this.$toolbar.outerHeight()
  						}), this.$toolbar.css({
  							position: "fixed",
  							top: r,
  							width: e,
  							zIndex: 1e3
  						})) : this.isFollowing && (a < l || a > c) && (this.isFollowing = !1, this.$toolbar.css({
  							position: "relative",
  							top: 0,
  							width: "100%",
  							zIndex: "auto"
  						}), this.$editable.css({
  							marginTop: ""
  						}))
  					}
  				}, {
  					key: "changeContainer",
  					value: function(t) {
  						t ? this.$toolbar.prependTo(this.$editor) : this.options.toolbarContainer && this.$toolbar.appendTo(this.options.toolbarContainer), this.options.followingToolbar && this.followScroll()
  					}
  				}, {
  					key: "updateFullscreen",
  					value: function(t) {
  						this.ui.toggleBtnActive(this.$toolbar.find(".btn-fullscreen"), t), this.changeContainer(t)
  					}
  				}, {
  					key: "updateCodeview",
  					value: function(t) {
  						this.ui.toggleBtnActive(this.$toolbar.find(".btn-codeview"), t), t ? this.deactivate() : this.activate()
  					}
  				}, {
  					key: "activate",
  					value: function(t) {
  						var e = this.$toolbar.find("button");
  						t || (e = e.not(".note-codeview-keep")), this.ui.toggleBtn(e, !0)
  					}
  				}, {
  					key: "deactivate",
  					value: function(t) {
  						var e = this.$toolbar.find("button");
  						t || (e = e.not(".note-codeview-keep")), this.ui.toggleBtn(e, !1)
  					}
  				}]) && le(e.prototype, n), o && le(e, o), t
  			}();
  
  			function ue(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var de = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.$body = i()(document.body), this.$editor = e.layoutInfo.editor, this.options = e.options, this.lang = this.options.langInfo, e.memo("help.linkDialog.show", this.options.langInfo.help["linkDialog.show"])
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = this.options.dialogsInBody ? this.$body : this.options.container,
  							e = ['<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 ? "" : i()("<div/>").append(this.ui.checkbox({
  								className: "sn-checkbox-open-in-new-window",
  								text: this.lang.link.openInNewWindow,
  								checked: !0
  							}).render()).html(), i()("<div/>").append(this.ui.checkbox({
  								className: "sn-checkbox-use-protocol",
  								text: this.lang.link.useProtocol,
  								checked: !0
  							}).render()).html()].join(""),
  							n = '<input type="button" href="#" class="'.concat("btn btn-primary note-btn note-btn-primary note-link-btn", '" 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: e,
  							footer: n
  						}).render().appendTo(t)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.ui.hideDialog(this.$dialog), this.$dialog.remove()
  					}
  				}, {
  					key: "bindEnterKey",
  					value: function(t, e) {
  						t.on("keypress", (function(t) {
  							t.keyCode === xt.code.ENTER && (t.preventDefault(), e.trigger("click"))
  						}))
  					}
  				}, {
  					key: "toggleLinkBtn",
  					value: function(t, e, n) {
  						this.ui.toggleBtn(t, e.val() && n.val())
  					}
  				}, {
  					key: "showLinkDialog",
  					value: function(t) {
  						var e = this;
  						return i.a.Deferred((function(n) {
  							var o = e.$dialog.find(".note-link-text"),
  								i = e.$dialog.find(".note-link-url"),
  								r = e.$dialog.find(".note-link-btn"),
  								a = e.$dialog.find(".sn-checkbox-open-in-new-window input[type=checkbox]"),
  								s = e.$dialog.find(".sn-checkbox-use-protocol input[type=checkbox]");
  							e.ui.onDialogShown(e.$dialog, (function() {
  								e.context.triggerEvent("dialog.shown"), !t.url && g.isValidUrl(t.text) && (t.url = t.text), o.on("input paste propertychange", (function() {
  									t.text = o.val(), e.toggleLinkBtn(r, o, i)
  								})).val(t.text), i.on("input paste propertychange", (function() {
  									t.text || o.val(i.val()), e.toggleLinkBtn(r, o, i)
  								})).val(t.url), m.isSupportTouch || i.trigger("focus"), e.toggleLinkBtn(r, o, i), e.bindEnterKey(i, r), e.bindEnterKey(o, r);
  								var l = void 0 !== t.isNewWindow ? t.isNewWindow : e.context.options.linkTargetBlank;
  								a.prop("checked", l);
  								var c = !t.url && e.context.options.useProtocol;
  								s.prop("checked", c), r.one("click", (function(r) {
  									r.preventDefault(), n.resolve({
  										range: t.range,
  										url: i.val(),
  										text: o.val(),
  										isNewWindow: a.is(":checked"),
  										checkProtocol: s.is(":checked")
  									}), e.ui.hideDialog(e.$dialog)
  								}))
  							})), e.ui.onDialogHidden(e.$dialog, (function() {
  								o.off(), i.off(), r.off(), "pending" === n.state() && n.reject()
  							})), e.ui.showDialog(e.$dialog)
  						})).promise()
  					}
  				}, {
  					key: "show",
  					value: function() {
  						var t = this,
  							e = this.context.invoke("editor.getLinkInfo");
  						this.context.invoke("editor.saveRange"), this.showLinkDialog(e).then((function(e) {
  							t.context.invoke("editor.restoreRange"), t.context.invoke("editor.createLink", e)
  						})).fail((function() {
  							t.context.invoke("editor.restoreRange")
  						}))
  					}
  				}]) && ue(e.prototype, n), o && ue(e, o), t
  			}();
  
  			function he(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var fe = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.options = e.options, this.events = {
  						"summernote.keyup summernote.mouseup summernote.change summernote.scroll": function() {
  							n.update()
  						},
  						"summernote.disable summernote.dialog.shown summernote.blur": function() {
  							n.hide()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return !C.isEmpty(this.options.popover.link)
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						this.$popover = this.ui.popover({
  							className: "note-link-popover",
  							callback: function(t) {
  								t.find(".popover-content,.note-popover-content").prepend('<span><a target="_blank"></a>&nbsp;</span>')
  							}
  						}).render().appendTo(this.options.container);
  						var t = this.$popover.find(".popover-content,.note-popover-content");
  						this.context.invoke("buttons.build", t, this.options.popover.link), this.$popover.on("mousedown", (function(t) {
  							t.preventDefault()
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$popover.remove()
  					}
  				}, {
  					key: "update",
  					value: function() {
  						if (this.context.invoke("editor.hasFocus")) {
  							var t = this.context.invoke("editor.getLastRange");
  							if (t.isCollapsed() && t.isOnAnchor()) {
  								var e = pt.ancestor(t.sc, pt.isAnchor),
  									n = i()(e).attr("href");
  								this.$popover.find("a").attr("href", n).text(n);
  								var o = pt.posFromPlaceholder(e),
  									r = i()(this.options.container).offset();
  								o.top -= r.top, o.left -= r.left, this.$popover.css({
  									display: "block",
  									left: o.left,
  									top: o.top
  								})
  							} else this.hide()
  						} else this.hide()
  					}
  				}, {
  					key: "hide",
  					value: function() {
  						this.$popover.hide()
  					}
  				}]) && he(e.prototype, n), o && he(e, o), t
  			}();
  
  			function pe(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var me = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.$body = i()(document.body), this.$editor = e.layoutInfo.editor, this.options = e.options, this.lang = this.options.langInfo
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = "";
  						if (this.options.maximumImageFileSize) {
  							var e = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)),
  								n = 1 * (this.options.maximumImageFileSize / Math.pow(1024, e)).toFixed(2) + " " + " KMGTP" [e] + "B";
  							t = "<small>".concat(this.lang.image.maximumFileSize + " : " + n, "</small>")
  						}
  						var o = this.options.dialogsInBody ? this.$body : this.options.container,
  							i = ['<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="image/*" multiple="multiple"/>', t, "</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(""),
  							r = '<input type="button" href="#" class="'.concat("btn btn-primary note-btn note-btn-primary note-image-btn", '" value="').concat(this.lang.image.insert, '" disabled>');
  						this.$dialog = this.ui.dialog({
  							title: this.lang.image.insert,
  							fade: this.options.dialogsFade,
  							body: i,
  							footer: r
  						}).render().appendTo(o)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.ui.hideDialog(this.$dialog), this.$dialog.remove()
  					}
  				}, {
  					key: "bindEnterKey",
  					value: function(t, e) {
  						t.on("keypress", (function(t) {
  							t.keyCode === xt.code.ENTER && (t.preventDefault(), e.trigger("click"))
  						}))
  					}
  				}, {
  					key: "show",
  					value: function() {
  						var t = this;
  						this.context.invoke("editor.saveRange"), this.showImageDialog().then((function(e) {
  							t.ui.hideDialog(t.$dialog), t.context.invoke("editor.restoreRange"), "string" == typeof e ? t.options.callbacks.onImageLinkInsert ? t.context.triggerEvent("image.link.insert", e) : t.context.invoke("editor.insertImage", e) : t.context.invoke("editor.insertImagesOrCallback", e)
  						})).fail((function() {
  							t.context.invoke("editor.restoreRange")
  						}))
  					}
  				}, {
  					key: "showImageDialog",
  					value: function() {
  						var t = this;
  						return i.a.Deferred((function(e) {
  							var n = t.$dialog.find(".note-image-input"),
  								o = t.$dialog.find(".note-image-url"),
  								i = t.$dialog.find(".note-image-btn");
  							t.ui.onDialogShown(t.$dialog, (function() {
  								t.context.triggerEvent("dialog.shown"), n.replaceWith(n.clone().on("change", (function(t) {
  									e.resolve(t.target.files || t.target.value)
  								})).val("")), o.on("input paste propertychange", (function() {
  									t.ui.toggleBtn(i, o.val())
  								})).val(""), m.isSupportTouch || o.trigger("focus"), i.click((function(t) {
  									t.preventDefault(), e.resolve(o.val())
  								})), t.bindEnterKey(o, i)
  							})), t.ui.onDialogHidden(t.$dialog, (function() {
  								n.off(), o.off(), i.off(), "pending" === e.state() && e.reject()
  							})), t.ui.showDialog(t.$dialog)
  						}))
  					}
  				}]) && pe(e.prototype, n), o && pe(e, o), t
  			}();
  
  			function ve(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var ge = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.editable = e.layoutInfo.editable[0], this.options = e.options, this.events = {
  						"summernote.disable summernote.blur": function() {
  							n.hide()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return !C.isEmpty(this.options.popover.image)
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						this.$popover = this.ui.popover({
  							className: "note-image-popover"
  						}).render().appendTo(this.options.container);
  						var t = this.$popover.find(".popover-content,.note-popover-content");
  						this.context.invoke("buttons.build", t, this.options.popover.image), this.$popover.on("mousedown", (function(t) {
  							t.preventDefault()
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$popover.remove()
  					}
  				}, {
  					key: "update",
  					value: function(t, e) {
  						if (pt.isImg(t)) {
  							var n = i()(t).offset(),
  								o = i()(this.options.container).offset(),
  								r = {};
  							this.options.popatmouse ? (r.left = e.pageX - 20, r.top = e.pageY) : r = n, r.top -= o.top, r.left -= o.left, this.$popover.css({
  								display: "block",
  								left: r.left,
  								top: r.top
  							})
  						} else this.hide()
  					}
  				}, {
  					key: "hide",
  					value: function() {
  						this.$popover.hide()
  					}
  				}]) && ve(e.prototype, n), o && ve(e, o), t
  			}();
  
  			function be(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var ye = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.options = e.options, this.events = {
  						"summernote.mousedown": function(t, e) {
  							n.update(e.target)
  						},
  						"summernote.keyup summernote.scroll summernote.change": function() {
  							n.update()
  						},
  						"summernote.disable summernote.blur": function() {
  							n.hide()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return !C.isEmpty(this.options.popover.table)
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						this.$popover = this.ui.popover({
  							className: "note-table-popover"
  						}).render().appendTo(this.options.container);
  						var t = this.$popover.find(".popover-content,.note-popover-content");
  						this.context.invoke("buttons.build", t, this.options.popover.table), m.isFF && document.execCommand("enableInlineTableEditing", !1, !1), this.$popover.on("mousedown", (function(t) {
  							t.preventDefault()
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$popover.remove()
  					}
  				}, {
  					key: "update",
  					value: function(t) {
  						if (this.context.isDisabled()) return !1;
  						var e = pt.isCell(t);
  						if (e) {
  							var n = pt.posFromPlaceholder(t),
  								o = i()(this.options.container).offset();
  							n.top -= o.top, n.left -= o.left, this.$popover.css({
  								display: "block",
  								left: n.left,
  								top: n.top
  							})
  						} else this.hide();
  						return e
  					}
  				}, {
  					key: "hide",
  					value: function() {
  						this.$popover.hide()
  					}
  				}]) && be(e.prototype, n), o && be(e, o), t
  			}();
  
  			function ke(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var we = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.$body = i()(document.body), this.$editor = e.layoutInfo.editor, this.options = e.options, this.lang = this.options.langInfo
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = this.options.dialogsInBody ? this.$body : this.options.container,
  							e = ['<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(""),
  							n = '<input type="button" href="#" class="'.concat("btn btn-primary note-btn note-btn-primary note-video-btn", '" value="').concat(this.lang.video.insert, '" disabled>');
  						this.$dialog = this.ui.dialog({
  							title: this.lang.video.insert,
  							fade: this.options.dialogsFade,
  							body: e,
  							footer: n
  						}).render().appendTo(t)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.ui.hideDialog(this.$dialog), this.$dialog.remove()
  					}
  				}, {
  					key: "bindEnterKey",
  					value: function(t, e) {
  						t.on("keypress", (function(t) {
  							t.keyCode === xt.code.ENTER && (t.preventDefault(), e.trigger("click"))
  						}))
  					}
  				}, {
  					key: "createVideoNode",
  					value: function(t) {
  						var e, n = t.match(/\/\/(?:(?:www|m)\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))([\w|-]{11})(?:(?:[\?&]t=)(\S+))?$/),
  							o = t.match(/(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/),
  							r = t.match(/\/\/vine\.co\/v\/([a-zA-Z0-9]+)/),
  							a = t.match(/\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/),
  							s = t.match(/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/),
  							l = t.match(/\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/),
  							c = t.match(/\/\/v\.qq\.com.*?vid=(.+)/),
  							u = t.match(/\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/),
  							d = t.match(/^.+.(mp4|m4v)$/),
  							h = t.match(/^.+.(ogg|ogv)$/),
  							f = t.match(/^.+.(webm)$/),
  							p = t.match(/(?:www\.|\/\/)facebook\.com\/([^\/]+)\/videos\/([0-9]+)/);
  						if (n && 11 === n[1].length) {
  							var m = n[1],
  								v = 0;
  							if (void 0 !== n[2]) {
  								var g = n[2].match(/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/);
  								if (g)
  									for (var b = [3600, 60, 1], y = 0, k = b.length; y < k; y++) v += void 0 !== g[y + 1] ? b[y] * parseInt(g[y + 1], 10) : 0
  							}
  							e = i()("<iframe>").attr("frameborder", 0).attr("src", "//www.youtube.com/embed/" + m + (v > 0 ? "?start=" + v : "")).attr("width", "640").attr("height", "360")
  						} else if (o && o[0].length) e = i()("<iframe>").attr("frameborder", 0).attr("src", "https://instagram.com/p/" + o[1] + "/embed/").attr("width", "612").attr("height", "710").attr("scrolling", "no").attr("allowtransparency", "true");
  						else if (r && r[0].length) e = i()("<iframe>").attr("frameborder", 0).attr("src", r[0] + "/embed/simple").attr("width", "600").attr("height", "600").attr("class", "vine-embed");
  						else if (a && a[3].length) e = i()("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder", 0).attr("src", "//player.vimeo.com/video/" + a[3]).attr("width", "640").attr("height", "360");
  						else if (s && s[2].length) e = i()("<iframe>").attr("frameborder", 0).attr("src", "//www.dailymotion.com/embed/video/" + s[2]).attr("width", "640").attr("height", "360");
  						else if (l && l[1].length) e = i()("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder", 0).attr("height", "498").attr("width", "510").attr("src", "//player.youku.com/embed/" + l[1]);
  						else if (c && c[1].length || u && u[2].length) {
  							var w = c && c[1].length ? c[1] : u[2];
  							e = i()("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder", 0).attr("height", "310").attr("width", "500").attr("src", "https://v.qq.com/txp/iframe/player.html?vid=" + w + "&amp;auto=0")
  						} else if (d || h || f) e = i()("<video controls>").attr("src", t).attr("width", "640").attr("height", "360");
  						else {
  							if (!p || !p[0].length) return !1;
  							e = i()("<iframe>").attr("frameborder", 0).attr("src", "https://www.facebook.com/plugins/video.php?href=" + encodeURIComponent(p[0]) + "&show_text=0&width=560").attr("width", "560").attr("height", "301").attr("scrolling", "no").attr("allowtransparency", "true")
  						}
  						return e.addClass("note-video-clip"), e[0]
  					}
  				}, {
  					key: "show",
  					value: function() {
  						var t = this,
  							e = this.context.invoke("editor.getSelectedText");
  						this.context.invoke("editor.saveRange"), this.showVideoDialog(e).then((function(e) {
  							t.ui.hideDialog(t.$dialog), t.context.invoke("editor.restoreRange");
  							var n = t.createVideoNode(e);
  							n && t.context.invoke("editor.insertNode", n)
  						})).fail((function() {
  							t.context.invoke("editor.restoreRange")
  						}))
  					}
  				}, {
  					key: "showVideoDialog",
  					value: function() {
  						var t = this;
  						return i.a.Deferred((function(e) {
  							var n = t.$dialog.find(".note-video-url"),
  								o = t.$dialog.find(".note-video-btn");
  							t.ui.onDialogShown(t.$dialog, (function() {
  								t.context.triggerEvent("dialog.shown"), n.on("input paste propertychange", (function() {
  									t.ui.toggleBtn(o, n.val())
  								})), m.isSupportTouch || n.trigger("focus"), o.click((function(t) {
  									t.preventDefault(), e.resolve(n.val())
  								})), t.bindEnterKey(n, o)
  							})), t.ui.onDialogHidden(t.$dialog, (function() {
  								n.off(), o.off(), "pending" === e.state() && e.reject()
  							})), t.ui.showDialog(t.$dialog)
  						}))
  					}
  				}]) && ke(e.prototype, n), o && ke(e, o), t
  			}();
  
  			function Ce(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var xe = function() {
  				function t(e) {
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.$body = i()(document.body), this.$editor = e.layoutInfo.editor, this.options = e.options, this.lang = this.options.langInfo
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "initialize",
  					value: function() {
  						var t = this.options.dialogsInBody ? this.$body : this.options.container,
  							e = ['<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote 0.8.18</a> · ', '<a href="https://github.com/summernote/summernote" target="_blank">Project</a> · ', '<a href="https://github.com/summernote/summernote/issues" target="_blank">Issues</a>', "</p>"].join("");
  						this.$dialog = this.ui.dialog({
  							title: this.lang.options.help,
  							fade: this.options.dialogsFade,
  							body: this.createShortcutList(),
  							footer: e,
  							callback: function(t) {
  								t.find(".modal-body,.note-modal-body").css({
  									"max-height": 300,
  									overflow: "scroll"
  								})
  							}
  						}).render().appendTo(t)
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.ui.hideDialog(this.$dialog), this.$dialog.remove()
  					}
  				}, {
  					key: "createShortcutList",
  					value: function() {
  						var t = this,
  							e = this.options.keyMap[m.isMac ? "mac" : "pc"];
  						return Object.keys(e).map((function(n) {
  							var o = e[n],
  								r = i()('<div><div class="help-list-item"></div></div>');
  							return r.append(i()("<label><kbd>" + n + "</kdb></label>").css({
  								width: 180,
  								"margin-right": 10
  							})).append(i()("<span/>").html(t.context.memo("help." + o) || o)), r.html()
  						})).join("")
  					}
  				}, {
  					key: "showHelpDialog",
  					value: function() {
  						var t = this;
  						return i.a.Deferred((function(e) {
  							t.ui.onDialogShown(t.$dialog, (function() {
  								t.context.triggerEvent("dialog.shown"), e.resolve()
  							})), t.ui.showDialog(t.$dialog)
  						})).promise()
  					}
  				}, {
  					key: "show",
  					value: function() {
  						var t = this;
  						this.context.invoke("editor.saveRange"), this.showHelpDialog().then((function() {
  							t.context.invoke("editor.restoreRange")
  						}))
  					}
  				}]) && Ce(e.prototype, n), o && Ce(e, o), t
  			}();
  
  			function Se(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Te = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.options = e.options, this.hidable = !0, this.onContextmenu = !1, this.pageX = null, this.pageY = null, this.events = {
  						"summernote.contextmenu": function(t) {
  							n.options.editing && (t.preventDefault(), t.stopPropagation(), n.onContextmenu = !0, n.update(!0))
  						},
  						"summernote.mousedown": function(t, e) {
  							n.pageX = e.pageX, n.pageY = e.pageY
  						},
  						"summernote.keyup summernote.mouseup summernote.scroll": function(t, e) {
  							n.options.editing && !n.onContextmenu && (n.pageX = e.pageX, n.pageY = e.pageY, n.update()), n.onContextmenu = !1
  						},
  						"summernote.disable summernote.change summernote.dialog.shown summernote.blur": function() {
  							n.hide()
  						},
  						"summernote.focusout": function() {
  							n.$popover.is(":active,:focus") || n.hide()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return this.options.airMode && !C.isEmpty(this.options.popover.air)
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.$popover = this.ui.popover({
  							className: "note-air-popover"
  						}).render().appendTo(this.options.container);
  						var e = this.$popover.find(".popover-content");
  						this.context.invoke("buttons.build", e, this.options.popover.air), this.$popover.on("mousedown", (function() {
  							t.hidable = !1
  						})), this.$popover.on("mouseup", (function() {
  							t.hidable = !0
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$popover.remove()
  					}
  				}, {
  					key: "update",
  					value: function(t) {
  						var e = this.context.invoke("editor.currentStyle");
  						if (!e.range || e.range.isCollapsed() && !t) this.hide();
  						else {
  							var n = {
  									left: this.pageX,
  									top: this.pageY
  								},
  								o = i()(this.options.container).offset();
  							n.top -= o.top, n.left -= o.left, this.$popover.css({
  								display: "block",
  								left: Math.max(n.left, 0) + -5,
  								top: n.top + 5
  							}), this.context.invoke("buttons.updateCurrentStyle", this.$popover)
  						}
  					}
  				}, {
  					key: "updateCodeview",
  					value: function(t) {
  						this.ui.toggleBtnActive(this.$popover.find(".btn-codeview"), t), t && this.hide()
  					}
  				}, {
  					key: "hide",
  					value: function() {
  						this.hidable && this.$popover.hide()
  					}
  				}]) && Se(e.prototype, n), o && Se(e, o), t
  			}();
  
  			function Ee(t, e) {
  				for (var n = 0; n < e.length; n++) {
  					var o = e[n];
  					o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o)
  				}
  			}
  			var Ie = function() {
  				function t(e) {
  					var n = this;
  					! function(t, e) {
  						if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
  					}(this, t), this.context = e, this.ui = i.a.summernote.ui, this.$editable = e.layoutInfo.editable, this.options = e.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(t, e) {
  							e.isDefaultPrevented() || n.handleKeyup(e)
  						},
  						"summernote.keydown": function(t, e) {
  							n.handleKeydown(e)
  						},
  						"summernote.disable summernote.dialog.shown summernote.blur": function() {
  							n.hide()
  						}
  					}
  				}
  				var e, n, o;
  				return e = t, (n = [{
  					key: "shouldInitialize",
  					value: function() {
  						return this.hints.length > 0
  					}
  				}, {
  					key: "initialize",
  					value: function() {
  						var t = this;
  						this.lastWordRange = null, this.matchingWord = null, this.$popover = this.ui.popover({
  							className: "note-hint-popover",
  							hideArrow: !0,
  							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(e) {
  							t.$content.find(".active").removeClass("active"), i()(e.currentTarget).addClass("active"), t.replace()
  						})), this.$popover.on("mousedown", (function(t) {
  							t.preventDefault()
  						}))
  					}
  				}, {
  					key: "destroy",
  					value: function() {
  						this.$popover.remove()
  					}
  				}, {
  					key: "selectItem",
  					value: function(t) {
  						this.$content.find(".active").removeClass("active"), t.addClass("active"), this.$content[0].scrollTop = t[0].offsetTop - this.$content.innerHeight() / 2
  					}
  				}, {
  					key: "moveDown",
  					value: function() {
  						var t = this.$content.find(".note-hint-item.active"),
  							e = t.next();
  						if (e.length) this.selectItem(e);
  						else {
  							var n = t.parent().next();
  							n.length || (n = this.$content.find(".note-hint-group").first()), this.selectItem(n.find(".note-hint-item").first())
  						}
  					}
  				}, {
  					key: "moveUp",
  					value: function() {
  						var t = this.$content.find(".note-hint-item.active"),
  							e = t.prev();
  						if (e.length) this.selectItem(e);
  						else {
  							var n = t.parent().prev();
  							n.length || (n = this.$content.find(".note-hint-group").last()), this.selectItem(n.find(".note-hint-item").last())
  						}
  					}
  				}, {
  					key: "replace",
  					value: function() {
  						var t = this.$content.find(".note-hint-item.active");
  						if (t.length) {
  							var e = this.nodeFromItem(t);
  							if (null !== this.matchingWord && 0 === this.matchingWord.length) this.lastWordRange.so = this.lastWordRange.eo;
  							else if (null !== this.matchingWord && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {
  								var n = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;
  								n > 0 && (this.lastWordRange.so += n)
  							}
  							if (this.lastWordRange.insertNode(e), "next" === this.options.hintSelect) {
  								var o = document.createTextNode("");
  								i()(e).after(o), wt.createFromNodeBefore(o).select()
  							} else wt.createFromNodeAfter(e).select();
  							this.lastWordRange = null, this.hide(), this.context.invoke("editor.focus")
  						}
  					}
  				}, {
  					key: "nodeFromItem",
  					value: function(t) {
  						var e = this.hints[t.data("index")],
  							n = t.data("item"),
  							o = e.content ? e.content(n) : n;
  						return "string" == typeof o && (o = pt.createText(o)), o
  					}
  				}, {
  					key: "createItemTemplates",
  					value: function(t, e) {
  						var n = this.hints[t];
  						return e.map((function(e) {
  							var o = i()('<div class="note-hint-item"/>');
  							return o.append(n.template ? n.template(e) : e + ""), o.data({
  								index: t,
  								item: e
  							}), o
  						}))
  					}
  				}, {
  					key: "handleKeydown",
  					value: function(t) {
  						this.$popover.is(":visible") && (t.keyCode === xt.code.ENTER ? (t.preventDefault(), this.replace()) : t.keyCode === xt.code.UP ? (t.preventDefault(), this.moveUp()) : t.keyCode === xt.code.DOWN && (t.preventDefault(), this.moveDown()))
  					}
  				}, {
  					key: "searchKeyword",
  					value: function(t, e, n) {
  						var o = this.hints[t];
  						if (o && o.match.test(e) && o.search) {
  							var i = o.match.exec(e);
  							this.matchingWord = i[0], o.search(i[1], n)
  						} else n()
  					}
  				}, {
  					key: "createGroup",
  					value: function(t, e) {
  						var n = this,
  							o = i()('<div class="note-hint-group note-hint-group-' + t + '"></div>');
  						return this.searchKeyword(t, e, (function(e) {
  							(e = e || []).length && (o.html(n.createItemTemplates(t, e)), n.show())
  						})), o
  					}
  				}, {
  					key: "handleKeyup",
  					value: function(t) {
  						var e = this;
  						if (!C.contains([xt.code.ENTER, xt.code.UP, xt.code.DOWN], t.keyCode)) {
  							var n, o, r = this.context.invoke("editor.getLastRange");
  							if ("words" === this.options.hintMode) {
  								if (n = r.getWordsRange(r), o = n.toString(), this.hints.forEach((function(t) {
  										if (t.match.test(o)) return n = r.getWordsMatchRange(t.match), !1
  									})), !n) return void this.hide();
  								o = n.toString()
  							} else n = r.getWordRange(), o = n.toString();
  							if (this.hints.length && o) {
  								this.$content.empty();
  								var a = g.rect2bnd(C.last(n.getClientRects())),
  									s = i()(this.options.container).offset();
  								a && (a.top -= s.top, a.left -= s.left, this.$popover.hide(), this.lastWordRange = n, this.hints.forEach((function(t, n) {
  									t.match.test(o) && e.createGroup(n, o).appendTo(e.$content)
  								})), this.$content.find(".note-hint-item:first").addClass("active"), "top" === this.direction ? this.$popover.css({
  									left: a.left,
  									top: a.top - this.$popover.outerHeight() - 5
  								}) : this.$popover.css({
  									left: a.left,
  									top: a.top + a.height + 5
  								}))
  							} else this.hide()
  						}
  					}
  				}, {
  					key: "show",
  					value: function() {
  						this.$popover.show()
  					}
  				}, {
  					key: "hide",
  					value: function() {
  						this.$popover.hide()
  					}
  				}]) && Ee(e.prototype, n), o && Ee(e, o), t
  			}();
  			i.a.summernote = i.a.extend(i.a.summernote, {
  				version: "0.8.18",
  				plugins: {},
  				dom: pt,
  				range: wt,
  				lists: C,
  				options: {
  					langInfo: i.a.summernote.lang["en-US"],
  					editing: !0,
  					modules: {
  						editor: Ht,
  						clipboard: Bt,
  						dropzone: Ot,
  						codeview: Kt,
  						statusbar: qt,
  						fullscreen: Gt,
  						handle: Zt,
  						hintPopover: Ie,
  						autoLink: Jt,
  						autoSync: ee,
  						autoReplace: oe,
  						placeholder: re,
  						buttons: se,
  						toolbar: ce,
  						linkDialog: de,
  						linkPopover: fe,
  						imageDialog: me,
  						imagePopover: ge,
  						tablePopover: ye,
  						videoDialog: we,
  						helpDialog: xe,
  						airPopover: Te
  					},
  					buttons: {},
  					lang: "en-US",
  					followingToolbar: !1,
  					toolbarPosition: "top",
  					otherStaticBar: "",
  					codeviewKeepButton: !1,
  					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"]]
  					],
  					popatmouse: !0,
  					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"]]
  						]
  					},
  					airMode: !1,
  					overrideContextMenu: !1,
  					width: null,
  					height: null,
  					linkTargetBlank: !0,
  					useProtocol: !0,
  					defaultProtocol: "http://",
  					focus: !1,
  					tabDisabled: !1,
  					tabSize: 4,
  					styleWithCSS: !1,
  					shortcuts: !0,
  					textareaAutoSync: !0,
  					tooltip: "auto",
  					container: null,
  					maxTextLength: 0,
  					blockquoteBreakingLevel: 2,
  					spellCheck: !0,
  					disableGrammar: !1,
  					placeholder: null,
  					inheritPlaceholder: !1,
  					recordEveryKeystroke: !1,
  					historyLimit: 200,
  					showDomainOnlyForAutolink: !1,
  					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: !0,
  					fontSizes: ["8", "9", "10", "11", "12", "14", "18", "24", "36"],
  					fontSizeUnits: ["px", "pt"],
  					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"]
  					],
  					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
  					},
  					dialogsInBody: !1,
  					dialogsFade: !1,
  					maximumImageFileSize: null,
  					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: !0,
  						lineNumbers: !0
  					},
  					codeviewFilter: !1,
  					codeviewFilterRegex: /<\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,
  					codeviewIframeFilter: !0,
  					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", "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"
  					}
  				}
  			})
  		},
  		4: function(t, e, n) {},
  		52: function(t, e, n) {
  			"use strict";
  			n.r(e);
  			var o = n(0),
  				i = n.n(o),
  				r = n(1);
  
  			function a(t) {
  				return (a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
  					return typeof t
  				} : function(t) {
  					return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
  				})(t)
  			}
  			var s = r.a.create('<div class="note-editor note-frame panel panel-default"/>'),
  				l = r.a.create('<div class="panel-heading note-toolbar" role="toolbar"/>'),
  				c = r.a.create('<div class="note-editing-area"/>'),
  				u = r.a.create('<textarea class="note-codable" aria-multiline="true"/>'),
  				d = r.a.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'),
  				h = r.a.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("")),
  				f = r.a.create('<div class="note-editor note-airframe"/>'),
  				p = r.a.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("")),
  				m = r.a.create('<div class="note-btn-group btn-group">'),
  				v = r.a.create('<ul class="note-dropdown-menu dropdown-menu">', (function(t, e) {
  					var n = Array.isArray(e.items) ? e.items.map((function(t) {
  						var n = "string" == typeof t ? t : t.value || "",
  							o = e.template ? e.template(t) : t,
  							i = "object" === a(t) ? t.option : void 0;
  						return '<li aria-label="' + n + '"><a href="#" ' + ('data-value="' + n + '"' + (void 0 !== i ? ' data-bs-option="' + i + '"' : "")) + ">" + o + "</a></li>"
  					})).join("") : e.items;
  					t.html(n).attr({
  						"aria-label": e.title
  					}), e && e.codeviewKeepButton && t.addClass("note-codeview-keep")
  				})),
  				g = function(t, e) {
  					return t + " " + C(e.icons.caret, "span")
  				},
  				b = r.a.create('<ul class="note-dropdown-menu dropdown-menu note-check">', (function(t, e) {
  					var n = Array.isArray(e.items) ? e.items.map((function(t) {
  						var n = "string" == typeof t ? t : t.value || "",
  							o = e.template ? e.template(t) : t;
  						return '<li aria-label="' + t + '"><a href="#" data-value="' + n + '">' + C(e.checkClassName) + " " + o + "</a></li>"
  					})).join("") : e.items;
  					t.html(n).attr({
  						"aria-label": e.title
  					}), e && e.codeviewKeepButton && t.addClass("note-codeview-keep")
  				})),
  				y = r.a.create('<div class="modal note-modal" aria-hidden="false" tabindex="-1" role="dialog"/>', (function(t, e) {
  					e.fade && t.addClass("fade"), t.attr({
  						"aria-label": e.title
  					}), t.html(['<div class="modal-dialog">', '<div class="modal-content">', e.title ?
  					'<div class="modal-header"><h6 class="modal-title">' + e.title + '</h6> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" aria-hidden="true">&times;</button></div>' : ""
  					, '<div class="modal-body">' + e.body + "</div>", e.footer ? '<div class="modal-footer">' + e.footer + "</div>" : "", "</div>", "</div>"].join(""))
  				})),
  				k = r.a.create(['<div class="note-popover popover in">', '<div class="arrow"></div>', '<div class="popover-content note-children-container"></div>', "</div>"].join(""), (function(t, e) {
  					var n = void 0 !== e.direction ? e.direction : "bottom";
  					t.addClass(n), e.hideArrow && t.find(".arrow").hide()
  				})),
  				w = r.a.create('<div class="checkbox"></div>', (function(t, e) {
  					t.html(["<label" + (e.id ? ' for="note-' + e.id + '"' : "") + ">", '<input type="checkbox"' + (e.id ? ' id="note-' + e.id + '"' : ""), e.checked ? " checked" : "", ' aria-checked="' + (e.checked ? "true" : "false") + '"/>', e.text ? e.text : "", "</label>"].join(""))
  				})),
  				C = function(t, e) {
  					return "<" + (e = e || "i") + ' class="' + t + '"></' + e + ">"
  				},
  				x = function(t) {
  					return {
  						editor: s,
  						toolbar: l,
  						editingArea: c,
  						codable: u,
  						editable: d,
  						statusbar: h,
  						airEditor: f,
  						airEditable: p,
  						buttonGroup: m,
  						dropdown: v,
  						dropdownButtonContents: g,
  						dropdownCheck: b,
  						dialog: y,
  						popover: k,
  						checkbox: w,
  						icon: C,
  						options: t,
  						palette: function(e, n) {
  							return r.a.create('<div class="note-color-palette"/>', (function(e, n) {
  								for (var o = [], i = 0, r = n.colors.length; i < r; i++) {
  									for (var a = n.eventName, s = n.colors[i], l = n.colorsName[i], c = [], u = 0, d = s.length; u < d; u++) {
  										var h = s[u],
  											f = l[u];
  										c.push(['<button type="button" class="note-color-btn"', 'style="background-color:', h, '" ', 'data-event="', a, '" ', 'data-value="', h, '" ', 'title="', f, '" ', 'aria-label="', f, '" ', 'data-bs-toggle="button" tabindex="-1"></button>'].join(""))
  									}
  									o.push('<div class="note-color-row">' + c.join("") + "</div>")
  								}
  								e.html(o.join("")), n.tooltip && e.find(".note-color-btn").tooltip({
  									container: n.container || t.container,
  									trigger: "hover",
  									placement: "bottom"
  								})
  							}))(e, n)
  						},
  						button: function(e, n) {
  							return r.a.create('<button type="button" class="note-btn btn btn-default btn-sm" tabindex="-1">', (function(e, n) {
  								// n && n.tooltip && e.attr({
  								// 	title: n.tooltip,
  								// 	"aria-label": n.tooltip
  								// })
  								// .tooltip({
  								// 	container: n.container || t.container,
  								// 	trigger: "hover",
  								// 	placement: "bottom"
  								// })
  								// .on("click", (function(t) {
  								// 	i()(t.currentTarget).tooltip("hide")
  								// })),
  								 n && n.codeviewButton && e.addClass("note-codeview-keep")
  							}))(e, n)
  						},
  						toggleBtn: function(t, e) {
  							t.toggleClass("disabled", !e), t.attr("disabled", !e)
  						},
  						toggleBtnActive: function(t, e) {
  							t.toggleClass("active", e)
  						},
  						onDialogShown: function(t, e) {
  							t.one("shown.bs.modal", e)
  						},
  						onDialogHidden: function(t, e) {
  							t.one("hidden.bs.modal", e)
  						},
  						showDialog: function(t) {
  							t.modal("show")
  						},
  						hideDialog: function(t) {
  							t.modal("hide")
  						},
  						createLayout: function(e) {
  							var n = (t.airMode ? f([c([u(), p()])]) : "bottom" === t.toolbarPosition ? s([c([u(), d()]), l(), h()]) : s([l(), c([u(), d()]), h()])).render();
  							return n.insertAfter(e), {
  								note: e,
  								editor: n,
  								toolbar: n.find(".note-toolbar"),
  								editingArea: n.find(".note-editing-area"),
  								editable: n.find(".note-editable"),
  								codable: n.find(".note-codable"),
  								statusbar: n.find(".note-statusbar")
  							}
  						},
  						removeLayout: function(t, e) {
  							t.html(e.editable.html()), e.editor.remove(), t.show()
  						}
  					}
  				};
  			n(3), n(4);
  			i.a.summernote = i.a.extend(i.a.summernote, {
  				ui_template: x,
  				interface: "bs3"
  			})
  		}
  	})
  }));
  //# sourceMappingURL=summernote.min.js.map
  