����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 13.127.148.211  /  Your IP : 216.73.216.121
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux ip-172-31-43-195 5.15.0-1083-aws #90~20.04.1-Ubuntu SMP Tue Apr 22 09:59:53 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 7.4.3-4ubuntu2.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /data/letsfame/admin/vendor/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /data/letsfame/admin/vendor//summernote-lite.min.js
/*! For license information please see summernote-lite.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 = 51)
    }({
        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-" + 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: {
                        insertParagraph: "Insert Paragraph",
                        undo: "Undoes the last command",
                        redo: "Redoes 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", "montserrat"];
            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 = !!window.CodeMirror
              , p = "ontouchstart"in window || navigator.MaxTouchPoints > 0 || navigator.msMaxTouchPoints > 0
              , m = u ? "DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted" : "input"
              , v = {
                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: p,
                hasCodeMirror: 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: m,
                genericFontFamilies: a,
                validFontName: s
            };
            var g = 0;
            var b = {
                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() {
                    g = 0
                },
                uniqueId: function(t) {
                    var e = ++g + "";
                    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 k(t) {
                return t[0]
            }
            function y(t) {
                return t[t.length - 1]
            }
            function w(t) {
                return t.slice(1)
            }
            function C(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 x = {
                head: k,
                last: y,
                initial: function(t) {
                    return t.slice(0, t.length - 1)
                },
                tail: w,
                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: C,
                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 || b.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 ? w(t).reduce((function(t, n) {
                        var o = y(t);
                        return e(y(o), n) ? o[o.length] = n : t[t.length] = [n],
                        t
                    }
                    ), [[k(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++)
                        C(e, t[n]) || e.push(t[n]);
                    return e
                }
            }
              , S = String.fromCharCode(160);
            function T(t) {
                return t && i()(t).hasClass("note-editable")
            }
            function $(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 N(t) {
                return !T(t) && (t && /^DIV|^P|^LI|^H[1-7]/.test(t.nodeName.toUpperCase()))
            }
            var P = $("PRE")
              , R = $("LI");
            var L = $("TABLE")
              , A = $("DATA");
            function F(t) {
                return !(M(t) || D(t) || H(t) || N(t) || L(t) || z(t) || A(t))
            }
            function D(t) {
                return t && /^UL|^OL/.test(t.nodeName.toUpperCase())
            }
            var H = $("HR");
            function B(t) {
                return t && /^TD|^TH/.test(t.nodeName.toUpperCase())
            }
            var z = $("BLOCKQUOTE");
            function M(t) {
                return B(t) || z(t) || T(t)
            }
            var O = $("A");
            var j = $("BODY");
            var U = v.isMSIE && v.browserVersion < 11 ? "&nbsp;" : "<br>";
            function W(t) {
                return E(t) ? t.nodeValue.length : t ? t.childNodes.length : 0
            }
            function K(t) {
                var e = W(t);
                return 0 === e || (!E(t) && 1 === e && t.innerHTML === U || !(!x.all(t.childNodes, E) || "" !== t.innerHTML))
            }
            function q(t) {
                I(t) || W(t) || (t.innerHTML = U)
            }
            function V(t, e) {
                for (; t; ) {
                    if (e(t))
                        return t;
                    if (T(t))
                        break;
                    t = t.parentNode
                }
                return null
            }
            function _(t, e) {
                e = e || b.fail;
                var n = [];
                return V(t, (function(t) {
                    return T(t) || n.push(t),
                    e(t)
                }
                )),
                n
            }
            function G(t, e) {
                e = e || b.fail;
                for (var n = []; t && !e(t); )
                    n.push(t),
                    t = t.nextSibling;
                return n
            }
            function Y(t, e) {
                var n = e.nextSibling
                  , o = e.parentNode;
                return n ? o.insertBefore(t, n) : o.appendChild(t),
                t
            }
            function Z(t, e) {
                return i.a.each(e, (function(e, n) {
                    t.appendChild(n)
                }
                )),
                t
            }
            function X(t) {
                return 0 === t.offset
            }
            function Q(t) {
                return t.offset === W(t.node)
            }
            function J(t) {
                return X(t) || Q(t)
            }
            function tt(t, e) {
                for (; t && t !== e; ) {
                    if (0 !== nt(t))
                        return !1;
                    t = t.parentNode
                }
                return !0
            }
            function et(t, e) {
                if (!e)
                    return !1;
                for (; t && t !== e; ) {
                    if (nt(t) !== W(t.parentNode) - 1)
                        return !1;
                    t = t.parentNode
                }
                return !0
            }
            function nt(t) {
                for (var e = 0; t = t.previousSibling; )
                    e += 1;
                return e
            }
            function ot(t) {
                return !!(t && t.childNodes && t.childNodes.length)
            }
            function it(t, e) {
                var n, o;
                if (0 === t.offset) {
                    if (T(t.node))
                        return null;
                    n = t.node.parentNode,
                    o = nt(t.node)
                } else
                    ot(t.node) ? o = W(n = t.node.childNodes[t.offset - 1]) : (n = t.node,
                    o = e ? 0 : t.offset - 1);
                return {
                    node: n,
                    offset: o
                }
            }
            function rt(t, e) {
                var n, o;
                if (K(t.node))
                    return null;
                if (W(t.node) === t.offset) {
                    if (T(t.node))
                        return null;
                    n = t.node.parentNode,
                    o = nt(t.node) + 1
                } else if (ot(t.node)) {
                    if (o = 0,
                    K(n = t.node.childNodes[t.offset]))
                        return null
                } else if (n = t.node,
                o = e ? W(t.node) : t.offset + 1,
                K(n))
                    return null;
                return {
                    node: n,
                    offset: o
                }
            }
            function at(t, e) {
                return t.node === e.node && t.offset === e.offset
            }
            function st(t, e) {
                var n = e && e.isSkipPaddingBlankHTML
                  , o = e && e.isNotSplitEdgePoint
                  , i = e && e.isDiscardEmptySplits;
                if (i && (n = !0),
                J(t) && (E(t.node) || o)) {
                    if (X(t))
                        return t.node;
                    if (Q(t))
                        return t.node.nextSibling
                }
                if (E(t.node))
                    return t.node.splitText(t.offset);
                var r = t.node.childNodes[t.offset]
                  , a = Y(t.node.cloneNode(!1), t.node);
                return Z(a, G(r)),
                n || (q(t.node),
                q(a)),
                i && (K(t.node) && ut(t.node),
                K(a)) ? (ut(a),
                t.node.nextSibling) : a
            }
            function lt(t, e, n) {
                var o = _(e.node, b.eq(t));
                return o.length ? 1 === o.length ? st(e, n) : o.reduce((function(t, o) {
                    return t === e.node && (t = st(e, n)),
                    st({
                        node: o,
                        offset: t ? nt(t) : W(o)
                    }, n)
                }
                )) : null
            }
            function ct(t) {
                return document.createElement(t)
            }
            function ut(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 dt = $("TEXTAREA");
            function ht(t, e) {
                var n = dt(t[0]) ? t.val() : t.html();
                return e ? n.replace(/[\n\r]/g, "") : n
            }
            var ft = {
                NBSP_CHAR: S,
                ZERO_WIDTH_NBSP_CHAR: "\ufeff",
                blank: U,
                emptyPara: "<p>".concat(U, "</p>"),
                makePredByNodeName: $,
                isEditable: T,
                isControlSizing: function(t) {
                    return t && i()(t).hasClass("note-control-sizing")
                },
                isText: E,
                isElement: function(t) {
                    return t && 1 === t.nodeType
                },
                isVoid: I,
                isPara: N,
                isPurePara: function(t) {
                    return N(t) && !R(t)
                },
                isHeading: function(t) {
                    return t && /^H[1-7]/.test(t.nodeName.toUpperCase())
                },
                isInline: F,
                isBlock: b.not(F),
                isBodyInline: function(t) {
                    return F(t) && !V(t, N)
                },
                isBody: j,
                isParaInline: function(t) {
                    return F(t) && !!V(t, N)
                },
                isPre: P,
                isList: D,
                isTable: L,
                isData: A,
                isCell: B,
                isBlockquote: z,
                isBodyContainer: M,
                isAnchor: O,
                isDiv: $("DIV"),
                isLi: R,
                isBR: $("BR"),
                isSpan: $("SPAN"),
                isB: $("B"),
                isU: $("U"),
                isS: $("S"),
                isI: $("I"),
                isImg: $("IMG"),
                isTextarea: dt,
                deepestChildIsEmpty: function(t) {
                    do {
                        if (null === t.firstElementChild || "" === t.firstElementChild.innerHTML)
                            break
                    } while (t = t.firstElementChild);
                    return K(t)
                },
                isEmpty: K,
                isEmptyAnchor: b.and(O, K),
                isClosestSibling: function(t, e) {
                    return t.nextSibling === e || t.previousSibling === e
                },
                withClosestSiblings: function(t, e) {
                    e = e || b.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: W,
                isLeftEdgePoint: X,
                isRightEdgePoint: Q,
                isEdgePoint: J,
                isLeftEdgeOf: tt,
                isRightEdgeOf: et,
                isLeftEdgePointOf: function(t, e) {
                    return X(t) && tt(t.node, e)
                },
                isRightEdgePointOf: function(t, e) {
                    return Q(t) && et(t.node, e)
                },
                prevPoint: it,
                nextPoint: rt,
                isSamePoint: at,
                isVisiblePoint: function(t) {
                    if (E(t.node) || !ot(t.node) || K(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 = it(t)
                    }
                    return null
                },
                nextPointUntil: function(t, e) {
                    for (; t; ) {
                        if (e(t))
                            return t;
                        t = rt(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 !== S
                },
                isSpacePoint: function(t) {
                    if (!E(t.node))
                        return !1;
                    var e = t.node.nodeValue.charAt(t.offset - 1);
                    return " " === e || e === S
                },
                walkPoint: function(t, e, n, o) {
                    for (var i = t; i && (n(i),
                    !at(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 === W(t); ) {
                        if (e(t))
                            return t;
                        if (T(t))
                            break;
                        t = t.parentNode
                    }
                    return null
                },
                listAncestor: _,
                lastAncestor: function(t, e) {
                    var n = _(t);
                    return x.last(n.filter(e))
                },
                listNext: G,
                listPrev: function(t, e) {
                    e = e || b.fail;
                    for (var n = []; t && !e(t); )
                        n.push(t),
                        t = t.previousSibling;
                    return n
                },
                listDescendant: function(t, e) {
                    var n = [];
                    return e = e || b.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 = _(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: Y,
                appendChildNodes: Z,
                position: nt,
                hasChildren: ot,
                makeOffsetPath: function(t, e) {
                    return _(e, b.eq(t)).map(nt).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: lt,
                splitPoint: function(t, e) {
                    var n, o, i = e ? N : M, r = _(t.node, i), a = x.last(r) || t.node;
                    i(a) ? (n = r[r.length - 2],
                    o = a) : o = (n = a).parentNode;
                    var s = n && lt(n, t, {
                        isSkipPaddingBlankHTML: e,
                        isNotSplitEdgePoint: e
                    });
                    return s || o !== t.node || (s = t.node.childNodes[t.offset]),
                    {
                        rightNode: s,
                        container: o
                    }
                },
                create: ct,
                createText: function(t) {
                    return document.createTextNode(t)
                },
                remove: ut,
                removeWhile: function(t, e) {
                    for (; t && !T(t) && e(t); ) {
                        var n = t.parentNode;
                        ut(t),
                        t = n
                    }
                },
                replace: function(t, e) {
                    if (t.nodeName.toUpperCase() === e.toUpperCase())
                        return t;
                    var n = ct(e);
                    return t.style.cssText && (n.style.cssText = t.style.cssText),
                    Z(n, x.from(t.childNodes)),
                    Y(n, t),
                    ut(t),
                    n
                },
                html: function(t, e) {
                    var n = ht(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: ht,
                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) && x.contains(t.classList, "note-styletag")
                }
            };
            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 mt = 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(ft.emptyPara),
                        this._destroy(),
                        this._initialize(),
                        t && this.disable()
                    }
                }, {
                    key: "_initialize",
                    value: function() {
                        var t = this;
                        this.options.id = b.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.layoutInfo.codable.val(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 = x.head(arguments)
                          , e = x.tail(x.from(arguments))
                          , n = this.options.callbacks[b.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 || b.ok,
                        e.shouldInitialize() && (e.initialize && e.initialize(),
                        e.events && ft.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 && ft.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 = x.head(arguments)
                          , e = x.tail(x.from(arguments))
                          , n = t.split(".")
                          , o = n.length > 1
                          , i = o && x.head(n)
                          , r = o ? x.last(n) : x.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
                    }
                }]) && pt(e.prototype, n),
                o && pt(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)
                }
            }
            function gt(t, e) {
                var n, o, i = t.parentElement(), r = document.body.createTextRange(), a = x.from(i.childNodes);
                for (n = 0; n < a.length; n++)
                    if (!ft.isText(a[n])) {
                        if (r.moveToElementText(a[n]),
                        r.compareEndPoints("StartToStart", t) >= 0)
                            break;
                        o = a[n]
                    }
                if (0 !== n && ft.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 && ft.isText(l.nextSibling) && u === l.nodeValue.length && (u -= l.nodeValue.length,
                    l = l.nextSibling),
                    i = l,
                    n = u
                }
                return {
                    cont: i,
                    offset: n
                }
            }
            function bt(t) {
                var e = document.body.createTextRange()
                  , n = function t(e, n) {
                    var o, i;
                    if (ft.isText(e)) {
                        var r = ft.listPrev(e, b.not(ft.isText))
                          , a = x.last(r).previousSibling;
                        o = a || e.parentNode,
                        n += x.sum(x.tail(r), ft.nodeLength),
                        i = !a
                    } else {
                        if (o = e.childNodes[n] || e,
                        ft.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(x.head(arguments))
                      , e = "string" === t
                      , n = "object" === t
                      , o = i.a.extend({}, i.a.summernote.options, n ? x.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 ? !v.isSupportTouch : o.tooltip,
                    this.each((function(t, e) {
                        var n = i()(e);
                        if (!n.data("summernote")) {
                            var r = new mt(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, x.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(ft.isEditable),
                    this.isOnList = this.makeIsOn(ft.isList),
                    this.isOnAnchor = this.makeIsOn(ft.isAnchor),
                    this.isOnCell = this.makeIsOn(ft.isCell),
                    this.isOnData = this.makeIsOn(ft.isData)
                }
                var e, n, o;
                return e = t,
                (n = [{
                    key: "nativeRange",
                    value: function() {
                        if (v.isW3CRangeSupport) {
                            var t = document.createRange();
                            return t.setStart(this.sc, this.sc.data && this.so > this.sc.data.length ? 0 : this.so),
                            t.setEnd(this.ec, this.sc.data ? Math.min(this.eo, this.sc.data.length) : this.eo),
                            t
                        }
                        var e = bt({
                            node: this.sc,
                            offset: this.so
                        });
                        return e.setEndPoint("EndToEnd", bt({
                            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 (v.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 (ft.isVisiblePoint(t) && (!ft.isEdgePoint(t) || ft.isRightEdgePoint(t) && !e || ft.isLeftEdgePoint(t) && e || ft.isRightEdgePoint(t) && e && ft.isVoid(t.node.nextSibling) || ft.isLeftEdgePoint(t) && !e && ft.isVoid(t.node.previousSibling) || ft.isBlock(t.node) && ft.isEmpty(t.node)))
                                return t;
                            var n = ft.ancestor(t.node, ft.isBlock)
                              , o = !1;
                            if (!o) {
                                var i = ft.prevPoint(t) || {
                                    node: null
                                };
                                o = (ft.isLeftEdgePointOf(t, n) || ft.isVoid(i.node)) && !e
                            }
                            var r = !1;
                            if (!r) {
                                var a = ft.nextPoint(t) || {
                                    node: null
                                };
                                r = (ft.isRightEdgePointOf(t, n) || ft.isVoid(a.node)) && e
                            }
                            if (o || r) {
                                if (ft.isVisiblePoint(t))
                                    return t;
                                e = !e
                            }
                            return (e ? ft.nextPointUntil(ft.nextPoint(t), ft.isVisiblePoint) : ft.prevPointUntil(ft.prevPoint(t), ft.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 || b.ok;
                        var n = e && e.includeAncestor
                          , o = e && e.fullyContains
                          , i = this.getStartPoint()
                          , r = this.getEndPoint()
                          , a = []
                          , s = [];
                        return ft.walkPoint(i, r, (function(e) {
                            var i;
                            ft.isEditable(e.node) || (o ? (ft.isLeftEdgePoint(e) && s.push(e.node),
                            ft.isRightEdgePoint(e) && x.contains(s, e.node) && (i = e.node)) : i = n ? ft.ancestor(e.node, t) : e.node,
                            i && t(i) && a.push(i))
                        }
                        ), !0),
                        x.unique(a)
                    }
                }, {
                    key: "commonAncestor",
                    value: function() {
                        return ft.commonAncestor(this.sc, this.ec)
                    }
                }, {
                    key: "expand",
                    value: function(e) {
                        var n = ft.ancestor(this.sc, e)
                          , o = ft.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 = ft.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 ft.isText(this.ec) && !ft.isEdgePoint(this.getEndPoint()) && this.ec.splitText(this.eo),
                        ft.isText(this.sc) && !ft.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 = ft.prevPointUntil(e.getStartPoint(), (function(t) {
                            return !x.contains(n, t.node)
                        }
                        ))
                          , r = [];
                        return i.a.each(n, (function(t, e) {
                            var n = e.parentNode;
                            o.node !== n && 1 === ft.nodeLength(n) && r.push(n),
                            ft.remove(e, !1)
                        }
                        )),
                        i.a.each(r, (function(t, e) {
                            ft.remove(e, !1)
                        }
                        )),
                        new t(o.node,o.offset,o.node,o.offset).normalize()
                    }
                }, {
                    key: "makeIsOn",
                    value: function(t) {
                        return function() {
                            var e = ft.ancestor(this.sc, t);
                            return !!e && e === ft.ancestor(this.ec, t)
                        }
                    }
                }, {
                    key: "isLeftEdgeOf",
                    value: function(t) {
                        if (!ft.isLeftEdgePoint(this.getStartPoint()))
                            return !1;
                        var e = ft.ancestor(this.sc, t);
                        return e && ft.isLeftEdgeOf(this.sc, e)
                    }
                }, {
                    key: "isCollapsed",
                    value: function() {
                        return this.sc === this.ec && this.so === this.eo
                    }
                }, {
                    key: "wrapBodyInlineWithPara",
                    value: function() {
                        if (ft.isBodyContainer(this.sc) && ft.isEmpty(this.sc))
                            return this.sc.innerHTML = ft.emptyPara,
                            new t(this.sc.firstChild,0,this.sc.firstChild,0);
                        var e, n = this.normalize();
                        if (ft.isParaInline(this.sc) || ft.isPara(this.sc))
                            return n;
                        if (ft.isInline(n.sc)) {
                            var o = ft.listAncestor(n.sc, b.not(ft.isInline));
                            e = x.last(o),
                            ft.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 = ft.listPrev(e, ft.isParaInline).reverse();
                            if ((i = i.concat(ft.listNext(e.nextSibling, ft.isParaInline))).length) {
                                var r = ft.wrap(x.head(i), "p");
                                ft.appendChildNodes(r, x.tail(i))
                            }
                        }
                        return this.normalize()
                    }
                }, {
                    key: "insertNode",
                    value: function(t) {
                        var e = this;
                        (ft.isText(t) || ft.isInline(t)) && (e = this.wrapBodyInlineWithPara().deleteContents());
                        var n = ft.splitPoint(e.getStartPoint(), ft.isInline(t));
                        return n.rightNode ? n.rightNode.parentNode.insertBefore(t, 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 = x.from(e.childNodes)
                          , o = this;
                        return o.so >= 0 && (n = n.reverse()),
                        n = n.map((function(t) {
                            return o.insertNode(t)
                        }
                        )),
                        o.so > 0 && (n = n.reverse()),
                        n
                    }
                }, {
                    key: "toString",
                    value: function() {
                        var t = this.nativeRange();
                        return v.isW3CRangeSupport ? t.toString() : t.text
                    }
                }, {
                    key: "getWordRange",
                    value: function(e) {
                        var n = this.getEndPoint();
                        if (!ft.isCharPoint(n))
                            return this;
                        var o = ft.prevPointUntil(n, (function(t) {
                            return !ft.isCharPoint(t)
                        }
                        ));
                        return e && (n = ft.nextPointUntil(n, (function(t) {
                            return !ft.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 !ft.isCharPoint(t) && !ft.isSpacePoint(t)
                        };
                        if (o(n))
                            return this;
                        var i = ft.prevPointUntil(n, o);
                        return e && (n = ft.nextPointUntil(n, o)),
                        new t(i.node,i.offset,n.node,n.offset)
                    }
                }, {
                    key: "getWordsMatchRange",
                    value: function(e) {
                        var n = this.getEndPoint()
                          , o = ft.prevPointUntil(n, (function(o) {
                            if (!ft.isCharPoint(o) && !ft.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: ft.makeOffsetPath(t, this.sc),
                                offset: this.so
                            },
                            e: {
                                path: ft.makeOffsetPath(t, this.ec),
                                offset: this.eo
                            }
                        }
                    }
                }, {
                    key: "paraBookmark",
                    value: function(t) {
                        return {
                            s: {
                                path: x.tail(ft.makeOffsetPath(x.head(t), this.sc)),
                                offset: this.so
                            },
                            e: {
                                path: x.tail(ft.makeOffsetPath(x.last(t), this.ec)),
                                offset: this.eo
                            }
                        }
                    }
                }, {
                    key: "getClientRects",
                    value: function() {
                        return this.nativeRange().getClientRects()
                    }
                }]) && vt(e.prototype, n),
                o && vt(e, o),
                t
            }()
              , yt = {
                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 ft.isEditable(r) && (r = r.lastChild),
                        this.createFromBodyElement(r, ft.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 (v.isW3CRangeSupport) {
                        var i = document.getSelection();
                        if (!i || 0 === i.rangeCount)
                            return null;
                        if (ft.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 = gt(l, !0)
                          , u = gt(s, !1);
                        ft.isText(c.node) && ft.isLeftEdgePoint(c) && ft.isTextNode(u.node) && ft.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 = ft.nodeLength(o);
                    return ft.isVoid(e) && (n = ft.listPrev(e).length - 1,
                    e = e.parentNode),
                    ft.isBR(o) ? (i = ft.listPrev(o).length - 1,
                    o = o.parentNode) : ft.isVoid(o) && (i = ft.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 = ft.fromOffsetPath(t, e.s.path)
                      , o = e.s.offset
                      , i = ft.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 = ft.fromOffsetPath(x.head(e), t.s.path)
                      , r = ft.fromOffsetPath(x.last(e), t.e.path);
                    return new kt(i,n,r,o)
                }
            }
              , wt = {
                BACKSPACE: 8,
                TAB: 9,
                ENTER: 13,
                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
            }
              , Ct = {
                isEdit: function(t) {
                    return x.contains([wt.BACKSPACE, wt.TAB, wt.ENTER, wt.SPACE, wt.DELETE], t)
                },
                isMove: function(t) {
                    return x.contains([wt.LEFT, wt.UP, wt.RIGHT, wt.DOWN], t)
                },
                isNavigation: function(t) {
                    return x.contains([wt.HOME, wt.END, wt.PAGEUP, wt.PAGEDOWN], t)
                },
                nameFromCode: b.invertObject(wt),
                code: wt
            };
            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 St = 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 = yt.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 && yt.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)
                    }
                }]) && xt(e.prototype, n),
                o && xt(e, o),
                t
            }();
            function Tt(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 $t = 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 (v.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(ft.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(ft.create(n))];
                        var a = ft.makePredByNodeName(n)
                          , s = t.nodes(ft.isText, {
                            fullyContains: !0
                        }).map((function(t) {
                            return ft.singleChildAncestor(t, a) || ft.wrap(t, n)
                        }
                        ));
                        if (o) {
                            if (r) {
                                var l = t.nodes();
                                a = b.and(a, (function(t) {
                                    return x.contains(l, t)
                                }
                                ))
                            }
                            return s.map((function(t) {
                                var e = ft.withClosestSiblings(t, a)
                                  , n = x.head(e)
                                  , o = x.tail(e);
                                return i.a.each(o, (function(t, e) {
                                    ft.appendChildNodes(n, e.childNodes),
                                    ft.remove(e)
                                }
                                )),
                                x.head(e)
                            }
                            ))
                        }
                        return s
                    }
                }, {
                    key: "current",
                    value: function(t) {
                        var e = i()(ft.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 = ft.ancestor(t.sc, ft.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() && ft.ancestor(t.sc, ft.isAnchor),
                        n.ancestors = ft.listAncestor(t.sc, ft.isEditable),
                        n.range = t,
                        n
                    }
                }]) && Tt(e.prototype, n),
                o && Tt(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: "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 = yt.create(t).wrapBodyInlineWithPara()
                          , o = n.nodes(ft.isPara, {
                            includeAncestor: !0
                        })
                          , r = x.clusterBy(o, b.peq2("parentNode"));
                        i.a.each(r, (function(t, n) {
                            var o = x.head(n);
                            if (ft.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 = yt.create(t).wrapBodyInlineWithPara()
                          , o = n.nodes(ft.isPara, {
                            includeAncestor: !0
                        })
                          , r = x.clusterBy(o, b.peq2("parentNode"));
                        i.a.each(r, (function(t, n) {
                            var o = x.head(n);
                            ft.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 = yt.create(e).wrapBodyInlineWithPara()
                          , r = o.nodes(ft.isPara, {
                            includeAncestor: !0
                        })
                          , a = o.paraBookmark(r)
                          , s = x.clusterBy(r, b.peq2("parentNode"));
                        if (x.find(r, ft.isPurePara)) {
                            var l = [];
                            i.a.each(s, (function(e, o) {
                                l = l.concat(n.wrapList(o, t))
                            }
                            )),
                            r = l
                        } else {
                            var c = o.nodes(ft.isList, {
                                includeAncestor: !0
                            }).filter((function(e) {
                                return !i.a.nodeName(e, t)
                            }
                            ));
                            c.length ? i.a.each(c, (function(e, n) {
                                ft.replace(n, t)
                            }
                            )) : r = this.releaseList(s, !0)
                        }
                        yt.createFromParaBookmark(a, r).select()
                    }
                }, {
                    key: "wrapList",
                    value: function(t, e) {
                        var n = x.head(t)
                          , o = x.last(t)
                          , i = ft.isList(n.previousSibling) && n.previousSibling
                          , r = ft.isList(o.nextSibling) && o.nextSibling
                          , a = i || ft.insertAfter(ft.create(e || "UL"), o);
                        return t = t.map((function(t) {
                            return ft.isPurePara(t) ? ft.replace(t, "LI") : t
                        }
                        )),
                        ft.appendChildNodes(a, t),
                        r && (ft.appendChildNodes(a, x.from(r.childNodes)),
                        ft.remove(r)),
                        t
                    }
                }, {
                    key: "releaseList",
                    value: function(t, e) {
                        var n = this
                          , o = [];
                        return i.a.each(t, (function(t, r) {
                            var a = x.head(r)
                              , s = x.last(r)
                              , l = e ? ft.lastAncestor(a, ft.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 ? ft.splitTree(l, {
                                    node: s.parentNode,
                                    offset: ft.position(s) + 1
                                }, {
                                    isSkipPaddingBlankHTML: !0
                                }) : null
                                  , d = ft.splitTree(l, {
                                    node: a.parentNode,
                                    offset: ft.position(a)
                                }, {
                                    isSkipPaddingBlankHTML: !0
                                });
                                r = e ? ft.listDescendant(d, ft.isLi) : x.from(d.childNodes).filter(ft.isLi),
                                !e && ft.isList(l.parentNode) || (r = r.map((function(t) {
                                    return ft.replace(t, "P")
                                }
                                ))),
                                i.a.each(x.from(r).reverse(), (function(t, e) {
                                    ft.insertAfter(e, l)
                                }
                                ));
                                var h = x.compact([l, d, u]);
                                i.a.each(h, (function(t, e) {
                                    var n = [e].concat(ft.listDescendant(e, ft.isList));
                                    i.a.each(n.reverse(), (function(t, e) {
                                        ft.nodeLength(e) || ft.remove(e, !0)
                                    }
                                    ))
                                }
                                ))
                            }
                            o = o.concat(r)
                        }
                        )),
                        o
                    }
                }, {
                    key: "appendToPrevious",
                    value: function(t) {
                        return t.previousSibling ? ft.appendChildNodes(t.previousSibling, [t]) : this.wrapList([t], "LI")
                    }
                }, {
                    key: "findList",
                    value: function(t) {
                        return t ? x.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
                    }
                }]) && Et(e.prototype, n),
                o && Et(e, o),
                t
            }();
            function Nt(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 Pt = 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 It,
                    this.options = e.options
                }
                var e, n, o;
                return e = t,
                (n = [{
                    key: "insertTab",
                    value: function(t, e) {
                        var n = ft.createText(new Array(e + 1).join(ft.NBSP_CHAR));
                        (t = t.deleteContents()).insertNode(n, !0),
                        (t = yt.create(n, e)).select()
                    }
                }, {
                    key: "insertParagraph",
                    value: function(t, e) {
                        e = (e = (e = e || yt.create(t)).deleteContents()).wrapBodyInlineWithPara();
                        var n, o = ft.ancestor(e.sc, ft.isPara);
                        if (o) {
                            if (ft.isLi(o) && (ft.isEmpty(o) || ft.deepestChildIsEmpty(o)))
                                return void this.bullet.toggleList(o.parentNode.nodeName);
                            var r = null;
                            if (1 === this.options.blockquoteBreakingLevel ? r = ft.ancestor(o, ft.isBlockquote) : 2 === this.options.blockquoteBreakingLevel && (r = ft.lastAncestor(o, ft.isBlockquote)),
                            r) {
                                n = i()(ft.emptyPara)[0],
                                ft.isRightEdgePoint(e.getStartPoint()) && ft.isBR(e.sc.nextSibling) && i()(e.sc.nextSibling).remove();
                                var a = ft.splitTree(r, e.getStartPoint(), {
                                    isDiscardEmptySplits: !0
                                });
                                a ? a.parentNode.insertBefore(n, a) : ft.insertAfter(n, r)
                            } else {
                                n = ft.splitTree(o, e.getStartPoint());
                                var s = ft.listDescendant(o, ft.isEmptyAnchor);
                                s = s.concat(ft.listDescendant(n, ft.isEmptyAnchor)),
                                i.a.each(s, (function(t, e) {
                                    ft.remove(e)
                                }
                                )),
                                (ft.isHeading(n) || ft.isPre(n) || ft.isCustomStyleTag(n)) && ft.isEmpty(n) && (n = ft.replace(n, "p"))
                            }
                        } else {
                            var l = e.sc.childNodes[e.so];
                            n = i()(ft.emptyPara)[0],
                            l ? e.sc.insertBefore(n, l) : e.sc.appendChild(n)
                        }
                        yt.create(n, 0).normalize().select().scrollIntoView(t)
                    }
                }]) && Nt(e.prototype, n),
                o && Nt(e, o),
                t
            }();
            function Rt(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 Lt = 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])
                }()
            };
            Lt.where = {
                Row: 0,
                Column: 1
            },
            Lt.requestAction = {
                Add: 0,
                Delete: 1
            },
            Lt.resultAction = {
                Ignore: 0,
                SubtractSpanCount: 1,
                RemoveCell: 2,
                AddCell: 3,
                SumSpanCount: 4
            };
            var At = 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 = ft.ancestor(t.commonAncestor(), ft.isCell)
                          , o = ft.ancestor(n, ft.isTable)
                          , i = ft.listDescendant(o, ft.isCell)
                          , r = x[e ? "prev" : "next"](i, n);
                        r && yt.create(r, 0).select()
                    }
                }, {
                    key: "addRow",
                    value: function(t, e) {
                        for (var n = ft.ancestor(t.commonAncestor(), ft.isCell), o = i()(n).closest("tr"), r = this.recoverAttributes(o), a = i()("<tr" + r + "></tr>"), s = new Lt(n,Lt.where.Row,Lt.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 Lt.resultAction.AddCell:
                                a.append("<td" + u + ">" + ft.blank + "</td>");
                                break;
                            case Lt.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 + ">" + ft.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 = ft.ancestor(t.commonAncestor(), ft.isCell)
                          , o = i()(n).closest("tr");
                        i()(o).siblings().push(o);
                        for (var r = new Lt(n,Lt.where.Column,Lt.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 Lt.resultAction.AddCell:
                                "right" === e ? i()(s.baseCell).after("<td" + l + ">" + ft.blank + "</td>") : i()(s.baseCell).before("<td" + l + ">" + ft.blank + "</td>");
                                break;
                            case Lt.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 + ">" + ft.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 = ft.ancestor(t.commonAncestor(), ft.isCell), n = i()(e).closest("tr"), o = n.children("td, th").index(i()(e)), r = n[0].rowIndex, a = new Lt(e,Lt.where.Row,Lt.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 Lt.resultAction.Ignore:
                                    continue;
                                case Lt.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 Lt.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 Lt.resultAction.RemoveCell:
                                    continue
                                }
                            }
                        n.remove()
                    }
                }, {
                    key: "deleteCol",
                    value: function(t) {
                        for (var e = ft.ancestor(t.commonAncestor(), ft.isCell), n = i()(e).closest("tr"), o = n.children("td, th").index(i()(e)), r = new Lt(e,Lt.where.Column,Lt.requestAction.Delete,i()(n).closest("table")[0]).getActionList(), a = 0; a < r.length; a++)
                            if (r[a])
                                switch (r[a].action) {
                                case Lt.resultAction.Ignore:
                                    continue;
                                case Lt.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 Lt.resultAction.RemoveCell:
                                    ft.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>" + ft.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 = ft.ancestor(t.commonAncestor(), ft.isCell);
                        i()(e).closest("table").remove()
                    }
                }]) && Rt(e.prototype, n),
                o && Rt(e, o),
                t
            }();
            function Ft(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 Dt = 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 $t,
                    this.table = new At,
                    this.typing = new Pt(e),
                    this.bullet = new It,
                    this.history = new St(e),
                    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", v.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(yt.createFromNodeAfter(t).select()))
                    }
                    )),
                    this.insertText = this.wrapCommand((function(t) {
                        if (!n.isLimited(t.length)) {
                            var e = n.getLastRange().insertNode(ft.createText(t));
                            n.setLastRange(yt.create(e, ft.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(yt.createFromNodeAfter(x.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(ft.create("HR"));
                        t.nextSibling && n.setLastRange(yt.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")
                            }
                            ));
                            var h = yt.createFromNodeBefore(x.head(u)).getStartPoint()
                              , f = yt.createFromNodeAfter(x.last(u)).getEndPoint();
                            n.setLastRange(yt.create(h.node, h.offset, f.node, f.offset).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 === Ct.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-gramm", !1),
                        this.$editable.html(ft.html(this.$note) || ft.emptyPara),
                        this.$editable.on(v.inputEventName, b.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[v.isMac ? "mac" : "pc"]
                          , n = [];
                        t.metaKey && n.push("CMD"),
                        t.ctrlKey && !t.altKey && n.push("CTRL"),
                        t.shiftKey && n.push("SHIFT");
                        var o = Ct.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
                                Ct.isEdit(t.keyCode) && this.afterCommand();
                        else
                            this.afterCommand();
                        return !1
                    }
                }, {
                    key: "preventDefaultEditableShortCuts",
                    value: function(t) {
                        (t.ctrlKey || t.metaKey) && x.contains([66, 73, 85], t.keyCode) && t.preventDefault()
                    }
                }, {
                    key: "isLimited",
                    value: function(t, e) {
                        return t = t || 0,
                        (void 0 === e || !(Ct.isMove(e.keyCode) || Ct.isNavigation(e.keyCode) || e.ctrlKey || e.metaKey || x.contains([Ct.code.BACKSPACE, Ct.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: "setLastRange",
                    value: function(t) {
                        t ? this.lastRange = t : (this.lastRange = yt.create(this.editable),
                        0 === i()(this.lastRange.sc).closest(".note-editable").length && (this.lastRange = yt.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 = yt.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-filename", e),
                            t.css("width", Math.min(o.$editable.width(), t.width()))),
                            t.show(),
                            o.getLastRange().insertNode(t[0]),
                            o.setLastRange(yt.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 = yt.createFromNode(ft.ancestor(t.sc, ft.isAnchor))),
                        t.toString()
                    }
                }, {
                    key: "onFormatBlock",
                    value: function(t, e) {
                        if (document.execCommand("FormatBlock", !1, v.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 = x.head(o);
                                r && !ft.nodeLength(r) && (r.innerHTML = ft.ZERO_WIDTH_NBSP_CHAR,
                                yt.createFromNodeAfter(r.firstChild).select(),
                                this.setLastRange(),
                                this.$editable.data("bogus", r))
                            }
                        } 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 = ft.ancestor(t.sc, ft.isAnchor);
                            (t = yt.createFromNode(e)).select(),
                            this.setLastRange(),
                            this.beforeCommand(),
                            document.execCommand("unlink"),
                            this.afterCommand()
                        }
                    }
                }, {
                    key: "getLinkInfo",
                    value: function() {
                        var t = this.getLastRange().expand(ft.isAnchor)
                          , e = i()(x.head(t.nodes(ft.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 ft.isEmpty(this.$editable[0]) || ft.emptyPara === this.$editable.html()
                    }
                }, {
                    key: "empty",
                    value: function() {
                        this.context.invoke("code", ft.emptyPara)
                    }
                }, {
                    key: "normalizeContent",
                    value: function() {
                        this.$editable[0].normalize()
                    }
                }]) && Ft(e.prototype, n),
                o && Ft(e, o),
                t
            }();
            function Ht(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] : x.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)
                    }
                }]) && Ht(e.prototype, n),
                o && Ht(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 Mt, 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>"].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 = {}
                    }
                }]) && zt(e.prototype, n),
                o && zt(e, o),
                t
            }();
            function jt(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)
                }
            }
            v.hasCodeMirror && (Mt = window.CodeMirror);
            var Ut = 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
                }
                var e, n, o;
                return e = t,
                (n = [{
                    key: "sync",
                    value: function() {
                        this.isActivated() && v.hasCodeMirror && this.$codable.data("cmEditor").save()
                    }
                }, {
                    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 = !0
                                  , o = !1
                                  , i = void 0;
                                try {
                                    for (var r, a = e[Symbol.iterator](); !(n = (r = a.next()).done); n = !0) {
                                        var s = r.value;
                                        if (new RegExp('src="(https?:)?//' + s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&") + '/(.+)"').test(t))
                                            return t
                                    }
                                } catch (t) {
                                    o = !0,
                                    i = t
                                } finally {
                                    try {
                                        n || null == a.return || a.return()
                                    } finally {
                                        if (o)
                                            throw i
                                    }
                                }
                                return ""
                            }
                            ))
                        }
                        return t
                    }
                }, {
                    key: "activate",
                    value: function() {
                        var t = this;
                        if (this.$codable.val(ft.html(this.$editable, this.options.prettifyHtml)),
                        this.$codable.height(this.$editable.height()),
                        this.context.invoke("toolbar.updateCodeview", !0),
                        this.$editor.addClass("codeview"),
                        this.$codable.focus(),
                        v.hasCodeMirror) {
                            var e = Mt.fromTextArea(this.$codable[0], this.options.codemirror);
                            if (this.options.codemirror.tern) {
                                var n = new Mt.TernServer(this.options.codemirror.tern);
                                e.ternServer = n,
                                e.on("cursorActivity", (function(t) {
                                    n.updateArgHints(t)
                                }
                                ))
                            }
                            e.on("blur", (function(n) {
                                t.context.triggerEvent("blur.codeview", e.getValue(), n)
                            }
                            )),
                            e.on("change", (function() {
                                t.context.triggerEvent("change.codeview", e.getValue(), e)
                            }
                            )),
                            e.setSize(null, this.$editable.outerHeight()),
                            this.$codable.data("cmEditor", e)
                        } 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 (v.hasCodeMirror) {
                            var t = this.$codable.data("cmEditor");
                            this.$codable.val(t.getValue()),
                            t.toTextArea()
                        }
                        var e = this.purify(ft.value(this.$codable, this.options.prettifyHtml) || ft.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)
                    }
                }, {
                    key: "destroy",
                    value: function() {
                        this.isActivated() && this.deactivate()
                    }
                }]) && jt(e.prototype, n),
                o && jt(e, o),
                t
            }();
            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.$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")
                    }
                }]) && Wt(e.prototype, n),
                o && Wt(e, o),
                t
            }();
            function qt(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) {
                    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")
                    }
                }]) && qt(e.prototype, n),
                o && qt(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.$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 (ft.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 = ft.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()
                    }
                }]) && _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 = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i
              , Xt = 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.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(Zt);
                            if (e && (e[1] || e[2])) {
                                var n = e[1] ? t : "http://" + t
                                  , o = t.replace(/^(?:https?:\/\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\.)?/i, "").split("/")[0]
                                  , 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 (x.contains([Ct.code.ENTER, Ct.code.SPACE], t.keyCode)) {
                            var e = this.context.invoke("editor.createRange").getWordRange();
                            this.lastWordRange = e
                        }
                    }
                }, {
                    key: "handleKeyup",
                    value: function(t) {
                        x.contains([Ct.code.ENTER, Ct.code.SPACE], t.keyCode) && this.replace()
                    }
                }]) && Yt(e.prototype, n),
                o && Yt(e, o),
                t
            }();
            function Qt(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 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.$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 ft.isTextarea(this.$note[0])
                    }
                }]) && Qt(e.prototype, n),
                o && Qt(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.context = e,
                    this.options = e.options.replace || {},
                    this.keys = [Ct.code.ENTER, Ct.code.SPACE, Ct.code.PERIOD, Ct.code.COMMA, Ct.code.SEMICOLON, Ct.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 = ft.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 && x.contains(this.keys, this.previousKeydownCode))
                            this.previousKeydownCode = t.keyCode;
                        else {
                            if (x.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) {
                        x.contains(this.keys, t.keyCode) && this.replace()
                    }
                }]) && 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.$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)
                    }
                }]) && 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) {
                    !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 = b.invertObject(this.options.keyMap[v.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 ? (v.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] = v.isFontInstalled(t) || x.contains(this.options.fontNamesIgnoreCheck, t)),
                        this.fontInstalledMap[t]
                    }
                }, {
                    key: "isFontDeservedToAdd",
                    value: function(t) {
                        return "" !== (t = t.toLowerCase()) && this.isFontInstalled(t) && -1 === v.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-backColor"),
                                        foreColor: e.attr("data-foreColor")
                                    }) : n ? r.context.invoke("editor.color", {
                                        backColor: e.attr("data-backColor")
                                    }) : o && r.context.invoke("editor.color", {
                                        foreColor: e.attr("data-foreColor")
                                    })
                                },
                                callback: function(t) {
                                    var e = t.find(".note-recent-color");
                                    n && (e.css("background-color", r.options.colorButton.backColor),
                                    t.attr("data-backColor", r.options.colorButton.backColor)),
                                    o ? (e.css("color", r.options.colorButton.foreColor),
                                    t.attr("data-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" data-event="backColor" data-value="inherit">', this.lang.color.transparent, "</button>", "</div>", '<div class="note-holder" data-event="backColor"/>', "<div>", '<button type="button" class="note-color-select btn btn-light" 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>"].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" data-event="removeFormat" data-value="foreColor">', this.lang.color.resetToDefault, "</button>", "</div>", '<div class="note-holder" data-event="foreColor"/>', "<div>", '<button type="button" class="note-color-select btn btn-light" 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>"].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-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-original-title", d),
                                        c.prepend(u),
                                        l.click()
                                    } else {
                                        if (x.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-" + 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"/>', 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: ' + v.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"/>', 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"/>', 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", b.invoke(r, "render")),
                        this.context.memo("button.justifyCenter", b.invoke(a, "render")),
                        this.context.memo("button.justifyRight", b.invoke(s, "render")),
                        this.context.memo("button.justifyFull", b.invoke(l, "render")),
                        this.context.memo("button.outdent", b.invoke(c, "render")),
                        this.context.memo("button.indent", b.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 class="note-dimension-picker-highlighted"/>', '<div class="note-dimension-picker-unhighlighted"/>', "</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",
                                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",
                                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 = x.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)
                    }
                }]) && 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.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(".btn-codeview").not(".btn-fullscreen")),
                        this.ui.toggleBtn(e, !0)
                    }
                }, {
                    key: "deactivate",
                    value: function(t) {
                        var e = this.$toolbar.find("button");
                        t || (e = e.not(".btn-codeview").not(".btn-fullscreen")),
                        this.ui.toggleBtn(e, !1)
                    }
                }]) && 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.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 === Ct.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 && b.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),
                                v.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")
                        }
                        ))
                    }
                }]) && 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) {
                    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 !x.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 = ft.ancestor(t.sc, ft.isAnchor)
                                  , n = i()(e).attr("href");
                                this.$popover.find("a").attr("href", n).text(n);
                                var o = ft.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()
                    }
                }]) && 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) {
                    !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 === Ct.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(""),
                                v.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)
                        }
                        ))
                    }
                }]) && 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) {
                    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 !x.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 (ft.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()
                    }
                }]) && 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.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 !x.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),
                        v.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 = ft.isCell(t);
                        if (e) {
                            var n = ft.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()
                    }
                }]) && 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 ke = 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 === Ct.code.ENTER && (t.preventDefault(),
                            e.trigger("click"))
                        }
                        ))
                    }
                }, {
                    key: "createVideoNode",
                    value: function(t) {
                        var e, n = t.match(/\/\/(?:www\.)?(?: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], k = 0, y = b.length; k < y; k++)
                                        v += void 0 !== g[k + 1] ? b[k] * parseInt(g[k + 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/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())
                                }
                                )),
                                v.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)
                        }
                        ))
                    }
                }]) && be(e.prototype, n),
                o && be(e, o),
                t
            }();
            function ye(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 = ['<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote 0.8.16</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[v.isMac ? "mac" : "pc"];
                        return Object.keys(e).map((function(n) {
                            var o = e[n]
                              , r = i()('<div><div class="help-list-item"/></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")
                        }
                        ))
                    }
                }]) && ye(e.prototype, n),
                o && ye(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) {
                    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 && !x.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: "hide",
                    value: function() {
                        this.hidable && this.$popover.hide()
                    }
                }]) && 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.$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),
                                yt.createFromNodeBefore(o).select()
                            } else
                                yt.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 = ft.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 === Ct.code.ENTER ? (t.preventDefault(),
                        this.replace()) : t.keyCode === Ct.code.UP ? (t.preventDefault(),
                        this.moveUp()) : t.keyCode === Ct.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 + '"/>');
                        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 (!x.contains([Ct.code.ENTER, Ct.code.UP, Ct.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 = b.rect2bnd(x.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()
                    }
                }]) && Se(e.prototype, n),
                o && Se(e, o),
                t
            }();
            i.a.summernote = i.a.extend(i.a.summernote, {
                version: "0.8.16",
                plugins: {},
                dom: ft,
                range: yt,
                lists: x,
                options: {
                    langInfo: i.a.summernote.lang["en-US"],
                    editing: !0,
                    modules: {
                        editor: Dt,
                        clipboard: Bt,
                        dropzone: Ot,
                        codeview: Ut,
                        statusbar: Kt,
                        fullscreen: Vt,
                        handle: Gt,
                        hintPopover: Te,
                        autoLink: Xt,
                        autoSync: Jt,
                        autoReplace: ee,
                        placeholder: oe,
                        buttons: re,
                        toolbar: se,
                        linkDialog: ce,
                        linkPopover: de,
                        imageDialog: fe,
                        imagePopover: me,
                        tablePopover: ge,
                        videoDialog: ke,
                        helpDialog: we,
                        airPopover: xe
                    },
                    buttons: {},
                    lang: "en-US",
                    followingToolbar: !1,
                    toolbarPosition: "top",
                    otherStaticBar: "",
                    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,
                    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", "montserrat", "Helvetica", "Impact", "Lucida Grande", "Tahoma", "Times New Roman", "Verdana", "Montserrat"],
                    fontNamesIgnoreCheck: true,
                    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: {
                            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: {
                            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"
                    }
                }
            })
        },
        51: function(t, e, n) {
            "use strict";
            n.r(e);
            var o = n(0)
              , i = n.n(o)
              , r = n(1);
            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) {
                    if (function(t, e) {
                        if (!(t instanceof e))
                            throw new TypeError("Cannot call a class as a function")
                    }(this, t),
                    this.$node = e,
                    this.options = i.a.extend({}, {
                        title: "",
                        target: n.container,
                        trigger: "hover focus",
                        placement: "bottom"
                    }, n),
                    this.$tooltip = i()(['<div class="note-tooltip">', '<div class="note-tooltip-arrow"/>', '<div class="note-tooltip-content"/>', "</div>"].join("")),
                    "manual" !== this.options.trigger) {
                        var o = this.show.bind(this)
                          , r = this.hide.bind(this)
                          , a = this.toggle.bind(this);
                        this.options.trigger.split(" ").forEach((function(t) {
                            "hover" === t ? (e.off("mouseenter mouseleave"),
                            e.on("mouseenter", o).on("mouseleave", r)) : "click" === t ? e.on("click", a) : "focus" === t && e.on("focus", o).on("blur", r)
                        }
                        ))
                    }
                }
                var e, n, o;
                return e = t,
                (n = [{
                    key: "show",
                    value: function() {
                        var t = this.$node
                          , e = t.offset()
                          , n = i()(this.options.target).offset();
                        e.top -= n.top,
                        e.left -= n.left;
                        var o = this.$tooltip
                          , r = this.options.title || t.attr("title") || t.data("title")
                          , a = this.options.placement || t.data("placement");
                        o.addClass(a),
                        o.find(".note-tooltip-content").text(r),
                        o.appendTo(this.options.target);
                        var s = t.outerWidth()
                          , l = t.outerHeight()
                          , c = o.outerWidth()
                          , u = o.outerHeight();
                        "bottom" === a ? o.css({
                            top: e.top + l,
                            left: e.left + (s / 2 - c / 2)
                        }) : "top" === a ? o.css({
                            top: e.top - u,
                            left: e.left + (s / 2 - c / 2)
                        }) : "left" === a ? o.css({
                            top: e.top + (l / 2 - u / 2),
                            left: e.left - c
                        }) : "right" === a && o.css({
                            top: e.top + (l / 2 - u / 2),
                            left: e.left + s
                        }),
                        o.addClass("in")
                    }
                }, {
                    key: "hide",
                    value: function() {
                        var t = this;
                        this.$tooltip.removeClass("in"),
                        setTimeout((function() {
                            t.$tooltip.remove()
                        }
                        ), 200)
                    }
                }, {
                    key: "toggle",
                    value: function() {
                        this.$tooltip.hasClass("in") ? this.hide() : this.show()
                    }
                }]) && a(e.prototype, n),
                o && a(e, o),
                t
            }();
            function l(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 c = 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.$button = e,
                    this.options = i.a.extend({}, {
                        target: n.container
                    }, n),
                    this.setEvent()
                }
                var e, n, o;
                return e = t,
                (n = [{
                    key: "setEvent",
                    value: function() {
                        var t = this;
                        this.$button.on("click", (function(e) {
                            t.toggle(),
                            e.stopImmediatePropagation()
                        }
                        ))
                    }
                }, {
                    key: "clear",
                    value: function() {
                        var t = i()(".note-btn-group.open");
                        t.find(".note-btn.active").removeClass("active"),
                        t.removeClass("open")
                    }
                }, {
                    key: "show",
                    value: function() {
                        this.$button.addClass("active"),
                        this.$button.parent().addClass("open");
                        var t = this.$button.next()
                          , e = t.offset()
                          , n = t.outerWidth()
                          , o = i()(window).width()
                          , r = parseFloat(i()(this.options.target).css("margin-right"));
                        e.left + n > o - r ? t.css("margin-left", o - r - (e.left + n)) : t.css("margin-left", "")
                    }
                }, {
                    key: "hide",
                    value: function() {
                        this.$button.removeClass("active"),
                        this.$button.parent().removeClass("open")
                    }
                }, {
                    key: "toggle",
                    value: function() {
                        var t = this.$button.parent().hasClass("open");
                        this.clear(),
                        t ? this.hide() : this.show()
                    }
                }]) && l(e.prototype, n),
                o && l(e, o),
                t
            }();
            i()(document).on("click", (function(t) {
                i()(t.target).closest(".note-btn-group").length || (i()(".note-btn-group.open").removeClass("open"),
                i()(".note-btn-group .note-btn.active").removeClass("active"))
            }
            )),
            i()(document).on("click.note-dropdown-menu", (function(t) {
                i()(t.target).closest(".note-dropdown-menu").parent().removeClass("open"),
                i()(t.target).closest(".note-dropdown-menu").parent().find(".note-btn.active").removeClass("active")
            }
            ));
            var u = c;
            function d(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 h = function() {
                function t(e) {
                    !function(t, e) {
                        if (!(t instanceof e))
                            throw new TypeError("Cannot call a class as a function")
                    }(this, t),
                    this.$modal = e,
                    this.$backdrop = i()('<div class="note-modal-backdrop"/>')
                }
                var e, n, o;
                return e = t,
                (n = [{
                    key: "show",
                    value: function() {
                        var t = this;
                        this.$backdrop.appendTo(document.body).show(),
                        this.$modal.addClass("open").show(),
                        this.$modal.trigger("note.modal.show"),
                        this.$modal.off("click", ".close").on("click", ".close", this.hide.bind(this)),
                        this.$modal.on("keydown", (function(e) {
                            27 === e.which && (e.preventDefault(),
                            t.hide())
                        }
                        ))
                    }
                }, {
                    key: "hide",
                    value: function() {
                        this.$modal.removeClass("open").hide(),
                        this.$backdrop.hide(),
                        this.$modal.trigger("note.modal.hide"),
                        this.$modal.off("keydown")
                    }
                }]) && d(e.prototype, n),
                o && d(e, o),
                t
            }()
              , f = r.a.create('<div class="note-editor note-frame"/>')
              , p = r.a.create('<div class="note-toolbar" role="toolbar"/>')
              , m = r.a.create('<div class="note-editing-area"/>')
              , v = r.a.create('<textarea class="note-codable" aria-multiline="true"/>')
              , g = r.a.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>')
              , b = r.a.create(['<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-statusbar" role="status">', '<div class="note-resizebar" aria-label="resize">', '<div class="note-icon-bar"/>', '<div class="note-icon-bar"/>', '<div class="note-icon-bar"/>', "</div>", "</div>"].join(""))
              , k = r.a.create('<div class="note-editor note-airframe"/>')
              , y = r.a.create(['<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>', '<output class="note-status-output" role="status" aria-live="polite"/>'].join(""))
              , w = r.a.create('<div class="note-btn-group">')
              , C = r.a.create('<button type="button" class="note-btn" tabindex="-1">', (function(t, e) {
                e && e.tooltip && (t.attr({
                    "aria-label": e.tooltip
                }),
                t.data("_lite_tooltip", new s(t,{
                    title: e.tooltip,
                    container: e.container
                })).on("click", (function(t) {
                    i()(t.currentTarget).data("_lite_tooltip").hide()
                }
                ))),
                e.contents && t.html(e.contents),
                e && e.data && "dropdown" === e.data.toggle && t.data("_lite_dropdown", new u(t,{
                    container: e.container
                }))
            }
            ))
              , x = r.a.create('<div class="note-dropdown-menu" role="list">', (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
                      , r = i()('<a class="note-dropdown-item" href="#" data-value="' + n + '" role="listitem" aria-label="' + n + '"></a>');
                    return r.html(o).data("item", t),
                    r
                }
                )) : e.items;
                t.html(n).attr({
                    "aria-label": e.title
                }),
                t.on("click", "> .note-dropdown-item", (function(t) {
                    var n = i()(this)
                      , o = n.data("item")
                      , r = n.data("value");
                    o.click ? o.click(n) : e.itemClick && e.itemClick(t, o, r)
                }
                ))
            }
            ))
              , S = r.a.create('<div class="note-dropdown-menu note-check" role="list">', (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
                      , r = i()('<a class="note-dropdown-item" href="#" data-value="' + n + '" role="listitem" aria-label="' + t + '"></a>');
                    return r.html([z(e.checkClassName), " ", o]).data("item", t),
                    r
                }
                )) : e.items;
                t.html(n).attr({
                    "aria-label": e.title
                }),
                t.on("click", "> .note-dropdown-item", (function(t) {
                    var n = i()(this)
                      , o = n.data("item")
                      , r = n.data("value");
                    o.click ? o.click(n) : e.itemClick && e.itemClick(t, o, r)
                }
                ))
            }
            ))
              , T = function(t, e) {
                return t + " " + z(e.icons.caret, "span")
            }
              , $ = function(t, e) {
                return w([C({
                    className: "dropdown-toggle",
                    contents: t.title + " " + z("note-icon-caret"),
                    tooltip: t.tooltip,
                    data: {
                        toggle: "dropdown"
                    }
                }), x({
                    className: t.className,
                    items: t.items,
                    template: t.template,
                    itemClick: t.itemClick
                })], {
                    callback: e
                }).render()
            }
              , E = function(t, e) {
                return w([C({
                    className: "dropdown-toggle",
                    contents: t.title + " " + z("note-icon-caret"),
                    tooltip: t.tooltip,
                    data: {
                        toggle: "dropdown"
                    }
                }), S({
                    className: t.className,
                    checkClassName: t.checkClassName,
                    items: t.items,
                    template: t.template,
                    itemClick: t.itemClick
                })], {
                    callback: e
                }).render()
            }
              , I = function(t) {
                return w([C({
                    className: "dropdown-toggle",
                    contents: t.title + " " + z("note-icon-caret"),
                    tooltip: t.tooltip,
                    data: {
                        toggle: "dropdown"
                    }
                }), x([w({
                    className: "note-align",
                    children: t.items[0]
                }), w({
                    className: "note-list",
                    children: t.items[1]
                })])]).render()
            }
              , N = function(t) {
                return w([C({
                    className: "dropdown-toggle",
                    contents: t.title + " " + z("note-icon-caret"),
                    tooltip: t.tooltip,
                    data: {
                        toggle: "dropdown"
                    }
                }), x({
                    className: "note-table",
                    items: ['<div class="note-dimension-picker">', '<div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>', '<div class="note-dimension-picker-highlighted"/>', '<div class="note-dimension-picker-unhighlighted"/>', "</div>", '<div class="note-dimension-display">1 x 1</div>'].join("")
                })], {
                    callback: function(e) {
                        e.find(".note-dimension-picker-mousecatcher").css({
                            width: t.col + "em",
                            height: t.row + "em"
                        }).mousedown(t.itemClick).mousemove((function(e) {
                            !function(t, e, n) {
                                var o, r = i()(t.target.parentNode), a = r.next(), s = r.find(".note-dimension-picker-mousecatcher"), l = r.find(".note-dimension-picker-highlighted"), c = r.find(".note-dimension-picker-unhighlighted");
                                if (void 0 === t.offsetX) {
                                    var u = i()(t.target).offset();
                                    o = {
                                        x: t.pageX - u.left,
                                        y: t.pageY - u.top
                                    }
                                } else
                                    o = {
                                        x: t.offsetX,
                                        y: t.offsetY
                                    };
                                var d = Math.ceil(o.x / 18) || 1
                                  , h = Math.ceil(o.y / 18) || 1;
                                l.css({
                                    width: d + "em",
                                    height: h + "em"
                                }),
                                s.data("value", d + "x" + h),
                                d > 3 && d < e && c.css({
                                    width: d + 1 + "em"
                                }),
                                h > 3 && h < n && c.css({
                                    height: h + 1 + "em"
                                }),
                                a.html(d + " x " + h)
                            }(e, t.col, t.row)
                        }
                        ))
                    }
                }).render()
            }
              , P = r.a.create('<div class="note-color-palette"/>', (function(t, e) {
                for (var n = [], o = 0, r = e.colors.length; o < r; o++) {
                    for (var a = e.eventName, l = e.colors[o], c = e.colorsName[o], u = [], d = 0, h = l.length; d < h; d++) {
                        var f = l[d]
                          , p = c[d];
                        u.push(['<button type="button" class="note-btn note-color-btn"', 'style="background-color:', f, '" ', 'data-event="', a, '" ', 'data-value="', f, '" ', 'data-title="', p, '" ', 'aria-label="', p, '" ', 'data-toggle="button" tabindex="-1"></button>'].join(""))
                    }
                    n.push('<div class="note-color-row">' + u.join("") + "</div>")
                }
                t.html(n.join("")),
                t.find(".note-color-btn").each((function() {
                    i()(this).data("_lite_tooltip", new s(i()(this),{
                        container: e.container
                    }))
                }
                ))
            }
            ))
              , R = function(t, e) {
                return w({
                    className: "note-color",
                    children: [C({
                        className: "note-current-color-button",
                        contents: t.title,
                        tooltip: t.lang.color.recent,
                        click: t.currentClick,
                        callback: function(t) {
                            var n = t.find(".note-recent-color");
                            "foreColor" !== e && (n.css("background-color", "#FFFF00"),
                            t.attr("data-backColor", "#FFFF00"))
                        }
                    }), C({
                        className: "dropdown-toggle",
                        contents: z("note-icon-caret"),
                        tooltip: t.lang.color.more,
                        data: {
                            toggle: "dropdown"
                        }
                    }), x({
                        items: ["<div>", '<div class="note-btn-group btn-background-color">', '<div class="note-palette-title">' + t.lang.color.background + "</div>", "<div>", '<button type="button" class="note-color-reset note-btn note-btn-block" data-event="backColor" data-value="inherit">', t.lang.color.transparent, "</button>", "</div>", '<div class="note-holder" data-event="backColor"/>', '<div class="btn-sm">', '<input type="color" id="html5bcp" class="note-btn btn-default" value="#21104A" style="width:100%;" data-value="cp">', '<button type="button" class="note-color-reset btn" data-event="backColor" data-value="cpbackColor">', t.lang.color.cpSelect, "</button>", "</div>", "</div>", '<div class="note-btn-group btn-foreground-color">', '<div class="note-palette-title">' + t.lang.color.foreground + "</div>", "<div>", '<button type="button" class="note-color-reset note-btn note-btn-block" data-event="removeFormat" data-value="foreColor">', t.lang.color.resetToDefault, "</button>", "</div>", '<div class="note-holder" data-event="foreColor"/>', '<div class="btn-sm">', '<input type="color" id="html5fcp" class="note-btn btn-default" value="#21104A" style="width:100%;" data-value="cp">', '<button type="button" class="note-color-reset btn" data-event="foreColor" data-value="cpforeColor">', t.lang.color.cpSelect, "</button>", "</div>", "</div>", "</div>"].join(""),
                        callback: function(n) {
                            n.find(".note-holder").each((function() {
                                var e = i()(this);
                                e.append(P({
                                    colors: t.colors,
                                    eventName: e.data("event")
                                }).render())
                            }
                            )),
                            "fore" === e ? (n.find(".btn-background-color").hide(),
                            n.css({
                                "min-width": "210px"
                            })) : "back" === e && (n.find(".btn-foreground-color").hide(),
                            n.css({
                                "min-width": "210px"
                            }))
                        },
                        click: function(n) {
                            var o = i()(n.target)
                              , r = o.data("event")
                              , a = o.data("value")
                              , s = document.getElementById("html5fcp").value
                              , l = document.getElementById("html5bcp").value;
                            if ("cp" === a ? n.stopPropagation() : "cpbackColor" === a ? a = l : "cpforeColor" === a && (a = s),
                            r && a) {
                                var c = "backColor" === r ? "background-color" : "color"
                                  , u = o.closest(".note-color").find(".note-recent-color")
                                  , d = o.closest(".note-color").find(".note-current-color-button");
                                u.css(c, a),
                                d.attr("data-" + r, a),
                                "fore" === e ? t.itemClick("foreColor", a) : "back" === e ? t.itemClick("backColor", a) : t.itemClick(r, a)
                            }
                        }
                    })]
                }).render()
            }
              , L = r.a.create('<div class="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="note-modal-content">', e.title ? '<div class="note-modal-header"><button type="button" class="close" aria-label="Close" aria-hidden="true"><i class="note-icon-close"></i></button><h4 class="note-modal-title">' + e.title + "</h4></div>" : "", '<div class="note-modal-body">' + e.body + "</div>", e.footer ? '<div class="note-modal-footer">' + e.footer + "</div>" : "", "</div>"].join("")),
                t.data("modal", new h(t,e))
            }
            ))
              , A = function(t) {
                var e = '<div class="note-form-group"><label for="note-dialog-video-url-' + t.id + '" class="note-form-label">' + t.lang.video.url + ' <small class="text-muted">' + t.lang.video.providers + '</small></label><input id="note-dialog-video-url-' + t.id + '" class="note-video-url note-input" type="text"/></div>'
                  , n = ['<button type="button" href="#" class="note-btn note-btn-primary note-video-btn disabled" disabled>', t.lang.video.insert, "</button>"].join("");
                return L({
                    title: t.lang.video.insert,
                    fade: t.fade,
                    body: e,
                    footer: n
                }).render()
            }
              , F = function(t) {
                var e = '<div class="note-form-group note-group-select-from-files"><label for="note-dialog-image-file-' + t.id + '" class="note-form-label">' + t.lang.image.selectFromFiles + '</label><input id="note-dialog-image-file-' + t.id + '" class="note-note-image-input note-input" type="file" name="files" accept="image/*" multiple="multiple"/>' + t.imageLimitation + '</div><div class="note-form-group"><label for="note-dialog-image-url-' + t.id + '" class="note-form-label">' + t.lang.image.url + '</label><input id="note-dialog-image-url-' + t.id + '" class="note-image-url note-input" type="text"/></div>'
                  , n = ['<button href="#" type="button" class="note-btn note-btn-primary note-btn-large note-image-btn disabled" disabled>', t.lang.image.insert, "</button>"].join("");
                return L({
                    title: t.lang.image.insert,
                    fade: t.fade,
                    body: e,
                    footer: n
                }).render()
            }
              , D = function(t) {
                var e = '<div class="note-form-group"><label for="note-dialog-link-txt-' + t.id + '" class="note-form-label">' + t.lang.link.textToDisplay + '</label><input id="note-dialog-link-txt-' + t.id + '" class="note-link-text note-input" type="text"/></div><div class="note-form-group"><label for="note-dialog-link-url-' + t.id + '" class="note-form-label">' + t.lang.link.url + '</label><input id="note-dialog-link-url-' + t.id + '" class="note-link-url note-input" type="text" value="http://"/></div>' + (t.disableLinkTarget ? "" : '<div class="checkbox"><label for="note-dialog-link-nw-' + t.id + '"><input id="note-dialog-link-nw-' + t.id + '" type="checkbox" checked> ' + t.lang.link.openInNewWindow + "</label></div>") + '<div class="checkbox"><label for="note-dialog-link-up-' + t.id + '"><input id="note-dialog-link-up-' + t.id + '" type="checkbox" checked> ' + t.lang.link.useProtocol + "</label></div>"
                  , n = ['<button href="#" type="button" class="note-btn note-btn-primary note-link-btn disabled" disabled>', t.lang.link.insert, "</button>"].join("");
                return L({
                    className: "link-dialog",
                    title: t.lang.link.insert,
                    fade: t.fade,
                    body: e,
                    footer: n
                }).render()
            }
              , H = r.a.create(['<div class="note-popover bottom">', '<div class="note-popover-arrow"/>', '<div class="popover-content note-children-container"/>', "</div>"].join(""), (function(t, e) {
                var n = void 0 !== e.direction ? e.direction : "bottom";
                t.addClass(n).hide(),
                e.hideArrow && t.find(".note-popover-arrow").hide()
            }
            ))
              , B = r.a.create('<div class="checkbox"></div>', (function(t, e) {
                t.html(["<label" + (e.id ? ' for="note-' + e.id + '"' : "") + ">", '<input role="checkbox" type="checkbox"' + (e.id ? ' id="note-' + e.id + '"' : ""), e.checked ? " checked" : "", ' aria-checked="' + (e.checked ? "true" : "false") + '"/>', e.text ? e.text : "", "</label>"].join(""))
            }
            ))
              , z = function(t, e) {
                return "<" + (e = e || "i") + ' class="' + t + '"/>'
            }
              , M = function(t) {
                return {
                    editor: f,
                    toolbar: p,
                    editingArea: m,
                    codable: v,
                    editable: g,
                    statusbar: b,
                    airEditor: k,
                    airEditable: y,
                    buttonGroup: w,
                    button: C,
                    dropdown: x,
                    dropdownCheck: S,
                    dropdownButton: $,
                    dropdownButtonContents: T,
                    dropdownCheckButton: E,
                    paragraphDropdownButton: I,
                    tableDropdownButton: N,
                    colorDropdownButton: R,
                    palette: P,
                    dialog: L,
                    videoDialog: A,
                    imageDialog: F,
                    linkDialog: D,
                    popover: H,
                    checkbox: B,
                    icon: z,
                    options: t,
                    toggleBtn: function(t, e) {
                        t.toggleClass("disabled", !e),
                        t.attr("disabled", !e)
                    },
                    toggleBtnActive: function(t, e) {
                        t.toggleClass("active", e)
                    },
                    check: function(t, e) {
                        t.find(".checked").removeClass("checked"),
                        t.find('[data-value="' + e + '"]').addClass("checked")
                    },
                    onDialogShown: function(t, e) {
                        t.one("note.modal.show", e)
                    },
                    onDialogHidden: function(t, e) {
                        t.one("note.modal.hide", e)
                    },
                    showDialog: function(t) {
                        t.data("modal").show()
                    },
                    hideDialog: function(t) {
                        t.data("modal").hide()
                    },
                    getPopoverContent: function(t) {
                        return t.find(".note-popover-content")
                    },
                    getDialogBody: function(t) {
                        return t.find(".note-modal-body")
                    },
                    createLayout: function(e) {
                        var n = (t.airMode ? k([m([v(), y()])]) : "bottom" === t.toolbarPosition ? f([m([v(), g()]), p(), b()]) : f([p(), m([v(), g()]), b()])).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.off("summernote"),
                        t.show()
                    }
                }
            };
            n(3),
            n(6);
            i.a.summernote = i.a.extend(i.a.summernote, {
                ui_template: M,
                interface: "lite"
            })
        },
        6: function(t, e, n) {}
    })
}
));
//# sourceMappingURL=summernote-lite.min.js.map

Youez - 2016 - github.com/yon3zu
LinuXploit