uawdijnntqw1x1x1
IP : 216.73.216.110
Hostname : 6.87.74.97.host.secureserver.net
Kernel : Linux 6.87.74.97.host.secureserver.net 4.18.0-553.83.1.el8_10.x86_64 #1 SMP Mon Nov 10 04:22:44 EST 2025 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
home
/
emeraadmin
/
.razor
/
..
/
.
/
www
/
node_modules
/
parse-filepath
/
..
/
..
/
4d695
/
summernote.zip
/
/
PKe[�\��[ll karma.conf.jsnu�[���module.exports = function (config) { config.set({ frameworks: ['mocha', 'karma-typescript'], colors: true, logLevel: config.LOG_INFO, files: [ { pattern: 'src/js/**/*.js' }, { pattern: 'test/**/*.spec.js' } ], // Chrome, ChromeCanary, Firefox, Opera, Safari, PhantomJS, IE browsers: ['PhantomJS'], preprocessors: { 'src/js/**/*.js': ['karma-typescript'], 'test/**/*.spec.js': ['karma-typescript'] }, reporters: ['dots', 'karma-typescript'], coverageReporter: { type: 'lcov', dir: 'coverage/', includeAllSources: true }, browserNoActivityTimeout: 60000, karmaTypescriptConfig: { tsconfig: './tsconfig.json', include: [ 'test/**/*.spec.js' ], bundlerOptions: { entrypoints: /\.spec\.js$/, transforms: [require("karma-typescript-es6-transform")()], exclude: [ 'node_modules' ], sourceMap: true, addNodeGlobals: false }, compilerOptions: { "module": "commonjs" } } }); }; PKe[�\�J��src/icons/subscript.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1224.354,1117.078 L1006.601,1117.078 L1006.601,1067.562 C1091.466,990.519 1138.701,951.568 1139.220,911.578 C1139.220,887.702 1124.350,874.518 1097.335,874.518 C1072.236,874.518 1052.062,887.167 1032.530,901.592 L1009.016,842.278 C1039.234,818.882 1075.104,808.372 1110.771,808.372 C1176.237,808.372 1218.537,846.614 1218.537,905.801 C1218.537,965.501 1168.603,1011.339 1122.925,1049.581 L1224.354,1049.581 L1224.354,1117.078 ZM486.761,678.568 L296.843,975.803 L46.215,975.803 L46.215,879.988 L100.910,879.988 C134.010,879.988 164.672,863.823 181.618,837.434 L377.259,532.875 L188.346,256.449 C171.116,231.230 141.182,215.947 109.001,215.947 L57.840,215.947 L57.840,120.132 L291.295,120.132 L486.761,404.237 L682.228,120.132 L915.687,120.132 L915.687,215.947 L864.527,215.947 C832.355,215.947 802.411,231.230 785.177,256.449 L596.263,532.875 L791.904,837.434 C808.860,863.823 839.522,879.988 872.622,879.988 L927.312,879.988 L927.312,975.803 L676.684,975.803 L486.761,678.568 Z" class="cls-1"/> </svg> PKe[�\D�?�SSsrc/icons/minus.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <rect x="108.93" y="432.341" fill="#010202" width="806.141" height="159.071"/> </g> </g> </svg> PKe[�\ȴ�ssrc/icons/circle.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path class="cls-1" d="M501.845-55.324c318.546,0,576.775,255.772,576.775,571.282S820.391,1087.24,501.845,1087.24-74.935,831.469-74.935,515.958,183.3-55.324,501.845-55.324Zm0,90.262c268.216,0,485.649,215.36,485.649,481.02s-217.433,481.02-485.649,481.02S16.2,781.618,16.2,515.958,233.629,34.938,501.845,34.938Z"/> </svg> PKe[�\a�q���src/icons/italic.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M421.903,47.502 L401.526,111.534 C422.134,113.396 440.987,118.386 458.094,126.498 C475.187,134.622 483.740,152.142 483.740,179.046 C483.740,190.652 479.527,211.066 471.091,240.297 L291.199,805.870 C280.890,839.748 268.713,865.849 254.659,884.172 C240.604,902.508 216.713,911.663 182.985,911.663 L162.604,975.699 L558.929,975.699 L577.201,911.663 C550.960,911.663 528.121,906.446 508.688,896.006 C489.241,885.562 479.527,868.511 479.527,844.848 C479.527,830.470 483.740,816.731 492.176,790.283 L670.662,217.327 C679.093,190.423 687.175,169.890 694.903,155.733 C702.635,141.584 712.826,130.794 725.475,123.367 C738.123,115.952 754.041,112.002 773.257,111.534 L793.634,47.502 L421.903,47.502 Z" class="cls-1"/> </svg> PKe[�\��AŶ�src/icons/code.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M799.573,828.389 L799.573,719.346 L1122.342,549.372 L799.573,379.397 L799.573,270.358 L1237.987,510.886 L1237.987,587.857 L799.573,828.389 ZM291.448,927.098 L601.210,127.469 L718.855,127.469 L409.093,927.098 L291.448,927.098 ZM-215.002,510.886 L223.407,270.358 L223.407,379.397 L-99.357,549.372 L223.407,719.346 L223.407,828.389 L-215.002,587.857 L-215.002,510.886 Z" class="cls-1"/> </svg> PKe[�\������src/icons/text-height.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1073.727,843.931 L1211.024,843.931 L1039.529,975.262 L868.030,843.931 L1005.602,843.931 L1005.602,251.428 L876.962,251.428 L1039.529,120.159 L1202.092,251.428 L1073.727,251.428 L1073.727,843.931 ZM649.994,233.729 C624.218,210.392 565.126,198.716 508.696,198.716 L430.715,198.716 L430.715,797.755 C430.715,837.588 437.714,865.323 451.712,880.954 C465.705,896.596 495.137,904.404 540.026,904.404 L563.354,904.404 L563.354,975.720 L76.224,975.720 L76.224,904.404 L97.552,904.404 C142.875,904.404 178.706,896.374 192.265,880.311 C205.816,864.251 212.595,836.734 212.595,797.755 L212.595,198.716 L130.211,198.716 C84.888,198.716 29.423,203.434 8.095,212.849 C-13.237,222.275 -31.128,241.017 -45.565,269.065 C-60.005,297.124 -68.785,330.421 -71.891,368.971 L-145.075,368.971 L-145.075,120.977 L789.565,120.977 L789.565,368.971 L709.981,368.971 C695.755,302.152 675.761,257.081 649.994,233.729 Z" class="cls-1"/> </svg> PKe[�\�g�`��src/icons/arrows-alt.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #241f20; fill-rule: evenodd; } </style> </defs> <path d="M837.145,253.759 L960.985,376.234 L960.962,68.043 L649.512,68.025 L773.407,190.643 L512.001,449.497 L250.597,190.644 L374.284,68.005 L63.042,68.007 L63.043,376.234 L186.856,253.762 L448.259,512.615 L193.137,765.250 L63.009,636.616 L63.047,956.987 L386.773,957.000 L256.875,828.366 L512.000,575.732 L767.129,828.366 L637.230,957.000 L960.948,956.987 L960.926,636.616 L830.863,765.250 L575.742,512.615 L837.145,253.759 Z" class="cls-1"/> </svg> PKe[�\`�c�src/icons/align-outdent.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M10.989,129.999 L10.989,283.817 L1013.000,283.817 L1013.000,129.999 L10.989,129.999 ZM473.108,588.303 L1012.999,588.303 L1012.999,436.108 L473.108,436.108 L473.108,588.303 L473.108,588.303 ZM473.108,892.792 L1012.999,892.792 L1012.999,740.550 L473.108,740.550 L473.108,892.792 L473.108,892.792 ZM282.568,439.002 C261.604,451.493 41.464,631.478 23.747,642.701 C7.862,652.780 7.579,676.772 23.747,686.830 C48.380,702.143 267.392,881.205 281.839,890.074 C299.843,901.157 318.071,887.064 318.071,868.123 L318.071,460.818 C318.068,439.954 297.923,429.831 282.568,439.002 Z" class="cls-1"/> </svg> PKe[�\J#A�ccsrc/icons/close.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <path fill="#010202" d="M562.27,511.274l305.892-305.888c1.935-1.937,1.935-5.809,0-9.68l-44.532-42.592 c-1.936-1.937-3.868-1.937-3.868-1.937c-1.94,0-1.94,0-3.872,1.937L510,459.002l-305.887-306.13 c-1.939-1.936-3.873-1.936-3.873-1.936c-1.939,0-1.939,0-3.872,1.936l-44.528,44.77c-1.939,1.935-1.939,5.808,0,9.68 L457.728,513.21L151.84,816.92c-1.939,1.936-1.939,5.808,0,9.68l42.592,44.527c1.936,1.939,3.869,1.939,3.869,1.939 s1.939,0,3.873-1.939L510,563.545l305.889,305.89c1.936,1.936,3.872,1.936,3.872,1.936s1.935,0,3.868-1.936l42.592-44.532 c1.94-1.935,1.94-5.807,0-9.68L562.27,511.274z"/> </g> </g> </svg> PKe[�\��S��src/icons/menu-check.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path fill="#010202" d="M402.399,830.4L128.8,556.8V550.4L237.6,448L404,614.4l382.399-420.8l108.8,102.4v6.4L402.399,830.4 L402.399,830.4L402.399,830.4z"/> </svg> PKe[�\ \Y�HHsrc/icons/trash.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <path fill="#040507" d="M684.868,95.723c-38.258,0-69.273-30.712-69.273-68.606H389.834c0,37.891-31.018,68.606-69.276,68.606 H15.731v69.894h978.333V95.723H684.868z M224.755,996.884h560.281L924.92,234.799H84.871L224.755,996.884z M688.173,355.88 c0-22.491,18.415-40.721,41.121-40.721c22.71,0,41.12,18.23,41.12,40.721l-60.545,515.828c0,22.491-18.415,40.719-41.118,40.719 c-22.707,0-41.116-18.229-41.116-40.719L688.173,355.88z M464.44,355.88c0-22.491,18.413-40.721,41.123-40.721 c22.708,0,41.115,18.23,41.115,40.721v515.828c0,22.491-18.407,40.719-41.115,40.719c-22.712,0-41.123-18.229-41.123-40.719 V355.88z M269.712,315.159c22.711,0,41.118,18.23,41.118,40.721l70.229,515.828c0,22.491-18.405,40.719-41.113,40.719 c-22.712,0-41.123-18.229-41.123-40.719L228.593,355.88C228.594,333.39,247.004,315.159,269.712,315.159z"/> </g> </g> </svg> PKe[�\�#1,src/icons/question.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path id="Rounded_Rectangle_6" data-name="Rounded Rectangle 6" class="cls-1" d="M418.652,985.119h194.77V798.656H418.652V985.119ZM180.886,334.113H369.145q0-53.547,31.508-103.232T507.57,181.2q76.667,0,105.595,40.326t28.918,89.361q0,42.582-25.973,78.068-14.295,20.655-37.67,38.066L531.017,463.8q-70.137,54.192-87.023,95.81T423.21,710.265H599.743q0.642-51.612,8.446-76.133,12.341-38.713,50.028-67.75L704.332,530.9q70.173-54.2,94.851-89.039,42.234-57.417,42.233-141.3,0-136.773-97.387-206.46t-244.6-69.684q-112.047,0-188.909,49.038Q188.7,150.243,180.886,334.113h0Z"/> </svg> PKe[�\� >���src/icons/undo.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path id="Shape_29_copy_2" data-name="Shape 29 copy 2" class="cls-1" d="M-84.808,193.372V728.531H480.079L325.064,580.294s-21.019-241.2,341.56-241.2S1176.34,648.131,1176.34,648.131s-147.14-482.4-546.5-482.4c-364.362,0-567.515,165.824-567.515,165.824Z"/> </svg> PKe[�\��ffsrc/icons/col-remove.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg id="svg3446" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" height="3.9511mm" width="3.9496mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" viewBox="0 0 13.99474 14" xmlns:dc="http://purl.org/dc/elements/1.1/"> <metadata id="metadata3451"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" transform="translate(732.42 107.67)"> <g id="g3692-8" transform="matrix(0 1 -1 0 -536.02 -2867.7)"> <path id="path5085-1-1" d="m2764.7 190q-0.2558 0-0.4348-0.17906l-0.8698-0.86975q-0.1791-0.17906-0.1791-0.43487t0.1791-0.43487l1.8802-1.8802-1.8802-1.8802q-0.1791-0.17906-0.1791-0.43487t0.1791-0.43487l0.8698-0.86975q0.179-0.17906 0.4348-0.17906t0.4349 0.17906l1.8802 1.8802 1.8802-1.8802q0.179-0.17906 0.4348-0.17906t0.4349 0.17906l0.8698 0.86975q0.179 0.17906 0.179 0.43487t-0.179 0.43487l-1.8802 1.8802 1.8802 1.8802q0.179 0.17906 0.179 0.43487t-0.179 0.43487l-0.8698 0.86975q-0.1791 0.17906-0.4349 0.17906t-0.4348-0.17906l-1.8802-1.8802-1.8802 1.8802q-0.1791 0.17906-0.4349 0.17906z"/> <path id="polygon3366-49-8-3-07" style="image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m2774 191.08c0-0.2901-0.1688-0.5229-0.3789-0.5229h-13.242c-0.21 0-0.3789 0.2328-0.3789 0.5229v4.7928c0 0.29 0.1689 0.5252 0.3789 0.5252h13.242c0.2101 0 0.3789-0.2352 0.3789-0.5252v-4.7928zm-1.1582 0.687v3.4211h-3.2168v-3.4211h3.2168zm-4.2852 0v3.4211h-3.2148v-3.4211h3.2148zm-4.2832 0v3.4211h-3.2148v-3.4211h3.2148z" fill-rule="evenodd" clip-rule="evenodd"/> </g> </g> </svg> PKe[�\t��� � src/icons/chain-broken.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <g> <path fill="#010202" d="M362.776-44.529c-15.135-25.854-51.752-32.912-77.83-18.056c-26.095,14.861-39.805,50.604-24.67,76.458 l75.941,122.108c15.125,25.838,53.354,31.993,79.43,17.132c26.094-14.858,38.19-49.702,23.064-75.543L362.776-44.529z"/> </g> </g> <g> <g> <path fill="#010202" d="M575.588,77.57c-15.126,25.841-3.029,60.685,23.064,75.543c26.075,14.861,64.305,8.707,79.43-17.132 l75.941-122.108c15.135-25.854,1.425-61.597-24.67-76.458c-26.078-14.856-62.695-7.798-77.83,18.056L575.588,77.57z"/> </g> </g> </g> <g> <g> <g> <path fill="#010202" d="M438.711,943.173c15.126-25.841,3.029-60.685-23.064-75.543c-26.075-14.861-64.305-8.706-79.43,17.132 l-75.941,122.108c-15.135,25.854-1.425,61.597,24.67,76.458c26.078,14.855,62.695,7.798,77.83-18.057L438.711,943.173z"/> </g> </g> <g> <g> <path fill="#010202" d="M651.524,1065.271c15.135,25.854,51.752,32.912,77.83,18.057c26.095-14.861,39.805-50.604,24.67-76.458 l-75.941-122.108c-15.125-25.838-53.354-31.993-79.43-17.132c-26.094,14.858-38.19,49.702-23.064,75.543L651.524,1065.271z"/> </g> </g> </g> <g> <g> <path fill="#010202" d="M823.22,222.293l-196.119,0.24c-37.265,0-67.438,29.933-67.556,66.596 c0,36.785,30.051,66.477,67.317,66.477l196.117-0.24c87.271-0.119,158.194,69.841,158.075,156.034 c-0.117,86.189-71.162,156.393-158.555,156.393l-196.119,0.24c-37.265,0-67.438,29.935-67.438,66.599 c0,36.784,30.054,66.475,67.318,66.475l196.115-0.241c161.685-0.239,293.315-130.188,293.555-289.706 C1116.293,351.76,984.903,222.053,823.22,222.293z M393.772,668.394l-192.749,0.241c-87.272,0.12-158.198-69.963-158.077-156.033 c0.119-86.192,71.284-156.396,158.556-156.515l192.753-0.24c37.265,0,67.437-29.932,67.437-66.596 c0-36.784-30.052-66.477-67.316-66.477l-192.752,0.242C39.941,223.255-91.691,353.202-91.931,512.721 S39.218,801.949,200.9,801.706l192.753-0.24c37.264,0,67.438-29.813,67.557-66.597 C461.209,698.085,431.037,668.394,393.772,668.394z"/> </g> </g> </svg> PKe[�\'�¥<<src/icons/link.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <path fill="#010202" d="M823.22,222.293l-196.119,0.24c-37.265,0-67.438,29.933-67.556,66.596 c0,36.785,30.051,66.477,67.317,66.477l196.117-0.24c87.271-0.119,158.194,69.841,158.075,156.034 c-0.117,86.189-71.162,156.393-158.555,156.393l-196.119,0.24c-37.265,0-67.438,29.935-67.438,66.599 c0,36.784,30.054,66.475,67.318,66.475l196.115-0.241c161.685-0.239,293.315-130.188,293.555-289.706 C1116.293,351.76,984.903,222.053,823.22,222.293z M393.772,668.394l-192.749,0.241c-87.273,0.12-158.198-69.963-158.078-156.033 c0.12-86.192,71.284-156.396,158.556-156.515l192.752-0.24c37.265,0,67.437-29.932,67.437-66.596 c0-36.784-30.051-66.477-67.316-66.477l-192.751,0.242C39.941,223.255-91.691,353.202-91.931,512.721 S39.219,801.949,200.9,801.706l192.753-0.24c37.263,0,67.438-29.813,67.556-66.597 C461.209,698.085,431.038,668.394,393.772,668.394z M272.601,509.093c0,36.784,30.052,66.476,67.316,66.476l346.928-0.358 c37.266,0,67.439-29.934,67.558-66.598c0-36.784-30.051-66.478-67.316-66.478l-346.928,0.361 C302.895,442.496,272.72,472.308,272.601,509.093z"/> </g> </g> </svg> PKe[�\ ��src/icons/video.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path d="M-70.443,728.622l284.268-120.036V416.415L-70.443,296.266V728.622z M962.801,200.673H329.249 c-39.146,0-71.374,31.489-71.374,69.789v484.301c0,38.076,32.118,69.564,71.374,69.564h633.552 c39.256,0,71.263-31.488,71.263-69.564V270.351C1034.064,232.162,1001.946,200.673,962.801,200.673z"/> </svg> PKe[�\��&?� � src/icons/summernote.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1122.033,577.898 L1033.442,577.898 C1036.450,557.776 1038.159,535.279 1038.159,511.748 C1038.159,488.736 1036.511,467.226 1033.634,447.104 L1122.033,447.104 C1157.345,447.104 1186.090,477.189 1186.090,512.501 C1186.090,547.813 1157.345,577.898 1122.033,577.898 ZM929.167,191.898 C901.164,155.489 868.523,122.848 832.113,94.843 L894.837,32.120 C907.751,19.206 924.985,12.093 943.363,12.093 C961.743,12.093 978.976,19.206 991.891,32.120 C1004.807,45.035 1011.919,62.269 1011.919,80.647 C1011.919,99.027 1004.807,116.261 991.891,129.176 L929.167,191.898 ZM390.139,620.385 C386.505,631.404 392.589,637.487 403.607,633.891 L541.794,588.779 L900.676,229.788 C958.318,309.034 992.407,406.516 992.407,512.006 C992.407,777.325 777.324,992.408 512.005,992.408 C246.687,992.408 31.604,777.325 31.604,512.006 C31.604,246.688 246.687,31.605 512.005,31.605 C617.495,31.605 714.974,65.693 794.222,123.335 L435.195,482.236 L390.139,620.385 ZM446.682,-9.540 L446.682,-98.033 C446.682,-133.345 476.766,-162.090 512.078,-162.090 C547.391,-162.090 577.475,-133.345 577.475,-98.033 L577.475,-9.511 C557.353,-12.464 535.275,-14.147 511.965,-14.147 C488.733,-14.147 466.804,-12.474 446.682,-9.540 ZM98.494,187.254 L34.795,124.042 C9.819,99.066 9.262,60.328 34.238,35.352 C59.215,10.391 98.716,10.361 123.721,35.352 L186.790,98.859 C153.982,124.741 124.340,154.417 98.494,187.254 ZM-98.033,577.898 C-133.345,577.898 -162.090,547.813 -162.090,512.501 C-162.090,477.189 -133.345,447.104 -98.033,447.104 L-9.623,447.104 C-12.500,467.226 -14.148,488.736 -14.148,511.748 C-14.148,535.279 -12.439,557.776 -9.430,577.898 L-98.033,577.898 ZM99.092,837.519 C124.835,870.105 154.326,899.562 186.941,925.272 L123.721,988.996 C111.226,1001.477 97.056,1008.066 80.657,1008.066 C64.246,1008.066 47.847,1002.477 35.352,989.996 C10.376,965.020 10.376,925.709 35.352,900.732 L99.092,837.519 ZM577.475,1033.524 L577.475,1122.033 C577.475,1157.345 547.391,1186.090 512.078,1186.090 C476.766,1186.090 446.682,1157.345 446.682,1122.033 L446.682,1033.552 C466.804,1036.486 488.733,1038.160 511.965,1038.160 C535.275,1038.160 557.353,1036.477 577.475,1033.524 ZM925.024,837.387 L988.957,900.732 C1013.933,925.709 1014.225,963.686 989.249,988.663 C976.754,1001.144 960.943,1007.399 944.545,1007.399 C928.133,1007.399 912.907,1001.144 900.413,988.663 L837.302,925.090 C869.869,899.389 899.316,869.949 925.024,837.387 Z" class="cls-1"/> </svg> PKe[�\!#gJJsrc/icons/align-center.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1005.873,135.999 L17.000,135.999 L17.000,286.464 L1005.873,286.464 L1005.873,135.999 ZM853.738,587.386 L853.738,436.925 L169.135,436.925 L169.135,587.386 L853.738,587.386 ZM17.434,737.787 L17.434,888.000 L1006.000,888.000 L1006.000,737.787 L17.434,737.787 Z" class="cls-1"/> </svg> PKe[�\G�v�66src/icons/font.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M573.459,743.967 L601.655,814.844 L611.052,837.039 C619.730,855.657 624.065,870.689 624.065,882.145 C624.065,895.035 618.759,905.661 608.164,914.005 C597.553,922.362 570.318,926.535 526.469,926.535 L526.469,1006.008 L1013.015,1006.008 L1013.015,926.535 C990.358,926.535 966.749,919.016 942.164,903.983 C917.585,888.947 890.112,844.201 859.751,769.742 L552.495,17.984 L467.908,17.984 L166.437,770.455 C124.505,874.518 72.691,926.535 11.003,926.535 L11.003,1006.008 L334.884,1006.008 L334.884,926.535 C298.738,926.535 272.712,921.880 256.806,912.575 C240.900,903.266 232.949,886.921 232.949,863.532 C232.949,849.694 239.691,825.830 253.189,791.937 L271.988,743.967 L573.459,743.967 ZM418.748,371.669 L540.929,661.633 L303.077,661.633 L418.748,371.669 Z" class="cls-1"/> </svg> PKe[�\/rrsrc/icons/magic.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path class="cls-1" d="M849.684,129.609L904.511,183.9,1050.77,39.032l-54.827-54.3ZM991.24,487.441h219.79V410.647l-219.79.008v76.786ZM849.684,853.314L995.943,998.181l54.827-54.289L904.511,799.022ZM27.557,39.032L173.825,183.9l54.821-54.293L82.378-15.269Zm443.712,4.655h77.524l0.01-217.671H471.278ZM-132.579,944.281L50.885,1126,533.252,648.5l-183.46-181.7ZM404.619,412.5L588.073,594.215,772.047,411.989,588.588,230.279Z"/> </svg> PKe[�\�m�B��src/icons/redo.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path id="Shape_29_copy_3" data-name="Shape 29 copy 3" class="cls-1" d="M1181.48,193.372V728.531H616.6L771.612,580.294s21.019-239-341.56-239S-79.66,648.131-79.66,648.131s147.134-482.4,546.5-482.4S1034.35,331.559,1034.35,331.559Z"/> </svg> PKe[�\�B�AAsrc/icons/arrows-h.svgnu�[���<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1792 896q0 26-19 45l-256 256q-19 19-45 19t-45-19-19-45v-128h-1024v128q0 26-19 45t-45 19-45-19l-256-256q-19-19-19-45t19-45l256-256q19-19 45-19t45 19 19 45v128h1024v-128q0-26 19-45t45-19 45 19l256 256q19 19 19 45z"/></svg>PKe[�\@���src/icons/picture.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1068.340,975.691 L-26.281,975.691 C-61.627,975.691 -90.281,947.037 -90.281,911.691 L-90.281,113.254 C-90.281,77.908 -61.627,49.254 -26.281,49.254 L1068.340,49.254 C1103.686,49.254 1132.340,77.908 1132.340,113.254 L1132.340,911.691 C1132.340,947.037 1103.686,975.691 1068.340,975.691 ZM1060.475,192.281 C1060.475,113.556 996.043,121.007 916.561,121.007 L125.033,121.007 C45.551,121.007 -18.881,113.556 -18.881,192.281 L-18.881,762.448 C-18.881,841.172 45.551,904.991 125.033,904.991 L916.561,904.991 C996.043,904.991 1060.475,841.172 1060.475,762.448 L1060.475,192.281 ZM820.368,440.468 C767.439,440.468 724.487,400.954 724.487,352.025 C724.487,303.139 767.439,263.554 820.368,263.554 C873.322,263.554 916.222,303.139 916.222,352.025 C916.222,400.954 873.322,440.468 820.368,440.468 ZM873.397,780.358 C918.029,846.441 885.494,832.253 801.185,832.253 L225.930,832.253 C141.522,832.253 101.661,842.771 137.427,772.270 L276.114,497.962 C311.786,427.437 379.266,422.747 426.053,487.463 L562.711,676.687 L600.888,601.377 C636.612,530.876 702.365,527.233 747.024,593.289 L873.397,780.358 Z" class="cls-1"/> </svg> PKe[�\Z��4))src/icons/special-character.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path id="_" data-name="※" class="cls-1" d="M807.591,584.975q29.964,27.886,70.339,27.869,46.473,0,75.84-27.869t29.359-72.7q0-44.811-31.194-72.695-31.188-27.864-74-27.869-42.835,0-71.561,29.684-28.76,29.706-28.751,72.093Q777.618,557.11,807.591,584.975Zm-737.635,0q28.732,27.886,74.009,27.869,42.807,0,70.952-27.869,28.124-27.858,28.133-72.7,0-44.811-29.36-72.695-29.353-27.864-69.725-27.869-46.5,0-74.618,29.684Q41.188,471.106,41.21,513.493,41.21,557.11,69.956,584.975ZM422.872,180.3A111.5,111.5,0,0,0,445.5,212.407a103.872,103.872,0,0,0,72.783,29.684q45.243,0,73.4-29.684,28.131-29.677,28.138-72.093,0-43.617-30.582-72.695T518.286,38.541q-46.5,0-75.231,29.684-28.753,29.7-28.746,72.088A92.561,92.561,0,0,0,422.872,180.3ZM444.89,956.94q30.566,27.858,73.4,27.865,44.039,0,72.787-27.865,28.725-27.887,28.747-73.908,0-42.4-30.582-69.667T518.286,786.1q-46.5,0-75.231,28.471-28.753,28.484-28.746,69.667Q414.309,929.058,444.89,956.94ZM919.768,46.429L512.582,449.945,104.533,46.429,43.951,107.145,451.137,509.807,43.951,912.465l60.582,60.715L512.582,569.668,919.768,973.18l59.714-60.715L572.3,509.807,979.482,107.145Z"/> </svg> PKe[�\�����src/icons/arrow-circle-left.svgnu�[���<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1408 960v-128q0-26-19-45t-45-19h-502l189-189q19-19 19-45t-19-45l-91-91q-18-18-45-18t-45 18l-362 362-91 91q-18 18-18 45t18 45l91 91 362 362q18 18 45 18t45-18l91-91q18-18 18-45t-18-45l-189-189h502q26 0 45-19t19-45zm256-64q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>PKe[�\s� ��src/icons/pencil.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path d="M100.403,576.011l-127.892,470.479L452.19,927.81l599.3-599l-352.3-351.3L100.403,576.011z M873.281,328.811 L389.143,812.973l-145.086,31.801l-63.754-63.58l34.259-141.311l484.627-484.671L873.281,328.811z"/> </svg> PKe[�\�� NNsrc/icons/row-below.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg id="svg3446" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" height="3.9522mm" width="3.9511mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 14 14.003805" xmlns:dc="http://purl.org/dc/elements/1.1/"> <metadata id="metadata3451"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" transform="translate(745.96 126.95)"> <g id="g3610-5" transform="matrix(1 0 0 -1 -3506 69.446)"> <path id="path3400-4-4-5-6" d="m2771 186.43q0 0.264-0.1915 0.4658l-0.3882 0.3882q-0.1966 0.1965-0.4709 0.1965-0.2795 0-0.4658-0.1965l-1.5217-1.5164v3.6436q0 0.2691-0.194 0.4372-0.1941 0.1683-0.4684 0.1683h-0.6625q-0.2743 0-0.4684-0.1683-0.1941-0.1681-0.1941-0.4372v-3.6436l-1.5216 1.5164q-0.1863 0.1965-0.4658 0.1965t-0.4658-0.1965l-0.3882-0.3882q-0.1966-0.1967-0.1966-0.4658 0-0.2742 0.1966-0.471l3.3693-3.3692q0.1812-0.1916 0.4658-0.1916 0.2795 0 0.471 0.1916l3.3693 3.3692q0.1915 0.2019 0.1915 0.471z" stroke-width="0"/> <path id="polygon3366-49-8-3-0" style="image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m2774 191.08c0-0.2901-0.1688-0.5229-0.3789-0.5229h-13.242c-0.21 0-0.3789 0.2328-0.3789 0.5229v4.7928c0 0.29 0.1689 0.5252 0.3789 0.5252h13.242c0.2101 0 0.3789-0.2352 0.3789-0.5252v-4.7928zm-1.1582 0.687v3.4211h-3.2168v-3.4211h3.2168zm-4.2852 0v3.4211h-3.2148v-3.4211h3.2148zm-4.2832 0v3.4211h-3.2148v-3.4211h3.2148z" fill-rule="evenodd" clip-rule="evenodd"/> </g> </g> </svg> PKe[�\�$���src/icons/bold.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M804.888,401.892 C843.584,366.065 862.937,322.286 862.937,270.577 C862.937,202.087 833.630,147.995 775.010,108.301 C716.386,68.614 606.469,48.762 445.268,48.762 L394.438,48.762 L36.535,58.970 L36.535,134.496 C87.370,134.496 120.343,142.439 135.459,158.309 C150.571,174.195 158.124,203.895 158.124,247.441 L158.124,788.361 C158.124,833.266 150.108,863.321 134.082,878.514 C118.046,893.714 85.535,901.307 36.535,901.307 L36.535,976.833 L524.958,976.833 C660.974,976.833 758.285,955.296 816.914,912.195 C875.529,869.106 904.841,810.134 904.841,735.289 C904.841,668.607 881.941,614.516 836.144,573.013 C790.348,531.511 721.651,502.590 630.063,486.260 C707.913,465.849 766.183,437.732 804.888,401.892 ZM401.996,129.054 C451.453,129.054 488.890,132.688 514.310,139.938 C539.725,147.200 560.219,163.306 575.793,188.245 C591.357,213.200 599.146,247.220 599.146,290.310 C599.146,347.918 586.786,388.401 562.055,411.757 C537.323,435.125 499.769,446.797 449.392,446.797 L401.996,446.797 L401.996,129.054 ZM446.646,529.810 C495.183,529.810 531.832,534.571 556.558,544.101 C581.289,553.623 600.751,572.107 614.951,599.551 C629.143,626.999 636.243,664.985 636.243,713.516 C636.243,774.307 625.359,819.893 603.614,850.274 C581.860,880.672 549.227,895.864 505.728,895.864 C477.784,895.864 456.148,891.442 440.805,882.597 C425.458,873.752 415.154,862.762 409.894,849.597 C404.624,836.448 401.996,817.172 401.996,791.764 L401.996,529.810 L446.646,529.810 Z" class="cls-1"/> </svg> PKe[�\��TKKsrc/icons/row-above.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg id="svg3446" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" height="3.9522mm" width="3.9511mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 14 14.003805" xmlns:dc="http://purl.org/dc/elements/1.1/"> <metadata id="metadata3451"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" transform="translate(758.78 133.09)"> <g id="g3610-8" transform="translate(-3518.8 -315.48)"> <path id="path3400-4-4-5-4" d="m2771 186.43q0 0.264-0.1915 0.4658l-0.3882 0.3882q-0.1966 0.1965-0.4709 0.1965-0.2795 0-0.4658-0.1965l-1.5217-1.5164v3.6436q0 0.2691-0.194 0.4372-0.1941 0.1683-0.4684 0.1683h-0.6625q-0.2743 0-0.4684-0.1683-0.1941-0.1681-0.1941-0.4372v-3.6436l-1.5216 1.5164q-0.1863 0.1965-0.4658 0.1965t-0.4658-0.1965l-0.3882-0.3882q-0.1966-0.1967-0.1966-0.4658 0-0.2742 0.1966-0.471l3.3693-3.3692q0.1812-0.1916 0.4658-0.1916 0.2795 0 0.471 0.1916l3.3693 3.3692q0.1915 0.2019 0.1915 0.471z" stroke-width="0"/> <path id="polygon3366-49-8-3-5" style="image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m2774 191.08c0-0.2901-0.1688-0.5229-0.3789-0.5229h-13.242c-0.21 0-0.3789 0.2328-0.3789 0.5229v4.7928c0 0.29 0.1689 0.5252 0.3789 0.5252h13.242c0.2101 0 0.3789-0.2352 0.3789-0.5252v-4.7928zm-1.1582 0.687v3.4211h-3.2168v-3.4211h3.2168zm-4.2852 0v3.4211h-3.2148v-3.4211h3.2148zm-4.2832 0v3.4211h-3.2148v-3.4211h3.2148z" fill-rule="evenodd" clip-rule="evenodd"/> </g> </g> </svg> PKe[�\�Hl��src/icons/arrow-circle-down.svgnu�[���<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1412 897q0-27-18-45l-91-91q-18-18-45-18t-45 18l-189 189v-502q0-26-19-45t-45-19h-128q-26 0-45 19t-19 45v502l-189-189q-19-19-45-19t-45 19l-91 91q-18 18-18 45t18 45l362 362 91 91q18 18 45 18t45-18l91-91 362-362q18-18 18-45zm252-1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>PKe[�\��r��src/icons/table.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M-73.241,975.691 L-73.241,49.254 L285.347,49.254 L358.022,49.254 L645.543,49.254 L718.150,49.254 L1076.738,49.254 L1076.738,975.691 L-73.241,975.691 ZM718.150,904.980 L1005.528,904.980 L1005.528,691.094 L718.150,691.094 L718.150,904.980 ZM1005.528,619.954 L1005.528,406.566 L718.150,406.566 L718.150,619.954 L1005.528,619.954 ZM358.022,904.980 L645.543,904.980 L645.543,691.094 L358.022,691.094 L358.022,904.980 ZM645.543,619.954 L645.543,406.566 L358.022,406.566 L358.022,619.954 L645.543,619.954 ZM-1.871,904.980 L285.347,904.980 L285.347,691.094 L-1.871,691.094 L-1.871,904.980 ZM285.347,619.954 L285.347,406.566 L-1.871,406.566 L-1.871,619.954 L285.347,619.954 ZM-1.871,120.996 L-1.871,335.391 L285.347,335.391 L285.347,120.996 L-1.871,120.996 ZM358.022,120.996 L358.022,335.391 L645.543,335.391 L645.543,120.996 L358.022,120.996 ZM718.150,120.996 L718.150,335.391 L1005.528,335.391 L1005.528,120.996 L718.150,120.996 Z" class="cls-1"/> </svg> PKe[�\vzyJ||src/icons/align-indent.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M10.989,129.999 L10.989,283.817 L1013.000,283.817 L1013.000,129.999 L10.989,129.999 ZM473.108,588.303 L1012.999,588.303 L1012.999,436.108 L473.108,436.108 L473.108,588.303 L473.108,588.303 ZM473.108,892.792 L1012.999,892.792 L1012.999,740.550 L473.108,740.550 L473.108,892.792 L473.108,892.792 ZM47.458,439.405 C68.401,451.885 288.316,631.710 306.015,642.923 C321.884,652.994 322.166,676.965 306.015,687.013 C281.408,702.313 62.619,881.216 48.187,890.077 C30.201,901.151 11.992,887.071 11.992,868.146 L11.992,461.202 C11.995,440.356 32.119,430.242 47.458,439.405 Z" class="cls-1"/> </svg> PKe[�\�q ��� src/icons/arrow-circle-right.svgnu�[���<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1413 896q0-27-18-45l-91-91-362-362q-18-18-45-18t-45 18l-91 91q-18 18-18 45t18 45l189 189h-502q-26 0-45 19t-19 45v128q0 26 19 45t45 19h502l-189 189q-19 19-19 45t19 45l91 91q18 18 45 18t45-18l362-362 91-91q18-18 18-45zm251 0q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>PKe[�\�x6�KKsrc/icons/align-justify.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1005.873,135.999 L17.000,135.999 L17.000,286.464 L1005.873,286.464 L1005.873,135.999 ZM1005.873,436.925 L17.000,436.925 L17.000,587.386 L1005.873,587.386 L1005.873,436.925 ZM17.434,737.787 L17.434,888.000 L1006.000,888.000 L1006.000,737.787 L17.434,737.787 Z" class="cls-1"/> </svg> PKe[�\�"�� � src/icons/strikethrough.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M999.602,572.813 L23.826,572.813 C14.990,572.813 7.826,565.650 7.826,556.813 L7.826,446.566 C7.826,437.730 14.990,430.566 23.826,430.566 L222.008,430.566 C219.520,428.463 217.056,426.350 214.637,424.218 C161.037,373.796 134.249,315.121 134.249,248.206 C134.249,212.816 142.487,179.473 158.985,148.198 C175.469,116.922 198.139,90.014 227.007,67.465 C255.857,44.916 290.123,27.349 329.810,14.736 C369.487,2.130 412.255,-4.175 458.127,-4.175 C491.619,-4.175 521.375,-1.993 547.403,2.370 C573.418,6.734 600.862,13.042 629.726,21.281 C658.580,29.531 682.023,35.713 700.069,39.828 C718.101,43.951 732.269,57.144 742.582,57.144 C770.917,57.144 790.242,35.961 800.555,2.504 L870.333,2.504 L870.333,317.302 L803.645,317.302 C782.005,266.876 754.042,222.751 719.780,184.927 C685.500,147.107 647.625,117.903 606.150,97.287 C564.661,76.680 522.016,66.374 478.225,66.374 C431.325,66.374 393.836,77.172 365.756,98.741 C337.661,120.321 323.630,149.052 323.630,184.927 C323.630,217.908 337.793,247.730 366.142,274.390 C382.108,288.460 413.293,307.245 459.670,330.758 C506.051,354.284 550.361,376.340 592.624,396.944 C614.707,407.719 636.721,418.934 658.668,430.566 L999.602,430.566 C1008.439,430.566 1015.602,437.730 1015.602,446.566 L1015.602,556.813 C1015.602,565.650 1008.439,572.813 999.602,572.813 ZM270.294,825.703 C307.395,866.433 348.361,897.594 393.195,919.167 C438.029,940.747 484.660,951.529 533.103,951.529 C568.143,951.529 599.196,945.236 626.248,932.619 C653.301,920.017 674.295,902.800 689.246,880.980 C704.188,859.160 711.661,834.433 711.661,806.793 C711.661,762.675 693.110,723.150 656.009,688.240 C639.510,671.759 615.680,661.588 584.509,644.371 L894.856,644.371 C909.279,679.045 916.502,709.332 916.502,748.605 C916.502,800.496 901.815,847.885 872.442,890.797 C843.068,933.710 802.353,967.293 750.310,991.535 C698.257,1015.773 641.322,1027.902 579.485,1027.902 C537.222,1027.902 499.215,1023.775 465.468,1015.537 C431.712,1007.287 393.450,996.386 350.682,982.804 C307.900,969.238 279.301,962.441 264.883,962.441 C244.265,962.441 246.469,968.383 231.013,980.260 C215.552,992.149 205.503,1007.535 200.866,1026.445 L151.394,1026.445 L151.394,683.876 L200.866,683.876 C223.535,737.697 233.188,784.972 270.294,825.703 Z" class="cls-1"/> </svg> PKe[�\k��CCsrc/icons/arrows-v.svgnu�[���<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19 19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26 0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z"/></svg>PKe[�\TG���src/icons/align-left.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <path fill="#010202" d="M929.51,135.727H17.704v151.855H929.51V135.727z M777.555,437.932H17.704v150.254h759.847L777.555,437.932 L777.555,437.932z M17.704,738.488V888.79h988.593V738.488H17.704z"/> </g> </g> </svg> PKe[�\/�RRsrc/icons/dist/summernote.lessnu�[���// Generated by grunt-webfont // Based on https://github.com/endtwist/fontcustom/blob/master/lib/fontcustom/templates/fontcustom.css @font-face { font-family:"summernote"; src:url("./font/summernote.eot?dbafe969167589eda84514394d126413"); src:url("./font/summernote.eot?#iefix") format("embedded-opentype"), url("./font/summernote.woff?dbafe969167589eda84514394d126413") format("woff"), url("./font/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype"); font-weight:normal; font-style:normal; } // Bootstrap Overrides [class^="note-icon-"]:before, [class*=" note-icon-"]:before { display:inline-block; vertical-align:middle; font: normal normal normal 14px summernote; font-size: inherit; speak:none; text-decoration:inherit; text-transform:none; text-rendering:auto; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; } // Mixins .note-icon-align-center, .note-icon-align-indent, .note-icon-align-justify, .note-icon-align-left, .note-icon-align-outdent, .note-icon-align-right, .note-icon-align, .note-icon-arrow-circle-down, .note-icon-arrow-circle-left, .note-icon-arrow-circle-right, .note-icon-arrow-circle-up, .note-icon-arrows-alt, .note-icon-arrows-h, .note-icon-arrows-v, .note-icon-bold, .note-icon-caret, .note-icon-chain-broken, .note-icon-circle, .note-icon-close, .note-icon-code, .note-icon-col-after, .note-icon-col-before, .note-icon-col-remove, .note-icon-eraser, .note-icon-font, .note-icon-frame, .note-icon-italic, .note-icon-link, .note-icon-magic, .note-icon-menu-check, .note-icon-minus, .note-icon-orderedlist, .note-icon-pencil, .note-icon-picture, .note-icon-question, .note-icon-redo, .note-icon-row-above, .note-icon-row-below, .note-icon-row-remove, .note-icon-special-character, .note-icon-square, .note-icon-strikethrough, .note-icon-subscript, .note-icon-summernote, .note-icon-superscript, .note-icon-table, .note-icon-text-height, .note-icon-trash, .note-icon-underline, .note-icon-undo, .note-icon-unorderedlist, .note-icon-video { &:before { font-family:"summernote"; display:inline-block; font-weight:normal; font-style:normal; text-decoration:inherit; } } // Icons .note-icon-align-center { &:before { content:"\f101"; } } .note-icon-align-indent { &:before { content:"\f102"; } } .note-icon-align-justify { &:before { content:"\f103"; } } .note-icon-align-left { &:before { content:"\f104"; } } .note-icon-align-outdent { &:before { content:"\f105"; } } .note-icon-align-right { &:before { content:"\f106"; } } .note-icon-align { &:before { content:"\f107"; } } .note-icon-arrow-circle-down { &:before { content:"\f108"; } } .note-icon-arrow-circle-left { &:before { content:"\f109"; } } .note-icon-arrow-circle-right { &:before { content:"\f10a"; } } .note-icon-arrow-circle-up { &:before { content:"\f10b"; } } .note-icon-arrows-alt { &:before { content:"\f10c"; } } .note-icon-arrows-h { &:before { content:"\f10d"; } } .note-icon-arrows-v { &:before { content:"\f10e"; } } .note-icon-bold { &:before { content:"\f10f"; } } .note-icon-caret { &:before { content:"\f110"; } } .note-icon-chain-broken { &:before { content:"\f111"; } } .note-icon-circle { &:before { content:"\f112"; } } .note-icon-close { &:before { content:"\f113"; } } .note-icon-code { &:before { content:"\f114"; } } .note-icon-col-after { &:before { content:"\f115"; } } .note-icon-col-before { &:before { content:"\f116"; } } .note-icon-col-remove { &:before { content:"\f117"; } } .note-icon-eraser { &:before { content:"\f118"; } } .note-icon-font { &:before { content:"\f119"; } } .note-icon-frame { &:before { content:"\f11a"; } } .note-icon-italic { &:before { content:"\f11b"; } } .note-icon-link { &:before { content:"\f11c"; } } .note-icon-magic { &:before { content:"\f11d"; } } .note-icon-menu-check { &:before { content:"\f11e"; } } .note-icon-minus { &:before { content:"\f11f"; } } .note-icon-orderedlist { &:before { content:"\f120"; } } .note-icon-pencil { &:before { content:"\f121"; } } .note-icon-picture { &:before { content:"\f122"; } } .note-icon-question { &:before { content:"\f123"; } } .note-icon-redo { &:before { content:"\f124"; } } .note-icon-row-above { &:before { content:"\f125"; } } .note-icon-row-below { &:before { content:"\f126"; } } .note-icon-row-remove { &:before { content:"\f127"; } } .note-icon-special-character { &:before { content:"\f128"; } } .note-icon-square { &:before { content:"\f129"; } } .note-icon-strikethrough { &:before { content:"\f12a"; } } .note-icon-subscript { &:before { content:"\f12b"; } } .note-icon-summernote { &:before { content:"\f12c"; } } .note-icon-superscript { &:before { content:"\f12d"; } } .note-icon-table { &:before { content:"\f12e"; } } .note-icon-text-height { &:before { content:"\f12f"; } } .note-icon-trash { &:before { content:"\f130"; } } .note-icon-underline { &:before { content:"\f131"; } } .note-icon-undo { &:before { content:"\f132"; } } .note-icon-unorderedlist { &:before { content:"\f133"; } } .note-icon-video { &:before { content:"\f134"; } } PKe[�\@�h��.�.src/icons/dist/summernote.htmlnu�[���<!doctype html> <html> <head> <meta charset="utf-8"> <title>summernote</title> <style> body { margin:0; padding:10px 20px; background:#fff; color:#222; } h1, div, footer { font-family:"Helvetica Neue", Arial, sans-serif; } h1 { margin:0 0 20px; font-size:32px; font-weight:normal; } h1 small { font-size: 0.8em; padding-left: 2em; } .icons { margin-bottom:40px; -webkit-column-count:5; -moz-column-count:5; column-count:5; -webkit-column-gap:20px; -moz-column-gap:20px; column-gap:20px; } .icons__item, .icons__item i { line-height:2em; cursor:pointer; overflow:hidden; } .icons__item:hover { color:#3c90be; } .icons__item i { display:inline-block; width:32px; text-align:center; } .icons__item:hover i { -webkit-transform:scale(1.5); transform:scale(1.5); } footer { margin-top:40px; font-size:14px; color:#999; } /* Generated by grunt-webfont */ /* Based on https://github.com/endtwist/fontcustom/blob/master/lib/fontcustom/templates/fontcustom.css */ @font-face { font-family:"summernote"; src:url("font/summernote.eot?dbafe969167589eda84514394d126413"); src:url("font/summernote.eot?#iefix") format("embedded-opentype"), url("font/summernote.woff?dbafe969167589eda84514394d126413") format("woff"), url("font/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype"); font-weight:normal; font-style:normal; } /* Bootstrap Overrides */ [class^="note-icon-"]:before, [class*=" note-icon-"]:before { display:inline-block; vertical-align:middle; font: normal normal normal 14px summernote; font-size: inherit; speak:none; text-decoration:inherit; text-transform:none; text-rendering:auto; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; } /* Icons */ .note-icon-align-center:before { content:"\f101"; } .note-icon-align-indent:before { content:"\f102"; } .note-icon-align-justify:before { content:"\f103"; } .note-icon-align-left:before { content:"\f104"; } .note-icon-align-outdent:before { content:"\f105"; } .note-icon-align-right:before { content:"\f106"; } .note-icon-align:before { content:"\f107"; } .note-icon-arrow-circle-down:before { content:"\f108"; } .note-icon-arrow-circle-left:before { content:"\f109"; } .note-icon-arrow-circle-right:before { content:"\f10a"; } .note-icon-arrow-circle-up:before { content:"\f10b"; } .note-icon-arrows-alt:before { content:"\f10c"; } .note-icon-arrows-h:before { content:"\f10d"; } .note-icon-arrows-v:before { content:"\f10e"; } .note-icon-bold:before { content:"\f10f"; } .note-icon-caret:before { content:"\f110"; } .note-icon-chain-broken:before { content:"\f111"; } .note-icon-circle:before { content:"\f112"; } .note-icon-close:before { content:"\f113"; } .note-icon-code:before { content:"\f114"; } .note-icon-col-after:before { content:"\f115"; } .note-icon-col-before:before { content:"\f116"; } .note-icon-col-remove:before { content:"\f117"; } .note-icon-eraser:before { content:"\f118"; } .note-icon-font:before { content:"\f119"; } .note-icon-frame:before { content:"\f11a"; } .note-icon-italic:before { content:"\f11b"; } .note-icon-link:before { content:"\f11c"; } .note-icon-magic:before { content:"\f11d"; } .note-icon-menu-check:before { content:"\f11e"; } .note-icon-minus:before { content:"\f11f"; } .note-icon-orderedlist:before { content:"\f120"; } .note-icon-pencil:before { content:"\f121"; } .note-icon-picture:before { content:"\f122"; } .note-icon-question:before { content:"\f123"; } .note-icon-redo:before { content:"\f124"; } .note-icon-row-above:before { content:"\f125"; } .note-icon-row-below:before { content:"\f126"; } .note-icon-row-remove:before { content:"\f127"; } .note-icon-special-character:before { content:"\f128"; } .note-icon-square:before { content:"\f129"; } .note-icon-strikethrough:before { content:"\f12a"; } .note-icon-subscript:before { content:"\f12b"; } .note-icon-summernote:before { content:"\f12c"; } .note-icon-superscript:before { content:"\f12d"; } .note-icon-table:before { content:"\f12e"; } .note-icon-text-height:before { content:"\f12f"; } .note-icon-trash:before { content:"\f130"; } .note-icon-underline:before { content:"\f131"; } .note-icon-undo:before { content:"\f132"; } .note-icon-unorderedlist:before { content:"\f133"; } .note-icon-video:before { content:"\f134"; } </style> </head> <body> <h1>summernote</h1> <div class="icons" id="icons"> <div class="icons__item" data-name="align-center"><i class=" note-icon-align-center"></i> note-icon-align-center</div> <div class="icons__item" data-name="align-indent"><i class=" note-icon-align-indent"></i> note-icon-align-indent</div> <div class="icons__item" data-name="align-justify"><i class=" note-icon-align-justify"></i> note-icon-align-justify</div> <div class="icons__item" data-name="align-left"><i class=" note-icon-align-left"></i> note-icon-align-left</div> <div class="icons__item" data-name="align-outdent"><i class=" note-icon-align-outdent"></i> note-icon-align-outdent</div> <div class="icons__item" data-name="align-right"><i class=" note-icon-align-right"></i> note-icon-align-right</div> <div class="icons__item" data-name="align"><i class=" note-icon-align"></i> note-icon-align</div> <div class="icons__item" data-name="arrow-circle-down"><i class=" note-icon-arrow-circle-down"></i> note-icon-arrow-circle-down</div> <div class="icons__item" data-name="arrow-circle-left"><i class=" note-icon-arrow-circle-left"></i> note-icon-arrow-circle-left</div> <div class="icons__item" data-name="arrow-circle-right"><i class=" note-icon-arrow-circle-right"></i> note-icon-arrow-circle-right</div> <div class="icons__item" data-name="arrow-circle-up"><i class=" note-icon-arrow-circle-up"></i> note-icon-arrow-circle-up</div> <div class="icons__item" data-name="arrows-alt"><i class=" note-icon-arrows-alt"></i> note-icon-arrows-alt</div> <div class="icons__item" data-name="arrows-h"><i class=" note-icon-arrows-h"></i> note-icon-arrows-h</div> <div class="icons__item" data-name="arrows-v"><i class=" note-icon-arrows-v"></i> note-icon-arrows-v</div> <div class="icons__item" data-name="bold"><i class=" note-icon-bold"></i> note-icon-bold</div> <div class="icons__item" data-name="caret"><i class=" note-icon-caret"></i> note-icon-caret</div> <div class="icons__item" data-name="chain-broken"><i class=" note-icon-chain-broken"></i> note-icon-chain-broken</div> <div class="icons__item" data-name="circle"><i class=" note-icon-circle"></i> note-icon-circle</div> <div class="icons__item" data-name="close"><i class=" note-icon-close"></i> note-icon-close</div> <div class="icons__item" data-name="code"><i class=" note-icon-code"></i> note-icon-code</div> <div class="icons__item" data-name="col-after"><i class=" note-icon-col-after"></i> note-icon-col-after</div> <div class="icons__item" data-name="col-before"><i class=" note-icon-col-before"></i> note-icon-col-before</div> <div class="icons__item" data-name="col-remove"><i class=" note-icon-col-remove"></i> note-icon-col-remove</div> <div class="icons__item" data-name="eraser"><i class=" note-icon-eraser"></i> note-icon-eraser</div> <div class="icons__item" data-name="font"><i class=" note-icon-font"></i> note-icon-font</div> <div class="icons__item" data-name="frame"><i class=" note-icon-frame"></i> note-icon-frame</div> <div class="icons__item" data-name="italic"><i class=" note-icon-italic"></i> note-icon-italic</div> <div class="icons__item" data-name="link"><i class=" note-icon-link"></i> note-icon-link</div> <div class="icons__item" data-name="magic"><i class=" note-icon-magic"></i> note-icon-magic</div> <div class="icons__item" data-name="menu-check"><i class=" note-icon-menu-check"></i> note-icon-menu-check</div> <div class="icons__item" data-name="minus"><i class=" note-icon-minus"></i> note-icon-minus</div> <div class="icons__item" data-name="orderedlist"><i class=" note-icon-orderedlist"></i> note-icon-orderedlist</div> <div class="icons__item" data-name="pencil"><i class=" note-icon-pencil"></i> note-icon-pencil</div> <div class="icons__item" data-name="picture"><i class=" note-icon-picture"></i> note-icon-picture</div> <div class="icons__item" data-name="question"><i class=" note-icon-question"></i> note-icon-question</div> <div class="icons__item" data-name="redo"><i class=" note-icon-redo"></i> note-icon-redo</div> <div class="icons__item" data-name="row-above"><i class=" note-icon-row-above"></i> note-icon-row-above</div> <div class="icons__item" data-name="row-below"><i class=" note-icon-row-below"></i> note-icon-row-below</div> <div class="icons__item" data-name="row-remove"><i class=" note-icon-row-remove"></i> note-icon-row-remove</div> <div class="icons__item" data-name="special-character"><i class=" note-icon-special-character"></i> note-icon-special-character</div> <div class="icons__item" data-name="square"><i class=" note-icon-square"></i> note-icon-square</div> <div class="icons__item" data-name="strikethrough"><i class=" note-icon-strikethrough"></i> note-icon-strikethrough</div> <div class="icons__item" data-name="subscript"><i class=" note-icon-subscript"></i> note-icon-subscript</div> <div class="icons__item" data-name="summernote"><i class=" note-icon-summernote"></i> note-icon-summernote</div> <div class="icons__item" data-name="superscript"><i class=" note-icon-superscript"></i> note-icon-superscript</div> <div class="icons__item" data-name="table"><i class=" note-icon-table"></i> note-icon-table</div> <div class="icons__item" data-name="text-height"><i class=" note-icon-text-height"></i> note-icon-text-height</div> <div class="icons__item" data-name="trash"><i class=" note-icon-trash"></i> note-icon-trash</div> <div class="icons__item" data-name="underline"><i class=" note-icon-underline"></i> note-icon-underline</div> <div class="icons__item" data-name="undo"><i class=" note-icon-undo"></i> note-icon-undo</div> <div class="icons__item" data-name="unorderedlist"><i class=" note-icon-unorderedlist"></i> note-icon-unorderedlist</div> <div class="icons__item" data-name="video"><i class=" note-icon-video"></i> note-icon-video</div> </div> <h1>Usage</h1> <pre><code><i class="note-icon-<span id="name">name</span>"></i></code></pre> <footer>Generated by <a href="https://github.com/sapegin/grunt-webfont">grunt-webfont</a>.</footer> <script> (function() { document.getElementById('icons').onclick = function(e) { e = e || window.event; var name = e.target.getAttribute('data-name') || e.target.parentNode.getAttribute('data-name'); document.getElementById('name').innerHTML = name; } })(); </script> </body> </html> PKe[�\SԫA�"�""src/icons/dist/font/summernote.ttfnu�[��� �PFFTM�>u�"�OS/2A(]�X`cmap��0Bcvt Dtgasp��"�glyf�yk��\headn!t�6hheaG $hmtx���vloca�r�txpmaxp��8 name���ZD�postK�IP ����^_<�֧�y֧�y���nk�n.����k7� @.�LfGLf�� PfEd���4���.� $$$$�0���J��'��Q���@6����Z����������������< �4�����D***Fx����V��Dv���� .��@f�R|�.:��Dr� � � � �Z��p�� .�U.�/<��2��<��2�/<��2��<��233'3#�wffU��3�}!5!5!!!�����V�^�|KK�L�K����!!5!5!%&=46��� �� �xwM�LL�LL�`_��}!5!5!!����|KK�LL�K�}!5!5!!�8|���|LL�KK�K����!!5!5!%6'.'&47>��� �� ��wxM�LL�LL��_` �|!!5!5!/�7L}��|L�KK�KK�p75!%!!!5! /������Q��GG�H��H$����+$4/&"54&+"'&"2?6".4>2�6$6ggM:exe::exe�6��6hhIxe::exe::$����+%54&+764/&"2?64/32>".4>2��6hh6�I:exe::exe�$6gg6Vxe::exe::$����+$4/&"#";2?6".4>2�h6��6hL:exe::exe�g6$6gIxe::exe::$����+$4/&"2?;26=2?6".4>2�gg6$6M:exe::exe�hh6��6Ixe::exe::����7#7'#57'537'3��A�A��A�A�=�>��>�A�A�@~~@�A�=�=��=�d$"&=!"/&4?62!5462J��JJ$J�I $$ II $$ I���\�+32"/&46;#"&4?62[ $$ II $$ IIl��JJ$JJ���� -+52654ᙤ'32654.#32654.�::EDXf�%&�yW�%&& !%6?28@%"!&<3F�#+ & ȃ .-%)0m32"'.'&6=�01cAC����/� )7Uq&/&6767>'.'.?>'&676&2#".4>;2>&+".54632+"&46372+"3�& & p& & ?& & e& & Q<V'D(b b!./!b ua<VV=` `$/!�= = G= = �Y= = G= = �U<'C& .A- �UwU $!-����2"&4$"264�響��ʎ�ʎܨ쨨�{�Ȍ��J�u%"/"/&?'&?62762�������������������k� %57'53%7'����'�:���ܢ��"6UU7x'���p�x7UU6x���159=%"/&4?#"&=46;'&4?632#".546;2'5#75#75#m 8� �8 {{�� �}}}}}-8 8{{m��*vv�vv�uu�����159=232+"/&4?32+".54>353535�8� �8{{���~~~~~T8 7{{u��+uu�vv�uu���#37;?4?62762"/"/&4?'#"&546;2'5#75#75#�EEDDEEDD.��"}}}}} EE DE EE ED����*vv�vv�uu'����2+"&54637#�\#�#[$�����##-#��������%#3#52733#52654/3� �.�*�%�!\9vL((Nx��8(( ݑ����U�*:T`lx�!2#!"&546"&3!26=4.#%!2#!"&546"#"3!2654.#"#6&"2?664/&"64/&"$&"2?6� �%RO!$ �%l �� s (:�<% r8 8��8 868 8��8 8� �� H $��k �* � # ��6"9K 8 7D 87�g 8 8S 8 8Q����3"3#7267654&'Ӻ Y � Z� �� ��//Q9H2#".4>;2>&+".54632+"&46372+"374>;2+"&�<V'D(b b!./!b u a<VV=` `!./!# ��QU<'C& .A- � UwU .A-O ����^7537775377�II,n�I�I�&���\�\\\IH�''�H�IFmm�>�[�e[[[@ �`7'577ɉ7S�7�!�3S�3��6���75!6��PP����%)-17>54&#"#&6323#4>#573#%!5!!5!* $# %. V�.0%�}��|: (4%��UU�T�TT��� 7'72,�����W� I�+���;gV�G���7�)1I!"&5463!24.##!"'"3!265&"&462#&#!"#.6?>7>�� # �u *�*d(( �� E ,D+( ��q � ��))�$$��^%Z����#5367632#>?67654&#"�b�='8Ib #X$ &&-^^F\&FD*6* (1��SOn!74.">32O��N HfZ7) /4K(8d>. _��J) --2.8( �����/37;"/+"&="/&4?62#!"&=4>3!2#3'#3'#3�8 8{{u��*vv�uu�vv68� �8{{��� }}}}}������-159$"/&4?62546;27627#!"&=463!25##5##5#�{{8 7t��*v'u'v]{{8� �8���}}}}}}���#59=A6"/&4?'&4?62762"/#!"&=4>3!2#3'#3'#3� EE EE EE EED��*vv�uu�uu� DE EE ED EE.�� !}}}}}���� $0<$&5462# &54632#7&=4632#"'&&54632#''7'7�* �z��������̎--� �w�����������1�!2#!"&546"3!2654&# �%%�&&>%%�%%�&�i&&�&$%��&&O%����/S%!"=4;&'&54>323273#.#"3232>54'&'3#".#"#53�c(+<"', #!4>!#*F���C%(�,N. 3@ �7&2/" �&9!# 7!!!'A$ ���e�1#567>74#"'6323%#532?'&+5373#";#dm03��_}b_uabu _b~o (��0��0��0��0 ���nR %/8CNXb%#654'32'&'762?"&463275462&"'&462"&46;#"'&47"&=27#"/61,, m ��E�.�ƍ�cN?�"� v ,7 "� �� ��?Nc��ƍ.��, ,e �� C, ,d ��e�1#567>74#"'632#'#532?'&+5373#"3dm0u~__~ b^ubbu_b;" (��0��0��0��0�� ����#'+;'35#75#35#75#35#75#535335335%�$�$�����������������$�$�(�1$j$kk�j$kk�j$kk�llllll����^� &%3'3#7#&+;#53265#"#5!#EVVEARQ@�&4'"�%)#%�(BB(BB#��$$,+||����)53!532653!32>54&"2654&"&"2654V���q�F�E1 pY# $�##�>}��@�� ��������(,#".=45#"32>=4#53!5!�+N01O*$� 3$'7@��Q�~�-:6 1:(�##�.5$'92�A##�7#��SMn>32."!*I7=a3)J5.-5[eIM��_E+34* 5)!$# J�����!5!!5!#55353��}��}�LUUVU�UU�T�TT�UU�TT�TT��#\'5%2#!"&=4>3#�v �� T�<`� �� � 4&� �� $ L< � � summernotesummernoteRegularRegularFontForge 2.0 : summernote : 13-2-2018FontForge 2.0 : summernote : 13-2-2018summernotesummernoteVersion 001.000 Version 001.000 summernotesummernote��7 � !""#$%&'()*+,-./0123align-centeralign-indent align-justify align-left align-outdentalign-rightalignarrow-circle-downarrow-circle-leftarrow-circle-rightarrow-circle-up arrows-altarrows-harrows-vboldcaretchain-brokencircleclosecode col-after col-before col-removeeraserfontframeitaliclinkmagic menu-checkorderedlistpencilpictureredo row-above row-below row-removespecial-charactersquare strikethrough subscript summernotesuperscripttabletext-heighttrash underlineundo unorderedlistvideo����֧�y֧�yPKe[�\��D�z#z#"src/icons/dist/font/summernote.eotnu�[���z#�" �LP^߲�summernoteRegular Version 001.000 summernote �PFFTM�>u�"�OS/2A(]�X`cmap��0Bcvt Dtgasp��"�glyf�yk��\headn!t�6hheaG $hmtx���vloca�r�txpmaxp��8 name���ZD�postK�IP ����^_<�֧�y֧�y���nk�n.����k7� @.�LfGLf�� PfEd���4���.� $$$$�0���J��'��Q���@6����Z����������������< �4�����D***Fx����V��Dv���� .��@f�R|�.:��Dr� � � � �Z��p�� .�U.�/<��2��<��2�/<��2��<��233'3#�wffU��3�}!5!5!!!�����V�^�|KK�L�K����!!5!5!%&=46��� �� �xwM�LL�LL�`_��}!5!5!!����|KK�LL�K�}!5!5!!�8|���|LL�KK�K����!!5!5!%6'.'&47>��� �� ��wxM�LL�LL��_` �|!!5!5!/�7L}��|L�KK�KK�p75!%!!!5! /������Q��GG�H��H$����+$4/&"54&+"'&"2?6".4>2�6$6ggM:exe::exe�6��6hhIxe::exe::$����+%54&+764/&"2?64/32>".4>2��6hh6�I:exe::exe�$6gg6Vxe::exe::$����+$4/&"#";2?6".4>2�h6��6hL:exe::exe�g6$6gIxe::exe::$����+$4/&"2?;26=2?6".4>2�gg6$6M:exe::exe�hh6��6Ixe::exe::����7#7'#57'537'3��A�A��A�A�=�>��>�A�A�@~~@�A�=�=��=�d$"&=!"/&4?62!5462J��JJ$J�I $$ II $$ I���\�+32"/&46;#"&4?62[ $$ II $$ IIl��JJ$JJ���� -+52654ᙤ'32654.#32654.�::EDXf�%&�yW�%&& !%6?28@%"!&<3F�#+ & ȃ .-%)0m32"'.'&6=�01cAC����/� )7Uq&/&6767>'.'.?>'&676&2#".4>;2>&+".54632+"&46372+"3�& & p& & ?& & e& & Q<V'D(b b!./!b ua<VV=` `$/!�= = G= = �Y= = G= = �U<'C& .A- �UwU $!-����2"&4$"264�響��ʎ�ʎܨ쨨�{�Ȍ��J�u%"/"/&?'&?62762�������������������k� %57'53%7'����'�:���ܢ��"6UU7x'���p�x7UU6x���159=%"/&4?#"&=46;'&4?632#".546;2'5#75#75#m 8� �8 {{�� �}}}}}-8 8{{m��*vv�vv�uu�����159=232+"/&4?32+".54>353535�8� �8{{���~~~~~T8 7{{u��+uu�vv�uu���#37;?4?62762"/"/&4?'#"&546;2'5#75#75#�EEDDEEDD.��"}}}}} EE DE EE ED����*vv�vv�uu'����2+"&54637#�\#�#[$�����##-#��������%#3#52733#52654/3� �.�*�%�!\9vL((Nx��8(( ݑ����U�*:T`lx�!2#!"&546"&3!26=4.#%!2#!"&546"#"3!2654.#"#6&"2?664/&"64/&"$&"2?6� �%RO!$ �%l �� s (:�<% r8 8��8 868 8��8 8� �� H $��k �* � # ��6"9K 8 7D 87�g 8 8S 8 8Q����3"3#7267654&'Ӻ Y � Z� �� ��//Q9H2#".4>;2>&+".54632+"&46372+"374>;2+"&�<V'D(b b!./!b u a<VV=` `!./!# ��QU<'C& .A- � UwU .A-O ����^7537775377�II,n�I�I�&���\�\\\IH�''�H�IFmm�>�[�e[[[@ �`7'577ɉ7S�7�!�3S�3��6���75!6��PP����%)-17>54&#"#&6323#4>#573#%!5!!5!* $# %. V�.0%�}��|: (4%��UU�T�TT��� 7'72,�����W� I�+���;gV�G���7�)1I!"&5463!24.##!"'"3!265&"&462#&#!"#.6?>7>�� # �u *�*d(( �� E ,D+( ��q � ��))�$$��^%Z����#5367632#>?67654&#"�b�='8Ib #X$ &&-^^F\&FD*6* (1��SOn!74.">32O��N HfZ7) /4K(8d>. _��J) --2.8( �����/37;"/+"&="/&4?62#!"&=4>3!2#3'#3'#3�8 8{{u��*vv�uu�vv68� �8{{��� }}}}}������-159$"/&4?62546;27627#!"&=463!25##5##5#�{{8 7t��*v'u'v]{{8� �8���}}}}}}���#59=A6"/&4?'&4?62762"/#!"&=4>3!2#3'#3'#3� EE EE EE EED��*vv�uu�uu� DE EE ED EE.�� !}}}}}���� $0<$&5462# &54632#7&=4632#"'&&54632#''7'7�* �z��������̎--� �w�����������1�!2#!"&546"3!2654&# �%%�&&>%%�%%�&�i&&�&$%��&&O%����/S%!"=4;&'&54>323273#.#"3232>54'&'3#".#"#53�c(+<"', #!4>!#*F���C%(�,N. 3@ �7&2/" �&9!# 7!!!'A$ ���e�1#567>74#"'6323%#532?'&+5373#";#dm03��_}b_uabu _b~o (��0��0��0��0 ���nR %/8CNXb%#654'32'&'762?"&463275462&"'&462"&46;#"'&47"&=27#"/61,, m ��E�.�ƍ�cN?�"� v ,7 "� �� ��?Nc��ƍ.��, ,e �� C, ,d ��e�1#567>74#"'632#'#532?'&+5373#"3dm0u~__~ b^ubbu_b;" (��0��0��0��0�� ����#'+;'35#75#35#75#35#75#535335335%�$�$�����������������$�$�(�1$j$kk�j$kk�j$kk�llllll����^� &%3'3#7#&+;#53265#"#5!#EVVEARQ@�&4'"�%)#%�(BB(BB#��$$,+||����)53!532653!32>54&"2654&"&"2654V���q�F�E1 pY# $�##�>}��@�� ��������(,#".=45#"32>=4#53!5!�+N01O*$� 3$'7@��Q�~�-:6 1:(�##�.5$'92�A##�7#��SMn>32."!*I7=a3)J5.-5[eIM��_E+34* 5)!$# J�����!5!!5!#55353��}��}�LUUVU�UU�T�TT�UU�TT�TT��#\'5%2#!"&=4>3#�v �� T�<`� �� � 4&� �� $ L< � � summernotesummernoteRegularRegularFontForge 2.0 : summernote : 13-2-2018FontForge 2.0 : summernote : 13-2-2018summernotesummernoteVersion 001.000 Version 001.000 summernotesummernote��7 � !""#$%&'()*+,-./0123align-centeralign-indent align-justify align-left align-outdentalign-rightalignarrow-circle-downarrow-circle-leftarrow-circle-rightarrow-circle-up arrows-altarrows-harrows-vboldcaretchain-brokencircleclosecode col-after col-before col-removeeraserfontframeitaliclinkmagic menu-checkorderedlistpencilpictureredo row-above row-below row-removespecial-charactersquare strikethrough subscript summernotesuperscripttabletext-heighttrash underlineundo unorderedlistvideo����֧�y֧�yPKe[�\�`ƼL=L=#src/icons/dist/font/summernote.woffnu�[���wOFFOTTO=L n�CFF �9�iY'�a�FFTM=0�>u�OS/2LJ`A']�cmap�6B ��head�06n!thhea$ $Fhmtx<�in��maxpD5Pname��Ԝ��Zpost� ��x�c`d``�$���m�2p31����*a�Ā\�4eo x�c`d``��Ϡ����iLY@��PPP5x�c`ab`������Ø�����2H2�0001�r2���������� ���&�� ��?�x����j�0E�;!J�,�����Fv2��9S��3�%������-��\ٯt)������A�{%� < '�a+<�7�·p�G| O�P�4U:�ԑ�������/�)�w���S,U�Z�h�-<:ھilp�#�PS��LG[��3�@�Q�5аL�P���y~;%6���cx�1̻��CmuU��?�Rn�*�L��Ǵ����2L��(�'�Ɇ��6�,�1���;�E�x�c```f�`F���| ��@�G����$��P��lp�m;�x�c`f��$�#+��x��}|U��^I����zP� M �� EzU�rP���R�G@��X8�Oi �A��B���{|�o�����2;;;�;�3{Є���4-h܄#�ǎ5>Yh���DAg������WAe��Z̅�&�^1uV[��1��J�+%����VA�O5dž Մ��^M�VKΉi��"ꊦ��xRt��(1E��b��(��]��b��Y�.Ήt�%n�"Mh�Z���h��x�����Z{J������^������hK�Z��I�Zۍ�hi�<�����*x��$�R�ƍ:�e�cx� ;{Ԅ�eu�<D�Ǝ�b�C���8iԋ�f���3T��9F˟�>ކ��'&��4p�����:�q��QÒG�v���<pT�?��A ���A��ʬ��#FML��%�4j�Ac�HJ�:r؈���<rB�C�56)ylr���Əf�G8~�X�"���@b��Q/P�ǍN8t�p 0v�@1n��;n�ءÒ�;j��!�&$�8v���eB4n�hT���$O����C�ɛ�x�L�X��`Ԅ�娛84)yTyD�B{[{G{W���h30�3�Y�l�}�\m�6_[�}�-�>�>�i�!kK�e�r�'�J�Z[���ֈ�Zm���A���L۬mѶj۴ϵ���%���8�9m�����5���o�> ��+�]hǰ���*�������[c�j��X�f���4�|�����j6�G�z롢V�_�,�po�.]�~�S�'z�vK�}w<�~@�_%�JY�?c��reAӕ^+� �-I�]Y�ʙ?��i���Y�x����~&�Obj��wô�W��hY[3L�:]8U-�����i]�A�Y30��G�%:� &&�*��}��@*|^3,�u �h��C�$��pơ��ku�����1��U���<T��),�(˰�?��k�[V���_�e彋Z��.� �߅�|�~-y�#��<;������F�$�v�J�J���'}���Eț��g���·��?�X�m��g����Q�/~�h�c��"�e�O�E_O� D.<u��ûu��]Vf����K�/@�>��hj$��vE���� fm;�"����:�1G˾B�?�ͩ�$Z�g Y��z~m��@��gQ~Z'�jh��DAQH~�<�� ����/�{yų9���&�^@u�)_2�-q` �� Grf�s�*P��Q�|58�:��~*�3��a��YF�T�^P�~����[}?����ݎ���D��2^7^W�������P�=�!�MAQ�W���`R����R�N˴&��]�]�*���,1@��ڔ�L�����N�"�jGԮ�_��vL�,Z���"�%:Ԇ���s�#�V��q�����]�M'T��$��:ă5��-�dN�L�C��ɘ1>̊����� �4ŝ2Wh,bM�5"��*�Ca����W��w�.|j2MU���PU�V���a'�l���椥xR��jj�JV��w�g�WU�݈�˰�����MM�'��&�*�}y��8vr 8�F��w�)�=&9:��3fE�$iD�b��1v;�+����G%���@:��:�j~��TS[~�1�s: g�����E�=���%jFe��x��cHٝ���&7i�����%�#-G=ҒPNZ�=Ң�¿LVƬ*��4��ė��#-�F�AZds[�n��glqKQ�➀��p��U���ie�OH���sw���t5;�r�,�:��.��rN.�ʻ���y���:e�{�\�ߦ� )j�n�5��@�x�N:�{��ö�ogAy�N�1U靟��A;ʖ_ ��v�i�i�RN��"8���:o%ndsy͍�(K��$9sQ�-?�w\�Mh����-�0+���ޝ� ����swA�o�o��#�(�n���jˋ�Z���u���?��r{G�Z`Oo�gz�o[ ��M���t{z��ڰuW[1�Q�X��U:X��;���?���I� �V�,�s��N���SAb�X�~魞F^�]Z3�+�/�\f�c~c�i�3F�Δ����})�ى7~�?�z�����R�+D�ů���ӂ��I�RkЈ�0�p�1mҗ5A�o�Rtg����fyL�`�\�����r�a�b�[��29�]z���Tr5M+�,KɄ%���WFD���Կ��۱M8�[�έ<�� ���-b��}9"�v��m���_�lH;_^���aє,�+#"�CD��4���&\�X9r�˾Md�-X��Ԓ��%�tB<P��i�]���D���FD��$�$�wrw�{���=�PJY�{���;K���|d�����;�yx��e��Mԯ_Lj�DW����\��"�M����k��Nf�)�cP��e4�Yd�_E�U��W��Z�bPY�Q�j0�??CO��LB:!��D^�u@����0�"�ZV�`!/蘰-i/Vy�8�^������L�>����Y4��yYu�U]}X�[���\p�+38�.t�Y�$��M#/��t�[�@3@�AJЫ%r��*�8@�h��ߣ��ݐ8�Ø�wA�3?C���+�Xg8Ӛ�W��>�]�FyES/����Aѯ��7�!Du���f��+�v�spx���[��C�;�p�wro���&��9�W�X�8�ɱ}b�;(�ۋ��i��u�2J���ɷ��CQ�/�����V�Mnw q<ؒ��<�5t�IV]�L���죯I��p�"z�J���%�/�▤�/גV�&�+T��Cj� /����?�g�#i�u]��z�k���G�(�TW@r�jfR�o�� y7�Q�ϫ:ǔ�dž7�:Gs�D�� ��n�H��8��~��;�T�E�/d�rmB^�'���m��7�/bZ���Γ��9��x'i���dD�x����r���LV�B��,9�<{oG:x��U�8m)�Ϻ������w�^�f���{�W�i�)���z�$��}�:({�]�Z���t ��� X!ZZ� �s��| ~}B^֍�]��7�ۜ�p���%�>�/�Ca���ߧDD��G��ٓM�V��S��uRd!�>t�s܌|��"��/Şӹx��G!c�Da��3暪!H!�C��7#h*)$E� �jAՐH�?���HR��@��l��d(&�!Y� �Q�W7~��'��ϑD7Z��y���ڟ�t�G@<'�ܬqc�N��5�{\MH��l�UN���5��U�sUI-ʁ�n����ϼ6)�5�@Im*&b �=�j�y<-�όyB1C��O>��h�h�Y7в��j�O��e�b��P�K0E��9q���}|� ��x(�����h�\!�`��S1D�0b9r+D�Mh>9��$jz!�[n$��� `��{S}S�{롵�O�??ke��D�-,�i�ߑ�X]�M0��w� �蜺yY���H��K er�=F!�'�|�2D�8b��Q���;1wڅUh�x6�����\������9�mPi5���)��d�XJ�_��a ��i[��`¶��<�;~=mxc�����_��y<�L�� ~�}ҝ��y� P���mLt�u�UՌ�٩J-�}���,�"�D>简�Ҹ�Y�:!�ܕ����e���* 3%˥�g��W�P0'$:t�a�l�gzZ��4�-�| ��ݮ/�b�����'��?�!u���o�O�����E �@���"K�?������������d��7<-�M�'Նk(��+(~�S@�/m�>���;�I��6d{�W@q���7�}�.OGR�P�o��0V�����4���;�G� ��p ����H�\�ϣK������@N�"z�ۯh> ��}z�~���%�MˌÀ�F2a1�za���H�܌����G�r�>u���6j |�r����h�hI�}�6�Ϯػ{���u��ޟqf&ߣ˄z��đC���h�3��^�]��7 hT'�H1��9��jo��C��0ɋ��d�0�|]S1�����;N�糦���>�.�oA+}<{Z4��׳�<h��#i��E'{y.�����8���H&��q�#٠(�A)�=��2�z/��VO��ҜtT�@�����~y�,�:��,��+ǫ�� ��L'�T�T0�9%e�{���0�_��h�a�62m6�ɱ���u/ ���;B^L%�88�UN�פ���f�!�K6�{ <K� ��=����$[n�g��I4;>P� @��oi���;I��y��P��۷F�-�=�2P� �h�v�8��#aݾ��h��^����1��/�t������P���犪�ثU:y4H:�hC/��:��=��{�@��0�ٓ}�cyȫ�,�x�@��N�.��!�� l�J���R���J�_��n�u��FI}�T����ou��-Vz�YZC�[���!!lFs���6-����R�q��C�H�HRg �SKa�ɢ�]:�ϧ�4��]H" &E]{���|��&�sM�>H�|��� {�����k��,�G���H�`��ׅ��2a�����+9eu6=,&U�+$脗��.ۋ�h��MkA�s����/�2��=�M�_Q{C����y��� u�?�Mv�,D7�T�+��Ĩ�>��u�T0i/��ct�a� #�a�K��{�Ļ��?�K�ϒ r*27Uؼv$�M�l�![�@ƈM��&k�ԩ�B�V���+�ھ遦�_�{#��ߐ|w�G��3��2���G�япm�z=���V���qBꆫzt�����Z+6�zn_��>;;H�� 9��#QK�k: K(� M��} �|y�#t �t�ɓ�[g���V����ֆ� �l�2���먃kH���DU��µT��l�S*~� ��e�=N�P�]ik��R���t���Ϋ�c��w�@��K}��Ii؇��J�4�'���s���~N��`I�Ǩ�\AK��BK�ͥ��; �h�L�WpIn���V�R�B�c�.�m�R8djx0�݂)�ڟm*����^�t�D�N����J}:7$����=���d�������ݘ��Ӄ�pc"%Hܔ IS4��T���B��'|:]UcV�%'�(ar'LzJ)�S�-����ĝK�aK:����T� [���5l��21�M�,wc:zGL�L�ّ�����ƫyE�c�a�R��t�t>J�xs�7D|��}q3�/� i�0&����~������\��"���n����P�+�`��Yn�;�����o<W�[�q�i]y�U���_����1. ;�R�`u� �S?dn��ڐ��͈8�zHn����q��H*��W��w�@�l�u<�ŭv-���f��9�k��~�{a��8��I`��H.����8b�ܡ[�_/�|r� ���].j.2c,�=��[�9�����������g�I�'��d��&��נ� �5�Ɉ�}-�g|I���A�^�+>@�� ��`'o�B��Y\�ʽ$�����%��!���4��2-��Z��r7�� �W�G�0l&�+�,;�UOu5R�y�aN;E���Tbʽ^{� �s��o*���]"�'��P�ȫ�0oJ�W^<�i�ӌ��i���N���[+�P��\}��~y���uy��Ӊ���'�5�B�%��y�EZ4��п�:�]h���\� �T*�Tu��~��jU �F�}�n�)gb+C�j���?��#�4�y����q<��n���3�P^bDX��hw���XT<��~o6�����RZ>���a �N���bm=�.�0�z�����^�Q�zw����k�f2�E"�].�K;9�Ve�z�H%�ki��,R dS ��\COMcU����óYl2�P�N�I�� x�D�'y�<�!�V8�N�Ձ`s�c�X�����]� ����S�K�Q��}Em) �EL�Ö5n"�_X�����:�6|�,���:�cX�~���-��<�ȝg���LΪC��� ��m"�P˼^Ðu����s����ںFp����K��?N�!� �7�$���#س\�҈oz��9Ő�@���������-�&���1}�$�W픦�)sU�5y+�����T,�mRC��3�u�2.��2-��Xij��!ʣ�4�Oб�J���QB��D�:Sք�<�DI�4o�6&�Ub�R�m�;�H|�Z��T5A���ކƼR�i�:��@3sN���� ��L��(��d�N�l��W �`Ԕ�n�i[��[��j#k��r�YM�g�t��w1�u�Tɞx�� =2-�d*f��͍��t7�o�6�3���fzƬ��#��0fQn��;���-^�M�}��I���4l9ۢ���[.�}U���czF���(��.0w�%�K�r�L���{��n�"�IZ�c�ӵ�mv��h�����|�c\�nigJ�A` ��Q+`QM�w�,��?yř:�C��o%7�L��c�ϻy�����J$�V�@�.4���F$�WP����t��5�P�\^��cs��t�ݤ��L1:���#��s�>wǼX�$w�H��σ$�6��v{P��הs�l_*�w��q~�QXd1���Ϩ�qd1�Ɓm���̒_E ��_$~�н��q�H���nH�#7Q���$� ђ~�@��y�Ňv�;��Y"~��'o��h1~w;a��_Dx�"�?�E��/�(��#��ԥ��u��rS�E�_DHo���|"1�����u5�dv_e�3����dBc����=.�r����>@�]��J2 q�4L�*K&��"��8���&1j<�G���q���8��h�U}-��gցN�'Ga���u�ι�ޫhQ����ɼ4�S��Xd헔�Z�\�:�D�/x�]u(�U��t���su�����Eh�Z��P��C�Up;���47�@ڬ?�'襯@C��G�{�%�X]�FV���@:�W�F7Y��0Qke[��8�L�R����E��A*}h#���y¤���k$�y����<������D���N'{c��>==T)p� Wؒ��§8��rQk����a@͍2�r ���`5��������Ѓ�KВ�\��zr�zн���/�QSM�̹m�Gg}E�{m�9R+����UA��?��+�����)�gg��*,-�"����3���N���ԬoLK1�kGm����{��rL�N� �y�9��69����a�}�;���� ��@�͵����!q�.A�Alss2��}zCU.땕 �fJ}#��� ���Xe�<�-"�5r�H����`��b^������<d���E�oi ����E �Qa8��l:FF��H���|��X��^� g#>t��~��E>��*�v�6 ���a�j� ��VS�a�K�g�&�����T�d���XԌ��'z#��e�� Pv��:�e"���G� E{�5��ү�+������m�4Z>YI\��e9��� �r��� ŁP%� �{փ��a���.�2z�Pz�3^]d0#�]Ο��G���7.�Hpƈ}��6t��*'��'�"���Y�=�����j�q�H����/�֪;y�G�6:������EZ�w�����ח�ďE��lT}�2��I(r�Cɰ��\[+��2 )r?�\���]*�[��k�4U.QO����(�FO�y,�M���[d�0����J*����w�jLe��f�Op��� ��X��b����k���ҷ��x#�N}��ε�>�kfTG�S<�GBf�8%6�m�������6�P@/��~�@:H�#�Ѯ�#��f;!<]�D�%~a���C�q�݆ �כ��U9[:U-��x ���ԽܖBԯ��E����Б�7[��H-���C� �oJ���]Uf�2��Z��X�>�g�J�!o�����rc����NȬ�yy�����(h�3���[ɖ�Uh w�c�k�W�@�>�^��s���� 4�z������ʮ��y���J(��k+~�\Ck�K��Z3�W��?�św��^_�W�%pϟ�_PG�9��9[)�z� ��JI���ÑT�n��D�p-FZ?#���/ �g��(���m�����t��X�a�a��?����`�?_OSܷN�&+Ͼ���Ѻ8@��~OB�E/�%�m&=~��d���;x��^�}�.�`��ߍ��v�;/���Zw�P�8�lg�O(vD�܁�Ð|�Qg�Ut��!R`�l�5��8�hѣ�u�.�8��ű�Y4�o��դ����[a�}}�qއ�5��WFQs�� �o�I��,����T��M�E4��cG���6I�^=��n��� �h����"�S��� ��s����ѣӔG�v���ۭG�����)W���I��۫'�܂N��_�ҹ��w�>9#����b��{�r� �U'�v�}�I��*?ȥ�w�|p�y��.@��I�[:�J�b*_��i-=z�}�,����$}�4tc�{彛�rr�G���,#6aB�`�^�f�u�C��-�k�?�j�O�\ݛ(�Uz��E�� m��V�)�qǻ���-�/��:��}� vS� �!W�����*;�(���Sl�Jl���@m���T�v^�m��>���F�E�Z�s<�\:ަ�!�Pڅ���x픢�rB;�Q������o]"����^9�O�]��5G��.�(w��;�*�c���i�G%D��Ř��{W����q6��=�)}ŀ����nj�y��e�]��y ^9��JiJd��n����eOP"G77=�D%�>JLQ�!v[Tkk(Q��ۤ)�:.P"�2f�ҏ�P�RYd�@@"�R�!M)��RCP@�j�aLHuC���0Բr�a� jYp/+��e����T(���<nx�'72d���B� Y����V��|3L-v�{�t�v{�,��s�9 �dȂ��J�kwJ���=z�^��H/U��rP�W��[% �)���Q��"�L�pxr[0�P)~��T�O�fIWYі T��(|U�Gn)_z���ڜ�o=�y��fѦ�=Qj}𧺰�$��x��D܊�C9��cݚU%��5}�i�$�H���t��8?X�~0<l�~�W���\Q��2�|�e�w ����}��s���ۼ{87��7��N�����I�R���o��7͍)��'b��7�lKϴO熷���ٞq�ٖ���t��=�6&g9L�L o�t�~I }��]��Is��r�թƇ��ўpw���&���5ʃ)͍��XgU�Ɋx۳-=�E[��)H����3.=��+��'܆)=�)LG=���Q�H��g��gv��k=P{̐+�O�SԟM��DT�ܗ�}�<T��Ag����N*�Sn�arC�� ����`�Nr/�M(��%���68�� �|?؆��f������T�q�!��vm�����ˆR�;�����zP�{�=Rm���1�P ��1�l��tv��!�63��'��u`��V���w�~vTZ�Tj�ڂzn5���Tn���{�y��3��q�e��$ڸ=�0�?P�+�I�OX��A{�t����L��h\�&U9�S�� ��%��9LȄ^x�u�W���PV��~�(:Ɨ����Q]��h�E���h���,����M�2m@��OUX���it�q��sBn�zP��y�Q1�*O�yCI��5��%�mx`;#�xl-�9hΫ襔-�c�pͺLjB�\�X�iY˱V��j�5� w��#��c��kB�]-]��Z�f{�Z̛s9ּ�=ּ �XsD�c͞�k���7gv�{���ƺCʫ��:��b�q9VI'r�؏�(7���s�S|6T��ʼnu~�[��7 �� iD�8,�> ��ʐ��4��X�,{�q���q��|W�(g�g9�l����r�ΫP`T�JWB{ɍ頳�Axj�&6'��rq���؝����� $/�gi��%�[PΐO�ų�xC:�1�u��©\�N�t�۫P�ð\�7�)�M��* �#��>�h��G�n�5\��O+1���n|.iJ�Q��(4(���Bk���x�{�Qi�\ޯz����#�-�n���uj�S���r��n+/%*p��9B���l�A�:�"?��e�lp6��O7��=��}���*�<Uw��UQLGw�Ai������*5�Z_O����S^n8�}��V��C3���Be:��G����"��^z�S����z����\C��4�"Q�].�z2f��\}�z�@��*)?> �D/x�yqn� ��X.�O�N�@��"~׳|/6�}�&�Vڀ )�V��H� $��ֵ��[��.�s�勫�M��o� iϫ��G�k�GX� ~K��B�;����Ő�A����fo�mi9?��n��l�y���g,L�XF�x�Y��t�������̽ɗ�>� 7W~�i�/O}�5W��=f]9�� �2^����6h7HʄЈz� � ^ �/B�\@wv����^��)x��֡}��T o�C�ȋ؈oy@�?�x�(�|{*��(Qod*~�~o��W�kB�E�AE���/� �CR�q��@�����6PM~3i �?��9>��і�F���!\^���ӂ�����i��KIyE4X�}���1����pj�>�fA�,�G�%�0��i}�E,J5:1n�fOW�hs]�s��ٮ5T�����[��3Nʧg"��#sy�5۴�\^e�ʧ�g��_�J��Q%7z���.�؝��Cx�'O���%���7\7H/c]Y(��ؕ���ŗ���R�� ~���y��N�R*绅���\K��2S8#�a��ZT�q�\+�ԋ�+\�/=z~�K]���4�7�gDŽ�f C�}��I��$��g>C�*���M������h�B�O8�=�B��"�S�+�����Y�;c(~�H -J��Y��b�)��^D�/c��O�2 #ڇ"?�U��[_"���q�V�L�V�lR� 9�E�BmPP��ޢ�#\�*��<&Q ���":y�u ����;�އ��}�%��W�8��1��䰋>,�ɰ���t�iظ����K(��Q&����Dx�G��e�}���|�ɜ2�s�T@��>N�2}��l�I�B�@k��\�j⤩�o��<�r<�+�zkq�t$5�eC�ji�ԁKl�^�1\(騎�3R�8�Y}!��JX$�:ӆ*��P�a�f�2��{ngN�\�|��̀�)X$#����X� Ґ)L�FQ�U.�O'�i\�y�M��㓨��~�����E?>�����no������n��t���߉�|� ���1�P,�/��hzs�Q�/��-�Xri]��aQ�U��ܵR�r��� �1٦���Y»q�p%��凙�*Q� �E�s�I�]��&pf?n4�w�V(�m �Ϻ��ʿj�Q��Iϥč��b�G悤� �"�Zs���?;�06�b*�E�+�N&�l�C�F�� A8����x13�.K�YY<1����e��O�h���MF�_�e<*�c_�S��Ȫ�U��F�j�������:$|�B�ڗ���L��ɪ��2�)d�ʅ|pEeu�0E�6V~�l���C�Z������j2��� �c4�O�4�;w��9M�� ^�l>:l��7_Q|�ܖ���o��Vpx�1#�~E�C��t�5���0¼ 21�L�0/�Ե���M?�3n�m8#M��$B�[J��D�~�)B�f���N�r'���/�/� i�pᦡ+�a��Γ�9�Ji\W�~$�8h�L�F۪�r�K�ޢh6z��E ��);a�� �� �4 Ӈ���~�B���!ה���Lj�����I��\�}�k�Q�˜7?� �!��[ז��*x�Y�z=��������*�O=&c����Ќ=G�*p����5�����mK:�%<�t��y���D~൦2�!1g�89o*�!|��*���>ƥ�{�������f$�~��~���5u�O0��t�)b�A[,��e�&9|~����=�I���K,���L5uP;�e����[ƫ%2�@e=�V[�E ֑=2���f�@�Vv�ȄyjQ�O�4��e�;�4r�s����bDHV{.R|��S��!��?�@<90��[O�%g$L�iH\"j���TӬ��b�RD�[�'?� �&.�n��Q�܅�U�<�y"�oYjF ������p6z�~��a��W=��Be.�QW�6wBny8}�7;ó���r���(*�@��d�����mv�m���q~D�p��X9�f'L�fgz6;���Ȏ�gxjz�:���}y+s~#6n&m���U~�5��ւ��� �^�w�h�M��3�9��b���y�%�UV�\���P+���1���a���ن���Ue�|mV���0�Ϧ�3 �/%�%b»H�0v�h��]��������%��`���< �Â��Zn3��y��y�Q2�/�_]'Rʂh���4����Z�q���G�d�:�q4�fq[�o�k�Ş�E�YQ�8-�i��촍��-���2��:nv��ൔ-�r��wpDg��Qq曆7�t5m�P�k���:�(kJnm��l�`?��S��ĭ ��#G���{�>6�u�d�L�s+�n�8�~UQ+jö0�S�1���&��c8����P�0�b2o��3���i�}AGc�("�"s�Sx_o?��b��D�ǖ�2CZ��!�Z}��{(������m��|K/��4�(���l�+>� ����ά�]�zlƮKج�{�q�9 ���F�aH�F �U�0O�5IRC�]�6�x*�TӚy��Π$o:}�����o��1b7ԗ�M��AM ������r����4��I�jp/��m2l�kop�^L�oE��!-���)dq>�e`;��K��R��|�q�[�lĆ�ۋ�|e&e1���. �b�G����5~���5rZ���&���[J٩�B.t<�5���� �ן����Ø�\(��N����<�4�3�_�ZD�����<�P��Ю����KNq�IF�aK�5 ���8�y���r�khQ���͇5�b_Դ�3/��M&ԅy1���!��JCS��x+��?�U����͂4� [�է���ci�W�w(�A�Q2�u�~b'�9�[ �<~�&w7;;�C��Ec/�{����9�]��D���Ulq�p�zԌ����AjW�;ufz:�:��������A��i�c�˺u㼩E�ӝ�{�E�݂26�{�I��FpP��xO������+�yӶ���8F�U�։��#�����緤凲G?��7Z��_fd�O`F&~N���`s�,R.�,k���Ghu6�ZN�W�D�os(c�V?�/3��Fr��"Z��ZV4�P��R�Q��:���e�6���}�����kG#dlk#n��8E�(ʸFm�嘂���s���,�����:OB�ye���x���$U��j�$�6���c�85�#��0�R� �v��G��X�* ���<��о� � ���\-������=�5���>�=Z���$��ā;�����=�;����2��ߠ�� �6Vt1iF�>7a��h� �I�w�T. KQ�f�3�K�%����o4U��jy��@ȫȯ4�r��An����bJ�p��S/z�"���QɭT�Ǫ*_,c�{��w�������z�8b/���|�����'�&t0���V��-)ۮn�=5��1Z�t�k#����c�\��F��弅kX��e[����>4U$�����>&*y�N�i;���Ű�y��ӏ��dC��B��U����|�8((��+����]A�sD8��|Kh�e��E��_��`=m�ܾ��Gj=�{f7G��Gg d��4u�6 ֵ)��_��|�Z�#dȩ�lf-�����2,�қ��|�a��H�o I�X]�=D��+e7�(e��B�Zr�|����a���,c�p�d�9�(a��*0)2���lDV� nP-+�2 �cB�ULq. ��q���g��pmpH5��0[�&"D�h&ڊ^�r��F�.�a�9G���WE�:�(:)��� �খ��?OU���� o���鲉-$[���*|=���?�������5~"�&?�Y] M�4��[��t�0\�XS������)���.x�� $$���w5��_�����Eށ�h��Q/!969J�7ŝ2W��5%�rP�'��@B�Ym~�����%|�^"�{e�2�#ZY�Ry�����+�D��Q���O�y�D��a?���n#��G�S\KO]�����g �<�{z�ٱp��$��r l"ÆE,d��eA��5?���1��lW���=��u+�}���0v?y��էtx�t�������� ��x:����`��j-�^ɐ✺�+%r0(��WzϺ�a �+7Rk:���8����0��x�cb```b`�``b�� Ϡ��@�%B��/����*�3��_����`����/3D����?�8������g`��v�����B�$vx�c```d���|�ז���c� PKe[�\#õ���src/icons/col-after.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="3.9521849mm" height="3.9511111mm" viewBox="0 0 14.003805 14" id="svg3446" version="1.1" inkscape:version="0.91 r13725" sodipodi:docname="col-after.svg"> <defs id="defs3448"> <linearGradient id="linearGradient4209" osb:paint="solid"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop4211" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4209" id="linearGradient3671" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.0633074,0,0,0.0633074,2746.9779,180.3852)" x1="252.42857" y1="91.944138" x2="379.79977" y2="91.944138" /> </defs> <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="15.839192" inkscape:cx="-14.589889" inkscape:cy="25.694683" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" inkscape:window-width="1854" inkscape:window-height="1057" inkscape:window-x="1424" inkscape:window-y="-8" inkscape:window-maximized="1" /> <metadata id="metadata3451"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> <g inkscape:label="Camada 1" inkscape:groupmode="layer" id="layer1" transform="translate(728.278,112.5011)"> <g transform="matrix(0,1,-1,0,-531.8777,-2872.4914)" id="g3610-6"> <path style="stroke:url(#linearGradient3671);stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" inkscape:connector-curvature="0" d="m 2771.022,186.4283 q 0,0.264 -0.1915,0.4658 l -0.3882,0.3882 q -0.1966,0.1965 -0.4709,0.1965 -0.2795,0 -0.4658,-0.1965 l -1.5217,-1.5164 0,3.6436 q 0,0.2691 -0.194,0.4372 -0.1941,0.1683 -0.4684,0.1683 l -0.6625,0 q -0.2743,0 -0.4684,-0.1683 -0.1941,-0.1681 -0.1941,-0.4372 l 0,-3.6436 -1.5216,1.5164 q -0.1863,0.1965 -0.4658,0.1965 -0.2795,0 -0.4658,-0.1965 l -0.3882,-0.3882 q -0.1966,-0.1967 -0.1966,-0.4658 0,-0.2742 0.1966,-0.471 l 3.3693,-3.3692 q 0.1812,-0.1916 0.4658,-0.1916 0.2795,0 0.471,0.1916 l 3.3693,3.3692 q 0.1915,0.2019 0.1915,0.471 z" id="path3400-4-4-5-3" /> <path id="polygon3366-49-8-3-2" d="m 2773.9903,191.0823 c 0,-0.2901 -0.1688,-0.5229 -0.3789,-0.5229 l -13.2422,0 c -0.21,0 -0.3789,0.2328 -0.3789,0.5229 l 0,4.7928 c 0,0.29 0.1689,0.5252 0.3789,0.5252 l 13.2422,0 c 0.2101,0 0.3789,-0.2352 0.3789,-0.5252 l 0,-4.7928 z m -1.1582,0.687 0,3.4211 -3.2168,0 0,-3.4211 3.2168,0 z m -4.2852,0 0,3.4211 -3.2148,0 0,-3.4211 3.2148,0 z m -4.2832,0 0,3.4211 -3.2148,0 0,-3.4211 3.2148,0 z" style="clip-rule:evenodd;fill:#000000;fill-rule:evenodd;image-rendering:optimizeQuality;shape-rendering:geometricPrecision;text-rendering:geometricPrecision" inkscape:connector-curvature="0" /> </g> </g> </svg> PKe[�\ 3�;;src/icons/square.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path id="Rounded_Rectangle_7" data-name="Rounded Rectangle 7" class="cls-1" d="M26.188-17.645H992.877a128,128,0,0,1,128,128V923.107a128.005,128.005,0,0,1-128,128H26.188a128,128,0,0,1-128-128V110.355A128,128,0,0,1,26.188-17.645ZM97.324,53.5H920.236a128,128,0,0,1,128,128v670.47a128,128,0,0,1-128,128H97.324a128,128,0,0,1-128-128V181.5A128,128,0,0,1,97.324,53.5Z"/> </svg> PKe[�\���PPsrc/icons/eraser.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <g> <g> <path fill="#010202" d="M809.47,113.026H383.481c-67.22,0-121.711,53.92-121.711,120.442L79.209,835.674 c0,66.521,54.492,120.442,121.709,120.442h425.986c67.222,0,121.713-53.923,121.713-120.442l182.563-602.206 C931.181,166.946,876.687,113.026,809.47,113.026z M652.267,870.801H185.705l60.855-276.013h466.559L652.267,870.801z"/> </g> </g> </svg> PKe[�\A����src/icons/arrow-circle-up.svgnu�[���<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1412 895q0-27-18-45l-362-362-91-91q-18-18-45-18t-45 18l-91 91-362 362q-18 18-18 45t18 45l91 91q18 18 45 18t45-18l189-189v502q0 26 19 45t45 19h128q26 0 45-19t19-45v-502l189 189q19 19 45 19t45-19l91-91q18-18 18-45zm252 1q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/></svg>PKe[�\ �}�RRsrc/icons/col-before.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg id="svg3446" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" height="3.9511mm" width="3.9522mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 14.003805 14" xmlns:dc="http://purl.org/dc/elements/1.1/"> <metadata id="metadata3451"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" transform="translate(785.53 142.75)"> <g id="g3610-68" transform="matrix(0 -1 1 0 -967.93 2631.2)"> <path id="path3400-4-4-5-65" d="m2771 186.43q0 0.264-0.1915 0.4658l-0.3882 0.3882q-0.1966 0.1965-0.4709 0.1965-0.2795 0-0.4658-0.1965l-1.5217-1.5164v3.6436q0 0.2691-0.194 0.4372-0.1941 0.1683-0.4684 0.1683h-0.6625q-0.2743 0-0.4684-0.1683-0.1941-0.1681-0.1941-0.4372v-3.6436l-1.5216 1.5164q-0.1863 0.1965-0.4658 0.1965t-0.4658-0.1965l-0.3882-0.3882q-0.1966-0.1967-0.1966-0.4658 0-0.2742 0.1966-0.471l3.3693-3.3692q0.1812-0.1916 0.4658-0.1916 0.2795 0 0.471 0.1916l3.3693 3.3692q0.1915 0.2019 0.1915 0.471z" stroke-width="0"/> <path id="polygon3366-49-8-3-1" style="image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m2774 191.08c0-0.2901-0.1688-0.5229-0.3789-0.5229h-13.242c-0.21 0-0.3789 0.2328-0.3789 0.5229v4.7928c0 0.29 0.1689 0.5252 0.3789 0.5252h13.242c0.2101 0 0.3789-0.2352 0.3789-0.5252v-4.7928zm-1.1582 0.687v3.4211h-3.2168v-3.4211h3.2168zm-4.2852 0v3.4211h-3.2148v-3.4211h3.2148zm-4.2832 0v3.4211h-3.2148v-3.4211h3.2148z" fill-rule="evenodd" clip-rule="evenodd"/> </g> </g> </svg> PKe[�\.ȏ�JJsrc/icons/align-right.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M93.209,136.000 L93.209,287.842 L1007.000,287.842 L1007.000,136.000 L93.209,136.000 ZM245.234,588.421 L1007.000,588.421 L1007.000,438.180 L245.234,438.180 L245.234,588.421 ZM18.001,889.000 L1007.000,889.000 L1007.000,738.711 L18.001,738.711 L18.001,889.000 Z" class="cls-1"/> </svg> PKe[�\!�src/icons/superscript.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M1224.352,265.601 L1122.923,265.601 C1168.606,227.355 1218.535,181.521 1218.535,121.817 C1218.535,62.634 1176.234,24.388 1110.769,24.388 C1075.107,24.388 1039.232,34.898 1009.019,58.298 L1032.528,117.612 C1052.060,103.187 1072.238,90.538 1097.337,90.538 C1124.347,90.538 1139.223,103.722 1139.223,127.594 C1138.704,167.588 1091.468,206.535 1006.603,283.581 L1006.603,333.098 L1224.352,333.098 L1224.352,265.601 ZM888.208,880.169 L888.208,976.165 L636.887,976.165 L446.450,678.379 L256.003,976.165 L4.691,976.165 L4.691,880.169 L59.527,880.169 C92.722,880.169 123.464,863.980 140.462,837.540 L336.646,532.418 L147.213,255.492 C129.927,230.222 99.907,214.911 67.646,214.911 L16.340,214.911 L16.340,118.919 L250.445,118.919 L446.450,403.552 L642.454,118.919 L876.550,118.919 L876.550,214.911 L825.253,214.911 C792.987,214.911 762.963,230.222 745.686,255.492 L556.253,532.422 L752.432,837.544 C769.426,863.980 800.172,880.173 833.363,880.173 L888.208,880.173 L888.208,880.169 Z" class="cls-1"/> </svg> PKe[�\��VV#src/icons/templates/summernote.jsonnu�[���{ "baseClass": "", "classPrefix": "note-icon-", "mixinPrefix": "note-icon-" } PKe[�\�I�~� � "src/icons/templates/summernote.cssnu�[���/* Generated by grunt-webfont */ /* Based on https://github.com/endtwist/fontcustom/blob/master/lib/fontcustom/templates/fontcustom.css */ <% if (fontfaceStyles) { %> <% if (fontSrc1 && embed.length) { %> @font-face { font-family:"<%= fontBaseName %>"; src:<%= fontSrc1 %>; font-weight:normal; font-style:normal; } <% } %>@font-face { font-family:"<%= fontBaseName %>";<% if (fontSrc1) { %> src:<%= fontSrc1 %>;<% }%> src:<%= fontSrc2 %>; font-weight:normal; font-style:normal; } <% } %> <% if (baseStyles) { %> /* Bootstrap Overrides */ [class^="<%= classPrefix %>"]:before, [class*=" <%= classPrefix %>"]:before<% if (ie7) {%>, [class^="<%= classPrefix %>"], [class*=" <%= classPrefix %>"]<% } %><% if (addLigatures) { %>, .ligature-icons<% } %> { display:inline-block; vertical-align:middle; font: normal normal normal 14px <%= fontBaseName %>; font-size: inherit; speak:none; text-decoration:inherit; text-transform:none; text-rendering:auto; -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale; }<% } %> <% if (iconsStyles && stylesheet === 'less') { %> /* Mixins */ <% for (var glyphIdx = 0; glyphIdx < glyphs.length; glyphIdx++) { %> .<%= classPrefix %><%= glyphs[glyphIdx] %><% if(glyphIdx === glyphs.length-1) { %> { <% } else { %>, <% } } %> &:before { font-family:"<%= fontBaseName %>"; display:inline-block; font-weight:normal; font-style:normal; text-decoration:inherit; } }<% } %> <% if (extraStyles) { %> a [class^="<%= classPrefix %>"], a [class*=" <%= classPrefix %>"] { display:inline-block; text-decoration:inherit; } /* Makes the font 33% larger relative to the icon container */ .<%= classPrefix %>large:before { vertical-align:top; font-size:1.333em; } /* Keeps button heights with and without icons the same */ .btn [class^="<%= classPrefix %>"], .btn [class*=" <%= classPrefix %>"] { line-height:0.9em; } li [class^="<%= classPrefix %>"], li [class*=" <%= classPrefix %>"] { display:inline-block; width:1.25em; text-align:center; } /* 1.5 increased font size for <%= classPrefix %>large * 1.25 width */ li .<%= classPrefix %>large[class^="<%= classPrefix %>"], li .<%= classPrefix %>large[class*=" <%= classPrefix %>"] { width:1.875em; } li[class^="<%= classPrefix %>"], li[class*=" <%= classPrefix %>"] { margin-left:0; list-style-type:none; } li[class^="<%= classPrefix %>"]:before, li[class*=" <%= classPrefix %>"]:before { text-indent:-2em; text-align:center; } li[class^="<%= classPrefix %>"].<%= classPrefix %>large:before, li[class*=" <%= classPrefix %>"].<%= classPrefix %>large:before { text-indent:-1.333em; } <% } %> <% if (iconsStyles) { %>/* Icons */<% for (var glyphIdx = 0; glyphIdx < glyphs.length; glyphIdx++) { %> <% if (stylesheet === 'less') { %> .<%= classPrefix %><%= glyphs[glyphIdx] %> { &:before { content:"<% if (addLigatures) { %><%= glyphs[glyphIdx] %><% } else { %>\<%= codepoints[glyphIdx] %><% } %>"; } <% if (ie7) {%> *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x<%= codepoints[glyphIdx] %>;'); <% } %> }<% } else { %> <% if (ie7) {%>.<%= classPrefix %><%= glyphs[glyphIdx] %> { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x<%= codepoints[glyphIdx] %>;'); } <% } %> .<%= classPrefix %><%= glyphs[glyphIdx] %>:before { content:"<% if (addLigatures) { %><%= glyphs[glyphIdx] %><% } else { %>\<%= codepoints[glyphIdx] %><% } %>"; }<% } %> <% } } %> PKe[�\9�i��src/icons/caret.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path d="M122.674,347.863c23.249,0,401.35,0,416.049,0c23.247,0,29.402,23.246,23.247,37.945 c-8.547,14.704-190.075,256.057-204.776,279.303c-8.545,14.701-37.948,14.701-46.494,0C296,641.865,114.127,409.057,105.924,385.808 C93.274,368.714,101.821,347.863,122.674,347.863z"/> </svg> PKe[�\ ��VVsrc/icons/orderedlist.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path d="M83.072,779.246c31.653-22.206,76.371-43.774,76.371-87.973c0-34.427-22.838-55.464-54.488-55.464 c-43.655,0-57.678,44.624-57.678,82.661h-70.74c-2.552-82.131,44.609-145.454,131.813-145.454c66.493,0,124.7,42.183,124.7,112.624 c0,109.011-116.733,117.828-169.523,191.672h171.647V940H-31.75C-31.75,856.275,20.191,821.854,83.072,779.246z M87.426,192.544 H-3.921v-55.037c51.303,1.488,98.146-16.468,106.43-71.504h58.738v359.862H87.426V192.544z M1050.921,90.351H289.056v170.108 h761.865V90.351L1050.921,90.351z M289.781,428.395v168.558h761.97V428.395H289.781z M289.056,933.649h761.865V765.3H289.056 V933.649z"/> </svg> PKe[�\�;R0��src/icons/underline.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill: #000; fill-rule: evenodd; } </style> </defs> <path d="M908.526,146.582 C888.706,156.816 875.010,171.009 867.419,189.175 C859.828,207.341 856.035,232.713 856.035,265.284 L856.035,549.047 C856.035,610.022 852.133,659.822 844.334,698.446 C836.531,737.077 818.089,774.240 788.998,809.946 C759.903,845.651 719.429,874.367 667.570,896.077 C615.711,917.783 558.158,928.648 494.914,928.648 C428.718,928.648 369.376,917.893 316.885,896.388 C264.394,874.886 224.231,847.742 196.405,814.955 C168.579,782.175 149.702,746.473 139.800,707.842 C129.892,669.218 124.938,623.384 124.938,570.343 L124.938,235.218 C124.938,195.125 117.984,167.780 104.071,153.158 C90.153,138.544 59.799,131.235 12.997,131.235 L12.997,61.702 L465.824,61.702 L465.824,131.235 L451.278,131.235 C408.686,131.235 381.077,138.965 368.428,154.410 C355.779,169.867 349.453,196.799 349.453,235.218 L349.453,570.343 C349.453,631.319 354.515,679.338 364.635,714.418 C374.750,749.498 396.886,779.359 431.039,803.995 C465.192,828.639 506.081,840.953 553.732,840.953 C605.591,840.953 649.958,827.796 686.861,801.487 C723.745,775.177 747.670,743.134 758.639,705.333 C769.599,667.544 775.085,614.819 775.085,547.168 L775.085,261.527 C775.085,174.671 732.709,131.235 647.962,131.235 L647.962,61.702 L965.447,61.702 L965.447,131.235 C947.312,131.235 928.341,136.351 908.526,146.582 ZM932.995,1046.691 L70.468,1046.691 L70.468,975.619 L932.995,975.619 L932.995,1046.691 Z" class="cls-1"/> </svg> PKe[�\<\�$$src/icons/frame.svgnu�[���<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024"> <defs> <style> .cls-1 { fill-rule: evenodd; } </style> </defs> <path id="Rounded_Rectangle_8" data-name="Rounded Rectangle 8" class="cls-1" d="M33.324,124.705H984.236a64,64,0,0,1,64,64V843.319a64,64,0,0,1-64,64H33.324a64,64,0,0,1-64-64V188.705A64,64,0,0,1,33.324,124.705Zm137.33,70.961H840.366c74.689,0,137.484-11.46,137.484,62.519V751.656c0,73.975-62.8,87.175-137.484,87.175H170.654c-74.688,0-130.737-13.2-130.737-87.175V258.185C39.917,184.206,95.966,195.666,170.654,195.666ZM-110.419-17.645H1129.55a64,64,0,0,1,64,64V985.6a64,64,0,0,1-64,64H-110.419a64,64,0,0,1-64-64V46.355A64,64,0,0,1-110.419-17.645ZM93.432,52.331h833.1c98.331,0,193.791-6.99,193.791,90.4V803.587c0,157.53-39.24,176.35-193.791,176.35H93.432c-150.047,0-196.033-27.731-196.033-176.35V142.735C-102.6,45.341-4.9,52.331,93.432,52.331Zm1049.3-27.716a35.4,35.4,0,0,1,0,50.4l-112.18,111.1a36.214,36.214,0,0,1-50.874,0,35.385,35.385,0,0,1,0-50.394l112.164-111.1A36.234,36.234,0,0,1,1142.73,24.616ZM40.88,190.263a35.4,35.4,0,0,0,0-50.4L-71.288,28.766a36.224,36.224,0,0,0-50.882,0,35.4,35.4,0,0,0,0,50.4L-10,190.263A36.226,36.226,0,0,0,40.88,190.263ZM1142.73,1007.65a35.4,35.4,0,0,0,0-50.4l-112.18-111.1a36.214,36.214,0,0,0-50.874,0,35.39,35.39,0,0,0,0,50.4l112.164,111.1A36.228,36.228,0,0,0,1142.73,1007.65ZM40.88,842.005a35.4,35.4,0,0,1,0,50.4L-71.288,1003.5a36.218,36.218,0,0,1-50.882,0,35.392,35.392,0,0,1,0-50.392L-10,842.005A36.226,36.226,0,0,1,40.88,842.005Z"/> </svg> PKe[�\�|__src/icons/row-remove.svgnu�[���<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg id="svg3446" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" height="3.9496mm" width="3.9511mm" version="1.1" xmlns:cc="http://creativecommons.org/ns#" viewBox="0 0 14 13.99474" xmlns:dc="http://purl.org/dc/elements/1.1/"> <metadata id="metadata3451"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" transform="translate(764.76 127.54)"> <g id="g3692-9" transform="translate(-3524.7 -309.95)"> <path id="path5085-1-5" d="m2764.7 190q-0.2558 0-0.4348-0.17906l-0.8698-0.86975q-0.1791-0.17906-0.1791-0.43487t0.1791-0.43487l1.8802-1.8802-1.8802-1.8802q-0.1791-0.17906-0.1791-0.43487t0.1791-0.43487l0.8698-0.86975q0.179-0.17906 0.4348-0.17906t0.4349 0.17906l1.8802 1.8802 1.8802-1.8802q0.179-0.17906 0.4348-0.17906t0.4349 0.17906l0.8698 0.86975q0.179 0.17906 0.179 0.43487t-0.179 0.43487l-1.8802 1.8802 1.8802 1.8802q0.179 0.17906 0.179 0.43487t-0.179 0.43487l-0.8698 0.86975q-0.1791 0.17906-0.4349 0.17906t-0.4348-0.17906l-1.8802-1.8802-1.8802 1.8802q-0.1791 0.17906-0.4349 0.17906z"/> <path id="polygon3366-49-8-3-4" style="image-rendering:optimizeQuality;shape-rendering:geometricPrecision" d="m2774 191.08c0-0.2901-0.1688-0.5229-0.3789-0.5229h-13.242c-0.21 0-0.3789 0.2328-0.3789 0.5229v4.7928c0 0.29 0.1689 0.5252 0.3789 0.5252h13.242c0.2101 0 0.3789-0.2352 0.3789-0.5252v-4.7928zm-1.1582 0.687v3.4211h-3.2168v-3.4211h3.2168zm-4.2852 0v3.4211h-3.2148v-3.4211h3.2148zm-4.2832 0v3.4211h-3.2148v-3.4211h3.2148z" fill-rule="evenodd" clip-rule="evenodd"/> </g> </g> </svg> PKe[�\6�GGsrc/icons/unorderedlist.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path d="M1032.671,90.351H270.806v170.108h761.865V90.351L1032.671,90.351z M271.531,428.395v168.558h761.97V428.395H271.531z M270.806,933.649h761.865V765.3H270.806V933.649z M160.712,90.351H-9.5v170.108h170.212V90.351L160.712,90.351z M-8.982,596.951 h170.314V428.395H-8.982V596.951z M-9.397,933.649h170.212V765.3H-9.397V933.649L-9.397,933.649z"/> </svg> PKe[�\;:��src/icons/align.svgnu�[���<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1024px" height="1024px" viewBox="0 0 1024 1024" enable-background="new 0 0 1024 1024" xml:space="preserve"> <path d="M63.979,588.966V445.989h606.016v142.977H63.979z M64.008,160.015h770.99v143.971H64.008V160.015z M925.011,873.015H64.008 V729.98h861.003V873.015z"/> </svg> PKe[�\"z^=` ` src/js/base/editing/Typing.jsnu�[���import $ from 'jquery'; import dom from '../core/dom'; import range from '../core/range'; import Bullet from '../editing/Bullet'; /** * @class editing.Typing * * Typing * */ export default class Typing { constructor() { // a Bullet instance to toggle lists off this.bullet = new Bullet(); } /** * insert tab * * @param {WrappedRange} rng * @param {Number} tabsize */ insertTab(rng, tabsize) { const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); rng = rng.deleteContents(); rng.insertNode(tab, true); rng = range.create(tab, tabsize); rng.select(); } /** * insert paragraph */ insertParagraph(editable) { let rng = range.create(editable); // deleteContents on range. rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph rng = rng.wrapBodyInlineWithPara(); // finding paragraph const splitRoot = dom.ancestor(rng.sc, dom.isPara); let nextPara; // on paragraph: split paragraph if (splitRoot) { // if it is an empty line with li if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { // toogle UL/OL and escape this.bullet.toggleList(splitRoot.parentNode.nodeName); return; // if it is an empty line with para on blockquote } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { // escape blockquote dom.insertAfter(splitRoot, splitRoot.parentNode); nextPara = splitRoot; // if new line has content (not a line break) } else { nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); $.each(emptyAnchors, (idx, anchor) => { dom.remove(anchor); }); // replace empty heading, pre or custom-made styleTag with P tag if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) { nextPara = dom.replace(nextPara, 'p'); } } // no paragraph: insert empty paragraph } else { const next = rng.sc.childNodes[rng.so]; nextPara = $(dom.emptyPara)[0]; if (next) { rng.sc.insertBefore(nextPara, next); } else { rng.sc.appendChild(nextPara); } } range.create(nextPara, 0).normalize().select().scrollIntoView(editable); } } PKe[�\� xPLPLsrc/js/base/editing/Table.jsnu�[���import $ from 'jquery'; import dom from '../core/dom'; import range from '../core/range'; import lists from '../core/lists'; /** * @class Create a virtual table to create what actions to do in change. * @param {object} startPoint Cell selected to apply change. * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction * @param {object} domTable Dom element of table to make changes. */ const TableResultAction = function(startPoint, where, action, domTable) { const _startPoint = { 'colPos': 0, 'rowPos': 0 }; const _virtualTable = []; const _actionCellList = []; /// /////////////////////////////////////////// // Private functions /// /////////////////////////////////////////// /** * Set the startPoint of action. */ function setStartPoint() { if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) { console.error('Impossible to identify start Cell point.', startPoint); return; } _startPoint.colPos = startPoint.cellIndex; if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') { console.error('Impossible to identify start Row point.', startPoint); return; } _startPoint.rowPos = startPoint.parentElement.rowIndex; } /** * Define virtual table position info object. * * @param {int} rowIndex Index position in line of virtual table. * @param {int} cellIndex Index position in column of virtual table. * @param {object} baseRow Row affected by this position. * @param {object} baseCell Cell affected by this position. * @param {bool} isSpan Inform if it is an span cell/row. */ function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) { const objPosition = { 'baseRow': baseRow, 'baseCell': baseCell, 'isRowSpan': isRowSpan, 'isColSpan': isColSpan, 'isVirtual': isVirtualCell }; if (!_virtualTable[rowIndex]) { _virtualTable[rowIndex] = []; } _virtualTable[rowIndex][cellIndex] = objPosition; } /** * Create action cell object. * * @param {object} virtualTableCellObj Object of specific position on virtual table. * @param {enum} resultAction Action to be applied in that item. */ function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) { return { 'baseCell': virtualTableCellObj.baseCell, 'action': resultAction, 'virtualTable': { 'rowIndex': virtualRowPosition, 'cellIndex': virtualColPosition } }; } /** * Recover free index of row to append Cell. * * @param {int} rowIndex Index of row to find free space. * @param {int} cellIndex Index of cell to find free space in table. */ function recoverCellIndex(rowIndex, cellIndex) { if (!_virtualTable[rowIndex]) { return cellIndex; } if (!_virtualTable[rowIndex][cellIndex]) { return cellIndex; } let newCellIndex = cellIndex; while (_virtualTable[rowIndex][newCellIndex]) { newCellIndex++; if (!_virtualTable[rowIndex][newCellIndex]) { return newCellIndex; } } } /** * Recover info about row and cell and add information to virtual table. * * @param {object} row Row to recover information. * @param {object} cell Cell to recover information. */ function addCellInfoToVirtual(row, cell) { const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex); const cellHasColspan = (cell.colSpan > 1); const cellHasRowspan = (cell.rowSpan > 1); const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos); setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table. const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0; if (rowspanNumber > 1) { for (let rp = 1; rp < rowspanNumber; rp++) { const rowspanIndex = row.rowIndex + rp; adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell); setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true); } } // Add span cols to virtual table. const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0; if (colspanNumber > 1) { for (let cp = 1; cp < colspanNumber; cp++) { const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp)); adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell); setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true); } } } /** * Process validation and adjust of start point if needed * * @param {int} rowIndex * @param {int} cellIndex * @param {object} cell * @param {bool} isSelectedCell */ function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) { if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) { _startPoint.colPos++; } } /** * Create virtual table of cells with all cells, including span cells. */ function createVirtualTable() { const rows = domTable.rows; for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) { const cells = rows[rowIndex].cells; for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) { addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]); } } } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getDeleteResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; case TableResultAction.where.Row: if (!cell.isVirtual && cell.isRowSpan) { return TableResultAction.resultAction.AddCell; } else if (cell.isRowSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; } return TableResultAction.resultAction.RemoveCell; } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getAddResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isRowSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; case TableResultAction.where.Row: if (cell.isRowSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isColSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; } return TableResultAction.resultAction.AddCell; } function init() { setStartPoint(); createVirtualTable(); } /// /////////////////////////////////////////// // Public functions /// /////////////////////////////////////////// /** * Recover array os what to do in table. */ this.getActionList = function() { const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1; const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1; let actualPosition = 0; let canContinue = true; while (canContinue) { const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition; const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition; const row = _virtualTable[rowPosition]; if (!row) { canContinue = false; return _actionCellList; } const cell = row[colPosition]; if (!cell) { canContinue = false; return _actionCellList; } // Define action to be applied in this cell let resultAction = TableResultAction.resultAction.Ignore; switch (action) { case TableResultAction.requestAction.Add: resultAction = getAddResultActionToCell(cell); break; case TableResultAction.requestAction.Delete: resultAction = getDeleteResultActionToCell(cell); break; } _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition)); actualPosition++; } return _actionCellList; }; init(); }; /** * * Where action occours enum. */ TableResultAction.where = { 'Row': 0, 'Column': 1 }; /** * * Requested action to apply enum. */ TableResultAction.requestAction = { 'Add': 0, 'Delete': 1 }; /** * * Result action to be executed enum. */ TableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 }; /** * * @class editing.Table * * Table * */ export default class Table { /** * handle tab key * * @param {WrappedRange} rng * @param {Boolean} isShift */ tab(rng, isShift) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const table = dom.ancestor(cell, dom.isTable); const cells = dom.listDescendant(table, dom.isCell); const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell); if (nextCell) { range.create(nextCell, 0).select(); } } /** * Add a new row * * @param {WrappedRange} rng * @param {String} position (top/bottom) * @return {Node} */ addRow(rng, position) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const currentTr = $(cell).closest('tr'); const trAttributes = this.recoverAttributes(currentTr); const html = $('<tr' + trAttributes + '></tr>'); const vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]); const actions = vTable.getActionList(); for (let idCell = 0; idCell < actions.length; idCell++) { const currentCell = actions[idCell]; const tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: html.append('<td' + tdAttributes + '>' + dom.blank + '</td>'); break; case TableResultAction.resultAction.SumSpanCount: if (position === 'top') { const baseCellTr = currentCell.baseCell.parent; const isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex; if (isTopFromRowSpan) { const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html(); html.append(newTd); break; } } let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10); rowspanNumber++; currentCell.baseCell.setAttribute('rowSpan', rowspanNumber); break; } } if (position === 'top') { currentTr.before(html); } else { const cellHasRowspan = (cell.rowSpan > 1); if (cellHasRowspan) { const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2); $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html)); return; } currentTr.after(html); } } /** * Add a new col * * @param {WrappedRange} rng * @param {String} position (left/right) * @return {Node} */ addCol(rng, position) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const row = $(cell).closest('tr'); const rowsGroup = $(row).siblings(); rowsGroup.push(row); const vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, $(row).closest('table')[0]); const actions = vTable.getActionList(); for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) { const currentCell = actions[actionIndex]; const tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: if (position === 'right') { $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>'); } else { $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; case TableResultAction.resultAction.SumSpanCount: if (position === 'right') { let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10); colspanNumber++; currentCell.baseCell.setAttribute('colSpan', colspanNumber); } else { $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; } } } /* * Copy attributes from element. * * @param {object} Element to recover attributes. * @return {string} Copied string elements. */ recoverAttributes(el) { let resultStr = ''; if (!el) { return resultStr; } const attrList = el.attributes || []; for (let i = 0; i < attrList.length; i++) { if (attrList[i].name.toLowerCase() === 'id') { continue; } if (attrList[i].specified) { resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\''; } } return resultStr; } /** * Delete current row * * @param {WrappedRange} rng * @return {Node} */ deleteRow(rng) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const row = $(cell).closest('tr'); const cellPos = row.children('td, th').index($(cell)); const rowPos = row[0].rowIndex; const vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, $(row).closest('table')[0]); const actions = vTable.getActionList(); for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } const baseCell = actions[actionIndex].baseCell; const virtualPosition = actions[actionIndex].virtualTable; const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1); let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0; switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.AddCell: const nextRow = row.next('tr')[0]; if (!nextRow) { continue; } const cloneRow = row[0].cells[cellPos]; if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber); nextRow.cells[cellPos].innerHTML = ''; } else if (rowspanNumber === 2) { nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].removeAttribute('rowSpan'); nextRow.cells[cellPos].innerHTML = ''; } } continue; case TableResultAction.resultAction.SubtractSpanCount: if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; baseCell.setAttribute('rowSpan', rowspanNumber); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (rowspanNumber === 2) { baseCell.removeAttribute('rowSpan'); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: // Do not need remove cell because row will be deleted. continue; } } row.remove(); } /** * Delete current col * * @param {WrappedRange} rng * @return {Node} */ deleteCol(rng) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const row = $(cell).closest('tr'); const cellPos = row.children('td, th').index($(cell)); const vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, $(row).closest('table')[0]); const actions = vTable.getActionList(); for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.SubtractSpanCount: const baseCell = actions[actionIndex].baseCell; const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1); if (hasColspan) { let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0; if (colspanNumber > 2) { colspanNumber--; baseCell.setAttribute('colSpan', colspanNumber); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (colspanNumber === 2) { baseCell.removeAttribute('colSpan'); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: dom.remove(actions[actionIndex].baseCell, true); continue; } } } /** * create empty table element * * @param {Number} rowCount * @param {Number} colCount * @return {Node} */ createTable(colCount, rowCount, options) { const tds = []; let tdHTML; for (let idxCol = 0; idxCol < colCount; idxCol++) { tds.push('<td>' + dom.blank + '</td>'); } tdHTML = tds.join(''); const trs = []; let trHTML; for (let idxRow = 0; idxRow < rowCount; idxRow++) { trs.push('<tr>' + tdHTML + '</tr>'); } trHTML = trs.join(''); const $table = $('<table>' + trHTML + '</table>'); if (options && options.tableClassName) { $table.addClass(options.tableClassName); } return $table[0]; } /** * Delete current table * * @param {WrappedRange} rng * @return {Node} */ deleteTable(rng) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); $(cell).closest('table').remove(); } } PKe[�\�z빼�src/js/base/editing/Bullet.jsnu�[���import $ from 'jquery'; import lists from '../core/lists'; import func from '../core/func'; import dom from '../core/dom'; import range from '../core/range'; export default class Bullet { /** * toggle ordered list */ insertOrderedList(editable) { this.toggleList('OL', editable); } /** * toggle unordered list */ insertUnorderedList(editable) { this.toggleList('UL', editable); } /** * indent */ indent(editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); const paras = rng.nodes(dom.isPara, { includeAncestor: true }); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $.each(clustereds, (idx, paras) => { const head = lists.head(paras); if (dom.isLi(head)) { this.wrapList(paras, head.parentNode.nodeName); } else { $.each(paras, (idx, para) => { $(para).css('marginLeft', (idx, val) => { return (parseInt(val, 10) || 0) + 25; }); }); } }); rng.select(); } /** * outdent */ outdent(editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); const paras = rng.nodes(dom.isPara, { includeAncestor: true }); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $.each(clustereds, (idx, paras) => { const head = lists.head(paras); if (dom.isLi(head)) { this.releaseList([paras]); } else { $.each(paras, (idx, para) => { $(para).css('marginLeft', (idx, val) => { val = (parseInt(val, 10) || 0); return val > 25 ? val - 25 : ''; }); }); } }); rng.select(); } /** * toggle list * * @param {String} listName - OL or UL */ toggleList(listName, editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); let paras = rng.nodes(dom.isPara, { includeAncestor: true }); const bookmark = rng.paraBookmark(paras); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list if (lists.find(paras, dom.isPurePara)) { let wrappedParas = []; $.each(clustereds, (idx, paras) => { wrappedParas = wrappedParas.concat(this.wrapList(paras, listName)); }); paras = wrappedParas; // list to paragraph or change list style } else { const diffLists = rng.nodes(dom.isList, { includeAncestor: true }).filter((listNode) => { return !$.nodeName(listNode, listName); }); if (diffLists.length) { $.each(diffLists, (idx, listNode) => { dom.replace(listNode, listName); }); } else { paras = this.releaseList(clustereds, true); } } range.createFromParaBookmark(bookmark, paras).select(); } /** * @param {Node[]} paras * @param {String} listName * @return {Node[]} */ wrapList(paras, listName) { const head = lists.head(paras); const last = lists.last(paras); const prevList = dom.isList(head.previousSibling) && head.previousSibling; const nextList = dom.isList(last.nextSibling) && last.nextSibling; const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI paras = paras.map((para) => { return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; }); // append to list(<ul>, <ol>) dom.appendChildNodes(listNode, paras); if (nextList) { dom.appendChildNodes(listNode, lists.from(nextList.childNodes)); dom.remove(nextList); } return paras; } /** * @method releaseList * * @param {Array[]} clustereds * @param {Boolean} isEscapseToBody * @return {Node[]} */ releaseList(clustereds, isEscapseToBody) { let releasedParas = []; $.each(clustereds, (idx, paras) => { const head = lists.head(paras); const last = lists.last(paras); const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode; const lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, { node: last.parentNode, offset: dom.position(last) + 1 }, { isSkipPaddingBlankHTML: true }) : null; const middleList = dom.splitTree(headList, { node: head.parentNode, offset: dom.position(head) }, { isSkipPaddingBlankHTML: true }); paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P if (isEscapseToBody || !dom.isList(headList.parentNode)) { paras = paras.map((para) => { return dom.replace(para, 'P'); }); } $.each(lists.from(paras).reverse(), (idx, para) => { dom.insertAfter(para, headList); }); // remove empty lists const rootLists = lists.compact([headList, middleList, lastList]); $.each(rootLists, (idx, rootList) => { const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); $.each(listNodes.reverse(), (idx, listNode) => { if (!dom.nodeLength(listNode)) { dom.remove(listNode, true); } }); }); releasedParas = releasedParas.concat(paras); }); return releasedParas; } } PKe[�\?����src/js/base/editing/Style.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; export default class Style { /** * @method jQueryCSS * * [workaround] for old jQuery * passing an array of style properties to .css() * will result in an object of property-value pairs. * (compability with version < 1.9) * * @private * @param {jQuery} $obj * @param {Array} propertyNames - An array of one or more CSS properties. * @return {Object} */ jQueryCSS($obj, propertyNames) { if (env.jqueryVersion < 1.9) { const result = {}; $.each(propertyNames, (idx, propertyName) => { result[propertyName] = $obj.css(propertyName); }); return result; } return $obj.css(propertyNames); } /** * returns style object from node * * @param {jQuery} $node * @return {Object} */ fromNode($node) { const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; const styleInfo = this.jQueryCSS($node, properties) || {}; styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); return styleInfo; } /** * paragraph level style * * @param {WrappedRange} rng * @param {Object} styleInfo */ stylePara(rng, styleInfo) { $.each(rng.nodes(dom.isPara, { includeAncestor: true }), (idx, para) => { $(para).css(styleInfo); }); } /** * insert and returns styleNodes on range. * * @param {WrappedRange} rng * @param {Object} [options] - options for styleNodes * @param {String} [options.nodeName] - default: `SPAN` * @param {Boolean} [options.expandClosestSibling] - default: `false` * @param {Boolean} [options.onlyPartialContains] - default: `false` * @return {Node[]} */ styleNodes(rng, options) { rng = rng.splitText(); const nodeName = (options && options.nodeName) || 'SPAN'; const expandClosestSibling = !!(options && options.expandClosestSibling); const onlyPartialContains = !!(options && options.onlyPartialContains); if (rng.isCollapsed()) { return [rng.insertNode(dom.create(nodeName))]; } let pred = dom.makePredByNodeName(nodeName); const nodes = rng.nodes(dom.isText, { fullyContains: true }).map((text) => { return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); }); if (expandClosestSibling) { if (onlyPartialContains) { const nodesInRange = rng.nodes(); // compose with partial contains predication pred = func.and(pred, (node) => { return lists.contains(nodesInRange, node); }); } return nodes.map((node) => { const siblings = dom.withClosestSiblings(node, pred); const head = lists.head(siblings); const tails = lists.tail(siblings); $.each(tails, (idx, elem) => { dom.appendChildNodes(head, elem.childNodes); dom.remove(elem); }); return lists.head(siblings); }); } else { return nodes; } } /** * get current style on cursor * * @param {WrappedRange} rng * @return {Object} - object contains style properties. */ current(rng) { const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc); let styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" try { styleInfo = $.extend(styleInfo, { 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal', 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'] }); } catch (e) {} // list-style-type to list-style(unordered, ordered) if (!rng.isOnList()) { styleInfo['list-style'] = 'none'; } else { const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square']; const isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1; styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered'; } const para = dom.ancestor(rng.sc, dom.isPara); if (para && para.style['line-height']) { styleInfo['line-height'] = para.style.lineHeight; } else { const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); styleInfo['line-height'] = lineHeight.toFixed(1); } styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); styleInfo.range = rng; return styleInfo; } } PKe[�\:ƣ-� � src/js/base/editing/History.jsnu�[���import range from '../core/range'; export default class History { constructor($editable) { this.stack = []; this.stackOffset = -1; this.$editable = $editable; this.editable = $editable[0]; } makeSnapshot() { const rng = range.create(this.editable); const emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}}; return { contents: this.$editable.html(), bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark) }; } applySnapshot(snapshot) { if (snapshot.contents !== null) { this.$editable.html(snapshot.contents); } if (snapshot.bookmark !== null) { range.createFromBookmark(this.editable, snapshot.bookmark).select(); } } /** * @method rewind * Rewinds the history stack back to the first snapshot taken. * Leaves the stack intact, so that "Redo" can still be used. */ rewind() { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } // Return to the first available snapshot. this.stackOffset = 0; // Apply that snapshot. this.applySnapshot(this.stack[this.stackOffset]); } /** * @method reset * Resets the history stack completely; reverting to an empty editor. */ reset() { // Clear the stack. this.stack = []; // Restore stackOffset to its original value. this.stackOffset = -1; // Clear the editable area. this.$editable.html(''); // Record our first snapshot (of nothing). this.recordUndo(); } /** * undo */ undo() { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } if (this.stackOffset > 0) { this.stackOffset--; this.applySnapshot(this.stack[this.stackOffset]); } } /** * redo */ redo() { if (this.stack.length - 1 > this.stackOffset) { this.stackOffset++; this.applySnapshot(this.stack[this.stackOffset]); } } /** * recorded undo */ recordUndo() { this.stackOffset++; // Wash out stack after stackOffset if (this.stack.length > this.stackOffset) { this.stack = this.stack.slice(0, this.stackOffset); } // Create new snapshot and push it to the end this.stack.push(this.makeSnapshot()); } } PKe[�\"�2src/js/base/Context.jsnu�[���import $ from 'jquery'; import func from './core/func'; import lists from './core/lists'; import dom from './core/dom'; export default class Context { /** * @param {jQuery} $note * @param {Object} options */ constructor($note, options) { this.ui = $.summernote.ui; this.$note = $note; this.memos = {}; this.modules = {}; this.layoutInfo = {}; this.options = options; this.initialize(); } /** * create layout and initialize modules and other resources */ initialize() { this.layoutInfo = this.ui.createLayout(this.$note, this.options); this._initialize(); this.$note.hide(); return this; } /** * destroy modules and other resources and remove layout */ destroy() { this._destroy(); this.$note.removeData('summernote'); this.ui.removeLayout(this.$note, this.layoutInfo); } /** * destory modules and other resources and initialize it again */ reset() { const disabled = this.isDisabled(); this.code(dom.emptyPara); this._destroy(); this._initialize(); if (disabled) { this.disable(); } } _initialize() { // add optional buttons const buttons = $.extend({}, this.options.buttons); Object.keys(buttons).forEach((key) => { this.memo('button.' + key, buttons[key]); }); const modules = $.extend({}, this.options.modules, $.summernote.plugins || {}); // add and initialize modules Object.keys(modules).forEach((key) => { this.module(key, modules[key], true); }); Object.keys(this.modules).forEach((key) => { this.initializeModule(key); }); } _destroy() { // destroy modules with reversed order Object.keys(this.modules).reverse().forEach((key) => { this.removeModule(key); }); Object.keys(this.memos).forEach((key) => { this.removeMemo(key); }); // trigger custom onDestroy callback this.triggerEvent('destroy', this); } code(html) { const isActivated = this.invoke('codeview.isActivated'); if (html === undefined) { this.invoke('codeview.sync'); return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html(); } else { if (isActivated) { this.layoutInfo.codable.val(html); } else { this.layoutInfo.editable.html(html); } this.$note.val(html); this.triggerEvent('change', html); } } isDisabled() { return this.layoutInfo.editable.attr('contenteditable') === 'false'; } enable() { this.layoutInfo.editable.attr('contenteditable', true); this.invoke('toolbar.activate', true); this.triggerEvent('disable', false); } disable() { // close codeview if codeview is opend if (this.invoke('codeview.isActivated')) { this.invoke('codeview.deactivate'); } this.layoutInfo.editable.attr('contenteditable', false); this.invoke('toolbar.deactivate', true); this.triggerEvent('disable', true); } triggerEvent() { const namespace = lists.head(arguments); const args = lists.tail(lists.from(arguments)); const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; if (callback) { callback.apply(this.$note[0], args); } this.$note.trigger('summernote.' + namespace, args); } initializeModule(key) { const module = this.modules[key]; module.shouldInitialize = module.shouldInitialize || func.ok; if (!module.shouldInitialize()) { return; } // initialize module if (module.initialize) { module.initialize(); } // attach events if (module.events) { dom.attachEvents(this.$note, module.events); } } module(key, ModuleClass, withoutIntialize) { if (arguments.length === 1) { return this.modules[key]; } this.modules[key] = new ModuleClass(this); if (!withoutIntialize) { this.initializeModule(key); } } removeModule(key) { const module = this.modules[key]; if (module.shouldInitialize()) { if (module.events) { dom.detachEvents(this.$note, module.events); } if (module.destroy) { module.destroy(); } } delete this.modules[key]; } memo(key, obj) { if (arguments.length === 1) { return this.memos[key]; } this.memos[key] = obj; } removeMemo(key) { if (this.memos[key] && this.memos[key].destroy) { this.memos[key].destroy(); } delete this.memos[key]; } /** * Some buttons need to change their visual style immediately once they get pressed */ createInvokeHandlerAndUpdateState(namespace, value) { return (event) => { this.createInvokeHandler(namespace, value)(event); this.invoke('buttons.updateCurrentStyle'); }; } createInvokeHandler(namespace, value) { return (event) => { event.preventDefault(); const $target = $(event.target); this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target); }; } invoke() { const namespace = lists.head(arguments); const args = lists.tail(lists.from(arguments)); const splits = namespace.split('.'); const hasSeparator = splits.length > 1; const moduleName = hasSeparator && lists.head(splits); const methodName = hasSeparator ? lists.last(splits) : lists.head(splits); const module = this.modules[moduleName || 'editor']; if (!moduleName && this[methodName]) { return this[methodName].apply(this, args); } else if (module && module[methodName] && module.shouldInitialize()) { return module[methodName].apply(module, args); } } } PKe[�\$1̝��src/js/base/core/key.jsnu�[���import lists from './lists'; import func from './func'; const KEY_MAP = { 'BACKSPACE': 8, 'TAB': 9, 'ENTER': 13, 'SPACE': 32, 'DELETE': 46, // Arrow 'LEFT': 37, 'UP': 38, 'RIGHT': 39, 'DOWN': 40, // Number: 0-9 'NUM0': 48, 'NUM1': 49, 'NUM2': 50, 'NUM3': 51, 'NUM4': 52, 'NUM5': 53, 'NUM6': 54, 'NUM7': 55, 'NUM8': 56, // Alphabet: a-z 'B': 66, 'E': 69, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'R': 82, 'S': 83, 'U': 85, 'V': 86, 'Y': 89, 'Z': 90, 'SLASH': 191, 'LEFTBRACKET': 219, 'BACKSLASH': 220, 'RIGHTBRACKET': 221 }; /** * @class core.key * * Object for keycodes. * * @singleton * @alternateClassName key */ export default { /** * @method isEdit * * @param {Number} keyCode * @return {Boolean} */ isEdit: (keyCode) => { return lists.contains([ KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE ], keyCode); }, /** * @method isMove * * @param {Number} keyCode * @return {Boolean} */ isMove: (keyCode) => { return lists.contains([ KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN ], keyCode); }, /** * @property {Object} nameFromCode * @property {String} nameFromCode.8 "BACKSPACE" */ nameFromCode: func.invertObject(KEY_MAP), code: KEY_MAP }; PKe[�\�Ç�S�Ssrc/js/base/core/range.jsnu�[���import $ from 'jquery'; import env from './env'; import func from './func'; import lists from './lists'; import dom from './dom'; /** * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js * * @param {TextRange} textRange * @param {Boolean} isStart * @return {BoundaryPoint} * * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx */ function textRangeToPoint(textRange, isStart) { let container = textRange.parentElement(); let offset; const tester = document.body.createTextRange(); let prevContainer; const childNodes = lists.from(container.childNodes); for (offset = 0; offset < childNodes.length; offset++) { if (dom.isText(childNodes[offset])) { continue; } tester.moveToElementText(childNodes[offset]); if (tester.compareEndPoints('StartToStart', textRange) >= 0) { break; } prevContainer = childNodes[offset]; } if (offset !== 0 && dom.isText(childNodes[offset - 1])) { const textRangeStart = document.body.createTextRange(); let curTextNode = null; textRangeStart.moveToElementText(prevContainer || container); textRangeStart.collapse(!prevContainer); curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild; const pointTester = textRange.duplicate(); pointTester.setEndPoint('StartToStart', textRangeStart); let textCount = pointTester.text.replace(/[\r\n]/g, '').length; while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } // [workaround] enforce IE to re-reference curTextNode, hack const dummy = curTextNode.nodeValue; // eslint-disable-line if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } container = curTextNode; offset = textCount; } return { cont: container, offset: offset }; } /** * return TextRange from boundary point (inspired by google closure-library) * @param {BoundaryPoint} point * @return {TextRange} */ function pointToTextRange(point) { const textRangeInfo = function(container, offset) { let node, isCollapseToStart; if (dom.isText(container)) { const prevTextNodes = dom.listPrev(container, func.not(dom.isText)); const prevContainer = lists.last(prevTextNodes).previousSibling; node = prevContainer || container.parentNode; offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength); isCollapseToStart = !prevContainer; } else { node = container.childNodes[offset] || container; if (dom.isText(node)) { return textRangeInfo(node, 0); } offset = 0; isCollapseToStart = false; } return { node: node, collapseToStart: isCollapseToStart, offset: offset }; }; const textRange = document.body.createTextRange(); const info = textRangeInfo(point.node, point.offset); textRange.moveToElementText(info.node); textRange.collapse(info.collapseToStart); textRange.moveStart('character', info.offset); return textRange; } /** * Wrapped Range * * @constructor * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset */ class WrappedRange { constructor(sc, so, ec, eo) { this.sc = sc; this.so = so; this.ec = ec; this.eo = eo; // isOnEditable: judge whether range is on editable or not this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not this.isOnData = this.makeIsOn(dom.isData); } // nativeRange: get nativeRange from sc, so, ec, eo nativeRange() { if (env.isW3CRangeSupport) { const w3cRange = document.createRange(); w3cRange.setStart(this.sc, this.so); w3cRange.setEnd(this.ec, this.eo); return w3cRange; } else { const textRange = pointToTextRange({ node: this.sc, offset: this.so }); textRange.setEndPoint('EndToEnd', pointToTextRange({ node: this.ec, offset: this.eo })); return textRange; } } getPoints() { return { sc: this.sc, so: this.so, ec: this.ec, eo: this.eo }; } getStartPoint() { return { node: this.sc, offset: this.so }; } getEndPoint() { return { node: this.ec, offset: this.eo }; } /** * select update visible range */ select() { const nativeRng = this.nativeRange(); if (env.isW3CRangeSupport) { const selection = document.getSelection(); if (selection.rangeCount > 0) { selection.removeAllRanges(); } selection.addRange(nativeRng); } else { nativeRng.select(); } return this; } /** * Moves the scrollbar to start container(sc) of current range * * @return {WrappedRange} */ scrollIntoView(container) { const height = $(container).height(); if (container.scrollTop + height < this.sc.offsetTop) { container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop); } return this; } /** * @return {WrappedRange} */ normalize() { /** * @param {BoundaryPoint} point * @param {Boolean} isLeftToRight * @return {BoundaryPoint} */ const getVisiblePoint = function(point, isLeftToRight) { if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { return point; } // point on block's edge const block = dom.ancestor(point.node, dom.isBlock); if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { // returns point already on visible point if (dom.isVisiblePoint(point)) { return point; } // reverse direction isLeftToRight = !isLeftToRight; } const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); return nextPoint || point; }; const endPoint = getVisiblePoint(this.getEndPoint(), false); const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); return new WrappedRange( startPoint.node, startPoint.offset, endPoint.node, endPoint.offset ); } /** * returns matched nodes on range * * @param {Function} [pred] - predicate function * @param {Object} [options] * @param {Boolean} [options.includeAncestor] * @param {Boolean} [options.fullyContains] * @return {Node[]} */ nodes(pred, options) { pred = pred || func.ok; const includeAncestor = options && options.includeAncestor; const fullyContains = options && options.fullyContains; // TODO compare points and sort const startPoint = this.getStartPoint(); const endPoint = this.getEndPoint(); const nodes = []; const leftEdgeNodes = []; dom.walkPoint(startPoint, endPoint, function(point) { if (dom.isEditable(point.node)) { return; } let node; if (fullyContains) { if (dom.isLeftEdgePoint(point)) { leftEdgeNodes.push(point.node); } if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) { node = point.node; } } else if (includeAncestor) { node = dom.ancestor(point.node, pred); } else { node = point.node; } if (node && pred(node)) { nodes.push(node); } }, true); return lists.unique(nodes); } /** * returns commonAncestor of range * @return {Element} - commonAncestor */ commonAncestor() { return dom.commonAncestor(this.sc, this.ec); } /** * returns expanded range by pred * * @param {Function} pred - predicate function * @return {WrappedRange} */ expand(pred) { const startAncestor = dom.ancestor(this.sc, pred); const endAncestor = dom.ancestor(this.ec, pred); if (!startAncestor && !endAncestor) { return new WrappedRange(this.sc, this.so, this.ec, this.eo); } const boundaryPoints = this.getPoints(); if (startAncestor) { boundaryPoints.sc = startAncestor; boundaryPoints.so = 0; } if (endAncestor) { boundaryPoints.ec = endAncestor; boundaryPoints.eo = dom.nodeLength(endAncestor); } return new WrappedRange( boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo ); } /** * @param {Boolean} isCollapseToStart * @return {WrappedRange} */ collapse(isCollapseToStart) { if (isCollapseToStart) { return new WrappedRange(this.sc, this.so, this.sc, this.so); } else { return new WrappedRange(this.ec, this.eo, this.ec, this.eo); } } /** * splitText on range */ splitText() { const isSameContainer = this.sc === this.ec; const boundaryPoints = this.getPoints(); if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) { this.ec.splitText(this.eo); } if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) { boundaryPoints.sc = this.sc.splitText(this.so); boundaryPoints.so = 0; if (isSameContainer) { boundaryPoints.ec = boundaryPoints.sc; boundaryPoints.eo = this.eo - this.so; } } return new WrappedRange( boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo ); } /** * delete contents on range * @return {WrappedRange} */ deleteContents() { if (this.isCollapsed()) { return this; } const rng = this.splitText(); const nodes = rng.nodes(null, { fullyContains: true }); // find new cursor point const point = dom.prevPointUntil(rng.getStartPoint(), function(point) { return !lists.contains(nodes, point.node); }); const emptyParents = []; $.each(nodes, function(idx, node) { // find empty parents const parent = node.parentNode; if (point.node !== parent && dom.nodeLength(parent) === 1) { emptyParents.push(parent); } dom.remove(node, false); }); // remove empty parents $.each(emptyParents, function(idx, node) { dom.remove(node, false); }); return new WrappedRange( point.node, point.offset, point.node, point.offset ).normalize(); } /** * makeIsOn: return isOn(pred) function */ makeIsOn(pred) { return function() { const ancestor = dom.ancestor(this.sc, pred); return !!ancestor && (ancestor === dom.ancestor(this.ec, pred)); }; } /** * @param {Function} pred * @return {Boolean} */ isLeftEdgeOf(pred) { if (!dom.isLeftEdgePoint(this.getStartPoint())) { return false; } const node = dom.ancestor(this.sc, pred); return node && dom.isLeftEdgeOf(this.sc, node); } /** * returns whether range was collapsed or not */ isCollapsed() { return this.sc === this.ec && this.so === this.eo; } /** * wrap inline nodes which children of body with paragraph * * @return {WrappedRange} */ wrapBodyInlineWithPara() { if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) { this.sc.innerHTML = dom.emptyPara; return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0); } /** * [workaround] firefox often create range on not visible point. so normalize here. * - firefox: |<p>text</p>| * - chrome: <p>|text|</p> */ const rng = this.normalize(); if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) { return rng; } // find inline top ancestor let topAncestor; if (dom.isInline(rng.sc)) { const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); topAncestor = lists.last(ancestors); if (!dom.isInline(topAncestor)) { topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so]; } } else { topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0]; } // siblings not in paragraph let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph if (inlineSiblings.length) { const para = dom.wrap(lists.head(inlineSiblings), 'p'); dom.appendChildNodes(para, lists.tail(inlineSiblings)); } return this.normalize(); } /** * insert node at current cursor * * @param {Node} node * @return {Node} */ insertNode(node) { const rng = this.wrapBodyInlineWithPara().deleteContents(); const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); if (info.rightNode) { info.rightNode.parentNode.insertBefore(node, info.rightNode); } else { info.container.appendChild(node); } return node; } /** * insert html at current cursor */ pasteHTML(markup) { const contentsContainer = $('<div></div>').html(markup)[0]; const childNodes = lists.from(contentsContainer.childNodes); const rng = this.wrapBodyInlineWithPara().deleteContents(); return childNodes.reverse().map(function(childNode) { return rng.insertNode(childNode); }).reverse(); } /** * returns text in range * * @return {String} */ toString() { const nativeRng = this.nativeRange(); return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text; } /** * returns range for word before cursor * * @param {Boolean} [findAfter] - find after cursor, default: false * @return {WrappedRange} */ getWordRange(findAfter) { let endPoint = this.getEndPoint(); if (!dom.isCharPoint(endPoint)) { return this; } const startPoint = dom.prevPointUntil(endPoint, function(point) { return !dom.isCharPoint(point); }); if (findAfter) { endPoint = dom.nextPointUntil(endPoint, function(point) { return !dom.isCharPoint(point); }); } return new WrappedRange( startPoint.node, startPoint.offset, endPoint.node, endPoint.offset ); } /** * create offsetPath bookmark * * @param {Node} editable */ bookmark(editable) { return { s: { path: dom.makeOffsetPath(editable, this.sc), offset: this.so }, e: { path: dom.makeOffsetPath(editable, this.ec), offset: this.eo } }; } /** * create offsetPath bookmark base on paragraph * * @param {Node[]} paras */ paraBookmark(paras) { return { s: { path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)), offset: this.so }, e: { path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)), offset: this.eo } }; } /** * getClientRects * @return {Rect[]} */ getClientRects() { const nativeRng = this.nativeRange(); return nativeRng.getClientRects(); } } /** * Data structure * * BoundaryPoint: a point of dom tree * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range * * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position */ export default { /** * create Range Object From arguments or Browser Selection * * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset * @return {WrappedRange} */ create: function(sc, so, ec, eo) { if (arguments.length === 4) { return new WrappedRange(sc, so, ec, eo); } else if (arguments.length === 2) { // collapsed ec = sc; eo = so; return new WrappedRange(sc, so, ec, eo); } else { let wrappedRange = this.createFromSelection(); if (!wrappedRange && arguments.length === 1) { wrappedRange = this.createFromNode(arguments[0]); return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); } return wrappedRange; } }, createFromSelection: function() { let sc, so, ec, eo; if (env.isW3CRangeSupport) { const selection = document.getSelection(); if (!selection || selection.rangeCount === 0) { return null; } else if (dom.isBody(selection.anchorNode)) { // Firefox: returns entire body as range on initialization. // We won't never need it. return null; } const nativeRng = selection.getRangeAt(0); sc = nativeRng.startContainer; so = nativeRng.startOffset; ec = nativeRng.endContainer; eo = nativeRng.endOffset; } else { // IE8: TextRange const textRange = document.selection.createRange(); const textRangeEnd = textRange.duplicate(); textRangeEnd.collapse(false); const textRangeStart = textRange; textRangeStart.collapse(true); let startPoint = textRangeToPoint(textRangeStart, true); let endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed. if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) { startPoint = endPoint; } sc = startPoint.cont; so = startPoint.offset; ec = endPoint.cont; eo = endPoint.offset; } return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from node * * @param {Node} node * @return {WrappedRange} */ createFromNode: function(node) { let sc = node; let so = 0; let ec = node; let eo = dom.nodeLength(ec); // browsers can't target a picture or void node if (dom.isVoid(sc)) { so = dom.listPrev(sc).length - 1; sc = sc.parentNode; } if (dom.isBR(ec)) { eo = dom.listPrev(ec).length - 1; ec = ec.parentNode; } else if (dom.isVoid(ec)) { eo = dom.listPrev(ec).length; ec = ec.parentNode; } return this.create(sc, so, ec, eo); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeBefore: function(node) { return this.createFromNode(node).collapse(true); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeAfter: function(node) { return this.createFromNode(node).collapse(); }, /** * @method * * create WrappedRange from bookmark * * @param {Node} editable * @param {Object} bookmark * @return {WrappedRange} */ createFromBookmark: function(editable, bookmark) { const sc = dom.fromOffsetPath(editable, bookmark.s.path); const so = bookmark.s.offset; const ec = dom.fromOffsetPath(editable, bookmark.e.path); const eo = bookmark.e.offset; return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from paraBookmark * * @param {Object} bookmark * @param {Node[]} paras * @return {WrappedRange} */ createFromParaBookmark: function(bookmark, paras) { const so = bookmark.s.offset; const eo = bookmark.e.offset; const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path); const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path); return new WrappedRange(sc, so, ec, eo); } }; PKe[�\�^~�..src/js/base/core/async.jsnu�[���import $ from 'jquery'; /** * @method readFileAsDataURL * * read contents of file as representing URL * * @param {File} file * @return {Promise} - then: dataUrl */ export function readFileAsDataURL(file) { return $.Deferred((deferred) => { $.extend(new FileReader(), { onload: (e) => { const dataURL = e.target.result; deferred.resolve(dataURL); }, onerror: (err) => { deferred.reject(err); } }).readAsDataURL(file); }).promise(); } /** * @method createImage * * create `<image>` from url string * * @param {String} url * @return {Promise} - then: $image */ export function createImage(url) { return $.Deferred((deferred) => { const $img = $('<img>'); $img.one('load', () => { $img.off('error abort'); deferred.resolve($img); }).one('error abort', () => { $img.off('load').detach(); deferred.reject($img); }).css({ display: 'none' }).appendTo(document.body).attr('src', url); }).promise(); } PKe[�\8W�B��src/js/base/core/env.jsnu�[���import $ from 'jquery'; const isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line /** * returns whether font is installed or not. * * @param {String} fontName * @return {Boolean} */ function isFontInstalled(fontName) { const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; const $tester = $('<div>').css({ position: 'absolute', left: '-9999px', top: '-9999px', fontSize: '200px' }).text('mmmmmmmmmwwwwwww').appendTo(document.body); const originalWidth = $tester.css('fontFamily', testFontName).width(); const width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); $tester.remove(); return originalWidth !== width; } const userAgent = navigator.userAgent; const isMSIE = /MSIE|Trident/i.test(userAgent); let browserVersion; if (isMSIE) { let matches = /MSIE (\d+[.]\d+)/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } } const isEdge = /Edge\/\d+/.test(userAgent); let hasCodeMirror = !!window.CodeMirror; if (!hasCodeMirror && isSupportAmd) { // Webpack if (typeof __webpack_require__ === 'function') { // eslint-disable-line try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } } else if (typeof require !== 'undefined') { // Browserify if (typeof require.resolve !== 'undefined') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } // Almond/Require } else if (typeof require.specified !== 'undefined') { hasCodeMirror = require.specified('codemirror'); } } } const isSupportTouch = (('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); // [workaround] IE doesn't have input events for contentEditable // - see: https://goo.gl/4bfIvA const inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input'; /** * @class core.env * * Object which check platform and agent * * @singleton * @alternateClassName env */ export default { isMac: navigator.appVersion.indexOf('Mac') > -1, isMSIE, isEdge, isFF: !isEdge && /firefox/i.test(userAgent), isPhantom: /PhantomJS/i.test(userAgent), isWebkit: !isEdge && /webkit/i.test(userAgent), isChrome: !isEdge && /chrome/i.test(userAgent), isSafari: !isEdge && /safari/i.test(userAgent), browserVersion, jqueryVersion: parseFloat($.fn.jquery), isSupportAmd, isSupportTouch, hasCodeMirror, isFontInstalled, isW3CRangeSupport: !!document.createRange, inputEventName }; PKe[�\ஸ��src/js/base/core/func.jsnu�[���/** * @class core.func * * func utils (for high-order func's arg) * * @singleton * @alternateClassName func */ function eq(itemA) { return function(itemB) { return itemA === itemB; }; } function eq2(itemA, itemB) { return itemA === itemB; } function peq2(propName) { return function(itemA, itemB) { return itemA[propName] === itemB[propName]; }; } function ok() { return true; } function fail() { return false; } function not(f) { return () => { return !f.apply(f, arguments); }; } function and(fA, fB) { return function(item) { return fA(item) && fB(item); }; } function self(a) { return a; } function invoke(obj, method) { return () => { return obj[method].apply(obj, arguments); }; } let idCounter = 0; /** * generate a globally-unique id * * @param {String} [prefix] */ function uniqueId(prefix) { const id = ++idCounter + ''; return prefix ? prefix + id : id; } /** * returns bnd (bounds) from rect * * - IE Compatibility Issue: http://goo.gl/sRLOAo * - Scroll Issue: http://goo.gl/sNjUc * * @param {Rect} rect * @return {Object} bounds * @return {Number} bounds.top * @return {Number} bounds.left * @return {Number} bounds.width * @return {Number} bounds.height */ function rect2bnd(rect) { const $document = $(document); return { top: rect.top + $document.scrollTop(), left: rect.left + $document.scrollLeft(), width: rect.right - rect.left, height: rect.bottom - rect.top }; } /** * returns a copy of the object where the keys have become the values and the values the keys. * @param {Object} obj * @return {Object} */ function invertObject(obj) { const inverted = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { inverted[obj[key]] = key; } } return inverted; } /** * @param {String} namespace * @param {String} [prefix] * @return {String} */ function namespaceToCamel(namespace, prefix) { prefix = prefix || ''; return prefix + namespace.split('.').map(function(name) { return name.substring(0, 1).toUpperCase() + name.substring(1); }).join(''); } /** * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for * N milliseconds. If `immediate` is passed, trigger the function on the * leading edge, instead of the trailing. * @param {Function} func * @param {Number} wait * @param {Boolean} immediate * @return {Function} */ function debounce(func, wait, immediate) { let timeout; return () => { const context = this; const args = arguments; const later = () => { timeout = null; if (!immediate) { func.apply(context, args); } }; const callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } export default { eq, eq2, peq2, ok, fail, self, not, and, invoke, uniqueId, rect2bnd, invertObject, namespaceToCamel, debounce }; PKe[�\���LLsrc/js/base/core/lists.jsnu�[���import $ from 'jquery'; import func from './func'; /** * returns the first item of an array. * * @param {Array} array */ function head(array) { return array[0]; } /** * returns the last item of an array. * * @param {Array} array */ function last(array) { return array[array.length - 1]; } /** * returns everything but the last entry of the array. * * @param {Array} array */ function initial(array) { return array.slice(0, array.length - 1); } /** * returns the rest of the items in an array. * * @param {Array} array */ function tail(array) { return array.slice(1); } /** * returns item of array */ function find(array, pred) { for (let idx = 0, len = array.length; idx < len; idx++) { const item = array[idx]; if (pred(item)) { return item; } } } /** * returns true if all of the values in the array pass the predicate truth test. */ function all(array, pred) { for (let idx = 0, len = array.length; idx < len; idx++) { if (!pred(array[idx])) { return false; } } return true; } /** * returns index of item */ function indexOf(array, item) { return $.inArray(item, array); } /** * returns true if the value is present in the list. */ function contains(array, item) { return indexOf(array, item) !== -1; } /** * get sum from a list * * @param {Array} array - array * @param {Function} fn - iterator */ function sum(array, fn) { fn = fn || func.self; return array.reduce(function(memo, v) { return memo + fn(v); }, 0); } /** * returns a copy of the collection with array type. * @param {Collection} collection - collection eg) node.childNodes, ... */ function from(collection) { const result = []; const length = collection.length; let idx = -1; while (++idx < length) { result[idx] = collection[idx]; } return result; } /** * returns whether list is empty or not */ function isEmpty(array) { return !array || !array.length; } /** * cluster elements by predicate function. * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule * @param {Array[]} */ function clusterBy(array, fn) { if (!array.length) { return []; } const aTail = tail(array); return aTail.reduce(function(memo, v) { const aLast = last(memo); if (fn(last(aLast), v)) { aLast[aLast.length] = v; } else { memo[memo.length] = [v]; } return memo; }, [[head(array)]]); } /** * returns a copy of the array with all false values removed * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule */ function compact(array) { const aResult = []; for (let idx = 0, len = array.length; idx < len; idx++) { if (array[idx]) { aResult.push(array[idx]); } } return aResult; } /** * produces a duplicate-free version of the array * * @param {Array} array */ function unique(array) { const results = []; for (let idx = 0, len = array.length; idx < len; idx++) { if (!contains(results, array[idx])) { results.push(array[idx]); } } return results; } /** * returns next item. * @param {Array} array */ function next(array, item) { const idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx + 1]; } /** * returns prev item. * @param {Array} array */ function prev(array, item) { const idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx - 1]; } /** * @class core.list * * list utils * * @singleton * @alternateClassName list */ export default { head, last, initial, tail, prev, next, find, contains, all, sum, from, isEmpty, clusterBy, compact, unique }; PKe[�\��O�^�^src/js/base/core/dom.jsnu�[���import $ from 'jquery'; import func from './func'; import lists from './lists'; import env from './env'; const NBSP_CHAR = String.fromCharCode(160); const ZERO_WIDTH_NBSP_CHAR = '\ufeff'; /** * @method isEditable * * returns whether node is `note-editable` or not. * * @param {Node} node * @return {Boolean} */ function isEditable(node) { return node && $(node).hasClass('note-editable'); } /** * @method isControlSizing * * returns whether node is `note-control-sizing` or not. * * @param {Node} node * @return {Boolean} */ function isControlSizing(node) { return node && $(node).hasClass('note-control-sizing'); } /** * @method makePredByNodeName * * returns predicate which judge whether nodeName is same * * @param {String} nodeName * @return {Function} */ function makePredByNodeName(nodeName) { nodeName = nodeName.toUpperCase(); return function(node) { return node && node.nodeName.toUpperCase() === nodeName; }; } /** * @method isText * * * * @param {Node} node * @return {Boolean} true if node's type is text(3) */ function isText(node) { return node && node.nodeType === 3; } /** * @method isElement * * * * @param {Node} node * @return {Boolean} true if node's type is element(1) */ function isElement(node) { return node && node.nodeType === 1; } /** * ex) br, col, embed, hr, img, input, ... * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements */ function isVoid(node) { return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase()); } function isPara(node) { if (isEditable(node)) { return false; } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); } function isHeading(node) { return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); } const isPre = makePredByNodeName('PRE'); const isLi = makePredByNodeName('LI'); function isPurePara(node) { return isPara(node) && !isLi(node); } const isTable = makePredByNodeName('TABLE'); const isData = makePredByNodeName('DATA'); function isInline(node) { return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node); } function isList(node) { return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); } const isHr = makePredByNodeName('HR'); function isCell(node) { return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); } const isBlockquote = makePredByNodeName('BLOCKQUOTE'); function isBodyContainer(node) { return isCell(node) || isBlockquote(node) || isEditable(node); } const isAnchor = makePredByNodeName('A'); function isParaInline(node) { return isInline(node) && !!ancestor(node, isPara); } function isBodyInline(node) { return isInline(node) && !ancestor(node, isPara); } const isBody = makePredByNodeName('BODY'); /** * returns whether nodeB is closest sibling of nodeA * * @param {Node} nodeA * @param {Node} nodeB * @return {Boolean} */ function isClosestSibling(nodeA, nodeB) { return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB; } /** * returns array of closest siblings with node * * @param {Node} node * @param {function} [pred] - predicate function * @return {Node[]} */ function withClosestSiblings(node, pred) { pred = pred || func.ok; const siblings = []; if (node.previousSibling && pred(node.previousSibling)) { siblings.push(node.previousSibling); } siblings.push(node); if (node.nextSibling && pred(node.nextSibling)) { siblings.push(node.nextSibling); } return siblings; } /** * blank HTML for cursor position * - [workaround] old IE only works with * - [workaround] IE11 and other browser works with bogus br */ const blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>'; /** * @method nodeLength * * returns #text's text size or element's childNodes size * * @param {Node} node */ function nodeLength(node) { if (isText(node)) { return node.nodeValue.length; } if (node) { return node.childNodes.length; } return 0; } /** * returns whether node is empty or not. * * @param {Node} node * @return {Boolean} */ function isEmpty(node) { const len = nodeLength(node); if (len === 0) { return true; } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { // ex) <p><br></p>, <span><br></span> return true; } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') { // ex) <p></p>, <span></span> return true; } return false; } /** * padding blankHTML if node is empty (for cursor position) */ function paddingBlankHTML(node) { if (!isVoid(node) && !nodeLength(node)) { node.innerHTML = blankHTML; } } /** * find nearest ancestor predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function ancestor(node, pred) { while (node) { if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * find nearest ancestor only single child blood line and predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function singleChildAncestor(node, pred) { node = node.parentNode; while (node) { if (nodeLength(node) !== 1) { break; } if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * returns new array of ancestor nodes (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listAncestor(node, pred) { pred = pred || func.fail; const ancestors = []; ancestor(node, function(el) { if (!isEditable(el)) { ancestors.push(el); } return pred(el); }); return ancestors; } /** * find farthest ancestor predicate hit */ function lastAncestor(node, pred) { const ancestors = listAncestor(node); return lists.last(ancestors.filter(pred)); } /** * returns common ancestor node between two nodes. * * @param {Node} nodeA * @param {Node} nodeB */ function commonAncestor(nodeA, nodeB) { const ancestors = listAncestor(nodeA); for (let n = nodeB; n; n = n.parentNode) { if ($.inArray(n, ancestors) > -1) { return n; } } return null; // difference document area } /** * listing all previous siblings (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listPrev(node, pred) { pred = pred || func.fail; const nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.previousSibling; } return nodes; } /** * listing next siblings (until predicate hit). * * @param {Node} node * @param {Function} [pred] - predicate function */ function listNext(node, pred) { pred = pred || func.fail; const nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.nextSibling; } return nodes; } /** * listing descendant nodes * * @param {Node} node * @param {Function} [pred] - predicate function */ function listDescendant(node, pred) { const descendants = []; pred = pred || func.ok; // start DFS(depth first search) with node (function fnWalk(current) { if (node !== current && pred(current)) { descendants.push(current); } for (let idx = 0, len = current.childNodes.length; idx < len; idx++) { fnWalk(current.childNodes[idx]); } })(node); return descendants; } /** * wrap node with new tag. * * @param {Node} node * @param {Node} tagName of wrapper * @return {Node} - wrapper */ function wrap(node, wrapperName) { const parent = node.parentNode; const wrapper = $('<' + wrapperName + '>')[0]; parent.insertBefore(wrapper, node); wrapper.appendChild(node); return wrapper; } /** * insert node after preceding * * @param {Node} node * @param {Node} preceding - predicate function */ function insertAfter(node, preceding) { const next = preceding.nextSibling; let parent = preceding.parentNode; if (next) { parent.insertBefore(node, next); } else { parent.appendChild(node); } return node; } /** * append elements. * * @param {Node} node * @param {Collection} aChild */ function appendChildNodes(node, aChild) { $.each(aChild, function(idx, child) { node.appendChild(child); }); return node; } /** * returns whether boundaryPoint is left edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isLeftEdgePoint(point) { return point.offset === 0; } /** * returns whether boundaryPoint is right edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isRightEdgePoint(point) { return point.offset === nodeLength(point.node); } /** * returns whether boundaryPoint is edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isEdgePoint(point) { return isLeftEdgePoint(point) || isRightEdgePoint(point); } /** * returns whether node is left edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgeOf(node, ancestor) { while (node && node !== ancestor) { if (position(node) !== 0) { return false; } node = node.parentNode; } return true; } /** * returns whether node is right edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isRightEdgeOf(node, ancestor) { if (!ancestor) { return false; } while (node && node !== ancestor) { if (position(node) !== nodeLength(node.parentNode) - 1) { return false; } node = node.parentNode; } return true; } /** * returns whether point is left edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgePointOf(point, ancestor) { return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); } /** * returns whether point is right edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isRightEdgePointOf(point, ancestor) { return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); } /** * returns offset from parent. * * @param {Node} node */ function position(node) { let offset = 0; while ((node = node.previousSibling)) { offset += 1; } return offset; } function hasChildren(node) { return !!(node && node.childNodes && node.childNodes.length); } /** * returns previous boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function prevPoint(point, isSkipInnerOffset) { let node; let offset; if (point.offset === 0) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node); } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset - 1]; offset = nodeLength(node); } else { node = point.node; offset = isSkipInnerOffset ? 0 : point.offset - 1; } return { node: node, offset: offset }; } /** * returns next boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function nextPoint(point, isSkipInnerOffset) { let node, offset; if (nodeLength(point.node) === point.offset) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node) + 1; } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset]; offset = 0; } else { node = point.node; offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; } return { node: node, offset: offset }; } /** * returns whether pointA and pointB is same or not. * * @param {BoundaryPoint} pointA * @param {BoundaryPoint} pointB * @return {Boolean} */ function isSamePoint(pointA, pointB) { return pointA.node === pointB.node && pointA.offset === pointB.offset; } /** * returns whether point is visible (can set cursor) or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isVisiblePoint(point) { if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) { return true; } const leftNode = point.node.childNodes[point.offset - 1]; const rightNode = point.node.childNodes[point.offset]; if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { return true; } return false; } /** * @method prevPointUtil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function prevPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = prevPoint(point); } return null; } /** * @method nextPointUntil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function nextPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = nextPoint(point); } return null; } /** * returns whether point has character or not. * * @param {Point} point * @return {Boolean} */ function isCharPoint(point) { if (!isText(point.node)) { return false; } const ch = point.node.nodeValue.charAt(point.offset - 1); return ch && (ch !== ' ' && ch !== NBSP_CHAR); } /** * @method walkPoint * * @param {BoundaryPoint} startPoint * @param {BoundaryPoint} endPoint * @param {Function} handler * @param {Boolean} isSkipInnerOffset */ function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) { let point = startPoint; while (point) { handler(point); if (isSamePoint(point, endPoint)) { break; } const isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node; point = nextPoint(point, isSkipOffset); } } /** * @method makeOffsetPath * * return offsetPath(array of offset) from ancestor * * @param {Node} ancestor - ancestor node * @param {Node} node */ function makeOffsetPath(ancestor, node) { const ancestors = listAncestor(node, func.eq(ancestor)); return ancestors.map(position).reverse(); } /** * @method fromOffsetPath * * return element from offsetPath(array of offset) * * @param {Node} ancestor - ancestor node * @param {array} offsets - offsetPath */ function fromOffsetPath(ancestor, offsets) { let current = ancestor; for (let i = 0, len = offsets.length; i < len; i++) { if (current.childNodes.length <= offsets[i]) { current = current.childNodes[current.childNodes.length - 1]; } else { current = current.childNodes[offsets[i]]; } } return current; } /** * @method splitNode * * split element or #text * * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitNode(point, options) { const isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; // edge case if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { if (isLeftEdgePoint(point)) { return point.node; } else if (isRightEdgePoint(point)) { return point.node.nextSibling; } } // split #text if (isText(point.node)) { return point.node.splitText(point.offset); } else { const childNode = point.node.childNodes[point.offset]; const clone = insertAfter(point.node.cloneNode(false), point.node); appendChildNodes(clone, listNext(childNode)); if (!isSkipPaddingBlankHTML) { paddingBlankHTML(point.node); paddingBlankHTML(clone); } return clone; } } /** * @method splitTree * * split tree by point * * @param {Node} root - split root * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitTree(root, point, options) { // ex) [#text, <span>, <p>] const ancestors = listAncestor(point.node, func.eq(root)); if (!ancestors.length) { return null; } else if (ancestors.length === 1) { return splitNode(point, options); } return ancestors.reduce(function(node, parent) { if (node === point.node) { node = splitNode(point, options); } return splitNode({ node: parent, offset: node ? position(node) : nodeLength(parent) }, options); }); } /** * split point * * @param {Point} point * @param {Boolean} isInline * @return {Object} */ function splitPoint(point, isInline) { // find splitRoot, container // - inline: splitRoot is a child of paragraph // - block: splitRoot is a child of bodyContainer const pred = isInline ? isPara : isBodyContainer; const ancestors = listAncestor(point.node, pred); const topAncestor = lists.last(ancestors) || point.node; let splitRoot, container; if (pred(topAncestor)) { splitRoot = ancestors[ancestors.length - 2]; container = topAncestor; } else { splitRoot = topAncestor; container = splitRoot.parentNode; } // if splitRoot is exists, split with splitTree let pivot = splitRoot && splitTree(splitRoot, point, { isSkipPaddingBlankHTML: isInline, isNotSplitEdgePoint: isInline }); // if container is point.node, find pivot with point.offset if (!pivot && container === point.node) { pivot = point.node.childNodes[point.offset]; } return { rightNode: pivot, container: container }; } function create(nodeName) { return document.createElement(nodeName); } function createText(text) { return document.createTextNode(text); } /** * @method remove * * remove node, (isRemoveChild: remove child or not) * * @param {Node} node * @param {Boolean} isRemoveChild */ function remove(node, isRemoveChild) { if (!node || !node.parentNode) { return; } if (node.removeNode) { return node.removeNode(isRemoveChild); } const parent = node.parentNode; if (!isRemoveChild) { const nodes = []; for (let i = 0, len = node.childNodes.length; i < len; i++) { nodes.push(node.childNodes[i]); } for (let i = 0, len = nodes.length; i < len; i++) { parent.insertBefore(nodes[i], node); } } parent.removeChild(node); } /** * @method removeWhile * * @param {Node} node * @param {Function} pred */ function removeWhile(node, pred) { while (node) { if (isEditable(node) || !pred(node)) { break; } const parent = node.parentNode; remove(node); node = parent; } } /** * @method replace * * replace node with provided nodeName * * @param {Node} node * @param {String} nodeName * @return {Node} - new node */ function replace(node, nodeName) { if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { return node; } const newNode = create(nodeName); if (node.style.cssText) { newNode.style.cssText = node.style.cssText; } appendChildNodes(newNode, lists.from(node.childNodes)); insertAfter(newNode, node); remove(node); return newNode; } const isTextarea = makePredByNodeName('TEXTAREA'); /** * @param {jQuery} $node * @param {Boolean} [stripLinebreaks] - default: false */ function value($node, stripLinebreaks) { const val = isTextarea($node[0]) ? $node.val() : $node.html(); if (stripLinebreaks) { return val.replace(/[\n\r]/g, ''); } return val; } /** * @method html * * get the HTML contents of node * * @param {jQuery} $node * @param {Boolean} [isNewlineOnBlock] */ function html($node, isNewlineOnBlock) { let markup = value($node); if (isNewlineOnBlock) { const regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g; markup = markup.replace(regexTag, function(match, endSlash, name) { name = name.toUpperCase(); const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash; const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name); return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : ''); }); markup = $.trim(markup); } return markup; } function posFromPlaceholder(placeholder) { const $placeholder = $(placeholder); const pos = $placeholder.offset(); const height = $placeholder.outerHeight(true); // include margin return { left: pos.left, top: pos.top + height }; } function attachEvents($node, events) { Object.keys(events).forEach(function(key) { $node.on(key, events[key]); }); } function detachEvents($node, events) { Object.keys(events).forEach(function(key) { $node.off(key, events[key]); }); } /** * @method isCustomStyleTag * * assert if a node contains a "note-styletag" class, * which implies that's a custom-made style tag node * * @param {Node} an HTML DOM node */ function isCustomStyleTag(node) { return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); } export default { /** @property {String} NBSP_CHAR */ NBSP_CHAR, /** @property {String} ZERO_WIDTH_NBSP_CHAR */ ZERO_WIDTH_NBSP_CHAR, /** @property {String} blank */ blank: blankHTML, /** @property {String} emptyPara */ emptyPara: `<p>${blankHTML}</p>`, makePredByNodeName, isEditable, isControlSizing, isText, isElement, isVoid, isPara, isPurePara, isHeading, isInline, isBlock: func.not(isInline), isBodyInline, isBody, isParaInline, isPre, isList, isTable, isData, isCell, isBlockquote, isBodyContainer, isAnchor, isDiv: makePredByNodeName('DIV'), isLi, isBR: makePredByNodeName('BR'), isSpan: makePredByNodeName('SPAN'), isB: makePredByNodeName('B'), isU: makePredByNodeName('U'), isS: makePredByNodeName('S'), isI: makePredByNodeName('I'), isImg: makePredByNodeName('IMG'), isTextarea, isEmpty, isEmptyAnchor: func.and(isAnchor, isEmpty), isClosestSibling, withClosestSiblings, nodeLength, isLeftEdgePoint, isRightEdgePoint, isEdgePoint, isLeftEdgeOf, isRightEdgeOf, isLeftEdgePointOf, isRightEdgePointOf, prevPoint, nextPoint, isSamePoint, isVisiblePoint, prevPointUntil, nextPointUntil, isCharPoint, walkPoint, ancestor, singleChildAncestor, listAncestor, lastAncestor, listNext, listPrev, listDescendant, commonAncestor, wrap, insertAfter, appendChildNodes, position, hasChildren, makeOffsetPath, fromOffsetPath, splitTree, splitPoint, create, createText, remove, removeWhile, replace, html, value, posFromPlaceholder, attachEvents, detachEvents, isCustomStyleTag }; PKe[�\����QQsrc/js/base/renderer.jsnu�[���import $ from 'jquery'; class Renderer { constructor(markup, children, options, callback) { this.markup = markup; this.children = children; this.options = options; this.callback = callback; } render($parent) { const $node = $(this.markup); if (this.options && this.options.contents) { $node.html(this.options.contents); } if (this.options && this.options.className) { $node.addClass(this.options.className); } if (this.options && this.options.data) { $.each(this.options.data, (k, v) => { $node.attr('data-' + k, v); }); } if (this.options && this.options.click) { $node.on('click', this.options.click); } if (this.children) { const $container = $node.find('.note-children-container'); this.children.forEach((child) => { child.render($container.length ? $container : $node); }); } if (this.callback) { this.callback($node, this.options); } if (this.options && this.options.callback) { this.options.callback($node); } if ($parent) { $parent.append($node); } return $node; } } export default { create: (markup, callback) => { return () => { const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; let children = $.isArray(arguments[0]) ? arguments[0] : []; if (options && options.children) { children = options.children; } return new Renderer(markup, children, options, callback); }; } }; PKe[�\-�a�� src/js/base/module/Fullscreen.jsnu�[���import $ from 'jquery'; export default class Fullscreen { constructor(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.$window = $(window); this.$scrollbar = $('html, body'); this.onResize = () => { this.resizeTo({ h: this.$window.height() - this.$toolbar.outerHeight() }); }; } resizeTo(size) { this.$editable.css('height', size.h); this.$codable.css('height', size.h); if (this.$codable.data('cmeditor')) { this.$codable.data('cmeditor').setsize(null, size.h); } } /** * toggle fullscreen */ toggle() { this.$editor.toggleClass('fullscreen'); if (this.isFullscreen()) { this.$editable.data('orgHeight', this.$editable.css('height')); this.$window.on('resize', this.onResize).trigger('resize'); this.$scrollbar.css('overflow', 'hidden'); } else { this.$window.off('resize', this.onResize); this.resizeTo({ h: this.$editable.data('orgHeight') }); this.$scrollbar.css('overflow', 'visible'); } this.context.invoke('toolbar.updateFullscreen', this.isFullscreen()); } isFullscreen() { return this.$editor.hasClass('fullscreen'); } } PKe[�\�b����!src/js/base/module/Placeholder.jsnu�[���import $ from 'jquery'; export default class Placeholder { constructor(context) { this.context = context; this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.events = { 'summernote.init summernote.change': () => { this.update(); }, 'summernote.codeview.toggled': () => { this.update(); } }; } shouldInitialize() { return !!this.options.placeholder; } initialize() { this.$placeholder = $('<div class="note-placeholder">'); this.$placeholder.on('click', () => { this.context.invoke('focus'); }).text(this.options.placeholder).prependTo(this.$editingArea); this.update(); } destroy() { this.$placeholder.remove(); } update() { const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty'); this.$placeholder.toggle(isShow); } } PKe[�\�G.�bb"src/js/base/module/TablePopover.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import lists from '../core/lists'; import dom from '../core/dom'; export default class TablePopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.options = context.options; this.events = { 'summernote.mousedown': (we, e) => { this.update(e.target); }, 'summernote.keyup summernote.scroll summernote.change': () => { this.update(); }, 'summernote.disable': () => { this.hide(); } }; } shouldInitialize() { return !lists.isEmpty(this.options.popover.table); } initialize() { this.$popover = this.ui.popover({ className: 'note-table-popover' }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor if (env.isFF) { document.execCommand('enableInlineTableEditing', false, false); } } destroy() { this.$popover.remove(); } update(target) { if (this.context.isDisabled()) { return false; } const isCell = dom.isCell(target); if (isCell) { const pos = dom.posFromPlaceholder(target); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } return isCell; } hide() { this.$popover.hide(); } } PKe[�\�;��!src/js/base/module/ImageDialog.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; export default class ImageDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } initialize() { const $container = this.options.dialogsInBody ? this.$body : this.$editor; let imageLimitation = ''; if (this.options.maximumImageFileSize) { const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)); const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B'; imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`; } const body = [ '<div class="form-group note-form-group note-group-select-from-files">', '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', '<input class="note-image-input note-form-control note-input" ', ' type="file" name="files" accept="image/*" multiple="multiple" />', imageLimitation, '</div>', '<div class="form-group note-group-image-url" style="overflow:auto;">', '<label class="note-form-label">' + this.lang.image.url + '</label>', '<input class="note-image-url form-control note-form-control note-input ', ' col-md-12" type="text" />', '</div>' ].join(''); const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn'; const footer = `<button type="submit" href="#" class="${buttonClass}" disabled>${this.lang.image.insert}</button>`; this.$dialog = this.ui.dialog({ title: this.lang.image.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } bindEnterKey($input, $btn) { $input.on('keypress', (event) => { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); } show() { this.context.invoke('editor.saveRange'); this.showImageDialog().then((data) => { // [workaround] hide dialog before restore range for IE range focus this.ui.hideDialog(this.$dialog); this.context.invoke('editor.restoreRange'); if (typeof data === 'string') { // image url this.context.invoke('editor.insertImage', data); } else { // array of files this.context.invoke('editor.insertImagesOrCallback', data); } }).fail(() => { this.context.invoke('editor.restoreRange'); }); } /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ showImageDialog() { return $.Deferred((deferred) => { const $imageInput = this.$dialog.find('.note-image-input'); const $imageUrl = this.$dialog.find('.note-image-url'); const $imageBtn = this.$dialog.find('.note-image-btn'); this.ui.onDialogShown(this.$dialog, () => { this.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element. $imageInput.replaceWith($imageInput.clone().on('change', (event) => { deferred.resolve(event.target.files || event.target.value); }).val('')); $imageBtn.click((event) => { event.preventDefault(); deferred.resolve($imageUrl.val()); }); $imageUrl.on('keyup paste', () => { const url = $imageUrl.val(); this.ui.toggleBtn($imageBtn, url); }).val(''); if (!env.isSupportTouch) { $imageUrl.trigger('focus'); } this.bindEnterKey($imageUrl, $imageBtn); }); this.ui.onDialogHidden(this.$dialog, () => { $imageInput.off('change'); $imageUrl.off('keyup paste keypress'); $imageBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); this.ui.showDialog(this.$dialog); }); } } PKe[�\9)^~��"src/js/base/module/ImagePopover.jsnu�[���import $ from 'jquery'; import lists from '../core/lists'; import dom from '../core/dom'; /** * Image popover module * mouse events that show/hide popover will be handled by Handle.js. * Handle.js will receive the events and invoke 'imagePopover.update'. */ export default class ImagePopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.editable = context.layoutInfo.editable[0]; this.options = context.options; this.events = { 'summernote.disable': () => { this.hide(); } }; } shouldInitialize() { return !lists.isEmpty(this.options.popover.image); } initialize() { this.$popover = this.ui.popover({ className: 'note-image-popover' }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.image); } destroy() { this.$popover.remove(); } update(target) { if (dom.isImg(target)) { const pos = dom.posFromPlaceholder(target); const posEditor = dom.posFromPlaceholder(this.editable); this.$popover.css({ display: 'block', left: this.options.popatmouse ? event.pageX - 20 : pos.left, top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top) }); } else { this.hide(); } } hide() { this.$popover.hide(); } } PKe[�\W���OO!src/js/base/module/LinkPopover.jsnu�[���import $ from 'jquery'; import lists from '../core/lists'; import dom from '../core/dom'; export default class LinkPopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => { this.update(); }, 'summernote.disable summernote.dialog.shown': () => { this.hide(); } }; } shouldInitialize() { return !lists.isEmpty(this.options.popover.link); } initialize() { this.$popover = this.ui.popover({ className: 'note-link-popover', callback: ($node) => { const $content = $node.find('.popover-content,.note-popover-content'); $content.prepend('<span><a target="_blank"></a> </span>'); } }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.link); } destroy() { this.$popover.remove(); } update() { // Prevent focusing on editable when invoke('code') is executed if (!this.context.invoke('editor.hasFocus')) { this.hide(); return; } const rng = this.context.invoke('editor.createRange'); if (rng.isCollapsed() && rng.isOnAnchor()) { const anchor = dom.ancestor(rng.sc, dom.isAnchor); const href = $(anchor).attr('href'); this.$popover.find('a').attr('href', href).html(href); const pos = dom.posFromPlaceholder(anchor); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } } hide() { this.$popover.hide(); } } PKe[�\�T �`v`vsrc/js/base/module/Buttons.jsnu�[���import $ from 'jquery'; import func from '../core/func'; import lists from '../core/lists'; import env from '../core/env'; export default class Buttons { constructor(context) { this.ui = $.summernote.ui; this.context = context; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.lang = this.options.langInfo; this.invertedKeyMap = func.invertObject( this.options.keyMap[env.isMac ? 'mac' : 'pc'] ); } representShortcut(editorMethod) { let shortcut = this.invertedKeyMap[editorMethod]; if (!this.options.shortcuts || !shortcut) { return ''; } if (env.isMac) { shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); } shortcut = shortcut.replace('BACKSLASH', '\\') .replace('SLASH', '/') .replace('LEFTBRACKET', '[') .replace('RIGHTBRACKET', ']'); return ' (' + shortcut + ')'; } button(o) { if (!this.options.tooltip && o.tooltip) { delete o.tooltip; } o.container = this.options.container; return this.ui.button(o); } initialize() { this.addToolbarButtons(); this.addImagePopoverButtons(); this.addLinkPopoverButtons(); this.addTablePopoverButtons(); this.fontInstalledMap = {}; } destroy() { delete this.fontInstalledMap; } isFontInstalled(name) { if (!this.fontInstalledMap.hasOwnProperty(name)) { this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name); } return this.fontInstalledMap[name]; } isFontDeservedToAdd(name) { const genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy']; name = name.toLowerCase(); return ((name !== '') && this.isFontInstalled(name) && ($.inArray(name, genericFamilies) === -1)); } addToolbarButtons() { this.context.memo('button.style', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents( this.ui.icon(this.options.icons.magic), this.options ), tooltip: this.lang.style.style, data: { toggle: 'dropdown' } }), this.ui.dropdown({ className: 'dropdown-style', items: this.options.styleTags, title: this.lang.style.style, template: (item) => { if (typeof item === 'string') { item = { tag: item, title: (this.lang.style.hasOwnProperty(item) ? this.lang.style[item] : item) }; } const tag = item.tag; const title = item.title; const style = item.style ? ' style="' + item.style + '" ' : ''; const className = item.className ? ' class="' + item.className + '"' : ''; return '<' + tag + style + className + '>' + title + '</' + tag + '>'; }, click: this.context.createInvokeHandler('editor.formatBlock') }) ]).render(); }); for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) { const item = this.options.styleTags[styleIdx]; this.context.memo('button.style.' + item, () => { return this.button({ className: 'note-btn-style-' + item, contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>', tooltip: this.lang.style[item], click: this.context.createInvokeHandler('editor.formatBlock') }).render(); }); } this.context.memo('button.bold', () => { return this.button({ className: 'note-btn-bold', contents: this.ui.icon(this.options.icons.bold), tooltip: this.lang.font.bold + this.representShortcut('bold'), click: this.context.createInvokeHandlerAndUpdateState('editor.bold') }).render(); }); this.context.memo('button.italic', () => { return this.button({ className: 'note-btn-italic', contents: this.ui.icon(this.options.icons.italic), tooltip: this.lang.font.italic + this.representShortcut('italic'), click: this.context.createInvokeHandlerAndUpdateState('editor.italic') }).render(); }); this.context.memo('button.underline', () => { return this.button({ className: 'note-btn-underline', contents: this.ui.icon(this.options.icons.underline), tooltip: this.lang.font.underline + this.representShortcut('underline'), click: this.context.createInvokeHandlerAndUpdateState('editor.underline') }).render(); }); this.context.memo('button.clear', () => { return this.button({ contents: this.ui.icon(this.options.icons.eraser), tooltip: this.lang.font.clear + this.representShortcut('removeFormat'), click: this.context.createInvokeHandler('editor.removeFormat') }).render(); }); this.context.memo('button.strikethrough', () => { return this.button({ className: 'note-btn-strikethrough', contents: this.ui.icon(this.options.icons.strikethrough), tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'), click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough') }).render(); }); this.context.memo('button.superscript', () => { return this.button({ className: 'note-btn-superscript', contents: this.ui.icon(this.options.icons.superscript), tooltip: this.lang.font.superscript, click: this.context.createInvokeHandlerAndUpdateState('editor.superscript') }).render(); }); this.context.memo('button.subscript', () => { return this.button({ className: 'note-btn-subscript', contents: this.ui.icon(this.options.icons.subscript), tooltip: this.lang.font.subscript, click: this.context.createInvokeHandlerAndUpdateState('editor.subscript') }).render(); }); this.context.memo('button.fontname', () => { const styleInfo = this.context.invoke('editor.currentStyle'); // Add 'default' fonts into the fontnames array if not exist $.each(styleInfo['font-family'].split(','), (idx, fontname) => { fontname = fontname.trim().replace(/['"]+/g, ''); if (this.isFontDeservedToAdd(fontname)) { if ($.inArray(fontname, this.options.fontNames) === -1) { this.options.fontNames.push(fontname); } } }); return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents( '<span class="note-current-fontname"/>', this.options ), tooltip: this.lang.font.name, data: { toggle: 'dropdown' } }), this.ui.dropdownCheck({ className: 'dropdown-fontname', checkClassName: this.options.icons.menuCheck, items: this.options.fontNames.filter(this.isFontInstalled.bind(this)), title: this.lang.font.name, template: (item) => { return '<span style="font-family: \'' + item + '\'">' + item + '</span>'; }, click: this.context.createInvokeHandlerAndUpdateState('editor.fontName') }) ]).render(); }); this.context.memo('button.fontsize', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>', this.options), tooltip: this.lang.font.size, data: { toggle: 'dropdown' } }), this.ui.dropdownCheck({ className: 'dropdown-fontsize', checkClassName: this.options.icons.menuCheck, items: this.options.fontSizes, title: this.lang.font.size, click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize') }) ]).render(); }); this.context.memo('button.color', () => { return this.ui.buttonGroup({ className: 'note-color', children: [ this.button({ className: 'note-current-color-button', contents: this.ui.icon(this.options.icons.font + ' note-recent-color'), tooltip: this.lang.color.recent, click: (e) => { const $button = $(e.currentTarget); this.context.invoke('editor.color', { backColor: $button.attr('data-backColor'), foreColor: $button.attr('data-foreColor') }); }, callback: ($button) => { const $recentColor = $button.find('.note-recent-color'); $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } }), this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents('', this.options), tooltip: this.lang.color.more, data: { toggle: 'dropdown' } }), this.ui.dropdown({ items: [ '<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>', '<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>' ].join(''), callback: ($dropdown) => { $dropdown.find('.note-holder').each((idx, item) => { const $holder = $(item); $holder.append(this.ui.palette({ colors: this.options.colors, colorsName: this.options.colorsName, eventName: $holder.data('event'), container: this.options.container, tooltip: this.options.tooltip }).render()); }); }, click: (event) => { const $button = $(event.target); const eventName = $button.data('event'); const value = $button.data('value'); if (eventName && value) { const key = eventName === 'backColor' ? 'background-color' : 'color'; const $color = $button.closest('.note-color').find('.note-recent-color'); const $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); this.context.invoke('editor.' + eventName, value); } } }) ] }).render(); }); this.context.memo('button.ul', () => { return this.button({ contents: this.ui.icon(this.options.icons.unorderedlist), tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'), click: this.context.createInvokeHandler('editor.insertUnorderedList') }).render(); }); this.context.memo('button.ol', () => { return this.button({ contents: this.ui.icon(this.options.icons.orderedlist), tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'), click: this.context.createInvokeHandler('editor.insertOrderedList') }).render(); }); const justifyLeft = this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'), click: this.context.createInvokeHandler('editor.justifyLeft') }); const justifyCenter = this.button({ contents: this.ui.icon(this.options.icons.alignCenter), tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'), click: this.context.createInvokeHandler('editor.justifyCenter') }); const justifyRight = this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'), click: this.context.createInvokeHandler('editor.justifyRight') }); const justifyFull = this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'), click: this.context.createInvokeHandler('editor.justifyFull') }); const outdent = this.button({ contents: this.ui.icon(this.options.icons.outdent), tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'), click: this.context.createInvokeHandler('editor.outdent') }); const indent = this.button({ contents: this.ui.icon(this.options.icons.indent), tooltip: this.lang.paragraph.indent + this.representShortcut('indent'), click: this.context.createInvokeHandler('editor.indent') }); this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); this.context.memo('button.outdent', func.invoke(outdent, 'render')); this.context.memo('button.indent', func.invoke(indent, 'render')); this.context.memo('button.paragraph', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options), tooltip: this.lang.paragraph.paragraph, data: { toggle: 'dropdown' } }), this.ui.dropdown([ this.ui.buttonGroup({ className: 'note-align', children: [justifyLeft, justifyCenter, justifyRight, justifyFull] }), this.ui.buttonGroup({ className: 'note-list', children: [outdent, indent] }) ]) ]).render(); }); this.context.memo('button.height', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options), tooltip: this.lang.font.height, data: { toggle: 'dropdown' } }), this.ui.dropdownCheck({ items: this.options.lineHeights, checkClassName: this.options.icons.menuCheck, className: 'dropdown-line-height', title: this.lang.font.height, click: this.context.createInvokeHandler('editor.lineHeight') }) ]).render(); }); this.context.memo('button.table', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options), tooltip: this.lang.table.table, data: { toggle: 'dropdown' } }), this.ui.dropdown({ title: this.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: ($node) => { const $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: this.options.insertTableMaxSize.col + 'em', height: this.options.insertTableMaxSize.row + 'em' }).mousedown(this.context.createInvokeHandler('editor.insertTable')) .on('mousemove', this.tableMoveHandler.bind(this)); } }).render(); }); this.context.memo('button.link', () => { return this.button({ contents: this.ui.icon(this.options.icons.link), tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'), click: this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.picture', () => { return this.button({ contents: this.ui.icon(this.options.icons.picture), tooltip: this.lang.image.image, click: this.context.createInvokeHandler('imageDialog.show') }).render(); }); this.context.memo('button.video', () => { return this.button({ contents: this.ui.icon(this.options.icons.video), tooltip: this.lang.video.video, click: this.context.createInvokeHandler('videoDialog.show') }).render(); }); this.context.memo('button.hr', () => { return this.button({ contents: this.ui.icon(this.options.icons.minus), tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'), click: this.context.createInvokeHandler('editor.insertHorizontalRule') }).render(); }); this.context.memo('button.fullscreen', () => { return this.button({ className: 'btn-fullscreen', contents: this.ui.icon(this.options.icons.arrowsAlt), tooltip: this.lang.options.fullscreen, click: this.context.createInvokeHandler('fullscreen.toggle') }).render(); }); this.context.memo('button.codeview', () => { return this.button({ className: 'btn-codeview', contents: this.ui.icon(this.options.icons.code), tooltip: this.lang.options.codeview, click: this.context.createInvokeHandler('codeview.toggle') }).render(); }); this.context.memo('button.redo', () => { return this.button({ contents: this.ui.icon(this.options.icons.redo), tooltip: this.lang.history.redo + this.representShortcut('redo'), click: this.context.createInvokeHandler('editor.redo') }).render(); }); this.context.memo('button.undo', () => { return this.button({ contents: this.ui.icon(this.options.icons.undo), tooltip: this.lang.history.undo + this.representShortcut('undo'), click: this.context.createInvokeHandler('editor.undo') }).render(); }); this.context.memo('button.help', () => { return this.button({ contents: this.ui.icon(this.options.icons.question), tooltip: this.lang.options.help, click: this.context.createInvokeHandler('helpDialog.show') }).render(); }); } /** * image : [ * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], * ['remove', ['removeMedia']] * ], */ addImagePopoverButtons() { // Image Size Buttons this.context.memo('button.imageSize100', () => { return this.button({ contents: '<span class="note-fontsize-10">100%</span>', tooltip: this.lang.image.resizeFull, click: this.context.createInvokeHandler('editor.resize', '1') }).render(); }); this.context.memo('button.imageSize50', () => { return this.button({ contents: '<span class="note-fontsize-10">50%</span>', tooltip: this.lang.image.resizeHalf, click: this.context.createInvokeHandler('editor.resize', '0.5') }).render(); }); this.context.memo('button.imageSize25', () => { return this.button({ contents: '<span class="note-fontsize-10">25%</span>', tooltip: this.lang.image.resizeQuarter, click: this.context.createInvokeHandler('editor.resize', '0.25') }).render(); }); // Float Buttons this.context.memo('button.floatLeft', () => { return this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.image.floatLeft, click: this.context.createInvokeHandler('editor.floatMe', 'left') }).render(); }); this.context.memo('button.floatRight', () => { return this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.image.floatRight, click: this.context.createInvokeHandler('editor.floatMe', 'right') }).render(); }); this.context.memo('button.floatNone', () => { return this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.image.floatNone, click: this.context.createInvokeHandler('editor.floatMe', 'none') }).render(); }); // Remove Buttons this.context.memo('button.removeMedia', () => { return this.button({ contents: this.ui.icon(this.options.icons.trash), tooltip: this.lang.image.remove, click: this.context.createInvokeHandler('editor.removeMedia') }).render(); }); } addLinkPopoverButtons() { this.context.memo('button.linkDialogShow', () => { return this.button({ contents: this.ui.icon(this.options.icons.link), tooltip: this.lang.link.edit, click: this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.unlink', () => { return this.button({ contents: this.ui.icon(this.options.icons.unlink), tooltip: this.lang.link.unlink, click: this.context.createInvokeHandler('editor.unlink') }).render(); }); } /** * table : [ * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] * ], */ addTablePopoverButtons() { this.context.memo('button.addRowUp', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.rowAbove), tooltip: this.lang.table.addRowAbove, click: this.context.createInvokeHandler('editor.addRow', 'top') }).render(); }); this.context.memo('button.addRowDown', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.rowBelow), tooltip: this.lang.table.addRowBelow, click: this.context.createInvokeHandler('editor.addRow', 'bottom') }).render(); }); this.context.memo('button.addColLeft', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.colBefore), tooltip: this.lang.table.addColLeft, click: this.context.createInvokeHandler('editor.addCol', 'left') }).render(); }); this.context.memo('button.addColRight', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.colAfter), tooltip: this.lang.table.addColRight, click: this.context.createInvokeHandler('editor.addCol', 'right') }).render(); }); this.context.memo('button.deleteRow', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.rowRemove), tooltip: this.lang.table.delRow, click: this.context.createInvokeHandler('editor.deleteRow') }).render(); }); this.context.memo('button.deleteCol', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.colRemove), tooltip: this.lang.table.delCol, click: this.context.createInvokeHandler('editor.deleteCol') }).render(); }); this.context.memo('button.deleteTable', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.trash), tooltip: this.lang.table.delTable, click: this.context.createInvokeHandler('editor.deleteTable') }).render(); }); } build($container, groups) { for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { const group = groups[groupIdx]; const groupName = $.isArray(group) ? group[0] : group; const buttons = $.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group]; const $group = this.ui.buttonGroup({ className: 'note-' + groupName }).render(); for (let idx = 0, len = buttons.length; idx < len; idx++) { const btn = this.context.memo('button.' + buttons[idx]); if (btn) { $group.append(typeof btn === 'function' ? btn(this.context) : btn); } } $group.appendTo($container); } } /** * @param {jQuery} [$container] */ updateCurrentStyle($container) { const $cont = $container || this.$toolbar; const styleInfo = this.context.invoke('editor.currentStyle'); this.updateBtnStates($cont, { '.note-btn-bold': () => { return styleInfo['font-bold'] === 'bold'; }, '.note-btn-italic': () => { return styleInfo['font-italic'] === 'italic'; }, '.note-btn-underline': () => { return styleInfo['font-underline'] === 'underline'; }, '.note-btn-subscript': () => { return styleInfo['font-subscript'] === 'subscript'; }, '.note-btn-superscript': () => { return styleInfo['font-superscript'] === 'superscript'; }, '.note-btn-strikethrough': () => { return styleInfo['font-strikethrough'] === 'strikethrough'; } }); if (styleInfo['font-family']) { const fontNames = styleInfo['font-family'].split(',').map((name) => { return name.replace(/[\'\"]/g, '') .replace(/\s+$/, '') .replace(/^\s+/, ''); }); const fontName = lists.find(fontNames, this.isFontInstalled.bind(this)); $cont.find('.dropdown-fontname a').each((idx, item) => { const $item = $(item); // always compare string to avoid creating another func. const isChecked = ($item.data('value') + '') === (fontName + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName); } if (styleInfo['font-size']) { const fontSize = styleInfo['font-size']; $cont.find('.dropdown-fontsize a').each((idx, item) => { const $item = $(item); // always compare with string to avoid creating another func. const isChecked = ($item.data('value') + '') === (fontSize + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontsize').text(fontSize); } if (styleInfo['line-height']) { const lineHeight = styleInfo['line-height']; $cont.find('.dropdown-line-height li a').each((idx, item) => { // always compare with string to avoid creating another func. const isChecked = ($(item).data('value') + '') === (lineHeight + ''); this.className = isChecked ? 'checked' : ''; }); } } updateBtnStates($container, infos) { $.each(infos, (selector, pred) => { this.ui.toggleBtnActive($container.find(selector), pred()); }); } tableMoveHandler(event) { const PX_PER_EM = 18; const $picker = $(event.target.parentNode); // target is mousecatcher const $dimensionDisplay = $picker.next(); const $catcher = $picker.find('.note-dimension-picker-mousecatcher'); const $highlighted = $picker.find('.note-dimension-picker-highlighted'); const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); let posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox if (event.offsetX === undefined) { const posCatcher = $(event.target).offset(); posOffset = { x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { posOffset = { x: event.offsetX, y: event.offsetY }; } const dim = { c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); $catcher.data('value', dim.c + 'x' + dim.r); if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) { $unhighlighted.css({ width: dim.c + 1 + 'em' }); } if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) { $unhighlighted.css({ height: dim.r + 1 + 'em' }); } $dimensionDisplay.html(dim.c + ' x ' + dim.r); } } PKe[�\ >Wwwsrc/js/base/module/AutoSync.jsnu�[���import dom from '../core/dom'; /** * textarea auto sync. */ export default class AutoSync { constructor(context) { this.$note = context.layoutInfo.note; this.events = { 'summernote.change': () => { this.$note.val(context.invoke('code')); } }; } shouldInitialize() { return dom.isTextarea(this.$note[0]); } } PKe[�\m��h��src/js/base/module/Handle.jsnu�[���import $ from 'jquery'; import dom from '../core/dom'; export default class Handle { constructor(context) { this.context = context; this.$document = $(document); this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.lang = this.options.langInfo; this.events = { 'summernote.mousedown': (we, e) => { if (this.update(e.target)) { e.preventDefault(); } }, 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => { this.update(); }, 'summernote.disable': () => { this.hide(); }, 'summernote.codeview.toggled': () => { this.update(); } }; } initialize() { this.$handle = $([ '<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', (event) => { if (dom.isControlSizing(event.target)) { event.preventDefault(); event.stopPropagation(); const $target = this.$handle.find('.note-control-selection').data('target'); const posStart = $target.offset(); const scrollTop = this.$document.scrollTop(); const onMouseMove = (event) => { this.context.invoke('editor.resizeTo', { x: event.clientX - posStart.left, y: event.clientY - (posStart.top - scrollTop) }, $target, !event.shiftKey); this.update($target[0]); }; this.$document .on('mousemove', onMouseMove) .one('mouseup', (e) => { e.preventDefault(); this.$document.off('mousemove', onMouseMove); this.context.invoke('editor.afterCommand'); }); if (!$target.data('ratio')) { // original ratio. $target.data('ratio', $target.height() / $target.width()); } } }); // Listen for scrolling on the handle overlay. this.$handle.on('wheel', (e) => { e.preventDefault(); this.update(); }); } destroy() { this.$handle.remove(); } update(target) { if (this.context.isDisabled()) { return false; } const isImage = dom.isImg(target); const $selection = this.$handle.find('.note-control-selection'); this.context.invoke('imagePopover.update', target); if (isImage) { const $image = $(target); const position = $image.position(); const pos = { left: position.left + parseInt($image.css('marginLeft'), 10), top: position.top + parseInt($image.css('marginTop'), 10) }; // exclude margin const imageSize = { w: $image.outerWidth(false), h: $image.outerHeight(false) }; $selection.css({ display: 'block', left: pos.left, top: pos.top, width: imageSize.w, height: imageSize.h }).data('target', $image); // save current image element. const origImageObj = new Image(); origImageObj.src = $image.attr('src'); const sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')'; $selection.find('.note-control-selection-info').text(sizingText); this.context.invoke('editor.saveTarget', target); } else { this.hide(); } return isImage; } /** * hide * * @param {jQuery} $handle */ hide() { this.context.invoke('editor.clearTarget'); this.$handle.children().hide(); } } PKe[�\ye��q[q[src/js/base/module/Editor.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; import range from '../core/range'; import { readFileAsDataURL, createImage } from '../core/async'; import History from '../editing/History'; import Style from '../editing/Style'; import Typing from '../editing/Typing'; import Table from '../editing/Table'; import Bullet from '../editing/Bullet'; const KEY_BOGUS = 'bogus'; /** * @class Editor */ export default class Editor { constructor(context) { this.context = context; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.editable = this.$editable[0]; this.lastRange = null; this.style = new Style(); this.table = new Table(); this.typing = new Typing(); this.bullet = new Bullet(); this.history = new History(this.$editable); this.context.memo('help.undo', this.lang.help.undo); this.context.memo('help.redo', this.lang.help.redo); this.context.memo('help.tab', this.lang.help.tab); this.context.memo('help.untab', this.lang.help.untab); this.context.memo('help.insertParagraph', this.lang.help.insertParagraph); this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList); this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList); this.context.memo('help.indent', this.lang.help.indent); this.context.memo('help.outdent', this.lang.help.outdent); this.context.memo('help.formatPara', this.lang.help.formatPara); this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule); this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand const commands = [ 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor' ]; for (let idx = 0, len = commands.length; idx < len; idx++) { this[commands[idx]] = ((sCmd) => { return (value) => { this.beforeCommand(); document.execCommand(sCmd, false, value); this.afterCommand(true); }; })(commands[idx]); this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]); } this.fontName = this.wrapCommand((value) => { return this.fontStyling('font-family', "\'" + value + "\'"); }); this.fontSize = this.wrapCommand((value) => { return this.fontStyling('font-size', value + 'px'); }); for (let idx = 1; idx <= 6; idx++) { this['formatH' + idx] = ((idx) => { return () => { this.formatBlock('H' + idx); }; })(idx); this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]); }; this.insertParagraph = this.wrapCommand(() => { this.typing.insertParagraph(this.editable); }); this.insertOrderedList = this.wrapCommand(() => { this.bullet.insertOrderedList(this.editable); }); this.insertUnorderedList = this.wrapCommand(() => { this.bullet.insertUnorderedList(this.editable); }); this.indent = this.wrapCommand(() => { this.bullet.indent(this.editable); }); this.outdent = this.wrapCommand(() => { this.bullet.outdent(this.editable); }); /** * insertNode * insert node * @param {Node} node */ this.insertNode = this.wrapCommand((node) => { if (this.isLimited($(node).text().length)) { return; } const rng = this.createRange(); rng.insertNode(node); range.createFromNodeAfter(node).select(); }); /** * insert text * @param {String} text */ this.insertText = this.wrapCommand((text) => { if (this.isLimited(text.length)) { return; } const rng = this.createRange(); const textNode = rng.insertNode(dom.createText(text)); range.create(textNode, dom.nodeLength(textNode)).select(); }); /** * paste HTML * @param {String} markup */ this.pasteHTML = this.wrapCommand((markup) => { if (this.isLimited(markup.length)) { return; } const contents = this.createRange().pasteHTML(markup); range.createFromNodeAfter(lists.last(contents)).select(); }); /** * formatBlock * * @param {String} tagName */ this.formatBlock = this.wrapCommand((tagName, $target) => { const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle; if (onApplyCustomStyle) { onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock); } else { this.onFormatBlock(tagName, $target); } }); /** * insert horizontal rule */ this.insertHorizontalRule = this.wrapCommand(() => { const hrNode = this.createRange().insertNode(dom.create('HR')); if (hrNode.nextSibling) { range.create(hrNode.nextSibling, 0).normalize().select(); } }); /** * lineHeight * @param {String} value */ this.lineHeight = this.wrapCommand((value) => { this.style.stylePara(this.createRange(), { lineHeight: value }); }); /** * create link (command) * * @param {Object} linkInfo */ this.createLink = this.wrapCommand((linkInfo) => { let linkUrl = linkInfo.url; const linkText = linkInfo.text; const isNewWindow = linkInfo.isNewWindow; let rng = linkInfo.range || this.createRange(); const isTextChanged = rng.toString() !== linkText; // handle spaced urls from input if (typeof linkUrl === 'string') { linkUrl = linkUrl.trim(); } if (this.options.onCreateLink) { linkUrl = this.options.onCreateLink(linkUrl); } else { // if url doesn't match an URL schema, set http:// as default linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) ? linkUrl : 'http://' + linkUrl; } let anchors = []; if (isTextChanged) { rng = rng.deleteContents(); const anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]); anchors.push(anchor); } else { anchors = this.style.styleNodes(rng, { nodeName: 'A', expandClosestSibling: true, onlyPartialContains: true }); } $.each(anchors, (idx, anchor) => { $(anchor).attr('href', linkUrl); if (isNewWindow) { $(anchor).attr('target', '_blank'); } else { $(anchor).removeAttr('target'); } }); const startRange = range.createFromNodeBefore(lists.head(anchors)); const startPoint = startRange.getStartPoint(); const endRange = range.createFromNodeAfter(lists.last(anchors)); const endPoint = endRange.getEndPoint(); range.create( startPoint.node, startPoint.offset, endPoint.node, endPoint.offset ).select(); }); /** * setting color * * @param {Object} sObjColor color code * @param {String} sObjColor.foreColor foreground color * @param {String} sObjColor.backColor background color */ this.color = this.wrapCommand((colorInfo) => { const foreColor = colorInfo.foreColor; const backColor = colorInfo.backColor; if (foreColor) { document.execCommand('foreColor', false, foreColor); } if (backColor) { document.execCommand('backColor', false, backColor); } }); /** * Set foreground color * * @param {String} colorCode foreground color code */ this.foreColor = this.wrapCommand((colorInfo) => { document.execCommand('styleWithCSS', false, true); document.execCommand('foreColor', false, colorInfo); }); /** * insert Table * * @param {String} dimension of table (ex : "5x5") */ this.insertTable = this.wrapCommand((dim) => { const dimension = dim.split('x'); const rng = this.createRange().deleteContents(); rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options)); }); /** * remove media object and Figure Elements if media object is img with Figure. */ this.removeMedia = this.wrapCommand(() => { let $target = $(this.restoreTarget()).parent(); if ($target.parent('figure').length) { $target.parent('figure').remove(); } else { $target = $(this.restoreTarget()).detach(); } this.context.triggerEvent('media.delete', $target, this.$editable); }); /** * float me * * @param {String} value */ this.floatMe = this.wrapCommand((value) => { const $target = $(this.restoreTarget()); $target.toggleClass('note-float-left', value === 'left'); $target.toggleClass('note-float-right', value === 'right'); $target.css('float', value); }); /** * resize overlay element * @param {String} value */ this.resize = this.wrapCommand((value) => { const $target = $(this.restoreTarget()); $target.css({ width: value * 100 + '%', height: '' }); }); } initialize() { // bind custom events this.$editable.on('keydown', (event) => { if (event.keyCode === key.code.ENTER) { this.context.triggerEvent('enter', event); } this.context.triggerEvent('keydown', event); if (!event.isDefaultPrevented()) { if (this.options.shortcuts) { this.handleKeyMap(event); } else { this.preventDefaultEditableShortCuts(event); } } if (this.isLimited(1, event)) { return false; } }).on('keyup', (event) => { this.context.triggerEvent('keyup', event); }).on('focus', (event) => { this.context.triggerEvent('focus', event); }).on('blur', (event) => { this.context.triggerEvent('blur', event); }).on('mousedown', (event) => { this.context.triggerEvent('mousedown', event); }).on('mouseup', (event) => { this.context.triggerEvent('mouseup', event); }).on('scroll', (event) => { this.context.triggerEvent('scroll', event); }).on('paste', (event) => { this.context.triggerEvent('paste', event); }); // init content before set event this.$editable.html(dom.html(this.$note) || dom.emptyPara); this.$editable.on(env.inputEventName, func.debounce(() => { this.context.triggerEvent('change', this.$editable.html()); }, 100)); this.$editor.on('focusin', (event) => { this.context.triggerEvent('focusin', event); }).on('focusout', (event) => { this.context.triggerEvent('focusout', event); }); if (!this.options.airMode) { if (this.options.width) { this.$editor.outerWidth(this.options.width); } if (this.options.height) { this.$editable.outerHeight(this.options.height); } if (this.options.maxHeight) { this.$editable.css('max-height', this.options.maxHeight); } if (this.options.minHeight) { this.$editable.css('min-height', this.options.minHeight); } } this.history.recordUndo(); } destroy() { this.$editable.off(); } handleKeyMap(event) { const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; const keys = []; if (event.metaKey) { keys.push('CMD'); } if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); } if (event.shiftKey) { keys.push('SHIFT'); } const keyName = key.nameFromCode[event.keyCode]; if (keyName) { keys.push(keyName); } const eventName = keyMap[keys.join('+')]; if (eventName) { if (this.context.invoke(eventName) !== false) { event.preventDefault(); } } else if (key.isEdit(event.keyCode)) { this.afterCommand(); } } preventDefaultEditableShortCuts(event) { // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) { event.preventDefault(); } } isLimited(pad, event) { pad = pad || 0; if (typeof event !== 'undefined') { if (key.isMove(event.keyCode) || (event.ctrlKey || event.metaKey) || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) { return false; } } if (this.options.maxTextLength > 0) { if ((this.$editable.text().length + pad) >= this.options.maxTextLength) { return true; } } return false; } /** * create range * @return {WrappedRange} */ createRange() { this.focus(); return range.create(this.editable); } /** * saveRange * * save current range * * @param {Boolean} [thenCollapse=false] */ saveRange(thenCollapse) { this.lastRange = this.createRange(); if (thenCollapse) { this.lastRange.collapse().select(); } } /** * restoreRange * * restore lately range */ restoreRange() { if (this.lastRange) { this.lastRange.select(); this.focus(); } } saveTarget(node) { this.$editable.data('target', node); } clearTarget() { this.$editable.removeData('target'); } restoreTarget() { return this.$editable.data('target'); } /** * currentStyle * * current style * @return {Object|Boolean} unfocus */ currentStyle() { let rng = range.create(); if (rng) { rng = rng.normalize(); } return rng ? this.style.current(rng) : this.style.fromNode(this.$editable); } /** * style from node * * @param {jQuery} $node * @return {Object} */ styleFromNode($node) { return this.style.fromNode($node); } /** * undo */ undo() { this.context.triggerEvent('before.command', this.$editable.html()); this.history.undo(); this.context.triggerEvent('change', this.$editable.html()); } /** * redo */ redo() { this.context.triggerEvent('before.command', this.$editable.html()); this.history.redo(); this.context.triggerEvent('change', this.$editable.html()); } /** * before command */ beforeCommand() { this.context.triggerEvent('before.command', this.$editable.html()); // keep focus on editable before command execution this.focus(); } /** * after command * @param {Boolean} isPreventTrigger */ afterCommand(isPreventTrigger) { this.normalizeContent(); this.history.recordUndo(); if (!isPreventTrigger) { this.context.triggerEvent('change', this.$editable.html()); } } /** * handle tab key */ tab() { const rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng); } else { if (this.options.tabSize === 0) { return false; } if (!this.isLimited(this.options.tabSize)) { this.beforeCommand(); this.typing.insertTab(rng, this.options.tabSize); this.afterCommand(); } } } /** * handle shift+tab key */ untab() { const rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng, true); } else { if (this.options.tabSize === 0) { return false; } } } /** * run given function between beforeCommand and afterCommand */ wrapCommand(fn) { return () => { this.beforeCommand(); fn.apply(this, arguments); this.afterCommand(); }; } /** * insert image * * @param {String} src * @param {String|Function} param * @return {Promise} */ insertImage(src, param) { return createImage(src, param).then(($image) => { this.beforeCommand(); if (typeof param === 'function') { param($image); } else { if (typeof param === 'string') { $image.attr('data-filename', param); } $image.css('width', Math.min(this.$editable.width(), $image.width())); } $image.show(); range.create(this.editable).insertNode($image[0]); range.createFromNodeAfter($image[0]).select(); this.afterCommand(); }).fail((e) => { this.context.triggerEvent('image.upload.error', e); }); } /** * insertImages * @param {File[]} files */ insertImages(files) { $.each(files, (idx, file) => { const filename = file.name; if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) { this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError); } else { readFileAsDataURL(file).then((dataURL) => { return this.insertImage(dataURL, filename); }).fail(() => { this.context.triggerEvent('image.upload.error'); }); } }); } /** * insertImagesOrCallback * @param {File[]} files */ insertImagesOrCallback(files) { const callbacks = this.options.callbacks; // If onImageUpload this.options setted if (callbacks.onImageUpload) { this.context.triggerEvent('image.upload', files); // else insert Image as dataURL } else { this.insertImages(files); } } /** * return selected plain text * @return {String} text */ getSelectedText() { let rng = this.createRange(); // if range on anchor, expand range with anchor if (rng.isOnAnchor()) { rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor)); } return rng.toString(); } onFormatBlock(tagName, $target) { // [workaround] for MSIE, IE need `<` tagName = env.isMSIE ? '<' + tagName + '>' : tagName; document.execCommand('FormatBlock', false, tagName); // support custom class if ($target && $target.length) { const className = $target[0].className || ''; if (className) { const currentRange = this.createRange(); const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName); $parent.addClass(className); } } } formatPara() { this.formatBlock('P'); } fontStyling(target, value) { const rng = this.createRange(); if (rng) { const spans = this.style.styleNodes(rng); $(spans).css(target, value); // [workaround] added styled bogus span for style // - also bogus character needed for cursor position if (rng.isCollapsed()) { const firstSpan = lists.head(spans); if (firstSpan && !dom.nodeLength(firstSpan)) { firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; range.createFromNodeAfter(firstSpan.firstChild).select(); this.$editable.data(KEY_BOGUS, firstSpan); } } } } /** * unlink * * @type command */ unlink() { let rng = this.createRange(); if (rng.isOnAnchor()) { const anchor = dom.ancestor(rng.sc, dom.isAnchor); rng = range.createFromNode(anchor); rng.select(); this.beforeCommand(); document.execCommand('unlink'); this.afterCommand(); } } /** * returns link info * * @return {Object} * @return {WrappedRange} return.range * @return {String} return.text * @return {Boolean} [return.isNewWindow=true] * @return {String} [return.url=""] */ getLinkInfo() { const rng = this.createRange().expand(dom.isAnchor); // Get the first anchor on range(for edit). const $anchor = $(lists.head(rng.nodes(dom.isAnchor))); const linkInfo = { range: rng, text: rng.toString(), url: $anchor.length ? $anchor.attr('href') : '' }; // Define isNewWindow when anchor exists. if ($anchor.length) { linkInfo.isNewWindow = $anchor.attr('target') === '_blank'; } return linkInfo; } addRow(position) { const rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addRow(rng, position); this.afterCommand(); } } addCol(position) { const rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addCol(rng, position); this.afterCommand(); } } deleteRow() { const rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteRow(rng); this.afterCommand(); } } deleteCol() { const rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteCol(rng); this.afterCommand(); } } deleteTable() { const rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteTable(rng); this.afterCommand(); } } /** * @param {Position} pos * @param {jQuery} $target - target element * @param {Boolean} [bKeepRatio] - keep ratio */ resizeTo(pos, $target, bKeepRatio) { let imageSize; if (bKeepRatio) { const newRatio = pos.y / pos.x; const ratio = $target.data('ratio'); imageSize = { width: ratio > newRatio ? pos.x : pos.y / ratio, height: ratio > newRatio ? pos.x * ratio : pos.y }; } else { imageSize = { width: pos.x, height: pos.y }; } $target.css(imageSize); } /** * returns whether editable area has focus or not. */ hasFocus() { return this.$editable.is(':focus'); } /** * set focus */ focus() { // [workaround] Screen will move when page is scolled in IE. // - do focus when not focused if (!this.hasFocus()) { this.$editable.focus(); } } /** * returns whether contents is empty or not. * @return {Boolean} */ isEmpty() { return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html(); } /** * Removes all contents and restores the editable instance to an _emptyPara_. */ empty() { this.context.invoke('code', dom.emptyPara); } /** * normalize content */ normalizeContent() { this.$editable[0].normalize(); } } PKe[�\䧉=��!src/js/base/module/VideoDialog.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; export default class VideoDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } initialize() { const $container = this.options.dialogsInBody ? this.$body : this.$editor; const body = [ '<div class="form-group note-form-group row-fluid">', `<label class="note-form-label">${this.lang.video.url} <small class="text-muted">${this.lang.video.providers}</small></label>`, '<input class="note-video-url form-control note-form-control note-input" type="text" />', '</div>' ].join(''); const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn'; const footer = `<button type="submit" href="#" class="${buttonClass}" disabled>${this.lang.video.insert}</button>`; this.$dialog = this.ui.dialog({ title: this.lang.video.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } bindEnterKey($input, $btn) { $input.on('keypress', (event) => { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); } createVideoNode(url) { // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) const ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; const ytMatch = url.match(ytRegExp); const igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; const igMatch = url.match(igRegExp); const vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; const vMatch = url.match(vRegExp); const vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/; const vimMatch = url.match(vimRegExp); const dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; const dmMatch = url.match(dmRegExp); const youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; const youkuMatch = url.match(youkuRegExp); const qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/; const qqMatch = url.match(qqRegExp); const qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/; const qqMatch2 = url.match(qqRegExp2); const mp4RegExp = /^.+.(mp4|m4v)$/; const mp4Match = url.match(mp4RegExp); const oggRegExp = /^.+.(ogg|ogv)$/; const oggMatch = url.match(oggRegExp); const webmRegExp = /^.+.(webm)$/; const webmMatch = url.match(webmRegExp); let $video; if (ytMatch && ytMatch[1].length === 11) { const youtubeId = ytMatch[1]; $video = $('<iframe>') .attr('frameborder', 0) .attr('src', '//www.youtube.com/embed/' + youtubeId) .attr('width', '640').attr('height', '360'); } else if (igMatch && igMatch[0].length) { $video = $('<iframe>') .attr('frameborder', 0) .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') .attr('width', '612').attr('height', '710') .attr('scrolling', 'no') .attr('allowtransparency', 'true'); } else if (vMatch && vMatch[0].length) { $video = $('<iframe>') .attr('frameborder', 0) .attr('src', vMatch[0] + '/embed/simple') .attr('width', '600').attr('height', '600') .attr('class', 'vine-embed'); } else if (vimMatch && vimMatch[3].length) { $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) .attr('width', '640').attr('height', '360'); } else if (dmMatch && dmMatch[2].length) { $video = $('<iframe>') .attr('frameborder', 0) .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) .attr('width', '640').attr('height', '360'); } else if (youkuMatch && youkuMatch[1].length) { $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '498') .attr('width', '510') .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) { const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]); $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '310') .attr('width', '500') .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0'); } else if (mp4Match || oggMatch || webmMatch) { $video = $('<video controls>') .attr('src', url) .attr('width', '640').attr('height', '360'); } else { // this is not a known video link. Now what, Cat? Now what? return false; } $video.addClass('note-video-clip'); return $video[0]; } show() { const text = this.context.invoke('editor.getSelectedText'); this.context.invoke('editor.saveRange'); this.showVideoDialog(text).then((url) => { // [workaround] hide dialog before restore range for IE range focus this.ui.hideDialog(this.$dialog); this.context.invoke('editor.restoreRange'); // build node const $node = this.createVideoNode(url); if ($node) { // insert video node this.context.invoke('editor.insertNode', $node); } }).fail(() => { this.context.invoke('editor.restoreRange'); }); } /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ showVideoDialog(text) { return $.Deferred((deferred) => { const $videoUrl = this.$dialog.find('.note-video-url'); const $videoBtn = this.$dialog.find('.note-video-btn'); this.ui.onDialogShown(this.$dialog, () => { this.context.triggerEvent('dialog.shown'); $videoUrl.val(text).on('input', () => { this.ui.toggleBtn($videoBtn, $videoUrl.val()); }); if (!env.isSupportTouch) { $videoUrl.trigger('focus'); } $videoBtn.click((event) => { event.preventDefault(); deferred.resolve($videoUrl.val()); }); this.bindEnterKey($videoUrl, $videoBtn); }); this.ui.onDialogHidden(this.$dialog, () => { $videoUrl.off('input'); $videoBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); this.ui.showDialog(this.$dialog); }); } } PKe[�\0�V0��src/js/base/module/Toolbar.jsnu�[���import $ from 'jquery'; export default class Toolbar { constructor(context) { this.context = context; this.$window = $(window); this.$document = $(document); this.ui = $.summernote.ui; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.followScroll = this.followScroll.bind(this); } shouldInitialize() { return !this.options.airMode; } initialize() { this.options.toolbar = this.options.toolbar || []; if (!this.options.toolbar.length) { this.$toolbar.hide(); } else { this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar); } if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } this.changeContainer(false); this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => { this.context.invoke('buttons.updateCurrentStyle'); }); this.context.invoke('buttons.updateCurrentStyle'); if (this.options.followingToolbar) { this.$window.on('scroll resize', this.followScroll); } } destroy() { this.$toolbar.children().remove(); if (this.options.followingToolbar) { this.$window.off('scroll resize', this.followScroll); } } followScroll() { if (this.$editor.hasClass('fullscreen')) { return false; } const $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper'); const editorHeight = this.$editor.outerHeight(); const editorWidth = this.$editor.width(); const toolbarHeight = this.$toolbar.height(); $toolbarWrapper.css({ height: toolbarHeight }); // check if the web app is currently using another static bar let otherBarHeight = 0; if (this.options.otherStaticBar) { otherBarHeight = $(this.options.otherStaticBar).outerHeight(); } const currentOffset = this.$document.scrollTop(); const editorOffsetTop = this.$editor.offset().top; const editorOffsetBottom = editorOffsetTop + editorHeight; const activateOffset = editorOffsetTop - otherBarHeight; const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight; if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) { this.$toolbar.css({ position: 'fixed', top: otherBarHeight, width: editorWidth }); } else { this.$toolbar.css({ position: 'relative', top: 0, width: '100%' }); } } changeContainer(isFullscreen) { if (isFullscreen) { this.$toolbar.prependTo(this.$editor); } else { if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } } } updateFullscreen(isFullscreen) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen); this.changeContainer(isFullscreen); } updateCodeview(isCodeview) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview); if (isCodeview) { this.deactivate(); } else { this.activate(); } } activate(isIncludeCodeview) { let $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, true); } deactivate(isIncludeCodeview) { let $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, false); } } PKe[�\��"PPsrc/js/base/module/Dropzone.jsnu�[���import $ from 'jquery'; export default class Dropzone { constructor(context) { this.context = context; this.$eventListener = $(document); this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.documentEventHandlers = {}; this.$dropzone = $([ '<div class="note-dropzone">', ' <div class="note-dropzone-message"/>', '</div>' ].join('')).prependTo(this.$editor); } /** * attach Drag and Drop Events */ initialize() { if (this.options.disableDragAndDrop) { // prevent default drop event this.documentEventHandlers.onDrop = (e) => { e.preventDefault(); }; // do not consider outside of dropzone this.$eventListener = this.$dropzone; this.$eventListener.on('drop', this.documentEventHandlers.onDrop); } else { this.attachDragAndDropEvent(); } } /** * attach Drag and Drop Events */ attachDragAndDropEvent() { let collection = $(); const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message'); this.documentEventHandlers.onDragenter = (e) => { const isCodeview = this.context.invoke('codeview.isActivated'); const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0; if (!isCodeview && !collection.length && hasEditorSize) { this.$editor.addClass('dragover'); this.$dropzone.width(this.$editor.width()); this.$dropzone.height(this.$editor.height()); $dropzoneMessage.text(this.lang.image.dragImageHere); } collection = collection.add(e.target); }; this.documentEventHandlers.onDragleave = (e) => { collection = collection.not(e.target); if (!collection.length) { this.$editor.removeClass('dragover'); } }; this.documentEventHandlers.onDrop = () => { collection = $(); this.$editor.removeClass('dragover'); }; // show dropzone on dragenter when dragging a object to document // -but only if the editor is visible, i.e. has a positive width and height this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter) .on('dragleave', this.documentEventHandlers.onDragleave) .on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover. this.$dropzone.on('dragenter', () => { this.$dropzone.addClass('hover'); $dropzoneMessage.text(this.lang.image.dropImage); }).on('dragleave', () => { this.$dropzone.removeClass('hover'); $dropzoneMessage.text(this.lang.image.dragImageHere); }); // attach dropImage this.$dropzone.on('drop', (event) => { const dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content event.preventDefault(); if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { this.$editable.focus(); this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files); } else { $.each(dataTransfer.types, (idx, type) => { const content = dataTransfer.getData(type); if (type.toLowerCase().indexOf('text') > -1) { this.context.invoke('editor.pasteHTML', content); } else { $(content).each((idx, item) => { this.context.invoke('editor.insertNode', item); }); } }); } }).on('dragover', false); // prevent default dragover event } destroy() { Object.keys(this.documentEventHandlers).forEach((key) => { this.$eventListener.off(key.substr(2).toLowerCase(), this.documentEventHandlers[key]); }); this.documentEventHandlers = {}; } } PKe[�\b6,�pp!src/js/base/module/HintPopover.jsnu�[���import $ from 'jquery'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; import range from '../core/range'; import key from '../core/key'; const POPOVER_DIST = 5; export default class HintPopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$editable = context.layoutInfo.editable; this.options = context.options; this.hint = this.options.hint || []; this.direction = this.options.hintDirection || 'bottom'; this.hints = $.isArray(this.hint) ? this.hint : [this.hint]; this.events = { 'summernote.keyup': (we, e) => { if (!e.isDefaultPrevented()) { this.handleKeyup(e); } }, 'summernote.keydown': (we, e) => { this.handleKeydown(e); }, 'summernote.disable summernote.dialog.shown': () => { this.hide(); } }; } shouldInitialize() { return this.hints.length > 0; } initialize() { this.lastWordRange = null; this.$popover = this.ui.popover({ className: 'note-hint-popover', hideArrow: true, direction: '' }).render().appendTo(this.options.container); this.$popover.hide(); this.$content = this.$popover.find('.popover-content,.note-popover-content'); this.$content.on('click', '.note-hint-item', () => { this.$content.find('.active').removeClass('active'); $(this).addClass('active'); this.replace(); }); } destroy() { this.$popover.remove(); } selectItem($item) { this.$content.find('.active').removeClass('active'); $item.addClass('active'); this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2); } moveDown() { const $current = this.$content.find('.note-hint-item.active'); const $next = $current.next(); if ($next.length) { this.selectItem($next); } else { let $nextGroup = $current.parent().next(); if (!$nextGroup.length) { $nextGroup = this.$content.find('.note-hint-group').first(); } this.selectItem($nextGroup.find('.note-hint-item').first()); } } moveUp() { const $current = this.$content.find('.note-hint-item.active'); const $prev = $current.prev(); if ($prev.length) { this.selectItem($prev); } else { let $prevGroup = $current.parent().prev(); if (!$prevGroup.length) { $prevGroup = this.$content.find('.note-hint-group').last(); } this.selectItem($prevGroup.find('.note-hint-item').last()); } } replace() { const $item = this.$content.find('.note-hint-item.active'); if ($item.length) { const node = this.nodeFromItem($item); // XXX: consider to move codes to editor for recording redo/undo. this.lastWordRange.insertNode(node); range.createFromNode(node).collapse().select(); this.lastWordRange = null; this.hide(); this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]); this.context.invoke('editor.focus'); } } nodeFromItem($item) { const hint = this.hints[$item.data('index')]; const item = $item.data('item'); let node = hint.content ? hint.content(item) : item; if (typeof node === 'string') { node = dom.createText(node); } return node; } createItemTemplates(hintIdx, items) { const hint = this.hints[hintIdx]; return items.map((item, idx) => { const $item = $('<div class="note-hint-item"/>'); $item.append(hint.template ? hint.template(item) : item + ''); $item.data({ 'index': hintIdx, 'item': item }); return $item; }); } handleKeydown(e) { if (!this.$popover.is(':visible')) { return; } if (e.keyCode === key.code.ENTER) { e.preventDefault(); this.replace(); } else if (e.keyCode === key.code.UP) { e.preventDefault(); this.moveUp(); } else if (e.keyCode === key.code.DOWN) { e.preventDefault(); this.moveDown(); } } searchKeyword(index, keyword, callback) { const hint = this.hints[index]; if (hint && hint.match.test(keyword) && hint.search) { const matches = hint.match.exec(keyword); hint.search(matches[1], callback); } else { callback(); } } createGroup(idx, keyword) { const $group = $('<div class="note-hint-group note-hint-group-' + idx + '"/>'); this.searchKeyword(idx, keyword, (items) => { items = items || []; if (items.length) { $group.html(this.createItemTemplates(idx, items)); this.show(); } }); return $group; } handleKeyup(e) { if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) { const wordRange = this.context.invoke('editor.createRange').getWordRange(); const keyword = wordRange.toString(); if (this.hints.length && keyword) { this.$content.empty(); const bnd = func.rect2bnd(lists.last(wordRange.getClientRects())); if (bnd) { this.$popover.hide(); this.lastWordRange = wordRange; this.hints.forEach((hint, idx) => { if (hint.match.test(keyword)) { this.createGroup(idx, keyword).appendTo(this.$content); } }); // select first .note-hint-item this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created if (this.direction === 'top') { this.$popover.css({ left: bnd.left, top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST }); } else { this.$popover.css({ left: bnd.left, top: bnd.top + bnd.height + POPOVER_DIST }); } } } else { this.hide(); } } } show() { this.$popover.show(); } hide() { this.$popover.hide(); } } PKe[�\�`���� src/js/base/module/HelpDialog.jsnu�[���import $ from 'jquery'; import env from '../core/env'; export default class HelpDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } initialize() { const $container = this.options.dialogsInBody ? this.$body : this.$editor; const body = [ '<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote @@VERSION@@</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: body, callback: ($node) => { $node.find('.modal-body,.note-modal-body').css({ 'max-height': 300, 'overflow': 'scroll' }); } }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } createShortcutList() { const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; return Object.keys(keyMap).map((key) => { const command = keyMap[key]; const $row = $('<div><div class="help-list-item"/></div>'); $row.append($('<label><kbd>' + key + '</kdb></label>').css({ 'width': 180, 'margin-right': 10 })).append($('<span/>').html(this.context.memo('help.' + command) || command)); return $row.html(); }).join(''); } /** * show help dialog * * @return {Promise} */ showHelpDialog() { return $.Deferred((deferred) => { this.ui.onDialogShown(this.$dialog, () => { this.context.triggerEvent('dialog.shown'); deferred.resolve(); }); this.ui.showDialog(this.$dialog); }).promise(); } show() { this.context.invoke('editor.saveRange'); this.showHelpDialog().then(() => { this.context.invoke('editor.restoreRange'); }); } } PKe[�\۩��!!src/js/base/module/Clipboard.jsnu�[���import lists from '../core/lists'; export default class Clipboard { constructor(context) { this.context = context; this.$editable = context.layoutInfo.editable; } initialize() { this.$editable.on('paste', this.pasteByEvent.bind(this)); } /** * paste by clipboard event * * @param {Event} event */ pasteByEvent(event) { const clipboardData = event.originalEvent.clipboardData; if (clipboardData && clipboardData.items && clipboardData.items.length) { const item = lists.head(clipboardData.items); if (item.kind === 'file' && item.type.indexOf('image/') !== -1) { this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]); } this.context.invoke('editor.afterCommand'); } } } PKe[�\U�E!``src/js/base/module/Codeview.jsnu�[���import env from '../core/env'; import dom from '../core/dom'; let CodeMirror; if (env.hasCodeMirror) { if (env.isSupportAmd) { require(['codemirror'], function(cm) { CodeMirror = cm; }); } else { CodeMirror = window.CodeMirror; } } /** * @class Codeview */ export default class CodeView { constructor(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.options = context.options; } sync() { const isCodeview = this.isActivated(); if (isCodeview && env.hasCodeMirror) { this.$codable.data('cmEditor').save(); } } /** * @return {Boolean} */ isActivated() { return this.$editor.hasClass('codeview'); } /** * toggle codeview */ toggle() { if (this.isActivated()) { this.deactivate(); } else { this.activate(); } this.context.triggerEvent('codeview.toggled'); } /** * activate code view */ activate() { this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml)); this.$codable.height(this.$editable.height()); this.context.invoke('toolbar.updateCodeview', true); this.$editor.addClass('codeview'); this.$codable.focus(); // activate CodeMirror as codable if (env.hasCodeMirror) { const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer if (this.options.codemirror.tern) { const server = new CodeMirror.TernServer(this.options.codemirror.tern); cmEditor.ternServer = server; cmEditor.on('cursorActivity', (cm) => { server.updateArgHints(cm); }); } cmEditor.on('blur', (event) => { this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event); }); // CodeMirror hasn't Padding. cmEditor.setSize(null, this.$editable.outerHeight()); this.$codable.data('cmEditor', cmEditor); } else { this.$codable.on('blur', (event) => { this.context.triggerEvent('blur.codeview', this.$codable.val(), event); }); } } /** * deactivate code view */ deactivate() { // deactivate CodeMirror as codable if (env.hasCodeMirror) { const cmEditor = this.$codable.data('cmEditor'); this.$codable.val(cmEditor.getValue()); cmEditor.toTextArea(); } const value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara; const isChange = this.$editable.html() !== value; this.$editable.html(value); this.$editable.height(this.options.height ? this.$codable.height() : 'auto'); this.$editor.removeClass('codeview'); if (isChange) { this.context.triggerEvent('change', this.$editable.html(), this.$editable); } this.$editable.focus(); this.context.invoke('toolbar.updateCodeview', false); } destroy() { if (this.isActivated()) { this.deactivate(); } } } PKe[�\[G@R src/js/base/module/AirPopover.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; const AIR_MODE_POPOVER_X_OFFSET = 20; export default class AirPopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.scroll': () => { this.update(); }, 'summernote.disable summernote.change summernote.dialog.shown': () => { this.hide(); }, 'summernote.focusout': (we, e) => { // [workaround] Firefox doesn't support relatedTarget on focusout // - Ignore hide action on focus out in FF. if (env.isFF) { return; } if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(this.$popover[0]))) { this.hide(); } } }; } shouldInitialize() { return this.options.airMode && !lists.isEmpty(this.options.popover.air); } initialize() { this.$popover = this.ui.popover({ className: 'note-air-popover' }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.air); } destroy() { this.$popover.remove(); } update() { const styleInfo = this.context.invoke('editor.currentStyle'); if (styleInfo.range && !styleInfo.range.isCollapsed()) { const rect = lists.last(styleInfo.range.getClientRects()); if (rect) { const bnd = func.rect2bnd(rect); this.$popover.css({ display: 'block', left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, top: bnd.top + bnd.height }); this.context.invoke('buttons.updateCurrentStyle', this.$popover); } } else { this.hide(); } } hide() { this.$popover.hide(); } } PKe[�\ ���src/js/base/module/AutoLink.jsnu�[���import $ from 'jquery'; import lists from '../core/lists'; import key from '../core/key'; const defaultScheme = 'http://'; const linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; export default class AutoLink { constructor(context) { this.context = context; this.events = { 'summernote.keyup': (we, e) => { if (!e.isDefaultPrevented()) { this.handleKeyup(e); } }, 'summernote.keydown': (we, e) => { this.handleKeydown(e); } }; } initialize() { this.lastWordRange = null; } destroy() { this.lastWordRange = null; } replace() { if (!this.lastWordRange) { return; } const keyword = this.lastWordRange.toString(); const match = keyword.match(linkPattern); if (match && (match[1] || match[2])) { const link = match[1] ? keyword : defaultScheme + keyword; const node = $('<a />').html(keyword).attr('href', link)[0]; this.lastWordRange.insertNode(node); this.lastWordRange = null; this.context.invoke('editor.focus'); } } handleKeydown(e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { const wordRange = this.context.invoke('editor.createRange').getWordRange(); this.lastWordRange = wordRange; } } handleKeyup(e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { this.replace(); } } } PKe[�\ Q���src/js/base/module/Statusbar.jsnu�[���import $ from 'jquery'; const EDITABLE_PADDING = 24; export default class Statusbar { constructor(context) { this.$document = $(document); this.$statusbar = context.layoutInfo.statusbar; this.$editable = context.layoutInfo.editable; this.options = context.options; } initialize() { if (this.options.airMode || this.options.disableResizeEditor) { this.destroy(); return; } this.$statusbar.on('mousedown', (event) => { event.preventDefault(); event.stopPropagation(); const editableTop = this.$editable.offset().top - this.$document.scrollTop(); const onMouseMove = (event) => { let height = event.clientY - (editableTop + EDITABLE_PADDING); height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height; height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height; this.$editable.height(height); }; this.$document.on('mousemove', onMouseMove).one('mouseup', () => { this.$document.off('mousemove', onMouseMove); }); }); } destroy() { this.$statusbar.off(); this.$statusbar.addClass('locked'); } } PKe[�\L��ff src/js/base/module/LinkDialog.jsnu�[���import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; export default class LinkDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']); } initialize() { const $container = this.options.dialogsInBody ? this.$body : this.$editor; const body = [ '<div class="form-group note-form-group">', `<label class="note-form-label">${this.lang.link.textToDisplay}</label>`, '<input class="note-link-text form-control note-form-control note-input" type="text" />', '</div>', '<div class="form-group note-form-group">', `<label class="note-form-label">${this.lang.link.url}</label>`, '<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />', '</div>', !this.options.disableLinkTarget ? $('<div/>').append(this.ui.checkbox({ id: 'sn-checkbox-open-in-new-window', text: this.lang.link.openInNewWindow, checked: true }).render()).html() : '' ].join(''); const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn'; const footer = `<button type="submit" href="#" class="${buttonClass}" disabled>${this.lang.link.insert}</button>`; this.$dialog = this.ui.dialog({ className: 'link-dialog', title: this.lang.link.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } bindEnterKey($input, $btn) { $input.on('keypress', (event) => { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); } /** * toggle update button */ toggleLinkBtn($linkBtn, $linkText, $linkUrl) { this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val()); } /** * Show link dialog and set event handlers on dialog controls. * * @param {Object} linkInfo * @return {Promise} */ showLinkDialog(linkInfo) { return $.Deferred((deferred) => { const $linkText = this.$dialog.find('.note-link-text'); const $linkUrl = this.$dialog.find('.note-link-url'); const $linkBtn = this.$dialog.find('.note-link-btn'); const $openInNewWindow = this.$dialog.find('input[type=checkbox]'); this.ui.onDialogShown(this.$dialog, () => { this.context.triggerEvent('dialog.shown'); // if no url was given, copy text to url if (!linkInfo.url) { linkInfo.url = linkInfo.text; } $linkText.val(linkInfo.text); const handleLinkTextUpdate = () => { this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // if linktext was modified by keyup, // stop cloning text from linkUrl linkInfo.text = $linkText.val(); }; $linkText.on('input', handleLinkTextUpdate).on('paste', () => { setTimeout(handleLinkTextUpdate, 0); }); const handleLinkUrlUpdate = () => { this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // display same link on `Text to display` input // when create a new link if (!linkInfo.text) { $linkText.val($linkUrl.val()); } }; $linkUrl.on('input', handleLinkUrlUpdate).on('paste', () => { setTimeout(handleLinkUrlUpdate, 0); }).val(linkInfo.url); if (!env.isSupportTouch) { $linkUrl.trigger('focus'); } this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); this.bindEnterKey($linkUrl, $linkBtn); this.bindEnterKey($linkText, $linkBtn); const isChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : this.context.options.linkTargetBlank; $openInNewWindow.prop('checked', isChecked); $linkBtn.one('click', (event) => { event.preventDefault(); deferred.resolve({ range: linkInfo.range, url: $linkUrl.val(), text: $linkText.val(), isNewWindow: $openInNewWindow.is(':checked') }); this.ui.hideDialog(this.$dialog); }); }); this.ui.onDialogHidden(this.$dialog, () => { // detach events $linkText.off('input paste keypress'); $linkUrl.off('input paste keypress'); $linkBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); this.ui.showDialog(this.$dialog); }).promise(); } /** * @param {Object} layoutInfo */ show() { const linkInfo = this.context.invoke('editor.getLinkInfo'); this.context.invoke('editor.saveRange'); this.showLinkDialog(linkInfo).then((linkInfo) => { this.context.invoke('editor.restoreRange'); this.context.invoke('editor.createLink', linkInfo); }).fail(() => { this.context.invoke('editor.restoreRange'); }); } } PKe[�\$����src/js/base/summernote-en-US.jsnu�[���import $ from 'jquery'; $.summernote = $.summernote || { lang: {} }; $.extend($.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' }, image: { image: 'Picture', insert: 'Insert Image', resizeFull: 'Resize Full', resizeHalf: 'Resize Half', resizeQuarter: 'Resize Quarter', floatLeft: 'Float Left', floatRight: 'Float Right', floatNone: 'Float None', 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' }, 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: 'Foreground Color', transparent: 'Transparent', setTransparent: 'Set transparent', reset: 'Reset', resetToDefault: 'Reset to default' }, 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' } } }); PKe[�\��P��src/js/summernote.jsnu�[���import $ from 'jquery'; import env from './base/core/env'; import lists from './base/core/lists'; import Context from './base/Context'; $.fn.extend({ /** * Summernote API * * @param {Object|String} * @return {this} */ summernote: function() { const type = $.type(lists.head(arguments)); const isExternalAPICalled = type === 'string'; const hasInitOptions = type === 'object'; const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons); options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip; this.each((idx, note) => { const $note = $(note); if (!$note.data('summernote')) { const context = new Context($note, options); $note.data('summernote', context); $note.data('summernote').triggerEvent('init', context.layoutInfo); } }); const $note = this.first(); if ($note.length) { const context = $note.data('summernote'); if (isExternalAPICalled) { return context.invoke.apply(context, lists.from(arguments)); } else if (options.focus) { context.invoke('editor.focus'); } } return this; } }); PKe[�\�i��src/js/lite/ui/PopoverUI.jsnu�[���class PopoverUI { constructor($node, options) { this.$node = $node; this.options = $.extend({}, { title: '', content: '', target: options.container, trigger: 'hover focus', placement: 'bottom' }, options); // create popover node this.$popover = $([ '<div class="note-popover in">', ' <div class="note-popover-arrow" />', ' <div class="note-popover-content" />', '</div>' ].join('')); // define event if (this.options.trigger !== 'manual') { const showCallback = this.show.bind(this); const hideCallback = this.hide.bind(this); const toggleCallback = this.toggle.bind(this); this.options.trigger.split(' ').forEach(function(eventName) { if (eventName === 'hover') { $node.off('mouseenter').on('mouseenter', showCallback); $node.off('mouseleave').on('mouseleave', hideCallback); } else if (eventName === 'click') { $node.on('click', toggleCallback); } else if (eventName === 'focus') { $node.on('focus', showCallback); $node.on('blur', hideCallback); } }); } } show() { const $node = this.$node; const offset = $node.offset(); const $popover = this.$popover; const content = this.options.content || $node.data('content'); const placement = $node.data('placement') || this.options.placement; const dist = 6; $popover.addClass(placement); $popover.addClass('in'); $popover.find('.note-popover-content').html(content); $popover.appendTo(this.options.target); const nodeWidth = $node.outerWidth(); const nodeHeight = $node.outerHeight(); const popoverWidth = $popover.outerWidth(); const popoverHeight = $popover.outerHeight(); if (placement === 'bottom') { $popover.css({ top: offset.top + nodeHeight + dist, left: offset.left + (nodeWidth / 2 - popoverWidth / 2) }); } else if (placement === 'top') { $popover.css({ top: offset.top - popoverHeight - dist, left: offset.left + (nodeWidth / 2 - popoverWidth / 2) }); } else if (placement === 'left') { $popover.css({ top: offset.top + (nodeHeight / 2 - popoverHeight / 2), left: offset.left - popoverWidth - dist }); } else if (placement === 'right') { $popover.css({ top: offset.top + (nodeHeight / 2 - popoverHeight / 2), left: offset.left + nodeWidth + dist }); } } hide() { this.$popover.removeClass('in'); this.$popover.remove(); } toggle() { if (this.$popover.hasClass('in')) { this.hide(); } else { this.show(); } } } export default PopoverUI; PKe[�\3�o��src/js/lite/ui/ModalUI.jsnu�[���class ModalUI { constructor($node, options) { this.options = $.extend({}, { target: options.container || 'body' }, options); this.$modal = $node; this.$backdrop = $('<div class="note-modal-backdrop" />'); } show() { if (this.options.target === 'body') { this.$backdrop.css('position', 'fixed'); this.$modal.css('position', 'fixed'); } else { this.$backdrop.css('position', 'absolute'); this.$modal.css('position', 'absolute'); } this.$backdrop.appendTo(this.options.target).show(); this.$modal.appendTo(this.options.target).addClass('open').show(); this.$modal.trigger('note.modal.show'); this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this)); } hide() { this.$modal.removeClass('open').hide(); this.$backdrop.hide(); this.$modal.trigger('note.modal.hide'); } } export default ModalUI; PKe[�\<N7D� � src/js/lite/ui/TooltipUI.jsnu�[���class TooltipUI { constructor($node, options) { this.$node = $node; this.options = $.extend({}, { title: '', target: options.container, trigger: 'hover focus', placement: 'bottom' }, options); // create tooltip node this.$tooltip = $([ '<div class="note-tooltip in">', ' <div class="note-tooltip-arrow"/>', ' <div class="note-tooltip-content"/>', '</div>' ].join('')); // define event if (this.options.trigger !== 'manual') { const showCallback = this.show.bind(this); const hideCallback = this.hide.bind(this); const toggleCallback = this.toggle.bind(this); this.options.trigger.split(' ').forEach(function(eventName) { if (eventName === 'hover') { $node.off('mouseenter mouseleave'); $node.on('mouseenter', showCallback).on('mouseleave', hideCallback); } else if (eventName === 'click') { $node.on('click', toggleCallback); } else if (eventName === 'focus') { $node.on('focus', showCallback).on('blur', hideCallback); } }); } } show() { const $node = this.$node; const offset = $node.offset(); const $tooltip = this.$tooltip; const title = this.options.title || $node.attr('title') || $node.data('title'); const placement = this.options.placement || $node.data('placement'); $tooltip.addClass(placement); $tooltip.addClass('in'); $tooltip.find('.note-tooltip-content').text(title); $tooltip.appendTo(this.options.target); const nodeWidth = $node.outerWidth(); const nodeHeight = $node.outerHeight(); const tooltipWidth = $tooltip.outerWidth(); const tooltipHeight = $tooltip.outerHeight(); if (placement === 'bottom') { $tooltip.css({ top: offset.top + nodeHeight, left: offset.left + (nodeWidth / 2 - tooltipWidth / 2) }); } else if (placement === 'top') { $tooltip.css({ top: offset.top - tooltipHeight, left: offset.left + (nodeWidth / 2 - tooltipWidth / 2) }); } else if (placement === 'left') { $tooltip.css({ top: offset.top + (nodeHeight / 2 - tooltipHeight / 2), left: offset.left - tooltipWidth }); } else if (placement === 'right') { $tooltip.css({ top: offset.top + (nodeHeight / 2 - tooltipHeight / 2), left: offset.left + nodeWidth }); } } hide() { this.$tooltip.removeClass('in'); this.$tooltip.remove(); } toggle() { if (this.$tooltip.hasClass('in')) { this.hide(); } else { this.show(); } } } export default TooltipUI; PKe[�\�?T5ddsrc/js/lite/ui/DropdownUI.jsnu�[���class DropdownUI { constructor($node, options) { this.$button = $node; this.options = $.extend({}, { target: options.container }, options); this.setEvent(); } setEvent() { this.$button.on('click', this.toggle.bind(this)); } clear() { var $parent = $('.note-btn-group.open'); $parent.find('.note-btn.active').removeClass('active'); $parent.removeClass('open'); } show() { this.$button.addClass('active'); this.$button.parent().addClass('open'); var $dropdown = this.$button.next(); var offset = $dropdown.offset(); var width = $dropdown.outerWidth(); var windowWidth = $(window).width(); var targetMarginRight = parseFloat($(this.options.target).css('margin-right')); if (offset.left + width > windowWidth - targetMarginRight) { $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width)); } else { $dropdown.css('margin-left', ''); } } hide() { this.$button.removeClass('active'); this.$button.parent().removeClass('open'); } toggle() { var isOpened = this.$button.parent().hasClass('open'); this.clear(); if (isOpened) { this.hide(); } else { this.show(); } } } $(document).on('click', function(e) { if (!$(e.target).closest('.note-btn-group').length) { $('.note-btn-group.open').removeClass('open'); } }); $(document).on('click.note-dropdown-menu', function(e) { $(e.target).closest('.note-dropdown-menu').parent().removeClass('open'); }); export default DropdownUI; PKe[�\R�%((src/js/lite/settings.jsnu�[���import $ from 'jquery'; import ui from './ui'; import '../base/summernote-en-US'; import Editor from '../base/module/Editor'; import Clipboard from '../base/module/Clipboard'; import Dropzone from '../base/module/Dropzone'; import Codeview from '../base/module/Codeview'; import Statusbar from '../base/module/Statusbar'; import Fullscreen from '../base/module/Fullscreen'; import Handle from '../base/module/Handle'; import AutoLink from '../base/module/AutoLink'; import AutoSync from '../base/module/AutoSync'; import Placeholder from '../base/module/Placeholder'; import Buttons from '../base/module/Buttons'; import Toolbar from '../base/module/Toolbar'; import LinkDialog from '../base/module/LinkDialog'; import LinkPopover from '../base/module/LinkPopover'; import ImageDialog from '../base/module/ImageDialog'; import ImagePopover from '../base/module/ImagePopover'; import TablePopover from '../base/module/TablePopover'; import VideoDialog from '../base/module/VideoDialog'; import HelpDialog from '../base/module/HelpDialog'; import AirPopover from '../base/module/AirPopover'; import HintPopover from '../base/module/HintPopover'; $.summernote = $.extend($.summernote, { version: '@@VERSION@@', ui: ui, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': Codeview, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['fontsize', ['fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: ['p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onSubmit: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); import '../summernote'; // eslint-disable-line PKe[�\m� LNNsrc/js/lite/ui.jsnu�[���import renderer from '../base/renderer'; import TooltipUI from './ui/TooltipUI'; import DropdownUI from './ui/DropdownUI'; import ModalUI from './ui/ModalUI'; const editor = renderer.create('<div class="note-editor note-frame"/>'); const toolbar = renderer.create('<div class="note-toolbar" role="toolbar"/>'); const editingArea = renderer.create('<div class="note-editing-area"/>'); const codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); const editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'); const statusbar = renderer.create([ '<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-statusbar" role="resize">', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); const airEditor = renderer.create('<div class="note-editor"/>'); const airEditable = renderer.create([ '<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); const buttonGroup = renderer.create('<div class="note-btn-group">'); const button = renderer.create('<button type="button" class="note-btn" role="button" tabindex="-1">', function($node, options) { // set button type if (options && options.tooltip) { $node.attr({ 'aria-label': options.tooltip }); $node.data('_lite_tooltip', new TooltipUI($node, { title: options.tooltip, container: options.container })); } if (options.contents) { $node.html(options.contents); } if (options && options.data && options.data.toggle === 'dropdown') { $node.data('_lite_dropdown', new DropdownUI($node, { container: options.container })); } }); const dropdown = renderer.create('<div class="note-dropdown-menu" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (item.value || ''); const content = options.template ? options.template(item) : item; const $temp = $('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>'); $temp.html(content).data('item', item); return $temp; }) : options.items; $node.html(markup).attr({'aria-label': options.title}); $node.on('click', '> .note-dropdown-item', function(e) { const $a = $(this); const item = $a.data('item'); const value = $a.data('value'); if (item.click) { item.click($a); } else if (options.itemClick) { options.itemClick(e, item, value); } }); }); const dropdownCheck = renderer.create('<div class="note-dropdown-menu note-check" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (item.value || ''); const content = options.template ? options.template(item) : item; const $temp = $('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>'); $temp.html([icon(options.checkClassName), ' ', content]).data('item', item); return $temp; }) : options.items; $node.html(markup).attr({'aria-label': options.title}); $node.on('click', '> .note-dropdown-item', function(e) { const $a = $(this); const item = $a.data('item'); const value = $a.data('value'); if (item.click) { item.click($a); } else if (options.itemClick) { options.itemClick(e, item, value); } }); }); const dropdownButtonContents = function(contents, options) { return contents + ' ' + icon(options.icons.caret, 'span'); }; const dropdownButton = function(opt, callback) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown({ className: opt.className, items: opt.items, template: opt.template, itemClick: opt.itemClick }) ], { callback: callback }).render(); }; const dropdownCheckButton = function(opt, callback) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdownCheck({ className: opt.className, checkClassName: opt.checkClassName, items: opt.items, template: opt.template, itemClick: opt.itemClick }) ], { callback: callback }).render(); }; const paragraphDropdownButton = function(opt) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown([ buttonGroup({ className: 'note-align', children: opt.items[0] }), buttonGroup({ className: 'note-list', children: opt.items[1] }) ]) ]).render(); }; const tableMoveHandler = function(event, col, row) { const PX_PER_EM = 18; const $picker = $(event.target.parentNode); // target is mousecatcher const $dimensionDisplay = $picker.next(); const $catcher = $picker.find('.note-dimension-picker-mousecatcher'); const $highlighted = $picker.find('.note-dimension-picker-highlighted'); const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); let posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox if (event.offsetX === undefined) { const posCatcher = $(event.target).offset(); posOffset = { x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { posOffset = { x: event.offsetX, y: event.offsetY }; } const dim = { c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); $catcher.data('value', dim.c + 'x' + dim.r); if (dim.c > 3 && dim.c < col) { $unhighlighted.css({ width: dim.c + 1 + 'em' }); } if (dim.r > 3 && dim.r < row) { $unhighlighted.css({ height: dim.r + 1 + 'em' }); } $dimensionDisplay.html(dim.c + ' x ' + dim.r); }; const tableDropdownButton = function(opt) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown({ className: 'note-table', items: [ '<div class="note-dimension-picker">', ' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>', ' <div class="note-dimension-picker-highlighted"/>', ' <div class="note-dimension-picker-unhighlighted"/>', '</div>', '<div class="note-dimension-display">1 x 1</div>' ].join('') }) ], { callback: function($node) { const $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: opt.col + 'em', height: opt.row + 'em' }) .mousedown(opt.itemClick) .mousemove(function(e) { tableMoveHandler(e, opt.col, opt.row); }); } }).render(); }; const palette = renderer.create('<div class="note-color-palette"/>', function($node, options) { const contents = []; for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) { const eventName = options.eventName; const colors = options.colors[row]; const colorsName = options.colorsName[row]; const buttons = []; for (let col = 0, colSize = colors.length; col < colSize; col++) { const color = colors[col]; const colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-btn note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); $node.find('.note-color-btn').each(function() { $(this).data('_lite_tooltip', new TooltipUI($(this), { container: options.container })); }); }); const colorDropdownButton = function(opt, type) { return buttonGroup({ className: 'note-color', children: [ button({ className: 'note-current-color-button', contents: opt.title, tooltip: opt.lang.color.recent, click: opt.currentClick, callback: function($button) { const $recentColor = $button.find('.note-recent-color'); if (type !== 'foreColor') { $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } } }), button({ className: 'dropdown-toggle', contents: icon('note-icon-caret'), tooltip: opt.lang.color.more, data: { toggle: 'dropdown' } }), dropdown({ items: [ '<div>', '<div class="note-btn-group btn-background-color">', ' <div class="note-palette-title">' + opt.lang.color.background + '</div>', ' <div>', '<button type="button" class="note-color-reset note-btn note-btn-block" ' + ' data-event="backColor" data-value="inherit">', opt.lang.color.transparent, ' </button>', ' </div>', ' <div class="note-holder" data-event="backColor"/>', '</div>', '<div class="note-btn-group btn-foreground-color">', ' <div class="note-palette-title">' + opt.lang.color.foreground + '</div>', ' <div>', '<button type="button" class="note-color-reset note-btn note-btn-block" ' + ' data-event="removeFormat" data-value="foreColor">', opt.lang.color.resetToDefault, ' </button>', ' </div>', ' <div class="note-holder" data-event="foreColor"/>', '</div>', '</div>' ].join(''), callback: function($dropdown) { $dropdown.find('.note-holder').each(function() { const $holder = $(this); $holder.append(palette({ colors: opt.colors, eventName: $holder.data('event') }).render()); }); if (type === 'fore') { $dropdown.find('.btn-background-color').hide(); $dropdown.css({ 'min-width': '210px' }); } else if (type === 'back') { $dropdown.find('.btn-foreground-color').hide(); $dropdown.css({ 'min-width': '210px' }); } }, click: function(event) { const $button = $(event.target); const eventName = $button.data('event'); const value = $button.data('value'); if (eventName && value) { const key = eventName === 'backColor' ? 'background-color' : 'color'; const $color = $button.closest('.note-color').find('.note-recent-color'); const $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); if (type === 'fore') { opt.itemClick('foreColor', value); } else if (type === 'back') { opt.itemClick('backColor', value); } else { opt.itemClick(eventName, value); } } } }) ] }).render(); }; const dialog = renderer.create('<div class="note-modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function($node, options) { if (options.fade) { $node.addClass('fade'); } $node.attr({ 'aria-label': options.title }); $node.html([ ' <div class="note-modal-content">', (options.title ? ' <div class="note-modal-header">' + ' <button type="button" class="close" aria-label="Close" aria-hidden="true"><i class="note-icon-close"></i></button>' + ' <h4 class="note-modal-title">' + options.title + '</h4>' + ' </div>' : '' ), ' <div class="note-modal-body">' + options.body + '</div>', (options.footer ? ' <div class="note-modal-footer">' + options.footer + '</div>' : '' ), ' </div>' ].join('')); $node.data('modal', new ModalUI($node, options)); }); const videoDialog = function(opt) { const body = '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.video.url + ' <small class="text-muted">' + opt.lang.video.providers + '</small>' + '</label>' + '<input class="note-video-url note-input" type="text" />' + '</div>'; const footer = [ '<button type="button" href="#" class="note-btn note-btn-primary note-video-btn disabled" disabled>', opt.lang.video.insert, '</button>' ].join(''); return dialog({ title: opt.lang.video.insert, fade: opt.fade, body: body, footer: footer }).render(); }; const imageDialog = function(opt) { const body = '<div class="note-form-group note-group-select-from-files">' + '<label class="note-form-label">' + opt.lang.image.selectFromFiles + '</label>' + '<input class="note-note-image-input note-input" type="file" name="files" accept="image/*" multiple="multiple" />' + opt.imageLimitation + '</div>' + '<div class="note-form-group" style="overflow:auto;">' + '<label class="note-form-label">' + opt.lang.image.url + '</label>' + '<input class="note-image-url note-input" type="text" />' + '</div>'; const footer = [ '<button href="#" type="button" class="note-btn note-btn-primary note-btn-large note-image-btn disabled" disabled>', opt.lang.image.insert, '</button>' ].join(''); return dialog({ title: opt.lang.image.insert, fade: opt.fade, body: body, footer: footer }).render(); }; const linkDialog = function(opt) { const body = '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.link.textToDisplay + '</label>' + '<input class="note-link-text note-input" type="text" />' + '</div>' + '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.link.url + '</label>' + '<input class="note-link-url note-input" type="text" value="http://" />' + '</div>' + (!opt.disableLinkTarget ? '<div class="checkbox">' + '<label>' + '<input type="checkbox" checked> ' + opt.lang.link.openInNewWindow + '</label>' + '</div>' : '' ); const footer = [ '<button href="#" type="button" class="note-btn note-btn-primary note-link-btn disabled" disabled>', opt.lang.link.insert, '</button>' ].join(''); return dialog({ className: 'link-dialog', title: opt.lang.link.insert, fade: opt.fade, body: body, footer: footer }).render(); }; const popover = renderer.create([ '<div class="note-popover bottom">', ' <div class="note-popover-arrow"/>', ' <div class="note-popover-content note-children-container"/>', '</div>' ].join(''), function($node, options) { const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; $node.addClass(direction).hide(); if (options.hideArrow) { $node.find('.note-popover-arrow').hide(); } }); const checkbox = renderer.create('<div class="checkbox"></div>', function($node, options) { $node.html([ ' <label' + (options.id ? ' for="' + options.id + '"' : '') + '>', ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', (options.text ? options.text : ''), '</label>' ].join('')); }); const icon = function(iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; const ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, button: button, dropdown: dropdown, dropdownCheck: dropdownCheck, dropdownButton: dropdownButton, dropdownButtonContents: dropdownButtonContents, dropdownCheckButton: dropdownCheckButton, paragraphDropdownButton: paragraphDropdownButton, tableDropdownButton: tableDropdownButton, colorDropdownButton: colorDropdownButton, palette: palette, dialog: dialog, videoDialog: videoDialog, imageDialog: imageDialog, linkDialog: linkDialog, popover: popover, checkbox: checkbox, icon: icon, toggleBtn: function($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function($btn, isActive) { $btn.toggleClass('active', isActive); }, check: function($dom, value) { $dom.find('.checked').removeClass('checked'); $dom.find('[data-value="' + value + '"]').addClass('checked'); }, onDialogShown: function($dialog, handler) { $dialog.one('note.modal.show', handler); }, onDialogHidden: function($dialog, handler) { $dialog.one('note.modal.hide', handler); }, showDialog: function($dialog) { $dialog.data('modal').show(); }, hideDialog: function($dialog) { $dialog.data('modal').hide(); }, /** * get popover content area * * @param $popover * @returns {*} */ getPopoverContent: function($popover) { return $popover.find('.note-popover-content'); }, /** * get dialog's body area * * @param $dialog * @returns {*} */ getDialogBody: function($dialog) { return $dialog.find('.note-modal-body'); }, createLayout: function($note, options) { const $editor = (options.airMode ? ui.airEditor([ ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.off('summernote'); // remove summernote custom event $note.show(); } }; export default ui; PKe[�\K��@(@(src/js/bs3/settings.jsnu�[���import $ from 'jquery'; import ui from '../bs3/ui'; import dom from '../base/core/dom'; import '../base/summernote-en-US'; import Editor from '../base/module/Editor'; import Clipboard from '../base/module/Clipboard'; import Dropzone from '../base/module/Dropzone'; import Codeview from '../base/module/Codeview'; import Statusbar from '../base/module/Statusbar'; import Fullscreen from '../base/module/Fullscreen'; import Handle from '../base/module/Handle'; import AutoLink from '../base/module/AutoLink'; import AutoSync from '../base/module/AutoSync'; import Placeholder from '../base/module/Placeholder'; import Buttons from '../base/module/Buttons'; import Toolbar from '../base/module/Toolbar'; import LinkDialog from '../base/module/LinkDialog'; import LinkPopover from '../base/module/LinkPopover'; import ImageDialog from '../base/module/ImageDialog'; import ImagePopover from '../base/module/ImagePopover'; import TablePopover from '../base/module/TablePopover'; import VideoDialog from '../base/module/VideoDialog'; import HelpDialog from '../base/module/HelpDialog'; import AirPopover from '../base/module/AirPopover'; import HintPopover from '../base/module/HintPopover'; $.summernote = $.extend($.summernote, { version: '@@VERSION@@', ui: ui, dom: dom, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': Codeview, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, linkTargetBlank: true, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); import '../summernote'; // eslint-disable-line PKe[�\Dѯj� � src/js/bs3/ui.jsnu�[���import $ from 'jquery'; import renderer from '../base/renderer'; const editor = renderer.create('<div class="note-editor note-frame panel"/>'); const toolbar = renderer.create('<div class="note-toolbar-wrapper panel-default"><div class="note-toolbar panel-heading" role="toolbar"></div></div>'); const editingArea = renderer.create('<div class="note-editing-area"/>'); const codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); const editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'); const statusbar = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-statusbar" role="status">', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); const airEditor = renderer.create('<div class="note-editor"/>'); const airEditable = renderer.create([ ' <output class="note-status-output" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); const buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); const dropdown = renderer.create('<ul class="dropdown-menu" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (item.value || ''); const content = options.template ? options.template(item) : item; const option = (typeof item === 'object') ? item.option : undefined; const dataValue = 'data-value="' + value + '"'; const dataOption = (option !== undefined) ? ' data-option="' + option + '"' : ''; return '<li role="listitem" aria-label="' + item + '"><a href="#" ' + (dataValue + dataOption) + '>' + content + '</a></li>'; }).join('') : options.items; $node.html(markup).attr({'aria-label': options.title}); }); const dropdownButtonContents = function(contents, options) { return contents + ' ' + icon(options.icons.caret, 'span'); }; const dropdownCheck = renderer.create('<ul class="dropdown-menu note-check" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (item.value || ''); const content = options.template ? options.template(item) : item; return '<li role="listitem" aria-label="' + item + '"><a href="#" data-value="' + value + '">' + icon(options.checkClassName) + ' ' + content + '</a></li>'; }).join('') : options.items; $node.html(markup).attr({'aria-label': options.title}); }); const palette = renderer.create('<div class="note-color-palette"/>', function($node, options) { const contents = []; for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) { const eventName = options.eventName; const colors = options.colors[row]; const colorsName = options.colorsName[row]; const buttons = []; for (let col = 0, colSize = colors.length; col < colSize; col++) { const color = colors[col]; const colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); if (options.tooltip) { $node.find('.note-color-btn').tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } }); const dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function($node, options) { if (options.fade) { $node.addClass('fade'); } $node.attr({ 'aria-label': options.title }); $node.html([ '<div class="modal-dialog">', ' <div class="modal-content">', (options.title ? ' <div class="modal-header">' + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>' + ' <h4 class="modal-title">' + options.title + '</h4>' + ' </div>' : '' ), ' <div class="modal-body">' + options.body + '</div>', (options.footer ? ' <div class="modal-footer">' + options.footer + '</div>' : '' ), ' </div>', '</div>' ].join('')); }); const popover = renderer.create([ '<div class="note-popover popover in">', ' <div class="arrow"/>', ' <div class="popover-content note-children-container"/>', '</div>' ].join(''), function($node, options) { const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; $node.addClass(direction); if (options.hideArrow) { $node.find('.arrow').hide(); } }); const checkbox = renderer.create('<div class="checkbox"></div>', function($node, options) { $node.html([ ' <label' + (options.id ? ' for="' + options.id + '"' : '') + '>', ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', (options.text ? options.text : ''), '</label>' ].join('')); }); const icon = function(iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; const ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, dropdown: dropdown, dropdownButtonContents: dropdownButtonContents, dropdownCheck: dropdownCheck, palette: palette, dialog: dialog, popover: popover, checkbox: checkbox, icon: icon, options: {}, button: function($node, options) { return renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">', function($node, options) { if (options && options.tooltip) { $node.attr({ title: options.tooltip, 'aria-label': options.tooltip }).tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } })($node, options); }, toggleBtn: function($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function($btn, isActive) { $btn.toggleClass('active', isActive); }, onDialogShown: function($dialog, handler) { $dialog.one('shown.bs.modal', handler); }, onDialogHidden: function($dialog, handler) { $dialog.one('hidden.bs.modal', handler); }, showDialog: function($dialog) { $dialog.modal('show'); }, hideDialog: function($dialog) { $dialog.modal('hide'); }, createLayout: function($note, options) { const $editor = (options.airMode ? ui.airEditor([ ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.show(); } }; export default ui; PKe[�\CK)V�(�(src/js/bs4/settings.jsnu�[���import $ from 'jquery'; import ui from '../bs4/ui'; import dom from '../base/core/dom'; import '../base/summernote-en-US'; import Editor from '../base/module/Editor'; import Clipboard from '../base/module/Clipboard'; import Dropzone from '../base/module/Dropzone'; import Codeview from '../base/module/Codeview'; import Statusbar from '../base/module/Statusbar'; import Fullscreen from '../base/module/Fullscreen'; import Handle from '../base/module/Handle'; import AutoLink from '../base/module/AutoLink'; import AutoSync from '../base/module/AutoSync'; import Placeholder from '../base/module/Placeholder'; import Buttons from '../base/module/Buttons'; import Toolbar from '../base/module/Toolbar'; import LinkDialog from '../base/module/LinkDialog'; import LinkPopover from '../base/module/LinkPopover'; import ImageDialog from '../base/module/ImageDialog'; import ImagePopover from '../base/module/ImagePopover'; import TablePopover from '../base/module/TablePopover'; import VideoDialog from '../base/module/VideoDialog'; import HelpDialog from '../base/module/HelpDialog'; import AirPopover from '../base/module/AirPopover'; import HintPopover from '../base/module/HintPopover'; $.summernote = $.extend($.summernote, { version: '@@VERSION@@', ui: ui, dom: dom, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': Codeview, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, linkTargetBlank: true, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: [ 'p', { title: 'Blockquote', tag: 'blockquote', className: 'blockquote', value: 'blockquote' }, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); import '../summernote'; // eslint-disable-line PKe[�\�#Zj!j!src/js/bs4/ui.jsnu�[���import $ from 'jquery'; import renderer from '../base/renderer'; const editor = renderer.create('<div class="note-editor note-frame card"/>'); const toolbar = renderer.create('<div class="note-toolbar-wrapper"><div class="note-toolbar card-header" role="toolbar"></div></div>'); const editingArea = renderer.create('<div class="note-editing-area"/>'); const codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); const editable = renderer.create('<div class="note-editable card-block" contentEditable="true" role="textbox" aria-multiline="true"/>'); const statusbar = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-statusbar" role="status">', ' <output class="note-status-output" aria-live="polite"></output>', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); const airEditor = renderer.create('<div class="note-editor"/>'); const airEditable = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); const buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); const dropdown = renderer.create('<div class="dropdown-menu" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (item.value || ''); const content = options.template ? options.template(item) : item; const option = (typeof item === 'object') ? item.option : undefined; const dataValue = 'data-value="' + value + '"'; const dataOption = (option !== undefined) ? ' data-option="' + option + '"' : ''; return '<a class="dropdown-item" href="#" ' + (dataValue + dataOption) + ' role="listitem" aria-label="' + item + '">' + content + '</a>'; }).join('') : options.items; $node.html(markup).attr({'aria-label': options.title}); }); const dropdownButtonContents = function(contents) { return contents; }; const dropdownCheck = renderer.create('<div class="dropdown-menu note-check" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (item.value || ''); const content = options.template ? options.template(item) : item; return '<a class="dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '">' + icon(options.checkClassName) + ' ' + content + '</a>'; }).join('') : options.items; $node.html(markup).attr({'aria-label': options.title}); }); const palette = renderer.create('<div class="note-color-palette"/>', function($node, options) { const contents = []; for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) { const eventName = options.eventName; const colors = options.colors[row]; const colorsName = options.colorsName[row]; const buttons = []; for (let col = 0, colSize = colors.length; col < colSize; col++) { const color = colors[col]; const colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); if (options.tooltip) { $node.find('.note-color-btn').tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } }); const dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function($node, options) { if (options.fade) { $node.addClass('fade'); } $node.attr({ 'aria-label': options.title }); $node.html([ '<div class="modal-dialog">', ' <div class="modal-content">', (options.title ? ' <div class="modal-header">' + ' <h4 class="modal-title">' + options.title + '</h4>' + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>' + ' </div>' : '' ), ' <div class="modal-body">' + options.body + '</div>', (options.footer ? ' <div class="modal-footer">' + options.footer + '</div>' : '' ), ' </div>', '</div>' ].join('')); }); const popover = renderer.create([ '<div class="note-popover popover in">', ' <div class="arrow"/>', ' <div class="popover-content note-children-container"/>', '</div>' ].join(''), function($node, options) { const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; $node.addClass(direction); if (options.hideArrow) { $node.find('.arrow').hide(); } }); const checkbox = renderer.create('<label class="custom-control custom-checkbox"></label>', function($node, options) { if (options.id) { $node.attr('for', options.id); } $node.html([ ' <input role="checkbox" type="checkbox" class="custom-control-input"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', ' <span class="custom-control-indicator"></span>', ' <span class="custom-control-description">' + (options.text ? options.text : '') + '</span>', '</label>' ].join('')); }); const icon = function(iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; const ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, dropdown: dropdown, dropdownButtonContents: dropdownButtonContents, dropdownCheck: dropdownCheck, palette: palette, dialog: dialog, popover: popover, icon: icon, checkbox: checkbox, options: {}, button: function($node, options) { return renderer.create('<button type="button" class="note-btn btn btn-light btn-sm" role="button" tabindex="-1">', function($node, options) { if (options && options.tooltip) { $node.attr({ title: options.tooltip, 'aria-label': options.tooltip }).tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } })($node, options); }, toggleBtn: function($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function($btn, isActive) { $btn.toggleClass('active', isActive); }, onDialogShown: function($dialog, handler) { $dialog.one('shown.bs.modal', handler); }, onDialogHidden: function($dialog, handler) { $dialog.one('hidden.bs.modal', handler); }, showDialog: function($dialog) { $dialog.modal('show'); }, hideDialog: function($dialog) { $dialog.modal('hide'); }, createLayout: function($note, options) { const $editor = (options.airMode ? ui.airEditor([ ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.show(); } }; export default ui; PKe[�\!-b�?.?.src/less/summernote.scssnu�[���@import "elements.scss"; /* Theme Variables ------------------------------------------*/ $border-color: #a9a9a9; $background-color: #f5f5f5; $img-margin-left: 10px; $img-margin-right: 10px; /* Layout ------------------------------------------*/ .note-editor { position: relative; /* dropzone */ $dropzone-color: lightskyblue; $dropzone-active-color: darken($dropzone-color, 30); .note-dropzone { position: absolute; display: none; z-index: 100; color: $dropzone-color; background-color: #fff; opacity: 0.95; .note-dropzone-message { display: table-cell; vertical-align: middle; text-align: center; font-size: 28px; font-weight: 700; } &.hover { color: $dropzone-active-color; } } &.dragover .note-dropzone { display: table; } .note-editing-area { position: relative; .note-editable { outline: none; sup { vertical-align: super; } sub { vertical-align: sub; } img.note-float-left { margin-right: $img-margin-right; } img.note-float-right { margin-left: $img-margin-left; } } } } /* Frame mode layout ------------------------------------------*/ .note-editor.note-frame { border: 1px solid $border-color; /* codeview mode */ &.codeview { .note-editing-area { .note-editable { display: none; } .note-codable { display: block; } } } .note-editing-area { overflow: hidden; /* editable */ .note-editable { background-color: #fff; color: #000; padding: 10px; overflow: auto; word-wrap: break-word; &[contenteditable="false"] { background-color: #e5e5e5; } } /* codeable */ .note-codable { display: none; width: 100%; padding: 10px; border: none; box-shadow: none; font-family: Menlo, Monaco, monospace, sans-serif; font-size: 14px; color: #ccc; background-color: #222; resize: none; /* override BS2 default style */ @include box-sizing(border-box); @include rounded(0); margin-bottom: 0; } } /* fullscreen mode */ &.fullscreen { position: fixed; top: 0; left: 0; width: 100% !important; z-index: 1050; /* bs3 modal-backdrop: 1030, bs2: 1040 */ .note-editable { background-color: #fff; } .note-resizebar { display: none; } } /* Notifications */ .note-status-output { display: block; width: 100%; font-size: 14px; line-height: 1.42857143; height: 20px; margin-bottom: 0; color: #000; border: 0; border-top: 1px solid #e2e2e2 } .note-status-output:empty { height: 0; border-top:0 solid transparent } .note-status-output .pull-right { float: right !important } .note-status-output .text-muted { color: #777 } .note-status-output .text-primary { color: #286090 } .note-status-output .text-success { color: #3c763d } .note-status-output .text-info { color: #31708f } .note-status-output .text-warning { color: #8a6d3b } .note-status-output .text-danger { color:#a94442 } .note-status-output .alert { margin: -7px 0 0 0; padding: 7px 10px 2px 10px; border-radius: 0; color: #000; background-color: #f5f5f5; } .note-status-output .alert .note-icon{ margin-right:5px } .note-status-output .alert-success { color: #3c763d !important; background-color: #dff0d8 !important; } .note-status-output .alert-info { color: #31708f !important; background-color: #d9edf7 !important; } .note-status-output .alert-warning { color: #8a6d3b !important; background-color: #fcf8e3 !important; } .note-status-output .alert-danger { color: #a94442 !important; background-color: #f2dede !important; } /* statusbar */ .note-statusbar { background-color: $background-color; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top: 1px solid #ddd; .note-resizebar { padding-top: 1px; height: 9px; width: 100%; cursor: ns-resize; .note-icon-bar { width: 20px; margin: 1px auto; border-top: 1px solid $border-color; } } &.locked { .note-resizebar { cursor: default; .note-icon-bar { display: none; } } } } .note-placeholder { padding: 10px; } } /* Popover ------------------------------------------*/ .note-popover.popover { max-width: none; .popover-content { a { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; /* for FF */ vertical-align: middle; /* for FF */ } } .arrow { left: 20px !important; } } /* Popover and Toolbar (Button container) ------------------------------------------*/ .note-popover .popover-content, .panel-heading.note-toolbar { margin: 0; padding: 0 0 5px 5px; &>.btn-group { margin-top: 5px; margin-left: 0; margin-right: 5px; } .btn-group { .note-table { min-width: 0; padding: 5px; .note-dimension-picker { font-size: 18px; .note-dimension-picker-mousecatcher { position: absolute !important; z-index: 3; width: 10em; height: 10em; cursor: pointer; } .note-dimension-picker-unhighlighted { position: relative !important; z-index: 1; width: 5em; height: 5em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } .note-dimension-picker-highlighted { position: absolute !important; z-index: 2; width: 1em; height: 1em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } } } } .note-style { .dropdown-style { blockquote, pre { margin: 0; padding: 5px 10px; } h1, h2, h3, h4, h5, h6, p { margin: 0; padding: 0; } } } .note-color { .dropdown-toggle { width: 20px; padding-left: 5px; } .dropdown-menu { min-width: 340px; .btn-group { margin: 0; &:first-child { margin: 0 5px; } .note-palette-title { font-size: 12px; margin: 2px 7px; text-align: center; border-bottom: 1px solid #eee; } .note-color-reset { font-size: 11px; margin: 3px; padding: 0 3px; cursor: pointer; @include rounded(5px); } .note-color-row { height: 20px; } .note-color-reset:hover { background: #eee; } } } } .note-para { .dropdown-menu { min-width: 216px; padding: 5px; &>div:first-child { margin-right: 5px; } } } /* dropdown-menu for toolbar and popover */ .dropdown-menu { min-width: 90px; /* dropdown-menu right position */ /* http://forrst.com/posts/Bootstrap_right_positioned_dropdown-2KB */ &.right { right: 0; left: auto; &::before { right: 9px; left: auto !important; } &::after { right: 10px; left: auto !important; } } /* dropdown-menu for selectbox */ &.note-check { li a i { color: deepskyblue; visibility: hidden; } li a.checked i { visibility: visible; } } } .note-fontsize-10 { font-size: 10px; } /* color palette for toolbar and popover */ .note-color-palette { line-height: 1; div { .note-color-btn { width: 20px; height: 20px; padding: 0; margin: 0; border: 1px solid #fff; } .note-color-btn:hover { border: 1px solid #000; } } } } /* Dialog ------------------------------------------*/ .note-dialog { &>div { display: none; /* BS2's hide pacth. */ } .form-group { /* overwrite BS's form-horizontal minus margins */ margin-left: 0; margin-right: 0; } .note-modal-form { margin: 0; /* overwrite BS2's form margin bottom */ } .note-image-dialog { .note-dropzone { min-height: 100px; font-size: 30px; line-height: 4; /* vertical-align */ color: lightgray; text-align: center; border: 4px dashed lightgray; margin-bottom: 10px; } } } /* Placeholder ------------------------------------------*/ .note-placeholder { position: absolute; display: none; color: gray; } /* Handle ------------------------------------------*/ .note-handle { /* control selection */ .note-control-selection { position: absolute; display: none; border: 1px solid #000; &>div { position: absolute; } .note-control-selection-bg { width: 100%; height: 100%; background-color: #000; @include opacity(0.3); } .note-control-handle { width: 7px; height: 7px; border: 1px solid #000; } .note-control-holder { @extend .note-control-handle; } .note-control-sizing { @extend .note-control-handle; background-color: #000; } .note-control-nw { top: -5px; left: -5px; border-right: none; border-bottom: none; } .note-control-ne { top: -5px; right: -5px; border-bottom: none; border-left: none; } .note-control-sw { bottom: -5px; left: -5px; border-top: none; border-right: none; } .note-control-se { right: -5px; bottom: -5px; cursor: se-resize; } .note-control-se.note-control-holder { cursor: default; border-top: none; border-left: none; } .note-control-selection-info { right: 0; bottom: 0; padding: 5px; margin: 5px; color: #fff; background-color: #000; font-size: 12px; @include rounded(5px); @include opacity(0.7); } } } .note-hint-popover { min-width: 100px; padding: 2px; .popover-content { padding: 3px; max-height: 150px; overflow: auto; .note-hint-group { .note-hint-item { display: block !important; padding: 3px; &.active, &:hover { display: block; clear: both; font-weight: 400; line-height: 1.4; color: white; white-space: nowrap; text-decoration: none; background-color: #428bca; outline: 0; cursor: pointer; } } } } } PKe[�\�s�s././src/less/summernote.lessnu�[���@import "elements.less"; @import "../icons/dist/summernote.less"; /* Theme Variables ------------------------------------------*/ @border-color: #a9a9a9; @background-color: #f5f5f5; @img-margin-left: 10px; @img-margin-right: 10px; /* Layout ------------------------------------------*/ .note-editor { position: relative; /* dropzone */ @dropzone-color: lightskyblue; @dropzone-active-color: darken(@dropzone-color, 30); .note-dropzone { position: absolute; display: none; z-index: 100; color: @dropzone-color; background-color: #fff; opacity: 0.95; .note-dropzone-message { display: table-cell; vertical-align: middle; text-align: center; font-size: 28px; font-weight: 700; } &.hover { color: @dropzone-active-color; } } &.dragover .note-dropzone { display: table; } .note-editing-area { position: relative; .note-editable { outline: none; sup { vertical-align: super; } sub { vertical-align: sub; } } img.note-float-left { margin-right: @img-margin-right; } img.note-float-right { margin-left: @img-margin-left; } } } /* Frame mode layout ------------------------------------------*/ .note-editor.note-frame { border: 1px solid @border-color; /* codeview mode */ &.codeview { .note-editing-area { .note-editable { display: none; } .note-codable { display: block; } } } .note-editing-area { overflow: hidden; /* editable */ .note-editable { background-color: #fff; color: #000; padding: 10px; overflow: auto; word-wrap: break-word; &[contenteditable="false"] { background-color: #e5e5e5; } } /* codeable */ .note-codable { display: none; width: 100%; padding: 10px; border: none; box-shadow: none; font-family: Menlo, Monaco, monospace, sans-serif; font-size: 14px; color: #ccc; background-color: #222; resize: none; /* override BS2 default style */ .box-sizing(border-box); .rounded(0); margin-bottom: 0; } } /* fullscreen mode */ &.fullscreen { position: fixed; top: 0; left: 0; width: 100% !important; z-index: 1050; /* bs3 modal-backdrop: 1030, bs2: 1040 */ .note-editable { background-color: #fff; } .note-resizebar { display: none; } } /* Notifications */ .note-status-output { display: block; width: 100%; font-size: 14px; line-height: 1.42857143; height: 20px; margin-bottom: 0; color: #000; border: 0; border-top: 1px solid #e2e2e2 } .note-status-output:empty { height: 0; border-top:0 solid transparent } .note-status-output .pull-right { float: right !important } .note-status-output .text-muted { color: #777 } .note-status-output .text-primary { color: #286090 } .note-status-output .text-success { color: #3c763d } .note-status-output .text-info { color: #31708f } .note-status-output .text-warning { color: #8a6d3b } .note-status-output .text-danger { color:#a94442 } .note-status-output .alert { margin: -7px 0 0 0; padding: 7px 10px 2px 10px; border-radius: 0; color: #000; background-color: #f5f5f5; } .note-status-output .alert .note-icon{ margin-right:5px } .note-status-output .alert-success { color: #3c763d !important; background-color: #dff0d8 !important; } .note-status-output .alert-info { color: #31708f !important; background-color: #d9edf7 !important; } .note-status-output .alert-warning { color: #8a6d3b !important; background-color: #fcf8e3 !important; } .note-status-output .alert-danger { color: #a94442 !important; background-color: #f2dede !important; } /* statusbar */ .note-statusbar { background-color: @background-color; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top: 1px solid #ddd; .note-resizebar { padding-top: 1px; height: 9px; width: 100%; cursor: ns-resize; .note-icon-bar { width: 20px; margin: 1px auto; border-top: 1px solid @border-color; } } &.locked { .note-resizebar { cursor: default; .note-icon-bar { display: none; } } } } .note-placeholder { padding: 10px; } } /* Popover ------------------------------------------*/ .note-popover.popover { max-width: none; .popover-content { a { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; /* for FF */ vertical-align: middle; /* for FF */ } } .arrow { left: 20px !important; } } /* Popover and Toolbar (Button container) ------------------------------------------*/ .note-toolbar { z-index: 500; position: relative; } .note-popover .popover-content, .panel-heading.note-toolbar { margin: 0; padding: 0 0 5px 5px; &>.btn-group { margin-top: 5px; margin-left: 0; margin-right: 5px; } .btn-group { .note-table { min-width: 0; padding: 5px; .note-dimension-picker { font-size: 18px; .note-dimension-picker-mousecatcher { position: absolute !important; z-index: 3; width: 10em; height: 10em; cursor: pointer; } .note-dimension-picker-unhighlighted { position: relative !important; z-index: 1; width: 5em; height: 5em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } .note-dimension-picker-highlighted { position: absolute !important; z-index: 2; width: 1em; height: 1em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } } } } .note-style { .dropdown-style { blockquote, pre { margin: 0; padding: 5px 10px; } h1, h2, h3, h4, h5, h6, p { margin: 0; padding: 0; } } } .note-color { .dropdown-toggle { width: 20px; padding-left: 5px; } .dropdown-menu { min-width: 337px; .note-palette { display: inline-block; margin: 0; width: 160px; &:first-child { margin: 0 5px; } .note-palette-title { font-size: 12px; margin: 2px 7px; text-align: center; border-bottom: 1px solid #eee; } .note-color-reset { margin: 3px; padding: 0 3px; width: 100%; font-size: 11px; cursor: pointer; .rounded(5px); } .note-color-row { height: 20px; } .note-color-reset:hover { background: #eee; } } } } .note-para { .dropdown-menu { min-width: 216px; padding: 5px; &>div:first-child { margin-right: 5px; } } } /* dropdown-menu for toolbar and popover */ .dropdown-menu { min-width: 90px; /* dropdown-menu right position */ /* http://forrst.com/posts/Bootstrap_right_positioned_dropdown-2KB */ &.right { right: 0; left: auto; &::before { right: 9px; left: auto !important; } &::after { right: 10px; left: auto !important; } } /* dropdown-menu for selectbox */ &.note-check { li a i { color: deepskyblue; visibility: hidden; } li a.checked i { visibility: visible; } } } .note-fontsize-10 { font-size: 10px; } /* color palette for toolbar and popover */ .note-color-palette { line-height: 1; div { .note-color-btn { width: 20px; height: 20px; padding: 0; margin: 0; border: 1px solid #fff; } .note-color-btn:hover { border: 1px solid #000; } } } } /* Dialog ------------------------------------------*/ .note-dialog { &>div { display: none; /* BS2's hide pacth. */ } .form-group { /* overwrite BS's form-horizontal minus margins */ margin-left: 0; margin-right: 0; } .note-modal-form { margin: 0; /* overwrite BS2's form margin bottom */ } .note-image-dialog { .note-dropzone { min-height: 100px; font-size: 30px; line-height: 4; /* vertical-align */ color: lightgray; text-align: center; border: 4px dashed lightgray; margin-bottom: 10px; } } // [workaround] firefox fileinput @-moz-document url-prefix() { .note-image-input { height: auto; } } } /* Placeholder ------------------------------------------*/ .note-placeholder { position: absolute; display: none; color: gray; } /* Handle ------------------------------------------*/ .note-handle { /* control selection */ .note-control-selection { position: absolute; display: none; border: 1px solid #000; &>div { position: absolute; } .note-control-selection-bg { width: 100%; height: 100%; background-color: #000; .opacity(0.30) } .note-control-handle { width: 7px; height: 7px; border: 1px solid #000; } .note-control-holder { .note-control-handle; } .note-control-sizing { .note-control-handle; background-color: #fff; } .note-control-nw { top: -5px; left: -5px; border-right: none; border-bottom: none; } .note-control-ne { top: -5px; right: -5px; border-bottom: none; border-left: none; } .note-control-sw { bottom: -5px; left: -5px; border-top: none; border-right: none; } .note-control-se { right: -5px; bottom: -5px; cursor: se-resize; } .note-control-se.note-control-holder { cursor: default; border-top: none; border-left: none; } .note-control-selection-info { right: 0; bottom: 0; padding: 5px; margin: 5px; color: #fff; background-color: #000; font-size: 12px; .rounded(5px); .opacity(0.7); } } } .note-hint-popover { min-width: 100px; padding: 2px; .popover-content { padding: 3px; max-height: 150px; overflow: auto; .note-hint-group { .note-hint-item { display: block !important; padding: 3px; &.active, &:hover { display: block; clear: both; font-weight: 400; line-height: 1.4; color: #fff; white-space: nowrap; text-decoration: none; background-color: #428bca; outline: 0; cursor: pointer; } } } } } PKe[�\Dp�+��src/less/elements.lessnu�[���.gradient(@color: #F5F5F5, @start: #EEE, @stop: #FFF) { background: @color; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, @start), color-stop(1, @stop)); background: -ms-linear-gradient(bottom, @start, @stop); background: -moz-linear-gradient(center bottom, @start 0%, @stop 100%); background: -o-linear-gradient(@stop, @start); filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@stop,@start)); } .bw-gradient(@color: #F5F5F5, @start: 0, @stop: 255) { background: @color; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgb(@start,@start,@start)), color-stop(1, rgb(@stop,@stop,@stop))); background: -ms-linear-gradient(bottom, rgb(@start,@start,@start) 0%, rgb(@stop,@stop,@stop) 100%); background: -moz-linear-gradient(center bottom, rgb(@start,@start,@start) 0%, rgb(@stop,@stop,@stop) 100%); background: -o-linear-gradient(rgb(@stop,@stop,@stop), rgb(@start,@start,@start)); filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",rgb(@stop,@stop,@stop),rgb(@start,@start,@start))); } .bordered(@top-color: #EEE, @right-color: #EEE, @bottom-color: #EEE, @left-color: #EEE) { border-top: solid 1px @top-color; border-left: solid 1px @left-color; border-right: solid 1px @right-color; border-bottom: solid 1px @bottom-color; } .drop-shadow(@x-axis: 0, @y-axis: 1px, @blur: 2px, @alpha: 0.1) { -webkit-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha); -moz-box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha); box-shadow: @x-axis @y-axis @blur rgba(0, 0, 0, @alpha); } .rounded(@radius: 2px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } .border-radius(@topright: 0, @bottomright: 0, @bottomleft: 0, @topleft: 0) { -webkit-border-top-right-radius: @topright; -webkit-border-bottom-right-radius: @bottomright; -webkit-border-bottom-left-radius: @bottomleft; -webkit-border-top-left-radius: @topleft; -moz-border-radius-topright: @topright; -moz-border-radius-bottomright: @bottomright; -moz-border-radius-bottomleft: @bottomleft; -moz-border-radius-topleft: @topleft; border-top-right-radius: @topright; border-bottom-right-radius: @bottomright; border-bottom-left-radius: @bottomleft; border-top-left-radius: @topleft; .background-clip(padding-box); } .opacity(@opacity: 0.5) { -webkit-opacity: @opacity; -khtml-opacity: @opacity; -moz-opacity: @opacity; opacity: @opacity; @opperc: @opacity * 100; -ms-filter: ~"progid:DXImageTransform.Microsoft.Alpha(opacity=@{opperc})"; filter: ~"alpha(opacity=@{opperc})"; } .transition-duration(@duration: 0.2s) { -moz-transition-duration: @duration; -webkit-transition-duration: @duration; -o-transition-duration: @duration; transition-duration: @duration; } .transform(...) { -webkit-transform: @arguments; -moz-transform: @arguments; -o-transform: @arguments; -ms-transform: @arguments; transform: @arguments; } .rotation(@deg:5deg){ .transform(rotate(@deg)); } .scale(@ratio:1.5){ .transform(scale(@ratio)); } .transition(@duration:0.2s, @ease:ease-out) { -webkit-transition: all @duration @ease; -moz-transition: all @duration @ease; -o-transition: all @duration @ease; transition: all @duration @ease; } .inner-shadow(@horizontal:0, @vertical:1px, @blur:2px, @alpha: 0.4) { -webkit-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha); -moz-box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha); box-shadow: inset @horizontal @vertical @blur rgba(0, 0, 0, @alpha); } .box-shadow(@arguments) { -webkit-box-shadow: @arguments; -moz-box-shadow: @arguments; box-shadow: @arguments; } .box-sizing(@sizing: border-box) { -ms-box-sizing: @sizing; -moz-box-sizing: @sizing; -webkit-box-sizing: @sizing; box-sizing: @sizing; } .user-select(@argument: none) { -webkit-user-select: @argument; -moz-user-select: @argument; -ms-user-select: @argument; user-select: @argument; } .columns(@colwidth: 250px, @colcount: 0, @colgap: 50px, @columnRuleColor: #EEE, @columnRuleStyle: solid, @columnRuleWidth: 1px) { -moz-column-width: @colwidth; -moz-column-count: @colcount; -moz-column-gap: @colgap; -moz-column-rule-color: @columnRuleColor; -moz-column-rule-style: @columnRuleStyle; -moz-column-rule-width: @columnRuleWidth; -webkit-column-width: @colwidth; -webkit-column-count: @colcount; -webkit-column-gap: @colgap; -webkit-column-rule-color: @columnRuleColor; -webkit-column-rule-style: @columnRuleStyle; -webkit-column-rule-width: @columnRuleWidth; column-width: @colwidth; column-count: @colcount; column-gap: @colgap; column-rule-color: @columnRuleColor; column-rule-style: @columnRuleStyle; column-rule-width: @columnRuleWidth; } .translate(@x:0, @y:0) { .transform(translate(@x, @y)); } .background-clip(@argument: padding-box) { -moz-background-clip: @argument; -webkit-background-clip: @argument; background-clip: @argument; } PKe[�\��q0�0�0src/less/summernote-lite.lessnu�[���@import "elements.less"; @import "../icons/dist/summernote.less"; @import "lite-ui/all.less"; /* Theme Variables ------------------------------------------*/ @border-color: #a9a9a9; @background-color: #f5f5f5; /* Layout ------------------------------------------*/ .note-editor { position: relative; /* dropzone */ @dropzone-color: lightskyblue; @dropzone-active-color: darken(@dropzone-color, 30); .note-dropzone { position: absolute; display: none; z-index: 100; color: @dropzone-color; background-color: #fff; opacity: 0.95; pointer-event: none; .note-dropzone-message { display: table-cell; vertical-align: middle; text-align: center; font-size: 28px; font-weight: 700; } &.hover { color: @dropzone-active-color; } } &.dragover .note-dropzone { display: table; } .note-editing-area { position: relative; p { margin: 0 0 10px; } .note-editable { outline: none; table { width:100%; border-collapse: collapse; td,th { border:1px solid #ececec; padding:5px 3px; } } sup { vertical-align: super; } sub { vertical-align: sub; } a { background-color: inherit; text-decoration: inherit; font-family: inherit; font-weight: inherit; color: #337ab7; } a:hover, a:focus { color: #23527c; text-decoration: underline; outline: 0; } figure { margin: 0; } } } } /* Frame mode layout ------------------------------------------*/ .note-editor.note-frame { border: 1px solid @border-color; /* codeview mode */ &.codeview { .note-editing-area { .note-editable { display: none; } .note-codable { display: block; } } } .note-editing-area { overflow: hidden; /* editable */ .note-editable { background-color: #fff; color: #000; padding: 10px; overflow: auto; word-wrap: break-word; &[contenteditable="false"] { background-color: #e5e5e5; } } /* codeable */ .note-codable { display: none; width: 100%; padding: 10px; border: none; box-shadow: none; font-family: Menlo, Monaco, monospace, sans-serif; font-size: 14px; color: #ccc; background-color: #222; resize: none; /* override BS2 default style */ .box-sizing(border-box); .rounded(0); margin-bottom: 0; } } /* fullscreen mode */ &.fullscreen { position: fixed; top: 0; left: 0; width: 100% !important; z-index: 1050; /* bs3 modal-backdrop: 1030, bs2: 1040 */ .note-editable { background-color: #fff; } .note-resizebar { display: none; } } /* Notification */ .note-status-output { display: block; width: 100%; font-size: 14px; line-height: 1.42857143; height: 20px; margin-bottom: 0; color: #000; border: 0; border-top: 1px solid #e2e2e2; } .note-status-output:empty { height: 0; border-top:0 solid transparent } .note-status-output .pull-right { float: right !important } .note-status-output .text-muted { color: #777 } .note-status-output .text-primary { color: #286090 } .note-status-output .text-success { color: #3c763d } .note-status-output .text-info { color: #31708f } .note-status-output .text-warning { color: #8a6d3b } .note-status-output .text-danger { color:#a94442 } .note-status-output .alert { margin: -7px 0 0 0; padding: 7px 10px 2px 10px; border-radius: 0; color: #000; background-color: #f5f5f5; } .note-status-output .alert .note-icon{ margin-right:5px } .note-status-output .alert-success { color: #3c763d !important; background-color: #dff0d8 !important; } .note-status-output .alert-info { color: #31708f !important; background-color: #d9edf7 !important; } .note-status-output .alert-warning { color: #8a6d3b !important; background-color: #fcf8e3 !important; } .note-status-output .alert-danger { color: #a94442 !important; background-color: #f2dede !important; } /* statusbar */ .note-statusbar { background-color: @background-color; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top: 1px solid #ddd; .note-resizebar { padding-top: 1px; height: 9px; width: 100%; cursor: ns-resize; .note-icon-bar { width: 20px; margin: 1px auto; border-top: 1px solid @border-color; } } &.locked { .note-resizebar { cursor: default; .note-icon-bar { display: none; } } } } .note-placeholder { padding: 10px; } } /* Popover ------------------------------------------*/ .note-popover { max-width: none; .note-popover-content { a { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; /* for FF */ vertical-align: middle; /* for FF */ } } .note-popover-arrow { left: 20px !important; } } /* Popover and Toolbar (Button container) ------------------------------------------*/ .note-popover .note-popover-content, .note-toolbar { margin: 0; padding: 0 0 5px 5px; background-color: #fff; &>.note-btn-group { margin-top: 5px; margin-left: 0; margin-right: 5px; } .note-btn-group { .note-table { min-width: 0; padding: 5px; .note-dimension-picker { font-size: 18px; .note-dimension-picker-mousecatcher { position: absolute !important; z-index: 3; width: 10em; height: 10em; cursor: pointer; } .note-dimension-picker-unhighlighted { position: relative !important; z-index: 1; width: 5em; height: 5em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } .note-dimension-picker-highlighted { position: absolute !important; z-index: 2; width: 1em; height: 1em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } } } } .note-style { h1, h2, h3, h4, h5, h6, blockquote { margin: 0; } } .note-color { .dropdown-toggle { width: 20px; padding-left: 5px; } .note-dropdown-menu { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; min-width: 346px; .note-palette { display: inline-block; margin: 0; width: 160px; &:first-child { margin: 0 5px; margin-right:15px; } .note-palette-title { font-size: 12px; margin: 2px 7px; text-align: center; border-bottom: 1px solid #eee; } .note-color-reset { margin: 3px; padding: 2px 3px; width: 100%; cursor: pointer; .rounded(5px); background-color: #fff; border:0; } .note-color-row { height: 20px; } .note-color-reset:hover { background: #eee; } } } } .note-para { .note-dropdown-menu { min-width: 216px; padding: 5px; &>div:first-child { margin-right: 5px; } } } .note-btn-fontname { .note-dropdown-menu { min-width: 200px; } } /* dropdown-menu for toolbar and popover */ .note-dropdown-menu { min-width: 160px; /* dropdown-menu right position */ /* http://forrst.com/posts/Bootstrap_right_positioned_dropdown-2KB */ &.right { right: 0; left: auto; &::before { right: 9px; left: auto !important; } &::after { right: 10px; left: auto !important; } } /* dropdown-menu for selectbox */ &.note-check { .note-dropdown-item i { color: deepskyblue; visibility: hidden; } .note-dropdown-item.checked i { visibility: visible; } } .note-dropdown-item > * { margin: 0; } } .note-fontsize-10 { font-size: 10px; } /* color palette for toolbar and popover */ .note-color-palette { line-height: 1; div { .note-color-btn { width: 20px; height: 20px; padding: 0; margin: 0; border: 1px solid #fff; } .note-color-btn:hover { border: 1px solid #000; } } } } /* Dialog ------------------------------------------*/ .note-modal { .note-modal-body { label { margin-bottom: 2px; padding: 2px 5px; display: inline-block; } .help-list-item:hover { background-color: #e0e0e0; } } // [workaround] firefox fileinput @-moz-document url-prefix() { .note-image-input { height: auto; } } } /* Placeholder ------------------------------------------*/ .note-placeholder { position: absolute; display: none; color: gray; } /* Handle ------------------------------------------*/ .note-handle { /* control selection */ .note-control-selection { position: absolute; display: none; border: 1px solid black; &>div { position: absolute; } .note-control-selection-bg { width: 100%; height: 100%; background-color: #000; .opacity(0.30) } .note-control-handle { width: 7px; height: 7px; border: 1px solid #000; } .note-control-holder { .note-control-handle; } .note-control-sizing { .note-control-handle; background-color: #fff; } .note-control-nw { top: -5px; left: -5px; border-right: none; border-bottom: none; } .note-control-ne { top: -5px; right: -5px; border-bottom: none; border-left: none; } .note-control-sw { bottom: -5px; left: -5px; border-top: none; border-right: none; } .note-control-se { right: -5px; bottom: -5px; cursor: se-resize; } .note-control-se.note-control-holder { cursor: default; border-top: none; border-left: none; } .note-control-selection-info { right: 0; bottom: 0; padding: 5px; margin: 5px; color: #fff; background-color: #000; font-size: 12px; .rounded(5px); .opacity(0.7); } } } .note-hint-popover { min-width: 100px; padding: 2px; .note-popover-content { padding: 3px; max-height: 150px; overflow: auto; .note-hint-group { .note-hint-item { display: block !important; padding: 3px; &.active, &:hover { display: block; clear: both; font-weight: 400; line-height: 1.4; color: #fff; white-space: nowrap; text-decoration: none; background-color: #428bca; outline: 0; cursor: pointer; } } } } } .help-list-item { label { margin-bottom:5px; display:inline-block; } } PKe[�\~�W^^src/less/lite-ui/tooltip.lessnu�[���.note-tooltip { position: absolute; z-index: @zindex-tooltip; display: block; // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. // So reset our font and text properties to avoid inheriting weird values. font-size: 13px; .opacity(0); &.in { .opacity(@tooltip-opacity); } &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; } &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; } &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; } &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; } } .note-tooltip { &.bottom .note-tooltip-arrow { top: 0; left: 50%; margin-left: -@tooltip-arrow-width; border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; border-bottom-color: @tooltip-arrow-color; } &.top .note-tooltip-arrow { bottom: 0; left: 50%; margin-left: -@tooltip-arrow-width; border-width: @tooltip-arrow-width @tooltip-arrow-width 0; border-top-color: @tooltip-arrow-color; } &.right .note-tooltip-arrow { top: 50%; left: 0; margin-top: -@tooltip-arrow-width; border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; border-right-color: @tooltip-arrow-color; } &.left .note-tooltip-arrow { top: 50%; right: 0; margin-top: -@tooltip-arrow-width; border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; border-left-color: @tooltip-arrow-color; } } .note-tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .note-tooltip-content { max-width: @tooltip-max-width; padding: 3px 8px; color: @tooltip-color; text-align: center; background-color: @tooltip-bg; }PKf[�\�=�9��src/less/lite-ui/dropdown.lessnu�[���.note-dropdown { position: relative; } .note-dropdown-menu { display: none; min-width: 100px; position: absolute; top: 100%; left: 0; z-index : @zindex-dropdown; float: left; text-align:left; background: @dropdown-color-bg; border: 1px solid @dropdown-color-border; padding: 5px; background-clip: padding-box; .box-shadow(0 1px 1px rgba(0,0,0,.06)); } .note-btn-group.open .note-dropdown-menu { display: block; } .note-dropdown-item { display: block; &:hover { background-color: @btn-default-hover-bg; } } a.note-dropdown-item, a.note-dropdown-item:hover { margin: 2px 0; color: #000; text-decoration: none; } PKf[�\~j����src/less/lite-ui/form.lessnu�[���.note-form-group { padding-bottom: 20px; } .note-form-group:last-child { padding-bottom: 0; } .note-form-label { display: block; font-size: 16px; color: #42515f; margin-bottom: 10px; font-weight: 700; } .note-input { width: 100%; display: block; border: 1px solid #ededef; background: #fff; outline: 0; padding: 6px 4px; font-size: 14px; .box-sizing(); } .note-input::-webkit-input-placeholder { color: @gray-lighter; } .note-input:-moz-placeholder { /* Firefox 18- */ color: @gray-lighter; } .note-input::-moz-placeholder { /* Firefox 19+ */ color: @gray-lighter; } .note-input:-ms-input-placeholder { color: @gray-lighter; } PKf[�\I�| @@src/less/lite-ui/modal.lessnu�[���.note-modal { position: absolute; left: 0; right: 0; top: 0; bottom: 0; overflow: hidden; z-index: @zindex-modal; .opacity(1); display: none; &.open { display:block; } } .note-modal-content { position: relative; width: auto; margin: 30px 20px; border: 1px solid @modal-content-border-color; background: @modal-content-bg; background-clip: border-box; outline:0; } .note-modal-header { padding: 30px 20px 20px 20px; border: 1px solid #ededef; .close { margin-top: -10px; } } .note-modal-body { position: relative; padding: 20px 30px; } .note-modal-footer { height: 40px; padding: 10px; text-align: center; } .note-modal-footer a { color: #337ab7; text-decoration: none } .note-modal-footer a:hover, .note-modal-footer a:focus { color: #23527c; text-decoration: underline } .note-modal-footer .note-btn { float: right } .note-modal-title { font-size: 26px; color: #42515f; margin: 0; line-height: 1.4; } .note-modal-backdrop { position: absolute; left: 0; right: 0; bottom: 0; top: 0; z-index: @zindex-modal-background; background: @modal-backdrop-bg; .opacity(0.5); display: none; &.open { display: block; } } // Scale up the modal @media (min-width: 768px) { // Automatically set modal's width for larger viewports .note-modal-content { width: 600px; margin: 30px auto; } } @media (min-width: 992px) { .note-modal-content-large { width: 900px; } } PKf[�\�j�ppsrc/less/lite-ui/btn-group.lessnu�[���.note-btn-group { position: relative; display: inline-block; margin-right: 8px; > .note-btn-group { margin-right: 0; } > .note-btn, > .note-btn-group { margin-left: -4px; border-radius: 0; &.focus, &.active { border-radius:0; } &:first-child { margin-left: 0; border-top-left-radius: 1px; border-bottom-left-radius: 1px; &.focus, &.active { border-top-left-radius: 1px; border-bottom-left-radius: 1px; } } &:last-child:not(.note-dropdown) { border-top-right-radius: 1px; border-bottom-right-radius: 1px; &.focus, &.active { border-top-right-radius: 1px; border-bottom-right-radius: 1px; } } } &.open { > .note-dropdown { display: block; } } }PKf[�\�`ԝ��$src/less/lite-ui/mixins/buttons.lessnu�[���// Button variants // // Easily pump out default styles, as well as :hover, :focus, :active, // and disabled options for all buttons .button-maker(@color; @background; @focusBackground; @activeBackground; @border) { color: @color; background-color: @background; border-color: @border; &:focus, &.focus { color: @color; background-color: @focusBackground; border-color: @border; } &:hover { color: @color; background-color: @focusBackground; border-color: @border; } &.disabled, &[disabled], fieldset[disabled] & { &:focus, &.focus { background-color: @background; border-color: @border; } } } // Button sizes .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { padding: @padding-vertical @padding-horizontal; font-size: @font-size; line-height: @line-height; border-radius: @border-radius; } PKf[�\�c��MMsrc/less/lite-ui/toolbar.lessnu�[���.note-toolbar { padding: 10px 5px; border-bottom: 1px solid #e2e2e2; }PKf[�\��ӷ88src/less/lite-ui/popover.lessnu�[���.note-popover { position: absolute; z-index: @zindex-popover; display: block; // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element. // So reset our font and text properties to avoid inheriting weird values. font-size: 13px; display: none; background: @popover-bg; border: 1px solid @popover-border-color; border: 1px solid @popover-fallback-border-color; &.in { display: block; } &.top { margin-top: -3px; padding: 5 0; } &.right { margin-left: 3px; padding: 0 5; } &.bottom { margin-top: 3px; padding: 5 0; } &.left { margin-left: -3px; padding: 0 5; } } .note-popover { &.bottom .note-popover-arrow { top: -11px; left: 50%; margin-left: -@popover-arrow-width; border-top-width: 0; border-bottom-color: @popover-arrow-outer-fallback-color; border-bottom-color: @popover-arrow-outer-color; &::after { top: 1px; margin-left: -10px; content: " "; border-top-width: 0; border-bottom-color: #fff; } } &.top .note-popover-arrow { bottom: -11px; left: 50%; margin-left: -@popover-arrow-width; border-bottom-width: 0; border-top-color: @popover-arrow-outer-fallback-color; border-top-color: @popover-arrow-outer-color; &::after { bottom: 1px; margin-left: -10px; content: " "; border-bottom-width: 0; border-top-color: #fff; } } &.right .note-popover-arrow { top: 50%; left: -11px; margin-top: -@popover-arrow-width; border-left-width: 0; border-right-color: @popover-arrow-outer-fallback-color; border-right-color: @popover-arrow-outer-color; &::after { left: 1px; margin-top: -10px; content: " "; border-left-width: 0; border-right-color: #fff; } } &.left .note-popover-arrow { top: 50%; right: -11px; margin-top: -@popover-arrow-width; border-right-width: 0; border-left-color: @popover-arrow-outer-fallback-color; border-left-color: @popover-arrow-outer-color; &::after { right: 1px; margin-top: -10px; content: " "; border-right-width: 0; border-left-color: #fff; } } } .note-popover-arrow { position: absolute; width: 0; height: 0; border: 11px solid transparent; &::after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; content : " "; border-width: 10px; } } .note-popover-content { /*max-width: @popover-max-width;*/ padding: 3px 8px; color: @popover-color; text-align: center; background-color: @popover-bg; min-width: 100px; min-height: 30px; }PKf[�\�J�PPsrc/less/lite-ui/all.lessnu�[���// Core variables and mixins @import "../elements.less"; @import "variables.less"; @import "mixins.less"; @import "common.less"; @import "toolbar.less"; @import "btn-group.less"; @import "buttons.less"; @import "dropdown.less"; @import "modal.less"; @import "form.less"; @import "tooltip.less"; @import "popover.less"; PKf[�\.����src/less/lite-ui/buttons.lessnu�[���.note-btn { display: inline-block; font-weight: 400; margin-bottom: 0; text-align: center; vertical-align: middle; touch-action: manipulation; cursor: pointer; background-image: none; border: 1px solid @btn-default-border; white-space: nowrap; outline: 0; .button-maker(@btn-default-color; @btn-default-bg; @btn-default-hover-bg; @btn-default-active-bg; @btn-default-border); .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size; @line-height; @btn-border-radius-base); .user-select(none); &:hover, &:focus, &.focus { color: @btn-default-color; text-decoration: none; border: 1px solid @btn-default-border; background-color: @btn-default-hover-bg; outline: 0; .rounded(1px); } &:active, &.active { outline: 0; background-image: none; /*.box-shadow(inset 0 3px 5px rgba(0,0,0,.125));*/ } &.disabled, &[disabled], fieldset[disabled] & { cursor: @cursor-disabled; .opacity(.65); .box-shadow(none); } } .note-btn-primary { background: #fa6362; color: #fff; &:hover, &:focus, &.focus { color: #fff; text-decoration: none; border: 1px solid @btn-default-border; background-color: #fa6362; .rounded(1px); } } .note-btn-block { display: block; width: 100%; } .note-btn-block + .note-btn-block { margin-top:5px; } // Specificity overrides input[type="submit"], input[type="reset"], input[type="button"] { &.note-btn-block { width: 100%; } } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .close { float: right; font-size: 21px; line-height: 1; color: #000; opacity: .2; } .close:hover { -webkit-opacity: 1; -khtml-opacity: 1; -moz-opacity: 1; -ms-filter: alpha(opacity=100); filter: alpha(opacity=100); opacity: 1 }PKf[�\�e�NNsrc/less/lite-ui/common.lessnu�[���.note-frame * { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; color: #000; } p { margin: 0 0 10px; } // shortcut text style kbd { border-radius: 2px; background-color: #000; color: #fff; padding: 3px 5px; font-weight: 700; .box-sizing(); } PKf[�\(Mj�2 2 src/less/lite-ui/variables.lessnu�[��� @gray-base: #000; @gray-darker: lighten(@gray-base, 13.5%); // #222 @gray-dark: lighten(@gray-base, 20%); // #333 @gray: lighten(@gray-base, 33.5%); // #555 @gray-light: lighten(@gray-base, 46.7%); // #777 @gray-lighter:lighten(@gray-base, 93.5%); // #eee @font-size: 14px; @font-size-large: ceil((@font-size * 1.25)); @font-size-small: ceil((@font-size * 0.85)); @line-height: 1.4; @line-height-computed: floor((@line-height * @font-size)); @padding-base-vertical: 5px; @padding-base-horizontal: 10px; @border-radius-base: 1px; @btn-border-radius-base: @border-radius-base; @icon-font-path: "../fonts/"; @icon-font-name: "summernote"; @icon-font-svg-id: "summernote"; @btn-font-weight: normal; @btn-default-color : #333; @btn-default-bg: #fff; @btn-default-border: #fff; @btn-default-hover-bg: #ebebeb; @btn-default-active-bg: #f0f0f0; @input-bg: #fff; @input-bg-disabled: @gray-lighter; @input-color: @gray; @input-border: #ccc; @input-border-focus: #66afe9; @input-color-placeholder: #999; @cursor-disabled: not-allowed; @zindex-dropdown: 1000; @zindex-popover:1060; @zindex-tooltip:1070; @zindex-modal-background: 1040; @zindex-modal: 1050; @dropdown-color-bg: #fff; @dropdown-color-border: #e2e2e2; @tooltip-max-width:200px; @tooltip-color: #fff; @tooltip-bg: #000; @tooltip-opacity: .9; @tooltip-arrow-width: 5px; @tooltip-arrow-color: @tooltip-bg; @popover-bg: #ffffff; @popover-color: #000; @popover-max-width: 276px; @popover-border-color: rgba(0,0,0,.2); @popover-fallback-border-color: #ccc; @popover-title-bg: darken(@popover-bg, 3%); @popover-arrow-width: 10px; @popover-arrow-color: @popover-bg; @popover-arrow-outer-width:(@popover-arrow-width + 1); @popover-arrow-outer-color:fadein(@popover-border-color, 5%); @popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%); @modal-inner-padding: 15px; @modal-title-padding: 15px; @modal-title-line-height: @line-height; @modal-content-bg: #fff; @modal-content-border-color: rgba(0,0,0,.2); @modal-content-fallback-border-color: #999; @modal-backdrop-bg: #000; @modal-backdrop-opacity: .5; @modal-header-border-color: #e5e5e5; @modal-footer-border-color: @modal-header-border-color; PKf[�\��src/less/lite-ui/mixins.lessnu�[���@import "mixins/buttons.less";PKf[�\ ��;=/=/src/less/summernote-bs4.lessnu�[���@import "elements.less"; @import "../icons/dist/summernote.less"; /* Theme Variables ------------------------------------------*/ @border-color: #a9a9a9; @background-color: #f5f5f5; @img-margin-left: 10px; @img-margin-right: 10px; /* Layout ------------------------------------------*/ .note-editor { position: relative; /* dropzone */ @dropzone-color: lightskyblue; @dropzone-active-color: darken(@dropzone-color, 30); .note-dropzone { position: absolute; display: none; z-index: 100; color: @dropzone-color; background-color: #fff; opacity: 0.95; .note-dropzone-message { display: table-cell; vertical-align: middle; text-align: center; font-size: 28px; font-weight: 700; } &.hover { color: @dropzone-active-color; } } &.dragover .note-dropzone { display: table; } .note-editing-area { position: relative; .note-editable { outline: none; sup { vertical-align: super; } sub { vertical-align: sub; } } img.note-float-left { margin-right: @img-margin-right; } img.note-float-right { margin-left: @img-margin-left; } } } /* Frame mode layout ------------------------------------------*/ .note-editor.note-frame { border: 1px solid @border-color; /* codeview mode */ &.codeview { .note-editing-area { .note-editable { display: none; } .note-codable { display: block; } } } .note-editing-area { overflow: hidden; /* editable */ .note-editable { background-color: #fff; color: #000; padding: 10px; overflow: auto; word-wrap: break-word; &[contenteditable="false"] { background-color: #e5e5e5; } } /* codeable */ .note-codable { display: none; width: 100%; padding: 10px; border: none; box-shadow: none; font-family: Menlo, Monaco, monospace, sans-serif; font-size: 14px; color: #ccc; background-color: #222; resize: none; /* override BS2 default style */ .box-sizing(border-box); .rounded(0); margin-bottom: 0; } } /* fullscreen mode */ &.fullscreen { position: fixed; top: 0; left: 0; width: 100% !important; z-index: 1050; /* bs3 modal-backdrop: 1030, bs2: 1040 */ .note-editable { background-color: #fff; } .note-resizebar { display: none; } } /* Notifications */ .note-status-output { display: block; width: 100%; font-size: 14px; line-height: 1.42857143; height: 20px; margin-bottom: 0; color: #000; border: 0; border-top: 1px solid #e2e2e2 } .note-status-output:empty { height: 0; border-top:0 solid transparent } .note-status-output .pull-right { float: right !important } .note-status-output .text-muted { color: #777 } .note-status-output .text-primary { color: #286090 } .note-status-output .text-success { color: #3c763d } .note-status-output .text-info { color: #31708f } .note-status-output .text-warning { color: #8a6d3b } .note-status-output .text-danger { color:#a94442 } .note-status-output .alert { margin: -7px 0 0 0; padding: 7px 10px 2px 10px; border-radius: 0; color: #000; background-color: #f5f5f5; } .note-status-output .alert .note-icon{ margin-right: 5px } .note-status-output .alert-success { color: #3c763d !important; background-color: #dff0d8 !important; } .note-status-output .alert-info { color: #31708f !important; background-color: #d9edf7 !important; } .note-status-output .alert-warning { color: #8a6d3b !important; background-color: #fcf8e3 !important; } .note-status-output .alert-danger { color: #a94442 !important; background-color: #f2dede !important; } /* statusbar */ .note-statusbar { background-color: @background-color; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top: 1px solid #ddd; .note-resizebar { padding-top: 1px; height: 9px; width: 100%; cursor: ns-resize; .note-icon-bar { width: 20px; margin: 1px auto; border-top: 1px solid @border-color; } } &.locked { .note-resizebar { cursor: default; .note-icon-bar { display: none; } } } } .note-placeholder { padding: 10px; } } /* Popover ------------------------------------------*/ .note-popover.popover { display: none; max-width: none; .popover-content { a { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; /* for FF */ vertical-align: middle; /* for FF */ } } .arrow { left: 20px !important; } } /* Popover and Toolbar (Button container) ------------------------------------------*/ .note-toolbar { z-index: 500; position: relative; } .note-popover .popover-content, .card-header.note-toolbar { margin: 0; padding: 0 0 5px 5px; &>.btn-group { margin-top: 5px; margin-left: 0; margin-right: 5px; } .btn-group { .note-table { min-width: 0; padding: 5px; .note-dimension-picker { font-size: 18px; .note-dimension-picker-mousecatcher { position: absolute !important; z-index: 3; width: 10em; height: 10em; cursor: pointer; } .note-dimension-picker-unhighlighted { position: relative !important; z-index: 1; width: 5em; height: 5em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } .note-dimension-picker-highlighted { position: absolute !important; z-index: 2; width: 1em; height: 1em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } } } } .note-style { .dropdown-style { blockquote, pre { margin: 0; padding: 5px 10px; } h1, h2, h3, h4, h5, h6, p { margin: 0; padding: 0; } } } .note-color { .dropdown-toggle { width: 20px; padding-left: 5px; } .dropdown-menu { min-width: 337px; .note-palette { display: inline-block; margin: 0; width: 160px; &:first-child { margin: 0 5px; } .note-palette-title { font-size: 12px; margin: 2px 7px; text-align: center; border-bottom: 1px solid #eee; } .note-color-reset { margin: 3px; padding: 0 3px; width: 100%; font-size: 11px; cursor: pointer; .rounded(5px); } .note-color-row { height: 20px; } .note-color-reset:hover { background: #eee; } } } } .note-para { .dropdown-menu { min-width: 216px; padding: 5px; &>div:first-child { margin-right: 5px; } } } /* dropdown-menu for toolbar and popover */ .dropdown-menu { min-width: 90px; /* dropdown-menu right position */ /* http://forrst.com/posts/Bootstrap_right_positioned_dropdown-2KB */ &.right { right: 0; left: auto; &::before { right: 9px; left: auto !important; } &::after { right: 10px; left: auto !important; } } /* dropdown-menu for selectbox */ &.note-check { a i { color: deepskyblue; visibility: hidden; } a.checked i { visibility: visible; } } } .note-fontsize-10 { font-size: 10px; } /* color palette for toolbar and popover */ .note-color-palette { line-height: 1; div { .note-color-btn { width: 20px; height: 20px; padding: 0; margin: 0; border: 1px solid #fff; } .note-color-btn:hover { border: 1px solid #000; } } } } /* Dialog ------------------------------------------*/ .note-dialog { &>div { display: none; /* BS2's hide pacth. */ } .form-group { /* overwrite BS's form-horizontal minus margins */ margin-left: 0; margin-right: 0; } .note-modal-form { margin: 0; /* overwrite BS2's form margin bottom */ } .note-image-dialog { .note-dropzone { min-height: 100px; font-size: 30px; line-height: 4; /* vertical-align */ color: lightgray; text-align: center; border: 4px dashed lightgray; margin-bottom: 10px; } } // [workaround] firefox fileinput @-moz-document url-prefix() { .note-image-input { height: auto; } } } /* Placeholder ------------------------------------------*/ .note-placeholder { position: absolute; display: none; color: gray; } /* Handle ------------------------------------------*/ .note-handle { /* control selection */ .note-control-selection { position: absolute; display: none; border: 1px solid black; &>div { position: absolute; } .note-control-selection-bg { width: 100%; height: 100%; background-color: black; .opacity(0.30) } .note-control-handle { width: 7px; height: 7px; border: 1px solid black; } .note-control-holder { .note-control-handle; } .note-control-sizing { .note-control-handle; background-color: white; } .note-control-nw { top: -5px; left: -5px; border-right: none; border-bottom: none; } .note-control-ne { top: -5px; right: -5px; border-bottom: none; border-left: none; } .note-control-sw { bottom: -5px; left: -5px; border-top: none; border-right: none; } .note-control-se { right: -5px; bottom: -5px; cursor: se-resize; } .note-control-se.note-control-holder { cursor: default; border-top: none; border-left: none; } .note-control-selection-info { right: 0; bottom: 0; padding: 5px; margin: 5px; color: #fff; background-color: #000; font-size: 12px; .rounded(5px); .opacity(0.7); } } } .note-hint-popover { min-width: 100px; padding: 2px; .popover-content { padding: 3px; max-height: 150px; overflow: auto; .note-hint-group { .note-hint-item { display: block !important; padding: 3px; &.active, &:hover { display: block; clear: both; font-weight: 400; line-height: 1.4; color: #fff; white-space: nowrap; text-decoration: none; background-color: #428bca; outline: 0; cursor: pointer; } } } } } PKf[�\*���B.B.src/less/summernote-bs4.scssnu�[���@import "elements.scss"; /* Theme Variables ------------------------------------------*/ $border-color: #a9a9a9; $background-color: #f5f5f5; $img-margin-left: 10px; $img-margin-right: 10px; /* Layout ------------------------------------------*/ .note-editor { position: relative; /* dropzone */ $dropzone-color: lightskyblue; $dropzone-active-color: darken($dropzone-color, 30); .note-dropzone { position: absolute; display: none; z-index: 100; color: $dropzone-color; background-color: #fff; opacity: 0.95; .note-dropzone-message { display: table-cell; vertical-align: middle; text-align: center; font-size: 28px; font-weight: 700; } &.hover { color: $dropzone-active-color; } } &.dragover .note-dropzone { display: table; } .note-editing-area { position: relative; .note-editable { outline: none; sup { vertical-align: super; } sub { vertical-align: sub; } img.note-float-left { margin-right: $img-margin-right; } img.note-float-right { margin-left: $img-margin-left; } } } } /* Frame mode layout ------------------------------------------*/ .note-editor.note-frame { border: 1px solid $border-color; /* codeview mode */ &.codeview { .note-editing-area { .note-editable { display: none; } .note-codable { display: block; } } } .note-editing-area { overflow: hidden; /* editable */ .note-editable { background-color: #fff; color: #000; padding: 10px; overflow: auto; word-wrap: break-word; &[contenteditable="false"] { background-color: #e5e5e5; } } /* codeable */ .note-codable { display: none; width: 100%; padding: 10px; border: none; box-shadow: none; font-family: Menlo, Monaco, monospace, sans-serif; font-size: 14px; color: #ccc; background-color: #222; resize: none; /* override BS2 default style */ @include box-sizing(border-box); @include rounded(0); margin-bottom: 0; } } /* fullscreen mode */ &.fullscreen { position: fixed; top: 0; left: 0; width: 100% !important; z-index: 1050; /* bs3 modal-backdrop: 1030, bs2: 1040 */ .note-editable { background-color: #fff; } .note-resizebar { display: none; } } /* Notifications */ .note-status-output { display: block; width: 100%; font-size: 14px; line-height: 1.42857143; height: 20px; margin-bottom: 0; color: #000; border: 0; border-top: 1px solid #e2e2e2 } .note-status-output:empty { height: 0; border-top: 0 solid transparent } .note-status-output .pull-right { float: right !important } .note-status-output .text-muted { color: #777 } .note-status-output .text-primary { color: #286090 } .note-status-output .text-success { color: #3c763d } .note-status-output .text-info { color: #31708f } .note-status-output .text-warning { color: #8a6d3b } .note-status-output .text-danger { color:#a94442 } .note-status-output .alert { margin: -7px 0 0 0; padding: 7px 10px 2px 10px; border-radius: 0; color: #000; background-color: #f5f5f5; } .note-status-output .alert .note-icon{ margin-right: 5px } .note-status-output .alert-success { color: #3c763d !important; background-color: #dff0d8 !important; } .note-status-output .alert-info { color: #31708f !important; background-color: #d9edf7 !important; } .note-status-output .alert-warning { color: #8a6d3b !important; background-color: #fcf8e3 !important; } .note-status-output .alert-danger { color: #a94442 !important; background-color: #f2dede !important; } /* statusbar */ .note-statusbar { background-color: $background-color; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top: 1px solid #ddd; .note-resizebar { padding-top: 1px; height: 9px; width: 100%; cursor: ns-resize; .note-icon-bar { width: 20px; margin: 1px auto; border-top: 1px solid $border-color; } } &.locked { .note-resizebar { cursor: default; .note-icon-bar { display: none; } } } } .note-placeholder { padding: 10px; } } /* Popover ------------------------------------------*/ .note-popover.popover { max-width: none; .popover-content { a { display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; /* for FF */ vertical-align: middle; /* for FF */ } } .arrow { left: 20px !important; } } /* Popover and Toolbar (Button container) ------------------------------------------*/ .note-popover .popover-content, .panel-heading.note-toolbar { margin: 0; padding: 0 0 5px 5px; &>.btn-group { margin-top: 5px; margin-left: 0; margin-right: 5px; } .btn-group { .note-table { min-width: 0; padding: 5px; .note-dimension-picker { font-size: 18px; .note-dimension-picker-mousecatcher { position: absolute !important; z-index: 3; width: 10em; height: 10em; cursor: pointer; } .note-dimension-picker-unhighlighted { position: relative !important; z-index: 1; width: 5em; height: 5em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } .note-dimension-picker-highlighted { position: absolute !important; z-index: 2; width: 1em; height: 1em; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat; } } } } .note-style { .dropdown-style { blockquote, pre { margin: 0; padding: 5px 10px; } h1, h2, h3, h4, h5, h6, p { margin: 0; padding: 0; } } } .note-color { .dropdown-toggle { width: 20px; padding-left: 5px; } .dropdown-menu { min-width: 340px; .btn-group { margin: 0; &:first-child { margin: 0 5px; } .note-palette-title { font-size: 12px; margin: 2px 7px; text-align: center; border-bottom: 1px solid #eee; } .note-color-reset { font-size: 11px; margin: 3px; padding: 0 3px; cursor: pointer; @include rounded(5px); } .note-color-row { height: 20px; } .note-color-reset:hover { background: #eee; } } } } .note-para { .dropdown-menu { min-width: 216px; padding: 5px; &>div:first-child { margin-right: 5px; } } } /* dropdown-menu for toolbar and popover */ .dropdown-menu { min-width: 90px; /* dropdown-menu right position */ /* http://forrst.com/posts/Bootstrap_right_positioned_dropdown-2KB */ &.right { right: 0; left: auto; &::before { right: 9px; left: auto !important; } &::after { right: 10px; left: auto !important; } } /* dropdown-menu for selectbox */ &.note-check { li a i { color: deepskyblue; visibility: hidden; } li a.checked i { visibility: visible; } } } .note-fontsize-10 { font-size: 10px; } /* color palette for toolbar and popover */ .note-color-palette { line-height: 1; div { .note-color-btn { width: 20px; height: 20px; padding: 0; margin: 0; border: 1px solid #fff; } .note-color-btn:hover { border: 1px solid #000; } } } } /* Dialog ------------------------------------------*/ .note-dialog { &>div { display: none; /* BS2's hide pacth. */ } .form-group { /* overwrite BS's form-horizontal minus margins */ margin-left: 0; margin-right: 0; } .note-modal-form { margin: 0; /* overwrite BS2's form margin bottom */ } .note-image-dialog { .note-dropzone { min-height: 100px; font-size: 30px; line-height: 4; /* vertical-align */ color: lightgray; text-align: center; border: 4px dashed lightgray; margin-bottom: 10px; } } } /* Placeholder ------------------------------------------*/ .note-placeholder { position: absolute; display: none; color: gray; } /* Handle ------------------------------------------*/ .note-handle { /* control selection */ .note-control-selection { position: absolute; display: none; border: 1px solid black; &>div { position: absolute; } .note-control-selection-bg { width: 100%; height: 100%; background-color: #000; @include opacity(0.3); } .note-control-handle { width: 7px; height: 7px; border: 1px solid #000; } .note-control-holder { @extend .note-control-handle; } .note-control-sizing { @extend .note-control-handle; background-color: #fff; } .note-control-nw { top: -5px; left: -5px; border-right: none; border-bottom: none; } .note-control-ne { top: -5px; right: -5px; border-bottom: none; border-left: none; } .note-control-sw { bottom: -5px; left: -5px; border-top: none; border-right: none; } .note-control-se { right: -5px; bottom: -5px; cursor: se-resize; } .note-control-se.note-control-holder { cursor: default; border-top: none; border-left: none; } .note-control-selection-info { right: 0; bottom: 0; padding: 5px; margin: 5px; color: #fff; background-color: #000; font-size: 12px; @include rounded(5px); @include opacity(0.7); } } } .note-hint-popover { min-width: 100px; padding: 2px; .popover-content { padding: 3px; max-height: 150px; overflow: auto; .note-hint-group { .note-hint-item { display: block !important; padding: 3px; &.active, &:hover { display: block; clear: both; font-weight: 400; line-height: 1.4; color: white; white-space: nowrap; text-decoration: none; background-color: #428bca; outline: 0; cursor: pointer; } } } } } PKf[�\4��src/less/elements.scssnu�[���@mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) { background: $color; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop)); background: -ms-linear-gradient(bottom, $start, $stop); background: -moz-linear-gradient(center bottom, $start 0%, $stop 100%); background: -o-linear-gradient($stop, $start); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($stop)}', endColorstr='#{ie-hex-str($start)}', GradientType=0); } @mixin bw-gradient($color: #F5F5F5, $start: 0, $stop: 255) { background: $color; background: -webkit-gradient(linear, left bottom, left top, color-stop(0, rgb($start,$start,$start)), color-stop(1, rgb($stop,$stop,$stop))); background: -ms-linear-gradient(bottom, rgb($start,$start,$start) 0%, rgb($stop,$stop,$stop) 100%); background: -moz-linear-gradient(center bottom, rgb($start,$start,$start) 0%, rgb($stop,$stop,$stop) 100%); background: -o-linear-gradient(rgb($stop,$stop,$stop), rgb($start,$start,$start)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str(rgb($stop,$stop,$stop))}', endColorstr='#{ie-hex-str(rgb($start,$start,$start))}', GradientType=0); } @mixin bordered($top-color: #EEE, $right-color: #EEE, $bottom-color: #EEE, $left-color: #EEE) { border-top: solid 1px $top-color; border-left: solid 1px $left-color; border-right: solid 1px $right-color; border-bottom: solid 1px $bottom-color; } @mixin drop-shadow($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: 0.1) { -webkit-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); -moz-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); } @mixin rounded($radius: 2px) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; } @mixin border-radius($topright: 0, $bottomright: 0, $bottomleft: 0, $topleft: 0) { -webkit-border-top-right-radius: $topright; -webkit-border-bottom-right-radius: $bottomright; -webkit-border-bottom-left-radius: $bottomleft; -webkit-border-top-left-radius: $topleft; -moz-border-radius-topright: $topright; -moz-border-radius-bottomright: $bottomright; -moz-border-radius-bottomleft: $bottomleft; -moz-border-radius-topleft: $topleft; border-top-right-radius: $topright; border-bottom-right-radius: $bottomright; border-bottom-left-radius: $bottomleft; border-top-left-radius: $topleft; @include background-clip(padding-box); } @mixin opacity($opacity: 0.5) { -webkit-opacity: $opacity; -khtml-opacity: $opacity; -moz-opacity: $opacity; opacity: $opacity; $opperc: $opacity * 100; -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=#{$opperc}); filter: alpha(opacity=$opperc); } @mixin transition-duration($duration: 0.2s) { -moz-transition-duration: $duration; -webkit-transition-duration: $duration; -o-transition-duration: $duration; transition-duration: $duration; } @mixin transform($arguments...) { -webkit-transform: $arguments; -moz-transform: $arguments; -o-transform: $arguments; -ms-transform: $arguments; transform: $arguments; } @mixin rotation($deg:5deg) { @include transform(rotate($deg)); } @mixin scale($ratio:1.5) { @include transform(scale($ratio)); } @mixin transition($duration:0.2s, $ease:ease-out) { -webkit-transition: all $duration $ease; -moz-transition: all $duration $ease; -o-transition: all $duration $ease; transition: all $duration $ease; } @mixin inner-shadow($horizontal:0, $vertical:1px, $blur:2px, $alpha: 0.4) { -webkit-box-shadow: inset $horizontal $vertical $blur rgba(0, 0, 0, $alpha); -moz-box-shadow: inset $horizontal $vertical $blur rgba(0, 0, 0, $alpha); box-shadow: inset $horizontal $vertical $blur rgba(0, 0, 0, $alpha); } @mixin box-shadow($arguments) { -webkit-box-shadow: $arguments; -moz-box-shadow: $arguments; box-shadow: $arguments; } @mixin box-sizing($sizing: border-box) { -ms-box-sizing: $sizing; -moz-box-sizing: $sizing; -webkit-box-sizing: $sizing; box-sizing: $sizing; } @mixin user-select($argument: none) { -webkit-user-select: $argument; -moz-user-select: $argument; -ms-user-select: $argument; user-select: $argument; } @mixin columns($colwidth: 250px, $colcount: 0, $colgap: 50px, $columnRuleColor: #EEE, $columnRuleStyle: solid, $columnRuleWidth: 1px) { -moz-column-width: $colwidth; -moz-column-count: $colcount; -moz-column-gap: $colgap; -moz-column-rule-color: $columnRuleColor; -moz-column-rule-style: $columnRuleStyle; -moz-column-rule-width: $columnRuleWidth; -webkit-column-width: $colwidth; -webkit-column-count: $colcount; -webkit-column-gap: $colgap; -webkit-column-rule-color: $columnRuleColor; -webkit-column-rule-style: $columnRuleStyle; -webkit-column-rule-width: $columnRuleWidth; column-width: $colwidth; column-count: $colcount; column-gap: $colgap; column-rule-color: $columnRuleColor; column-rule-style: $columnRuleStyle; column-rule-width: $columnRuleWidth; } @mixin translate($x:0, $y:0) { @include transform(translate($x, $y)); } @mixin background-clip($argument: padding-box) { -moz-background-clip: $argument; -webkit-background-clip: $argument; background-clip: $argument; } PKf[�\�CONTRIBUTING.mdnu�[���## Contributing * Pull requests are welcome * Please `don't include dist/* files` on your commits. ## Coding convention * eslint: https://eslint.org * eslint rule: https://github.com/summernote/summernote/blob/master/.eslintrc ## Build summernote ```bash npm install # build full version of summernote: dist/summernote.js npm run build # generate minified copy: dist/summernote.min.js, dist/summernote.css npm run dist ``` At this point, you should now have a `build/` directory populated with everything you need to use summernote. ## Start local server for developing summernote. run local server with connect and watch. ```bash npm run start # Open a browser on http://localhost:3000. # If you change source code, automatically reload your page. ``` ## Test summernote run tests with Karma and PhantomJS ```bash npm run test ``` If you want run tests on other browser, change the values for `broswers` properties in `karma.conf.js`. ``` karma: { all: { browsers: ['PhantomJS'], reporters: ['progress'] } } ``` You can use `Chrome`, `ChromeCanary`, `Firefox`, `Opera`, `Safari`, `PhantomJS` and `IE` beside `PhantomJS`. Once you run `npm test`, it will watch all javascript file. Therefore karma run tests every time you change code. ## Prepush Hooks As part of this repo, we use the NPM package husky to implement git hooks. We leverage the prepush hook to prevent bad commits. ## Document structure ``` - body container: <div class="note-editable">, <td>, <blockquote>, <ul> - block node: <div>, <p>, <li>, <h1>, <table> - void block node: <hr> - inline node: <span>, <b>, <font>, <a>, ... - void inline node: <img> - text node: #text ``` 1. A body container has block node, but `<ul>` has only `<li>` nodes. 2. A body container also has inline nodes sometimes. This inline nodes will be wrapped with `<p>` when enter key pressed. 4. A block node only has inline nodes. 5. A inline nodes has another inline nodes 6. `#text` and void inline node doesn't have children. PKf[�\~�a*ZZpackage.jsonnu�[���{ "_args": [ [ "summernote@0.8.10", "C:\\Users\\Ovi-PC\\Downloads\\themekit-master\\themekit" ] ], "_from": "summernote@0.8.10", "_id": "summernote@0.8.10", "_inBundle": false, "_integrity": "sha512-1b4ESCiY9HW+12HYXCntjbThVgeYNaYKfKL7pC4Jqjo/WDS4G4mMtd2kPuCw56HxeRT67d+zlehopaE+M4o6aQ==", "_location": "/summernote", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "summernote@0.8.10", "name": "summernote", "escapedName": "summernote", "rawSpec": "0.8.10", "saveSpec": null, "fetchSpec": "0.8.10" }, "_requiredBy": [ "/" ], "_resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.10.tgz", "_spec": "0.8.10", "_where": "C:\\Users\\Ovi-PC\\Downloads\\themekit-master\\themekit", "author": { "name": "hackerwins", "email": "<susukang98@gmail.com" }, "bugs": { "url": "https://github.com/summernote/summernote/issues" }, "description": "Super simple WYSIWYG editor", "devDependencies": { "babel-preset-es2015": "^6.24.1", "bootstrap": "^3.3.7", "chai": "^4.1.2", "chai-spies": "^0.7.1", "chromedriver": "^2.34.0", "concurrently": "^3.5.1", "eslint-config-standard": "^11.0.0-beta.0", "eslint-plugin-chai-friendly": "^0.4.1", "eslint-plugin-import": "^2.8.0", "eslint-plugin-node": "^5.2.1", "eslint-plugin-promise": "^3.6.0", "eslint-plugin-standard": "^3.0.1", "grunt": "^1.0.1", "grunt-cli": "^1.2.0", "grunt-contrib-clean": "^1.1.0", "grunt-contrib-compress": "^1.4.3", "grunt-contrib-connect": "^1.0.2", "grunt-contrib-copy": "^1.0.0", "grunt-contrib-uglify": "~3.3.0", "grunt-contrib-watch": "^1.0.0", "grunt-coveralls": "^1.0.1", "grunt-eslint": "^20.1.0", "grunt-exec": "^3.0.0", "grunt-karma": "^2.0.0", "grunt-recess": "^1.0.1", "grunt-saucelabs": "^9.0.0", "grunt-webfont": "^1.7.1", "husky": "^0.14.3", "jquery": "^3.2.1", "karma": "^2.0.0", "karma-chrome-launcher": "^2.2.0", "karma-coverage": "^1.1.1", "karma-firefox-launcher": "^1.1.0", "karma-ie-launcher": "^1.0.0", "karma-mocha": "^1.3.0", "karma-opera-launcher": "^1.0.0", "karma-phantomjs-launcher": "^1.0.4", "karma-safari-launcher": "^1.0.0", "karma-sauce-launcher": "^1.2.0", "karma-typescript": "^3.0.9", "karma-typescript-es6-transform": "^1.0.3", "load-grunt-tasks": "^3.5.2", "mocha": "^4.0.1", "nightwatch": "^0.9.19", "phantomjs-prebuilt": "^2.1.16", "rollup": "^0.53.0", "rollup-plugin-eslint": "^4.0.0", "rollup-plugin-replace": "^2.0.0", "rollup-plugin-typescript": "^0.8.1", "serve-static": "^1.13.1", "typescript": "^2.6.2" }, "homepage": "https://github.com/summernote/summernote#readme", "keywords": [ "editor", "WYSIWYG" ], "license": "MIT", "main": "dist/summernote.js", "name": "summernote", "repository": { "type": "git", "url": "git+https://github.com/summernote/summernote.git" }, "scripts": { "build": "grunt build", "coveralls": "grunt coveralls:travis", "dist": "grunt dist", "download:selenium": "if [ ! -e test/libs/selenium-server-standalone.jar ]; then wget http://selenium-release.storage.googleapis.com/3.6/selenium-server-standalone-3.6.0.jar -O test/libs/selenium-server-standalone.jar; fi", "lint": "eslint --fix src/js plugin lang test Gruntfile.js", "precommit": "npm run lint", "prepush": "npm run lint && npm run test", "start": "grunt server", "test": "karma start karma.conf.js --single-run", "test:e2e": "npm run download:selenium && concurrently --kill-others 'node test/e2e/static-server.js' 'nightwatch --config test/nightwatch.conf.js'", "test:e2e-saucelabs": "npm run dist && npm run download:selenium && nightwatch --config test/nightwatch.conf.js --env ie9,ie10,ie11,chrome,firefox", "test:saucelabs": "grunt saucelabs-test", "test:travis": "grunt test-travis --verbose" }, "version": "0.8.10" } PKf[�\�1P .editorconfignu�[���# EditorConfig is awesome: http://EditorConfig.org # top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] end_of_line = lf insert_final_newline = true charset = utf-8 indent_style = space indent_size = 2 PKf[�\?�Z�||LICENSEnu�[���The MIT License (MIT) Copyright (c) 2015~ Summernote Team (https://github.com/orgs/summernote/people) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PKf[�\��Z��� .eslintrcnu�[���{ "extends": "standard", "plugins": [ "chai-friendly" ], "rules": { "semi": [2, "always"], "space-before-function-paren": ["error", "never"], "no-useless-escape": 0, "no-unused-expressions": 0, "chai-friendly/no-unused-expressions": 2 }, "env": { "es6": true, "browser": true, "jquery": true, "mocha": true } } PKf[�\� �c��ISSUE_TEMPLATE.mdnu�[���#### steps to reproduce 1. 2. 3. #### browser version and os version and summernote version What is your browser and OS? What is your summernote version? #### screenshot of issue Add screenshot which shows your issue(if needed). You can make [gif from Recordit](http://www.recordit.co/). If you can make the issue using jsfiddle(https://jsfiddle.net/), We can save time to reproduce the problem. PKf[�\�u�#�� index.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css" /> <link rel="stylesheet" href="../dist/summernote.css"> <title>summernote</title> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> <script type="text/javascript" src="../dist/summernote.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 300, tabsize: 2 }); }); </script> </head> <body> <div class="container"> <h4> <i class="note-icon-summernote"></i> Summernote <span class="label label-info">Bootstrap v3.3.7</span> <span class="label label-success">with Summernote Icons</span> </h4> <div class="summernote"><p>Hello World</p></div> </div> </body> </html> PKf[�\�l���CODE_OF_CONDUCT.mdnu�[���# Summernote's Contributor Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at summernoteis@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ PKf[�\�%�ssdist/summernote-lite.jsnu�[���/** * Super simple wysiwyg editor v0.8.10 * https://summernote.org * * Copyright 2013- Alan Hong. and other contributors * summernote may be freely distributed under the MIT license. * * Date: 2018-02-20T00:34Z */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : (factory(global.jQuery)); }(this, (function ($$1) { 'use strict'; $$1 = $$1 && $$1.hasOwnProperty('default') ? $$1['default'] : $$1; var Renderer = /** @class */ (function () { function Renderer(markup, children, options, callback) { this.markup = markup; this.children = children; this.options = options; this.callback = callback; } Renderer.prototype.render = function ($parent) { var $node = $$1(this.markup); if (this.options && this.options.contents) { $node.html(this.options.contents); } if (this.options && this.options.className) { $node.addClass(this.options.className); } if (this.options && this.options.data) { $$1.each(this.options.data, function (k, v) { $node.attr('data-' + k, v); }); } if (this.options && this.options.click) { $node.on('click', this.options.click); } if (this.children) { var $container_1 = $node.find('.note-children-container'); this.children.forEach(function (child) { child.render($container_1.length ? $container_1 : $node); }); } if (this.callback) { this.callback($node, this.options); } if (this.options && this.options.callback) { this.options.callback($node); } if ($parent) { $parent.append($node); } return $node; }; return Renderer; }()); var renderer = { create: function (markup, callback) { return function () { var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; var children = $$1.isArray(arguments[0]) ? arguments[0] : []; if (options && options.children) { children = options.children; } return new Renderer(markup, children, options, callback); }; } }; var TooltipUI = /** @class */ (function () { function TooltipUI($node, options) { this.$node = $node; this.options = $.extend({}, { title: '', target: options.container, trigger: 'hover focus', placement: 'bottom' }, options); // create tooltip node this.$tooltip = $([ '<div class="note-tooltip in">', ' <div class="note-tooltip-arrow"/>', ' <div class="note-tooltip-content"/>', '</div>' ].join('')); // define event if (this.options.trigger !== 'manual') { var showCallback_1 = this.show.bind(this); var hideCallback_1 = this.hide.bind(this); var toggleCallback_1 = this.toggle.bind(this); this.options.trigger.split(' ').forEach(function (eventName) { if (eventName === 'hover') { $node.off('mouseenter mouseleave'); $node.on('mouseenter', showCallback_1).on('mouseleave', hideCallback_1); } else if (eventName === 'click') { $node.on('click', toggleCallback_1); } else if (eventName === 'focus') { $node.on('focus', showCallback_1).on('blur', hideCallback_1); } }); } } TooltipUI.prototype.show = function () { var $node = this.$node; var offset = $node.offset(); var $tooltip = this.$tooltip; var title = this.options.title || $node.attr('title') || $node.data('title'); var placement = this.options.placement || $node.data('placement'); $tooltip.addClass(placement); $tooltip.addClass('in'); $tooltip.find('.note-tooltip-content').text(title); $tooltip.appendTo(this.options.target); var nodeWidth = $node.outerWidth(); var nodeHeight = $node.outerHeight(); var tooltipWidth = $tooltip.outerWidth(); var tooltipHeight = $tooltip.outerHeight(); if (placement === 'bottom') { $tooltip.css({ top: offset.top + nodeHeight, left: offset.left + (nodeWidth / 2 - tooltipWidth / 2) }); } else if (placement === 'top') { $tooltip.css({ top: offset.top - tooltipHeight, left: offset.left + (nodeWidth / 2 - tooltipWidth / 2) }); } else if (placement === 'left') { $tooltip.css({ top: offset.top + (nodeHeight / 2 - tooltipHeight / 2), left: offset.left - tooltipWidth }); } else if (placement === 'right') { $tooltip.css({ top: offset.top + (nodeHeight / 2 - tooltipHeight / 2), left: offset.left + nodeWidth }); } }; TooltipUI.prototype.hide = function () { this.$tooltip.removeClass('in'); this.$tooltip.remove(); }; TooltipUI.prototype.toggle = function () { if (this.$tooltip.hasClass('in')) { this.hide(); } else { this.show(); } }; return TooltipUI; }()); var DropdownUI = /** @class */ (function () { function DropdownUI($node, options) { this.$button = $node; this.options = $.extend({}, { target: options.container }, options); this.setEvent(); } DropdownUI.prototype.setEvent = function () { this.$button.on('click', this.toggle.bind(this)); }; DropdownUI.prototype.clear = function () { var $parent = $('.note-btn-group.open'); $parent.find('.note-btn.active').removeClass('active'); $parent.removeClass('open'); }; DropdownUI.prototype.show = function () { this.$button.addClass('active'); this.$button.parent().addClass('open'); var $dropdown = this.$button.next(); var offset = $dropdown.offset(); var width = $dropdown.outerWidth(); var windowWidth = $(window).width(); var targetMarginRight = parseFloat($(this.options.target).css('margin-right')); if (offset.left + width > windowWidth - targetMarginRight) { $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width)); } else { $dropdown.css('margin-left', ''); } }; DropdownUI.prototype.hide = function () { this.$button.removeClass('active'); this.$button.parent().removeClass('open'); }; DropdownUI.prototype.toggle = function () { var isOpened = this.$button.parent().hasClass('open'); this.clear(); if (isOpened) { this.hide(); } else { this.show(); } }; return DropdownUI; }()); $(document).on('click', function (e) { if (!$(e.target).closest('.note-btn-group').length) { $('.note-btn-group.open').removeClass('open'); } }); $(document).on('click.note-dropdown-menu', function (e) { $(e.target).closest('.note-dropdown-menu').parent().removeClass('open'); }); var ModalUI = /** @class */ (function () { function ModalUI($node, options) { this.options = $.extend({}, { target: options.container || 'body' }, options); this.$modal = $node; this.$backdrop = $('<div class="note-modal-backdrop" />'); } ModalUI.prototype.show = function () { if (this.options.target === 'body') { this.$backdrop.css('position', 'fixed'); this.$modal.css('position', 'fixed'); } else { this.$backdrop.css('position', 'absolute'); this.$modal.css('position', 'absolute'); } this.$backdrop.appendTo(this.options.target).show(); this.$modal.appendTo(this.options.target).addClass('open').show(); this.$modal.trigger('note.modal.show'); this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this)); }; ModalUI.prototype.hide = function () { this.$modal.removeClass('open').hide(); this.$backdrop.hide(); this.$modal.trigger('note.modal.hide'); }; return ModalUI; }()); var editor = renderer.create('<div class="note-editor note-frame"/>'); var toolbar = renderer.create('<div class="note-toolbar" role="toolbar"/>'); var editingArea = renderer.create('<div class="note-editing-area"/>'); var codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); var editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'); var statusbar = renderer.create([ '<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-statusbar" role="resize">', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); var airEditor = renderer.create('<div class="note-editor"/>'); var airEditable = renderer.create([ '<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); var buttonGroup = renderer.create('<div class="note-btn-group">'); var button = renderer.create('<button type="button" class="note-btn" role="button" tabindex="-1">', function ($node, options) { // set button type if (options && options.tooltip) { $node.attr({ 'aria-label': options.tooltip }); $node.data('_lite_tooltip', new TooltipUI($node, { title: options.tooltip, container: options.container })); } if (options.contents) { $node.html(options.contents); } if (options && options.data && options.data.toggle === 'dropdown') { $node.data('_lite_dropdown', new DropdownUI($node, { container: options.container })); } }); var dropdown = renderer.create('<div class="note-dropdown-menu" role="list">', function ($node, options) { var markup = $.isArray(options.items) ? options.items.map(function (item) { var value = (typeof item === 'string') ? item : (item.value || ''); var content = options.template ? options.template(item) : item; var $temp = $('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>'); $temp.html(content).data('item', item); return $temp; }) : options.items; $node.html(markup).attr({ 'aria-label': options.title }); $node.on('click', '> .note-dropdown-item', function (e) { var $a = $(this); var item = $a.data('item'); var value = $a.data('value'); if (item.click) { item.click($a); } else if (options.itemClick) { options.itemClick(e, item, value); } }); }); var dropdownCheck = renderer.create('<div class="note-dropdown-menu note-check" role="list">', function ($node, options) { var markup = $.isArray(options.items) ? options.items.map(function (item) { var value = (typeof item === 'string') ? item : (item.value || ''); var content = options.template ? options.template(item) : item; var $temp = $('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>'); $temp.html([icon(options.checkClassName), ' ', content]).data('item', item); return $temp; }) : options.items; $node.html(markup).attr({ 'aria-label': options.title }); $node.on('click', '> .note-dropdown-item', function (e) { var $a = $(this); var item = $a.data('item'); var value = $a.data('value'); if (item.click) { item.click($a); } else if (options.itemClick) { options.itemClick(e, item, value); } }); }); var dropdownButtonContents = function (contents, options) { return contents + ' ' + icon(options.icons.caret, 'span'); }; var dropdownButton = function (opt, callback) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown({ className: opt.className, items: opt.items, template: opt.template, itemClick: opt.itemClick }) ], { callback: callback }).render(); }; var dropdownCheckButton = function (opt, callback) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdownCheck({ className: opt.className, checkClassName: opt.checkClassName, items: opt.items, template: opt.template, itemClick: opt.itemClick }) ], { callback: callback }).render(); }; var paragraphDropdownButton = function (opt) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown([ buttonGroup({ className: 'note-align', children: opt.items[0] }), buttonGroup({ className: 'note-list', children: opt.items[1] }) ]) ]).render(); }; var tableMoveHandler = function (event, col, row) { var PX_PER_EM = 18; var $picker = $(event.target.parentNode); // target is mousecatcher var $dimensionDisplay = $picker.next(); var $catcher = $picker.find('.note-dimension-picker-mousecatcher'); var $highlighted = $picker.find('.note-dimension-picker-highlighted'); var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox if (event.offsetX === undefined) { var posCatcher = $(event.target).offset(); posOffset = { x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { posOffset = { x: event.offsetX, y: event.offsetY }; } var dim = { c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); $catcher.data('value', dim.c + 'x' + dim.r); if (dim.c > 3 && dim.c < col) { $unhighlighted.css({ width: dim.c + 1 + 'em' }); } if (dim.r > 3 && dim.r < row) { $unhighlighted.css({ height: dim.r + 1 + 'em' }); } $dimensionDisplay.html(dim.c + ' x ' + dim.r); }; var tableDropdownButton = function (opt) { return buttonGroup([ button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown({ className: 'note-table', items: [ '<div class="note-dimension-picker">', ' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>', ' <div class="note-dimension-picker-highlighted"/>', ' <div class="note-dimension-picker-unhighlighted"/>', '</div>', '<div class="note-dimension-display">1 x 1</div>' ].join('') }) ], { callback: function ($node) { var $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: opt.col + 'em', height: opt.row + 'em' }) .mousedown(opt.itemClick) .mousemove(function (e) { tableMoveHandler(e, opt.col, opt.row); }); } }).render(); }; var palette = renderer.create('<div class="note-color-palette"/>', function ($node, options) { var contents = []; for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) { var eventName = options.eventName; var colors = options.colors[row]; var colorsName = options.colorsName[row]; var buttons = []; for (var col = 0, colSize = colors.length; col < colSize; col++) { var color = colors[col]; var colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-btn note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); $node.find('.note-color-btn').each(function () { $(this).data('_lite_tooltip', new TooltipUI($(this), { container: options.container })); }); }); var colorDropdownButton = function (opt, type) { return buttonGroup({ className: 'note-color', children: [ button({ className: 'note-current-color-button', contents: opt.title, tooltip: opt.lang.color.recent, click: opt.currentClick, callback: function ($button) { var $recentColor = $button.find('.note-recent-color'); if (type !== 'foreColor') { $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } } }), button({ className: 'dropdown-toggle', contents: icon('note-icon-caret'), tooltip: opt.lang.color.more, data: { toggle: 'dropdown' } }), dropdown({ items: [ '<div>', '<div class="note-btn-group btn-background-color">', ' <div class="note-palette-title">' + opt.lang.color.background + '</div>', ' <div>', '<button type="button" class="note-color-reset note-btn note-btn-block" ' + ' data-event="backColor" data-value="inherit">', opt.lang.color.transparent, ' </button>', ' </div>', ' <div class="note-holder" data-event="backColor"/>', '</div>', '<div class="note-btn-group btn-foreground-color">', ' <div class="note-palette-title">' + opt.lang.color.foreground + '</div>', ' <div>', '<button type="button" class="note-color-reset note-btn note-btn-block" ' + ' data-event="removeFormat" data-value="foreColor">', opt.lang.color.resetToDefault, ' </button>', ' </div>', ' <div class="note-holder" data-event="foreColor"/>', '</div>', '</div>' ].join(''), callback: function ($dropdown) { $dropdown.find('.note-holder').each(function () { var $holder = $(this); $holder.append(palette({ colors: opt.colors, eventName: $holder.data('event') }).render()); }); if (type === 'fore') { $dropdown.find('.btn-background-color').hide(); $dropdown.css({ 'min-width': '210px' }); } else if (type === 'back') { $dropdown.find('.btn-foreground-color').hide(); $dropdown.css({ 'min-width': '210px' }); } }, click: function (event) { var $button = $(event.target); var eventName = $button.data('event'); var value = $button.data('value'); if (eventName && value) { var key = eventName === 'backColor' ? 'background-color' : 'color'; var $color = $button.closest('.note-color').find('.note-recent-color'); var $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); if (type === 'fore') { opt.itemClick('foreColor', value); } else if (type === 'back') { opt.itemClick('backColor', value); } else { opt.itemClick(eventName, value); } } } }) ] }).render(); }; var dialog = renderer.create('<div class="note-modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function ($node, options) { if (options.fade) { $node.addClass('fade'); } $node.attr({ 'aria-label': options.title }); $node.html([ ' <div class="note-modal-content">', (options.title ? ' <div class="note-modal-header">' + ' <button type="button" class="close" aria-label="Close" aria-hidden="true"><i class="note-icon-close"></i></button>' + ' <h4 class="note-modal-title">' + options.title + '</h4>' + ' </div>' : ''), ' <div class="note-modal-body">' + options.body + '</div>', (options.footer ? ' <div class="note-modal-footer">' + options.footer + '</div>' : ''), ' </div>' ].join('')); $node.data('modal', new ModalUI($node, options)); }); var videoDialog = function (opt) { var body = '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.video.url + ' <small class="text-muted">' + opt.lang.video.providers + '</small>' + '</label>' + '<input class="note-video-url note-input" type="text" />' + '</div>'; var footer = [ '<button type="button" href="#" class="note-btn note-btn-primary note-video-btn disabled" disabled>', opt.lang.video.insert, '</button>' ].join(''); return dialog({ title: opt.lang.video.insert, fade: opt.fade, body: body, footer: footer }).render(); }; var imageDialog = function (opt) { var body = '<div class="note-form-group note-group-select-from-files">' + '<label class="note-form-label">' + opt.lang.image.selectFromFiles + '</label>' + '<input class="note-note-image-input note-input" type="file" name="files" accept="image/*" multiple="multiple" />' + opt.imageLimitation + '</div>' + '<div class="note-form-group" style="overflow:auto;">' + '<label class="note-form-label">' + opt.lang.image.url + '</label>' + '<input class="note-image-url note-input" type="text" />' + '</div>'; var footer = [ '<button href="#" type="button" class="note-btn note-btn-primary note-btn-large note-image-btn disabled" disabled>', opt.lang.image.insert, '</button>' ].join(''); return dialog({ title: opt.lang.image.insert, fade: opt.fade, body: body, footer: footer }).render(); }; var linkDialog = function (opt) { var body = '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.link.textToDisplay + '</label>' + '<input class="note-link-text note-input" type="text" />' + '</div>' + '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.link.url + '</label>' + '<input class="note-link-url note-input" type="text" value="http://" />' + '</div>' + (!opt.disableLinkTarget ? '<div class="checkbox">' + '<label>' + '<input type="checkbox" checked> ' + opt.lang.link.openInNewWindow + '</label>' + '</div>' : ''); var footer = [ '<button href="#" type="button" class="note-btn note-btn-primary note-link-btn disabled" disabled>', opt.lang.link.insert, '</button>' ].join(''); return dialog({ className: 'link-dialog', title: opt.lang.link.insert, fade: opt.fade, body: body, footer: footer }).render(); }; var popover = renderer.create([ '<div class="note-popover bottom">', ' <div class="note-popover-arrow"/>', ' <div class="note-popover-content note-children-container"/>', '</div>' ].join(''), function ($node, options) { var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; $node.addClass(direction).hide(); if (options.hideArrow) { $node.find('.note-popover-arrow').hide(); } }); var checkbox = renderer.create('<div class="checkbox"></div>', function ($node, options) { $node.html([ ' <label' + (options.id ? ' for="' + options.id + '"' : '') + '>', ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', (options.text ? options.text : ''), '</label>' ].join('')); }); var icon = function (iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; var ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, button: button, dropdown: dropdown, dropdownCheck: dropdownCheck, dropdownButton: dropdownButton, dropdownButtonContents: dropdownButtonContents, dropdownCheckButton: dropdownCheckButton, paragraphDropdownButton: paragraphDropdownButton, tableDropdownButton: tableDropdownButton, colorDropdownButton: colorDropdownButton, palette: palette, dialog: dialog, videoDialog: videoDialog, imageDialog: imageDialog, linkDialog: linkDialog, popover: popover, checkbox: checkbox, icon: icon, toggleBtn: function ($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function ($btn, isActive) { $btn.toggleClass('active', isActive); }, check: function ($dom, value) { $dom.find('.checked').removeClass('checked'); $dom.find('[data-value="' + value + '"]').addClass('checked'); }, onDialogShown: function ($dialog, handler) { $dialog.one('note.modal.show', handler); }, onDialogHidden: function ($dialog, handler) { $dialog.one('note.modal.hide', handler); }, showDialog: function ($dialog) { $dialog.data('modal').show(); }, hideDialog: function ($dialog) { $dialog.data('modal').hide(); }, /** * get popover content area * * @param $popover * @returns {*} */ getPopoverContent: function ($popover) { return $popover.find('.note-popover-content'); }, /** * get dialog's body area * * @param $dialog * @returns {*} */ getDialogBody: function ($dialog) { return $dialog.find('.note-modal-body'); }, createLayout: function ($note, options) { var $editor = (options.airMode ? ui.airEditor([ ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function ($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.off('summernote'); // remove summernote custom event $note.show(); } }; $$1.summernote = $$1.summernote || { lang: {} }; $$1.extend($$1.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' }, image: { image: 'Picture', insert: 'Insert Image', resizeFull: 'Resize Full', resizeHalf: 'Resize Half', resizeQuarter: 'Resize Quarter', floatLeft: 'Float Left', floatRight: 'Float Right', floatNone: 'Float None', 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' }, 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: 'Foreground Color', transparent: 'Transparent', setTransparent: 'Set transparent', reset: 'Reset', resetToDefault: 'Reset to default' }, 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' } } }); var isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line /** * returns whether font is installed or not. * * @param {String} fontName * @return {Boolean} */ function isFontInstalled(fontName) { var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; var $tester = $$1('<div>').css({ position: 'absolute', left: '-9999px', top: '-9999px', fontSize: '200px' }).text('mmmmmmmmmwwwwwww').appendTo(document.body); var originalWidth = $tester.css('fontFamily', testFontName).width(); var width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); $tester.remove(); return originalWidth !== width; } var userAgent = navigator.userAgent; var isMSIE = /MSIE|Trident/i.test(userAgent); var browserVersion; if (isMSIE) { var matches = /MSIE (\d+[.]\d+)/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } } var isEdge = /Edge\/\d+/.test(userAgent); var hasCodeMirror = !!window.CodeMirror; if (!hasCodeMirror && isSupportAmd) { // Webpack if (typeof __webpack_require__ === 'function') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } } else if (typeof require !== 'undefined') { // Browserify if (typeof require.resolve !== 'undefined') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } // Almond/Require } else if (typeof require.specified !== 'undefined') { hasCodeMirror = require.specified('codemirror'); } } } var isSupportTouch = (('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); // [workaround] IE doesn't have input events for contentEditable // - see: https://goo.gl/4bfIvA var inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input'; /** * @class core.env * * Object which check platform and agent * * @singleton * @alternateClassName env */ var env = { isMac: navigator.appVersion.indexOf('Mac') > -1, isMSIE: isMSIE, isEdge: isEdge, isFF: !isEdge && /firefox/i.test(userAgent), isPhantom: /PhantomJS/i.test(userAgent), isWebkit: !isEdge && /webkit/i.test(userAgent), isChrome: !isEdge && /chrome/i.test(userAgent), isSafari: !isEdge && /safari/i.test(userAgent), browserVersion: browserVersion, jqueryVersion: parseFloat($$1.fn.jquery), isSupportAmd: isSupportAmd, isSupportTouch: isSupportTouch, hasCodeMirror: hasCodeMirror, isFontInstalled: isFontInstalled, isW3CRangeSupport: !!document.createRange, inputEventName: inputEventName }; /** * @class core.func * * func utils (for high-order func's arg) * * @singleton * @alternateClassName func */ function eq(itemA) { return function (itemB) { return itemA === itemB; }; } function eq2(itemA, itemB) { return itemA === itemB; } function peq2(propName) { return function (itemA, itemB) { return itemA[propName] === itemB[propName]; }; } function ok() { return true; } function fail() { return false; } function not(f) { return function () { return !f.apply(f, arguments); }; } function and(fA, fB) { return function (item) { return fA(item) && fB(item); }; } function self(a) { return a; } function invoke(obj, method) { return function () { return obj[method].apply(obj, arguments); }; } var idCounter = 0; /** * generate a globally-unique id * * @param {String} [prefix] */ function uniqueId(prefix) { var id = ++idCounter + ''; return prefix ? prefix + id : id; } /** * returns bnd (bounds) from rect * * - IE Compatibility Issue: http://goo.gl/sRLOAo * - Scroll Issue: http://goo.gl/sNjUc * * @param {Rect} rect * @return {Object} bounds * @return {Number} bounds.top * @return {Number} bounds.left * @return {Number} bounds.width * @return {Number} bounds.height */ function rect2bnd(rect) { var $document = $(document); return { top: rect.top + $document.scrollTop(), left: rect.left + $document.scrollLeft(), width: rect.right - rect.left, height: rect.bottom - rect.top }; } /** * returns a copy of the object where the keys have become the values and the values the keys. * @param {Object} obj * @return {Object} */ function invertObject(obj) { var inverted = {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { inverted[obj[key]] = key; } } return inverted; } /** * @param {String} namespace * @param {String} [prefix] * @return {String} */ function namespaceToCamel(namespace, prefix) { prefix = prefix || ''; return prefix + namespace.split('.').map(function (name) { return name.substring(0, 1).toUpperCase() + name.substring(1); }).join(''); } /** * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for * N milliseconds. If `immediate` is passed, trigger the function on the * leading edge, instead of the trailing. * @param {Function} func * @param {Number} wait * @param {Boolean} immediate * @return {Function} */ function debounce(func, wait, immediate) { var _this = this; var timeout; return function () { var context = _this; var args = arguments; var later = function () { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } var func = { eq: eq, eq2: eq2, peq2: peq2, ok: ok, fail: fail, self: self, not: not, and: and, invoke: invoke, uniqueId: uniqueId, rect2bnd: rect2bnd, invertObject: invertObject, namespaceToCamel: namespaceToCamel, debounce: debounce }; /** * returns the first item of an array. * * @param {Array} array */ function head(array) { return array[0]; } /** * returns the last item of an array. * * @param {Array} array */ function last(array) { return array[array.length - 1]; } /** * returns everything but the last entry of the array. * * @param {Array} array */ function initial(array) { return array.slice(0, array.length - 1); } /** * returns the rest of the items in an array. * * @param {Array} array */ function tail(array) { return array.slice(1); } /** * returns item of array */ function find(array, pred) { for (var idx = 0, len = array.length; idx < len; idx++) { var item = array[idx]; if (pred(item)) { return item; } } } /** * returns true if all of the values in the array pass the predicate truth test. */ function all(array, pred) { for (var idx = 0, len = array.length; idx < len; idx++) { if (!pred(array[idx])) { return false; } } return true; } /** * returns index of item */ function indexOf(array, item) { return $$1.inArray(item, array); } /** * returns true if the value is present in the list. */ function contains(array, item) { return indexOf(array, item) !== -1; } /** * get sum from a list * * @param {Array} array - array * @param {Function} fn - iterator */ function sum(array, fn) { fn = fn || func.self; return array.reduce(function (memo, v) { return memo + fn(v); }, 0); } /** * returns a copy of the collection with array type. * @param {Collection} collection - collection eg) node.childNodes, ... */ function from(collection) { var result = []; var length = collection.length; var idx = -1; while (++idx < length) { result[idx] = collection[idx]; } return result; } /** * returns whether list is empty or not */ function isEmpty(array) { return !array || !array.length; } /** * cluster elements by predicate function. * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule * @param {Array[]} */ function clusterBy(array, fn) { if (!array.length) { return []; } var aTail = tail(array); return aTail.reduce(function (memo, v) { var aLast = last(memo); if (fn(last(aLast), v)) { aLast[aLast.length] = v; } else { memo[memo.length] = [v]; } return memo; }, [[head(array)]]); } /** * returns a copy of the array with all false values removed * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule */ function compact(array) { var aResult = []; for (var idx = 0, len = array.length; idx < len; idx++) { if (array[idx]) { aResult.push(array[idx]); } } return aResult; } /** * produces a duplicate-free version of the array * * @param {Array} array */ function unique(array) { var results = []; for (var idx = 0, len = array.length; idx < len; idx++) { if (!contains(results, array[idx])) { results.push(array[idx]); } } return results; } /** * returns next item. * @param {Array} array */ function next(array, item) { var idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx + 1]; } /** * returns prev item. * @param {Array} array */ function prev(array, item) { var idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx - 1]; } /** * @class core.list * * list utils * * @singleton * @alternateClassName list */ var lists = { head: head, last: last, initial: initial, tail: tail, prev: prev, next: next, find: find, contains: contains, all: all, sum: sum, from: from, isEmpty: isEmpty, clusterBy: clusterBy, compact: compact, unique: unique }; var KEY_MAP = { 'BACKSPACE': 8, 'TAB': 9, 'ENTER': 13, 'SPACE': 32, 'DELETE': 46, // Arrow 'LEFT': 37, 'UP': 38, 'RIGHT': 39, 'DOWN': 40, // Number: 0-9 'NUM0': 48, 'NUM1': 49, 'NUM2': 50, 'NUM3': 51, 'NUM4': 52, 'NUM5': 53, 'NUM6': 54, 'NUM7': 55, 'NUM8': 56, // Alphabet: a-z 'B': 66, 'E': 69, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'R': 82, 'S': 83, 'U': 85, 'V': 86, 'Y': 89, 'Z': 90, 'SLASH': 191, 'LEFTBRACKET': 219, 'BACKSLASH': 220, 'RIGHTBRACKET': 221 }; /** * @class core.key * * Object for keycodes. * * @singleton * @alternateClassName key */ var key = { /** * @method isEdit * * @param {Number} keyCode * @return {Boolean} */ isEdit: function (keyCode) { return lists.contains([ KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE ], keyCode); }, /** * @method isMove * * @param {Number} keyCode * @return {Boolean} */ isMove: function (keyCode) { return lists.contains([ KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN ], keyCode); }, /** * @property {Object} nameFromCode * @property {String} nameFromCode.8 "BACKSPACE" */ nameFromCode: func.invertObject(KEY_MAP), code: KEY_MAP }; var NBSP_CHAR = String.fromCharCode(160); var ZERO_WIDTH_NBSP_CHAR = '\ufeff'; /** * @method isEditable * * returns whether node is `note-editable` or not. * * @param {Node} node * @return {Boolean} */ function isEditable(node) { return node && $$1(node).hasClass('note-editable'); } /** * @method isControlSizing * * returns whether node is `note-control-sizing` or not. * * @param {Node} node * @return {Boolean} */ function isControlSizing(node) { return node && $$1(node).hasClass('note-control-sizing'); } /** * @method makePredByNodeName * * returns predicate which judge whether nodeName is same * * @param {String} nodeName * @return {Function} */ function makePredByNodeName(nodeName) { nodeName = nodeName.toUpperCase(); return function (node) { return node && node.nodeName.toUpperCase() === nodeName; }; } /** * @method isText * * * * @param {Node} node * @return {Boolean} true if node's type is text(3) */ function isText(node) { return node && node.nodeType === 3; } /** * @method isElement * * * * @param {Node} node * @return {Boolean} true if node's type is element(1) */ function isElement(node) { return node && node.nodeType === 1; } /** * ex) br, col, embed, hr, img, input, ... * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements */ function isVoid(node) { return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase()); } function isPara(node) { if (isEditable(node)) { return false; } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); } function isHeading(node) { return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); } var isPre = makePredByNodeName('PRE'); var isLi = makePredByNodeName('LI'); function isPurePara(node) { return isPara(node) && !isLi(node); } var isTable = makePredByNodeName('TABLE'); var isData = makePredByNodeName('DATA'); function isInline(node) { return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node); } function isList(node) { return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); } var isHr = makePredByNodeName('HR'); function isCell(node) { return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); } var isBlockquote = makePredByNodeName('BLOCKQUOTE'); function isBodyContainer(node) { return isCell(node) || isBlockquote(node) || isEditable(node); } var isAnchor = makePredByNodeName('A'); function isParaInline(node) { return isInline(node) && !!ancestor(node, isPara); } function isBodyInline(node) { return isInline(node) && !ancestor(node, isPara); } var isBody = makePredByNodeName('BODY'); /** * returns whether nodeB is closest sibling of nodeA * * @param {Node} nodeA * @param {Node} nodeB * @return {Boolean} */ function isClosestSibling(nodeA, nodeB) { return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB; } /** * returns array of closest siblings with node * * @param {Node} node * @param {function} [pred] - predicate function * @return {Node[]} */ function withClosestSiblings(node, pred) { pred = pred || func.ok; var siblings = []; if (node.previousSibling && pred(node.previousSibling)) { siblings.push(node.previousSibling); } siblings.push(node); if (node.nextSibling && pred(node.nextSibling)) { siblings.push(node.nextSibling); } return siblings; } /** * blank HTML for cursor position * - [workaround] old IE only works with * - [workaround] IE11 and other browser works with bogus br */ var blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>'; /** * @method nodeLength * * returns #text's text size or element's childNodes size * * @param {Node} node */ function nodeLength(node) { if (isText(node)) { return node.nodeValue.length; } if (node) { return node.childNodes.length; } return 0; } /** * returns whether node is empty or not. * * @param {Node} node * @return {Boolean} */ function isEmpty$1(node) { var len = nodeLength(node); if (len === 0) { return true; } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { // ex) <p><br></p>, <span><br></span> return true; } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') { // ex) <p></p>, <span></span> return true; } return false; } /** * padding blankHTML if node is empty (for cursor position) */ function paddingBlankHTML(node) { if (!isVoid(node) && !nodeLength(node)) { node.innerHTML = blankHTML; } } /** * find nearest ancestor predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function ancestor(node, pred) { while (node) { if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * find nearest ancestor only single child blood line and predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function singleChildAncestor(node, pred) { node = node.parentNode; while (node) { if (nodeLength(node) !== 1) { break; } if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * returns new array of ancestor nodes (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listAncestor(node, pred) { pred = pred || func.fail; var ancestors = []; ancestor(node, function (el) { if (!isEditable(el)) { ancestors.push(el); } return pred(el); }); return ancestors; } /** * find farthest ancestor predicate hit */ function lastAncestor(node, pred) { var ancestors = listAncestor(node); return lists.last(ancestors.filter(pred)); } /** * returns common ancestor node between two nodes. * * @param {Node} nodeA * @param {Node} nodeB */ function commonAncestor(nodeA, nodeB) { var ancestors = listAncestor(nodeA); for (var n = nodeB; n; n = n.parentNode) { if ($$1.inArray(n, ancestors) > -1) { return n; } } return null; // difference document area } /** * listing all previous siblings (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listPrev(node, pred) { pred = pred || func.fail; var nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.previousSibling; } return nodes; } /** * listing next siblings (until predicate hit). * * @param {Node} node * @param {Function} [pred] - predicate function */ function listNext(node, pred) { pred = pred || func.fail; var nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.nextSibling; } return nodes; } /** * listing descendant nodes * * @param {Node} node * @param {Function} [pred] - predicate function */ function listDescendant(node, pred) { var descendants = []; pred = pred || func.ok; // start DFS(depth first search) with node (function fnWalk(current) { if (node !== current && pred(current)) { descendants.push(current); } for (var idx = 0, len = current.childNodes.length; idx < len; idx++) { fnWalk(current.childNodes[idx]); } })(node); return descendants; } /** * wrap node with new tag. * * @param {Node} node * @param {Node} tagName of wrapper * @return {Node} - wrapper */ function wrap(node, wrapperName) { var parent = node.parentNode; var wrapper = $$1('<' + wrapperName + '>')[0]; parent.insertBefore(wrapper, node); wrapper.appendChild(node); return wrapper; } /** * insert node after preceding * * @param {Node} node * @param {Node} preceding - predicate function */ function insertAfter(node, preceding) { var next = preceding.nextSibling; var parent = preceding.parentNode; if (next) { parent.insertBefore(node, next); } else { parent.appendChild(node); } return node; } /** * append elements. * * @param {Node} node * @param {Collection} aChild */ function appendChildNodes(node, aChild) { $$1.each(aChild, function (idx, child) { node.appendChild(child); }); return node; } /** * returns whether boundaryPoint is left edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isLeftEdgePoint(point) { return point.offset === 0; } /** * returns whether boundaryPoint is right edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isRightEdgePoint(point) { return point.offset === nodeLength(point.node); } /** * returns whether boundaryPoint is edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isEdgePoint(point) { return isLeftEdgePoint(point) || isRightEdgePoint(point); } /** * returns whether node is left edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgeOf(node, ancestor) { while (node && node !== ancestor) { if (position(node) !== 0) { return false; } node = node.parentNode; } return true; } /** * returns whether node is right edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isRightEdgeOf(node, ancestor) { if (!ancestor) { return false; } while (node && node !== ancestor) { if (position(node) !== nodeLength(node.parentNode) - 1) { return false; } node = node.parentNode; } return true; } /** * returns whether point is left edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgePointOf(point, ancestor) { return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); } /** * returns whether point is right edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isRightEdgePointOf(point, ancestor) { return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); } /** * returns offset from parent. * * @param {Node} node */ function position(node) { var offset = 0; while ((node = node.previousSibling)) { offset += 1; } return offset; } function hasChildren(node) { return !!(node && node.childNodes && node.childNodes.length); } /** * returns previous boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function prevPoint(point, isSkipInnerOffset) { var node; var offset; if (point.offset === 0) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node); } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset - 1]; offset = nodeLength(node); } else { node = point.node; offset = isSkipInnerOffset ? 0 : point.offset - 1; } return { node: node, offset: offset }; } /** * returns next boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function nextPoint(point, isSkipInnerOffset) { var node, offset; if (nodeLength(point.node) === point.offset) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node) + 1; } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset]; offset = 0; } else { node = point.node; offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; } return { node: node, offset: offset }; } /** * returns whether pointA and pointB is same or not. * * @param {BoundaryPoint} pointA * @param {BoundaryPoint} pointB * @return {Boolean} */ function isSamePoint(pointA, pointB) { return pointA.node === pointB.node && pointA.offset === pointB.offset; } /** * returns whether point is visible (can set cursor) or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isVisiblePoint(point) { if (isText(point.node) || !hasChildren(point.node) || isEmpty$1(point.node)) { return true; } var leftNode = point.node.childNodes[point.offset - 1]; var rightNode = point.node.childNodes[point.offset]; if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { return true; } return false; } /** * @method prevPointUtil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function prevPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = prevPoint(point); } return null; } /** * @method nextPointUntil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function nextPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = nextPoint(point); } return null; } /** * returns whether point has character or not. * * @param {Point} point * @return {Boolean} */ function isCharPoint(point) { if (!isText(point.node)) { return false; } var ch = point.node.nodeValue.charAt(point.offset - 1); return ch && (ch !== ' ' && ch !== NBSP_CHAR); } /** * @method walkPoint * * @param {BoundaryPoint} startPoint * @param {BoundaryPoint} endPoint * @param {Function} handler * @param {Boolean} isSkipInnerOffset */ function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) { var point = startPoint; while (point) { handler(point); if (isSamePoint(point, endPoint)) { break; } var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node; point = nextPoint(point, isSkipOffset); } } /** * @method makeOffsetPath * * return offsetPath(array of offset) from ancestor * * @param {Node} ancestor - ancestor node * @param {Node} node */ function makeOffsetPath(ancestor, node) { var ancestors = listAncestor(node, func.eq(ancestor)); return ancestors.map(position).reverse(); } /** * @method fromOffsetPath * * return element from offsetPath(array of offset) * * @param {Node} ancestor - ancestor node * @param {array} offsets - offsetPath */ function fromOffsetPath(ancestor, offsets) { var current = ancestor; for (var i = 0, len = offsets.length; i < len; i++) { if (current.childNodes.length <= offsets[i]) { current = current.childNodes[current.childNodes.length - 1]; } else { current = current.childNodes[offsets[i]]; } } return current; } /** * @method splitNode * * split element or #text * * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitNode(point, options) { var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; // edge case if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { if (isLeftEdgePoint(point)) { return point.node; } else if (isRightEdgePoint(point)) { return point.node.nextSibling; } } // split #text if (isText(point.node)) { return point.node.splitText(point.offset); } else { var childNode = point.node.childNodes[point.offset]; var clone = insertAfter(point.node.cloneNode(false), point.node); appendChildNodes(clone, listNext(childNode)); if (!isSkipPaddingBlankHTML) { paddingBlankHTML(point.node); paddingBlankHTML(clone); } return clone; } } /** * @method splitTree * * split tree by point * * @param {Node} root - split root * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitTree(root, point, options) { // ex) [#text, <span>, <p>] var ancestors = listAncestor(point.node, func.eq(root)); if (!ancestors.length) { return null; } else if (ancestors.length === 1) { return splitNode(point, options); } return ancestors.reduce(function (node, parent) { if (node === point.node) { node = splitNode(point, options); } return splitNode({ node: parent, offset: node ? position(node) : nodeLength(parent) }, options); }); } /** * split point * * @param {Point} point * @param {Boolean} isInline * @return {Object} */ function splitPoint(point, isInline) { // find splitRoot, container // - inline: splitRoot is a child of paragraph // - block: splitRoot is a child of bodyContainer var pred = isInline ? isPara : isBodyContainer; var ancestors = listAncestor(point.node, pred); var topAncestor = lists.last(ancestors) || point.node; var splitRoot, container; if (pred(topAncestor)) { splitRoot = ancestors[ancestors.length - 2]; container = topAncestor; } else { splitRoot = topAncestor; container = splitRoot.parentNode; } // if splitRoot is exists, split with splitTree var pivot = splitRoot && splitTree(splitRoot, point, { isSkipPaddingBlankHTML: isInline, isNotSplitEdgePoint: isInline }); // if container is point.node, find pivot with point.offset if (!pivot && container === point.node) { pivot = point.node.childNodes[point.offset]; } return { rightNode: pivot, container: container }; } function create(nodeName) { return document.createElement(nodeName); } function createText(text) { return document.createTextNode(text); } /** * @method remove * * remove node, (isRemoveChild: remove child or not) * * @param {Node} node * @param {Boolean} isRemoveChild */ function remove(node, isRemoveChild) { if (!node || !node.parentNode) { return; } if (node.removeNode) { return node.removeNode(isRemoveChild); } var parent = node.parentNode; if (!isRemoveChild) { var nodes = []; for (var i = 0, len = node.childNodes.length; i < len; i++) { nodes.push(node.childNodes[i]); } for (var i = 0, len = nodes.length; i < len; i++) { parent.insertBefore(nodes[i], node); } } parent.removeChild(node); } /** * @method removeWhile * * @param {Node} node * @param {Function} pred */ function removeWhile(node, pred) { while (node) { if (isEditable(node) || !pred(node)) { break; } var parent = node.parentNode; remove(node); node = parent; } } /** * @method replace * * replace node with provided nodeName * * @param {Node} node * @param {String} nodeName * @return {Node} - new node */ function replace(node, nodeName) { if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { return node; } var newNode = create(nodeName); if (node.style.cssText) { newNode.style.cssText = node.style.cssText; } appendChildNodes(newNode, lists.from(node.childNodes)); insertAfter(newNode, node); remove(node); return newNode; } var isTextarea = makePredByNodeName('TEXTAREA'); /** * @param {jQuery} $node * @param {Boolean} [stripLinebreaks] - default: false */ function value($node, stripLinebreaks) { var val = isTextarea($node[0]) ? $node.val() : $node.html(); if (stripLinebreaks) { return val.replace(/[\n\r]/g, ''); } return val; } /** * @method html * * get the HTML contents of node * * @param {jQuery} $node * @param {Boolean} [isNewlineOnBlock] */ function html($node, isNewlineOnBlock) { var markup = value($node); if (isNewlineOnBlock) { var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g; markup = markup.replace(regexTag, function (match, endSlash, name) { name = name.toUpperCase(); var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash; var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name); return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : ''); }); markup = $$1.trim(markup); } return markup; } function posFromPlaceholder(placeholder) { var $placeholder = $$1(placeholder); var pos = $placeholder.offset(); var height = $placeholder.outerHeight(true); // include margin return { left: pos.left, top: pos.top + height }; } function attachEvents($node, events) { Object.keys(events).forEach(function (key) { $node.on(key, events[key]); }); } function detachEvents($node, events) { Object.keys(events).forEach(function (key) { $node.off(key, events[key]); }); } /** * @method isCustomStyleTag * * assert if a node contains a "note-styletag" class, * which implies that's a custom-made style tag node * * @param {Node} an HTML DOM node */ function isCustomStyleTag(node) { return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); } var dom = { /** @property {String} NBSP_CHAR */ NBSP_CHAR: NBSP_CHAR, /** @property {String} ZERO_WIDTH_NBSP_CHAR */ ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR, /** @property {String} blank */ blank: blankHTML, /** @property {String} emptyPara */ emptyPara: "<p>" + blankHTML + "</p>", makePredByNodeName: makePredByNodeName, isEditable: isEditable, isControlSizing: isControlSizing, isText: isText, isElement: isElement, isVoid: isVoid, isPara: isPara, isPurePara: isPurePara, isHeading: isHeading, isInline: isInline, isBlock: func.not(isInline), isBodyInline: isBodyInline, isBody: isBody, isParaInline: isParaInline, isPre: isPre, isList: isList, isTable: isTable, isData: isData, isCell: isCell, isBlockquote: isBlockquote, isBodyContainer: isBodyContainer, isAnchor: isAnchor, isDiv: makePredByNodeName('DIV'), isLi: isLi, isBR: makePredByNodeName('BR'), isSpan: makePredByNodeName('SPAN'), isB: makePredByNodeName('B'), isU: makePredByNodeName('U'), isS: makePredByNodeName('S'), isI: makePredByNodeName('I'), isImg: makePredByNodeName('IMG'), isTextarea: isTextarea, isEmpty: isEmpty$1, isEmptyAnchor: func.and(isAnchor, isEmpty$1), isClosestSibling: isClosestSibling, withClosestSiblings: withClosestSiblings, nodeLength: nodeLength, isLeftEdgePoint: isLeftEdgePoint, isRightEdgePoint: isRightEdgePoint, isEdgePoint: isEdgePoint, isLeftEdgeOf: isLeftEdgeOf, isRightEdgeOf: isRightEdgeOf, isLeftEdgePointOf: isLeftEdgePointOf, isRightEdgePointOf: isRightEdgePointOf, prevPoint: prevPoint, nextPoint: nextPoint, isSamePoint: isSamePoint, isVisiblePoint: isVisiblePoint, prevPointUntil: prevPointUntil, nextPointUntil: nextPointUntil, isCharPoint: isCharPoint, walkPoint: walkPoint, ancestor: ancestor, singleChildAncestor: singleChildAncestor, listAncestor: listAncestor, lastAncestor: lastAncestor, listNext: listNext, listPrev: listPrev, listDescendant: listDescendant, commonAncestor: commonAncestor, wrap: wrap, insertAfter: insertAfter, appendChildNodes: appendChildNodes, position: position, hasChildren: hasChildren, makeOffsetPath: makeOffsetPath, fromOffsetPath: fromOffsetPath, splitTree: splitTree, splitPoint: splitPoint, create: create, createText: createText, remove: remove, removeWhile: removeWhile, replace: replace, html: html, value: value, posFromPlaceholder: posFromPlaceholder, attachEvents: attachEvents, detachEvents: detachEvents, isCustomStyleTag: isCustomStyleTag }; /** * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js * * @param {TextRange} textRange * @param {Boolean} isStart * @return {BoundaryPoint} * * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx */ function textRangeToPoint(textRange, isStart) { var container = textRange.parentElement(); var offset; var tester = document.body.createTextRange(); var prevContainer; var childNodes = lists.from(container.childNodes); for (offset = 0; offset < childNodes.length; offset++) { if (dom.isText(childNodes[offset])) { continue; } tester.moveToElementText(childNodes[offset]); if (tester.compareEndPoints('StartToStart', textRange) >= 0) { break; } prevContainer = childNodes[offset]; } if (offset !== 0 && dom.isText(childNodes[offset - 1])) { var textRangeStart = document.body.createTextRange(); var curTextNode = null; textRangeStart.moveToElementText(prevContainer || container); textRangeStart.collapse(!prevContainer); curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild; var pointTester = textRange.duplicate(); pointTester.setEndPoint('StartToStart', textRangeStart); var textCount = pointTester.text.replace(/[\r\n]/g, '').length; while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } // [workaround] enforce IE to re-reference curTextNode, hack var dummy = curTextNode.nodeValue; // eslint-disable-line if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } container = curTextNode; offset = textCount; } return { cont: container, offset: offset }; } /** * return TextRange from boundary point (inspired by google closure-library) * @param {BoundaryPoint} point * @return {TextRange} */ function pointToTextRange(point) { var textRangeInfo = function (container, offset) { var node, isCollapseToStart; if (dom.isText(container)) { var prevTextNodes = dom.listPrev(container, func.not(dom.isText)); var prevContainer = lists.last(prevTextNodes).previousSibling; node = prevContainer || container.parentNode; offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength); isCollapseToStart = !prevContainer; } else { node = container.childNodes[offset] || container; if (dom.isText(node)) { return textRangeInfo(node, 0); } offset = 0; isCollapseToStart = false; } return { node: node, collapseToStart: isCollapseToStart, offset: offset }; }; var textRange = document.body.createTextRange(); var info = textRangeInfo(point.node, point.offset); textRange.moveToElementText(info.node); textRange.collapse(info.collapseToStart); textRange.moveStart('character', info.offset); return textRange; } /** * Wrapped Range * * @constructor * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset */ var WrappedRange = /** @class */ (function () { function WrappedRange(sc, so, ec, eo) { this.sc = sc; this.so = so; this.ec = ec; this.eo = eo; // isOnEditable: judge whether range is on editable or not this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not this.isOnData = this.makeIsOn(dom.isData); } // nativeRange: get nativeRange from sc, so, ec, eo WrappedRange.prototype.nativeRange = function () { if (env.isW3CRangeSupport) { var w3cRange = document.createRange(); w3cRange.setStart(this.sc, this.so); w3cRange.setEnd(this.ec, this.eo); return w3cRange; } else { var textRange = pointToTextRange({ node: this.sc, offset: this.so }); textRange.setEndPoint('EndToEnd', pointToTextRange({ node: this.ec, offset: this.eo })); return textRange; } }; WrappedRange.prototype.getPoints = function () { return { sc: this.sc, so: this.so, ec: this.ec, eo: this.eo }; }; WrappedRange.prototype.getStartPoint = function () { return { node: this.sc, offset: this.so }; }; WrappedRange.prototype.getEndPoint = function () { return { node: this.ec, offset: this.eo }; }; /** * select update visible range */ WrappedRange.prototype.select = function () { var nativeRng = this.nativeRange(); if (env.isW3CRangeSupport) { var selection = document.getSelection(); if (selection.rangeCount > 0) { selection.removeAllRanges(); } selection.addRange(nativeRng); } else { nativeRng.select(); } return this; }; /** * Moves the scrollbar to start container(sc) of current range * * @return {WrappedRange} */ WrappedRange.prototype.scrollIntoView = function (container) { var height = $$1(container).height(); if (container.scrollTop + height < this.sc.offsetTop) { container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop); } return this; }; /** * @return {WrappedRange} */ WrappedRange.prototype.normalize = function () { /** * @param {BoundaryPoint} point * @param {Boolean} isLeftToRight * @return {BoundaryPoint} */ var getVisiblePoint = function (point, isLeftToRight) { if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { return point; } // point on block's edge var block = dom.ancestor(point.node, dom.isBlock); if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { // returns point already on visible point if (dom.isVisiblePoint(point)) { return point; } // reverse direction isLeftToRight = !isLeftToRight; } var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); return nextPoint || point; }; var endPoint = getVisiblePoint(this.getEndPoint(), false); var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); }; /** * returns matched nodes on range * * @param {Function} [pred] - predicate function * @param {Object} [options] * @param {Boolean} [options.includeAncestor] * @param {Boolean} [options.fullyContains] * @return {Node[]} */ WrappedRange.prototype.nodes = function (pred, options) { pred = pred || func.ok; var includeAncestor = options && options.includeAncestor; var fullyContains = options && options.fullyContains; // TODO compare points and sort var startPoint = this.getStartPoint(); var endPoint = this.getEndPoint(); var nodes = []; var leftEdgeNodes = []; dom.walkPoint(startPoint, endPoint, function (point) { if (dom.isEditable(point.node)) { return; } var node; if (fullyContains) { if (dom.isLeftEdgePoint(point)) { leftEdgeNodes.push(point.node); } if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) { node = point.node; } } else if (includeAncestor) { node = dom.ancestor(point.node, pred); } else { node = point.node; } if (node && pred(node)) { nodes.push(node); } }, true); return lists.unique(nodes); }; /** * returns commonAncestor of range * @return {Element} - commonAncestor */ WrappedRange.prototype.commonAncestor = function () { return dom.commonAncestor(this.sc, this.ec); }; /** * returns expanded range by pred * * @param {Function} pred - predicate function * @return {WrappedRange} */ WrappedRange.prototype.expand = function (pred) { var startAncestor = dom.ancestor(this.sc, pred); var endAncestor = dom.ancestor(this.ec, pred); if (!startAncestor && !endAncestor) { return new WrappedRange(this.sc, this.so, this.ec, this.eo); } var boundaryPoints = this.getPoints(); if (startAncestor) { boundaryPoints.sc = startAncestor; boundaryPoints.so = 0; } if (endAncestor) { boundaryPoints.ec = endAncestor; boundaryPoints.eo = dom.nodeLength(endAncestor); } return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); }; /** * @param {Boolean} isCollapseToStart * @return {WrappedRange} */ WrappedRange.prototype.collapse = function (isCollapseToStart) { if (isCollapseToStart) { return new WrappedRange(this.sc, this.so, this.sc, this.so); } else { return new WrappedRange(this.ec, this.eo, this.ec, this.eo); } }; /** * splitText on range */ WrappedRange.prototype.splitText = function () { var isSameContainer = this.sc === this.ec; var boundaryPoints = this.getPoints(); if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) { this.ec.splitText(this.eo); } if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) { boundaryPoints.sc = this.sc.splitText(this.so); boundaryPoints.so = 0; if (isSameContainer) { boundaryPoints.ec = boundaryPoints.sc; boundaryPoints.eo = this.eo - this.so; } } return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); }; /** * delete contents on range * @return {WrappedRange} */ WrappedRange.prototype.deleteContents = function () { if (this.isCollapsed()) { return this; } var rng = this.splitText(); var nodes = rng.nodes(null, { fullyContains: true }); // find new cursor point var point = dom.prevPointUntil(rng.getStartPoint(), function (point) { return !lists.contains(nodes, point.node); }); var emptyParents = []; $$1.each(nodes, function (idx, node) { // find empty parents var parent = node.parentNode; if (point.node !== parent && dom.nodeLength(parent) === 1) { emptyParents.push(parent); } dom.remove(node, false); }); // remove empty parents $$1.each(emptyParents, function (idx, node) { dom.remove(node, false); }); return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize(); }; /** * makeIsOn: return isOn(pred) function */ WrappedRange.prototype.makeIsOn = function (pred) { return function () { var ancestor = dom.ancestor(this.sc, pred); return !!ancestor && (ancestor === dom.ancestor(this.ec, pred)); }; }; /** * @param {Function} pred * @return {Boolean} */ WrappedRange.prototype.isLeftEdgeOf = function (pred) { if (!dom.isLeftEdgePoint(this.getStartPoint())) { return false; } var node = dom.ancestor(this.sc, pred); return node && dom.isLeftEdgeOf(this.sc, node); }; /** * returns whether range was collapsed or not */ WrappedRange.prototype.isCollapsed = function () { return this.sc === this.ec && this.so === this.eo; }; /** * wrap inline nodes which children of body with paragraph * * @return {WrappedRange} */ WrappedRange.prototype.wrapBodyInlineWithPara = function () { if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) { this.sc.innerHTML = dom.emptyPara; return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0); } /** * [workaround] firefox often create range on not visible point. so normalize here. * - firefox: |<p>text</p>| * - chrome: <p>|text|</p> */ var rng = this.normalize(); if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) { return rng; } // find inline top ancestor var topAncestor; if (dom.isInline(rng.sc)) { var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); topAncestor = lists.last(ancestors); if (!dom.isInline(topAncestor)) { topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so]; } } else { topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0]; } // siblings not in paragraph var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph if (inlineSiblings.length) { var para = dom.wrap(lists.head(inlineSiblings), 'p'); dom.appendChildNodes(para, lists.tail(inlineSiblings)); } return this.normalize(); }; /** * insert node at current cursor * * @param {Node} node * @return {Node} */ WrappedRange.prototype.insertNode = function (node) { var rng = this.wrapBodyInlineWithPara().deleteContents(); var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); if (info.rightNode) { info.rightNode.parentNode.insertBefore(node, info.rightNode); } else { info.container.appendChild(node); } return node; }; /** * insert html at current cursor */ WrappedRange.prototype.pasteHTML = function (markup) { var contentsContainer = $$1('<div></div>').html(markup)[0]; var childNodes = lists.from(contentsContainer.childNodes); var rng = this.wrapBodyInlineWithPara().deleteContents(); return childNodes.reverse().map(function (childNode) { return rng.insertNode(childNode); }).reverse(); }; /** * returns text in range * * @return {String} */ WrappedRange.prototype.toString = function () { var nativeRng = this.nativeRange(); return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text; }; /** * returns range for word before cursor * * @param {Boolean} [findAfter] - find after cursor, default: false * @return {WrappedRange} */ WrappedRange.prototype.getWordRange = function (findAfter) { var endPoint = this.getEndPoint(); if (!dom.isCharPoint(endPoint)) { return this; } var startPoint = dom.prevPointUntil(endPoint, function (point) { return !dom.isCharPoint(point); }); if (findAfter) { endPoint = dom.nextPointUntil(endPoint, function (point) { return !dom.isCharPoint(point); }); } return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); }; /** * create offsetPath bookmark * * @param {Node} editable */ WrappedRange.prototype.bookmark = function (editable) { return { s: { path: dom.makeOffsetPath(editable, this.sc), offset: this.so }, e: { path: dom.makeOffsetPath(editable, this.ec), offset: this.eo } }; }; /** * create offsetPath bookmark base on paragraph * * @param {Node[]} paras */ WrappedRange.prototype.paraBookmark = function (paras) { return { s: { path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)), offset: this.so }, e: { path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)), offset: this.eo } }; }; /** * getClientRects * @return {Rect[]} */ WrappedRange.prototype.getClientRects = function () { var nativeRng = this.nativeRange(); return nativeRng.getClientRects(); }; return WrappedRange; }()); /** * Data structure * * BoundaryPoint: a point of dom tree * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range * * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position */ var range = { /** * create Range Object From arguments or Browser Selection * * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset * @return {WrappedRange} */ create: function (sc, so, ec, eo) { if (arguments.length === 4) { return new WrappedRange(sc, so, ec, eo); } else if (arguments.length === 2) { ec = sc; eo = so; return new WrappedRange(sc, so, ec, eo); } else { var wrappedRange = this.createFromSelection(); if (!wrappedRange && arguments.length === 1) { wrappedRange = this.createFromNode(arguments[0]); return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); } return wrappedRange; } }, createFromSelection: function () { var sc, so, ec, eo; if (env.isW3CRangeSupport) { var selection = document.getSelection(); if (!selection || selection.rangeCount === 0) { return null; } else if (dom.isBody(selection.anchorNode)) { // Firefox: returns entire body as range on initialization. // We won't never need it. return null; } var nativeRng = selection.getRangeAt(0); sc = nativeRng.startContainer; so = nativeRng.startOffset; ec = nativeRng.endContainer; eo = nativeRng.endOffset; } else { var textRange = document.selection.createRange(); var textRangeEnd = textRange.duplicate(); textRangeEnd.collapse(false); var textRangeStart = textRange; textRangeStart.collapse(true); var startPoint = textRangeToPoint(textRangeStart, true); var endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed. if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) { startPoint = endPoint; } sc = startPoint.cont; so = startPoint.offset; ec = endPoint.cont; eo = endPoint.offset; } return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from node * * @param {Node} node * @return {WrappedRange} */ createFromNode: function (node) { var sc = node; var so = 0; var ec = node; var eo = dom.nodeLength(ec); // browsers can't target a picture or void node if (dom.isVoid(sc)) { so = dom.listPrev(sc).length - 1; sc = sc.parentNode; } if (dom.isBR(ec)) { eo = dom.listPrev(ec).length - 1; ec = ec.parentNode; } else if (dom.isVoid(ec)) { eo = dom.listPrev(ec).length; ec = ec.parentNode; } return this.create(sc, so, ec, eo); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeBefore: function (node) { return this.createFromNode(node).collapse(true); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeAfter: function (node) { return this.createFromNode(node).collapse(); }, /** * @method * * create WrappedRange from bookmark * * @param {Node} editable * @param {Object} bookmark * @return {WrappedRange} */ createFromBookmark: function (editable, bookmark) { var sc = dom.fromOffsetPath(editable, bookmark.s.path); var so = bookmark.s.offset; var ec = dom.fromOffsetPath(editable, bookmark.e.path); var eo = bookmark.e.offset; return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from paraBookmark * * @param {Object} bookmark * @param {Node[]} paras * @return {WrappedRange} */ createFromParaBookmark: function (bookmark, paras) { var so = bookmark.s.offset; var eo = bookmark.e.offset; var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path); var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path); return new WrappedRange(sc, so, ec, eo); } }; /** * @method readFileAsDataURL * * read contents of file as representing URL * * @param {File} file * @return {Promise} - then: dataUrl */ function readFileAsDataURL(file) { return $$1.Deferred(function (deferred) { $$1.extend(new FileReader(), { onload: function (e) { var dataURL = e.target.result; deferred.resolve(dataURL); }, onerror: function (err) { deferred.reject(err); } }).readAsDataURL(file); }).promise(); } /** * @method createImage * * create `<image>` from url string * * @param {String} url * @return {Promise} - then: $image */ function createImage(url) { return $$1.Deferred(function (deferred) { var $img = $$1('<img>'); $img.one('load', function () { $img.off('error abort'); deferred.resolve($img); }).one('error abort', function () { $img.off('load').detach(); deferred.reject($img); }).css({ display: 'none' }).appendTo(document.body).attr('src', url); }).promise(); } var History = /** @class */ (function () { function History($editable) { this.stack = []; this.stackOffset = -1; this.$editable = $editable; this.editable = $editable[0]; } History.prototype.makeSnapshot = function () { var rng = range.create(this.editable); var emptyBookmark = { s: { path: [], offset: 0 }, e: { path: [], offset: 0 } }; return { contents: this.$editable.html(), bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark) }; }; History.prototype.applySnapshot = function (snapshot) { if (snapshot.contents !== null) { this.$editable.html(snapshot.contents); } if (snapshot.bookmark !== null) { range.createFromBookmark(this.editable, snapshot.bookmark).select(); } }; /** * @method rewind * Rewinds the history stack back to the first snapshot taken. * Leaves the stack intact, so that "Redo" can still be used. */ History.prototype.rewind = function () { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } // Return to the first available snapshot. this.stackOffset = 0; // Apply that snapshot. this.applySnapshot(this.stack[this.stackOffset]); }; /** * @method reset * Resets the history stack completely; reverting to an empty editor. */ History.prototype.reset = function () { // Clear the stack. this.stack = []; // Restore stackOffset to its original value. this.stackOffset = -1; // Clear the editable area. this.$editable.html(''); // Record our first snapshot (of nothing). this.recordUndo(); }; /** * undo */ History.prototype.undo = function () { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } if (this.stackOffset > 0) { this.stackOffset--; this.applySnapshot(this.stack[this.stackOffset]); } }; /** * redo */ History.prototype.redo = function () { if (this.stack.length - 1 > this.stackOffset) { this.stackOffset++; this.applySnapshot(this.stack[this.stackOffset]); } }; /** * recorded undo */ History.prototype.recordUndo = function () { this.stackOffset++; // Wash out stack after stackOffset if (this.stack.length > this.stackOffset) { this.stack = this.stack.slice(0, this.stackOffset); } // Create new snapshot and push it to the end this.stack.push(this.makeSnapshot()); }; return History; }()); var Style = /** @class */ (function () { function Style() { } /** * @method jQueryCSS * * [workaround] for old jQuery * passing an array of style properties to .css() * will result in an object of property-value pairs. * (compability with version < 1.9) * * @private * @param {jQuery} $obj * @param {Array} propertyNames - An array of one or more CSS properties. * @return {Object} */ Style.prototype.jQueryCSS = function ($obj, propertyNames) { if (env.jqueryVersion < 1.9) { var result_1 = {}; $$1.each(propertyNames, function (idx, propertyName) { result_1[propertyName] = $obj.css(propertyName); }); return result_1; } return $obj.css(propertyNames); }; /** * returns style object from node * * @param {jQuery} $node * @return {Object} */ Style.prototype.fromNode = function ($node) { var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; var styleInfo = this.jQueryCSS($node, properties) || {}; styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); return styleInfo; }; /** * paragraph level style * * @param {WrappedRange} rng * @param {Object} styleInfo */ Style.prototype.stylePara = function (rng, styleInfo) { $$1.each(rng.nodes(dom.isPara, { includeAncestor: true }), function (idx, para) { $$1(para).css(styleInfo); }); }; /** * insert and returns styleNodes on range. * * @param {WrappedRange} rng * @param {Object} [options] - options for styleNodes * @param {String} [options.nodeName] - default: `SPAN` * @param {Boolean} [options.expandClosestSibling] - default: `false` * @param {Boolean} [options.onlyPartialContains] - default: `false` * @return {Node[]} */ Style.prototype.styleNodes = function (rng, options) { rng = rng.splitText(); var nodeName = (options && options.nodeName) || 'SPAN'; var expandClosestSibling = !!(options && options.expandClosestSibling); var onlyPartialContains = !!(options && options.onlyPartialContains); if (rng.isCollapsed()) { return [rng.insertNode(dom.create(nodeName))]; } var pred = dom.makePredByNodeName(nodeName); var nodes = rng.nodes(dom.isText, { fullyContains: true }).map(function (text) { return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); }); if (expandClosestSibling) { if (onlyPartialContains) { var nodesInRange_1 = rng.nodes(); // compose with partial contains predication pred = func.and(pred, function (node) { return lists.contains(nodesInRange_1, node); }); } return nodes.map(function (node) { var siblings = dom.withClosestSiblings(node, pred); var head = lists.head(siblings); var tails = lists.tail(siblings); $$1.each(tails, function (idx, elem) { dom.appendChildNodes(head, elem.childNodes); dom.remove(elem); }); return lists.head(siblings); }); } else { return nodes; } }; /** * get current style on cursor * * @param {WrappedRange} rng * @return {Object} - object contains style properties. */ Style.prototype.current = function (rng) { var $cont = $$1(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc); var styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" try { styleInfo = $$1.extend(styleInfo, { 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal', 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'] }); } catch (e) { } // list-style-type to list-style(unordered, ordered) if (!rng.isOnList()) { styleInfo['list-style'] = 'none'; } else { var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square']; var isUnordered = $$1.inArray(styleInfo['list-style-type'], orderedTypes) > -1; styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered'; } var para = dom.ancestor(rng.sc, dom.isPara); if (para && para.style['line-height']) { styleInfo['line-height'] = para.style.lineHeight; } else { var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); styleInfo['line-height'] = lineHeight.toFixed(1); } styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); styleInfo.range = rng; return styleInfo; }; return Style; }()); var Bullet = /** @class */ (function () { function Bullet() { } /** * toggle ordered list */ Bullet.prototype.insertOrderedList = function (editable) { this.toggleList('OL', editable); }; /** * toggle unordered list */ Bullet.prototype.insertUnorderedList = function (editable) { this.toggleList('UL', editable); }; /** * indent */ Bullet.prototype.indent = function (editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); if (dom.isLi(head)) { _this.wrapList(paras, head.parentNode.nodeName); } else { $$1.each(paras, function (idx, para) { $$1(para).css('marginLeft', function (idx, val) { return (parseInt(val, 10) || 0) + 25; }); }); } }); rng.select(); }; /** * outdent */ Bullet.prototype.outdent = function (editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); if (dom.isLi(head)) { _this.releaseList([paras]); } else { $$1.each(paras, function (idx, para) { $$1(para).css('marginLeft', function (idx, val) { val = (parseInt(val, 10) || 0); return val > 25 ? val - 25 : ''; }); }); } }); rng.select(); }; /** * toggle list * * @param {String} listName - OL or UL */ Bullet.prototype.toggleList = function (listName, editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var bookmark = rng.paraBookmark(paras); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list if (lists.find(paras, dom.isPurePara)) { var wrappedParas_1 = []; $$1.each(clustereds, function (idx, paras) { wrappedParas_1 = wrappedParas_1.concat(_this.wrapList(paras, listName)); }); paras = wrappedParas_1; // list to paragraph or change list style } else { var diffLists = rng.nodes(dom.isList, { includeAncestor: true }).filter(function (listNode) { return !$$1.nodeName(listNode, listName); }); if (diffLists.length) { $$1.each(diffLists, function (idx, listNode) { dom.replace(listNode, listName); }); } else { paras = this.releaseList(clustereds, true); } } range.createFromParaBookmark(bookmark, paras).select(); }; /** * @param {Node[]} paras * @param {String} listName * @return {Node[]} */ Bullet.prototype.wrapList = function (paras, listName) { var head = lists.head(paras); var last = lists.last(paras); var prevList = dom.isList(head.previousSibling) && head.previousSibling; var nextList = dom.isList(last.nextSibling) && last.nextSibling; var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI paras = paras.map(function (para) { return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; }); // append to list(<ul>, <ol>) dom.appendChildNodes(listNode, paras); if (nextList) { dom.appendChildNodes(listNode, lists.from(nextList.childNodes)); dom.remove(nextList); } return paras; }; /** * @method releaseList * * @param {Array[]} clustereds * @param {Boolean} isEscapseToBody * @return {Node[]} */ Bullet.prototype.releaseList = function (clustereds, isEscapseToBody) { var releasedParas = []; $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); var last = lists.last(paras); var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode; var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, { node: last.parentNode, offset: dom.position(last) + 1 }, { isSkipPaddingBlankHTML: true }) : null; var middleList = dom.splitTree(headList, { node: head.parentNode, offset: dom.position(head) }, { isSkipPaddingBlankHTML: true }); paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P if (isEscapseToBody || !dom.isList(headList.parentNode)) { paras = paras.map(function (para) { return dom.replace(para, 'P'); }); } $$1.each(lists.from(paras).reverse(), function (idx, para) { dom.insertAfter(para, headList); }); // remove empty lists var rootLists = lists.compact([headList, middleList, lastList]); $$1.each(rootLists, function (idx, rootList) { var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); $$1.each(listNodes.reverse(), function (idx, listNode) { if (!dom.nodeLength(listNode)) { dom.remove(listNode, true); } }); }); releasedParas = releasedParas.concat(paras); }); return releasedParas; }; return Bullet; }()); /** * @class editing.Typing * * Typing * */ var Typing = /** @class */ (function () { function Typing() { // a Bullet instance to toggle lists off this.bullet = new Bullet(); } /** * insert tab * * @param {WrappedRange} rng * @param {Number} tabsize */ Typing.prototype.insertTab = function (rng, tabsize) { var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); rng = rng.deleteContents(); rng.insertNode(tab, true); rng = range.create(tab, tabsize); rng.select(); }; /** * insert paragraph */ Typing.prototype.insertParagraph = function (editable) { var rng = range.create(editable); // deleteContents on range. rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph rng = rng.wrapBodyInlineWithPara(); // finding paragraph var splitRoot = dom.ancestor(rng.sc, dom.isPara); var nextPara; // on paragraph: split paragraph if (splitRoot) { // if it is an empty line with li if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { // toogle UL/OL and escape this.bullet.toggleList(splitRoot.parentNode.nodeName); return; // if it is an empty line with para on blockquote } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { // escape blockquote dom.insertAfter(splitRoot, splitRoot.parentNode); nextPara = splitRoot; // if new line has content (not a line break) } else { nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); $$1.each(emptyAnchors, function (idx, anchor) { dom.remove(anchor); }); // replace empty heading, pre or custom-made styleTag with P tag if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) { nextPara = dom.replace(nextPara, 'p'); } } // no paragraph: insert empty paragraph } else { var next = rng.sc.childNodes[rng.so]; nextPara = $$1(dom.emptyPara)[0]; if (next) { rng.sc.insertBefore(nextPara, next); } else { rng.sc.appendChild(nextPara); } } range.create(nextPara, 0).normalize().select().scrollIntoView(editable); }; return Typing; }()); /** * @class Create a virtual table to create what actions to do in change. * @param {object} startPoint Cell selected to apply change. * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction * @param {object} domTable Dom element of table to make changes. */ var TableResultAction = function (startPoint, where, action, domTable) { var _startPoint = { 'colPos': 0, 'rowPos': 0 }; var _virtualTable = []; var _actionCellList = []; /// /////////////////////////////////////////// // Private functions /// /////////////////////////////////////////// /** * Set the startPoint of action. */ function setStartPoint() { if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) { console.error('Impossible to identify start Cell point.', startPoint); return; } _startPoint.colPos = startPoint.cellIndex; if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') { console.error('Impossible to identify start Row point.', startPoint); return; } _startPoint.rowPos = startPoint.parentElement.rowIndex; } /** * Define virtual table position info object. * * @param {int} rowIndex Index position in line of virtual table. * @param {int} cellIndex Index position in column of virtual table. * @param {object} baseRow Row affected by this position. * @param {object} baseCell Cell affected by this position. * @param {bool} isSpan Inform if it is an span cell/row. */ function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) { var objPosition = { 'baseRow': baseRow, 'baseCell': baseCell, 'isRowSpan': isRowSpan, 'isColSpan': isColSpan, 'isVirtual': isVirtualCell }; if (!_virtualTable[rowIndex]) { _virtualTable[rowIndex] = []; } _virtualTable[rowIndex][cellIndex] = objPosition; } /** * Create action cell object. * * @param {object} virtualTableCellObj Object of specific position on virtual table. * @param {enum} resultAction Action to be applied in that item. */ function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) { return { 'baseCell': virtualTableCellObj.baseCell, 'action': resultAction, 'virtualTable': { 'rowIndex': virtualRowPosition, 'cellIndex': virtualColPosition } }; } /** * Recover free index of row to append Cell. * * @param {int} rowIndex Index of row to find free space. * @param {int} cellIndex Index of cell to find free space in table. */ function recoverCellIndex(rowIndex, cellIndex) { if (!_virtualTable[rowIndex]) { return cellIndex; } if (!_virtualTable[rowIndex][cellIndex]) { return cellIndex; } var newCellIndex = cellIndex; while (_virtualTable[rowIndex][newCellIndex]) { newCellIndex++; if (!_virtualTable[rowIndex][newCellIndex]) { return newCellIndex; } } } /** * Recover info about row and cell and add information to virtual table. * * @param {object} row Row to recover information. * @param {object} cell Cell to recover information. */ function addCellInfoToVirtual(row, cell) { var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex); var cellHasColspan = (cell.colSpan > 1); var cellHasRowspan = (cell.rowSpan > 1); var isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos); setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table. var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0; if (rowspanNumber > 1) { for (var rp = 1; rp < rowspanNumber; rp++) { var rowspanIndex = row.rowIndex + rp; adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell); setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true); } } // Add span cols to virtual table. var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0; if (colspanNumber > 1) { for (var cp = 1; cp < colspanNumber; cp++) { var cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp)); adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell); setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true); } } } /** * Process validation and adjust of start point if needed * * @param {int} rowIndex * @param {int} cellIndex * @param {object} cell * @param {bool} isSelectedCell */ function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) { if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) { _startPoint.colPos++; } } /** * Create virtual table of cells with all cells, including span cells. */ function createVirtualTable() { var rows = domTable.rows; for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) { var cells = rows[rowIndex].cells; for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) { addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]); } } } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getDeleteResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; case TableResultAction.where.Row: if (!cell.isVirtual && cell.isRowSpan) { return TableResultAction.resultAction.AddCell; } else if (cell.isRowSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; } return TableResultAction.resultAction.RemoveCell; } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getAddResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isRowSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; case TableResultAction.where.Row: if (cell.isRowSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isColSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; } return TableResultAction.resultAction.AddCell; } function init() { setStartPoint(); createVirtualTable(); } /// /////////////////////////////////////////// // Public functions /// /////////////////////////////////////////// /** * Recover array os what to do in table. */ this.getActionList = function () { var fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1; var fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1; var actualPosition = 0; var canContinue = true; while (canContinue) { var rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition; var colPosition = (fixedCol >= 0) ? fixedCol : actualPosition; var row = _virtualTable[rowPosition]; if (!row) { canContinue = false; return _actionCellList; } var cell = row[colPosition]; if (!cell) { canContinue = false; return _actionCellList; } // Define action to be applied in this cell var resultAction = TableResultAction.resultAction.Ignore; switch (action) { case TableResultAction.requestAction.Add: resultAction = getAddResultActionToCell(cell); break; case TableResultAction.requestAction.Delete: resultAction = getDeleteResultActionToCell(cell); break; } _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition)); actualPosition++; } return _actionCellList; }; init(); }; /** * * Where action occours enum. */ TableResultAction.where = { 'Row': 0, 'Column': 1 }; /** * * Requested action to apply enum. */ TableResultAction.requestAction = { 'Add': 0, 'Delete': 1 }; /** * * Result action to be executed enum. */ TableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 }; /** * * @class editing.Table * * Table * */ var Table = /** @class */ (function () { function Table() { } /** * handle tab key * * @param {WrappedRange} rng * @param {Boolean} isShift */ Table.prototype.tab = function (rng, isShift) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var table = dom.ancestor(cell, dom.isTable); var cells = dom.listDescendant(table, dom.isCell); var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell); if (nextCell) { range.create(nextCell, 0).select(); } }; /** * Add a new row * * @param {WrappedRange} rng * @param {String} position (top/bottom) * @return {Node} */ Table.prototype.addRow = function (rng, position) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var currentTr = $$1(cell).closest('tr'); var trAttributes = this.recoverAttributes(currentTr); var html = $$1('<tr' + trAttributes + '></tr>'); var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, $$1(currentTr).closest('table')[0]); var actions = vTable.getActionList(); for (var idCell = 0; idCell < actions.length; idCell++) { var currentCell = actions[idCell]; var tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: html.append('<td' + tdAttributes + '>' + dom.blank + '</td>'); break; case TableResultAction.resultAction.SumSpanCount: if (position === 'top') { var baseCellTr = currentCell.baseCell.parent; var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex; if (isTopFromRowSpan) { var newTd = $$1('<div></div>').append($$1('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html(); html.append(newTd); break; } } var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10); rowspanNumber++; currentCell.baseCell.setAttribute('rowSpan', rowspanNumber); break; } } if (position === 'top') { currentTr.before(html); } else { var cellHasRowspan = (cell.rowSpan > 1); if (cellHasRowspan) { var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2); $$1($$1(currentTr).parent().find('tr')[lastTrIndex]).after($$1(html)); return; } currentTr.after(html); } }; /** * Add a new col * * @param {WrappedRange} rng * @param {String} position (left/right) * @return {Node} */ Table.prototype.addCol = function (rng, position) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var rowsGroup = $$1(row).siblings(); rowsGroup.push(row); var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { var currentCell = actions[actionIndex]; var tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: if (position === 'right') { $$1(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>'); } else { $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; case TableResultAction.resultAction.SumSpanCount: if (position === 'right') { var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10); colspanNumber++; currentCell.baseCell.setAttribute('colSpan', colspanNumber); } else { $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; } } }; /* * Copy attributes from element. * * @param {object} Element to recover attributes. * @return {string} Copied string elements. */ Table.prototype.recoverAttributes = function (el) { var resultStr = ''; if (!el) { return resultStr; } var attrList = el.attributes || []; for (var i = 0; i < attrList.length; i++) { if (attrList[i].name.toLowerCase() === 'id') { continue; } if (attrList[i].specified) { resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\''; } } return resultStr; }; /** * Delete current row * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteRow = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var cellPos = row.children('td, th').index($$1(cell)); var rowPos = row[0].rowIndex; var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } var baseCell = actions[actionIndex].baseCell; var virtualPosition = actions[actionIndex].virtualTable; var hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1); var rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0; switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.AddCell: var nextRow = row.next('tr')[0]; if (!nextRow) { continue; } var cloneRow = row[0].cells[cellPos]; if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber); nextRow.cells[cellPos].innerHTML = ''; } else if (rowspanNumber === 2) { nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].removeAttribute('rowSpan'); nextRow.cells[cellPos].innerHTML = ''; } } continue; case TableResultAction.resultAction.SubtractSpanCount: if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; baseCell.setAttribute('rowSpan', rowspanNumber); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (rowspanNumber === 2) { baseCell.removeAttribute('rowSpan'); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: // Do not need remove cell because row will be deleted. continue; } } row.remove(); }; /** * Delete current col * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteCol = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var cellPos = row.children('td, th').index($$1(cell)); var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.SubtractSpanCount: var baseCell = actions[actionIndex].baseCell; var hasColspan = (baseCell.colSpan && baseCell.colSpan > 1); if (hasColspan) { var colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0; if (colspanNumber > 2) { colspanNumber--; baseCell.setAttribute('colSpan', colspanNumber); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (colspanNumber === 2) { baseCell.removeAttribute('colSpan'); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: dom.remove(actions[actionIndex].baseCell, true); continue; } } }; /** * create empty table element * * @param {Number} rowCount * @param {Number} colCount * @return {Node} */ Table.prototype.createTable = function (colCount, rowCount, options) { var tds = []; var tdHTML; for (var idxCol = 0; idxCol < colCount; idxCol++) { tds.push('<td>' + dom.blank + '</td>'); } tdHTML = tds.join(''); var trs = []; var trHTML; for (var idxRow = 0; idxRow < rowCount; idxRow++) { trs.push('<tr>' + tdHTML + '</tr>'); } trHTML = trs.join(''); var $table = $$1('<table>' + trHTML + '</table>'); if (options && options.tableClassName) { $table.addClass(options.tableClassName); } return $table[0]; }; /** * Delete current table * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteTable = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); $$1(cell).closest('table').remove(); }; return Table; }()); var KEY_BOGUS = 'bogus'; /** * @class Editor */ var Editor = /** @class */ (function () { function Editor(context) { var _this = this; this.context = context; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.editable = this.$editable[0]; this.lastRange = null; this.style = new Style(); this.table = new Table(); this.typing = new Typing(); this.bullet = new Bullet(); this.history = new History(this.$editable); this.context.memo('help.undo', this.lang.help.undo); this.context.memo('help.redo', this.lang.help.redo); this.context.memo('help.tab', this.lang.help.tab); this.context.memo('help.untab', this.lang.help.untab); this.context.memo('help.insertParagraph', this.lang.help.insertParagraph); this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList); this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList); this.context.memo('help.indent', this.lang.help.indent); this.context.memo('help.outdent', this.lang.help.outdent); this.context.memo('help.formatPara', this.lang.help.formatPara); this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule); this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand var commands = [ 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor' ]; for (var idx = 0, len = commands.length; idx < len; idx++) { this[commands[idx]] = (function (sCmd) { return function (value) { _this.beforeCommand(); document.execCommand(sCmd, false, value); _this.afterCommand(true); }; })(commands[idx]); this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]); } this.fontName = this.wrapCommand(function (value) { return _this.fontStyling('font-family', "\'" + value + "\'"); }); this.fontSize = this.wrapCommand(function (value) { return _this.fontStyling('font-size', value + 'px'); }); for (var idx = 1; idx <= 6; idx++) { this['formatH' + idx] = (function (idx) { return function () { _this.formatBlock('H' + idx); }; })(idx); this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]); } this.insertParagraph = this.wrapCommand(function () { _this.typing.insertParagraph(_this.editable); }); this.insertOrderedList = this.wrapCommand(function () { _this.bullet.insertOrderedList(_this.editable); }); this.insertUnorderedList = this.wrapCommand(function () { _this.bullet.insertUnorderedList(_this.editable); }); this.indent = this.wrapCommand(function () { _this.bullet.indent(_this.editable); }); this.outdent = this.wrapCommand(function () { _this.bullet.outdent(_this.editable); }); /** * insertNode * insert node * @param {Node} node */ this.insertNode = this.wrapCommand(function (node) { if (_this.isLimited($$1(node).text().length)) { return; } var rng = _this.createRange(); rng.insertNode(node); range.createFromNodeAfter(node).select(); }); /** * insert text * @param {String} text */ this.insertText = this.wrapCommand(function (text) { if (_this.isLimited(text.length)) { return; } var rng = _this.createRange(); var textNode = rng.insertNode(dom.createText(text)); range.create(textNode, dom.nodeLength(textNode)).select(); }); /** * paste HTML * @param {String} markup */ this.pasteHTML = this.wrapCommand(function (markup) { if (_this.isLimited(markup.length)) { return; } var contents = _this.createRange().pasteHTML(markup); range.createFromNodeAfter(lists.last(contents)).select(); }); /** * formatBlock * * @param {String} tagName */ this.formatBlock = this.wrapCommand(function (tagName, $target) { var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle; if (onApplyCustomStyle) { onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock); } else { _this.onFormatBlock(tagName, $target); } }); /** * insert horizontal rule */ this.insertHorizontalRule = this.wrapCommand(function () { var hrNode = _this.createRange().insertNode(dom.create('HR')); if (hrNode.nextSibling) { range.create(hrNode.nextSibling, 0).normalize().select(); } }); /** * lineHeight * @param {String} value */ this.lineHeight = this.wrapCommand(function (value) { _this.style.stylePara(_this.createRange(), { lineHeight: value }); }); /** * create link (command) * * @param {Object} linkInfo */ this.createLink = this.wrapCommand(function (linkInfo) { var linkUrl = linkInfo.url; var linkText = linkInfo.text; var isNewWindow = linkInfo.isNewWindow; var rng = linkInfo.range || _this.createRange(); var isTextChanged = rng.toString() !== linkText; // handle spaced urls from input if (typeof linkUrl === 'string') { linkUrl = linkUrl.trim(); } if (_this.options.onCreateLink) { linkUrl = _this.options.onCreateLink(linkUrl); } else { // if url doesn't match an URL schema, set http:// as default linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) ? linkUrl : 'http://' + linkUrl; } var anchors = []; if (isTextChanged) { rng = rng.deleteContents(); var anchor = rng.insertNode($$1('<A>' + linkText + '</A>')[0]); anchors.push(anchor); } else { anchors = _this.style.styleNodes(rng, { nodeName: 'A', expandClosestSibling: true, onlyPartialContains: true }); } $$1.each(anchors, function (idx, anchor) { $$1(anchor).attr('href', linkUrl); if (isNewWindow) { $$1(anchor).attr('target', '_blank'); } else { $$1(anchor).removeAttr('target'); } }); var startRange = range.createFromNodeBefore(lists.head(anchors)); var startPoint = startRange.getStartPoint(); var endRange = range.createFromNodeAfter(lists.last(anchors)); var endPoint = endRange.getEndPoint(); range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset).select(); }); /** * setting color * * @param {Object} sObjColor color code * @param {String} sObjColor.foreColor foreground color * @param {String} sObjColor.backColor background color */ this.color = this.wrapCommand(function (colorInfo) { var foreColor = colorInfo.foreColor; var backColor = colorInfo.backColor; if (foreColor) { document.execCommand('foreColor', false, foreColor); } if (backColor) { document.execCommand('backColor', false, backColor); } }); /** * Set foreground color * * @param {String} colorCode foreground color code */ this.foreColor = this.wrapCommand(function (colorInfo) { document.execCommand('styleWithCSS', false, true); document.execCommand('foreColor', false, colorInfo); }); /** * insert Table * * @param {String} dimension of table (ex : "5x5") */ this.insertTable = this.wrapCommand(function (dim) { var dimension = dim.split('x'); var rng = _this.createRange().deleteContents(); rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options)); }); /** * remove media object and Figure Elements if media object is img with Figure. */ this.removeMedia = this.wrapCommand(function () { var $target = $$1(_this.restoreTarget()).parent(); if ($target.parent('figure').length) { $target.parent('figure').remove(); } else { $target = $$1(_this.restoreTarget()).detach(); } _this.context.triggerEvent('media.delete', $target, _this.$editable); }); /** * float me * * @param {String} value */ this.floatMe = this.wrapCommand(function (value) { var $target = $$1(_this.restoreTarget()); $target.toggleClass('note-float-left', value === 'left'); $target.toggleClass('note-float-right', value === 'right'); $target.css('float', value); }); /** * resize overlay element * @param {String} value */ this.resize = this.wrapCommand(function (value) { var $target = $$1(_this.restoreTarget()); $target.css({ width: value * 100 + '%', height: '' }); }); } Editor.prototype.initialize = function () { var _this = this; // bind custom events this.$editable.on('keydown', function (event) { if (event.keyCode === key.code.ENTER) { _this.context.triggerEvent('enter', event); } _this.context.triggerEvent('keydown', event); if (!event.isDefaultPrevented()) { if (_this.options.shortcuts) { _this.handleKeyMap(event); } else { _this.preventDefaultEditableShortCuts(event); } } if (_this.isLimited(1, event)) { return false; } }).on('keyup', function (event) { _this.context.triggerEvent('keyup', event); }).on('focus', function (event) { _this.context.triggerEvent('focus', event); }).on('blur', function (event) { _this.context.triggerEvent('blur', event); }).on('mousedown', function (event) { _this.context.triggerEvent('mousedown', event); }).on('mouseup', function (event) { _this.context.triggerEvent('mouseup', event); }).on('scroll', function (event) { _this.context.triggerEvent('scroll', event); }).on('paste', function (event) { _this.context.triggerEvent('paste', event); }); // init content before set event this.$editable.html(dom.html(this.$note) || dom.emptyPara); this.$editable.on(env.inputEventName, func.debounce(function () { _this.context.triggerEvent('change', _this.$editable.html()); }, 100)); this.$editor.on('focusin', function (event) { _this.context.triggerEvent('focusin', event); }).on('focusout', function (event) { _this.context.triggerEvent('focusout', event); }); if (!this.options.airMode) { if (this.options.width) { this.$editor.outerWidth(this.options.width); } if (this.options.height) { this.$editable.outerHeight(this.options.height); } if (this.options.maxHeight) { this.$editable.css('max-height', this.options.maxHeight); } if (this.options.minHeight) { this.$editable.css('min-height', this.options.minHeight); } } this.history.recordUndo(); }; Editor.prototype.destroy = function () { this.$editable.off(); }; Editor.prototype.handleKeyMap = function (event) { var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; var keys = []; if (event.metaKey) { keys.push('CMD'); } if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); } if (event.shiftKey) { keys.push('SHIFT'); } var keyName = key.nameFromCode[event.keyCode]; if (keyName) { keys.push(keyName); } var eventName = keyMap[keys.join('+')]; if (eventName) { if (this.context.invoke(eventName) !== false) { event.preventDefault(); } } else if (key.isEdit(event.keyCode)) { this.afterCommand(); } }; Editor.prototype.preventDefaultEditableShortCuts = function (event) { // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) { event.preventDefault(); } }; Editor.prototype.isLimited = function (pad, event) { pad = pad || 0; if (typeof event !== 'undefined') { if (key.isMove(event.keyCode) || (event.ctrlKey || event.metaKey) || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) { return false; } } if (this.options.maxTextLength > 0) { if ((this.$editable.text().length + pad) >= this.options.maxTextLength) { return true; } } return false; }; /** * create range * @return {WrappedRange} */ Editor.prototype.createRange = function () { this.focus(); return range.create(this.editable); }; /** * saveRange * * save current range * * @param {Boolean} [thenCollapse=false] */ Editor.prototype.saveRange = function (thenCollapse) { this.lastRange = this.createRange(); if (thenCollapse) { this.lastRange.collapse().select(); } }; /** * restoreRange * * restore lately range */ Editor.prototype.restoreRange = function () { if (this.lastRange) { this.lastRange.select(); this.focus(); } }; Editor.prototype.saveTarget = function (node) { this.$editable.data('target', node); }; Editor.prototype.clearTarget = function () { this.$editable.removeData('target'); }; Editor.prototype.restoreTarget = function () { return this.$editable.data('target'); }; /** * currentStyle * * current style * @return {Object|Boolean} unfocus */ Editor.prototype.currentStyle = function () { var rng = range.create(); if (rng) { rng = rng.normalize(); } return rng ? this.style.current(rng) : this.style.fromNode(this.$editable); }; /** * style from node * * @param {jQuery} $node * @return {Object} */ Editor.prototype.styleFromNode = function ($node) { return this.style.fromNode($node); }; /** * undo */ Editor.prototype.undo = function () { this.context.triggerEvent('before.command', this.$editable.html()); this.history.undo(); this.context.triggerEvent('change', this.$editable.html()); }; /** * redo */ Editor.prototype.redo = function () { this.context.triggerEvent('before.command', this.$editable.html()); this.history.redo(); this.context.triggerEvent('change', this.$editable.html()); }; /** * before command */ Editor.prototype.beforeCommand = function () { this.context.triggerEvent('before.command', this.$editable.html()); // keep focus on editable before command execution this.focus(); }; /** * after command * @param {Boolean} isPreventTrigger */ Editor.prototype.afterCommand = function (isPreventTrigger) { this.normalizeContent(); this.history.recordUndo(); if (!isPreventTrigger) { this.context.triggerEvent('change', this.$editable.html()); } }; /** * handle tab key */ Editor.prototype.tab = function () { var rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng); } else { if (this.options.tabSize === 0) { return false; } if (!this.isLimited(this.options.tabSize)) { this.beforeCommand(); this.typing.insertTab(rng, this.options.tabSize); this.afterCommand(); } } }; /** * handle shift+tab key */ Editor.prototype.untab = function () { var rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng, true); } else { if (this.options.tabSize === 0) { return false; } } }; /** * run given function between beforeCommand and afterCommand */ Editor.prototype.wrapCommand = function (fn) { var _this = this; return function () { _this.beforeCommand(); fn.apply(_this, arguments); _this.afterCommand(); }; }; /** * insert image * * @param {String} src * @param {String|Function} param * @return {Promise} */ Editor.prototype.insertImage = function (src, param) { var _this = this; return createImage(src, param).then(function ($image) { _this.beforeCommand(); if (typeof param === 'function') { param($image); } else { if (typeof param === 'string') { $image.attr('data-filename', param); } $image.css('width', Math.min(_this.$editable.width(), $image.width())); } $image.show(); range.create(_this.editable).insertNode($image[0]); range.createFromNodeAfter($image[0]).select(); _this.afterCommand(); }).fail(function (e) { _this.context.triggerEvent('image.upload.error', e); }); }; /** * insertImages * @param {File[]} files */ Editor.prototype.insertImages = function (files) { var _this = this; $$1.each(files, function (idx, file) { var filename = file.name; if (_this.options.maximumImageFileSize && _this.options.maximumImageFileSize < file.size) { _this.context.triggerEvent('image.upload.error', _this.lang.image.maximumFileSizeError); } else { readFileAsDataURL(file).then(function (dataURL) { return _this.insertImage(dataURL, filename); }).fail(function () { _this.context.triggerEvent('image.upload.error'); }); } }); }; /** * insertImagesOrCallback * @param {File[]} files */ Editor.prototype.insertImagesOrCallback = function (files) { var callbacks = this.options.callbacks; // If onImageUpload this.options setted if (callbacks.onImageUpload) { this.context.triggerEvent('image.upload', files); // else insert Image as dataURL } else { this.insertImages(files); } }; /** * return selected plain text * @return {String} text */ Editor.prototype.getSelectedText = function () { var rng = this.createRange(); // if range on anchor, expand range with anchor if (rng.isOnAnchor()) { rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor)); } return rng.toString(); }; Editor.prototype.onFormatBlock = function (tagName, $target) { // [workaround] for MSIE, IE need `<` tagName = env.isMSIE ? '<' + tagName + '>' : tagName; document.execCommand('FormatBlock', false, tagName); // support custom class if ($target && $target.length) { var className = $target[0].className || ''; if (className) { var currentRange = this.createRange(); var $parent = $$1([currentRange.sc, currentRange.ec]).closest(tagName); $parent.addClass(className); } } }; Editor.prototype.formatPara = function () { this.formatBlock('P'); }; Editor.prototype.fontStyling = function (target, value) { var rng = this.createRange(); if (rng) { var spans = this.style.styleNodes(rng); $$1(spans).css(target, value); // [workaround] added styled bogus span for style // - also bogus character needed for cursor position if (rng.isCollapsed()) { var firstSpan = lists.head(spans); if (firstSpan && !dom.nodeLength(firstSpan)) { firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; range.createFromNodeAfter(firstSpan.firstChild).select(); this.$editable.data(KEY_BOGUS, firstSpan); } } } }; /** * unlink * * @type command */ Editor.prototype.unlink = function () { var rng = this.createRange(); if (rng.isOnAnchor()) { var anchor = dom.ancestor(rng.sc, dom.isAnchor); rng = range.createFromNode(anchor); rng.select(); this.beforeCommand(); document.execCommand('unlink'); this.afterCommand(); } }; /** * returns link info * * @return {Object} * @return {WrappedRange} return.range * @return {String} return.text * @return {Boolean} [return.isNewWindow=true] * @return {String} [return.url=""] */ Editor.prototype.getLinkInfo = function () { var rng = this.createRange().expand(dom.isAnchor); // Get the first anchor on range(for edit). var $anchor = $$1(lists.head(rng.nodes(dom.isAnchor))); var linkInfo = { range: rng, text: rng.toString(), url: $anchor.length ? $anchor.attr('href') : '' }; // Define isNewWindow when anchor exists. if ($anchor.length) { linkInfo.isNewWindow = $anchor.attr('target') === '_blank'; } return linkInfo; }; Editor.prototype.addRow = function (position) { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addRow(rng, position); this.afterCommand(); } }; Editor.prototype.addCol = function (position) { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addCol(rng, position); this.afterCommand(); } }; Editor.prototype.deleteRow = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteRow(rng); this.afterCommand(); } }; Editor.prototype.deleteCol = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteCol(rng); this.afterCommand(); } }; Editor.prototype.deleteTable = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteTable(rng); this.afterCommand(); } }; /** * @param {Position} pos * @param {jQuery} $target - target element * @param {Boolean} [bKeepRatio] - keep ratio */ Editor.prototype.resizeTo = function (pos, $target, bKeepRatio) { var imageSize; if (bKeepRatio) { var newRatio = pos.y / pos.x; var ratio = $target.data('ratio'); imageSize = { width: ratio > newRatio ? pos.x : pos.y / ratio, height: ratio > newRatio ? pos.x * ratio : pos.y }; } else { imageSize = { width: pos.x, height: pos.y }; } $target.css(imageSize); }; /** * returns whether editable area has focus or not. */ Editor.prototype.hasFocus = function () { return this.$editable.is(':focus'); }; /** * set focus */ Editor.prototype.focus = function () { // [workaround] Screen will move when page is scolled in IE. // - do focus when not focused if (!this.hasFocus()) { this.$editable.focus(); } }; /** * returns whether contents is empty or not. * @return {Boolean} */ Editor.prototype.isEmpty = function () { return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html(); }; /** * Removes all contents and restores the editable instance to an _emptyPara_. */ Editor.prototype.empty = function () { this.context.invoke('code', dom.emptyPara); }; /** * normalize content */ Editor.prototype.normalizeContent = function () { this.$editable[0].normalize(); }; return Editor; }()); var Clipboard = /** @class */ (function () { function Clipboard(context) { this.context = context; this.$editable = context.layoutInfo.editable; } Clipboard.prototype.initialize = function () { this.$editable.on('paste', this.pasteByEvent.bind(this)); }; /** * paste by clipboard event * * @param {Event} event */ Clipboard.prototype.pasteByEvent = function (event) { var clipboardData = event.originalEvent.clipboardData; if (clipboardData && clipboardData.items && clipboardData.items.length) { var item = lists.head(clipboardData.items); if (item.kind === 'file' && item.type.indexOf('image/') !== -1) { this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]); } this.context.invoke('editor.afterCommand'); } }; return Clipboard; }()); var Dropzone = /** @class */ (function () { function Dropzone(context) { this.context = context; this.$eventListener = $$1(document); this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.documentEventHandlers = {}; this.$dropzone = $$1([ '<div class="note-dropzone">', ' <div class="note-dropzone-message"/>', '</div>' ].join('')).prependTo(this.$editor); } /** * attach Drag and Drop Events */ Dropzone.prototype.initialize = function () { if (this.options.disableDragAndDrop) { // prevent default drop event this.documentEventHandlers.onDrop = function (e) { e.preventDefault(); }; // do not consider outside of dropzone this.$eventListener = this.$dropzone; this.$eventListener.on('drop', this.documentEventHandlers.onDrop); } else { this.attachDragAndDropEvent(); } }; /** * attach Drag and Drop Events */ Dropzone.prototype.attachDragAndDropEvent = function () { var _this = this; var collection = $$1(); var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message'); this.documentEventHandlers.onDragenter = function (e) { var isCodeview = _this.context.invoke('codeview.isActivated'); var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0; if (!isCodeview && !collection.length && hasEditorSize) { _this.$editor.addClass('dragover'); _this.$dropzone.width(_this.$editor.width()); _this.$dropzone.height(_this.$editor.height()); $dropzoneMessage.text(_this.lang.image.dragImageHere); } collection = collection.add(e.target); }; this.documentEventHandlers.onDragleave = function (e) { collection = collection.not(e.target); if (!collection.length) { _this.$editor.removeClass('dragover'); } }; this.documentEventHandlers.onDrop = function () { collection = $$1(); _this.$editor.removeClass('dragover'); }; // show dropzone on dragenter when dragging a object to document // -but only if the editor is visible, i.e. has a positive width and height this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter) .on('dragleave', this.documentEventHandlers.onDragleave) .on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover. this.$dropzone.on('dragenter', function () { _this.$dropzone.addClass('hover'); $dropzoneMessage.text(_this.lang.image.dropImage); }).on('dragleave', function () { _this.$dropzone.removeClass('hover'); $dropzoneMessage.text(_this.lang.image.dragImageHere); }); // attach dropImage this.$dropzone.on('drop', function (event) { var dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content event.preventDefault(); if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { _this.$editable.focus(); _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files); } else { $$1.each(dataTransfer.types, function (idx, type) { var content = dataTransfer.getData(type); if (type.toLowerCase().indexOf('text') > -1) { _this.context.invoke('editor.pasteHTML', content); } else { $$1(content).each(function (idx, item) { _this.context.invoke('editor.insertNode', item); }); } }); } }).on('dragover', false); // prevent default dragover event }; Dropzone.prototype.destroy = function () { var _this = this; Object.keys(this.documentEventHandlers).forEach(function (key) { _this.$eventListener.off(key.substr(2).toLowerCase(), _this.documentEventHandlers[key]); }); this.documentEventHandlers = {}; }; return Dropzone; }()); var CodeMirror; if (env.hasCodeMirror) { if (env.isSupportAmd) { require(['codemirror'], function (cm) { CodeMirror = cm; }); } else { CodeMirror = window.CodeMirror; } } /** * @class Codeview */ var CodeView = /** @class */ (function () { function CodeView(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.options = context.options; } CodeView.prototype.sync = function () { var isCodeview = this.isActivated(); if (isCodeview && env.hasCodeMirror) { this.$codable.data('cmEditor').save(); } }; /** * @return {Boolean} */ CodeView.prototype.isActivated = function () { return this.$editor.hasClass('codeview'); }; /** * toggle codeview */ CodeView.prototype.toggle = function () { if (this.isActivated()) { this.deactivate(); } else { this.activate(); } this.context.triggerEvent('codeview.toggled'); }; /** * activate code view */ CodeView.prototype.activate = function () { var _this = this; this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml)); this.$codable.height(this.$editable.height()); this.context.invoke('toolbar.updateCodeview', true); this.$editor.addClass('codeview'); this.$codable.focus(); // activate CodeMirror as codable if (env.hasCodeMirror) { var cmEditor_1 = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer if (this.options.codemirror.tern) { var server_1 = new CodeMirror.TernServer(this.options.codemirror.tern); cmEditor_1.ternServer = server_1; cmEditor_1.on('cursorActivity', function (cm) { server_1.updateArgHints(cm); }); } cmEditor_1.on('blur', function (event) { _this.context.triggerEvent('blur.codeview', cmEditor_1.getValue(), event); }); // CodeMirror hasn't Padding. cmEditor_1.setSize(null, this.$editable.outerHeight()); this.$codable.data('cmEditor', cmEditor_1); } else { this.$codable.on('blur', function (event) { _this.context.triggerEvent('blur.codeview', _this.$codable.val(), event); }); } }; /** * deactivate code view */ CodeView.prototype.deactivate = function () { // deactivate CodeMirror as codable if (env.hasCodeMirror) { var cmEditor = this.$codable.data('cmEditor'); this.$codable.val(cmEditor.getValue()); cmEditor.toTextArea(); } var value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara; var isChange = this.$editable.html() !== value; this.$editable.html(value); this.$editable.height(this.options.height ? this.$codable.height() : 'auto'); this.$editor.removeClass('codeview'); if (isChange) { this.context.triggerEvent('change', this.$editable.html(), this.$editable); } this.$editable.focus(); this.context.invoke('toolbar.updateCodeview', false); }; CodeView.prototype.destroy = function () { if (this.isActivated()) { this.deactivate(); } }; return CodeView; }()); var EDITABLE_PADDING = 24; var Statusbar = /** @class */ (function () { function Statusbar(context) { this.$document = $$1(document); this.$statusbar = context.layoutInfo.statusbar; this.$editable = context.layoutInfo.editable; this.options = context.options; } Statusbar.prototype.initialize = function () { var _this = this; if (this.options.airMode || this.options.disableResizeEditor) { this.destroy(); return; } this.$statusbar.on('mousedown', function (event) { event.preventDefault(); event.stopPropagation(); var editableTop = _this.$editable.offset().top - _this.$document.scrollTop(); var onMouseMove = function (event) { var height = event.clientY - (editableTop + EDITABLE_PADDING); height = (_this.options.minheight > 0) ? Math.max(height, _this.options.minheight) : height; height = (_this.options.maxHeight > 0) ? Math.min(height, _this.options.maxHeight) : height; _this.$editable.height(height); }; _this.$document.on('mousemove', onMouseMove).one('mouseup', function () { _this.$document.off('mousemove', onMouseMove); }); }); }; Statusbar.prototype.destroy = function () { this.$statusbar.off(); this.$statusbar.addClass('locked'); }; return Statusbar; }()); var Fullscreen = /** @class */ (function () { function Fullscreen(context) { var _this = this; this.context = context; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.$window = $$1(window); this.$scrollbar = $$1('html, body'); this.onResize = function () { _this.resizeTo({ h: _this.$window.height() - _this.$toolbar.outerHeight() }); }; } Fullscreen.prototype.resizeTo = function (size) { this.$editable.css('height', size.h); this.$codable.css('height', size.h); if (this.$codable.data('cmeditor')) { this.$codable.data('cmeditor').setsize(null, size.h); } }; /** * toggle fullscreen */ Fullscreen.prototype.toggle = function () { this.$editor.toggleClass('fullscreen'); if (this.isFullscreen()) { this.$editable.data('orgHeight', this.$editable.css('height')); this.$window.on('resize', this.onResize).trigger('resize'); this.$scrollbar.css('overflow', 'hidden'); } else { this.$window.off('resize', this.onResize); this.resizeTo({ h: this.$editable.data('orgHeight') }); this.$scrollbar.css('overflow', 'visible'); } this.context.invoke('toolbar.updateFullscreen', this.isFullscreen()); }; Fullscreen.prototype.isFullscreen = function () { return this.$editor.hasClass('fullscreen'); }; return Fullscreen; }()); var Handle = /** @class */ (function () { function Handle(context) { var _this = this; this.context = context; this.$document = $$1(document); this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.lang = this.options.langInfo; this.events = { 'summernote.mousedown': function (we, e) { if (_this.update(e.target)) { e.preventDefault(); } }, 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () { _this.update(); }, 'summernote.disable': function () { _this.hide(); }, 'summernote.codeview.toggled': function () { _this.update(); } }; } Handle.prototype.initialize = function () { var _this = this; this.$handle = $$1([ '<div class="note-handle">', '<div class="note-control-selection">', '<div class="note-control-selection-bg"></div>', '<div class="note-control-holder note-control-nw"></div>', '<div class="note-control-holder note-control-ne"></div>', '<div class="note-control-holder note-control-sw"></div>', '<div class="', (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'), ' note-control-se"></div>', (this.options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>'), '</div>', '</div>' ].join('')).prependTo(this.$editingArea); this.$handle.on('mousedown', function (event) { if (dom.isControlSizing(event.target)) { event.preventDefault(); event.stopPropagation(); var $target_1 = _this.$handle.find('.note-control-selection').data('target'); var posStart_1 = $target_1.offset(); var scrollTop_1 = _this.$document.scrollTop(); var onMouseMove_1 = function (event) { _this.context.invoke('editor.resizeTo', { x: event.clientX - posStart_1.left, y: event.clientY - (posStart_1.top - scrollTop_1) }, $target_1, !event.shiftKey); _this.update($target_1[0]); }; _this.$document .on('mousemove', onMouseMove_1) .one('mouseup', function (e) { e.preventDefault(); _this.$document.off('mousemove', onMouseMove_1); _this.context.invoke('editor.afterCommand'); }); if (!$target_1.data('ratio')) { $target_1.data('ratio', $target_1.height() / $target_1.width()); } } }); // Listen for scrolling on the handle overlay. this.$handle.on('wheel', function (e) { e.preventDefault(); _this.update(); }); }; Handle.prototype.destroy = function () { this.$handle.remove(); }; Handle.prototype.update = function (target) { if (this.context.isDisabled()) { return false; } var isImage = dom.isImg(target); var $selection = this.$handle.find('.note-control-selection'); this.context.invoke('imagePopover.update', target); if (isImage) { var $image = $$1(target); var position = $image.position(); var pos = { left: position.left + parseInt($image.css('marginLeft'), 10), top: position.top + parseInt($image.css('marginTop'), 10) }; // exclude margin var imageSize = { w: $image.outerWidth(false), h: $image.outerHeight(false) }; $selection.css({ display: 'block', left: pos.left, top: pos.top, width: imageSize.w, height: imageSize.h }).data('target', $image); // save current image element. var origImageObj = new Image(); origImageObj.src = $image.attr('src'); var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')'; $selection.find('.note-control-selection-info').text(sizingText); this.context.invoke('editor.saveTarget', target); } else { this.hide(); } return isImage; }; /** * hide * * @param {jQuery} $handle */ Handle.prototype.hide = function () { this.context.invoke('editor.clearTarget'); this.$handle.children().hide(); }; return Handle; }()); var defaultScheme = 'http://'; var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; var AutoLink = /** @class */ (function () { function AutoLink(context) { var _this = this; this.context = context; this.events = { 'summernote.keyup': function (we, e) { if (!e.isDefaultPrevented()) { _this.handleKeyup(e); } }, 'summernote.keydown': function (we, e) { _this.handleKeydown(e); } }; } AutoLink.prototype.initialize = function () { this.lastWordRange = null; }; AutoLink.prototype.destroy = function () { this.lastWordRange = null; }; AutoLink.prototype.replace = function () { if (!this.lastWordRange) { return; } var keyword = this.lastWordRange.toString(); var match = keyword.match(linkPattern); if (match && (match[1] || match[2])) { var link = match[1] ? keyword : defaultScheme + keyword; var node = $$1('<a />').html(keyword).attr('href', link)[0]; this.lastWordRange.insertNode(node); this.lastWordRange = null; this.context.invoke('editor.focus'); } }; AutoLink.prototype.handleKeydown = function (e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { var wordRange = this.context.invoke('editor.createRange').getWordRange(); this.lastWordRange = wordRange; } }; AutoLink.prototype.handleKeyup = function (e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { this.replace(); } }; return AutoLink; }()); /** * textarea auto sync. */ var AutoSync = /** @class */ (function () { function AutoSync(context) { var _this = this; this.$note = context.layoutInfo.note; this.events = { 'summernote.change': function () { _this.$note.val(context.invoke('code')); } }; } AutoSync.prototype.shouldInitialize = function () { return dom.isTextarea(this.$note[0]); }; return AutoSync; }()); var Placeholder = /** @class */ (function () { function Placeholder(context) { var _this = this; this.context = context; this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.events = { 'summernote.init summernote.change': function () { _this.update(); }, 'summernote.codeview.toggled': function () { _this.update(); } }; } Placeholder.prototype.shouldInitialize = function () { return !!this.options.placeholder; }; Placeholder.prototype.initialize = function () { var _this = this; this.$placeholder = $$1('<div class="note-placeholder">'); this.$placeholder.on('click', function () { _this.context.invoke('focus'); }).text(this.options.placeholder).prependTo(this.$editingArea); this.update(); }; Placeholder.prototype.destroy = function () { this.$placeholder.remove(); }; Placeholder.prototype.update = function () { var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty'); this.$placeholder.toggle(isShow); }; return Placeholder; }()); var Buttons = /** @class */ (function () { function Buttons(context) { this.ui = $$1.summernote.ui; this.context = context; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.lang = this.options.langInfo; this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']); } Buttons.prototype.representShortcut = function (editorMethod) { var shortcut = this.invertedKeyMap[editorMethod]; if (!this.options.shortcuts || !shortcut) { return ''; } if (env.isMac) { shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); } shortcut = shortcut.replace('BACKSLASH', '\\') .replace('SLASH', '/') .replace('LEFTBRACKET', '[') .replace('RIGHTBRACKET', ']'); return ' (' + shortcut + ')'; }; Buttons.prototype.button = function (o) { if (!this.options.tooltip && o.tooltip) { delete o.tooltip; } o.container = this.options.container; return this.ui.button(o); }; Buttons.prototype.initialize = function () { this.addToolbarButtons(); this.addImagePopoverButtons(); this.addLinkPopoverButtons(); this.addTablePopoverButtons(); this.fontInstalledMap = {}; }; Buttons.prototype.destroy = function () { delete this.fontInstalledMap; }; Buttons.prototype.isFontInstalled = function (name) { if (!this.fontInstalledMap.hasOwnProperty(name)) { this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name); } return this.fontInstalledMap[name]; }; Buttons.prototype.isFontDeservedToAdd = function (name) { var genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy']; name = name.toLowerCase(); return ((name !== '') && this.isFontInstalled(name) && ($$1.inArray(name, genericFamilies) === -1)); }; Buttons.prototype.addToolbarButtons = function () { var _this = this; this.context.memo('button.style', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.magic), _this.options), tooltip: _this.lang.style.style, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ className: 'dropdown-style', items: _this.options.styleTags, title: _this.lang.style.style, template: function (item) { if (typeof item === 'string') { item = { tag: item, title: (_this.lang.style.hasOwnProperty(item) ? _this.lang.style[item] : item) }; } var tag = item.tag; var title = item.title; var style = item.style ? ' style="' + item.style + '" ' : ''; var className = item.className ? ' class="' + item.className + '"' : ''; return '<' + tag + style + className + '>' + title + '</' + tag + '>'; }, click: _this.context.createInvokeHandler('editor.formatBlock') }) ]).render(); }); var _loop_1 = function (styleIdx, styleLen) { var item = this_1.options.styleTags[styleIdx]; this_1.context.memo('button.style.' + item, function () { return _this.button({ className: 'note-btn-style-' + item, contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>', tooltip: _this.lang.style[item], click: _this.context.createInvokeHandler('editor.formatBlock') }).render(); }); }; var this_1 = this; for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) { _loop_1(styleIdx, styleLen); } this.context.memo('button.bold', function () { return _this.button({ className: 'note-btn-bold', contents: _this.ui.icon(_this.options.icons.bold), tooltip: _this.lang.font.bold + _this.representShortcut('bold'), click: _this.context.createInvokeHandlerAndUpdateState('editor.bold') }).render(); }); this.context.memo('button.italic', function () { return _this.button({ className: 'note-btn-italic', contents: _this.ui.icon(_this.options.icons.italic), tooltip: _this.lang.font.italic + _this.representShortcut('italic'), click: _this.context.createInvokeHandlerAndUpdateState('editor.italic') }).render(); }); this.context.memo('button.underline', function () { return _this.button({ className: 'note-btn-underline', contents: _this.ui.icon(_this.options.icons.underline), tooltip: _this.lang.font.underline + _this.representShortcut('underline'), click: _this.context.createInvokeHandlerAndUpdateState('editor.underline') }).render(); }); this.context.memo('button.clear', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.eraser), tooltip: _this.lang.font.clear + _this.representShortcut('removeFormat'), click: _this.context.createInvokeHandler('editor.removeFormat') }).render(); }); this.context.memo('button.strikethrough', function () { return _this.button({ className: 'note-btn-strikethrough', contents: _this.ui.icon(_this.options.icons.strikethrough), tooltip: _this.lang.font.strikethrough + _this.representShortcut('strikethrough'), click: _this.context.createInvokeHandlerAndUpdateState('editor.strikethrough') }).render(); }); this.context.memo('button.superscript', function () { return _this.button({ className: 'note-btn-superscript', contents: _this.ui.icon(_this.options.icons.superscript), tooltip: _this.lang.font.superscript, click: _this.context.createInvokeHandlerAndUpdateState('editor.superscript') }).render(); }); this.context.memo('button.subscript', function () { return _this.button({ className: 'note-btn-subscript', contents: _this.ui.icon(_this.options.icons.subscript), tooltip: _this.lang.font.subscript, click: _this.context.createInvokeHandlerAndUpdateState('editor.subscript') }).render(); }); this.context.memo('button.fontname', function () { var styleInfo = _this.context.invoke('editor.currentStyle'); // Add 'default' fonts into the fontnames array if not exist $$1.each(styleInfo['font-family'].split(','), function (idx, fontname) { fontname = fontname.trim().replace(/['"]+/g, ''); if (_this.isFontDeservedToAdd(fontname)) { if ($$1.inArray(fontname, _this.options.fontNames) === -1) { _this.options.fontNames.push(fontname); } } }); return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('<span class="note-current-fontname"/>', _this.options), tooltip: _this.lang.font.name, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ className: 'dropdown-fontname', checkClassName: _this.options.icons.menuCheck, items: _this.options.fontNames.filter(_this.isFontInstalled.bind(_this)), title: _this.lang.font.name, template: function (item) { return '<span style="font-family: \'' + item + '\'">' + item + '</span>'; }, click: _this.context.createInvokeHandlerAndUpdateState('editor.fontName') }) ]).render(); }); this.context.memo('button.fontsize', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>', _this.options), tooltip: _this.lang.font.size, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ className: 'dropdown-fontsize', checkClassName: _this.options.icons.menuCheck, items: _this.options.fontSizes, title: _this.lang.font.size, click: _this.context.createInvokeHandlerAndUpdateState('editor.fontSize') }) ]).render(); }); this.context.memo('button.color', function () { return _this.ui.buttonGroup({ className: 'note-color', children: [ _this.button({ className: 'note-current-color-button', contents: _this.ui.icon(_this.options.icons.font + ' note-recent-color'), tooltip: _this.lang.color.recent, click: function (e) { var $button = $$1(e.currentTarget); _this.context.invoke('editor.color', { backColor: $button.attr('data-backColor'), foreColor: $button.attr('data-foreColor') }); }, callback: function ($button) { var $recentColor = $button.find('.note-recent-color'); $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } }), _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('', _this.options), tooltip: _this.lang.color.more, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ items: [ '<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>', '<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>' ].join(''), callback: function ($dropdown) { $dropdown.find('.note-holder').each(function (idx, item) { var $holder = $$1(item); $holder.append(_this.ui.palette({ colors: _this.options.colors, colorsName: _this.options.colorsName, eventName: $holder.data('event'), container: _this.options.container, tooltip: _this.options.tooltip }).render()); }); }, click: function (event) { var $button = $$1(event.target); var eventName = $button.data('event'); var value = $button.data('value'); if (eventName && value) { var key = eventName === 'backColor' ? 'background-color' : 'color'; var $color = $button.closest('.note-color').find('.note-recent-color'); var $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); _this.context.invoke('editor.' + eventName, value); } } }) ] }).render(); }); this.context.memo('button.ul', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.unorderedlist), tooltip: _this.lang.lists.unordered + _this.representShortcut('insertUnorderedList'), click: _this.context.createInvokeHandler('editor.insertUnorderedList') }).render(); }); this.context.memo('button.ol', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.orderedlist), tooltip: _this.lang.lists.ordered + _this.representShortcut('insertOrderedList'), click: _this.context.createInvokeHandler('editor.insertOrderedList') }).render(); }); var justifyLeft = this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'), click: this.context.createInvokeHandler('editor.justifyLeft') }); var justifyCenter = this.button({ contents: this.ui.icon(this.options.icons.alignCenter), tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'), click: this.context.createInvokeHandler('editor.justifyCenter') }); var justifyRight = this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'), click: this.context.createInvokeHandler('editor.justifyRight') }); var justifyFull = this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'), click: this.context.createInvokeHandler('editor.justifyFull') }); var outdent = this.button({ contents: this.ui.icon(this.options.icons.outdent), tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'), click: this.context.createInvokeHandler('editor.outdent') }); var indent = this.button({ contents: this.ui.icon(this.options.icons.indent), tooltip: this.lang.paragraph.indent + this.representShortcut('indent'), click: this.context.createInvokeHandler('editor.indent') }); this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); this.context.memo('button.outdent', func.invoke(outdent, 'render')); this.context.memo('button.indent', func.invoke(indent, 'render')); this.context.memo('button.paragraph', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.alignLeft), _this.options), tooltip: _this.lang.paragraph.paragraph, data: { toggle: 'dropdown' } }), _this.ui.dropdown([ _this.ui.buttonGroup({ className: 'note-align', children: [justifyLeft, justifyCenter, justifyRight, justifyFull] }), _this.ui.buttonGroup({ className: 'note-list', children: [outdent, indent] }) ]) ]).render(); }); this.context.memo('button.height', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.textHeight), _this.options), tooltip: _this.lang.font.height, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ items: _this.options.lineHeights, checkClassName: _this.options.icons.menuCheck, className: 'dropdown-line-height', title: _this.lang.font.height, click: _this.context.createInvokeHandler('editor.lineHeight') }) ]).render(); }); this.context.memo('button.table', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.table), _this.options), tooltip: _this.lang.table.table, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ title: _this.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 ($node) { var $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: _this.options.insertTableMaxSize.col + 'em', height: _this.options.insertTableMaxSize.row + 'em' }).mousedown(_this.context.createInvokeHandler('editor.insertTable')) .on('mousemove', _this.tableMoveHandler.bind(_this)); } }).render(); }); this.context.memo('button.link', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.link), tooltip: _this.lang.link.link + _this.representShortcut('linkDialog.show'), click: _this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.picture', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.picture), tooltip: _this.lang.image.image, click: _this.context.createInvokeHandler('imageDialog.show') }).render(); }); this.context.memo('button.video', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.video), tooltip: _this.lang.video.video, click: _this.context.createInvokeHandler('videoDialog.show') }).render(); }); this.context.memo('button.hr', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.minus), tooltip: _this.lang.hr.insert + _this.representShortcut('insertHorizontalRule'), click: _this.context.createInvokeHandler('editor.insertHorizontalRule') }).render(); }); this.context.memo('button.fullscreen', function () { return _this.button({ className: 'btn-fullscreen', contents: _this.ui.icon(_this.options.icons.arrowsAlt), tooltip: _this.lang.options.fullscreen, click: _this.context.createInvokeHandler('fullscreen.toggle') }).render(); }); this.context.memo('button.codeview', function () { return _this.button({ className: 'btn-codeview', contents: _this.ui.icon(_this.options.icons.code), tooltip: _this.lang.options.codeview, click: _this.context.createInvokeHandler('codeview.toggle') }).render(); }); this.context.memo('button.redo', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.redo), tooltip: _this.lang.history.redo + _this.representShortcut('redo'), click: _this.context.createInvokeHandler('editor.redo') }).render(); }); this.context.memo('button.undo', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.undo), tooltip: _this.lang.history.undo + _this.representShortcut('undo'), click: _this.context.createInvokeHandler('editor.undo') }).render(); }); this.context.memo('button.help', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.question), tooltip: _this.lang.options.help, click: _this.context.createInvokeHandler('helpDialog.show') }).render(); }); }; /** * image : [ * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], * ['remove', ['removeMedia']] * ], */ Buttons.prototype.addImagePopoverButtons = function () { var _this = this; // Image Size Buttons this.context.memo('button.imageSize100', function () { return _this.button({ contents: '<span class="note-fontsize-10">100%</span>', tooltip: _this.lang.image.resizeFull, click: _this.context.createInvokeHandler('editor.resize', '1') }).render(); }); this.context.memo('button.imageSize50', function () { return _this.button({ contents: '<span class="note-fontsize-10">50%</span>', tooltip: _this.lang.image.resizeHalf, click: _this.context.createInvokeHandler('editor.resize', '0.5') }).render(); }); this.context.memo('button.imageSize25', function () { return _this.button({ contents: '<span class="note-fontsize-10">25%</span>', tooltip: _this.lang.image.resizeQuarter, click: _this.context.createInvokeHandler('editor.resize', '0.25') }).render(); }); // Float Buttons this.context.memo('button.floatLeft', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignLeft), tooltip: _this.lang.image.floatLeft, click: _this.context.createInvokeHandler('editor.floatMe', 'left') }).render(); }); this.context.memo('button.floatRight', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignRight), tooltip: _this.lang.image.floatRight, click: _this.context.createInvokeHandler('editor.floatMe', 'right') }).render(); }); this.context.memo('button.floatNone', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignJustify), tooltip: _this.lang.image.floatNone, click: _this.context.createInvokeHandler('editor.floatMe', 'none') }).render(); }); // Remove Buttons this.context.memo('button.removeMedia', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.trash), tooltip: _this.lang.image.remove, click: _this.context.createInvokeHandler('editor.removeMedia') }).render(); }); }; Buttons.prototype.addLinkPopoverButtons = function () { var _this = this; this.context.memo('button.linkDialogShow', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.link), tooltip: _this.lang.link.edit, click: _this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.unlink', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.unlink), tooltip: _this.lang.link.unlink, click: _this.context.createInvokeHandler('editor.unlink') }).render(); }); }; /** * table : [ * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] * ], */ Buttons.prototype.addTablePopoverButtons = function () { var _this = this; this.context.memo('button.addRowUp', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowAbove), tooltip: _this.lang.table.addRowAbove, click: _this.context.createInvokeHandler('editor.addRow', 'top') }).render(); }); this.context.memo('button.addRowDown', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowBelow), tooltip: _this.lang.table.addRowBelow, click: _this.context.createInvokeHandler('editor.addRow', 'bottom') }).render(); }); this.context.memo('button.addColLeft', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colBefore), tooltip: _this.lang.table.addColLeft, click: _this.context.createInvokeHandler('editor.addCol', 'left') }).render(); }); this.context.memo('button.addColRight', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colAfter), tooltip: _this.lang.table.addColRight, click: _this.context.createInvokeHandler('editor.addCol', 'right') }).render(); }); this.context.memo('button.deleteRow', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowRemove), tooltip: _this.lang.table.delRow, click: _this.context.createInvokeHandler('editor.deleteRow') }).render(); }); this.context.memo('button.deleteCol', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colRemove), tooltip: _this.lang.table.delCol, click: _this.context.createInvokeHandler('editor.deleteCol') }).render(); }); this.context.memo('button.deleteTable', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.trash), tooltip: _this.lang.table.delTable, click: _this.context.createInvokeHandler('editor.deleteTable') }).render(); }); }; Buttons.prototype.build = function ($container, groups) { for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { var group = groups[groupIdx]; var groupName = $$1.isArray(group) ? group[0] : group; var buttons = $$1.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group]; var $group = this.ui.buttonGroup({ className: 'note-' + groupName }).render(); for (var idx = 0, len = buttons.length; idx < len; idx++) { var btn = this.context.memo('button.' + buttons[idx]); if (btn) { $group.append(typeof btn === 'function' ? btn(this.context) : btn); } } $group.appendTo($container); } }; /** * @param {jQuery} [$container] */ Buttons.prototype.updateCurrentStyle = function ($container) { var _this = this; var $cont = $container || this.$toolbar; var styleInfo = this.context.invoke('editor.currentStyle'); this.updateBtnStates($cont, { '.note-btn-bold': function () { return styleInfo['font-bold'] === 'bold'; }, '.note-btn-italic': function () { return styleInfo['font-italic'] === 'italic'; }, '.note-btn-underline': function () { return styleInfo['font-underline'] === 'underline'; }, '.note-btn-subscript': function () { return styleInfo['font-subscript'] === 'subscript'; }, '.note-btn-superscript': function () { return styleInfo['font-superscript'] === 'superscript'; }, '.note-btn-strikethrough': function () { return styleInfo['font-strikethrough'] === 'strikethrough'; } }); if (styleInfo['font-family']) { var fontNames = styleInfo['font-family'].split(',').map(function (name) { return name.replace(/[\'\"]/g, '') .replace(/\s+$/, '') .replace(/^\s+/, ''); }); var fontName_1 = lists.find(fontNames, this.isFontInstalled.bind(this)); $cont.find('.dropdown-fontname a').each(function (idx, item) { var $item = $$1(item); // always compare string to avoid creating another func. var isChecked = ($item.data('value') + '') === (fontName_1 + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontname').text(fontName_1).css('font-family', fontName_1); } if (styleInfo['font-size']) { var fontSize_1 = styleInfo['font-size']; $cont.find('.dropdown-fontsize a').each(function (idx, item) { var $item = $$1(item); // always compare with string to avoid creating another func. var isChecked = ($item.data('value') + '') === (fontSize_1 + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontsize').text(fontSize_1); } if (styleInfo['line-height']) { var lineHeight_1 = styleInfo['line-height']; $cont.find('.dropdown-line-height li a').each(function (idx, item) { // always compare with string to avoid creating another func. var isChecked = ($$1(item).data('value') + '') === (lineHeight_1 + ''); _this.className = isChecked ? 'checked' : ''; }); } }; Buttons.prototype.updateBtnStates = function ($container, infos) { var _this = this; $$1.each(infos, function (selector, pred) { _this.ui.toggleBtnActive($container.find(selector), pred()); }); }; Buttons.prototype.tableMoveHandler = function (event) { var PX_PER_EM = 18; var $picker = $$1(event.target.parentNode); // target is mousecatcher var $dimensionDisplay = $picker.next(); var $catcher = $picker.find('.note-dimension-picker-mousecatcher'); var $highlighted = $picker.find('.note-dimension-picker-highlighted'); var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox if (event.offsetX === undefined) { var posCatcher = $$1(event.target).offset(); posOffset = { x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { posOffset = { x: event.offsetX, y: event.offsetY }; } var dim = { c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); $catcher.data('value', dim.c + 'x' + dim.r); if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) { $unhighlighted.css({ width: dim.c + 1 + 'em' }); } if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) { $unhighlighted.css({ height: dim.r + 1 + 'em' }); } $dimensionDisplay.html(dim.c + ' x ' + dim.r); }; return Buttons; }()); var Toolbar = /** @class */ (function () { function Toolbar(context) { this.context = context; this.$window = $$1(window); this.$document = $$1(document); this.ui = $$1.summernote.ui; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.followScroll = this.followScroll.bind(this); } Toolbar.prototype.shouldInitialize = function () { return !this.options.airMode; }; Toolbar.prototype.initialize = function () { var _this = this; this.options.toolbar = this.options.toolbar || []; if (!this.options.toolbar.length) { this.$toolbar.hide(); } else { this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar); } if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } this.changeContainer(false); this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () { _this.context.invoke('buttons.updateCurrentStyle'); }); this.context.invoke('buttons.updateCurrentStyle'); if (this.options.followingToolbar) { this.$window.on('scroll resize', this.followScroll); } }; Toolbar.prototype.destroy = function () { this.$toolbar.children().remove(); if (this.options.followingToolbar) { this.$window.off('scroll resize', this.followScroll); } }; Toolbar.prototype.followScroll = function () { if (this.$editor.hasClass('fullscreen')) { return false; } var $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper'); var editorHeight = this.$editor.outerHeight(); var editorWidth = this.$editor.width(); var toolbarHeight = this.$toolbar.height(); $toolbarWrapper.css({ height: toolbarHeight }); // check if the web app is currently using another static bar var otherBarHeight = 0; if (this.options.otherStaticBar) { otherBarHeight = $$1(this.options.otherStaticBar).outerHeight(); } var currentOffset = this.$document.scrollTop(); var editorOffsetTop = this.$editor.offset().top; var editorOffsetBottom = editorOffsetTop + editorHeight; var activateOffset = editorOffsetTop - otherBarHeight; var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight; if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) { this.$toolbar.css({ position: 'fixed', top: otherBarHeight, width: editorWidth }); } else { this.$toolbar.css({ position: 'relative', top: 0, width: '100%' }); } }; Toolbar.prototype.changeContainer = function (isFullscreen) { if (isFullscreen) { this.$toolbar.prependTo(this.$editor); } else { if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } } }; Toolbar.prototype.updateFullscreen = function (isFullscreen) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen); this.changeContainer(isFullscreen); }; Toolbar.prototype.updateCodeview = function (isCodeview) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview); if (isCodeview) { this.deactivate(); } else { this.activate(); } }; Toolbar.prototype.activate = function (isIncludeCodeview) { var $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, true); }; Toolbar.prototype.deactivate = function (isIncludeCodeview) { var $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, false); }; return Toolbar; }()); var LinkDialog = /** @class */ (function () { function LinkDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']); } LinkDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<div class="form-group note-form-group">', "<label class=\"note-form-label\">" + this.lang.link.textToDisplay + "</label>", '<input class="note-link-text form-control note-form-control note-input" type="text" />', '</div>', '<div class="form-group note-form-group">', "<label class=\"note-form-label\">" + this.lang.link.url + "</label>", '<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />', '</div>', !this.options.disableLinkTarget ? $$1('<div/>').append(this.ui.checkbox({ id: 'sn-checkbox-open-in-new-window', text: this.lang.link.openInNewWindow, checked: true }).render()).html() : '' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.link.insert + "</button>"; this.$dialog = this.ui.dialog({ className: 'link-dialog', title: this.lang.link.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; LinkDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; LinkDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; /** * toggle update button */ LinkDialog.prototype.toggleLinkBtn = function ($linkBtn, $linkText, $linkUrl) { this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val()); }; /** * Show link dialog and set event handlers on dialog controls. * * @param {Object} linkInfo * @return {Promise} */ LinkDialog.prototype.showLinkDialog = function (linkInfo) { var _this = this; return $$1.Deferred(function (deferred) { var $linkText = _this.$dialog.find('.note-link-text'); var $linkUrl = _this.$dialog.find('.note-link-url'); var $linkBtn = _this.$dialog.find('.note-link-btn'); var $openInNewWindow = _this.$dialog.find('input[type=checkbox]'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); // if no url was given, copy text to url if (!linkInfo.url) { linkInfo.url = linkInfo.text; } $linkText.val(linkInfo.text); var handleLinkTextUpdate = function () { _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // if linktext was modified by keyup, // stop cloning text from linkUrl linkInfo.text = $linkText.val(); }; $linkText.on('input', handleLinkTextUpdate).on('paste', function () { setTimeout(handleLinkTextUpdate, 0); }); var handleLinkUrlUpdate = function () { _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // display same link on `Text to display` input // when create a new link if (!linkInfo.text) { $linkText.val($linkUrl.val()); } }; $linkUrl.on('input', handleLinkUrlUpdate).on('paste', function () { setTimeout(handleLinkUrlUpdate, 0); }).val(linkInfo.url); if (!env.isSupportTouch) { $linkUrl.trigger('focus'); } _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); _this.bindEnterKey($linkUrl, $linkBtn); _this.bindEnterKey($linkText, $linkBtn); var isChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank; $openInNewWindow.prop('checked', isChecked); $linkBtn.one('click', function (event) { event.preventDefault(); deferred.resolve({ range: linkInfo.range, url: $linkUrl.val(), text: $linkText.val(), isNewWindow: $openInNewWindow.is(':checked') }); _this.ui.hideDialog(_this.$dialog); }); }); _this.ui.onDialogHidden(_this.$dialog, function () { // detach events $linkText.off('input paste keypress'); $linkUrl.off('input paste keypress'); $linkBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }).promise(); }; /** * @param {Object} layoutInfo */ LinkDialog.prototype.show = function () { var _this = this; var linkInfo = this.context.invoke('editor.getLinkInfo'); this.context.invoke('editor.saveRange'); this.showLinkDialog(linkInfo).then(function (linkInfo) { _this.context.invoke('editor.restoreRange'); _this.context.invoke('editor.createLink', linkInfo); }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; return LinkDialog; }()); var LinkPopover = /** @class */ (function () { function LinkPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () { _this.update(); }, 'summernote.disable summernote.dialog.shown': function () { _this.hide(); } }; } LinkPopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.link); }; LinkPopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-link-popover', callback: function ($node) { var $content = $node.find('.popover-content,.note-popover-content'); $content.prepend('<span><a target="_blank"></a> </span>'); } }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.link); }; LinkPopover.prototype.destroy = function () { this.$popover.remove(); }; LinkPopover.prototype.update = function () { // Prevent focusing on editable when invoke('code') is executed if (!this.context.invoke('editor.hasFocus')) { this.hide(); return; } var rng = this.context.invoke('editor.createRange'); if (rng.isCollapsed() && rng.isOnAnchor()) { var anchor = dom.ancestor(rng.sc, dom.isAnchor); var href = $$1(anchor).attr('href'); this.$popover.find('a').attr('href', href).html(href); var pos = dom.posFromPlaceholder(anchor); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } }; LinkPopover.prototype.hide = function () { this.$popover.hide(); }; return LinkPopover; }()); var ImageDialog = /** @class */ (function () { function ImageDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } ImageDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var imageLimitation = ''; if (this.options.maximumImageFileSize) { var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)); var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B'; imageLimitation = "<small>" + (this.lang.image.maximumFileSize + ' : ' + readableSize) + "</small>"; } var body = [ '<div class="form-group note-form-group note-group-select-from-files">', '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', '<input class="note-image-input note-form-control note-input" ', ' type="file" name="files" accept="image/*" multiple="multiple" />', imageLimitation, '</div>', '<div class="form-group note-group-image-url" style="overflow:auto;">', '<label class="note-form-label">' + this.lang.image.url + '</label>', '<input class="note-image-url form-control note-form-control note-input ', ' col-md-12" type="text" />', '</div>' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.image.insert + "</button>"; this.$dialog = this.ui.dialog({ title: this.lang.image.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; ImageDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; ImageDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; ImageDialog.prototype.show = function () { var _this = this; this.context.invoke('editor.saveRange'); this.showImageDialog().then(function (data) { // [workaround] hide dialog before restore range for IE range focus _this.ui.hideDialog(_this.$dialog); _this.context.invoke('editor.restoreRange'); if (typeof data === 'string') { _this.context.invoke('editor.insertImage', data); } else { _this.context.invoke('editor.insertImagesOrCallback', data); } }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ ImageDialog.prototype.showImageDialog = function () { var _this = this; return $$1.Deferred(function (deferred) { var $imageInput = _this.$dialog.find('.note-image-input'); var $imageUrl = _this.$dialog.find('.note-image-url'); var $imageBtn = _this.$dialog.find('.note-image-btn'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element. $imageInput.replaceWith($imageInput.clone().on('change', function (event) { deferred.resolve(event.target.files || event.target.value); }).val('')); $imageBtn.click(function (event) { event.preventDefault(); deferred.resolve($imageUrl.val()); }); $imageUrl.on('keyup paste', function () { var url = $imageUrl.val(); _this.ui.toggleBtn($imageBtn, url); }).val(''); if (!env.isSupportTouch) { $imageUrl.trigger('focus'); } _this.bindEnterKey($imageUrl, $imageBtn); }); _this.ui.onDialogHidden(_this.$dialog, function () { $imageInput.off('change'); $imageUrl.off('keyup paste keypress'); $imageBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }); }; return ImageDialog; }()); /** * Image popover module * mouse events that show/hide popover will be handled by Handle.js. * Handle.js will receive the events and invoke 'imagePopover.update'. */ var ImagePopover = /** @class */ (function () { function ImagePopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.editable = context.layoutInfo.editable[0]; this.options = context.options; this.events = { 'summernote.disable': function () { _this.hide(); } }; } ImagePopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.image); }; ImagePopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-image-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.image); }; ImagePopover.prototype.destroy = function () { this.$popover.remove(); }; ImagePopover.prototype.update = function (target) { if (dom.isImg(target)) { var pos = dom.posFromPlaceholder(target); var posEditor = dom.posFromPlaceholder(this.editable); this.$popover.css({ display: 'block', left: this.options.popatmouse ? event.pageX - 20 : pos.left, top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top) }); } else { this.hide(); } }; ImagePopover.prototype.hide = function () { this.$popover.hide(); }; return ImagePopover; }()); var TablePopover = /** @class */ (function () { function TablePopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.mousedown': function (we, e) { _this.update(e.target); }, 'summernote.keyup summernote.scroll summernote.change': function () { _this.update(); }, 'summernote.disable': function () { _this.hide(); } }; } TablePopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.table); }; TablePopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-table-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor if (env.isFF) { document.execCommand('enableInlineTableEditing', false, false); } }; TablePopover.prototype.destroy = function () { this.$popover.remove(); }; TablePopover.prototype.update = function (target) { if (this.context.isDisabled()) { return false; } var isCell = dom.isCell(target); if (isCell) { var pos = dom.posFromPlaceholder(target); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } return isCell; }; TablePopover.prototype.hide = function () { this.$popover.hide(); }; return TablePopover; }()); var VideoDialog = /** @class */ (function () { function VideoDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } VideoDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<div class="form-group note-form-group row-fluid">', "<label class=\"note-form-label\">" + this.lang.video.url + " <small class=\"text-muted\">" + this.lang.video.providers + "</small></label>", '<input class="note-video-url form-control note-form-control note-input" type="text" />', '</div>' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.video.insert + "</button>"; this.$dialog = this.ui.dialog({ title: this.lang.video.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; VideoDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; VideoDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; VideoDialog.prototype.createVideoNode = function (url) { // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) var ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; var ytMatch = url.match(ytRegExp); var igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; var igMatch = url.match(igRegExp); var vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; var vMatch = url.match(vRegExp); var vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/; var vimMatch = url.match(vimRegExp); var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; var dmMatch = url.match(dmRegExp); var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; var youkuMatch = url.match(youkuRegExp); var qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/; var qqMatch = url.match(qqRegExp); var qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/; var qqMatch2 = url.match(qqRegExp2); var mp4RegExp = /^.+.(mp4|m4v)$/; var mp4Match = url.match(mp4RegExp); var oggRegExp = /^.+.(ogg|ogv)$/; var oggMatch = url.match(oggRegExp); var webmRegExp = /^.+.(webm)$/; var webmMatch = url.match(webmRegExp); var $video; if (ytMatch && ytMatch[1].length === 11) { var youtubeId = ytMatch[1]; $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', '//www.youtube.com/embed/' + youtubeId) .attr('width', '640').attr('height', '360'); } else if (igMatch && igMatch[0].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') .attr('width', '612').attr('height', '710') .attr('scrolling', 'no') .attr('allowtransparency', 'true'); } else if (vMatch && vMatch[0].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', vMatch[0] + '/embed/simple') .attr('width', '600').attr('height', '600') .attr('class', 'vine-embed'); } else if (vimMatch && vimMatch[3].length) { $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) .attr('width', '640').attr('height', '360'); } else if (dmMatch && dmMatch[2].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) .attr('width', '640').attr('height', '360'); } else if (youkuMatch && youkuMatch[1].length) { $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '498') .attr('width', '510') .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) { var vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]); $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '310') .attr('width', '500') .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0'); } else if (mp4Match || oggMatch || webmMatch) { $video = $$1('<video controls>') .attr('src', url) .attr('width', '640').attr('height', '360'); } else { // this is not a known video link. Now what, Cat? Now what? return false; } $video.addClass('note-video-clip'); return $video[0]; }; VideoDialog.prototype.show = function () { var _this = this; var text = this.context.invoke('editor.getSelectedText'); this.context.invoke('editor.saveRange'); this.showVideoDialog(text).then(function (url) { // [workaround] hide dialog before restore range for IE range focus _this.ui.hideDialog(_this.$dialog); _this.context.invoke('editor.restoreRange'); // build node var $node = _this.createVideoNode(url); if ($node) { // insert video node _this.context.invoke('editor.insertNode', $node); } }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ VideoDialog.prototype.showVideoDialog = function (text) { var _this = this; return $$1.Deferred(function (deferred) { var $videoUrl = _this.$dialog.find('.note-video-url'); var $videoBtn = _this.$dialog.find('.note-video-btn'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); $videoUrl.val(text).on('input', function () { _this.ui.toggleBtn($videoBtn, $videoUrl.val()); }); if (!env.isSupportTouch) { $videoUrl.trigger('focus'); } $videoBtn.click(function (event) { event.preventDefault(); deferred.resolve($videoUrl.val()); }); _this.bindEnterKey($videoUrl, $videoBtn); }); _this.ui.onDialogHidden(_this.$dialog, function () { $videoUrl.off('input'); $videoBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }); }; return VideoDialog; }()); var HelpDialog = /** @class */ (function () { function HelpDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } HelpDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</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: body, callback: function ($node) { $node.find('.modal-body,.note-modal-body').css({ 'max-height': 300, 'overflow': 'scroll' }); } }).render().appendTo($container); }; HelpDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; HelpDialog.prototype.createShortcutList = function () { var _this = this; var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; return Object.keys(keyMap).map(function (key) { var command = keyMap[key]; var $row = $$1('<div><div class="help-list-item"/></div>'); $row.append($$1('<label><kbd>' + key + '</kdb></label>').css({ 'width': 180, 'margin-right': 10 })).append($$1('<span/>').html(_this.context.memo('help.' + command) || command)); return $row.html(); }).join(''); }; /** * show help dialog * * @return {Promise} */ HelpDialog.prototype.showHelpDialog = function () { var _this = this; return $$1.Deferred(function (deferred) { _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); deferred.resolve(); }); _this.ui.showDialog(_this.$dialog); }).promise(); }; HelpDialog.prototype.show = function () { var _this = this; this.context.invoke('editor.saveRange'); this.showHelpDialog().then(function () { _this.context.invoke('editor.restoreRange'); }); }; return HelpDialog; }()); var AIR_MODE_POPOVER_X_OFFSET = 20; var AirPopover = /** @class */ (function () { function AirPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.scroll': function () { _this.update(); }, 'summernote.disable summernote.change summernote.dialog.shown': function () { _this.hide(); }, 'summernote.focusout': function (we, e) { // [workaround] Firefox doesn't support relatedTarget on focusout // - Ignore hide action on focus out in FF. if (env.isFF) { return; } if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(_this.$popover[0]))) { _this.hide(); } } }; } AirPopover.prototype.shouldInitialize = function () { return this.options.airMode && !lists.isEmpty(this.options.popover.air); }; AirPopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-air-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.air); }; AirPopover.prototype.destroy = function () { this.$popover.remove(); }; AirPopover.prototype.update = function () { var styleInfo = this.context.invoke('editor.currentStyle'); if (styleInfo.range && !styleInfo.range.isCollapsed()) { var rect = lists.last(styleInfo.range.getClientRects()); if (rect) { var bnd = func.rect2bnd(rect); this.$popover.css({ display: 'block', left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, top: bnd.top + bnd.height }); this.context.invoke('buttons.updateCurrentStyle', this.$popover); } } else { this.hide(); } }; AirPopover.prototype.hide = function () { this.$popover.hide(); }; return AirPopover; }()); var POPOVER_DIST = 5; var HintPopover = /** @class */ (function () { function HintPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.$editable = context.layoutInfo.editable; this.options = context.options; this.hint = this.options.hint || []; this.direction = this.options.hintDirection || 'bottom'; this.hints = $$1.isArray(this.hint) ? this.hint : [this.hint]; this.events = { 'summernote.keyup': function (we, e) { if (!e.isDefaultPrevented()) { _this.handleKeyup(e); } }, 'summernote.keydown': function (we, e) { _this.handleKeydown(e); }, 'summernote.disable summernote.dialog.shown': function () { _this.hide(); } }; } HintPopover.prototype.shouldInitialize = function () { return this.hints.length > 0; }; HintPopover.prototype.initialize = function () { var _this = this; this.lastWordRange = null; this.$popover = this.ui.popover({ className: 'note-hint-popover', hideArrow: true, direction: '' }).render().appendTo(this.options.container); this.$popover.hide(); this.$content = this.$popover.find('.popover-content,.note-popover-content'); this.$content.on('click', '.note-hint-item', function () { _this.$content.find('.active').removeClass('active'); $$1(_this).addClass('active'); _this.replace(); }); }; HintPopover.prototype.destroy = function () { this.$popover.remove(); }; HintPopover.prototype.selectItem = function ($item) { this.$content.find('.active').removeClass('active'); $item.addClass('active'); this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2); }; HintPopover.prototype.moveDown = function () { var $current = this.$content.find('.note-hint-item.active'); var $next = $current.next(); if ($next.length) { this.selectItem($next); } else { var $nextGroup = $current.parent().next(); if (!$nextGroup.length) { $nextGroup = this.$content.find('.note-hint-group').first(); } this.selectItem($nextGroup.find('.note-hint-item').first()); } }; HintPopover.prototype.moveUp = function () { var $current = this.$content.find('.note-hint-item.active'); var $prev = $current.prev(); if ($prev.length) { this.selectItem($prev); } else { var $prevGroup = $current.parent().prev(); if (!$prevGroup.length) { $prevGroup = this.$content.find('.note-hint-group').last(); } this.selectItem($prevGroup.find('.note-hint-item').last()); } }; HintPopover.prototype.replace = function () { var $item = this.$content.find('.note-hint-item.active'); if ($item.length) { var node = this.nodeFromItem($item); // XXX: consider to move codes to editor for recording redo/undo. this.lastWordRange.insertNode(node); range.createFromNode(node).collapse().select(); this.lastWordRange = null; this.hide(); this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]); this.context.invoke('editor.focus'); } }; HintPopover.prototype.nodeFromItem = function ($item) { var hint = this.hints[$item.data('index')]; var item = $item.data('item'); var node = hint.content ? hint.content(item) : item; if (typeof node === 'string') { node = dom.createText(node); } return node; }; HintPopover.prototype.createItemTemplates = function (hintIdx, items) { var hint = this.hints[hintIdx]; return items.map(function (item, idx) { var $item = $$1('<div class="note-hint-item"/>'); $item.append(hint.template ? hint.template(item) : item + ''); $item.data({ 'index': hintIdx, 'item': item }); return $item; }); }; HintPopover.prototype.handleKeydown = function (e) { if (!this.$popover.is(':visible')) { return; } if (e.keyCode === key.code.ENTER) { e.preventDefault(); this.replace(); } else if (e.keyCode === key.code.UP) { e.preventDefault(); this.moveUp(); } else if (e.keyCode === key.code.DOWN) { e.preventDefault(); this.moveDown(); } }; HintPopover.prototype.searchKeyword = function (index, keyword, callback) { var hint = this.hints[index]; if (hint && hint.match.test(keyword) && hint.search) { var matches = hint.match.exec(keyword); hint.search(matches[1], callback); } else { callback(); } }; HintPopover.prototype.createGroup = function (idx, keyword) { var _this = this; var $group = $$1('<div class="note-hint-group note-hint-group-' + idx + '"/>'); this.searchKeyword(idx, keyword, function (items) { items = items || []; if (items.length) { $group.html(_this.createItemTemplates(idx, items)); _this.show(); } }); return $group; }; HintPopover.prototype.handleKeyup = function (e) { var _this = this; if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) { var wordRange = this.context.invoke('editor.createRange').getWordRange(); var keyword_1 = wordRange.toString(); if (this.hints.length && keyword_1) { this.$content.empty(); var bnd = func.rect2bnd(lists.last(wordRange.getClientRects())); if (bnd) { this.$popover.hide(); this.lastWordRange = wordRange; this.hints.forEach(function (hint, idx) { if (hint.match.test(keyword_1)) { _this.createGroup(idx, keyword_1).appendTo(_this.$content); } }); // select first .note-hint-item this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created if (this.direction === 'top') { this.$popover.css({ left: bnd.left, top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST }); } else { this.$popover.css({ left: bnd.left, top: bnd.top + bnd.height + POPOVER_DIST }); } } } else { this.hide(); } } }; HintPopover.prototype.show = function () { this.$popover.show(); }; HintPopover.prototype.hide = function () { this.$popover.hide(); }; return HintPopover; }()); var Context = /** @class */ (function () { /** * @param {jQuery} $note * @param {Object} options */ function Context($note, options) { this.ui = $$1.summernote.ui; this.$note = $note; this.memos = {}; this.modules = {}; this.layoutInfo = {}; this.options = options; this.initialize(); } /** * create layout and initialize modules and other resources */ Context.prototype.initialize = function () { this.layoutInfo = this.ui.createLayout(this.$note, this.options); this._initialize(); this.$note.hide(); return this; }; /** * destroy modules and other resources and remove layout */ Context.prototype.destroy = function () { this._destroy(); this.$note.removeData('summernote'); this.ui.removeLayout(this.$note, this.layoutInfo); }; /** * destory modules and other resources and initialize it again */ Context.prototype.reset = function () { var disabled = this.isDisabled(); this.code(dom.emptyPara); this._destroy(); this._initialize(); if (disabled) { this.disable(); } }; Context.prototype._initialize = function () { var _this = this; // add optional buttons var buttons = $$1.extend({}, this.options.buttons); Object.keys(buttons).forEach(function (key) { _this.memo('button.' + key, buttons[key]); }); var modules = $$1.extend({}, this.options.modules, $$1.summernote.plugins || {}); // add and initialize modules Object.keys(modules).forEach(function (key) { _this.module(key, modules[key], true); }); Object.keys(this.modules).forEach(function (key) { _this.initializeModule(key); }); }; Context.prototype._destroy = function () { var _this = this; // destroy modules with reversed order Object.keys(this.modules).reverse().forEach(function (key) { _this.removeModule(key); }); Object.keys(this.memos).forEach(function (key) { _this.removeMemo(key); }); // trigger custom onDestroy callback this.triggerEvent('destroy', this); }; Context.prototype.code = function (html) { var isActivated = this.invoke('codeview.isActivated'); if (html === undefined) { this.invoke('codeview.sync'); return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html(); } else { if (isActivated) { this.layoutInfo.codable.val(html); } else { this.layoutInfo.editable.html(html); } this.$note.val(html); this.triggerEvent('change', html); } }; Context.prototype.isDisabled = function () { return this.layoutInfo.editable.attr('contenteditable') === 'false'; }; Context.prototype.enable = function () { this.layoutInfo.editable.attr('contenteditable', true); this.invoke('toolbar.activate', true); this.triggerEvent('disable', false); }; Context.prototype.disable = function () { // close codeview if codeview is opend if (this.invoke('codeview.isActivated')) { this.invoke('codeview.deactivate'); } this.layoutInfo.editable.attr('contenteditable', false); this.invoke('toolbar.deactivate', true); this.triggerEvent('disable', true); }; Context.prototype.triggerEvent = function () { var namespace = lists.head(arguments); var args = lists.tail(lists.from(arguments)); var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; if (callback) { callback.apply(this.$note[0], args); } this.$note.trigger('summernote.' + namespace, args); }; Context.prototype.initializeModule = function (key) { var module = this.modules[key]; module.shouldInitialize = module.shouldInitialize || func.ok; if (!module.shouldInitialize()) { return; } // initialize module if (module.initialize) { module.initialize(); } // attach events if (module.events) { dom.attachEvents(this.$note, module.events); } }; Context.prototype.module = function (key, ModuleClass, withoutIntialize) { if (arguments.length === 1) { return this.modules[key]; } this.modules[key] = new ModuleClass(this); if (!withoutIntialize) { this.initializeModule(key); } }; Context.prototype.removeModule = function (key) { var module = this.modules[key]; if (module.shouldInitialize()) { if (module.events) { dom.detachEvents(this.$note, module.events); } if (module.destroy) { module.destroy(); } } delete this.modules[key]; }; Context.prototype.memo = function (key, obj) { if (arguments.length === 1) { return this.memos[key]; } this.memos[key] = obj; }; Context.prototype.removeMemo = function (key) { if (this.memos[key] && this.memos[key].destroy) { this.memos[key].destroy(); } delete this.memos[key]; }; /** * Some buttons need to change their visual style immediately once they get pressed */ Context.prototype.createInvokeHandlerAndUpdateState = function (namespace, value) { var _this = this; return function (event) { _this.createInvokeHandler(namespace, value)(event); _this.invoke('buttons.updateCurrentStyle'); }; }; Context.prototype.createInvokeHandler = function (namespace, value) { var _this = this; return function (event) { event.preventDefault(); var $target = $$1(event.target); _this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target); }; }; Context.prototype.invoke = function () { var namespace = lists.head(arguments); var args = lists.tail(lists.from(arguments)); var splits = namespace.split('.'); var hasSeparator = splits.length > 1; var moduleName = hasSeparator && lists.head(splits); var methodName = hasSeparator ? lists.last(splits) : lists.head(splits); var module = this.modules[moduleName || 'editor']; if (!moduleName && this[methodName]) { return this[methodName].apply(this, args); } else if (module && module[methodName] && module.shouldInitialize()) { return module[methodName].apply(module, args); } }; return Context; }()); $$1.fn.extend({ /** * Summernote API * * @param {Object|String} * @return {this} */ summernote: function () { var type = $$1.type(lists.head(arguments)); var isExternalAPICalled = type === 'string'; var hasInitOptions = type === 'object'; var options = $$1.extend({}, $$1.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options options.langInfo = $$1.extend(true, {}, $$1.summernote.lang['en-US'], $$1.summernote.lang[options.lang]); options.icons = $$1.extend(true, {}, $$1.summernote.options.icons, options.icons); options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip; this.each(function (idx, note) { var $note = $$1(note); if (!$note.data('summernote')) { var context = new Context($note, options); $note.data('summernote', context); $note.data('summernote').triggerEvent('init', context.layoutInfo); } }); var $note = this.first(); if ($note.length) { var context = $note.data('summernote'); if (isExternalAPICalled) { return context.invoke.apply(context, lists.from(arguments)); } else if (options.focus) { context.invoke('editor.focus'); } } return this; } }); $$1.summernote = $$1.extend($$1.summernote, { version: '0.8.10', ui: ui, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': CodeView, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['fontsize', ['fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: ['p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onSubmit: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); }))); //# sourceMappingURL=summernote-lite.js.map PKf[�\ ]Q�Q�Qdist/summernote-lite.js.mapnu�[���{"version":3,"file":"summernote-lite.js","sources":["../src/js/base/renderer.js","../src/js/lite/ui/TooltipUI.js","../src/js/lite/ui/DropdownUI.js","../src/js/lite/ui/ModalUI.js","../src/js/lite/ui.js","../src/js/base/summernote-en-US.js","../src/js/base/core/env.js","../src/js/base/core/func.js","../src/js/base/core/lists.js","../src/js/base/core/key.js","../src/js/base/core/dom.js","../src/js/base/core/range.js","../src/js/base/core/async.js","../src/js/base/editing/History.js","../src/js/base/editing/Style.js","../src/js/base/editing/Bullet.js","../src/js/base/editing/Typing.js","../src/js/base/editing/Table.js","../src/js/base/module/Editor.js","../src/js/base/module/Clipboard.js","../src/js/base/module/Dropzone.js","../src/js/base/module/Codeview.js","../src/js/base/module/Statusbar.js","../src/js/base/module/Fullscreen.js","../src/js/base/module/Handle.js","../src/js/base/module/AutoLink.js","../src/js/base/module/AutoSync.js","../src/js/base/module/Placeholder.js","../src/js/base/module/Buttons.js","../src/js/base/module/Toolbar.js","../src/js/base/module/LinkDialog.js","../src/js/base/module/LinkPopover.js","../src/js/base/module/ImageDialog.js","../src/js/base/module/ImagePopover.js","../src/js/base/module/TablePopover.js","../src/js/base/module/VideoDialog.js","../src/js/base/module/HelpDialog.js","../src/js/base/module/AirPopover.js","../src/js/base/module/HintPopover.js","../src/js/base/Context.js","../src/js/summernote.js","../src/js/lite/settings.js"],"sourcesContent":["import $ from 'jquery';\n\nclass Renderer {\n constructor(markup, children, options, callback) {\n this.markup = markup;\n this.children = children;\n this.options = options;\n this.callback = callback;\n }\n\n render($parent) {\n const $node = $(this.markup);\n\n if (this.options && this.options.contents) {\n $node.html(this.options.contents);\n }\n\n if (this.options && this.options.className) {\n $node.addClass(this.options.className);\n }\n\n if (this.options && this.options.data) {\n $.each(this.options.data, (k, v) => {\n $node.attr('data-' + k, v);\n });\n }\n\n if (this.options && this.options.click) {\n $node.on('click', this.options.click);\n }\n\n if (this.children) {\n const $container = $node.find('.note-children-container');\n this.children.forEach((child) => {\n child.render($container.length ? $container : $node);\n });\n }\n\n if (this.callback) {\n this.callback($node, this.options);\n }\n\n if (this.options && this.options.callback) {\n this.options.callback($node);\n }\n\n if ($parent) {\n $parent.append($node);\n }\n\n return $node;\n }\n}\n\nexport default {\n create: (markup, callback) => {\n return () => {\n const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0];\n let children = $.isArray(arguments[0]) ? arguments[0] : [];\n if (options && options.children) {\n children = options.children;\n }\n return new Renderer(markup, children, options, callback);\n };\n }\n};\n","class TooltipUI {\n constructor($node, options) {\n this.$node = $node;\n this.options = $.extend({}, {\n title: '',\n target: options.container,\n trigger: 'hover focus',\n placement: 'bottom'\n }, options);\n\n // create tooltip node\n this.$tooltip = $([\n '<div class=\"note-tooltip in\">',\n ' <div class=\"note-tooltip-arrow\"/>',\n ' <div class=\"note-tooltip-content\"/>',\n '</div>'\n ].join(''));\n\n // define event\n if (this.options.trigger !== 'manual') {\n const showCallback = this.show.bind(this);\n const hideCallback = this.hide.bind(this);\n const toggleCallback = this.toggle.bind(this);\n\n this.options.trigger.split(' ').forEach(function(eventName) {\n if (eventName === 'hover') {\n $node.off('mouseenter mouseleave');\n $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);\n } else if (eventName === 'click') {\n $node.on('click', toggleCallback);\n } else if (eventName === 'focus') {\n $node.on('focus', showCallback).on('blur', hideCallback);\n }\n });\n }\n }\n\n show() {\n const $node = this.$node;\n const offset = $node.offset();\n\n const $tooltip = this.$tooltip;\n const title = this.options.title || $node.attr('title') || $node.data('title');\n const placement = this.options.placement || $node.data('placement');\n\n $tooltip.addClass(placement);\n $tooltip.addClass('in');\n $tooltip.find('.note-tooltip-content').text(title);\n $tooltip.appendTo(this.options.target);\n\n const nodeWidth = $node.outerWidth();\n const nodeHeight = $node.outerHeight();\n const tooltipWidth = $tooltip.outerWidth();\n const tooltipHeight = $tooltip.outerHeight();\n\n if (placement === 'bottom') {\n $tooltip.css({\n top: offset.top + nodeHeight,\n left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)\n });\n } else if (placement === 'top') {\n $tooltip.css({\n top: offset.top - tooltipHeight,\n left: offset.left + (nodeWidth / 2 - tooltipWidth / 2)\n });\n } else if (placement === 'left') {\n $tooltip.css({\n top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n left: offset.left - tooltipWidth\n });\n } else if (placement === 'right') {\n $tooltip.css({\n top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n left: offset.left + nodeWidth\n });\n }\n }\n\n hide() {\n this.$tooltip.removeClass('in');\n this.$tooltip.remove();\n }\n\n toggle() {\n if (this.$tooltip.hasClass('in')) {\n this.hide();\n } else {\n this.show();\n }\n }\n}\n\nexport default TooltipUI;\n","class DropdownUI {\n constructor($node, options) {\n this.$button = $node;\n this.options = $.extend({}, {\n target: options.container\n }, options);\n this.setEvent();\n }\n\n setEvent() {\n this.$button.on('click', this.toggle.bind(this));\n }\n\n clear() {\n var $parent = $('.note-btn-group.open');\n $parent.find('.note-btn.active').removeClass('active');\n $parent.removeClass('open');\n }\n\n show() {\n this.$button.addClass('active');\n this.$button.parent().addClass('open');\n\n var $dropdown = this.$button.next();\n var offset = $dropdown.offset();\n var width = $dropdown.outerWidth();\n var windowWidth = $(window).width();\n var targetMarginRight = parseFloat($(this.options.target).css('margin-right'));\n\n if (offset.left + width > windowWidth - targetMarginRight) {\n $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));\n } else {\n $dropdown.css('margin-left', '');\n }\n }\n\n hide() {\n this.$button.removeClass('active');\n this.$button.parent().removeClass('open');\n }\n\n toggle() {\n var isOpened = this.$button.parent().hasClass('open');\n\n this.clear();\n\n if (isOpened) {\n this.hide();\n } else {\n this.show();\n }\n }\n}\n\n$(document).on('click', function(e) {\n if (!$(e.target).closest('.note-btn-group').length) {\n $('.note-btn-group.open').removeClass('open');\n }\n});\n\n$(document).on('click.note-dropdown-menu', function(e) {\n $(e.target).closest('.note-dropdown-menu').parent().removeClass('open');\n});\n\nexport default DropdownUI;\n","class ModalUI {\n constructor($node, options) {\n this.options = $.extend({}, {\n target: options.container || 'body'\n }, options);\n\n this.$modal = $node;\n this.$backdrop = $('<div class=\"note-modal-backdrop\" />');\n }\n\n show() {\n if (this.options.target === 'body') {\n this.$backdrop.css('position', 'fixed');\n this.$modal.css('position', 'fixed');\n } else {\n this.$backdrop.css('position', 'absolute');\n this.$modal.css('position', 'absolute');\n }\n\n this.$backdrop.appendTo(this.options.target).show();\n this.$modal.appendTo(this.options.target).addClass('open').show();\n\n this.$modal.trigger('note.modal.show');\n this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));\n }\n\n hide() {\n this.$modal.removeClass('open').hide();\n this.$backdrop.hide();\n this.$modal.trigger('note.modal.hide');\n }\n}\n\nexport default ModalUI;\n","import renderer from '../base/renderer';\nimport TooltipUI from './ui/TooltipUI';\nimport DropdownUI from './ui/DropdownUI';\nimport ModalUI from './ui/ModalUI';\n\nconst editor = renderer.create('<div class=\"note-editor note-frame\"/>');\nconst toolbar = renderer.create('<div class=\"note-toolbar\" role=\"toolbar\"/>');\nconst editingArea = renderer.create('<div class=\"note-editing-area\"/>');\nconst codable = renderer.create('<textarea class=\"note-codable\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst editable = renderer.create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst statusbar = renderer.create([\n '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"/>',\n '<div class=\"note-statusbar\" role=\"resize\">',\n ' <div class=\"note-resizebar\" role=\"seperator\" aria-orientation=\"horizontal\" aria-label=\"resize\">',\n ' <div class=\"note-icon-bar\"/>',\n ' <div class=\"note-icon-bar\"/>',\n ' <div class=\"note-icon-bar\"/>',\n ' </div>',\n '</div>'\n].join(''));\n\nconst airEditor = renderer.create('<div class=\"note-editor\"/>');\nconst airEditable = renderer.create([\n '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"/>',\n '<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>'\n].join(''));\n\nconst buttonGroup = renderer.create('<div class=\"note-btn-group\">');\nconst button = renderer.create('<button type=\"button\" class=\"note-btn\" role=\"button\" tabindex=\"-1\">', function($node, options) {\n // set button type\n if (options && options.tooltip) {\n $node.attr({\n 'aria-label': options.tooltip\n });\n $node.data('_lite_tooltip', new TooltipUI($node, {\n title: options.tooltip,\n container: options.container\n }));\n }\n if (options.contents) {\n $node.html(options.contents);\n }\n\n if (options && options.data && options.data.toggle === 'dropdown') {\n $node.data('_lite_dropdown', new DropdownUI($node, {\n container: options.container\n }));\n }\n});\n\nconst dropdown = renderer.create('<div class=\"note-dropdown-menu\" role=\"list\">', function($node, options) {\n const markup = $.isArray(options.items) ? options.items.map(function(item) {\n const value = (typeof item === 'string') ? item : (item.value || '');\n const content = options.template ? options.template(item) : item;\n const $temp = $('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\"></a>');\n\n $temp.html(content).data('item', item);\n\n return $temp;\n }) : options.items;\n\n $node.html(markup).attr({'aria-label': options.title});\n\n $node.on('click', '> .note-dropdown-item', function(e) {\n const $a = $(this);\n\n const item = $a.data('item');\n const value = $a.data('value');\n\n if (item.click) {\n item.click($a);\n } else if (options.itemClick) {\n options.itemClick(e, item, value);\n }\n });\n});\n\nconst dropdownCheck = renderer.create('<div class=\"note-dropdown-menu note-check\" role=\"list\">', function($node, options) {\n const markup = $.isArray(options.items) ? options.items.map(function(item) {\n const value = (typeof item === 'string') ? item : (item.value || '');\n const content = options.template ? options.template(item) : item;\n\n const $temp = $('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\"></a>');\n $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);\n return $temp;\n }) : options.items;\n\n $node.html(markup).attr({'aria-label': options.title});\n\n $node.on('click', '> .note-dropdown-item', function(e) {\n const $a = $(this);\n\n const item = $a.data('item');\n const value = $a.data('value');\n\n if (item.click) {\n item.click($a);\n } else if (options.itemClick) {\n options.itemClick(e, item, value);\n }\n });\n});\n\nconst dropdownButtonContents = function(contents, options) {\n return contents + ' ' + icon(options.icons.caret, 'span');\n};\n\nconst dropdownButton = function(opt, callback) {\n return buttonGroup([\n button({\n className: 'dropdown-toggle',\n contents: opt.title + ' ' + icon('note-icon-caret'),\n tooltip: opt.tooltip,\n data: {\n toggle: 'dropdown'\n }\n }),\n dropdown({\n className: opt.className,\n items: opt.items,\n template: opt.template,\n itemClick: opt.itemClick\n })\n ], { callback: callback }).render();\n};\n\nconst dropdownCheckButton = function(opt, callback) {\n return buttonGroup([\n button({\n className: 'dropdown-toggle',\n contents: opt.title + ' ' + icon('note-icon-caret'),\n tooltip: opt.tooltip,\n data: {\n toggle: 'dropdown'\n }\n }),\n dropdownCheck({\n className: opt.className,\n checkClassName: opt.checkClassName,\n items: opt.items,\n template: opt.template,\n itemClick: opt.itemClick\n })\n ], { callback: callback }).render();\n};\n\nconst paragraphDropdownButton = function(opt) {\n return buttonGroup([\n button({\n className: 'dropdown-toggle',\n contents: opt.title + ' ' + icon('note-icon-caret'),\n tooltip: opt.tooltip,\n data: {\n toggle: 'dropdown'\n }\n }),\n dropdown([\n buttonGroup({\n className: 'note-align',\n children: opt.items[0]\n }),\n buttonGroup({\n className: 'note-list',\n children: opt.items[1]\n })\n ])\n ]).render();\n};\n\nconst tableMoveHandler = function(event, col, row) {\n const PX_PER_EM = 18;\n const $picker = $(event.target.parentNode); // target is mousecatcher\n const $dimensionDisplay = $picker.next();\n const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n let posOffset;\n // HTML5 with jQuery - e.offsetX is undefined in Firefox\n if (event.offsetX === undefined) {\n const posCatcher = $(event.target).offset();\n posOffset = {\n x: event.pageX - posCatcher.left,\n y: event.pageY - posCatcher.top\n };\n } else {\n posOffset = {\n x: event.offsetX,\n y: event.offsetY\n };\n }\n\n const dim = {\n c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n };\n\n $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n $catcher.data('value', dim.c + 'x' + dim.r);\n\n if (dim.c > 3 && dim.c < col) {\n $unhighlighted.css({ width: dim.c + 1 + 'em' });\n }\n\n if (dim.r > 3 && dim.r < row) {\n $unhighlighted.css({ height: dim.r + 1 + 'em' });\n }\n\n $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n};\n\nconst tableDropdownButton = function(opt) {\n return buttonGroup([\n button({\n className: 'dropdown-toggle',\n contents: opt.title + ' ' + icon('note-icon-caret'),\n tooltip: opt.tooltip,\n data: {\n toggle: 'dropdown'\n }\n }),\n dropdown({\n className: 'note-table',\n items: [\n '<div class=\"note-dimension-picker\">',\n ' <div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"/>',\n ' <div class=\"note-dimension-picker-highlighted\"/>',\n ' <div class=\"note-dimension-picker-unhighlighted\"/>',\n '</div>',\n '<div class=\"note-dimension-display\">1 x 1</div>'\n ].join('')\n })\n ], {\n callback: function($node) {\n const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n $catcher.css({\n width: opt.col + 'em',\n height: opt.row + 'em'\n })\n .mousedown(opt.itemClick)\n .mousemove(function(e) {\n tableMoveHandler(e, opt.col, opt.row);\n });\n }\n }).render();\n};\n\nconst palette = renderer.create('<div class=\"note-color-palette\"/>', function($node, options) {\n const contents = [];\n for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n const eventName = options.eventName;\n const colors = options.colors[row];\n const colorsName = options.colorsName[row];\n const buttons = [];\n for (let col = 0, colSize = colors.length; col < colSize; col++) {\n const color = colors[col];\n const colorName = colorsName[col];\n buttons.push([\n '<button type=\"button\" class=\"note-btn note-color-btn\"',\n 'style=\"background-color:', color, '\" ',\n 'data-event=\"', eventName, '\" ',\n 'data-value=\"', color, '\" ',\n 'title=\"', colorName, '\" ',\n 'aria-label=\"', colorName, '\" ',\n 'data-toggle=\"button\" tabindex=\"-1\"></button>'\n ].join(''));\n }\n contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n }\n $node.html(contents.join(''));\n\n $node.find('.note-color-btn').each(function() {\n $(this).data('_lite_tooltip', new TooltipUI($(this), {\n container: options.container\n }));\n });\n});\n\nconst colorDropdownButton = function(opt, type) {\n return buttonGroup({\n className: 'note-color',\n children: [\n button({\n className: 'note-current-color-button',\n contents: opt.title,\n tooltip: opt.lang.color.recent,\n click: opt.currentClick,\n callback: function($button) {\n const $recentColor = $button.find('.note-recent-color');\n\n if (type !== 'foreColor') {\n $recentColor.css('background-color', '#FFFF00');\n $button.attr('data-backColor', '#FFFF00');\n }\n }\n }),\n button({\n className: 'dropdown-toggle',\n contents: icon('note-icon-caret'),\n tooltip: opt.lang.color.more,\n data: {\n toggle: 'dropdown'\n }\n }),\n dropdown({\n items: [\n '<div>',\n '<div class=\"note-btn-group btn-background-color\">',\n ' <div class=\"note-palette-title\">' + opt.lang.color.background + '</div>',\n ' <div>',\n '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" ' +\n ' data-event=\"backColor\" data-value=\"inherit\">',\n opt.lang.color.transparent,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"backColor\"/>',\n '</div>',\n '<div class=\"note-btn-group btn-foreground-color\">',\n ' <div class=\"note-palette-title\">' + opt.lang.color.foreground + '</div>',\n ' <div>',\n '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" ' +\n ' data-event=\"removeFormat\" data-value=\"foreColor\">',\n opt.lang.color.resetToDefault,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"foreColor\"/>',\n '</div>',\n '</div>'\n ].join(''),\n callback: function($dropdown) {\n $dropdown.find('.note-holder').each(function() {\n const $holder = $(this);\n $holder.append(palette({\n colors: opt.colors,\n eventName: $holder.data('event')\n }).render());\n });\n\n if (type === 'fore') {\n $dropdown.find('.btn-background-color').hide();\n $dropdown.css({ 'min-width': '210px' });\n } else if (type === 'back') {\n $dropdown.find('.btn-foreground-color').hide();\n $dropdown.css({ 'min-width': '210px' });\n }\n },\n click: function(event) {\n const $button = $(event.target);\n const eventName = $button.data('event');\n const value = $button.data('value');\n\n if (eventName && value) {\n const key = eventName === 'backColor' ? 'background-color' : 'color';\n const $color = $button.closest('.note-color').find('.note-recent-color');\n const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n $color.css(key, value);\n $currentButton.attr('data-' + eventName, value);\n\n if (type === 'fore') {\n opt.itemClick('foreColor', value);\n } else if (type === 'back') {\n opt.itemClick('backColor', value);\n } else {\n opt.itemClick(eventName, value);\n }\n }\n }\n })\n ]\n }).render();\n};\n\nconst dialog = renderer.create('<div class=\"note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function($node, options) {\n if (options.fade) {\n $node.addClass('fade');\n }\n $node.attr({\n 'aria-label': options.title\n });\n $node.html([\n ' <div class=\"note-modal-content\">',\n (options.title\n ? ' <div class=\"note-modal-header\">' +\n ' <button type=\"button\" class=\"close\" aria-label=\"Close\" aria-hidden=\"true\"><i class=\"note-icon-close\"></i></button>' +\n ' <h4 class=\"note-modal-title\">' + options.title + '</h4>' +\n ' </div>' : ''\n ),\n ' <div class=\"note-modal-body\">' + options.body + '</div>',\n (options.footer\n ? ' <div class=\"note-modal-footer\">' + options.footer + '</div>' : ''\n ),\n ' </div>'\n ].join(''));\n\n $node.data('modal', new ModalUI($node, options));\n});\n\nconst videoDialog = function(opt) {\n const body = '<div class=\"note-form-group\">' +\n '<label class=\"note-form-label\">' +\n opt.lang.video.url + ' <small class=\"text-muted\">' +\n opt.lang.video.providers + '</small>' +\n '</label>' +\n '<input class=\"note-video-url note-input\" type=\"text\" />' +\n '</div>';\n const footer = [\n '<button type=\"button\" href=\"#\" class=\"note-btn note-btn-primary note-video-btn disabled\" disabled>',\n opt.lang.video.insert,\n '</button>'\n ].join('');\n\n return dialog({\n title: opt.lang.video.insert,\n fade: opt.fade,\n body: body,\n footer: footer\n }).render();\n};\n\nconst imageDialog = function(opt) {\n const body = '<div class=\"note-form-group note-group-select-from-files\">' +\n '<label class=\"note-form-label\">' + opt.lang.image.selectFromFiles + '</label>' +\n '<input class=\"note-note-image-input note-input\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\" />' +\n opt.imageLimitation +\n '</div>' +\n '<div class=\"note-form-group\" style=\"overflow:auto;\">' +\n '<label class=\"note-form-label\">' + opt.lang.image.url + '</label>' +\n '<input class=\"note-image-url note-input\" type=\"text\" />' +\n '</div>';\n const footer = [\n '<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-btn-large note-image-btn disabled\" disabled>',\n opt.lang.image.insert,\n '</button>'\n ].join('');\n\n return dialog({\n title: opt.lang.image.insert,\n fade: opt.fade,\n body: body,\n footer: footer\n }).render();\n};\n\nconst linkDialog = function(opt) {\n const body = '<div class=\"note-form-group\">' +\n '<label class=\"note-form-label\">' + opt.lang.link.textToDisplay + '</label>' +\n '<input class=\"note-link-text note-input\" type=\"text\" />' +\n '</div>' +\n '<div class=\"note-form-group\">' +\n '<label class=\"note-form-label\">' + opt.lang.link.url + '</label>' +\n '<input class=\"note-link-url note-input\" type=\"text\" value=\"http://\" />' +\n '</div>' +\n (!opt.disableLinkTarget\n ? '<div class=\"checkbox\">' +\n '<label>' + '<input type=\"checkbox\" checked> ' + opt.lang.link.openInNewWindow + '</label>' +\n '</div>' : ''\n );\n const footer = [\n '<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-link-btn disabled\" disabled>',\n opt.lang.link.insert,\n '</button>'\n ].join('');\n\n return dialog({\n className: 'link-dialog',\n title: opt.lang.link.insert,\n fade: opt.fade,\n body: body,\n footer: footer\n }).render();\n};\n\nconst popover = renderer.create([\n '<div class=\"note-popover bottom\">',\n ' <div class=\"note-popover-arrow\"/>',\n ' <div class=\"note-popover-content note-children-container\"/>',\n '</div>'\n].join(''), function($node, options) {\n const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n $node.addClass(direction).hide();\n\n if (options.hideArrow) {\n $node.find('.note-popover-arrow').hide();\n }\n});\n\nconst checkbox = renderer.create('<div class=\"checkbox\"></div>', function($node, options) {\n $node.html([\n ' <label' + (options.id ? ' for=\"' + options.id + '\"' : '') + '>',\n ' <input role=\"checkbox\" type=\"checkbox\"' + (options.id ? ' id=\"' + options.id + '\"' : ''),\n (options.checked ? ' checked' : ''),\n ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>',\n (options.text ? options.text : ''),\n '</label>'\n ].join(''));\n});\n\nconst icon = function(iconClassName, tagName) {\n tagName = tagName || 'i';\n return '<' + tagName + ' class=\"' + iconClassName + '\"/>';\n};\n\nconst ui = {\n editor: editor,\n toolbar: toolbar,\n editingArea: editingArea,\n codable: codable,\n editable: editable,\n statusbar: statusbar,\n airEditor: airEditor,\n airEditable: airEditable,\n buttonGroup: buttonGroup,\n button: button,\n dropdown: dropdown,\n dropdownCheck: dropdownCheck,\n dropdownButton: dropdownButton,\n dropdownButtonContents: dropdownButtonContents,\n dropdownCheckButton: dropdownCheckButton,\n paragraphDropdownButton: paragraphDropdownButton,\n tableDropdownButton: tableDropdownButton,\n colorDropdownButton: colorDropdownButton,\n palette: palette,\n dialog: dialog,\n videoDialog: videoDialog,\n imageDialog: imageDialog,\n linkDialog: linkDialog,\n popover: popover,\n checkbox: checkbox,\n icon: icon,\n\n toggleBtn: function($btn, isEnable) {\n $btn.toggleClass('disabled', !isEnable);\n $btn.attr('disabled', !isEnable);\n },\n\n toggleBtnActive: function($btn, isActive) {\n $btn.toggleClass('active', isActive);\n },\n\n check: function($dom, value) {\n $dom.find('.checked').removeClass('checked');\n $dom.find('[data-value=\"' + value + '\"]').addClass('checked');\n },\n\n onDialogShown: function($dialog, handler) {\n $dialog.one('note.modal.show', handler);\n },\n\n onDialogHidden: function($dialog, handler) {\n $dialog.one('note.modal.hide', handler);\n },\n\n showDialog: function($dialog) {\n $dialog.data('modal').show();\n },\n\n hideDialog: function($dialog) {\n $dialog.data('modal').hide();\n },\n\n /**\n * get popover content area\n *\n * @param $popover\n * @returns {*}\n */\n getPopoverContent: function($popover) {\n return $popover.find('.note-popover-content');\n },\n\n /**\n * get dialog's body area\n *\n * @param $dialog\n * @returns {*}\n */\n getDialogBody: function($dialog) {\n return $dialog.find('.note-modal-body');\n },\n\n createLayout: function($note, options) {\n const $editor = (options.airMode ? ui.airEditor([\n ui.editingArea([\n ui.airEditable()\n ])\n ]) : ui.editor([\n ui.toolbar(),\n ui.editingArea([\n ui.codable(),\n ui.editable()\n ]),\n ui.statusbar()\n ])).render();\n\n $editor.insertAfter($note);\n\n return {\n note: $note,\n editor: $editor,\n toolbar: $editor.find('.note-toolbar'),\n editingArea: $editor.find('.note-editing-area'),\n editable: $editor.find('.note-editable'),\n codable: $editor.find('.note-codable'),\n statusbar: $editor.find('.note-statusbar')\n };\n },\n\n removeLayout: function($note, layoutInfo) {\n $note.html(layoutInfo.editable.html());\n layoutInfo.editor.remove();\n $note.off('summernote'); // remove summernote custom event\n $note.show();\n }\n};\n\nexport default ui;\n","import $ from 'jquery';\n\n$.summernote = $.summernote || {\n lang: {}\n};\n\n$.extend($.summernote.lang, {\n 'en-US': {\n font: {\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n clear: 'Remove Font Style',\n height: 'Line Height',\n name: 'Font Family',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript',\n size: 'Font Size'\n },\n image: {\n image: 'Picture',\n insert: 'Insert Image',\n resizeFull: 'Resize Full',\n resizeHalf: 'Resize Half',\n resizeQuarter: 'Resize Quarter',\n floatLeft: 'Float Left',\n floatRight: 'Float Right',\n floatNone: 'Float None',\n shapeRounded: 'Shape: Rounded',\n shapeCircle: 'Shape: Circle',\n shapeThumbnail: 'Shape: Thumbnail',\n shapeNone: 'Shape: None',\n dragImageHere: 'Drag image or text here',\n dropImage: 'Drop image or Text',\n selectFromFiles: 'Select from files',\n maximumFileSize: 'Maximum file size',\n maximumFileSizeError: 'Maximum file size exceeded.',\n url: 'Image URL',\n remove: 'Remove Image',\n original: 'Original'\n },\n video: {\n video: 'Video',\n videoLink: 'Video Link',\n insert: 'Insert Video',\n url: 'Video URL',\n providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n },\n link: {\n link: 'Link',\n insert: 'Insert Link',\n unlink: 'Unlink',\n edit: 'Edit',\n textToDisplay: 'Text to display',\n url: 'To what URL should this link go?',\n openInNewWindow: 'Open in new window'\n },\n table: {\n table: 'Table',\n addRowAbove: 'Add row above',\n addRowBelow: 'Add row below',\n addColLeft: 'Add column left',\n addColRight: 'Add column right',\n delRow: 'Delete row',\n delCol: 'Delete column',\n delTable: 'Delete table'\n },\n hr: {\n insert: 'Insert Horizontal Rule'\n },\n style: {\n style: 'Style',\n p: 'Normal',\n blockquote: 'Quote',\n pre: 'Code',\n h1: 'Header 1',\n h2: 'Header 2',\n h3: 'Header 3',\n h4: 'Header 4',\n h5: 'Header 5',\n h6: 'Header 6'\n },\n lists: {\n unordered: 'Unordered list',\n ordered: 'Ordered list'\n },\n options: {\n help: 'Help',\n fullscreen: 'Full Screen',\n codeview: 'Code View'\n },\n paragraph: {\n paragraph: 'Paragraph',\n outdent: 'Outdent',\n indent: 'Indent',\n left: 'Align left',\n center: 'Align center',\n right: 'Align right',\n justify: 'Justify full'\n },\n color: {\n recent: 'Recent Color',\n more: 'More Color',\n background: 'Background Color',\n foreground: 'Foreground Color',\n transparent: 'Transparent',\n setTransparent: 'Set transparent',\n reset: 'Reset',\n resetToDefault: 'Reset to default'\n },\n shortcut: {\n shortcuts: 'Keyboard shortcuts',\n close: 'Close',\n textFormatting: 'Text formatting',\n action: 'Action',\n paragraphFormatting: 'Paragraph formatting',\n documentStyle: 'Document Style',\n extraKeys: 'Extra keys'\n },\n help: {\n 'insertParagraph': 'Insert Paragraph',\n 'undo': 'Undoes the last command',\n 'redo': 'Redoes the last command',\n 'tab': 'Tab',\n 'untab': 'Untab',\n 'bold': 'Set a bold style',\n 'italic': 'Set a italic style',\n 'underline': 'Set a underline style',\n 'strikethrough': 'Set a strikethrough style',\n 'removeFormat': 'Clean a style',\n 'justifyLeft': 'Set left align',\n 'justifyCenter': 'Set center align',\n 'justifyRight': 'Set right align',\n 'justifyFull': 'Set full align',\n 'insertUnorderedList': 'Toggle unordered list',\n 'insertOrderedList': 'Toggle ordered list',\n 'outdent': 'Outdent on current paragraph',\n 'indent': 'Indent on current paragraph',\n 'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n 'formatH1': 'Change current block\\'s format as H1',\n 'formatH2': 'Change current block\\'s format as H2',\n 'formatH3': 'Change current block\\'s format as H3',\n 'formatH4': 'Change current block\\'s format as H4',\n 'formatH5': 'Change current block\\'s format as H5',\n 'formatH6': 'Change current block\\'s format as H6',\n 'insertHorizontalRule': 'Insert horizontal rule',\n 'linkDialog.show': 'Show Link Dialog'\n },\n history: {\n undo: 'Undo',\n redo: 'Redo'\n },\n specialChar: {\n specialChar: 'SPECIAL CHARACTERS',\n select: 'Select Special characters'\n }\n }\n});\n","import $ from 'jquery';\nconst isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nfunction isFontInstalled(fontName) {\n const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n const $tester = $('<div>').css({\n position: 'absolute',\n left: '-9999px',\n top: '-9999px',\n fontSize: '200px'\n }).text('mmmmmmmmmwwwwwww').appendTo(document.body);\n\n const originalWidth = $tester.css('fontFamily', testFontName).width();\n const width = $tester.css('fontFamily', fontName + ',' + testFontName).width();\n\n $tester.remove();\n\n return originalWidth !== width;\n}\n\nconst userAgent = navigator.userAgent;\nconst isMSIE = /MSIE|Trident/i.test(userAgent);\nlet browserVersion;\nif (isMSIE) {\n let matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n if (matches) {\n browserVersion = parseFloat(matches[1]);\n }\n matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n if (matches) {\n browserVersion = parseFloat(matches[1]);\n }\n}\n\nconst isEdge = /Edge\\/\\d+/.test(userAgent);\n\nlet hasCodeMirror = !!window.CodeMirror;\nif (!hasCodeMirror && isSupportAmd) {\n // Webpack\n if (typeof __webpack_require__ === 'function') { // eslint-disable-line\n try {\n // If CodeMirror can't be resolved, `require.resolve` will throw an\n // exception and `hasCodeMirror` won't be set to `true`.\n require.resolve('codemirror');\n hasCodeMirror = true;\n } catch (e) {\n // do nothing\n }\n } else if (typeof require !== 'undefined') {\n // Browserify\n if (typeof require.resolve !== 'undefined') {\n try {\n // If CodeMirror can't be resolved, `require.resolve` will throw an\n // exception and `hasCodeMirror` won't be set to `true`.\n require.resolve('codemirror');\n hasCodeMirror = true;\n } catch (e) {\n // do nothing\n }\n // Almond/Require\n } else if (typeof require.specified !== 'undefined') {\n hasCodeMirror = require.specified('codemirror');\n }\n }\n}\n\nconst isSupportTouch =\n (('ontouchstart' in window) ||\n (navigator.MaxTouchPoints > 0) ||\n (navigator.msMaxTouchPoints > 0));\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nconst inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\nexport default {\n isMac: navigator.appVersion.indexOf('Mac') > -1,\n isMSIE,\n isEdge,\n isFF: !isEdge && /firefox/i.test(userAgent),\n isPhantom: /PhantomJS/i.test(userAgent),\n isWebkit: !isEdge && /webkit/i.test(userAgent),\n isChrome: !isEdge && /chrome/i.test(userAgent),\n isSafari: !isEdge && /safari/i.test(userAgent),\n browserVersion,\n jqueryVersion: parseFloat($.fn.jquery),\n isSupportAmd,\n isSupportTouch,\n hasCodeMirror,\n isFontInstalled,\n isW3CRangeSupport: !!document.createRange,\n inputEventName\n};\n","/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n return function(itemB) {\n return itemA === itemB;\n };\n}\n\nfunction eq2(itemA, itemB) {\n return itemA === itemB;\n}\n\nfunction peq2(propName) {\n return function(itemA, itemB) {\n return itemA[propName] === itemB[propName];\n };\n}\n\nfunction ok() {\n return true;\n}\n\nfunction fail() {\n return false;\n}\n\nfunction not(f) {\n return () => {\n return !f.apply(f, arguments);\n };\n}\n\nfunction and(fA, fB) {\n return function(item) {\n return fA(item) && fB(item);\n };\n}\n\nfunction self(a) {\n return a;\n}\n\nfunction invoke(obj, method) {\n return () => {\n return obj[method].apply(obj, arguments);\n };\n}\n\nlet idCounter = 0;\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n const id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n const $document = $(document);\n return {\n top: rect.top + $document.scrollTop(),\n left: rect.left + $document.scrollLeft(),\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n const inverted = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n inverted[obj[key]] = key;\n }\n }\n return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n prefix = prefix || '';\n return prefix + namespace.split('.').map(function(name) {\n return name.substring(0, 1).toUpperCase() + name.substring(1);\n }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n let timeout;\n return () => {\n const context = this;\n const args = arguments;\n const later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\n\nexport default {\n eq,\n eq2,\n peq2,\n ok,\n fail,\n self,\n not,\n and,\n invoke,\n uniqueId,\n rect2bnd,\n invertObject,\n namespaceToCamel,\n debounce\n};\n","import $ from 'jquery';\nimport func from './func';\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n for (let idx = 0, len = array.length; idx < len; idx++) {\n const item = array[idx];\n if (pred(item)) {\n return item;\n }\n }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction all(array, pred) {\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (!pred(array[idx])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * returns index of item\n */\nfunction indexOf(array, item) {\n return $.inArray(item, array);\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n return indexOf(array, item) !== -1;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n fn = fn || func.self;\n return array.reduce(function(memo, v) {\n return memo + fn(v);\n }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n const result = [];\n const length = collection.length;\n let idx = -1;\n while (++idx < length) {\n result[idx] = collection[idx];\n }\n return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n if (!array.length) { return []; }\n const aTail = tail(array);\n return aTail.reduce(function(memo, v) {\n const aLast = last(memo);\n if (fn(last(aLast), v)) {\n aLast[aLast.length] = v;\n } else {\n memo[memo.length] = [v];\n }\n return memo;\n }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n const aResult = [];\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (array[idx]) { aResult.push(array[idx]); }\n }\n return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n const results = [];\n\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (!contains(results, array[idx])) {\n results.push(array[idx]);\n }\n }\n\n return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n const idx = indexOf(array, item);\n if (idx === -1) { return null; }\n\n return array[idx + 1];\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n const idx = indexOf(array, item);\n if (idx === -1) { return null; }\n\n return array[idx - 1];\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\nexport default {\n head,\n last,\n initial,\n tail,\n prev,\n next,\n find,\n contains,\n all,\n sum,\n from,\n isEmpty,\n clusterBy,\n compact,\n unique\n};\n","import lists from './lists';\nimport func from './func';\n\nconst KEY_MAP = {\n 'BACKSPACE': 8,\n 'TAB': 9,\n 'ENTER': 13,\n 'SPACE': 32,\n 'DELETE': 46,\n\n // Arrow\n 'LEFT': 37,\n 'UP': 38,\n 'RIGHT': 39,\n 'DOWN': 40,\n\n // Number: 0-9\n 'NUM0': 48,\n 'NUM1': 49,\n 'NUM2': 50,\n 'NUM3': 51,\n 'NUM4': 52,\n 'NUM5': 53,\n 'NUM6': 54,\n 'NUM7': 55,\n 'NUM8': 56,\n\n // Alphabet: a-z\n 'B': 66,\n 'E': 69,\n 'I': 73,\n 'J': 74,\n 'K': 75,\n 'L': 76,\n 'R': 82,\n 'S': 83,\n 'U': 85,\n 'V': 86,\n 'Y': 89,\n 'Z': 90,\n\n 'SLASH': 191,\n 'LEFTBRACKET': 219,\n 'BACKSLASH': 220,\n 'RIGHTBRACKET': 221\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\nexport default {\n /**\n * @method isEdit\n *\n * @param {Number} keyCode\n * @return {Boolean}\n */\n isEdit: (keyCode) => {\n return lists.contains([\n KEY_MAP.BACKSPACE,\n KEY_MAP.TAB,\n KEY_MAP.ENTER,\n KEY_MAP.SPACE,\n KEY_MAP.DELETE\n ], keyCode);\n },\n /**\n * @method isMove\n *\n * @param {Number} keyCode\n * @return {Boolean}\n */\n isMove: (keyCode) => {\n return lists.contains([\n KEY_MAP.LEFT,\n KEY_MAP.UP,\n KEY_MAP.RIGHT,\n KEY_MAP.DOWN\n ], keyCode);\n },\n /**\n * @property {Object} nameFromCode\n * @property {String} nameFromCode.8 \"BACKSPACE\"\n */\n nameFromCode: func.invertObject(KEY_MAP),\n code: KEY_MAP\n};\n","import $ from 'jquery';\nimport func from './func';\nimport lists from './lists';\nimport env from './env';\n\nconst NBSP_CHAR = String.fromCharCode(160);\nconst ZERO_WIDTH_NBSP_CHAR = '\\ufeff';\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n return node && $(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n return node && $(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n nodeName = nodeName.toUpperCase();\n return function(node) {\n return node && node.nodeName.toUpperCase() === nodeName;\n };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n if (isEditable(node)) {\n return false;\n }\n\n // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nconst isPre = makePredByNodeName('PRE');\n\nconst isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n return isPara(node) && !isLi(node);\n}\n\nconst isTable = makePredByNodeName('TABLE');\n\nconst isData = makePredByNodeName('DATA');\n\nfunction isInline(node) {\n return !isBodyContainer(node) &&\n !isList(node) &&\n !isHr(node) &&\n !isPara(node) &&\n !isTable(node) &&\n !isBlockquote(node) &&\n !isData(node);\n}\n\nfunction isList(node) {\n return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nconst isHr = makePredByNodeName('HR');\n\nfunction isCell(node) {\n return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nconst isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n return isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nconst isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n return isInline(node) && !!ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n return isInline(node) && !ancestor(node, isPara);\n}\n\nconst isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n return nodeA.nextSibling === nodeB ||\n nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n pred = pred || func.ok;\n\n const siblings = [];\n if (node.previousSibling && pred(node.previousSibling)) {\n siblings.push(node.previousSibling);\n }\n siblings.push(node);\n if (node.nextSibling && pred(node.nextSibling)) {\n siblings.push(node.nextSibling);\n }\n return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with \n * - [workaround] IE11 and other browser works with bogus br\n */\nconst blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n if (isText(node)) {\n return node.nodeValue.length;\n }\n\n if (node) {\n return node.childNodes.length;\n }\n\n return 0;\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEmpty(node) {\n const len = nodeLength(node);\n\n if (len === 0) {\n return true;\n } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n // ex) <p><br></p>, <span><br></span>\n return true;\n } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n // ex) <p></p>, <span></span>\n return true;\n }\n\n return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n if (!isVoid(node) && !nodeLength(node)) {\n node.innerHTML = blankHTML;\n }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n while (node) {\n if (pred(node)) { return node; }\n if (isEditable(node)) { break; }\n\n node = node.parentNode;\n }\n return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n node = node.parentNode;\n\n while (node) {\n if (nodeLength(node) !== 1) { break; }\n if (pred(node)) { return node; }\n if (isEditable(node)) { break; }\n\n node = node.parentNode;\n }\n return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n pred = pred || func.fail;\n\n const ancestors = [];\n ancestor(node, function(el) {\n if (!isEditable(el)) {\n ancestors.push(el);\n }\n\n return pred(el);\n });\n return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n const ancestors = listAncestor(node);\n return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n const ancestors = listAncestor(nodeA);\n for (let n = nodeB; n; n = n.parentNode) {\n if ($.inArray(n, ancestors) > -1) { return n; }\n }\n return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n pred = pred || func.fail;\n\n const nodes = [];\n while (node) {\n if (pred(node)) { break; }\n nodes.push(node);\n node = node.previousSibling;\n }\n return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n pred = pred || func.fail;\n\n const nodes = [];\n while (node) {\n if (pred(node)) { break; }\n nodes.push(node);\n node = node.nextSibling;\n }\n return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n const descendants = [];\n pred = pred || func.ok;\n\n // start DFS(depth first search) with node\n (function fnWalk(current) {\n if (node !== current && pred(current)) {\n descendants.push(current);\n }\n for (let idx = 0, len = current.childNodes.length; idx < len; idx++) {\n fnWalk(current.childNodes[idx]);\n }\n })(node);\n\n return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n const parent = node.parentNode;\n const wrapper = $('<' + wrapperName + '>')[0];\n\n parent.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n const next = preceding.nextSibling;\n let parent = preceding.parentNode;\n if (next) {\n parent.insertBefore(node, next);\n } else {\n parent.appendChild(node);\n }\n return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild) {\n $.each(aChild, function(idx, child) {\n node.appendChild(child);\n });\n return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n while (node && node !== ancestor) {\n if (position(node) !== 0) {\n return false;\n }\n node = node.parentNode;\n }\n\n return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n if (!ancestor) {\n return false;\n }\n while (node && node !== ancestor) {\n if (position(node) !== nodeLength(node.parentNode) - 1) {\n return false;\n }\n node = node.parentNode;\n }\n\n return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n let offset = 0;\n while ((node = node.previousSibling)) {\n offset += 1;\n }\n return offset;\n}\n\nfunction hasChildren(node) {\n return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n let node;\n let offset;\n\n if (point.offset === 0) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node);\n } else if (hasChildren(point.node)) {\n node = point.node.childNodes[point.offset - 1];\n offset = nodeLength(node);\n } else {\n node = point.node;\n offset = isSkipInnerOffset ? 0 : point.offset - 1;\n }\n\n return {\n node: node,\n offset: offset\n };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n let node, offset;\n\n if (nodeLength(point.node) === point.offset) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node) + 1;\n } else if (hasChildren(point.node)) {\n node = point.node.childNodes[point.offset];\n offset = 0;\n } else {\n node = point.node;\n offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n }\n\n return {\n node: node,\n offset: offset\n };\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {\n return true;\n }\n\n const leftNode = point.node.childNodes[point.offset - 1];\n const rightNode = point.node.childNodes[point.offset];\n if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n while (point) {\n if (pred(point)) {\n return point;\n }\n\n point = prevPoint(point);\n }\n\n return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n while (point) {\n if (pred(point)) {\n return point;\n }\n\n point = nextPoint(point);\n }\n\n return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n if (!isText(point.node)) {\n return false;\n }\n\n const ch = point.node.nodeValue.charAt(point.offset - 1);\n return ch && (ch !== ' ' && ch !== NBSP_CHAR);\n}\n\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n let point = startPoint;\n\n while (point) {\n handler(point);\n\n if (isSamePoint(point, endPoint)) {\n break;\n }\n\n const isSkipOffset = isSkipInnerOffset &&\n startPoint.node !== point.node &&\n endPoint.node !== point.node;\n point = nextPoint(point, isSkipOffset);\n }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n const ancestors = listAncestor(node, func.eq(ancestor));\n return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n let current = ancestor;\n for (let i = 0, len = offsets.length; i < len; i++) {\n if (current.childNodes.length <= offsets[i]) {\n current = current.childNodes[current.childNodes.length - 1];\n } else {\n current = current.childNodes[offsets[i]];\n }\n }\n return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n const isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n\n // edge case\n if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n if (isLeftEdgePoint(point)) {\n return point.node;\n } else if (isRightEdgePoint(point)) {\n return point.node.nextSibling;\n }\n }\n\n // split #text\n if (isText(point.node)) {\n return point.node.splitText(point.offset);\n } else {\n const childNode = point.node.childNodes[point.offset];\n const clone = insertAfter(point.node.cloneNode(false), point.node);\n appendChildNodes(clone, listNext(childNode));\n\n if (!isSkipPaddingBlankHTML) {\n paddingBlankHTML(point.node);\n paddingBlankHTML(clone);\n }\n\n return clone;\n }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n // ex) [#text, <span>, <p>]\n const ancestors = listAncestor(point.node, func.eq(root));\n\n if (!ancestors.length) {\n return null;\n } else if (ancestors.length === 1) {\n return splitNode(point, options);\n }\n\n return ancestors.reduce(function(node, parent) {\n if (node === point.node) {\n node = splitNode(point, options);\n }\n\n return splitNode({\n node: parent,\n offset: node ? position(node) : nodeLength(parent)\n }, options);\n });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n // find splitRoot, container\n // - inline: splitRoot is a child of paragraph\n // - block: splitRoot is a child of bodyContainer\n const pred = isInline ? isPara : isBodyContainer;\n const ancestors = listAncestor(point.node, pred);\n const topAncestor = lists.last(ancestors) || point.node;\n\n let splitRoot, container;\n if (pred(topAncestor)) {\n splitRoot = ancestors[ancestors.length - 2];\n container = topAncestor;\n } else {\n splitRoot = topAncestor;\n container = splitRoot.parentNode;\n }\n\n // if splitRoot is exists, split with splitTree\n let pivot = splitRoot && splitTree(splitRoot, point, {\n isSkipPaddingBlankHTML: isInline,\n isNotSplitEdgePoint: isInline\n });\n\n // if container is point.node, find pivot with point.offset\n if (!pivot && container === point.node) {\n pivot = point.node.childNodes[point.offset];\n }\n\n return {\n rightNode: pivot,\n container: container\n };\n}\n\nfunction create(nodeName) {\n return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n if (!node || !node.parentNode) { return; }\n if (node.removeNode) { return node.removeNode(isRemoveChild); }\n\n const parent = node.parentNode;\n if (!isRemoveChild) {\n const nodes = [];\n for (let i = 0, len = node.childNodes.length; i < len; i++) {\n nodes.push(node.childNodes[i]);\n }\n\n for (let i = 0, len = nodes.length; i < len; i++) {\n parent.insertBefore(nodes[i], node);\n }\n }\n\n parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n while (node) {\n if (isEditable(node) || !pred(node)) {\n break;\n }\n\n const parent = node.parentNode;\n remove(node);\n node = parent;\n }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n return node;\n }\n\n const newNode = create(nodeName);\n\n if (node.style.cssText) {\n newNode.style.cssText = node.style.cssText;\n }\n\n appendChildNodes(newNode, lists.from(node.childNodes));\n insertAfter(newNode, node);\n remove(node);\n\n return newNode;\n}\n\nconst isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n const val = isTextarea($node[0]) ? $node.val() : $node.html();\n if (stripLinebreaks) {\n return val.replace(/[\\n\\r]/g, '');\n }\n return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n let markup = value($node);\n\n if (isNewlineOnBlock) {\n const regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n markup = markup.replace(regexTag, function(match, endSlash, name) {\n name = name.toUpperCase();\n const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&\n !!endSlash;\n const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n\n return match + ((isEndOfInlineContainer || isBlockNode) ? '\\n' : '');\n });\n markup = $.trim(markup);\n }\n\n return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n const $placeholder = $(placeholder);\n const pos = $placeholder.offset();\n const height = $placeholder.outerHeight(true); // include margin\n\n return {\n left: pos.left,\n top: pos.top + height\n };\n}\n\nfunction attachEvents($node, events) {\n Object.keys(events).forEach(function(key) {\n $node.on(key, events[key]);\n });\n}\n\nfunction detachEvents($node, events) {\n Object.keys(events).forEach(function(key) {\n $node.off(key, events[key]);\n });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\nexport default {\n /** @property {String} NBSP_CHAR */\n NBSP_CHAR,\n /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n ZERO_WIDTH_NBSP_CHAR,\n /** @property {String} blank */\n blank: blankHTML,\n /** @property {String} emptyPara */\n emptyPara: `<p>${blankHTML}</p>`,\n makePredByNodeName,\n isEditable,\n isControlSizing,\n isText,\n isElement,\n isVoid,\n isPara,\n isPurePara,\n isHeading,\n isInline,\n isBlock: func.not(isInline),\n isBodyInline,\n isBody,\n isParaInline,\n isPre,\n isList,\n isTable,\n isData,\n isCell,\n isBlockquote,\n isBodyContainer,\n isAnchor,\n isDiv: makePredByNodeName('DIV'),\n isLi,\n isBR: makePredByNodeName('BR'),\n isSpan: makePredByNodeName('SPAN'),\n isB: makePredByNodeName('B'),\n isU: makePredByNodeName('U'),\n isS: makePredByNodeName('S'),\n isI: makePredByNodeName('I'),\n isImg: makePredByNodeName('IMG'),\n isTextarea,\n isEmpty,\n isEmptyAnchor: func.and(isAnchor, isEmpty),\n isClosestSibling,\n withClosestSiblings,\n nodeLength,\n isLeftEdgePoint,\n isRightEdgePoint,\n isEdgePoint,\n isLeftEdgeOf,\n isRightEdgeOf,\n isLeftEdgePointOf,\n isRightEdgePointOf,\n prevPoint,\n nextPoint,\n isSamePoint,\n isVisiblePoint,\n prevPointUntil,\n nextPointUntil,\n isCharPoint,\n walkPoint,\n ancestor,\n singleChildAncestor,\n listAncestor,\n lastAncestor,\n listNext,\n listPrev,\n listDescendant,\n commonAncestor,\n wrap,\n insertAfter,\n appendChildNodes,\n position,\n hasChildren,\n makeOffsetPath,\n fromOffsetPath,\n splitTree,\n splitPoint,\n create,\n createText,\n remove,\n removeWhile,\n replace,\n html,\n value,\n posFromPlaceholder,\n attachEvents,\n detachEvents,\n isCustomStyleTag\n};\n","import $ from 'jquery';\nimport env from './env';\nimport func from './func';\nimport lists from './lists';\nimport dom from './dom';\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n let container = textRange.parentElement();\n let offset;\n\n const tester = document.body.createTextRange();\n let prevContainer;\n const childNodes = lists.from(container.childNodes);\n for (offset = 0; offset < childNodes.length; offset++) {\n if (dom.isText(childNodes[offset])) {\n continue;\n }\n tester.moveToElementText(childNodes[offset]);\n if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n break;\n }\n prevContainer = childNodes[offset];\n }\n\n if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n const textRangeStart = document.body.createTextRange();\n let curTextNode = null;\n textRangeStart.moveToElementText(prevContainer || container);\n textRangeStart.collapse(!prevContainer);\n curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n\n const pointTester = textRange.duplicate();\n pointTester.setEndPoint('StartToStart', textRangeStart);\n let textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n textCount -= curTextNode.nodeValue.length;\n curTextNode = curTextNode.nextSibling;\n }\n\n // [workaround] enforce IE to re-reference curTextNode, hack\n const dummy = curTextNode.nodeValue; // eslint-disable-line\n\n if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&\n textCount === curTextNode.nodeValue.length) {\n textCount -= curTextNode.nodeValue.length;\n curTextNode = curTextNode.nextSibling;\n }\n\n container = curTextNode;\n offset = textCount;\n }\n\n return {\n cont: container,\n offset: offset\n };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n const textRangeInfo = function(container, offset) {\n let node, isCollapseToStart;\n\n if (dom.isText(container)) {\n const prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n const prevContainer = lists.last(prevTextNodes).previousSibling;\n node = prevContainer || container.parentNode;\n offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n isCollapseToStart = !prevContainer;\n } else {\n node = container.childNodes[offset] || container;\n if (dom.isText(node)) {\n return textRangeInfo(node, 0);\n }\n\n offset = 0;\n isCollapseToStart = false;\n }\n\n return {\n node: node,\n collapseToStart: isCollapseToStart,\n offset: offset\n };\n };\n\n const textRange = document.body.createTextRange();\n const info = textRangeInfo(point.node, point.offset);\n\n textRange.moveToElementText(info.node);\n textRange.collapse(info.collapseToStart);\n textRange.moveStart('character', info.offset);\n return textRange;\n}\n\n/**\n * Wrapped Range\n *\n * @constructor\n * @param {Node} sc - start container\n * @param {Number} so - start offset\n * @param {Node} ec - end container\n * @param {Number} eo - end offset\n */\nclass WrappedRange {\n constructor(sc, so, ec, eo) {\n this.sc = sc;\n this.so = so;\n this.ec = ec;\n this.eo = eo;\n\n // isOnEditable: judge whether range is on editable or not\n this.isOnEditable = this.makeIsOn(dom.isEditable);\n // isOnList: judge whether range is on list node or not\n this.isOnList = this.makeIsOn(dom.isList);\n // isOnAnchor: judge whether range is on anchor node or not\n this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n // isOnCell: judge whether range is on cell node or not\n this.isOnCell = this.makeIsOn(dom.isCell);\n // isOnData: judge whether range is on data node or not\n this.isOnData = this.makeIsOn(dom.isData);\n }\n\n // nativeRange: get nativeRange from sc, so, ec, eo\n nativeRange() {\n if (env.isW3CRangeSupport) {\n const w3cRange = document.createRange();\n w3cRange.setStart(this.sc, this.so);\n w3cRange.setEnd(this.ec, this.eo);\n\n return w3cRange;\n } else {\n const textRange = pointToTextRange({\n node: this.sc,\n offset: this.so\n });\n\n textRange.setEndPoint('EndToEnd', pointToTextRange({\n node: this.ec,\n offset: this.eo\n }));\n\n return textRange;\n }\n }\n\n getPoints() {\n return {\n sc: this.sc,\n so: this.so,\n ec: this.ec,\n eo: this.eo\n };\n }\n\n getStartPoint() {\n return {\n node: this.sc,\n offset: this.so\n };\n }\n\n getEndPoint() {\n return {\n node: this.ec,\n offset: this.eo\n };\n }\n\n /**\n * select update visible range\n */\n select() {\n const nativeRng = this.nativeRange();\n if (env.isW3CRangeSupport) {\n const selection = document.getSelection();\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n selection.addRange(nativeRng);\n } else {\n nativeRng.select();\n }\n\n return this;\n }\n\n /**\n * Moves the scrollbar to start container(sc) of current range\n *\n * @return {WrappedRange}\n */\n scrollIntoView(container) {\n const height = $(container).height();\n if (container.scrollTop + height < this.sc.offsetTop) {\n container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n }\n\n return this;\n }\n\n /**\n * @return {WrappedRange}\n */\n normalize() {\n /**\n * @param {BoundaryPoint} point\n * @param {Boolean} isLeftToRight\n * @return {BoundaryPoint}\n */\n const getVisiblePoint = function(point, isLeftToRight) {\n if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) ||\n (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) ||\n (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) ||\n (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) {\n return point;\n }\n\n // point on block's edge\n const block = dom.ancestor(point.node, dom.isBlock);\n if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) ||\n ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) {\n // returns point already on visible point\n if (dom.isVisiblePoint(point)) {\n return point;\n }\n // reverse direction\n isLeftToRight = !isLeftToRight;\n }\n\n const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint)\n : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n return nextPoint || point;\n };\n\n const endPoint = getVisiblePoint(this.getEndPoint(), false);\n const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n\n return new WrappedRange(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n );\n }\n\n /**\n * returns matched nodes on range\n *\n * @param {Function} [pred] - predicate function\n * @param {Object} [options]\n * @param {Boolean} [options.includeAncestor]\n * @param {Boolean} [options.fullyContains]\n * @return {Node[]}\n */\n nodes(pred, options) {\n pred = pred || func.ok;\n\n const includeAncestor = options && options.includeAncestor;\n const fullyContains = options && options.fullyContains;\n\n // TODO compare points and sort\n const startPoint = this.getStartPoint();\n const endPoint = this.getEndPoint();\n\n const nodes = [];\n const leftEdgeNodes = [];\n\n dom.walkPoint(startPoint, endPoint, function(point) {\n if (dom.isEditable(point.node)) {\n return;\n }\n\n let node;\n if (fullyContains) {\n if (dom.isLeftEdgePoint(point)) {\n leftEdgeNodes.push(point.node);\n }\n if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n node = point.node;\n }\n } else if (includeAncestor) {\n node = dom.ancestor(point.node, pred);\n } else {\n node = point.node;\n }\n\n if (node && pred(node)) {\n nodes.push(node);\n }\n }, true);\n\n return lists.unique(nodes);\n }\n\n /**\n * returns commonAncestor of range\n * @return {Element} - commonAncestor\n */\n commonAncestor() {\n return dom.commonAncestor(this.sc, this.ec);\n }\n\n /**\n * returns expanded range by pred\n *\n * @param {Function} pred - predicate function\n * @return {WrappedRange}\n */\n expand(pred) {\n const startAncestor = dom.ancestor(this.sc, pred);\n const endAncestor = dom.ancestor(this.ec, pred);\n\n if (!startAncestor && !endAncestor) {\n return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n }\n\n const boundaryPoints = this.getPoints();\n\n if (startAncestor) {\n boundaryPoints.sc = startAncestor;\n boundaryPoints.so = 0;\n }\n\n if (endAncestor) {\n boundaryPoints.ec = endAncestor;\n boundaryPoints.eo = dom.nodeLength(endAncestor);\n }\n\n return new WrappedRange(\n boundaryPoints.sc,\n boundaryPoints.so,\n boundaryPoints.ec,\n boundaryPoints.eo\n );\n }\n\n /**\n * @param {Boolean} isCollapseToStart\n * @return {WrappedRange}\n */\n collapse(isCollapseToStart) {\n if (isCollapseToStart) {\n return new WrappedRange(this.sc, this.so, this.sc, this.so);\n } else {\n return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n }\n }\n\n /**\n * splitText on range\n */\n splitText() {\n const isSameContainer = this.sc === this.ec;\n const boundaryPoints = this.getPoints();\n\n if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n this.ec.splitText(this.eo);\n }\n\n if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n boundaryPoints.sc = this.sc.splitText(this.so);\n boundaryPoints.so = 0;\n\n if (isSameContainer) {\n boundaryPoints.ec = boundaryPoints.sc;\n boundaryPoints.eo = this.eo - this.so;\n }\n }\n\n return new WrappedRange(\n boundaryPoints.sc,\n boundaryPoints.so,\n boundaryPoints.ec,\n boundaryPoints.eo\n );\n }\n\n /**\n * delete contents on range\n * @return {WrappedRange}\n */\n deleteContents() {\n if (this.isCollapsed()) {\n return this;\n }\n\n const rng = this.splitText();\n const nodes = rng.nodes(null, {\n fullyContains: true\n });\n\n // find new cursor point\n const point = dom.prevPointUntil(rng.getStartPoint(), function(point) {\n return !lists.contains(nodes, point.node);\n });\n\n const emptyParents = [];\n $.each(nodes, function(idx, node) {\n // find empty parents\n const parent = node.parentNode;\n if (point.node !== parent && dom.nodeLength(parent) === 1) {\n emptyParents.push(parent);\n }\n dom.remove(node, false);\n });\n\n // remove empty parents\n $.each(emptyParents, function(idx, node) {\n dom.remove(node, false);\n });\n\n return new WrappedRange(\n point.node,\n point.offset,\n point.node,\n point.offset\n ).normalize();\n }\n\n /**\n * makeIsOn: return isOn(pred) function\n */\n makeIsOn(pred) {\n return function() {\n const ancestor = dom.ancestor(this.sc, pred);\n return !!ancestor && (ancestor === dom.ancestor(this.ec, pred));\n };\n }\n\n /**\n * @param {Function} pred\n * @return {Boolean}\n */\n isLeftEdgeOf(pred) {\n if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n return false;\n }\n\n const node = dom.ancestor(this.sc, pred);\n return node && dom.isLeftEdgeOf(this.sc, node);\n }\n\n /**\n * returns whether range was collapsed or not\n */\n isCollapsed() {\n return this.sc === this.ec && this.so === this.eo;\n }\n\n /**\n * wrap inline nodes which children of body with paragraph\n *\n * @return {WrappedRange}\n */\n wrapBodyInlineWithPara() {\n if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n this.sc.innerHTML = dom.emptyPara;\n return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n }\n\n /**\n * [workaround] firefox often create range on not visible point. so normalize here.\n * - firefox: |<p>text</p>|\n * - chrome: <p>|text|</p>\n */\n const rng = this.normalize();\n if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n return rng;\n }\n\n // find inline top ancestor\n let topAncestor;\n if (dom.isInline(rng.sc)) {\n const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n topAncestor = lists.last(ancestors);\n if (!dom.isInline(topAncestor)) {\n topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n }\n } else {\n topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n }\n\n // siblings not in paragraph\n let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n // wrap with paragraph\n if (inlineSiblings.length) {\n const para = dom.wrap(lists.head(inlineSiblings), 'p');\n dom.appendChildNodes(para, lists.tail(inlineSiblings));\n }\n\n return this.normalize();\n }\n\n /**\n * insert node at current cursor\n *\n * @param {Node} node\n * @return {Node}\n */\n insertNode(node) {\n const rng = this.wrapBodyInlineWithPara().deleteContents();\n const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n if (info.rightNode) {\n info.rightNode.parentNode.insertBefore(node, info.rightNode);\n } else {\n info.container.appendChild(node);\n }\n\n return node;\n }\n\n /**\n * insert html at current cursor\n */\n pasteHTML(markup) {\n const contentsContainer = $('<div></div>').html(markup)[0];\n const childNodes = lists.from(contentsContainer.childNodes);\n\n const rng = this.wrapBodyInlineWithPara().deleteContents();\n\n return childNodes.reverse().map(function(childNode) {\n return rng.insertNode(childNode);\n }).reverse();\n }\n\n /**\n * returns text in range\n *\n * @return {String}\n */\n toString() {\n const nativeRng = this.nativeRange();\n return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n }\n\n /**\n * returns range for word before cursor\n *\n * @param {Boolean} [findAfter] - find after cursor, default: false\n * @return {WrappedRange}\n */\n getWordRange(findAfter) {\n let endPoint = this.getEndPoint();\n\n if (!dom.isCharPoint(endPoint)) {\n return this;\n }\n\n const startPoint = dom.prevPointUntil(endPoint, function(point) {\n return !dom.isCharPoint(point);\n });\n\n if (findAfter) {\n endPoint = dom.nextPointUntil(endPoint, function(point) {\n return !dom.isCharPoint(point);\n });\n }\n\n return new WrappedRange(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n );\n }\n\n /**\n * create offsetPath bookmark\n *\n * @param {Node} editable\n */\n bookmark(editable) {\n return {\n s: {\n path: dom.makeOffsetPath(editable, this.sc),\n offset: this.so\n },\n e: {\n path: dom.makeOffsetPath(editable, this.ec),\n offset: this.eo\n }\n };\n }\n\n /**\n * create offsetPath bookmark base on paragraph\n *\n * @param {Node[]} paras\n */\n paraBookmark(paras) {\n return {\n s: {\n path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n offset: this.so\n },\n e: {\n path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n offset: this.eo\n }\n };\n }\n\n /**\n * getClientRects\n * @return {Rect[]}\n */\n getClientRects() {\n const nativeRng = this.nativeRange();\n return nativeRng.getClientRects();\n }\n}\n\n/**\n * Data structure\n * * BoundaryPoint: a point of dom tree\n * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\nexport default {\n /**\n * create Range Object From arguments or Browser Selection\n *\n * @param {Node} sc - start container\n * @param {Number} so - start offset\n * @param {Node} ec - end container\n * @param {Number} eo - end offset\n * @return {WrappedRange}\n */\n create: function(sc, so, ec, eo) {\n if (arguments.length === 4) {\n return new WrappedRange(sc, so, ec, eo);\n } else if (arguments.length === 2) { // collapsed\n ec = sc;\n eo = so;\n return new WrappedRange(sc, so, ec, eo);\n } else {\n let wrappedRange = this.createFromSelection();\n if (!wrappedRange && arguments.length === 1) {\n wrappedRange = this.createFromNode(arguments[0]);\n return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML);\n }\n return wrappedRange;\n }\n },\n\n createFromSelection: function() {\n let sc, so, ec, eo;\n if (env.isW3CRangeSupport) {\n const selection = document.getSelection();\n if (!selection || selection.rangeCount === 0) {\n return null;\n } else if (dom.isBody(selection.anchorNode)) {\n // Firefox: returns entire body as range on initialization.\n // We won't never need it.\n return null;\n }\n\n const nativeRng = selection.getRangeAt(0);\n sc = nativeRng.startContainer;\n so = nativeRng.startOffset;\n ec = nativeRng.endContainer;\n eo = nativeRng.endOffset;\n } else { // IE8: TextRange\n const textRange = document.selection.createRange();\n const textRangeEnd = textRange.duplicate();\n textRangeEnd.collapse(false);\n const textRangeStart = textRange;\n textRangeStart.collapse(true);\n\n let startPoint = textRangeToPoint(textRangeStart, true);\n let endPoint = textRangeToPoint(textRangeEnd, false);\n\n // same visible point case: range was collapsed.\n if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&\n dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&\n endPoint.node.nextSibling === startPoint.node) {\n startPoint = endPoint;\n }\n\n sc = startPoint.cont;\n so = startPoint.offset;\n ec = endPoint.cont;\n eo = endPoint.offset;\n }\n\n return new WrappedRange(sc, so, ec, eo);\n },\n\n /**\n * @method\n *\n * create WrappedRange from node\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNode: function(node) {\n let sc = node;\n let so = 0;\n let ec = node;\n let eo = dom.nodeLength(ec);\n\n // browsers can't target a picture or void node\n if (dom.isVoid(sc)) {\n so = dom.listPrev(sc).length - 1;\n sc = sc.parentNode;\n }\n if (dom.isBR(ec)) {\n eo = dom.listPrev(ec).length - 1;\n ec = ec.parentNode;\n } else if (dom.isVoid(ec)) {\n eo = dom.listPrev(ec).length;\n ec = ec.parentNode;\n }\n\n return this.create(sc, so, ec, eo);\n },\n\n /**\n * create WrappedRange from node after position\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNodeBefore: function(node) {\n return this.createFromNode(node).collapse(true);\n },\n\n /**\n * create WrappedRange from node after position\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNodeAfter: function(node) {\n return this.createFromNode(node).collapse();\n },\n\n /**\n * @method\n *\n * create WrappedRange from bookmark\n *\n * @param {Node} editable\n * @param {Object} bookmark\n * @return {WrappedRange}\n */\n createFromBookmark: function(editable, bookmark) {\n const sc = dom.fromOffsetPath(editable, bookmark.s.path);\n const so = bookmark.s.offset;\n const ec = dom.fromOffsetPath(editable, bookmark.e.path);\n const eo = bookmark.e.offset;\n return new WrappedRange(sc, so, ec, eo);\n },\n\n /**\n * @method\n *\n * create WrappedRange from paraBookmark\n *\n * @param {Object} bookmark\n * @param {Node[]} paras\n * @return {WrappedRange}\n */\n createFromParaBookmark: function(bookmark, paras) {\n const so = bookmark.s.offset;\n const eo = bookmark.e.offset;\n const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n\n return new WrappedRange(sc, so, ec, eo);\n }\n};\n","import $ from 'jquery';\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nexport function readFileAsDataURL(file) {\n return $.Deferred((deferred) => {\n $.extend(new FileReader(), {\n onload: (e) => {\n const dataURL = e.target.result;\n deferred.resolve(dataURL);\n },\n onerror: (err) => {\n deferred.reject(err);\n }\n }).readAsDataURL(file);\n }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nexport function createImage(url) {\n return $.Deferred((deferred) => {\n const $img = $('<img>');\n\n $img.one('load', () => {\n $img.off('error abort');\n deferred.resolve($img);\n }).one('error abort', () => {\n $img.off('load').detach();\n deferred.reject($img);\n }).css({\n display: 'none'\n }).appendTo(document.body).attr('src', url);\n }).promise();\n}\n","import range from '../core/range';\n\nexport default class History {\n constructor($editable) {\n this.stack = [];\n this.stackOffset = -1;\n this.$editable = $editable;\n this.editable = $editable[0];\n }\n\n makeSnapshot() {\n const rng = range.create(this.editable);\n const emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}};\n\n return {\n contents: this.$editable.html(),\n bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark)\n };\n }\n\n applySnapshot(snapshot) {\n if (snapshot.contents !== null) {\n this.$editable.html(snapshot.contents);\n }\n if (snapshot.bookmark !== null) {\n range.createFromBookmark(this.editable, snapshot.bookmark).select();\n }\n }\n\n /**\n * @method rewind\n * Rewinds the history stack back to the first snapshot taken.\n * Leaves the stack intact, so that \"Redo\" can still be used.\n */\n rewind() {\n // Create snap shot if not yet recorded\n if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n this.recordUndo();\n }\n\n // Return to the first available snapshot.\n this.stackOffset = 0;\n\n // Apply that snapshot.\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n\n /**\n * @method reset\n * Resets the history stack completely; reverting to an empty editor.\n */\n reset() {\n // Clear the stack.\n this.stack = [];\n\n // Restore stackOffset to its original value.\n this.stackOffset = -1;\n\n // Clear the editable area.\n this.$editable.html('');\n\n // Record our first snapshot (of nothing).\n this.recordUndo();\n }\n\n /**\n * undo\n */\n undo() {\n // Create snap shot if not yet recorded\n if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n this.recordUndo();\n }\n\n if (this.stackOffset > 0) {\n this.stackOffset--;\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n }\n\n /**\n * redo\n */\n redo() {\n if (this.stack.length - 1 > this.stackOffset) {\n this.stackOffset++;\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n }\n\n /**\n * recorded undo\n */\n recordUndo() {\n this.stackOffset++;\n\n // Wash out stack after stackOffset\n if (this.stack.length > this.stackOffset) {\n this.stack = this.stack.slice(0, this.stackOffset);\n }\n\n // Create new snapshot and push it to the end\n this.stack.push(this.makeSnapshot());\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class Style {\n /**\n * @method jQueryCSS\n *\n * [workaround] for old jQuery\n * passing an array of style properties to .css()\n * will result in an object of property-value pairs.\n * (compability with version < 1.9)\n *\n * @private\n * @param {jQuery} $obj\n * @param {Array} propertyNames - An array of one or more CSS properties.\n * @return {Object}\n */\n jQueryCSS($obj, propertyNames) {\n if (env.jqueryVersion < 1.9) {\n const result = {};\n $.each(propertyNames, (idx, propertyName) => {\n result[propertyName] = $obj.css(propertyName);\n });\n return result;\n }\n return $obj.css(propertyNames);\n }\n\n /**\n * returns style object from node\n *\n * @param {jQuery} $node\n * @return {Object}\n */\n fromNode($node) {\n const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n const styleInfo = this.jQueryCSS($node, properties) || {};\n styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10);\n return styleInfo;\n }\n\n /**\n * paragraph level style\n *\n * @param {WrappedRange} rng\n * @param {Object} styleInfo\n */\n stylePara(rng, styleInfo) {\n $.each(rng.nodes(dom.isPara, {\n includeAncestor: true\n }), (idx, para) => {\n $(para).css(styleInfo);\n });\n }\n\n /**\n * insert and returns styleNodes on range.\n *\n * @param {WrappedRange} rng\n * @param {Object} [options] - options for styleNodes\n * @param {String} [options.nodeName] - default: `SPAN`\n * @param {Boolean} [options.expandClosestSibling] - default: `false`\n * @param {Boolean} [options.onlyPartialContains] - default: `false`\n * @return {Node[]}\n */\n styleNodes(rng, options) {\n rng = rng.splitText();\n\n const nodeName = (options && options.nodeName) || 'SPAN';\n const expandClosestSibling = !!(options && options.expandClosestSibling);\n const onlyPartialContains = !!(options && options.onlyPartialContains);\n\n if (rng.isCollapsed()) {\n return [rng.insertNode(dom.create(nodeName))];\n }\n\n let pred = dom.makePredByNodeName(nodeName);\n const nodes = rng.nodes(dom.isText, {\n fullyContains: true\n }).map((text) => {\n return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n });\n\n if (expandClosestSibling) {\n if (onlyPartialContains) {\n const nodesInRange = rng.nodes();\n // compose with partial contains predication\n pred = func.and(pred, (node) => {\n return lists.contains(nodesInRange, node);\n });\n }\n\n return nodes.map((node) => {\n const siblings = dom.withClosestSiblings(node, pred);\n const head = lists.head(siblings);\n const tails = lists.tail(siblings);\n $.each(tails, (idx, elem) => {\n dom.appendChildNodes(head, elem.childNodes);\n dom.remove(elem);\n });\n return lists.head(siblings);\n });\n } else {\n return nodes;\n }\n }\n\n /**\n * get current style on cursor\n *\n * @param {WrappedRange} rng\n * @return {Object} - object contains style properties.\n */\n current(rng) {\n const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n let styleInfo = this.fromNode($cont);\n\n // document.queryCommandState for toggle state\n // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n try {\n styleInfo = $.extend(styleInfo, {\n 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n });\n } catch (e) {}\n\n // list-style-type to list-style(unordered, ordered)\n if (!rng.isOnList()) {\n styleInfo['list-style'] = 'none';\n } else {\n const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n const isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1;\n styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n }\n\n const para = dom.ancestor(rng.sc, dom.isPara);\n if (para && para.style['line-height']) {\n styleInfo['line-height'] = para.style.lineHeight;\n } else {\n const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n styleInfo['line-height'] = lineHeight.toFixed(1);\n }\n\n styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n styleInfo.range = rng;\n\n return styleInfo;\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport func from '../core/func';\nimport dom from '../core/dom';\nimport range from '../core/range';\n\nexport default class Bullet {\n /**\n * toggle ordered list\n */\n insertOrderedList(editable) {\n this.toggleList('OL', editable);\n }\n\n /**\n * toggle unordered list\n */\n insertUnorderedList(editable) {\n this.toggleList('UL', editable);\n }\n\n /**\n * indent\n */\n indent(editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n if (dom.isLi(head)) {\n this.wrapList(paras, head.parentNode.nodeName);\n } else {\n $.each(paras, (idx, para) => {\n $(para).css('marginLeft', (idx, val) => {\n return (parseInt(val, 10) || 0) + 25;\n });\n });\n }\n });\n\n rng.select();\n }\n\n /**\n * outdent\n */\n outdent(editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n if (dom.isLi(head)) {\n this.releaseList([paras]);\n } else {\n $.each(paras, (idx, para) => {\n $(para).css('marginLeft', (idx, val) => {\n val = (parseInt(val, 10) || 0);\n return val > 25 ? val - 25 : '';\n });\n });\n }\n });\n\n rng.select();\n }\n\n /**\n * toggle list\n *\n * @param {String} listName - OL or UL\n */\n toggleList(listName, editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n let paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const bookmark = rng.paraBookmark(paras);\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n // paragraph to list\n if (lists.find(paras, dom.isPurePara)) {\n let wrappedParas = [];\n $.each(clustereds, (idx, paras) => {\n wrappedParas = wrappedParas.concat(this.wrapList(paras, listName));\n });\n paras = wrappedParas;\n // list to paragraph or change list style\n } else {\n const diffLists = rng.nodes(dom.isList, {\n includeAncestor: true\n }).filter((listNode) => {\n return !$.nodeName(listNode, listName);\n });\n\n if (diffLists.length) {\n $.each(diffLists, (idx, listNode) => {\n dom.replace(listNode, listName);\n });\n } else {\n paras = this.releaseList(clustereds, true);\n }\n }\n\n range.createFromParaBookmark(bookmark, paras).select();\n }\n\n /**\n * @param {Node[]} paras\n * @param {String} listName\n * @return {Node[]}\n */\n wrapList(paras, listName) {\n const head = lists.head(paras);\n const last = lists.last(paras);\n\n const prevList = dom.isList(head.previousSibling) && head.previousSibling;\n const nextList = dom.isList(last.nextSibling) && last.nextSibling;\n\n const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n // P to LI\n paras = paras.map((para) => {\n return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n });\n\n // append to list(<ul>, <ol>)\n dom.appendChildNodes(listNode, paras);\n\n if (nextList) {\n dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n dom.remove(nextList);\n }\n\n return paras;\n }\n\n /**\n * @method releaseList\n *\n * @param {Array[]} clustereds\n * @param {Boolean} isEscapseToBody\n * @return {Node[]}\n */\n releaseList(clustereds, isEscapseToBody) {\n let releasedParas = [];\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n const last = lists.last(paras);\n\n const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n const lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n node: last.parentNode,\n offset: dom.position(last) + 1\n }, {\n isSkipPaddingBlankHTML: true\n }) : null;\n\n const middleList = dom.splitTree(headList, {\n node: head.parentNode,\n offset: dom.position(head)\n }, {\n isSkipPaddingBlankHTML: true\n });\n\n paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi)\n : lists.from(middleList.childNodes).filter(dom.isLi);\n\n // LI to P\n if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n paras = paras.map((para) => {\n return dom.replace(para, 'P');\n });\n }\n\n $.each(lists.from(paras).reverse(), (idx, para) => {\n dom.insertAfter(para, headList);\n });\n\n // remove empty lists\n const rootLists = lists.compact([headList, middleList, lastList]);\n $.each(rootLists, (idx, rootList) => {\n const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n $.each(listNodes.reverse(), (idx, listNode) => {\n if (!dom.nodeLength(listNode)) {\n dom.remove(listNode, true);\n }\n });\n });\n\n releasedParas = releasedParas.concat(paras);\n });\n\n return releasedParas;\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport Bullet from '../editing/Bullet';\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nexport default class Typing {\n constructor() {\n // a Bullet instance to toggle lists off\n this.bullet = new Bullet();\n }\n\n /**\n * insert tab\n *\n * @param {WrappedRange} rng\n * @param {Number} tabsize\n */\n insertTab(rng, tabsize) {\n const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n rng = rng.deleteContents();\n rng.insertNode(tab, true);\n\n rng = range.create(tab, tabsize);\n rng.select();\n }\n\n /**\n * insert paragraph\n */\n insertParagraph(editable) {\n let rng = range.create(editable);\n\n // deleteContents on range.\n rng = rng.deleteContents();\n\n // Wrap range if it needs to be wrapped by paragraph\n rng = rng.wrapBodyInlineWithPara();\n\n // finding paragraph\n const splitRoot = dom.ancestor(rng.sc, dom.isPara);\n\n let nextPara;\n // on paragraph: split paragraph\n if (splitRoot) {\n // if it is an empty line with li\n if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) {\n // toogle UL/OL and escape\n this.bullet.toggleList(splitRoot.parentNode.nodeName);\n return;\n // if it is an empty line with para on blockquote\n } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) {\n // escape blockquote\n dom.insertAfter(splitRoot, splitRoot.parentNode);\n nextPara = splitRoot;\n // if new line has content (not a line break)\n } else {\n nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n\n $.each(emptyAnchors, (idx, anchor) => {\n dom.remove(anchor);\n });\n\n // replace empty heading, pre or custom-made styleTag with P tag\n if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n nextPara = dom.replace(nextPara, 'p');\n }\n }\n // no paragraph: insert empty paragraph\n } else {\n const next = rng.sc.childNodes[rng.so];\n nextPara = $(dom.emptyPara)[0];\n if (next) {\n rng.sc.insertBefore(nextPara, next);\n } else {\n rng.sc.appendChild(nextPara);\n }\n }\n\n range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport lists from '../core/lists';\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nconst TableResultAction = function(startPoint, where, action, domTable) {\n const _startPoint = { 'colPos': 0, 'rowPos': 0 };\n const _virtualTable = [];\n const _actionCellList = [];\n\n /// ///////////////////////////////////////////\n // Private functions\n /// ///////////////////////////////////////////\n\n /**\n * Set the startPoint of action.\n */\n function setStartPoint() {\n if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) {\n console.error('Impossible to identify start Cell point.', startPoint);\n return;\n }\n _startPoint.colPos = startPoint.cellIndex;\n if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n console.error('Impossible to identify start Row point.', startPoint);\n return;\n }\n _startPoint.rowPos = startPoint.parentElement.rowIndex;\n }\n\n /**\n * Define virtual table position info object.\n *\n * @param {int} rowIndex Index position in line of virtual table.\n * @param {int} cellIndex Index position in column of virtual table.\n * @param {object} baseRow Row affected by this position.\n * @param {object} baseCell Cell affected by this position.\n * @param {bool} isSpan Inform if it is an span cell/row.\n */\n function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n const objPosition = {\n 'baseRow': baseRow,\n 'baseCell': baseCell,\n 'isRowSpan': isRowSpan,\n 'isColSpan': isColSpan,\n 'isVirtual': isVirtualCell\n };\n if (!_virtualTable[rowIndex]) {\n _virtualTable[rowIndex] = [];\n }\n _virtualTable[rowIndex][cellIndex] = objPosition;\n }\n\n /**\n * Create action cell object.\n *\n * @param {object} virtualTableCellObj Object of specific position on virtual table.\n * @param {enum} resultAction Action to be applied in that item.\n */\n function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n return {\n 'baseCell': virtualTableCellObj.baseCell,\n 'action': resultAction,\n 'virtualTable': {\n 'rowIndex': virtualRowPosition,\n 'cellIndex': virtualColPosition\n }\n };\n }\n\n /**\n * Recover free index of row to append Cell.\n *\n * @param {int} rowIndex Index of row to find free space.\n * @param {int} cellIndex Index of cell to find free space in table.\n */\n function recoverCellIndex(rowIndex, cellIndex) {\n if (!_virtualTable[rowIndex]) {\n return cellIndex;\n }\n if (!_virtualTable[rowIndex][cellIndex]) {\n return cellIndex;\n }\n\n let newCellIndex = cellIndex;\n while (_virtualTable[rowIndex][newCellIndex]) {\n newCellIndex++;\n if (!_virtualTable[rowIndex][newCellIndex]) {\n return newCellIndex;\n }\n }\n }\n\n /**\n * Recover info about row and cell and add information to virtual table.\n *\n * @param {object} row Row to recover information.\n * @param {object} cell Cell to recover information.\n */\n function addCellInfoToVirtual(row, cell) {\n const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n const cellHasColspan = (cell.colSpan > 1);\n const cellHasRowspan = (cell.rowSpan > 1);\n const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos);\n setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n // Add span rows to virtual Table.\n const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n if (rowspanNumber > 1) {\n for (let rp = 1; rp < rowspanNumber; rp++) {\n const rowspanIndex = row.rowIndex + rp;\n adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n }\n }\n\n // Add span cols to virtual table.\n const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n if (colspanNumber > 1) {\n for (let cp = 1; cp < colspanNumber; cp++) {\n const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp));\n adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n }\n }\n }\n\n /**\n * Process validation and adjust of start point if needed\n *\n * @param {int} rowIndex\n * @param {int} cellIndex\n * @param {object} cell\n * @param {bool} isSelectedCell\n */\n function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n _startPoint.colPos++;\n }\n }\n\n /**\n * Create virtual table of cells with all cells, including span cells.\n */\n function createVirtualTable() {\n const rows = domTable.rows;\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const cells = rows[rowIndex].cells;\n for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n }\n }\n }\n\n /**\n * Get action to be applied on the cell.\n *\n * @param {object} cell virtual table cell to apply action\n */\n function getDeleteResultActionToCell(cell) {\n switch (where) {\n case TableResultAction.where.Column:\n if (cell.isColSpan) {\n return TableResultAction.resultAction.SubtractSpanCount;\n }\n break;\n case TableResultAction.where.Row:\n if (!cell.isVirtual && cell.isRowSpan) {\n return TableResultAction.resultAction.AddCell;\n } else if (cell.isRowSpan) {\n return TableResultAction.resultAction.SubtractSpanCount;\n }\n break;\n }\n return TableResultAction.resultAction.RemoveCell;\n }\n\n /**\n * Get action to be applied on the cell.\n *\n * @param {object} cell virtual table cell to apply action\n */\n function getAddResultActionToCell(cell) {\n switch (where) {\n case TableResultAction.where.Column:\n if (cell.isColSpan) {\n return TableResultAction.resultAction.SumSpanCount;\n } else if (cell.isRowSpan && cell.isVirtual) {\n return TableResultAction.resultAction.Ignore;\n }\n break;\n case TableResultAction.where.Row:\n if (cell.isRowSpan) {\n return TableResultAction.resultAction.SumSpanCount;\n } else if (cell.isColSpan && cell.isVirtual) {\n return TableResultAction.resultAction.Ignore;\n }\n break;\n }\n return TableResultAction.resultAction.AddCell;\n }\n\n function init() {\n setStartPoint();\n createVirtualTable();\n }\n\n /// ///////////////////////////////////////////\n // Public functions\n /// ///////////////////////////////////////////\n\n /**\n * Recover array os what to do in table.\n */\n this.getActionList = function() {\n const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1;\n const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1;\n\n let actualPosition = 0;\n let canContinue = true;\n while (canContinue) {\n const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition;\n const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition;\n const row = _virtualTable[rowPosition];\n if (!row) {\n canContinue = false;\n return _actionCellList;\n }\n const cell = row[colPosition];\n if (!cell) {\n canContinue = false;\n return _actionCellList;\n }\n\n // Define action to be applied in this cell\n let resultAction = TableResultAction.resultAction.Ignore;\n switch (action) {\n case TableResultAction.requestAction.Add:\n resultAction = getAddResultActionToCell(cell);\n break;\n case TableResultAction.requestAction.Delete:\n resultAction = getDeleteResultActionToCell(cell);\n break;\n }\n _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n actualPosition++;\n }\n\n return _actionCellList;\n };\n\n init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = { 'Row': 0, 'Column': 1 };\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = { 'Add': 0, 'Delete': 1 };\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 };\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nexport default class Table {\n /**\n * handle tab key\n *\n * @param {WrappedRange} rng\n * @param {Boolean} isShift\n */\n tab(rng, isShift) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const table = dom.ancestor(cell, dom.isTable);\n const cells = dom.listDescendant(table, dom.isCell);\n\n const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n if (nextCell) {\n range.create(nextCell, 0).select();\n }\n }\n\n /**\n * Add a new row\n *\n * @param {WrappedRange} rng\n * @param {String} position (top/bottom)\n * @return {Node}\n */\n addRow(rng, position) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n\n const currentTr = $(cell).closest('tr');\n const trAttributes = this.recoverAttributes(currentTr);\n const html = $('<tr' + trAttributes + '></tr>');\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let idCell = 0; idCell < actions.length; idCell++) {\n const currentCell = actions[idCell];\n const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n switch (currentCell.action) {\n case TableResultAction.resultAction.AddCell:\n html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n break;\n case TableResultAction.resultAction.SumSpanCount:\n if (position === 'top') {\n const baseCellTr = currentCell.baseCell.parent;\n const isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n if (isTopFromRowSpan) {\n const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n html.append(newTd);\n break;\n }\n }\n let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n rowspanNumber++;\n currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n break;\n }\n }\n\n if (position === 'top') {\n currentTr.before(html);\n } else {\n const cellHasRowspan = (cell.rowSpan > 1);\n if (cellHasRowspan) {\n const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html));\n return;\n }\n currentTr.after(html);\n }\n }\n\n /**\n * Add a new col\n *\n * @param {WrappedRange} rng\n * @param {String} position (left/right)\n * @return {Node}\n */\n addCol(rng, position) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const rowsGroup = $(row).siblings();\n rowsGroup.push(row);\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n TableResultAction.requestAction.Add, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n const currentCell = actions[actionIndex];\n const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n switch (currentCell.action) {\n case TableResultAction.resultAction.AddCell:\n if (position === 'right') {\n $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n } else {\n $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n }\n break;\n case TableResultAction.resultAction.SumSpanCount:\n if (position === 'right') {\n let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n colspanNumber++;\n currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n } else {\n $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n }\n break;\n }\n }\n }\n\n /*\n * Copy attributes from element.\n *\n * @param {object} Element to recover attributes.\n * @return {string} Copied string elements.\n */\n recoverAttributes(el) {\n let resultStr = '';\n\n if (!el) {\n return resultStr;\n }\n\n const attrList = el.attributes || [];\n\n for (let i = 0; i < attrList.length; i++) {\n if (attrList[i].name.toLowerCase() === 'id') {\n continue;\n }\n\n if (attrList[i].specified) {\n resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n }\n }\n\n return resultStr;\n }\n\n /**\n * Delete current row\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteRow(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const cellPos = row.children('td, th').index($(cell));\n const rowPos = row[0].rowIndex;\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n if (!actions[actionIndex]) {\n continue;\n }\n\n const baseCell = actions[actionIndex].baseCell;\n const virtualPosition = actions[actionIndex].virtualTable;\n const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1);\n let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0;\n switch (actions[actionIndex].action) {\n case TableResultAction.resultAction.Ignore:\n continue;\n case TableResultAction.resultAction.AddCell:\n const nextRow = row.next('tr')[0];\n if (!nextRow) { continue; }\n const cloneRow = row[0].cells[cellPos];\n if (hasRowspan) {\n if (rowspanNumber > 2) {\n rowspanNumber--;\n nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n nextRow.cells[cellPos].innerHTML = '';\n } else if (rowspanNumber === 2) {\n nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n nextRow.cells[cellPos].removeAttribute('rowSpan');\n nextRow.cells[cellPos].innerHTML = '';\n }\n }\n continue;\n case TableResultAction.resultAction.SubtractSpanCount:\n if (hasRowspan) {\n if (rowspanNumber > 2) {\n rowspanNumber--;\n baseCell.setAttribute('rowSpan', rowspanNumber);\n if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n } else if (rowspanNumber === 2) {\n baseCell.removeAttribute('rowSpan');\n if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n }\n }\n continue;\n case TableResultAction.resultAction.RemoveCell:\n // Do not need remove cell because row will be deleted.\n continue;\n }\n }\n row.remove();\n }\n\n /**\n * Delete current col\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteCol(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const cellPos = row.children('td, th').index($(cell));\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n if (!actions[actionIndex]) {\n continue;\n }\n switch (actions[actionIndex].action) {\n case TableResultAction.resultAction.Ignore:\n continue;\n case TableResultAction.resultAction.SubtractSpanCount:\n const baseCell = actions[actionIndex].baseCell;\n const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1);\n if (hasColspan) {\n let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0;\n if (colspanNumber > 2) {\n colspanNumber--;\n baseCell.setAttribute('colSpan', colspanNumber);\n if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n } else if (colspanNumber === 2) {\n baseCell.removeAttribute('colSpan');\n if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n }\n }\n continue;\n case TableResultAction.resultAction.RemoveCell:\n dom.remove(actions[actionIndex].baseCell, true);\n continue;\n }\n }\n }\n\n /**\n * create empty table element\n *\n * @param {Number} rowCount\n * @param {Number} colCount\n * @return {Node}\n */\n createTable(colCount, rowCount, options) {\n const tds = [];\n let tdHTML;\n for (let idxCol = 0; idxCol < colCount; idxCol++) {\n tds.push('<td>' + dom.blank + '</td>');\n }\n tdHTML = tds.join('');\n\n const trs = [];\n let trHTML;\n for (let idxRow = 0; idxRow < rowCount; idxRow++) {\n trs.push('<tr>' + tdHTML + '</tr>');\n }\n trHTML = trs.join('');\n const $table = $('<table>' + trHTML + '</table>');\n if (options && options.tableClassName) {\n $table.addClass(options.tableClassName);\n }\n\n return $table[0];\n }\n\n /**\n * Delete current table\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteTable(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n $(cell).closest('table').remove();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport { readFileAsDataURL, createImage } from '../core/async';\nimport History from '../editing/History';\nimport Style from '../editing/Style';\nimport Typing from '../editing/Typing';\nimport Table from '../editing/Table';\nimport Bullet from '../editing/Bullet';\n\nconst KEY_BOGUS = 'bogus';\n\n/**\n * @class Editor\n */\nexport default class Editor {\n constructor(context) {\n this.context = context;\n\n this.$note = context.layoutInfo.note;\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n this.editable = this.$editable[0];\n this.lastRange = null;\n\n this.style = new Style();\n this.table = new Table();\n this.typing = new Typing();\n this.bullet = new Bullet();\n this.history = new History(this.$editable);\n\n this.context.memo('help.undo', this.lang.help.undo);\n this.context.memo('help.redo', this.lang.help.redo);\n this.context.memo('help.tab', this.lang.help.tab);\n this.context.memo('help.untab', this.lang.help.untab);\n this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n this.context.memo('help.indent', this.lang.help.indent);\n this.context.memo('help.outdent', this.lang.help.outdent);\n this.context.memo('help.formatPara', this.lang.help.formatPara);\n this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n this.context.memo('help.fontName', this.lang.help.fontName);\n\n // native commands(with execCommand), generate function for execCommand\n const commands = [\n 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',\n 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',\n 'formatBlock', 'removeFormat', 'backColor'\n ];\n\n for (let idx = 0, len = commands.length; idx < len; idx++) {\n this[commands[idx]] = ((sCmd) => {\n return (value) => {\n this.beforeCommand();\n document.execCommand(sCmd, false, value);\n this.afterCommand(true);\n };\n })(commands[idx]);\n this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n }\n\n this.fontName = this.wrapCommand((value) => {\n return this.fontStyling('font-family', \"\\'\" + value + \"\\'\");\n });\n\n this.fontSize = this.wrapCommand((value) => {\n return this.fontStyling('font-size', value + 'px');\n });\n\n for (let idx = 1; idx <= 6; idx++) {\n this['formatH' + idx] = ((idx) => {\n return () => {\n this.formatBlock('H' + idx);\n };\n })(idx);\n this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]);\n };\n\n this.insertParagraph = this.wrapCommand(() => {\n this.typing.insertParagraph(this.editable);\n });\n\n this.insertOrderedList = this.wrapCommand(() => {\n this.bullet.insertOrderedList(this.editable);\n });\n\n this.insertUnorderedList = this.wrapCommand(() => {\n this.bullet.insertUnorderedList(this.editable);\n });\n\n this.indent = this.wrapCommand(() => {\n this.bullet.indent(this.editable);\n });\n\n this.outdent = this.wrapCommand(() => {\n this.bullet.outdent(this.editable);\n });\n\n /**\n * insertNode\n * insert node\n * @param {Node} node\n */\n this.insertNode = this.wrapCommand((node) => {\n if (this.isLimited($(node).text().length)) {\n return;\n }\n const rng = this.createRange();\n rng.insertNode(node);\n range.createFromNodeAfter(node).select();\n });\n\n /**\n * insert text\n * @param {String} text\n */\n this.insertText = this.wrapCommand((text) => {\n if (this.isLimited(text.length)) {\n return;\n }\n const rng = this.createRange();\n const textNode = rng.insertNode(dom.createText(text));\n range.create(textNode, dom.nodeLength(textNode)).select();\n });\n /**\n * paste HTML\n * @param {String} markup\n */\n this.pasteHTML = this.wrapCommand((markup) => {\n if (this.isLimited(markup.length)) {\n return;\n }\n const contents = this.createRange().pasteHTML(markup);\n range.createFromNodeAfter(lists.last(contents)).select();\n });\n\n /**\n * formatBlock\n *\n * @param {String} tagName\n */\n this.formatBlock = this.wrapCommand((tagName, $target) => {\n const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle;\n if (onApplyCustomStyle) {\n onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock);\n } else {\n this.onFormatBlock(tagName, $target);\n }\n });\n\n /**\n * insert horizontal rule\n */\n this.insertHorizontalRule = this.wrapCommand(() => {\n const hrNode = this.createRange().insertNode(dom.create('HR'));\n if (hrNode.nextSibling) {\n range.create(hrNode.nextSibling, 0).normalize().select();\n }\n });\n\n /**\n * lineHeight\n * @param {String} value\n */\n this.lineHeight = this.wrapCommand((value) => {\n this.style.stylePara(this.createRange(), {\n lineHeight: value\n });\n });\n\n /**\n * create link (command)\n *\n * @param {Object} linkInfo\n */\n this.createLink = this.wrapCommand((linkInfo) => {\n let linkUrl = linkInfo.url;\n const linkText = linkInfo.text;\n const isNewWindow = linkInfo.isNewWindow;\n let rng = linkInfo.range || this.createRange();\n const isTextChanged = rng.toString() !== linkText;\n\n // handle spaced urls from input\n if (typeof linkUrl === 'string') {\n linkUrl = linkUrl.trim();\n }\n\n if (this.options.onCreateLink) {\n linkUrl = this.options.onCreateLink(linkUrl);\n } else {\n // if url doesn't match an URL schema, set http:// as default\n linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?/.test(linkUrl)\n ? linkUrl : 'http://' + linkUrl;\n }\n\n let anchors = [];\n if (isTextChanged) {\n rng = rng.deleteContents();\n const anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]);\n anchors.push(anchor);\n } else {\n anchors = this.style.styleNodes(rng, {\n nodeName: 'A',\n expandClosestSibling: true,\n onlyPartialContains: true\n });\n }\n\n $.each(anchors, (idx, anchor) => {\n $(anchor).attr('href', linkUrl);\n if (isNewWindow) {\n $(anchor).attr('target', '_blank');\n } else {\n $(anchor).removeAttr('target');\n }\n });\n\n const startRange = range.createFromNodeBefore(lists.head(anchors));\n const startPoint = startRange.getStartPoint();\n const endRange = range.createFromNodeAfter(lists.last(anchors));\n const endPoint = endRange.getEndPoint();\n\n range.create(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n ).select();\n });\n\n /**\n * setting color\n *\n * @param {Object} sObjColor color code\n * @param {String} sObjColor.foreColor foreground color\n * @param {String} sObjColor.backColor background color\n */\n this.color = this.wrapCommand((colorInfo) => {\n const foreColor = colorInfo.foreColor;\n const backColor = colorInfo.backColor;\n\n if (foreColor) { document.execCommand('foreColor', false, foreColor); }\n if (backColor) { document.execCommand('backColor', false, backColor); }\n });\n\n /**\n * Set foreground color\n *\n * @param {String} colorCode foreground color code\n */\n this.foreColor = this.wrapCommand((colorInfo) => {\n document.execCommand('styleWithCSS', false, true);\n document.execCommand('foreColor', false, colorInfo);\n });\n\n /**\n * insert Table\n *\n * @param {String} dimension of table (ex : \"5x5\")\n */\n this.insertTable = this.wrapCommand((dim) => {\n const dimension = dim.split('x');\n\n const rng = this.createRange().deleteContents();\n rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options));\n });\n\n /**\n * remove media object and Figure Elements if media object is img with Figure.\n */\n this.removeMedia = this.wrapCommand(() => {\n let $target = $(this.restoreTarget()).parent();\n if ($target.parent('figure').length) {\n $target.parent('figure').remove();\n } else {\n $target = $(this.restoreTarget()).detach();\n }\n this.context.triggerEvent('media.delete', $target, this.$editable);\n });\n\n /**\n * float me\n *\n * @param {String} value\n */\n this.floatMe = this.wrapCommand((value) => {\n const $target = $(this.restoreTarget());\n $target.toggleClass('note-float-left', value === 'left');\n $target.toggleClass('note-float-right', value === 'right');\n $target.css('float', value);\n });\n\n /**\n * resize overlay element\n * @param {String} value\n */\n this.resize = this.wrapCommand((value) => {\n const $target = $(this.restoreTarget());\n $target.css({\n width: value * 100 + '%',\n height: ''\n });\n });\n }\n\n initialize() {\n // bind custom events\n this.$editable.on('keydown', (event) => {\n if (event.keyCode === key.code.ENTER) {\n this.context.triggerEvent('enter', event);\n }\n this.context.triggerEvent('keydown', event);\n\n if (!event.isDefaultPrevented()) {\n if (this.options.shortcuts) {\n this.handleKeyMap(event);\n } else {\n this.preventDefaultEditableShortCuts(event);\n }\n }\n if (this.isLimited(1, event)) {\n return false;\n }\n }).on('keyup', (event) => {\n this.context.triggerEvent('keyup', event);\n }).on('focus', (event) => {\n this.context.triggerEvent('focus', event);\n }).on('blur', (event) => {\n this.context.triggerEvent('blur', event);\n }).on('mousedown', (event) => {\n this.context.triggerEvent('mousedown', event);\n }).on('mouseup', (event) => {\n this.context.triggerEvent('mouseup', event);\n }).on('scroll', (event) => {\n this.context.triggerEvent('scroll', event);\n }).on('paste', (event) => {\n this.context.triggerEvent('paste', event);\n });\n\n // init content before set event\n this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n\n this.$editable.on(env.inputEventName, func.debounce(() => {\n this.context.triggerEvent('change', this.$editable.html());\n }, 100));\n\n this.$editor.on('focusin', (event) => {\n this.context.triggerEvent('focusin', event);\n }).on('focusout', (event) => {\n this.context.triggerEvent('focusout', event);\n });\n\n if (!this.options.airMode) {\n if (this.options.width) {\n this.$editor.outerWidth(this.options.width);\n }\n if (this.options.height) {\n this.$editable.outerHeight(this.options.height);\n }\n if (this.options.maxHeight) {\n this.$editable.css('max-height', this.options.maxHeight);\n }\n if (this.options.minHeight) {\n this.$editable.css('min-height', this.options.minHeight);\n }\n }\n\n this.history.recordUndo();\n }\n\n destroy() {\n this.$editable.off();\n }\n\n handleKeyMap(event) {\n const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n const keys = [];\n\n if (event.metaKey) { keys.push('CMD'); }\n if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }\n if (event.shiftKey) { keys.push('SHIFT'); }\n\n const keyName = key.nameFromCode[event.keyCode];\n if (keyName) {\n keys.push(keyName);\n }\n\n const eventName = keyMap[keys.join('+')];\n if (eventName) {\n if (this.context.invoke(eventName) !== false) {\n event.preventDefault();\n }\n } else if (key.isEdit(event.keyCode)) {\n this.afterCommand();\n }\n }\n\n preventDefaultEditableShortCuts(event) {\n // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n if ((event.ctrlKey || event.metaKey) &&\n lists.contains([66, 73, 85], event.keyCode)) {\n event.preventDefault();\n }\n }\n\n isLimited(pad, event) {\n pad = pad || 0;\n\n if (typeof event !== 'undefined') {\n if (key.isMove(event.keyCode) ||\n (event.ctrlKey || event.metaKey) ||\n lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n return false;\n }\n }\n\n if (this.options.maxTextLength > 0) {\n if ((this.$editable.text().length + pad) >= this.options.maxTextLength) {\n return true;\n }\n }\n return false;\n }\n /**\n * create range\n * @return {WrappedRange}\n */\n createRange() {\n this.focus();\n return range.create(this.editable);\n }\n\n /**\n * saveRange\n *\n * save current range\n *\n * @param {Boolean} [thenCollapse=false]\n */\n saveRange(thenCollapse) {\n this.lastRange = this.createRange();\n if (thenCollapse) {\n this.lastRange.collapse().select();\n }\n }\n\n /**\n * restoreRange\n *\n * restore lately range\n */\n restoreRange() {\n if (this.lastRange) {\n this.lastRange.select();\n this.focus();\n }\n }\n\n saveTarget(node) {\n this.$editable.data('target', node);\n }\n\n clearTarget() {\n this.$editable.removeData('target');\n }\n\n restoreTarget() {\n return this.$editable.data('target');\n }\n\n /**\n * currentStyle\n *\n * current style\n * @return {Object|Boolean} unfocus\n */\n currentStyle() {\n let rng = range.create();\n if (rng) {\n rng = rng.normalize();\n }\n return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n }\n\n /**\n * style from node\n *\n * @param {jQuery} $node\n * @return {Object}\n */\n styleFromNode($node) {\n return this.style.fromNode($node);\n }\n\n /**\n * undo\n */\n undo() {\n this.context.triggerEvent('before.command', this.$editable.html());\n this.history.undo();\n this.context.triggerEvent('change', this.$editable.html());\n }\n\n /**\n * redo\n */\n redo() {\n this.context.triggerEvent('before.command', this.$editable.html());\n this.history.redo();\n this.context.triggerEvent('change', this.$editable.html());\n }\n\n /**\n * before command\n */\n beforeCommand() {\n this.context.triggerEvent('before.command', this.$editable.html());\n // keep focus on editable before command execution\n this.focus();\n }\n\n /**\n * after command\n * @param {Boolean} isPreventTrigger\n */\n afterCommand(isPreventTrigger) {\n this.normalizeContent();\n this.history.recordUndo();\n if (!isPreventTrigger) {\n this.context.triggerEvent('change', this.$editable.html());\n }\n }\n\n /**\n * handle tab key\n */\n tab() {\n const rng = this.createRange();\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.table.tab(rng);\n } else {\n if (this.options.tabSize === 0) {\n return false;\n }\n\n if (!this.isLimited(this.options.tabSize)) {\n this.beforeCommand();\n this.typing.insertTab(rng, this.options.tabSize);\n this.afterCommand();\n }\n }\n }\n\n /**\n * handle shift+tab key\n */\n untab() {\n const rng = this.createRange();\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.table.tab(rng, true);\n } else {\n if (this.options.tabSize === 0) {\n return false;\n }\n }\n }\n\n /**\n * run given function between beforeCommand and afterCommand\n */\n wrapCommand(fn) {\n return () => {\n this.beforeCommand();\n fn.apply(this, arguments);\n this.afterCommand();\n };\n }\n\n /**\n * insert image\n *\n * @param {String} src\n * @param {String|Function} param\n * @return {Promise}\n */\n insertImage(src, param) {\n return createImage(src, param).then(($image) => {\n this.beforeCommand();\n\n if (typeof param === 'function') {\n param($image);\n } else {\n if (typeof param === 'string') {\n $image.attr('data-filename', param);\n }\n $image.css('width', Math.min(this.$editable.width(), $image.width()));\n }\n\n $image.show();\n range.create(this.editable).insertNode($image[0]);\n range.createFromNodeAfter($image[0]).select();\n this.afterCommand();\n }).fail((e) => {\n this.context.triggerEvent('image.upload.error', e);\n });\n }\n\n /**\n * insertImages\n * @param {File[]} files\n */\n insertImages(files) {\n $.each(files, (idx, file) => {\n const filename = file.name;\n if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) {\n this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError);\n } else {\n readFileAsDataURL(file).then((dataURL) => {\n return this.insertImage(dataURL, filename);\n }).fail(() => {\n this.context.triggerEvent('image.upload.error');\n });\n }\n });\n }\n\n /**\n * insertImagesOrCallback\n * @param {File[]} files\n */\n insertImagesOrCallback(files) {\n const callbacks = this.options.callbacks;\n\n // If onImageUpload this.options setted\n if (callbacks.onImageUpload) {\n this.context.triggerEvent('image.upload', files);\n // else insert Image as dataURL\n } else {\n this.insertImages(files);\n }\n }\n\n /**\n * return selected plain text\n * @return {String} text\n */\n getSelectedText() {\n let rng = this.createRange();\n\n // if range on anchor, expand range with anchor\n if (rng.isOnAnchor()) {\n rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n }\n\n return rng.toString();\n }\n\n onFormatBlock(tagName, $target) {\n // [workaround] for MSIE, IE need `<`\n tagName = env.isMSIE ? '<' + tagName + '>' : tagName;\n document.execCommand('FormatBlock', false, tagName);\n\n // support custom class\n if ($target && $target.length) {\n const className = $target[0].className || '';\n if (className) {\n const currentRange = this.createRange();\n\n const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName);\n $parent.addClass(className);\n }\n }\n }\n\n formatPara() {\n this.formatBlock('P');\n }\n\n fontStyling(target, value) {\n const rng = this.createRange();\n\n if (rng) {\n const spans = this.style.styleNodes(rng);\n $(spans).css(target, value);\n\n // [workaround] added styled bogus span for style\n // - also bogus character needed for cursor position\n if (rng.isCollapsed()) {\n const firstSpan = lists.head(spans);\n if (firstSpan && !dom.nodeLength(firstSpan)) {\n firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n range.createFromNodeAfter(firstSpan.firstChild).select();\n this.$editable.data(KEY_BOGUS, firstSpan);\n }\n }\n }\n }\n\n /**\n * unlink\n *\n * @type command\n */\n unlink() {\n let rng = this.createRange();\n if (rng.isOnAnchor()) {\n const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n rng = range.createFromNode(anchor);\n rng.select();\n\n this.beforeCommand();\n document.execCommand('unlink');\n this.afterCommand();\n }\n }\n\n /**\n * returns link info\n *\n * @return {Object}\n * @return {WrappedRange} return.range\n * @return {String} return.text\n * @return {Boolean} [return.isNewWindow=true]\n * @return {String} [return.url=\"\"]\n */\n getLinkInfo() {\n const rng = this.createRange().expand(dom.isAnchor);\n\n // Get the first anchor on range(for edit).\n const $anchor = $(lists.head(rng.nodes(dom.isAnchor)));\n const linkInfo = {\n range: rng,\n text: rng.toString(),\n url: $anchor.length ? $anchor.attr('href') : ''\n };\n\n // Define isNewWindow when anchor exists.\n if ($anchor.length) {\n linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n }\n\n return linkInfo;\n }\n\n addRow(position) {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.addRow(rng, position);\n this.afterCommand();\n }\n }\n\n addCol(position) {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.addCol(rng, position);\n this.afterCommand();\n }\n }\n\n deleteRow() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteRow(rng);\n this.afterCommand();\n }\n }\n\n deleteCol() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteCol(rng);\n this.afterCommand();\n }\n }\n\n deleteTable() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteTable(rng);\n this.afterCommand();\n }\n }\n\n /**\n * @param {Position} pos\n * @param {jQuery} $target - target element\n * @param {Boolean} [bKeepRatio] - keep ratio\n */\n resizeTo(pos, $target, bKeepRatio) {\n let imageSize;\n if (bKeepRatio) {\n const newRatio = pos.y / pos.x;\n const ratio = $target.data('ratio');\n imageSize = {\n width: ratio > newRatio ? pos.x : pos.y / ratio,\n height: ratio > newRatio ? pos.x * ratio : pos.y\n };\n } else {\n imageSize = {\n width: pos.x,\n height: pos.y\n };\n }\n\n $target.css(imageSize);\n }\n\n /**\n * returns whether editable area has focus or not.\n */\n hasFocus() {\n return this.$editable.is(':focus');\n }\n\n /**\n * set focus\n */\n focus() {\n // [workaround] Screen will move when page is scolled in IE.\n // - do focus when not focused\n if (!this.hasFocus()) {\n this.$editable.focus();\n }\n }\n\n /**\n * returns whether contents is empty or not.\n * @return {Boolean}\n */\n isEmpty() {\n return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n }\n\n /**\n * Removes all contents and restores the editable instance to an _emptyPara_.\n */\n empty() {\n this.context.invoke('code', dom.emptyPara);\n }\n\n /**\n * normalize content\n */\n normalizeContent() {\n this.$editable[0].normalize();\n }\n}\n","import lists from '../core/lists';\n\nexport default class Clipboard {\n constructor(context) {\n this.context = context;\n this.$editable = context.layoutInfo.editable;\n }\n\n initialize() {\n this.$editable.on('paste', this.pasteByEvent.bind(this));\n }\n\n /**\n * paste by clipboard event\n *\n * @param {Event} event\n */\n pasteByEvent(event) {\n const clipboardData = event.originalEvent.clipboardData;\n if (clipboardData && clipboardData.items && clipboardData.items.length) {\n const item = lists.head(clipboardData.items);\n if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n }\n this.context.invoke('editor.afterCommand');\n }\n }\n}\n","import $ from 'jquery';\n\nexport default class Dropzone {\n constructor(context) {\n this.context = context;\n this.$eventListener = $(document);\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.lang = this.options.langInfo;\n this.documentEventHandlers = {};\n\n this.$dropzone = $([\n '<div class=\"note-dropzone\">',\n ' <div class=\"note-dropzone-message\"/>',\n '</div>'\n ].join('')).prependTo(this.$editor);\n }\n\n /**\n * attach Drag and Drop Events\n */\n initialize() {\n if (this.options.disableDragAndDrop) {\n // prevent default drop event\n this.documentEventHandlers.onDrop = (e) => {\n e.preventDefault();\n };\n // do not consider outside of dropzone\n this.$eventListener = this.$dropzone;\n this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n } else {\n this.attachDragAndDropEvent();\n }\n }\n\n /**\n * attach Drag and Drop Events\n */\n attachDragAndDropEvent() {\n let collection = $();\n const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n this.documentEventHandlers.onDragenter = (e) => {\n const isCodeview = this.context.invoke('codeview.isActivated');\n const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0;\n if (!isCodeview && !collection.length && hasEditorSize) {\n this.$editor.addClass('dragover');\n this.$dropzone.width(this.$editor.width());\n this.$dropzone.height(this.$editor.height());\n $dropzoneMessage.text(this.lang.image.dragImageHere);\n }\n collection = collection.add(e.target);\n };\n\n this.documentEventHandlers.onDragleave = (e) => {\n collection = collection.not(e.target);\n if (!collection.length) {\n this.$editor.removeClass('dragover');\n }\n };\n\n this.documentEventHandlers.onDrop = () => {\n collection = $();\n this.$editor.removeClass('dragover');\n };\n\n // show dropzone on dragenter when dragging a object to document\n // -but only if the editor is visible, i.e. has a positive width and height\n this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter)\n .on('dragleave', this.documentEventHandlers.onDragleave)\n .on('drop', this.documentEventHandlers.onDrop);\n\n // change dropzone's message on hover.\n this.$dropzone.on('dragenter', () => {\n this.$dropzone.addClass('hover');\n $dropzoneMessage.text(this.lang.image.dropImage);\n }).on('dragleave', () => {\n this.$dropzone.removeClass('hover');\n $dropzoneMessage.text(this.lang.image.dragImageHere);\n });\n\n // attach dropImage\n this.$dropzone.on('drop', (event) => {\n const dataTransfer = event.originalEvent.dataTransfer;\n\n // stop the browser from opening the dropped content\n event.preventDefault();\n\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n this.$editable.focus();\n this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n } else {\n $.each(dataTransfer.types, (idx, type) => {\n const content = dataTransfer.getData(type);\n\n if (type.toLowerCase().indexOf('text') > -1) {\n this.context.invoke('editor.pasteHTML', content);\n } else {\n $(content).each((idx, item) => {\n this.context.invoke('editor.insertNode', item);\n });\n }\n });\n }\n }).on('dragover', false); // prevent default dragover event\n }\n\n destroy() {\n Object.keys(this.documentEventHandlers).forEach((key) => {\n this.$eventListener.off(key.substr(2).toLowerCase(), this.documentEventHandlers[key]);\n });\n this.documentEventHandlers = {};\n }\n}\n","import env from '../core/env';\nimport dom from '../core/dom';\n\nlet CodeMirror;\nif (env.hasCodeMirror) {\n if (env.isSupportAmd) {\n require(['codemirror'], function(cm) {\n CodeMirror = cm;\n });\n } else {\n CodeMirror = window.CodeMirror;\n }\n}\n\n/**\n * @class Codeview\n */\nexport default class CodeView {\n constructor(context) {\n this.context = context;\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.$codable = context.layoutInfo.codable;\n this.options = context.options;\n }\n\n sync() {\n const isCodeview = this.isActivated();\n if (isCodeview && env.hasCodeMirror) {\n this.$codable.data('cmEditor').save();\n }\n }\n\n /**\n * @return {Boolean}\n */\n isActivated() {\n return this.$editor.hasClass('codeview');\n }\n\n /**\n * toggle codeview\n */\n toggle() {\n if (this.isActivated()) {\n this.deactivate();\n } else {\n this.activate();\n }\n this.context.triggerEvent('codeview.toggled');\n }\n\n /**\n * activate code view\n */\n activate() {\n this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n this.$codable.height(this.$editable.height());\n\n this.context.invoke('toolbar.updateCodeview', true);\n this.$editor.addClass('codeview');\n this.$codable.focus();\n\n // activate CodeMirror as codable\n if (env.hasCodeMirror) {\n const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n // CodeMirror TernServer\n if (this.options.codemirror.tern) {\n const server = new CodeMirror.TernServer(this.options.codemirror.tern);\n cmEditor.ternServer = server;\n cmEditor.on('cursorActivity', (cm) => {\n server.updateArgHints(cm);\n });\n }\n\n cmEditor.on('blur', (event) => {\n this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n });\n\n // CodeMirror hasn't Padding.\n cmEditor.setSize(null, this.$editable.outerHeight());\n this.$codable.data('cmEditor', cmEditor);\n } else {\n this.$codable.on('blur', (event) => {\n this.context.triggerEvent('blur.codeview', this.$codable.val(), event);\n });\n }\n }\n\n /**\n * deactivate code view\n */\n deactivate() {\n // deactivate CodeMirror as codable\n if (env.hasCodeMirror) {\n const cmEditor = this.$codable.data('cmEditor');\n this.$codable.val(cmEditor.getValue());\n cmEditor.toTextArea();\n }\n\n const value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara;\n const isChange = this.$editable.html() !== value;\n\n this.$editable.html(value);\n this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n this.$editor.removeClass('codeview');\n\n if (isChange) {\n this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n }\n\n this.$editable.focus();\n\n this.context.invoke('toolbar.updateCodeview', false);\n }\n\n destroy() {\n if (this.isActivated()) {\n this.deactivate();\n }\n }\n}\n","import $ from 'jquery';\nconst EDITABLE_PADDING = 24;\n\nexport default class Statusbar {\n constructor(context) {\n this.$document = $(document);\n this.$statusbar = context.layoutInfo.statusbar;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n }\n\n initialize() {\n if (this.options.airMode || this.options.disableResizeEditor) {\n this.destroy();\n return;\n }\n\n this.$statusbar.on('mousedown', (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n const editableTop = this.$editable.offset().top - this.$document.scrollTop();\n const onMouseMove = (event) => {\n let height = event.clientY - (editableTop + EDITABLE_PADDING);\n\n height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height;\n height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height;\n\n this.$editable.height(height);\n };\n\n this.$document.on('mousemove', onMouseMove).one('mouseup', () => {\n this.$document.off('mousemove', onMouseMove);\n });\n });\n }\n\n destroy() {\n this.$statusbar.off();\n this.$statusbar.addClass('locked');\n }\n}\n","import $ from 'jquery';\n\nexport default class Fullscreen {\n constructor(context) {\n this.context = context;\n\n this.$editor = context.layoutInfo.editor;\n this.$toolbar = context.layoutInfo.toolbar;\n this.$editable = context.layoutInfo.editable;\n this.$codable = context.layoutInfo.codable;\n\n this.$window = $(window);\n this.$scrollbar = $('html, body');\n\n this.onResize = () => {\n this.resizeTo({\n h: this.$window.height() - this.$toolbar.outerHeight()\n });\n };\n }\n\n resizeTo(size) {\n this.$editable.css('height', size.h);\n this.$codable.css('height', size.h);\n if (this.$codable.data('cmeditor')) {\n this.$codable.data('cmeditor').setsize(null, size.h);\n }\n }\n\n /**\n * toggle fullscreen\n */\n toggle() {\n this.$editor.toggleClass('fullscreen');\n if (this.isFullscreen()) {\n this.$editable.data('orgHeight', this.$editable.css('height'));\n this.$window.on('resize', this.onResize).trigger('resize');\n this.$scrollbar.css('overflow', 'hidden');\n } else {\n this.$window.off('resize', this.onResize);\n this.resizeTo({ h: this.$editable.data('orgHeight') });\n this.$scrollbar.css('overflow', 'visible');\n }\n\n this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n }\n\n isFullscreen() {\n return this.$editor.hasClass('fullscreen');\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\n\nexport default class Handle {\n constructor(context) {\n this.context = context;\n this.$document = $(document);\n this.$editingArea = context.layoutInfo.editingArea;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n this.events = {\n 'summernote.mousedown': (we, e) => {\n if (this.update(e.target)) {\n e.preventDefault();\n }\n },\n 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => {\n this.update();\n },\n 'summernote.disable': () => {\n this.hide();\n },\n 'summernote.codeview.toggled': () => {\n this.update();\n }\n };\n }\n\n initialize() {\n this.$handle = $([\n '<div class=\"note-handle\">',\n '<div class=\"note-control-selection\">',\n '<div class=\"note-control-selection-bg\"></div>',\n '<div class=\"note-control-holder note-control-nw\"></div>',\n '<div class=\"note-control-holder note-control-ne\"></div>',\n '<div class=\"note-control-holder note-control-sw\"></div>',\n '<div class=\"',\n (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'),\n ' note-control-se\"></div>',\n (this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>'),\n '</div>',\n '</div>'\n ].join('')).prependTo(this.$editingArea);\n\n this.$handle.on('mousedown', (event) => {\n if (dom.isControlSizing(event.target)) {\n event.preventDefault();\n event.stopPropagation();\n\n const $target = this.$handle.find('.note-control-selection').data('target');\n const posStart = $target.offset();\n const scrollTop = this.$document.scrollTop();\n\n const onMouseMove = (event) => {\n this.context.invoke('editor.resizeTo', {\n x: event.clientX - posStart.left,\n y: event.clientY - (posStart.top - scrollTop)\n }, $target, !event.shiftKey);\n\n this.update($target[0]);\n };\n\n this.$document\n .on('mousemove', onMouseMove)\n .one('mouseup', (e) => {\n e.preventDefault();\n this.$document.off('mousemove', onMouseMove);\n this.context.invoke('editor.afterCommand');\n });\n\n if (!$target.data('ratio')) { // original ratio.\n $target.data('ratio', $target.height() / $target.width());\n }\n }\n });\n\n // Listen for scrolling on the handle overlay.\n this.$handle.on('wheel', (e) => {\n e.preventDefault();\n this.update();\n });\n }\n\n destroy() {\n this.$handle.remove();\n }\n\n update(target) {\n if (this.context.isDisabled()) {\n return false;\n }\n\n const isImage = dom.isImg(target);\n const $selection = this.$handle.find('.note-control-selection');\n\n this.context.invoke('imagePopover.update', target);\n\n if (isImage) {\n const $image = $(target);\n const position = $image.position();\n const pos = {\n left: position.left + parseInt($image.css('marginLeft'), 10),\n top: position.top + parseInt($image.css('marginTop'), 10)\n };\n\n // exclude margin\n const imageSize = {\n w: $image.outerWidth(false),\n h: $image.outerHeight(false)\n };\n\n $selection.css({\n display: 'block',\n left: pos.left,\n top: pos.top,\n width: imageSize.w,\n height: imageSize.h\n }).data('target', $image); // save current image element.\n\n const origImageObj = new Image();\n origImageObj.src = $image.attr('src');\n\n const sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n $selection.find('.note-control-selection-info').text(sizingText);\n this.context.invoke('editor.saveTarget', target);\n } else {\n this.hide();\n }\n\n return isImage;\n }\n\n /**\n * hide\n *\n * @param {jQuery} $handle\n */\n hide() {\n this.context.invoke('editor.clearTarget');\n this.$handle.children().hide();\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport key from '../core/key';\n\nconst defaultScheme = 'http://';\nconst linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nexport default class AutoLink {\n constructor(context) {\n this.context = context;\n this.events = {\n 'summernote.keyup': (we, e) => {\n if (!e.isDefaultPrevented()) {\n this.handleKeyup(e);\n }\n },\n 'summernote.keydown': (we, e) => {\n this.handleKeydown(e);\n }\n };\n }\n\n initialize() {\n this.lastWordRange = null;\n }\n\n destroy() {\n this.lastWordRange = null;\n }\n\n replace() {\n if (!this.lastWordRange) {\n return;\n }\n\n const keyword = this.lastWordRange.toString();\n const match = keyword.match(linkPattern);\n\n if (match && (match[1] || match[2])) {\n const link = match[1] ? keyword : defaultScheme + keyword;\n const node = $('<a />').html(keyword).attr('href', link)[0];\n\n this.lastWordRange.insertNode(node);\n this.lastWordRange = null;\n this.context.invoke('editor.focus');\n }\n }\n\n handleKeydown(e) {\n if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n const wordRange = this.context.invoke('editor.createRange').getWordRange();\n this.lastWordRange = wordRange;\n }\n }\n\n handleKeyup(e) {\n if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n this.replace();\n }\n }\n}\n","import dom from '../core/dom';\n\n/**\n * textarea auto sync.\n */\nexport default class AutoSync {\n constructor(context) {\n this.$note = context.layoutInfo.note;\n this.events = {\n 'summernote.change': () => {\n this.$note.val(context.invoke('code'));\n }\n };\n }\n\n shouldInitialize() {\n return dom.isTextarea(this.$note[0]);\n }\n}\n","import $ from 'jquery';\nexport default class Placeholder {\n constructor(context) {\n this.context = context;\n\n this.$editingArea = context.layoutInfo.editingArea;\n this.options = context.options;\n this.events = {\n 'summernote.init summernote.change': () => {\n this.update();\n },\n 'summernote.codeview.toggled': () => {\n this.update();\n }\n };\n }\n\n shouldInitialize() {\n return !!this.options.placeholder;\n }\n\n initialize() {\n this.$placeholder = $('<div class=\"note-placeholder\">');\n this.$placeholder.on('click', () => {\n this.context.invoke('focus');\n }).text(this.options.placeholder).prependTo(this.$editingArea);\n\n this.update();\n }\n\n destroy() {\n this.$placeholder.remove();\n }\n\n update() {\n const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n this.$placeholder.toggle(isShow);\n }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport env from '../core/env';\n\nexport default class Buttons {\n constructor(context) {\n this.ui = $.summernote.ui;\n this.context = context;\n this.$toolbar = context.layoutInfo.toolbar;\n this.options = context.options;\n this.lang = this.options.langInfo;\n this.invertedKeyMap = func.invertObject(\n this.options.keyMap[env.isMac ? 'mac' : 'pc']\n );\n }\n\n representShortcut(editorMethod) {\n let shortcut = this.invertedKeyMap[editorMethod];\n if (!this.options.shortcuts || !shortcut) {\n return '';\n }\n\n if (env.isMac) {\n shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n }\n\n shortcut = shortcut.replace('BACKSLASH', '\\\\')\n .replace('SLASH', '/')\n .replace('LEFTBRACKET', '[')\n .replace('RIGHTBRACKET', ']');\n\n return ' (' + shortcut + ')';\n }\n\n button(o) {\n if (!this.options.tooltip && o.tooltip) {\n delete o.tooltip;\n }\n o.container = this.options.container;\n return this.ui.button(o);\n }\n\n initialize() {\n this.addToolbarButtons();\n this.addImagePopoverButtons();\n this.addLinkPopoverButtons();\n this.addTablePopoverButtons();\n this.fontInstalledMap = {};\n }\n\n destroy() {\n delete this.fontInstalledMap;\n }\n\n isFontInstalled(name) {\n if (!this.fontInstalledMap.hasOwnProperty(name)) {\n this.fontInstalledMap[name] = env.isFontInstalled(name) ||\n lists.contains(this.options.fontNamesIgnoreCheck, name);\n }\n\n return this.fontInstalledMap[name];\n }\n\n isFontDeservedToAdd(name) {\n const genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n name = name.toLowerCase();\n\n return ((name !== '') && this.isFontInstalled(name) && ($.inArray(name, genericFamilies) === -1));\n }\n\n addToolbarButtons() {\n this.context.memo('button.style', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(\n this.ui.icon(this.options.icons.magic), this.options\n ),\n tooltip: this.lang.style.style,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n className: 'dropdown-style',\n items: this.options.styleTags,\n title: this.lang.style.style,\n template: (item) => {\n if (typeof item === 'string') {\n item = { tag: item, title: (this.lang.style.hasOwnProperty(item) ? this.lang.style[item] : item) };\n }\n\n const tag = item.tag;\n const title = item.title;\n const style = item.style ? ' style=\"' + item.style + '\" ' : '';\n const className = item.className ? ' class=\"' + item.className + '\"' : '';\n\n return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n },\n click: this.context.createInvokeHandler('editor.formatBlock')\n })\n ]).render();\n });\n\n for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n const item = this.options.styleTags[styleIdx];\n\n this.context.memo('button.style.' + item, () => {\n return this.button({\n className: 'note-btn-style-' + item,\n contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n tooltip: this.lang.style[item],\n click: this.context.createInvokeHandler('editor.formatBlock')\n }).render();\n });\n }\n\n this.context.memo('button.bold', () => {\n return this.button({\n className: 'note-btn-bold',\n contents: this.ui.icon(this.options.icons.bold),\n tooltip: this.lang.font.bold + this.representShortcut('bold'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.bold')\n }).render();\n });\n\n this.context.memo('button.italic', () => {\n return this.button({\n className: 'note-btn-italic',\n contents: this.ui.icon(this.options.icons.italic),\n tooltip: this.lang.font.italic + this.representShortcut('italic'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.italic')\n }).render();\n });\n\n this.context.memo('button.underline', () => {\n return this.button({\n className: 'note-btn-underline',\n contents: this.ui.icon(this.options.icons.underline),\n tooltip: this.lang.font.underline + this.representShortcut('underline'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.underline')\n }).render();\n });\n\n this.context.memo('button.clear', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.eraser),\n tooltip: this.lang.font.clear + this.representShortcut('removeFormat'),\n click: this.context.createInvokeHandler('editor.removeFormat')\n }).render();\n });\n\n this.context.memo('button.strikethrough', () => {\n return this.button({\n className: 'note-btn-strikethrough',\n contents: this.ui.icon(this.options.icons.strikethrough),\n tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n }).render();\n });\n\n this.context.memo('button.superscript', () => {\n return this.button({\n className: 'note-btn-superscript',\n contents: this.ui.icon(this.options.icons.superscript),\n tooltip: this.lang.font.superscript,\n click: this.context.createInvokeHandlerAndUpdateState('editor.superscript')\n }).render();\n });\n\n this.context.memo('button.subscript', () => {\n return this.button({\n className: 'note-btn-subscript',\n contents: this.ui.icon(this.options.icons.subscript),\n tooltip: this.lang.font.subscript,\n click: this.context.createInvokeHandlerAndUpdateState('editor.subscript')\n }).render();\n });\n\n this.context.memo('button.fontname', () => {\n const styleInfo = this.context.invoke('editor.currentStyle');\n\n // Add 'default' fonts into the fontnames array if not exist\n $.each(styleInfo['font-family'].split(','), (idx, fontname) => {\n fontname = fontname.trim().replace(/['\"]+/g, '');\n if (this.isFontDeservedToAdd(fontname)) {\n if ($.inArray(fontname, this.options.fontNames) === -1) {\n this.options.fontNames.push(fontname);\n }\n }\n });\n\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(\n '<span class=\"note-current-fontname\"/>', this.options\n ),\n tooltip: this.lang.font.name,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n className: 'dropdown-fontname',\n checkClassName: this.options.icons.menuCheck,\n items: this.options.fontNames.filter(this.isFontInstalled.bind(this)),\n title: this.lang.font.name,\n template: (item) => {\n return '<span style=\"font-family: \\'' + item + '\\'\">' + item + '</span>';\n },\n click: this.context.createInvokeHandlerAndUpdateState('editor.fontName')\n })\n ]).render();\n });\n\n this.context.memo('button.fontsize', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"/>', this.options),\n tooltip: this.lang.font.size,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n className: 'dropdown-fontsize',\n checkClassName: this.options.icons.menuCheck,\n items: this.options.fontSizes,\n title: this.lang.font.size,\n click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n })\n ]).render();\n });\n\n this.context.memo('button.color', () => {\n return this.ui.buttonGroup({\n className: 'note-color',\n children: [\n this.button({\n className: 'note-current-color-button',\n contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n tooltip: this.lang.color.recent,\n click: (e) => {\n const $button = $(e.currentTarget);\n this.context.invoke('editor.color', {\n backColor: $button.attr('data-backColor'),\n foreColor: $button.attr('data-foreColor')\n });\n },\n callback: ($button) => {\n const $recentColor = $button.find('.note-recent-color');\n $recentColor.css('background-color', '#FFFF00');\n $button.attr('data-backColor', '#FFFF00');\n }\n }),\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents('', this.options),\n tooltip: this.lang.color.more,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n items: [\n '<div class=\"note-palette\">',\n ' <div class=\"note-palette-title\">' + this.lang.color.background + '</div>',\n ' <div>',\n ' <button type=\"button\" class=\"note-color-reset btn btn-light\" data-event=\"backColor\" data-value=\"inherit\">',\n this.lang.color.transparent,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"backColor\"/>',\n '</div>',\n '<div class=\"note-palette\">',\n ' <div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>',\n ' <div>',\n ' <button type=\"button\" class=\"note-color-reset btn btn-light\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n this.lang.color.resetToDefault,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"foreColor\"/>',\n '</div>'\n ].join(''),\n callback: ($dropdown) => {\n $dropdown.find('.note-holder').each((idx, item) => {\n const $holder = $(item);\n $holder.append(this.ui.palette({\n colors: this.options.colors,\n colorsName: this.options.colorsName,\n eventName: $holder.data('event'),\n container: this.options.container,\n tooltip: this.options.tooltip\n }).render());\n });\n },\n click: (event) => {\n const $button = $(event.target);\n const eventName = $button.data('event');\n const value = $button.data('value');\n\n if (eventName && value) {\n const key = eventName === 'backColor' ? 'background-color' : 'color';\n const $color = $button.closest('.note-color').find('.note-recent-color');\n const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n $color.css(key, value);\n $currentButton.attr('data-' + eventName, value);\n this.context.invoke('editor.' + eventName, value);\n }\n }\n })\n ]\n }).render();\n });\n\n this.context.memo('button.ul', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.unorderedlist),\n tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'),\n click: this.context.createInvokeHandler('editor.insertUnorderedList')\n }).render();\n });\n\n this.context.memo('button.ol', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.orderedlist),\n tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'),\n click: this.context.createInvokeHandler('editor.insertOrderedList')\n }).render();\n });\n\n const justifyLeft = this.button({\n contents: this.ui.icon(this.options.icons.alignLeft),\n tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n click: this.context.createInvokeHandler('editor.justifyLeft')\n });\n\n const justifyCenter = this.button({\n contents: this.ui.icon(this.options.icons.alignCenter),\n tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n click: this.context.createInvokeHandler('editor.justifyCenter')\n });\n\n const justifyRight = this.button({\n contents: this.ui.icon(this.options.icons.alignRight),\n tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n click: this.context.createInvokeHandler('editor.justifyRight')\n });\n\n const justifyFull = this.button({\n contents: this.ui.icon(this.options.icons.alignJustify),\n tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n click: this.context.createInvokeHandler('editor.justifyFull')\n });\n\n const outdent = this.button({\n contents: this.ui.icon(this.options.icons.outdent),\n tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n click: this.context.createInvokeHandler('editor.outdent')\n });\n\n const indent = this.button({\n contents: this.ui.icon(this.options.icons.indent),\n tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n click: this.context.createInvokeHandler('editor.indent')\n });\n\n this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n this.context.memo('button.indent', func.invoke(indent, 'render'));\n\n this.context.memo('button.paragraph', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options),\n tooltip: this.lang.paragraph.paragraph,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown([\n this.ui.buttonGroup({\n className: 'note-align',\n children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n }),\n this.ui.buttonGroup({\n className: 'note-list',\n children: [outdent, indent]\n })\n ])\n ]).render();\n });\n\n this.context.memo('button.height', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options),\n tooltip: this.lang.font.height,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n items: this.options.lineHeights,\n checkClassName: this.options.icons.menuCheck,\n className: 'dropdown-line-height',\n title: this.lang.font.height,\n click: this.context.createInvokeHandler('editor.lineHeight')\n })\n ]).render();\n });\n\n this.context.memo('button.table', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options),\n tooltip: this.lang.table.table,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n title: this.lang.table.table,\n className: 'note-table',\n items: [\n '<div class=\"note-dimension-picker\">',\n ' <div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"/>',\n ' <div class=\"note-dimension-picker-highlighted\"/>',\n ' <div class=\"note-dimension-picker-unhighlighted\"/>',\n '</div>',\n '<div class=\"note-dimension-display\">1 x 1</div>'\n ].join('')\n })\n ], {\n callback: ($node) => {\n const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n $catcher.css({\n width: this.options.insertTableMaxSize.col + 'em',\n height: this.options.insertTableMaxSize.row + 'em'\n }).mousedown(this.context.createInvokeHandler('editor.insertTable'))\n .on('mousemove', this.tableMoveHandler.bind(this));\n }\n }).render();\n });\n\n this.context.memo('button.link', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.link),\n tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'),\n click: this.context.createInvokeHandler('linkDialog.show')\n }).render();\n });\n\n this.context.memo('button.picture', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.picture),\n tooltip: this.lang.image.image,\n click: this.context.createInvokeHandler('imageDialog.show')\n }).render();\n });\n\n this.context.memo('button.video', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.video),\n tooltip: this.lang.video.video,\n click: this.context.createInvokeHandler('videoDialog.show')\n }).render();\n });\n\n this.context.memo('button.hr', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.minus),\n tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'),\n click: this.context.createInvokeHandler('editor.insertHorizontalRule')\n }).render();\n });\n\n this.context.memo('button.fullscreen', () => {\n return this.button({\n className: 'btn-fullscreen',\n contents: this.ui.icon(this.options.icons.arrowsAlt),\n tooltip: this.lang.options.fullscreen,\n click: this.context.createInvokeHandler('fullscreen.toggle')\n }).render();\n });\n\n this.context.memo('button.codeview', () => {\n return this.button({\n className: 'btn-codeview',\n contents: this.ui.icon(this.options.icons.code),\n tooltip: this.lang.options.codeview,\n click: this.context.createInvokeHandler('codeview.toggle')\n }).render();\n });\n\n this.context.memo('button.redo', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.redo),\n tooltip: this.lang.history.redo + this.representShortcut('redo'),\n click: this.context.createInvokeHandler('editor.redo')\n }).render();\n });\n\n this.context.memo('button.undo', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.undo),\n tooltip: this.lang.history.undo + this.representShortcut('undo'),\n click: this.context.createInvokeHandler('editor.undo')\n }).render();\n });\n\n this.context.memo('button.help', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.question),\n tooltip: this.lang.options.help,\n click: this.context.createInvokeHandler('helpDialog.show')\n }).render();\n });\n }\n\n /**\n * image : [\n * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n * ['float', ['floatLeft', 'floatRight', 'floatNone' ]],\n * ['remove', ['removeMedia']]\n * ],\n */\n addImagePopoverButtons() {\n // Image Size Buttons\n this.context.memo('button.imageSize100', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">100%</span>',\n tooltip: this.lang.image.resizeFull,\n click: this.context.createInvokeHandler('editor.resize', '1')\n }).render();\n });\n this.context.memo('button.imageSize50', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">50%</span>',\n tooltip: this.lang.image.resizeHalf,\n click: this.context.createInvokeHandler('editor.resize', '0.5')\n }).render();\n });\n this.context.memo('button.imageSize25', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">25%</span>',\n tooltip: this.lang.image.resizeQuarter,\n click: this.context.createInvokeHandler('editor.resize', '0.25')\n }).render();\n });\n\n // Float Buttons\n this.context.memo('button.floatLeft', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignLeft),\n tooltip: this.lang.image.floatLeft,\n click: this.context.createInvokeHandler('editor.floatMe', 'left')\n }).render();\n });\n\n this.context.memo('button.floatRight', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignRight),\n tooltip: this.lang.image.floatRight,\n click: this.context.createInvokeHandler('editor.floatMe', 'right')\n }).render();\n });\n\n this.context.memo('button.floatNone', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignJustify),\n tooltip: this.lang.image.floatNone,\n click: this.context.createInvokeHandler('editor.floatMe', 'none')\n }).render();\n });\n\n // Remove Buttons\n this.context.memo('button.removeMedia', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.trash),\n tooltip: this.lang.image.remove,\n click: this.context.createInvokeHandler('editor.removeMedia')\n }).render();\n });\n }\n\n addLinkPopoverButtons() {\n this.context.memo('button.linkDialogShow', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.link),\n tooltip: this.lang.link.edit,\n click: this.context.createInvokeHandler('linkDialog.show')\n }).render();\n });\n\n this.context.memo('button.unlink', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.unlink),\n tooltip: this.lang.link.unlink,\n click: this.context.createInvokeHandler('editor.unlink')\n }).render();\n });\n }\n\n /**\n * table : [\n * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n * ],\n */\n addTablePopoverButtons() {\n this.context.memo('button.addRowUp', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowAbove),\n tooltip: this.lang.table.addRowAbove,\n click: this.context.createInvokeHandler('editor.addRow', 'top')\n }).render();\n });\n this.context.memo('button.addRowDown', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowBelow),\n tooltip: this.lang.table.addRowBelow,\n click: this.context.createInvokeHandler('editor.addRow', 'bottom')\n }).render();\n });\n this.context.memo('button.addColLeft', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colBefore),\n tooltip: this.lang.table.addColLeft,\n click: this.context.createInvokeHandler('editor.addCol', 'left')\n }).render();\n });\n this.context.memo('button.addColRight', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colAfter),\n tooltip: this.lang.table.addColRight,\n click: this.context.createInvokeHandler('editor.addCol', 'right')\n }).render();\n });\n this.context.memo('button.deleteRow', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowRemove),\n tooltip: this.lang.table.delRow,\n click: this.context.createInvokeHandler('editor.deleteRow')\n }).render();\n });\n this.context.memo('button.deleteCol', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colRemove),\n tooltip: this.lang.table.delCol,\n click: this.context.createInvokeHandler('editor.deleteCol')\n }).render();\n });\n this.context.memo('button.deleteTable', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.trash),\n tooltip: this.lang.table.delTable,\n click: this.context.createInvokeHandler('editor.deleteTable')\n }).render();\n });\n }\n\n build($container, groups) {\n for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n const group = groups[groupIdx];\n const groupName = $.isArray(group) ? group[0] : group;\n const buttons = $.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group];\n\n const $group = this.ui.buttonGroup({\n className: 'note-' + groupName\n }).render();\n\n for (let idx = 0, len = buttons.length; idx < len; idx++) {\n const btn = this.context.memo('button.' + buttons[idx]);\n if (btn) {\n $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n }\n }\n $group.appendTo($container);\n }\n }\n\n /**\n * @param {jQuery} [$container]\n */\n updateCurrentStyle($container) {\n const $cont = $container || this.$toolbar;\n\n const styleInfo = this.context.invoke('editor.currentStyle');\n this.updateBtnStates($cont, {\n '.note-btn-bold': () => {\n return styleInfo['font-bold'] === 'bold';\n },\n '.note-btn-italic': () => {\n return styleInfo['font-italic'] === 'italic';\n },\n '.note-btn-underline': () => {\n return styleInfo['font-underline'] === 'underline';\n },\n '.note-btn-subscript': () => {\n return styleInfo['font-subscript'] === 'subscript';\n },\n '.note-btn-superscript': () => {\n return styleInfo['font-superscript'] === 'superscript';\n },\n '.note-btn-strikethrough': () => {\n return styleInfo['font-strikethrough'] === 'strikethrough';\n }\n });\n\n if (styleInfo['font-family']) {\n const fontNames = styleInfo['font-family'].split(',').map((name) => {\n return name.replace(/[\\'\\\"]/g, '')\n .replace(/\\s+$/, '')\n .replace(/^\\s+/, '');\n });\n const fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n\n $cont.find('.dropdown-fontname a').each((idx, item) => {\n const $item = $(item);\n // always compare string to avoid creating another func.\n const isChecked = ($item.data('value') + '') === (fontName + '');\n $item.toggleClass('checked', isChecked);\n });\n $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n }\n\n if (styleInfo['font-size']) {\n const fontSize = styleInfo['font-size'];\n $cont.find('.dropdown-fontsize a').each((idx, item) => {\n const $item = $(item);\n // always compare with string to avoid creating another func.\n const isChecked = ($item.data('value') + '') === (fontSize + '');\n $item.toggleClass('checked', isChecked);\n });\n $cont.find('.note-current-fontsize').text(fontSize);\n }\n\n if (styleInfo['line-height']) {\n const lineHeight = styleInfo['line-height'];\n $cont.find('.dropdown-line-height li a').each((idx, item) => {\n // always compare with string to avoid creating another func.\n const isChecked = ($(item).data('value') + '') === (lineHeight + '');\n this.className = isChecked ? 'checked' : '';\n });\n }\n }\n\n updateBtnStates($container, infos) {\n $.each(infos, (selector, pred) => {\n this.ui.toggleBtnActive($container.find(selector), pred());\n });\n }\n\n tableMoveHandler(event) {\n const PX_PER_EM = 18;\n const $picker = $(event.target.parentNode); // target is mousecatcher\n const $dimensionDisplay = $picker.next();\n const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n let posOffset;\n // HTML5 with jQuery - e.offsetX is undefined in Firefox\n if (event.offsetX === undefined) {\n const posCatcher = $(event.target).offset();\n posOffset = {\n x: event.pageX - posCatcher.left,\n y: event.pageY - posCatcher.top\n };\n } else {\n posOffset = {\n x: event.offsetX,\n y: event.offsetY\n };\n }\n\n const dim = {\n c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n };\n\n $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n $catcher.data('value', dim.c + 'x' + dim.r);\n\n if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n $unhighlighted.css({ width: dim.c + 1 + 'em' });\n }\n\n if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n $unhighlighted.css({ height: dim.r + 1 + 'em' });\n }\n\n $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n }\n}\n","import $ from 'jquery';\nexport default class Toolbar {\n constructor(context) {\n this.context = context;\n\n this.$window = $(window);\n this.$document = $(document);\n\n this.ui = $.summernote.ui;\n this.$note = context.layoutInfo.note;\n this.$editor = context.layoutInfo.editor;\n this.$toolbar = context.layoutInfo.toolbar;\n this.options = context.options;\n\n this.followScroll = this.followScroll.bind(this);\n }\n\n shouldInitialize() {\n return !this.options.airMode;\n }\n\n initialize() {\n this.options.toolbar = this.options.toolbar || [];\n\n if (!this.options.toolbar.length) {\n this.$toolbar.hide();\n } else {\n this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n }\n\n if (this.options.toolbarContainer) {\n this.$toolbar.appendTo(this.options.toolbarContainer);\n }\n\n this.changeContainer(false);\n\n this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => {\n this.context.invoke('buttons.updateCurrentStyle');\n });\n\n this.context.invoke('buttons.updateCurrentStyle');\n if (this.options.followingToolbar) {\n this.$window.on('scroll resize', this.followScroll);\n }\n }\n\n destroy() {\n this.$toolbar.children().remove();\n\n if (this.options.followingToolbar) {\n this.$window.off('scroll resize', this.followScroll);\n }\n }\n\n followScroll() {\n if (this.$editor.hasClass('fullscreen')) {\n return false;\n }\n\n const $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper');\n const editorHeight = this.$editor.outerHeight();\n const editorWidth = this.$editor.width();\n\n const toolbarHeight = this.$toolbar.height();\n $toolbarWrapper.css({\n height: toolbarHeight\n });\n\n // check if the web app is currently using another static bar\n let otherBarHeight = 0;\n if (this.options.otherStaticBar) {\n otherBarHeight = $(this.options.otherStaticBar).outerHeight();\n }\n\n const currentOffset = this.$document.scrollTop();\n const editorOffsetTop = this.$editor.offset().top;\n const editorOffsetBottom = editorOffsetTop + editorHeight;\n const activateOffset = editorOffsetTop - otherBarHeight;\n const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight;\n\n if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) {\n this.$toolbar.css({\n position: 'fixed',\n top: otherBarHeight,\n width: editorWidth\n });\n } else {\n this.$toolbar.css({\n position: 'relative',\n top: 0,\n width: '100%'\n });\n }\n }\n\n changeContainer(isFullscreen) {\n if (isFullscreen) {\n this.$toolbar.prependTo(this.$editor);\n } else {\n if (this.options.toolbarContainer) {\n this.$toolbar.appendTo(this.options.toolbarContainer);\n }\n }\n }\n\n updateFullscreen(isFullscreen) {\n this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n\n this.changeContainer(isFullscreen);\n }\n\n updateCodeview(isCodeview) {\n this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n if (isCodeview) {\n this.deactivate();\n } else {\n this.activate();\n }\n }\n\n activate(isIncludeCodeview) {\n let $btn = this.$toolbar.find('button');\n if (!isIncludeCodeview) {\n $btn = $btn.not('.btn-codeview');\n }\n this.ui.toggleBtn($btn, true);\n }\n\n deactivate(isIncludeCodeview) {\n let $btn = this.$toolbar.find('button');\n if (!isIncludeCodeview) {\n $btn = $btn.not('.btn-codeview');\n }\n this.ui.toggleBtn($btn, false);\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class LinkDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<div class=\"form-group note-form-group\">',\n `<label class=\"note-form-label\">${this.lang.link.textToDisplay}</label>`,\n '<input class=\"note-link-text form-control note-form-control note-input\" type=\"text\" />',\n '</div>',\n '<div class=\"form-group note-form-group\">',\n `<label class=\"note-form-label\">${this.lang.link.url}</label>`,\n '<input class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\" />',\n '</div>',\n !this.options.disableLinkTarget\n ? $('<div/>').append(this.ui.checkbox({\n id: 'sn-checkbox-open-in-new-window',\n text: this.lang.link.openInNewWindow,\n checked: true\n }).render()).html()\n : ''\n ].join('');\n\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.link.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n className: 'link-dialog',\n title: this.lang.link.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n /**\n * toggle update button\n */\n toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n }\n\n /**\n * Show link dialog and set event handlers on dialog controls.\n *\n * @param {Object} linkInfo\n * @return {Promise}\n */\n showLinkDialog(linkInfo) {\n return $.Deferred((deferred) => {\n const $linkText = this.$dialog.find('.note-link-text');\n const $linkUrl = this.$dialog.find('.note-link-url');\n const $linkBtn = this.$dialog.find('.note-link-btn');\n const $openInNewWindow = this.$dialog.find('input[type=checkbox]');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n // if no url was given, copy text to url\n if (!linkInfo.url) {\n linkInfo.url = linkInfo.text;\n }\n\n $linkText.val(linkInfo.text);\n\n const handleLinkTextUpdate = () => {\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n // if linktext was modified by keyup,\n // stop cloning text from linkUrl\n linkInfo.text = $linkText.val();\n };\n\n $linkText.on('input', handleLinkTextUpdate).on('paste', () => {\n setTimeout(handleLinkTextUpdate, 0);\n });\n\n const handleLinkUrlUpdate = () => {\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n // display same link on `Text to display` input\n // when create a new link\n if (!linkInfo.text) {\n $linkText.val($linkUrl.val());\n }\n };\n\n $linkUrl.on('input', handleLinkUrlUpdate).on('paste', () => {\n setTimeout(handleLinkUrlUpdate, 0);\n }).val(linkInfo.url);\n\n if (!env.isSupportTouch) {\n $linkUrl.trigger('focus');\n }\n\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n this.bindEnterKey($linkUrl, $linkBtn);\n this.bindEnterKey($linkText, $linkBtn);\n\n const isChecked = linkInfo.isNewWindow !== undefined\n ? linkInfo.isNewWindow : this.context.options.linkTargetBlank;\n\n $openInNewWindow.prop('checked', isChecked);\n\n $linkBtn.one('click', (event) => {\n event.preventDefault();\n\n deferred.resolve({\n range: linkInfo.range,\n url: $linkUrl.val(),\n text: $linkText.val(),\n isNewWindow: $openInNewWindow.is(':checked')\n });\n this.ui.hideDialog(this.$dialog);\n });\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n // detach events\n $linkText.off('input paste keypress');\n $linkUrl.off('input paste keypress');\n $linkBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n }).promise();\n }\n\n /**\n * @param {Object} layoutInfo\n */\n show() {\n const linkInfo = this.context.invoke('editor.getLinkInfo');\n\n this.context.invoke('editor.saveRange');\n this.showLinkDialog(linkInfo).then((linkInfo) => {\n this.context.invoke('editor.restoreRange');\n this.context.invoke('editor.createLink', linkInfo);\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class LinkPopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => {\n this.update();\n },\n 'summernote.disable summernote.dialog.shown': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.link);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-link-popover',\n callback: ($node) => {\n const $content = $node.find('.popover-content,.note-popover-content');\n $content.prepend('<span><a target=\"_blank\"></a> </span>');\n }\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.link);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update() {\n // Prevent focusing on editable when invoke('code') is executed\n if (!this.context.invoke('editor.hasFocus')) {\n this.hide();\n return;\n }\n\n const rng = this.context.invoke('editor.createRange');\n if (rng.isCollapsed() && rng.isOnAnchor()) {\n const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n const href = $(anchor).attr('href');\n this.$popover.find('a').attr('href', href).html(href);\n\n const pos = dom.posFromPlaceholder(anchor);\n this.$popover.css({\n display: 'block',\n left: pos.left,\n top: pos.top\n });\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class ImageDialog {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n let imageLimitation = '';\n if (this.options.maximumImageFileSize) {\n const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +\n ' ' + ' KMGTP'[unit] + 'B';\n imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`;\n }\n\n const body = [\n '<div class=\"form-group note-form-group note-group-select-from-files\">',\n '<label class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>',\n '<input class=\"note-image-input note-form-control note-input\" ',\n ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\" />',\n imageLimitation,\n '</div>',\n '<div class=\"form-group note-group-image-url\" style=\"overflow:auto;\">',\n '<label class=\"note-form-label\">' + this.lang.image.url + '</label>',\n '<input class=\"note-image-url form-control note-form-control note-input ',\n ' col-md-12\" type=\"text\" />',\n '</div>'\n ].join('');\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.image.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n title: this.lang.image.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n show() {\n this.context.invoke('editor.saveRange');\n this.showImageDialog().then((data) => {\n // [workaround] hide dialog before restore range for IE range focus\n this.ui.hideDialog(this.$dialog);\n this.context.invoke('editor.restoreRange');\n\n if (typeof data === 'string') { // image url\n this.context.invoke('editor.insertImage', data);\n } else { // array of files\n this.context.invoke('editor.insertImagesOrCallback', data);\n }\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n\n /**\n * show image dialog\n *\n * @param {jQuery} $dialog\n * @return {Promise}\n */\n showImageDialog() {\n return $.Deferred((deferred) => {\n const $imageInput = this.$dialog.find('.note-image-input');\n const $imageUrl = this.$dialog.find('.note-image-url');\n const $imageBtn = this.$dialog.find('.note-image-btn');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n // Cloning imageInput to clear element.\n $imageInput.replaceWith($imageInput.clone().on('change', (event) => {\n deferred.resolve(event.target.files || event.target.value);\n }).val(''));\n\n $imageBtn.click((event) => {\n event.preventDefault();\n\n deferred.resolve($imageUrl.val());\n });\n\n $imageUrl.on('keyup paste', () => {\n const url = $imageUrl.val();\n this.ui.toggleBtn($imageBtn, url);\n }).val('');\n\n if (!env.isSupportTouch) {\n $imageUrl.trigger('focus');\n }\n this.bindEnterKey($imageUrl, $imageBtn);\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n $imageInput.off('change');\n $imageUrl.off('keyup paste keypress');\n $imageBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n });\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\n/**\n * Image popover module\n * mouse events that show/hide popover will be handled by Handle.js.\n * Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nexport default class ImagePopover {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n\n this.editable = context.layoutInfo.editable[0];\n this.options = context.options;\n\n this.events = {\n 'summernote.disable': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.image);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-image-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n this.context.invoke('buttons.build', $content, this.options.popover.image);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update(target) {\n if (dom.isImg(target)) {\n const pos = dom.posFromPlaceholder(target);\n const posEditor = dom.posFromPlaceholder(this.editable);\n this.$popover.css({\n display: 'block',\n left: this.options.popatmouse ? event.pageX - 20 : pos.left,\n top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top)\n });\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class TablePopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.mousedown': (we, e) => {\n this.update(e.target);\n },\n 'summernote.keyup summernote.scroll summernote.change': () => {\n this.update();\n },\n 'summernote.disable': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.table);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-table-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n // [workaround] Disable Firefox's default table editor\n if (env.isFF) {\n document.execCommand('enableInlineTableEditing', false, false);\n }\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update(target) {\n if (this.context.isDisabled()) {\n return false;\n }\n\n const isCell = dom.isCell(target);\n\n if (isCell) {\n const pos = dom.posFromPlaceholder(target);\n this.$popover.css({\n display: 'block',\n left: pos.left,\n top: pos.top\n });\n } else {\n this.hide();\n }\n\n return isCell;\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class VideoDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<div class=\"form-group note-form-group row-fluid\">',\n `<label class=\"note-form-label\">${this.lang.video.url} <small class=\"text-muted\">${this.lang.video.providers}</small></label>`,\n '<input class=\"note-video-url form-control note-form-control note-input\" type=\"text\" />',\n '</div>'\n ].join('');\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.video.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n title: this.lang.video.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n createVideoNode(url) {\n // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n const ytRegExp = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n const ytMatch = url.match(ytRegExp);\n\n const igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n const igMatch = url.match(igRegExp);\n\n const vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n const vMatch = url.match(vRegExp);\n\n const vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n const vimMatch = url.match(vimRegExp);\n\n const dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n const dmMatch = url.match(dmRegExp);\n\n const youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n const youkuMatch = url.match(youkuRegExp);\n\n const qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n const qqMatch = url.match(qqRegExp);\n\n const qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n const qqMatch2 = url.match(qqRegExp2);\n\n const mp4RegExp = /^.+.(mp4|m4v)$/;\n const mp4Match = url.match(mp4RegExp);\n\n const oggRegExp = /^.+.(ogg|ogv)$/;\n const oggMatch = url.match(oggRegExp);\n\n const webmRegExp = /^.+.(webm)$/;\n const webmMatch = url.match(webmRegExp);\n\n let $video;\n if (ytMatch && ytMatch[1].length === 11) {\n const youtubeId = ytMatch[1];\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', '//www.youtube.com/embed/' + youtubeId)\n .attr('width', '640').attr('height', '360');\n } else if (igMatch && igMatch[0].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/')\n .attr('width', '612').attr('height', '710')\n .attr('scrolling', 'no')\n .attr('allowtransparency', 'true');\n } else if (vMatch && vMatch[0].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', vMatch[0] + '/embed/simple')\n .attr('width', '600').attr('height', '600')\n .attr('class', 'vine-embed');\n } else if (vimMatch && vimMatch[3].length) {\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('src', '//player.vimeo.com/video/' + vimMatch[3])\n .attr('width', '640').attr('height', '360');\n } else if (dmMatch && dmMatch[2].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])\n .attr('width', '640').attr('height', '360');\n } else if (youkuMatch && youkuMatch[1].length) {\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('height', '498')\n .attr('width', '510')\n .attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) {\n const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]);\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('height', '310')\n .attr('width', '500')\n .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0');\n } else if (mp4Match || oggMatch || webmMatch) {\n $video = $('<video controls>')\n .attr('src', url)\n .attr('width', '640').attr('height', '360');\n } else {\n // this is not a known video link. Now what, Cat? Now what?\n return false;\n }\n\n $video.addClass('note-video-clip');\n\n return $video[0];\n }\n\n show() {\n const text = this.context.invoke('editor.getSelectedText');\n this.context.invoke('editor.saveRange');\n this.showVideoDialog(text).then((url) => {\n // [workaround] hide dialog before restore range for IE range focus\n this.ui.hideDialog(this.$dialog);\n this.context.invoke('editor.restoreRange');\n\n // build node\n const $node = this.createVideoNode(url);\n\n if ($node) {\n // insert video node\n this.context.invoke('editor.insertNode', $node);\n }\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n\n /**\n * show image dialog\n *\n * @param {jQuery} $dialog\n * @return {Promise}\n */\n showVideoDialog(text) {\n return $.Deferred((deferred) => {\n const $videoUrl = this.$dialog.find('.note-video-url');\n const $videoBtn = this.$dialog.find('.note-video-btn');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n $videoUrl.val(text).on('input', () => {\n this.ui.toggleBtn($videoBtn, $videoUrl.val());\n });\n\n if (!env.isSupportTouch) {\n $videoUrl.trigger('focus');\n }\n\n $videoBtn.click((event) => {\n event.preventDefault();\n\n deferred.resolve($videoUrl.val());\n });\n\n this.bindEnterKey($videoUrl, $videoBtn);\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n $videoUrl.off('input');\n $videoBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n });\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\n\nexport default class HelpDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<p class=\"text-center\">',\n '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote @@VERSION@@</a> · ',\n '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ',\n '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>',\n '</p>'\n ].join('');\n\n this.$dialog = this.ui.dialog({\n title: this.lang.options.help,\n fade: this.options.dialogsFade,\n body: this.createShortcutList(),\n footer: body,\n callback: ($node) => {\n $node.find('.modal-body,.note-modal-body').css({\n 'max-height': 300,\n 'overflow': 'scroll'\n });\n }\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n createShortcutList() {\n const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n return Object.keys(keyMap).map((key) => {\n const command = keyMap[key];\n const $row = $('<div><div class=\"help-list-item\"/></div>');\n $row.append($('<label><kbd>' + key + '</kdb></label>').css({\n 'width': 180,\n 'margin-right': 10\n })).append($('<span/>').html(this.context.memo('help.' + command) || command));\n return $row.html();\n }).join('');\n }\n\n /**\n * show help dialog\n *\n * @return {Promise}\n */\n showHelpDialog() {\n return $.Deferred((deferred) => {\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n deferred.resolve();\n });\n this.ui.showDialog(this.$dialog);\n }).promise();\n }\n\n show() {\n this.context.invoke('editor.saveRange');\n this.showHelpDialog().then(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nconst AIR_MODE_POPOVER_X_OFFSET = 20;\n\nexport default class AirPopover {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.scroll': () => {\n this.update();\n },\n 'summernote.disable summernote.change summernote.dialog.shown': () => {\n this.hide();\n },\n 'summernote.focusout': (we, e) => {\n // [workaround] Firefox doesn't support relatedTarget on focusout\n // - Ignore hide action on focus out in FF.\n if (env.isFF) {\n return;\n }\n\n if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(this.$popover[0]))) {\n this.hide();\n }\n }\n };\n }\n\n shouldInitialize() {\n return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-air-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.air);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update() {\n const styleInfo = this.context.invoke('editor.currentStyle');\n if (styleInfo.range && !styleInfo.range.isCollapsed()) {\n const rect = lists.last(styleInfo.range.getClientRects());\n if (rect) {\n const bnd = func.rect2bnd(rect);\n this.$popover.css({\n display: 'block',\n left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET,\n top: bnd.top + bnd.height\n });\n this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n }\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport key from '../core/key';\n\nconst POPOVER_DIST = 5;\n\nexport default class HintPopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.hint = this.options.hint || [];\n this.direction = this.options.hintDirection || 'bottom';\n this.hints = $.isArray(this.hint) ? this.hint : [this.hint];\n\n this.events = {\n 'summernote.keyup': (we, e) => {\n if (!e.isDefaultPrevented()) {\n this.handleKeyup(e);\n }\n },\n 'summernote.keydown': (we, e) => {\n this.handleKeydown(e);\n },\n 'summernote.disable summernote.dialog.shown': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return this.hints.length > 0;\n }\n\n initialize() {\n this.lastWordRange = null;\n this.$popover = this.ui.popover({\n className: 'note-hint-popover',\n hideArrow: true,\n direction: ''\n }).render().appendTo(this.options.container);\n\n this.$popover.hide();\n this.$content = this.$popover.find('.popover-content,.note-popover-content');\n this.$content.on('click', '.note-hint-item', () => {\n this.$content.find('.active').removeClass('active');\n $(this).addClass('active');\n this.replace();\n });\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n selectItem($item) {\n this.$content.find('.active').removeClass('active');\n $item.addClass('active');\n\n this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);\n }\n\n moveDown() {\n const $current = this.$content.find('.note-hint-item.active');\n const $next = $current.next();\n\n if ($next.length) {\n this.selectItem($next);\n } else {\n let $nextGroup = $current.parent().next();\n\n if (!$nextGroup.length) {\n $nextGroup = this.$content.find('.note-hint-group').first();\n }\n\n this.selectItem($nextGroup.find('.note-hint-item').first());\n }\n }\n\n moveUp() {\n const $current = this.$content.find('.note-hint-item.active');\n const $prev = $current.prev();\n\n if ($prev.length) {\n this.selectItem($prev);\n } else {\n let $prevGroup = $current.parent().prev();\n\n if (!$prevGroup.length) {\n $prevGroup = this.$content.find('.note-hint-group').last();\n }\n\n this.selectItem($prevGroup.find('.note-hint-item').last());\n }\n }\n\n replace() {\n const $item = this.$content.find('.note-hint-item.active');\n\n if ($item.length) {\n const node = this.nodeFromItem($item);\n // XXX: consider to move codes to editor for recording redo/undo.\n this.lastWordRange.insertNode(node);\n range.createFromNode(node).collapse().select();\n\n this.lastWordRange = null;\n this.hide();\n this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]);\n this.context.invoke('editor.focus');\n }\n }\n\n nodeFromItem($item) {\n const hint = this.hints[$item.data('index')];\n const item = $item.data('item');\n let node = hint.content ? hint.content(item) : item;\n if (typeof node === 'string') {\n node = dom.createText(node);\n }\n return node;\n }\n\n createItemTemplates(hintIdx, items) {\n const hint = this.hints[hintIdx];\n return items.map((item, idx) => {\n const $item = $('<div class=\"note-hint-item\"/>');\n $item.append(hint.template ? hint.template(item) : item + '');\n $item.data({\n 'index': hintIdx,\n 'item': item\n });\n return $item;\n });\n }\n\n handleKeydown(e) {\n if (!this.$popover.is(':visible')) {\n return;\n }\n\n if (e.keyCode === key.code.ENTER) {\n e.preventDefault();\n this.replace();\n } else if (e.keyCode === key.code.UP) {\n e.preventDefault();\n this.moveUp();\n } else if (e.keyCode === key.code.DOWN) {\n e.preventDefault();\n this.moveDown();\n }\n }\n\n searchKeyword(index, keyword, callback) {\n const hint = this.hints[index];\n if (hint && hint.match.test(keyword) && hint.search) {\n const matches = hint.match.exec(keyword);\n hint.search(matches[1], callback);\n } else {\n callback();\n }\n }\n\n createGroup(idx, keyword) {\n const $group = $('<div class=\"note-hint-group note-hint-group-' + idx + '\"/>');\n this.searchKeyword(idx, keyword, (items) => {\n items = items || [];\n if (items.length) {\n $group.html(this.createItemTemplates(idx, items));\n this.show();\n }\n });\n\n return $group;\n }\n\n handleKeyup(e) {\n if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) {\n const wordRange = this.context.invoke('editor.createRange').getWordRange();\n const keyword = wordRange.toString();\n if (this.hints.length && keyword) {\n this.$content.empty();\n\n const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n if (bnd) {\n this.$popover.hide();\n this.lastWordRange = wordRange;\n this.hints.forEach((hint, idx) => {\n if (hint.match.test(keyword)) {\n this.createGroup(idx, keyword).appendTo(this.$content);\n }\n });\n // select first .note-hint-item\n this.$content.find('.note-hint-item:first').addClass('active');\n\n // set position for popover after group is created\n if (this.direction === 'top') {\n this.$popover.css({\n left: bnd.left,\n top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n });\n } else {\n this.$popover.css({\n left: bnd.left,\n top: bnd.top + bnd.height + POPOVER_DIST\n });\n }\n }\n } else {\n this.hide();\n }\n }\n }\n\n show() {\n this.$popover.show();\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport func from './core/func';\nimport lists from './core/lists';\nimport dom from './core/dom';\n\nexport default class Context {\n /**\n * @param {jQuery} $note\n * @param {Object} options\n */\n constructor($note, options) {\n this.ui = $.summernote.ui;\n this.$note = $note;\n\n this.memos = {};\n this.modules = {};\n this.layoutInfo = {};\n this.options = options;\n\n this.initialize();\n }\n\n /**\n * create layout and initialize modules and other resources\n */\n initialize() {\n this.layoutInfo = this.ui.createLayout(this.$note, this.options);\n this._initialize();\n this.$note.hide();\n return this;\n }\n\n /**\n * destroy modules and other resources and remove layout\n */\n destroy() {\n this._destroy();\n this.$note.removeData('summernote');\n this.ui.removeLayout(this.$note, this.layoutInfo);\n }\n\n /**\n * destory modules and other resources and initialize it again\n */\n reset() {\n const disabled = this.isDisabled();\n this.code(dom.emptyPara);\n this._destroy();\n this._initialize();\n\n if (disabled) {\n this.disable();\n }\n }\n\n _initialize() {\n // add optional buttons\n const buttons = $.extend({}, this.options.buttons);\n Object.keys(buttons).forEach((key) => {\n this.memo('button.' + key, buttons[key]);\n });\n\n const modules = $.extend({}, this.options.modules, $.summernote.plugins || {});\n\n // add and initialize modules\n Object.keys(modules).forEach((key) => {\n this.module(key, modules[key], true);\n });\n\n Object.keys(this.modules).forEach((key) => {\n this.initializeModule(key);\n });\n }\n\n _destroy() {\n // destroy modules with reversed order\n Object.keys(this.modules).reverse().forEach((key) => {\n this.removeModule(key);\n });\n\n Object.keys(this.memos).forEach((key) => {\n this.removeMemo(key);\n });\n // trigger custom onDestroy callback\n this.triggerEvent('destroy', this);\n }\n\n code(html) {\n const isActivated = this.invoke('codeview.isActivated');\n\n if (html === undefined) {\n this.invoke('codeview.sync');\n return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n } else {\n if (isActivated) {\n this.layoutInfo.codable.val(html);\n } else {\n this.layoutInfo.editable.html(html);\n }\n this.$note.val(html);\n this.triggerEvent('change', html);\n }\n }\n\n isDisabled() {\n return this.layoutInfo.editable.attr('contenteditable') === 'false';\n }\n\n enable() {\n this.layoutInfo.editable.attr('contenteditable', true);\n this.invoke('toolbar.activate', true);\n this.triggerEvent('disable', false);\n }\n\n disable() {\n // close codeview if codeview is opend\n if (this.invoke('codeview.isActivated')) {\n this.invoke('codeview.deactivate');\n }\n this.layoutInfo.editable.attr('contenteditable', false);\n this.invoke('toolbar.deactivate', true);\n\n this.triggerEvent('disable', true);\n }\n\n triggerEvent() {\n const namespace = lists.head(arguments);\n const args = lists.tail(lists.from(arguments));\n\n const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n if (callback) {\n callback.apply(this.$note[0], args);\n }\n this.$note.trigger('summernote.' + namespace, args);\n }\n\n initializeModule(key) {\n const module = this.modules[key];\n module.shouldInitialize = module.shouldInitialize || func.ok;\n if (!module.shouldInitialize()) {\n return;\n }\n\n // initialize module\n if (module.initialize) {\n module.initialize();\n }\n\n // attach events\n if (module.events) {\n dom.attachEvents(this.$note, module.events);\n }\n }\n\n module(key, ModuleClass, withoutIntialize) {\n if (arguments.length === 1) {\n return this.modules[key];\n }\n\n this.modules[key] = new ModuleClass(this);\n\n if (!withoutIntialize) {\n this.initializeModule(key);\n }\n }\n\n removeModule(key) {\n const module = this.modules[key];\n if (module.shouldInitialize()) {\n if (module.events) {\n dom.detachEvents(this.$note, module.events);\n }\n\n if (module.destroy) {\n module.destroy();\n }\n }\n\n delete this.modules[key];\n }\n\n memo(key, obj) {\n if (arguments.length === 1) {\n return this.memos[key];\n }\n this.memos[key] = obj;\n }\n\n removeMemo(key) {\n if (this.memos[key] && this.memos[key].destroy) {\n this.memos[key].destroy();\n }\n\n delete this.memos[key];\n }\n\n /**\n * Some buttons need to change their visual style immediately once they get pressed\n */\n createInvokeHandlerAndUpdateState(namespace, value) {\n return (event) => {\n this.createInvokeHandler(namespace, value)(event);\n this.invoke('buttons.updateCurrentStyle');\n };\n }\n\n createInvokeHandler(namespace, value) {\n return (event) => {\n event.preventDefault();\n const $target = $(event.target);\n this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n };\n }\n\n invoke() {\n const namespace = lists.head(arguments);\n const args = lists.tail(lists.from(arguments));\n\n const splits = namespace.split('.');\n const hasSeparator = splits.length > 1;\n const moduleName = hasSeparator && lists.head(splits);\n const methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n\n const module = this.modules[moduleName || 'editor'];\n if (!moduleName && this[methodName]) {\n return this[methodName].apply(this, args);\n } else if (module && module[methodName] && module.shouldInitialize()) {\n return module[methodName].apply(module, args);\n }\n }\n}\n","import $ from 'jquery';\nimport env from './base/core/env';\nimport lists from './base/core/lists';\nimport Context from './base/Context';\n\n$.fn.extend({\n /**\n * Summernote API\n *\n * @param {Object|String}\n * @return {this}\n */\n summernote: function() {\n const type = $.type(lists.head(arguments));\n const isExternalAPICalled = type === 'string';\n const hasInitOptions = type === 'object';\n\n const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n // Update options\n options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);\n options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);\n options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n\n this.each((idx, note) => {\n const $note = $(note);\n if (!$note.data('summernote')) {\n const context = new Context($note, options);\n $note.data('summernote', context);\n $note.data('summernote').triggerEvent('init', context.layoutInfo);\n }\n });\n\n const $note = this.first();\n if ($note.length) {\n const context = $note.data('summernote');\n if (isExternalAPICalled) {\n return context.invoke.apply(context, lists.from(arguments));\n } else if (options.focus) {\n context.invoke('editor.focus');\n }\n }\n\n return this;\n }\n});\n","import $ from 'jquery';\nimport ui from './ui';\nimport '../base/summernote-en-US';\nimport Editor from '../base/module/Editor';\nimport Clipboard from '../base/module/Clipboard';\nimport Dropzone from '../base/module/Dropzone';\nimport Codeview from '../base/module/Codeview';\nimport Statusbar from '../base/module/Statusbar';\nimport Fullscreen from '../base/module/Fullscreen';\nimport Handle from '../base/module/Handle';\nimport AutoLink from '../base/module/AutoLink';\nimport AutoSync from '../base/module/AutoSync';\nimport Placeholder from '../base/module/Placeholder';\nimport Buttons from '../base/module/Buttons';\nimport Toolbar from '../base/module/Toolbar';\nimport LinkDialog from '../base/module/LinkDialog';\nimport LinkPopover from '../base/module/LinkPopover';\nimport ImageDialog from '../base/module/ImageDialog';\nimport ImagePopover from '../base/module/ImagePopover';\nimport TablePopover from '../base/module/TablePopover';\nimport VideoDialog from '../base/module/VideoDialog';\nimport HelpDialog from '../base/module/HelpDialog';\nimport AirPopover from '../base/module/AirPopover';\nimport HintPopover from '../base/module/HintPopover';\n\n$.summernote = $.extend($.summernote, {\n version: '@@VERSION@@',\n ui: ui,\n\n plugins: {},\n\n options: {\n modules: {\n 'editor': Editor,\n 'clipboard': Clipboard,\n 'dropzone': Dropzone,\n 'codeview': Codeview,\n 'statusbar': Statusbar,\n 'fullscreen': Fullscreen,\n 'handle': Handle,\n // FIXME: HintPopover must be front of autolink\n // - Script error about range when Enter key is pressed on hint popover\n 'hintPopover': HintPopover,\n 'autoLink': AutoLink,\n 'autoSync': AutoSync,\n 'placeholder': Placeholder,\n 'buttons': Buttons,\n 'toolbar': Toolbar,\n 'linkDialog': LinkDialog,\n 'linkPopover': LinkPopover,\n 'imageDialog': ImageDialog,\n 'imagePopover': ImagePopover,\n 'tablePopover': TablePopover,\n 'videoDialog': VideoDialog,\n 'helpDialog': HelpDialog,\n 'airPopover': AirPopover\n },\n\n buttons: {},\n\n lang: 'en-US',\n\n followingToolbar: true,\n otherStaticBar: '',\n\n // toolbar\n toolbar: [\n ['style', ['style']],\n ['font', ['bold', 'underline', 'clear']],\n ['fontname', ['fontname']],\n ['fontsize', ['fontsize']],\n ['color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture', 'video']],\n ['view', ['fullscreen', 'codeview', 'help']]\n ],\n\n // popover\n popatmouse: true,\n popover: {\n image: [\n ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n ['float', ['floatLeft', 'floatRight', 'floatNone']],\n ['remove', ['removeMedia']]\n ],\n link: [\n ['link', ['linkDialogShow', 'unlink']]\n ],\n table: [\n ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n ],\n air: [\n ['color', ['color']],\n ['font', ['bold', 'underline', 'clear']],\n ['para', ['ul', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture']]\n ]\n },\n\n // air mode: inline editor\n airMode: false,\n\n width: null,\n height: null,\n\n focus: false,\n tabSize: 4,\n styleWithSpan: true,\n shortcuts: true,\n textareaAutoSync: true,\n hintDirection: 'bottom',\n tooltip: 'auto',\n container: 'body',\n maxTextLength: 0,\n\n styleTags: ['p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n fontNames: [\n 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande',\n 'Tahoma', 'Times New Roman', 'Verdana'\n ],\n\n fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n\n // pallete colors(n x n)\n colors: [\n ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],\n ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],\n ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],\n ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],\n ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],\n ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],\n ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],\n ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']\n ],\n\n // http://chir.ag/projects/name-that-color/\n colorsName: [\n ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'],\n ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'],\n ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'],\n ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'],\n ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'],\n ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'],\n ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'],\n ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']\n ],\n\n lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n\n tableClassName: 'table table-bordered',\n\n insertTableMaxSize: {\n col: 10,\n row: 10\n },\n\n dialogsInBody: false,\n dialogsFade: false,\n\n maximumImageFileSize: null,\n\n callbacks: {\n onInit: null,\n onFocus: null,\n onBlur: null,\n onBlurCodeview: null,\n onEnter: null,\n onKeyup: null,\n onKeydown: null,\n onSubmit: null,\n onImageUpload: null,\n onImageUploadError: null\n },\n\n codemirror: {\n mode: 'text/html',\n htmlMode: true,\n lineNumbers: true\n },\n\n keyMap: {\n pc: {\n 'ENTER': 'insertParagraph',\n 'CTRL+Z': 'undo',\n 'CTRL+Y': 'redo',\n 'TAB': 'tab',\n 'SHIFT+TAB': 'untab',\n 'CTRL+B': 'bold',\n 'CTRL+I': 'italic',\n 'CTRL+U': 'underline',\n 'CTRL+SHIFT+S': 'strikethrough',\n 'CTRL+BACKSLASH': 'removeFormat',\n 'CTRL+SHIFT+L': 'justifyLeft',\n 'CTRL+SHIFT+E': 'justifyCenter',\n 'CTRL+SHIFT+R': 'justifyRight',\n 'CTRL+SHIFT+J': 'justifyFull',\n 'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n 'CTRL+SHIFT+NUM8': 'insertOrderedList',\n 'CTRL+LEFTBRACKET': 'outdent',\n 'CTRL+RIGHTBRACKET': 'indent',\n 'CTRL+NUM0': 'formatPara',\n 'CTRL+NUM1': 'formatH1',\n 'CTRL+NUM2': 'formatH2',\n 'CTRL+NUM3': 'formatH3',\n 'CTRL+NUM4': 'formatH4',\n 'CTRL+NUM5': 'formatH5',\n 'CTRL+NUM6': 'formatH6',\n 'CTRL+ENTER': 'insertHorizontalRule',\n 'CTRL+K': 'linkDialog.show'\n },\n\n mac: {\n 'ENTER': 'insertParagraph',\n 'CMD+Z': 'undo',\n 'CMD+SHIFT+Z': 'redo',\n 'TAB': 'tab',\n 'SHIFT+TAB': 'untab',\n 'CMD+B': 'bold',\n 'CMD+I': 'italic',\n 'CMD+U': 'underline',\n 'CMD+SHIFT+S': 'strikethrough',\n 'CMD+BACKSLASH': 'removeFormat',\n 'CMD+SHIFT+L': 'justifyLeft',\n 'CMD+SHIFT+E': 'justifyCenter',\n 'CMD+SHIFT+R': 'justifyRight',\n 'CMD+SHIFT+J': 'justifyFull',\n 'CMD+SHIFT+NUM7': 'insertUnorderedList',\n 'CMD+SHIFT+NUM8': 'insertOrderedList',\n 'CMD+LEFTBRACKET': 'outdent',\n 'CMD+RIGHTBRACKET': 'indent',\n 'CMD+NUM0': 'formatPara',\n 'CMD+NUM1': 'formatH1',\n 'CMD+NUM2': 'formatH2',\n 'CMD+NUM3': 'formatH3',\n 'CMD+NUM4': 'formatH4',\n 'CMD+NUM5': 'formatH5',\n 'CMD+NUM6': 'formatH6',\n 'CMD+ENTER': 'insertHorizontalRule',\n 'CMD+K': 'linkDialog.show'\n }\n },\n icons: {\n 'align': 'note-icon-align',\n 'alignCenter': 'note-icon-align-center',\n 'alignJustify': 'note-icon-align-justify',\n 'alignLeft': 'note-icon-align-left',\n 'alignRight': 'note-icon-align-right',\n 'rowBelow': 'note-icon-row-below',\n 'colBefore': 'note-icon-col-before',\n 'colAfter': 'note-icon-col-after',\n 'rowAbove': 'note-icon-row-above',\n 'rowRemove': 'note-icon-row-remove',\n 'colRemove': 'note-icon-col-remove',\n 'indent': 'note-icon-align-indent',\n 'outdent': 'note-icon-align-outdent',\n 'arrowsAlt': 'note-icon-arrows-alt',\n 'bold': 'note-icon-bold',\n 'caret': 'note-icon-caret',\n 'circle': 'note-icon-circle',\n 'close': 'note-icon-close',\n 'code': 'note-icon-code',\n 'eraser': 'note-icon-eraser',\n 'font': 'note-icon-font',\n 'frame': 'note-icon-frame',\n 'italic': 'note-icon-italic',\n 'link': 'note-icon-link',\n 'unlink': 'note-icon-chain-broken',\n 'magic': 'note-icon-magic',\n 'menuCheck': 'note-icon-menu-check',\n 'minus': 'note-icon-minus',\n 'orderedlist': 'note-icon-orderedlist',\n 'pencil': 'note-icon-pencil',\n 'picture': 'note-icon-picture',\n 'question': 'note-icon-question',\n 'redo': 'note-icon-redo',\n 'square': 'note-icon-square',\n 'strikethrough': 'note-icon-strikethrough',\n 'subscript': 'note-icon-subscript',\n 'superscript': 'note-icon-superscript',\n 'table': 'note-icon-table',\n 'textHeight': 'note-icon-text-height',\n 'trash': 'note-icon-trash',\n 'underline': 'note-icon-underline',\n 'undo': 'note-icon-undo',\n 'unorderedlist': 'note-icon-unorderedlist',\n 'video': 'note-icon-video'\n }\n }\n});\n\nimport '../summernote'; // eslint-disable-line\n"],"names":["$","isEmpty","Codeview"],"mappings":"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"}PKf[�\���]�]�dist/summernote-bs4.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(t.jQuery)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e=function(){function e(t,e,o,n){this.markup=t,this.children=e,this.options=o,this.callback=n}return e.prototype.render=function(e){var o=t(this.markup);if(this.options&&this.options.contents&&o.html(this.options.contents),this.options&&this.options.className&&o.addClass(this.options.className),this.options&&this.options.data&&t.each(this.options.data,function(t,e){o.attr("data-"+t,e)}),this.options&&this.options.click&&o.on("click",this.options.click),this.children){var n=o.find(".note-children-container");this.children.forEach(function(t){t.render(n.length?n:o)})}return this.callback&&this.callback(o,this.options),this.options&&this.options.callback&&this.options.callback(o),e&&e.append(o),o},e}(),o=function(o,n){return function(){var i="object"==typeof arguments[1]?arguments[1]:arguments[0],r=t.isArray(arguments[0])?arguments[0]:[];return i&&i.children&&(r=i.children),new e(o,r,i,n)}},n=o('<div class="note-editor note-frame card"/>'),i=o('<div class="note-toolbar-wrapper"><div class="note-toolbar card-header" role="toolbar"></div></div>'),r=o('<div class="note-editing-area"/>'),s=o('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'),a=o('<div class="note-editable card-block" contentEditable="true" role="textbox" aria-multiline="true"/>'),l=o(['<output class="note-status-output" aria-live="polite"/>','<div class="note-statusbar" role="status">',' <output class="note-status-output" aria-live="polite"></output>',' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>'," </div>","</div>"].join("")),c=o('<div class="note-editor"/>'),d=o(['<output class="note-status-output" aria-live="polite"/>','<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'].join("")),u=o('<div class="note-btn-group btn-group">'),h=o('<div class="dropdown-menu" role="list">',function(e,o){var n=t.isArray(o.items)?o.items.map(function(t){var e="string"==typeof t?t:t.value||"",n=o.template?o.template(t):t,i="object"==typeof t?t.option:void 0;return'<a class="dropdown-item" href="#" '+('data-value="'+e+'"'+(void 0!==i?' data-option="'+i+'"':""))+' role="listitem" aria-label="'+t+'">'+n+"</a>"}).join(""):o.items;e.html(n).attr({"aria-label":o.title})}),p=o('<div class="dropdown-menu note-check" role="list">',function(e,o){var n=t.isArray(o.items)?o.items.map(function(t){var e="string"==typeof t?t:t.value||"",n=o.template?o.template(t):t;return'<a class="dropdown-item" href="#" data-value="'+e+'" role="listitem" aria-label="'+t+'">'+b(o.checkClassName)+" "+n+"</a>"}).join(""):o.items;e.html(n).attr({"aria-label":o.title})}),f=o('<div class="note-color-palette"/>',function(t,e){for(var o=[],n=0,i=e.colors.length;n<i;n++){for(var r=e.eventName,s=e.colors[n],a=e.colorsName[n],l=[],c=0,d=s.length;c<d;c++){var u=s[c],h=a[c];l.push(['<button type="button" class="note-color-btn"','style="background-color:',u,'" ','data-event="',r,'" ','data-value="',u,'" ','title="',h,'" ','aria-label="',h,'" ','data-toggle="button" tabindex="-1"></button>'].join(""))}o.push('<div class="note-color-row">'+l.join("")+"</div>")}t.html(o.join("")),e.tooltip&&t.find(".note-color-btn").tooltip({container:e.container,trigger:"hover",placement:"bottom"})}),m=o('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>',function(t,e){e.fade&&t.addClass("fade"),t.attr({"aria-label":e.title}),t.html(['<div class="modal-dialog">',' <div class="modal-content">',e.title?' <div class="modal-header"> <h4 class="modal-title">'+e.title+'</h4> <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button> </div>':"",' <div class="modal-body">'+e.body+"</div>",e.footer?' <div class="modal-footer">'+e.footer+"</div>":""," </div>","</div>"].join(""))}),g=o(['<div class="note-popover popover in">',' <div class="arrow"/>',' <div class="popover-content note-children-container"/>',"</div>"].join(""),function(t,e){var o=void 0!==e.direction?e.direction:"bottom";t.addClass(o),e.hideArrow&&t.find(".arrow").hide()}),v=o('<label class="custom-control custom-checkbox"></label>',function(t,e){e.id&&t.attr("for",e.id),t.html([' <input role="checkbox" type="checkbox" class="custom-control-input"'+(e.id?' id="'+e.id+'"':""),e.checked?" checked":"",' aria-checked="'+(e.checked?"true":"false")+'"/>',' <span class="custom-control-indicator"></span>',' <span class="custom-control-description">'+(e.text?e.text:"")+"</span>","</label>"].join(""))}),b=function(t,e){return"<"+(e=e||"i")+' class="'+t+'"/>'},y={editor:n,toolbar:i,editingArea:r,codable:s,editable:a,statusbar:l,airEditor:c,airEditable:d,buttonGroup:u,dropdown:h,dropdownButtonContents:function(t){return t},dropdownCheck:p,palette:f,dialog:m,popover:g,icon:b,checkbox:v,options:{},button:function(t,e){return o('<button type="button" class="note-btn btn btn-light btn-sm" role="button" tabindex="-1">',function(t,e){e&&e.tooltip&&t.attr({title:e.tooltip,"aria-label":e.tooltip}).tooltip({container:e.container,trigger:"hover",placement:"bottom"})})(t,e)},toggleBtn:function(t,e){t.toggleClass("disabled",!e),t.attr("disabled",!e)},toggleBtnActive:function(t,e){t.toggleClass("active",e)},onDialogShown:function(t,e){t.one("shown.bs.modal",e)},onDialogHidden:function(t,e){t.one("hidden.bs.modal",e)},showDialog:function(t){t.modal("show")},hideDialog:function(t){t.modal("hide")},createLayout:function(t,e){var o=(e.airMode?y.airEditor([y.editingArea([y.airEditable()])]):y.editor([y.toolbar(),y.editingArea([y.codable(),y.editable()]),y.statusbar()])).render();return o.insertAfter(t),{note:t,editor:o,toolbar:o.find(".note-toolbar"),editingArea:o.find(".note-editing-area"),editable:o.find(".note-editable"),codable:o.find(".note-codable"),statusbar:o.find(".note-statusbar")}},removeLayout:function(t,e){t.html(e.editable.html()),e.editor.remove(),t.show()}};var k=0;var C={eq:function(t){return function(e){return t===e}},eq2:function(t,e){return t===e},peq2:function(t){return function(e,o){return e[t]===o[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(o){return t(o)&&e(o)}},invoke:function(t,e){return function(){return t[e].apply(t,arguments)}},uniqueId:function(t){var e=++k+"";return t?t+e:e},rect2bnd:function(t){var e=$(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 o in t)t.hasOwnProperty(o)&&(e[t[o]]=o);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,o){var n,i=this;return function(){var r=i,s=arguments,a=o&&!n;clearTimeout(n),n=setTimeout(function(){n=null,o||t.apply(r,s)},e),a&&t.apply(r,s)}}};function w(t){return t[0]}function x(t){return t[t.length-1]}function S(t){return t.slice(1)}function T(e,o){return t.inArray(o,e)}function I(t,e){return-1!==T(t,e)}var N={head:w,last:x,initial:function(t){return t.slice(0,t.length-1)},tail:S,prev:function(t,e){var o=T(t,e);return-1===o?null:t[o-1]},next:function(t,e){var o=T(t,e);return-1===o?null:t[o+1]},find:function(t,e){for(var o=0,n=t.length;o<n;o++){var i=t[o];if(e(i))return i}},contains:I,all:function(t,e){for(var o=0,n=t.length;o<n;o++)if(!e(t[o]))return!1;return!0},sum:function(t,e){return e=e||C.self,t.reduce(function(t,o){return t+e(o)},0)},from:function(t){for(var e=[],o=t.length,n=-1;++n<o;)e[n]=t[n];return e},isEmpty:function(t){return!t||!t.length},clusterBy:function(t,e){return t.length?S(t).reduce(function(t,o){var n=x(t);return e(x(n),o)?n[n.length]=o:t[t.length]=[o],t},[[w(t)]]):[]},compact:function(t){for(var e=[],o=0,n=t.length;o<n;o++)t[o]&&e.push(t[o]);return e},unique:function(t){for(var e=[],o=0,n=t.length;o<n;o++)I(e,t[o])||e.push(t[o]);return e}},E="function"==typeof define&&define.amd;var A,R=navigator.userAgent,P=/MSIE|Trident/i.test(R);if(P){var L=/MSIE (\d+[.]\d+)/.exec(R);L&&(A=parseFloat(L[1])),(L=/Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(R))&&(A=parseFloat(L[1]))}var H=/Edge\/\d+/.test(R),D=!!window.CodeMirror;if(!D&&E)if("function"==typeof __webpack_require__)try{require.resolve("codemirror"),D=!0}catch(t){}else if("undefined"!=typeof require)if(void 0!==require.resolve)try{require.resolve("codemirror"),D=!0}catch(t){}else void 0!==require.specified&&(D=require.specified("codemirror"));var F="ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0,B=P||H?"DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted":"input",z={isMac:navigator.appVersion.indexOf("Mac")>-1,isMSIE:P,isEdge:H,isFF:!H&&/firefox/i.test(R),isPhantom:/PhantomJS/i.test(R),isWebkit:!H&&/webkit/i.test(R),isChrome:!H&&/chrome/i.test(R),isSafari:!H&&/safari/i.test(R),browserVersion:A,jqueryVersion:parseFloat(t.fn.jquery),isSupportAmd:E,isSupportTouch:F,hasCodeMirror:D,isFontInstalled:function(e){var o="Comic Sans MS"===e?"Courier New":"Comic Sans MS",n=t("<div>").css({position:"absolute",left:"-9999px",top:"-9999px",fontSize:"200px"}).text("mmmmmmmmmwwwwwww").appendTo(document.body),i=n.css("fontFamily",o).width(),r=n.css("fontFamily",e+","+o).width();return n.remove(),i!==r},isW3CRangeSupport:!!document.createRange,inputEventName:B},M=String.fromCharCode(160);function O(e){return e&&t(e).hasClass("note-editable")}function U(t){return t=t.toUpperCase(),function(e){return e&&e.nodeName.toUpperCase()===t}}function j(t){return t&&3===t.nodeType}function q(t){return t&&/^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(t.nodeName.toUpperCase())}function K(t){return!O(t)&&(t&&/^DIV|^P|^LI|^H[1-7]/.test(t.nodeName.toUpperCase()))}var V=U("PRE"),W=U("LI");var G=U("TABLE"),_=U("DATA");function Z(t){return!(tt(t)||Y(t)||Q(t)||K(t)||G(t)||X(t)||_(t))}function Y(t){return t&&/^UL|^OL/.test(t.nodeName.toUpperCase())}var Q=U("HR");function J(t){return t&&/^TD|^TH/.test(t.nodeName.toUpperCase())}var X=U("BLOCKQUOTE");function tt(t){return J(t)||X(t)||O(t)}var et=U("A");var ot=U("BODY");var nt=z.isMSIE&&z.browserVersion<11?" ":"<br>";function it(t){return j(t)?t.nodeValue.length:t?t.childNodes.length:0}function rt(t){var e=it(t);return 0===e||(!j(t)&&1===e&&t.innerHTML===nt||!(!N.all(t.childNodes,j)||""!==t.innerHTML))}function st(t){q(t)||it(t)||(t.innerHTML=nt)}function at(t,e){for(;t;){if(e(t))return t;if(O(t))break;t=t.parentNode}return null}function lt(t,e){e=e||C.fail;var o=[];return at(t,function(t){return O(t)||o.push(t),e(t)}),o}function ct(t,e){e=e||C.fail;for(var o=[];t&&!e(t);)o.push(t),t=t.nextSibling;return o}function dt(t,e){var o=e.nextSibling,n=e.parentNode;return o?n.insertBefore(t,o):n.appendChild(t),t}function ut(e,o){return t.each(o,function(t,o){e.appendChild(o)}),e}function ht(t){return 0===t.offset}function pt(t){return t.offset===it(t.node)}function ft(t){return ht(t)||pt(t)}function mt(t,e){for(;t&&t!==e;){if(0!==vt(t))return!1;t=t.parentNode}return!0}function gt(t,e){if(!e)return!1;for(;t&&t!==e;){if(vt(t)!==it(t.parentNode)-1)return!1;t=t.parentNode}return!0}function vt(t){for(var e=0;t=t.previousSibling;)e+=1;return e}function bt(t){return!!(t&&t.childNodes&&t.childNodes.length)}function yt(t,e){var o,n;if(0===t.offset){if(O(t.node))return null;o=t.node.parentNode,n=vt(t.node)}else bt(t.node)?n=it(o=t.node.childNodes[t.offset-1]):(o=t.node,n=e?0:t.offset-1);return{node:o,offset:n}}function kt(t,e){var o,n;if(it(t.node)===t.offset){if(O(t.node))return null;o=t.node.parentNode,n=vt(t.node)+1}else bt(t.node)?(o=t.node.childNodes[t.offset],n=0):(o=t.node,n=e?it(t.node):t.offset+1);return{node:o,offset:n}}function Ct(t,e){return t.node===e.node&&t.offset===e.offset}function wt(t,e){var o=e&&e.isSkipPaddingBlankHTML,n=e&&e.isNotSplitEdgePoint;if(ft(t)&&(j(t.node)||n)){if(ht(t))return t.node;if(pt(t))return t.node.nextSibling}if(j(t.node))return t.node.splitText(t.offset);var i=t.node.childNodes[t.offset],r=dt(t.node.cloneNode(!1),t.node);return ut(r,ct(i)),o||(st(t.node),st(r)),r}function xt(t,e,o){var n=lt(e.node,C.eq(t));return n.length?1===n.length?wt(e,o):n.reduce(function(t,n){return t===e.node&&(t=wt(e,o)),wt({node:n,offset:t?vt(t):it(n)},o)}):null}function St(t){return document.createElement(t)}function Tt(t,e){if(t&&t.parentNode){if(t.removeNode)return t.removeNode(e);var o=t.parentNode;if(!e){for(var n=[],i=0,r=t.childNodes.length;i<r;i++)n.push(t.childNodes[i]);for(i=0,r=n.length;i<r;i++)o.insertBefore(n[i],t)}o.removeChild(t)}}var It=U("TEXTAREA");function $t(t,e){var o=It(t[0])?t.val():t.html();return e?o.replace(/[\n\r]/g,""):o}var Nt={NBSP_CHAR:M,ZERO_WIDTH_NBSP_CHAR:"\ufeff",blank:nt,emptyPara:"<p>"+nt+"</p>",makePredByNodeName:U,isEditable:O,isControlSizing:function(e){return e&&t(e).hasClass("note-control-sizing")},isText:j,isElement:function(t){return t&&1===t.nodeType},isVoid:q,isPara:K,isPurePara:function(t){return K(t)&&!W(t)},isHeading:function(t){return t&&/^H[1-7]/.test(t.nodeName.toUpperCase())},isInline:Z,isBlock:C.not(Z),isBodyInline:function(t){return Z(t)&&!at(t,K)},isBody:ot,isParaInline:function(t){return Z(t)&&!!at(t,K)},isPre:V,isList:Y,isTable:G,isData:_,isCell:J,isBlockquote:X,isBodyContainer:tt,isAnchor:et,isDiv:U("DIV"),isLi:W,isBR:U("BR"),isSpan:U("SPAN"),isB:U("B"),isU:U("U"),isS:U("S"),isI:U("I"),isImg:U("IMG"),isTextarea:It,isEmpty:rt,isEmptyAnchor:C.and(et,rt),isClosestSibling:function(t,e){return t.nextSibling===e||t.previousSibling===e},withClosestSiblings:function(t,e){e=e||C.ok;var o=[];return t.previousSibling&&e(t.previousSibling)&&o.push(t.previousSibling),o.push(t),t.nextSibling&&e(t.nextSibling)&&o.push(t.nextSibling),o},nodeLength:it,isLeftEdgePoint:ht,isRightEdgePoint:pt,isEdgePoint:ft,isLeftEdgeOf:mt,isRightEdgeOf:gt,isLeftEdgePointOf:function(t,e){return ht(t)&&mt(t.node,e)},isRightEdgePointOf:function(t,e){return pt(t)&>(t.node,e)},prevPoint:yt,nextPoint:kt,isSamePoint:Ct,isVisiblePoint:function(t){if(j(t.node)||!bt(t.node)||rt(t.node))return!0;var e=t.node.childNodes[t.offset-1],o=t.node.childNodes[t.offset];return!(e&&!q(e)||o&&!q(o))},prevPointUntil:function(t,e){for(;t;){if(e(t))return t;t=yt(t)}return null},nextPointUntil:function(t,e){for(;t;){if(e(t))return t;t=kt(t)}return null},isCharPoint:function(t){if(!j(t.node))return!1;var e=t.node.nodeValue.charAt(t.offset-1);return e&&" "!==e&&e!==M},walkPoint:function(t,e,o,n){for(var i=t;i&&(o(i),!Ct(i,e));)i=kt(i,n&&t.node!==i.node&&e.node!==i.node)},ancestor:at,singleChildAncestor:function(t,e){for(t=t.parentNode;t&&1===it(t);){if(e(t))return t;if(O(t))break;t=t.parentNode}return null},listAncestor:lt,lastAncestor:function(t,e){var o=lt(t);return N.last(o.filter(e))},listNext:ct,listPrev:function(t,e){e=e||C.fail;for(var o=[];t&&!e(t);)o.push(t),t=t.previousSibling;return o},listDescendant:function(t,e){var o=[];return e=e||C.ok,function n(i){t!==i&&e(i)&&o.push(i);for(var r=0,s=i.childNodes.length;r<s;r++)n(i.childNodes[r])}(t),o},commonAncestor:function(e,o){for(var n=lt(e),i=o;i;i=i.parentNode)if(t.inArray(i,n)>-1)return i;return null},wrap:function(e,o){var n=e.parentNode,i=t("<"+o+">")[0];return n.insertBefore(i,e),i.appendChild(e),i},insertAfter:dt,appendChildNodes:ut,position:vt,hasChildren:bt,makeOffsetPath:function(t,e){return lt(e,C.eq(t)).map(vt).reverse()},fromOffsetPath:function(t,e){for(var o=t,n=0,i=e.length;n<i;n++)o=o.childNodes.length<=e[n]?o.childNodes[o.childNodes.length-1]:o.childNodes[e[n]];return o},splitTree:xt,splitPoint:function(t,e){var o,n,i=e?K:tt,r=lt(t.node,i),s=N.last(r)||t.node;i(s)?(o=r[r.length-2],n=s):n=(o=s).parentNode;var a=o&&xt(o,t,{isSkipPaddingBlankHTML:e,isNotSplitEdgePoint:e});return a||n!==t.node||(a=t.node.childNodes[t.offset]),{rightNode:a,container:n}},create:St,createText:function(t){return document.createTextNode(t)},remove:Tt,removeWhile:function(t,e){for(;t&&!O(t)&&e(t);){var o=t.parentNode;Tt(t),t=o}},replace:function(t,e){if(t.nodeName.toUpperCase()===e.toUpperCase())return t;var o=St(e);return t.style.cssText&&(o.style.cssText=t.style.cssText),ut(o,N.from(t.childNodes)),dt(o,t),Tt(t),o},html:function(e,o){var n=$t(e);o&&(n=n.replace(/<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g,function(t,e,o){o=o.toUpperCase();var n=/^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(o)&&!!e,i=/^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(o);return t+(n||i?"\n":"")}),n=t.trim(n));return n},value:$t,posFromPlaceholder:function(e){var o=t(e),n=o.offset(),i=o.outerHeight(!0);return{left:n.left,top:n.top+i}},attachEvents:function(t,e){Object.keys(e).forEach(function(o){t.on(o,e[o])})},detachEvents:function(t,e){Object.keys(e).forEach(function(o){t.off(o,e[o])})},isCustomStyleTag:function(t){return t&&!j(t)&&N.contains(t.classList,"note-styletag")}};t.summernote=t.summernote||{lang:{}},t.extend(t.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"},image:{image:"Picture",insert:"Insert Image",resizeFull:"Resize Full",resizeHalf:"Resize Half",resizeQuarter:"Resize Quarter",floatLeft:"Float Left",floatRight:"Float Right",floatNone:"Float None",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"},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:"Foreground Color",transparent:"Transparent",setTransparent:"Set transparent",reset:"Reset",resetToDefault:"Reset to default"},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"}}});var Et={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},At={isEdit:function(t){return N.contains([Et.BACKSPACE,Et.TAB,Et.ENTER,Et.SPACE,Et.DELETE],t)},isMove:function(t){return N.contains([Et.LEFT,Et.UP,Et.RIGHT,Et.DOWN],t)},nameFromCode:C.invertObject(Et),code:Et};function Rt(t,e){var o,n,i=t.parentElement(),r=document.body.createTextRange(),s=N.from(i.childNodes);for(o=0;o<s.length;o++)if(!Nt.isText(s[o])){if(r.moveToElementText(s[o]),r.compareEndPoints("StartToStart",t)>=0)break;n=s[o]}if(0!==o&&Nt.isText(s[o-1])){var a=document.body.createTextRange(),l=null;a.moveToElementText(n||i),a.collapse(!n),l=n?n.nextSibling:i.firstChild;var c=t.duplicate();c.setEndPoint("StartToStart",a);for(var d=c.text.replace(/[\r\n]/g,"").length;d>l.nodeValue.length&&l.nextSibling;)d-=l.nodeValue.length,l=l.nextSibling;l.nodeValue;e&&l.nextSibling&&Nt.isText(l.nextSibling)&&d===l.nodeValue.length&&(d-=l.nodeValue.length,l=l.nextSibling),i=l,o=d}return{cont:i,offset:o}}function Pt(t){var e=function(t,o){var n,i;if(Nt.isText(t)){var r=Nt.listPrev(t,C.not(Nt.isText)),s=N.last(r).previousSibling;n=s||t.parentNode,o+=N.sum(N.tail(r),Nt.nodeLength),i=!s}else{if(n=t.childNodes[o]||t,Nt.isText(n))return e(n,0);o=0,i=!1}return{node:n,collapseToStart:i,offset:o}},o=document.body.createTextRange(),n=e(t.node,t.offset);return o.moveToElementText(n.node),o.collapse(n.collapseToStart),o.moveStart("character",n.offset),o}var Lt=function(){function e(t,e,o,n){this.sc=t,this.so=e,this.ec=o,this.eo=n,this.isOnEditable=this.makeIsOn(Nt.isEditable),this.isOnList=this.makeIsOn(Nt.isList),this.isOnAnchor=this.makeIsOn(Nt.isAnchor),this.isOnCell=this.makeIsOn(Nt.isCell),this.isOnData=this.makeIsOn(Nt.isData)}return e.prototype.nativeRange=function(){if(z.isW3CRangeSupport){var t=document.createRange();return t.setStart(this.sc,this.so),t.setEnd(this.ec,this.eo),t}var e=Pt({node:this.sc,offset:this.so});return e.setEndPoint("EndToEnd",Pt({node:this.ec,offset:this.eo})),e},e.prototype.getPoints=function(){return{sc:this.sc,so:this.so,ec:this.ec,eo:this.eo}},e.prototype.getStartPoint=function(){return{node:this.sc,offset:this.so}},e.prototype.getEndPoint=function(){return{node:this.ec,offset:this.eo}},e.prototype.select=function(){var t=this.nativeRange();if(z.isW3CRangeSupport){var e=document.getSelection();e.rangeCount>0&&e.removeAllRanges(),e.addRange(t)}else t.select();return this},e.prototype.scrollIntoView=function(e){var o=t(e).height();return e.scrollTop+o<this.sc.offsetTop&&(e.scrollTop+=Math.abs(e.scrollTop+o-this.sc.offsetTop)),this},e.prototype.normalize=function(){var t=function(t,e){if(Nt.isVisiblePoint(t)&&!Nt.isEdgePoint(t)||Nt.isVisiblePoint(t)&&Nt.isRightEdgePoint(t)&&!e||Nt.isVisiblePoint(t)&&Nt.isLeftEdgePoint(t)&&e||Nt.isVisiblePoint(t)&&Nt.isBlock(t.node)&&Nt.isEmpty(t.node))return t;var o=Nt.ancestor(t.node,Nt.isBlock);if((Nt.isLeftEdgePointOf(t,o)||Nt.isVoid(Nt.prevPoint(t).node))&&!e||(Nt.isRightEdgePointOf(t,o)||Nt.isVoid(Nt.nextPoint(t).node))&&e){if(Nt.isVisiblePoint(t))return t;e=!e}return(e?Nt.nextPointUntil(Nt.nextPoint(t),Nt.isVisiblePoint):Nt.prevPointUntil(Nt.prevPoint(t),Nt.isVisiblePoint))||t},o=t(this.getEndPoint(),!1),n=this.isCollapsed()?o:t(this.getStartPoint(),!0);return new e(n.node,n.offset,o.node,o.offset)},e.prototype.nodes=function(t,e){t=t||C.ok;var o=e&&e.includeAncestor,n=e&&e.fullyContains,i=this.getStartPoint(),r=this.getEndPoint(),s=[],a=[];return Nt.walkPoint(i,r,function(e){var i;Nt.isEditable(e.node)||(n?(Nt.isLeftEdgePoint(e)&&a.push(e.node),Nt.isRightEdgePoint(e)&&N.contains(a,e.node)&&(i=e.node)):i=o?Nt.ancestor(e.node,t):e.node,i&&t(i)&&s.push(i))},!0),N.unique(s)},e.prototype.commonAncestor=function(){return Nt.commonAncestor(this.sc,this.ec)},e.prototype.expand=function(t){var o=Nt.ancestor(this.sc,t),n=Nt.ancestor(this.ec,t);if(!o&&!n)return new e(this.sc,this.so,this.ec,this.eo);var i=this.getPoints();return o&&(i.sc=o,i.so=0),n&&(i.ec=n,i.eo=Nt.nodeLength(n)),new e(i.sc,i.so,i.ec,i.eo)},e.prototype.collapse=function(t){return t?new e(this.sc,this.so,this.sc,this.so):new e(this.ec,this.eo,this.ec,this.eo)},e.prototype.splitText=function(){var t=this.sc===this.ec,o=this.getPoints();return Nt.isText(this.ec)&&!Nt.isEdgePoint(this.getEndPoint())&&this.ec.splitText(this.eo),Nt.isText(this.sc)&&!Nt.isEdgePoint(this.getStartPoint())&&(o.sc=this.sc.splitText(this.so),o.so=0,t&&(o.ec=o.sc,o.eo=this.eo-this.so)),new e(o.sc,o.so,o.ec,o.eo)},e.prototype.deleteContents=function(){if(this.isCollapsed())return this;var o=this.splitText(),n=o.nodes(null,{fullyContains:!0}),i=Nt.prevPointUntil(o.getStartPoint(),function(t){return!N.contains(n,t.node)}),r=[];return t.each(n,function(t,e){var o=e.parentNode;i.node!==o&&1===Nt.nodeLength(o)&&r.push(o),Nt.remove(e,!1)}),t.each(r,function(t,e){Nt.remove(e,!1)}),new e(i.node,i.offset,i.node,i.offset).normalize()},e.prototype.makeIsOn=function(t){return function(){var e=Nt.ancestor(this.sc,t);return!!e&&e===Nt.ancestor(this.ec,t)}},e.prototype.isLeftEdgeOf=function(t){if(!Nt.isLeftEdgePoint(this.getStartPoint()))return!1;var e=Nt.ancestor(this.sc,t);return e&&Nt.isLeftEdgeOf(this.sc,e)},e.prototype.isCollapsed=function(){return this.sc===this.ec&&this.so===this.eo},e.prototype.wrapBodyInlineWithPara=function(){if(Nt.isBodyContainer(this.sc)&&Nt.isEmpty(this.sc))return this.sc.innerHTML=Nt.emptyPara,new e(this.sc.firstChild,0,this.sc.firstChild,0);var t,o=this.normalize();if(Nt.isParaInline(this.sc)||Nt.isPara(this.sc))return o;if(Nt.isInline(o.sc)){var n=Nt.listAncestor(o.sc,C.not(Nt.isInline));t=N.last(n),Nt.isInline(t)||(t=n[n.length-2]||o.sc.childNodes[o.so])}else t=o.sc.childNodes[o.so>0?o.so-1:0];var i=Nt.listPrev(t,Nt.isParaInline).reverse();if((i=i.concat(Nt.listNext(t.nextSibling,Nt.isParaInline))).length){var r=Nt.wrap(N.head(i),"p");Nt.appendChildNodes(r,N.tail(i))}return this.normalize()},e.prototype.insertNode=function(t){var e=this.wrapBodyInlineWithPara().deleteContents(),o=Nt.splitPoint(e.getStartPoint(),Nt.isInline(t));return o.rightNode?o.rightNode.parentNode.insertBefore(t,o.rightNode):o.container.appendChild(t),t},e.prototype.pasteHTML=function(e){var o=t("<div></div>").html(e)[0],n=N.from(o.childNodes),i=this.wrapBodyInlineWithPara().deleteContents();return n.reverse().map(function(t){return i.insertNode(t)}).reverse()},e.prototype.toString=function(){var t=this.nativeRange();return z.isW3CRangeSupport?t.toString():t.text},e.prototype.getWordRange=function(t){var o=this.getEndPoint();if(!Nt.isCharPoint(o))return this;var n=Nt.prevPointUntil(o,function(t){return!Nt.isCharPoint(t)});return t&&(o=Nt.nextPointUntil(o,function(t){return!Nt.isCharPoint(t)})),new e(n.node,n.offset,o.node,o.offset)},e.prototype.bookmark=function(t){return{s:{path:Nt.makeOffsetPath(t,this.sc),offset:this.so},e:{path:Nt.makeOffsetPath(t,this.ec),offset:this.eo}}},e.prototype.paraBookmark=function(t){return{s:{path:N.tail(Nt.makeOffsetPath(N.head(t),this.sc)),offset:this.so},e:{path:N.tail(Nt.makeOffsetPath(N.last(t),this.ec)),offset:this.eo}}},e.prototype.getClientRects=function(){return this.nativeRange().getClientRects()},e}(),Ht={create:function(t,e,o,n){if(4===arguments.length)return new Lt(t,e,o,n);if(2===arguments.length)return new Lt(t,e,o=t,n=e);var i=this.createFromSelection();return i||1!==arguments.length?i:(i=this.createFromNode(arguments[0])).collapse(Nt.emptyPara===arguments[0].innerHTML)},createFromSelection:function(){var t,e,o,n;if(z.isW3CRangeSupport){var i=document.getSelection();if(!i||0===i.rangeCount)return null;if(Nt.isBody(i.anchorNode))return null;var r=i.getRangeAt(0);t=r.startContainer,e=r.startOffset,o=r.endContainer,n=r.endOffset}else{var s=document.selection.createRange(),a=s.duplicate();a.collapse(!1);var l=s;l.collapse(!0);var c=Rt(l,!0),d=Rt(a,!1);Nt.isText(c.node)&&Nt.isLeftEdgePoint(c)&&Nt.isTextNode(d.node)&&Nt.isRightEdgePoint(d)&&d.node.nextSibling===c.node&&(c=d),t=c.cont,e=c.offset,o=d.cont,n=d.offset}return new Lt(t,e,o,n)},createFromNode:function(t){var e=t,o=0,n=t,i=Nt.nodeLength(n);return Nt.isVoid(e)&&(o=Nt.listPrev(e).length-1,e=e.parentNode),Nt.isBR(n)?(i=Nt.listPrev(n).length-1,n=n.parentNode):Nt.isVoid(n)&&(i=Nt.listPrev(n).length,n=n.parentNode),this.create(e,o,n,i)},createFromNodeBefore:function(t){return this.createFromNode(t).collapse(!0)},createFromNodeAfter:function(t){return this.createFromNode(t).collapse()},createFromBookmark:function(t,e){var o=Nt.fromOffsetPath(t,e.s.path),n=e.s.offset,i=Nt.fromOffsetPath(t,e.e.path),r=e.e.offset;return new Lt(o,n,i,r)},createFromParaBookmark:function(t,e){var o=t.s.offset,n=t.e.offset,i=Nt.fromOffsetPath(N.head(e),t.s.path),r=Nt.fromOffsetPath(N.last(e),t.e.path);return new Lt(i,o,r,n)}};var Dt=function(){function t(t){this.stack=[],this.stackOffset=-1,this.$editable=t,this.editable=t[0]}return t.prototype.makeSnapshot=function(){var t=Ht.create(this.editable);return{contents:this.$editable.html(),bookmark:t?t.bookmark(this.editable):{s:{path:[],offset:0},e:{path:[],offset:0}}}},t.prototype.applySnapshot=function(t){null!==t.contents&&this.$editable.html(t.contents),null!==t.bookmark&&Ht.createFromBookmark(this.editable,t.bookmark).select()},t.prototype.rewind=function(){this.$editable.html()!==this.stack[this.stackOffset].contents&&this.recordUndo(),this.stackOffset=0,this.applySnapshot(this.stack[this.stackOffset])},t.prototype.reset=function(){this.stack=[],this.stackOffset=-1,this.$editable.html(""),this.recordUndo()},t.prototype.undo=function(){this.$editable.html()!==this.stack[this.stackOffset].contents&&this.recordUndo(),this.stackOffset>0&&(this.stackOffset--,this.applySnapshot(this.stack[this.stackOffset]))},t.prototype.redo=function(){this.stack.length-1>this.stackOffset&&(this.stackOffset++,this.applySnapshot(this.stack[this.stackOffset]))},t.prototype.recordUndo=function(){this.stackOffset++,this.stack.length>this.stackOffset&&(this.stack=this.stack.slice(0,this.stackOffset)),this.stack.push(this.makeSnapshot())},t}(),Ft=function(){function e(){}return e.prototype.jQueryCSS=function(e,o){if(z.jqueryVersion<1.9){var n={};return t.each(o,function(t,o){n[o]=e.css(o)}),n}return e.css(o)},e.prototype.fromNode=function(t){var e=this.jQueryCSS(t,["font-family","font-size","text-align","list-style-type","line-height"])||{};return e["font-size"]=parseInt(e["font-size"],10),e},e.prototype.stylePara=function(e,o){t.each(e.nodes(Nt.isPara,{includeAncestor:!0}),function(e,n){t(n).css(o)})},e.prototype.styleNodes=function(e,o){e=e.splitText();var n=o&&o.nodeName||"SPAN",i=!(!o||!o.expandClosestSibling),r=!(!o||!o.onlyPartialContains);if(e.isCollapsed())return[e.insertNode(Nt.create(n))];var s=Nt.makePredByNodeName(n),a=e.nodes(Nt.isText,{fullyContains:!0}).map(function(t){return Nt.singleChildAncestor(t,s)||Nt.wrap(t,n)});if(i){if(r){var l=e.nodes();s=C.and(s,function(t){return N.contains(l,t)})}return a.map(function(e){var o=Nt.withClosestSiblings(e,s),n=N.head(o),i=N.tail(o);return t.each(i,function(t,e){Nt.appendChildNodes(n,e.childNodes),Nt.remove(e)}),N.head(o)})}return a},e.prototype.current=function(e){var o=t(Nt.isElement(e.sc)?e.sc:e.sc.parentNode),n=this.fromNode(o);try{n=t.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(e.isOnList()){var i=t.inArray(n["list-style-type"],["circle","disc","disc-leading-zero","square"])>-1;n["list-style"]=i?"unordered":"ordered"}else n["list-style"]="none";var r=Nt.ancestor(e.sc,Nt.isPara);if(r&&r.style["line-height"])n["line-height"]=r.style.lineHeight;else{var s=parseInt(n["line-height"],10)/parseInt(n["font-size"],10);n["line-height"]=s.toFixed(1)}return n.anchor=e.isOnAnchor()&&Nt.ancestor(e.sc,Nt.isAnchor),n.ancestors=Nt.listAncestor(e.sc,Nt.isEditable),n.range=e,n},e}(),Bt=function(){function e(){}return e.prototype.insertOrderedList=function(t){this.toggleList("OL",t)},e.prototype.insertUnorderedList=function(t){this.toggleList("UL",t)},e.prototype.indent=function(e){var o=this,n=Ht.create(e).wrapBodyInlineWithPara(),i=n.nodes(Nt.isPara,{includeAncestor:!0}),r=N.clusterBy(i,C.peq2("parentNode"));t.each(r,function(e,n){var i=N.head(n);Nt.isLi(i)?o.wrapList(n,i.parentNode.nodeName):t.each(n,function(e,o){t(o).css("marginLeft",function(t,e){return(parseInt(e,10)||0)+25})})}),n.select()},e.prototype.outdent=function(e){var o=this,n=Ht.create(e).wrapBodyInlineWithPara(),i=n.nodes(Nt.isPara,{includeAncestor:!0}),r=N.clusterBy(i,C.peq2("parentNode"));t.each(r,function(e,n){var i=N.head(n);Nt.isLi(i)?o.releaseList([n]):t.each(n,function(e,o){t(o).css("marginLeft",function(t,e){return(e=parseInt(e,10)||0)>25?e-25:""})})}),n.select()},e.prototype.toggleList=function(e,o){var n=this,i=Ht.create(o).wrapBodyInlineWithPara(),r=i.nodes(Nt.isPara,{includeAncestor:!0}),s=i.paraBookmark(r),a=N.clusterBy(r,C.peq2("parentNode"));if(N.find(r,Nt.isPurePara)){var l=[];t.each(a,function(t,o){l=l.concat(n.wrapList(o,e))}),r=l}else{var c=i.nodes(Nt.isList,{includeAncestor:!0}).filter(function(o){return!t.nodeName(o,e)});c.length?t.each(c,function(t,o){Nt.replace(o,e)}):r=this.releaseList(a,!0)}Ht.createFromParaBookmark(s,r).select()},e.prototype.wrapList=function(t,e){var o=N.head(t),n=N.last(t),i=Nt.isList(o.previousSibling)&&o.previousSibling,r=Nt.isList(n.nextSibling)&&n.nextSibling,s=i||Nt.insertAfter(Nt.create(e||"UL"),n);return t=t.map(function(t){return Nt.isPurePara(t)?Nt.replace(t,"LI"):t}),Nt.appendChildNodes(s,t),r&&(Nt.appendChildNodes(s,N.from(r.childNodes)),Nt.remove(r)),t},e.prototype.releaseList=function(e,o){var n=[];return t.each(e,function(e,i){var r=N.head(i),s=N.last(i),a=o?Nt.lastAncestor(r,Nt.isList):r.parentNode,l=a.childNodes.length>1?Nt.splitTree(a,{node:s.parentNode,offset:Nt.position(s)+1},{isSkipPaddingBlankHTML:!0}):null,c=Nt.splitTree(a,{node:r.parentNode,offset:Nt.position(r)},{isSkipPaddingBlankHTML:!0});i=o?Nt.listDescendant(c,Nt.isLi):N.from(c.childNodes).filter(Nt.isLi),!o&&Nt.isList(a.parentNode)||(i=i.map(function(t){return Nt.replace(t,"P")})),t.each(N.from(i).reverse(),function(t,e){Nt.insertAfter(e,a)});var d=N.compact([a,c,l]);t.each(d,function(e,o){var n=[o].concat(Nt.listDescendant(o,Nt.isList));t.each(n.reverse(),function(t,e){Nt.nodeLength(e)||Nt.remove(e,!0)})}),n=n.concat(i)}),n},e}(),zt=function(){function e(){this.bullet=new Bt}return e.prototype.insertTab=function(t,e){var o=Nt.createText(new Array(e+1).join(Nt.NBSP_CHAR));(t=t.deleteContents()).insertNode(o,!0),(t=Ht.create(o,e)).select()},e.prototype.insertParagraph=function(e){var o=Ht.create(e);o=(o=o.deleteContents()).wrapBodyInlineWithPara();var n,i=Nt.ancestor(o.sc,Nt.isPara);if(i){if(Nt.isEmpty(i)&&Nt.isLi(i))return void this.bullet.toggleList(i.parentNode.nodeName);if(Nt.isEmpty(i)&&Nt.isPara(i)&&Nt.isBlockquote(i.parentNode))Nt.insertAfter(i,i.parentNode),n=i;else{n=Nt.splitTree(i,o.getStartPoint());var r=Nt.listDescendant(i,Nt.isEmptyAnchor);r=r.concat(Nt.listDescendant(n,Nt.isEmptyAnchor)),t.each(r,function(t,e){Nt.remove(e)}),(Nt.isHeading(n)||Nt.isPre(n)||Nt.isCustomStyleTag(n))&&Nt.isEmpty(n)&&(n=Nt.replace(n,"p"))}}else{var s=o.sc.childNodes[o.so];n=t(Nt.emptyPara)[0],s?o.sc.insertBefore(n,s):o.sc.appendChild(n)}Ht.create(n,0).normalize().select().scrollIntoView(e)},e}(),Mt=function(t,e,o,n){var i={colPos:0,rowPos:0},r=[],s=[];function a(t,e,o,n,i,s,a){var l={baseRow:o,baseCell:n,isRowSpan:i,isColSpan:s,isVirtual:a};r[t]||(r[t]=[]),r[t][e]=l}function l(t,e){if(!r[t])return e;if(!r[t][e])return e;for(var o=e;r[t][o];)if(o++,!r[t][o])return o}function c(t,e){var o=l(t.rowIndex,e.cellIndex),n=e.colSpan>1,r=e.rowSpan>1,s=t.rowIndex===i.rowPos&&e.cellIndex===i.colPos;a(t.rowIndex,o,t,e,r,n,!1);var c=e.attributes.rowSpan?parseInt(e.attributes.rowSpan.value,10):0;if(c>1)for(var u=1;u<c;u++){var h=t.rowIndex+u;d(h,o,e,s),a(h,o,t,e,!0,n,!0)}var p=e.attributes.colSpan?parseInt(e.attributes.colSpan.value,10):0;if(p>1)for(var f=1;f<p;f++){var m=l(t.rowIndex,o+f);d(t.rowIndex,m,e,s),a(t.rowIndex,m,t,e,r,!0,!0)}}function d(t,e,o,n){t===i.rowPos&&i.colPos>=o.cellIndex&&o.cellIndex<=e&&!n&&i.colPos++}function u(t){switch(e){case Mt.where.Column:if(t.isColSpan)return Mt.resultAction.SubtractSpanCount;break;case Mt.where.Row:if(!t.isVirtual&&t.isRowSpan)return Mt.resultAction.AddCell;if(t.isRowSpan)return Mt.resultAction.SubtractSpanCount}return Mt.resultAction.RemoveCell}function h(t){switch(e){case Mt.where.Column:if(t.isColSpan)return Mt.resultAction.SumSpanCount;if(t.isRowSpan&&t.isVirtual)return Mt.resultAction.Ignore;break;case Mt.where.Row:if(t.isRowSpan)return Mt.resultAction.SumSpanCount;if(t.isColSpan&&t.isVirtual)return Mt.resultAction.Ignore}return Mt.resultAction.AddCell}this.getActionList=function(){for(var t,n,a,l=e===Mt.where.Row?i.rowPos:-1,c=e===Mt.where.Column?i.colPos:-1,d=0,p=!0;p;){var f=l>=0?l:d,m=c>=0?c:d,g=r[f];if(!g)return p=!1,s;var v=g[m];if(!v)return p=!1,s;var b=Mt.resultAction.Ignore;switch(o){case Mt.requestAction.Add:b=h(v);break;case Mt.requestAction.Delete:b=u(v)}s.push((t=b,n=f,a=m,{baseCell:v.baseCell,action:t,virtualTable:{rowIndex:n,cellIndex:a}})),d++}return s},t&&t.tagName&&("td"===t.tagName.toLowerCase()||"th"===t.tagName.toLowerCase())?(i.colPos=t.cellIndex,t.parentElement&&t.parentElement.tagName&&"tr"===t.parentElement.tagName.toLowerCase()?i.rowPos=t.parentElement.rowIndex:console.error("Impossible to identify start Row point.",t)):console.error("Impossible to identify start Cell point.",t),function(){for(var t=n.rows,e=0;e<t.length;e++)for(var o=t[e].cells,i=0;i<o.length;i++)c(t[e],o[i])}()};Mt.where={Row:0,Column:1},Mt.requestAction={Add:0,Delete:1},Mt.resultAction={Ignore:0,SubtractSpanCount:1,RemoveCell:2,AddCell:3,SumSpanCount:4};var Ot,Ut=function(){function e(){}return e.prototype.tab=function(t,e){var o=Nt.ancestor(t.commonAncestor(),Nt.isCell),n=Nt.ancestor(o,Nt.isTable),i=Nt.listDescendant(n,Nt.isCell),r=N[e?"prev":"next"](i,o);r&&Ht.create(r,0).select()},e.prototype.addRow=function(e,o){for(var n=Nt.ancestor(e.commonAncestor(),Nt.isCell),i=t(n).closest("tr"),r=this.recoverAttributes(i),s=t("<tr"+r+"></tr>"),a=new Mt(n,Mt.where.Row,Mt.requestAction.Add,t(i).closest("table")[0]).getActionList(),l=0;l<a.length;l++){var c=a[l],d=this.recoverAttributes(c.baseCell);switch(c.action){case Mt.resultAction.AddCell:s.append("<td"+d+">"+Nt.blank+"</td>");break;case Mt.resultAction.SumSpanCount:if("top"===o)if((c.baseCell.parent?c.baseCell.closest("tr").rowIndex:0)<=i[0].rowIndex){var u=t("<div></div>").append(t("<td"+d+">"+Nt.blank+"</td>").removeAttr("rowspan")).html();s.append(u);break}var h=parseInt(c.baseCell.rowSpan,10);h++,c.baseCell.setAttribute("rowSpan",h)}}if("top"===o)i.before(s);else{if(n.rowSpan>1){var p=i[0].rowIndex+(n.rowSpan-2);return void t(t(i).parent().find("tr")[p]).after(t(s))}i.after(s)}},e.prototype.addCol=function(e,o){var n=Nt.ancestor(e.commonAncestor(),Nt.isCell),i=t(n).closest("tr");t(i).siblings().push(i);for(var r=new Mt(n,Mt.where.Column,Mt.requestAction.Add,t(i).closest("table")[0]).getActionList(),s=0;s<r.length;s++){var a=r[s],l=this.recoverAttributes(a.baseCell);switch(a.action){case Mt.resultAction.AddCell:"right"===o?t(a.baseCell).after("<td"+l+">"+Nt.blank+"</td>"):t(a.baseCell).before("<td"+l+">"+Nt.blank+"</td>");break;case Mt.resultAction.SumSpanCount:if("right"===o){var c=parseInt(a.baseCell.colSpan,10);c++,a.baseCell.setAttribute("colSpan",c)}else t(a.baseCell).before("<td"+l+">"+Nt.blank+"</td>")}}},e.prototype.recoverAttributes=function(t){var e="";if(!t)return e;for(var o=t.attributes||[],n=0;n<o.length;n++)"id"!==o[n].name.toLowerCase()&&o[n].specified&&(e+=" "+o[n].name+"='"+o[n].value+"'");return e},e.prototype.deleteRow=function(e){for(var o=Nt.ancestor(e.commonAncestor(),Nt.isCell),n=t(o).closest("tr"),i=n.children("td, th").index(t(o)),r=n[0].rowIndex,s=new Mt(o,Mt.where.Row,Mt.requestAction.Delete,t(n).closest("table")[0]).getActionList(),a=0;a<s.length;a++)if(s[a]){var l=s[a].baseCell,c=s[a].virtualTable,d=l.rowSpan&&l.rowSpan>1,u=d?parseInt(l.rowSpan,10):0;switch(s[a].action){case Mt.resultAction.Ignore:continue;case Mt.resultAction.AddCell:var h=n.next("tr")[0];if(!h)continue;var p=n[0].cells[i];d&&(u>2?(u--,h.insertBefore(p,h.cells[i]),h.cells[i].setAttribute("rowSpan",u),h.cells[i].innerHTML=""):2===u&&(h.insertBefore(p,h.cells[i]),h.cells[i].removeAttribute("rowSpan"),h.cells[i].innerHTML=""));continue;case Mt.resultAction.SubtractSpanCount:d&&(u>2?(u--,l.setAttribute("rowSpan",u),c.rowIndex!==r&&l.cellIndex===i&&(l.innerHTML="")):2===u&&(l.removeAttribute("rowSpan"),c.rowIndex!==r&&l.cellIndex===i&&(l.innerHTML="")));continue;case Mt.resultAction.RemoveCell:continue}}n.remove()},e.prototype.deleteCol=function(e){for(var o=Nt.ancestor(e.commonAncestor(),Nt.isCell),n=t(o).closest("tr"),i=n.children("td, th").index(t(o)),r=new Mt(o,Mt.where.Column,Mt.requestAction.Delete,t(n).closest("table")[0]).getActionList(),s=0;s<r.length;s++)if(r[s])switch(r[s].action){case Mt.resultAction.Ignore:continue;case Mt.resultAction.SubtractSpanCount:var a=r[s].baseCell;if(a.colSpan&&a.colSpan>1){var l=a.colSpan?parseInt(a.colSpan,10):0;l>2?(l--,a.setAttribute("colSpan",l),a.cellIndex===i&&(a.innerHTML="")):2===l&&(a.removeAttribute("colSpan"),a.cellIndex===i&&(a.innerHTML=""))}continue;case Mt.resultAction.RemoveCell:Nt.remove(r[s].baseCell,!0);continue}},e.prototype.createTable=function(e,o,n){for(var i,r=[],s=0;s<e;s++)r.push("<td>"+Nt.blank+"</td>");i=r.join("");for(var a,l=[],c=0;c<o;c++)l.push("<tr>"+i+"</tr>");a=l.join("");var d=t("<table>"+a+"</table>");return n&&n.tableClassName&&d.addClass(n.tableClassName),d[0]},e.prototype.deleteTable=function(e){var o=Nt.ancestor(e.commonAncestor(),Nt.isCell);t(o).closest("table").remove()},e}(),jt=function(){function e(e){var o=this;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.style=new Ft,this.table=new Ut,this.typing=new zt,this.bullet=new Bt,this.history=new Dt(this.$editable),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 n=["bold","italic","underline","strikethrough","superscript","subscript","justifyLeft","justifyCenter","justifyRight","justifyFull","formatBlock","removeFormat","backColor"],i=0,r=n.length;i<r;i++)this[n[i]]=function(t){return function(e){o.beforeCommand(),document.execCommand(t,!1,e),o.afterCommand(!0)}}(n[i]),this.context.memo("help."+n[i],this.lang.help[n[i]]);this.fontName=this.wrapCommand(function(t){return o.fontStyling("font-family","'"+t+"'")}),this.fontSize=this.wrapCommand(function(t){return o.fontStyling("font-size",t+"px")});for(i=1;i<=6;i++)this["formatH"+i]=function(t){return function(){o.formatBlock("H"+t)}}(i),this.context.memo("help.formatH"+i,this.lang.help["formatH"+i]);this.insertParagraph=this.wrapCommand(function(){o.typing.insertParagraph(o.editable)}),this.insertOrderedList=this.wrapCommand(function(){o.bullet.insertOrderedList(o.editable)}),this.insertUnorderedList=this.wrapCommand(function(){o.bullet.insertUnorderedList(o.editable)}),this.indent=this.wrapCommand(function(){o.bullet.indent(o.editable)}),this.outdent=this.wrapCommand(function(){o.bullet.outdent(o.editable)}),this.insertNode=this.wrapCommand(function(e){o.isLimited(t(e).text().length)||(o.createRange().insertNode(e),Ht.createFromNodeAfter(e).select())}),this.insertText=this.wrapCommand(function(t){if(!o.isLimited(t.length)){var e=o.createRange().insertNode(Nt.createText(t));Ht.create(e,Nt.nodeLength(e)).select()}}),this.pasteHTML=this.wrapCommand(function(t){if(!o.isLimited(t.length)){var e=o.createRange().pasteHTML(t);Ht.createFromNodeAfter(N.last(e)).select()}}),this.formatBlock=this.wrapCommand(function(t,e){var n=o.options.callbacks.onApplyCustomStyle;n?n.call(o,e,o.context,o.onFormatBlock):o.onFormatBlock(t,e)}),this.insertHorizontalRule=this.wrapCommand(function(){var t=o.createRange().insertNode(Nt.create("HR"));t.nextSibling&&Ht.create(t.nextSibling,0).normalize().select()}),this.lineHeight=this.wrapCommand(function(t){o.style.stylePara(o.createRange(),{lineHeight:t})}),this.createLink=this.wrapCommand(function(e){var n=e.url,i=e.text,r=e.isNewWindow,s=e.range||o.createRange(),a=s.toString()!==i;"string"==typeof n&&(n=n.trim()),n=o.options.onCreateLink?o.options.onCreateLink(n):/^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(n)?n:"http://"+n;var l=[];if(a){var c=(s=s.deleteContents()).insertNode(t("<A>"+i+"</A>")[0]);l.push(c)}else l=o.style.styleNodes(s,{nodeName:"A",expandClosestSibling:!0,onlyPartialContains:!0});t.each(l,function(e,o){t(o).attr("href",n),r?t(o).attr("target","_blank"):t(o).removeAttr("target")});var d=Ht.createFromNodeBefore(N.head(l)).getStartPoint(),u=Ht.createFromNodeAfter(N.last(l)).getEndPoint();Ht.create(d.node,d.offset,u.node,u.offset).select()}),this.color=this.wrapCommand(function(t){var e=t.foreColor,o=t.backColor;e&&document.execCommand("foreColor",!1,e),o&&document.execCommand("backColor",!1,o)}),this.foreColor=this.wrapCommand(function(t){document.execCommand("styleWithCSS",!1,!0),document.execCommand("foreColor",!1,t)}),this.insertTable=this.wrapCommand(function(t){var e=t.split("x");o.createRange().deleteContents().insertNode(o.table.createTable(e[0],e[1],o.options))}),this.removeMedia=this.wrapCommand(function(){var e=t(o.restoreTarget()).parent();e.parent("figure").length?e.parent("figure").remove():e=t(o.restoreTarget()).detach(),o.context.triggerEvent("media.delete",e,o.$editable)}),this.floatMe=this.wrapCommand(function(e){var n=t(o.restoreTarget());n.toggleClass("note-float-left","left"===e),n.toggleClass("note-float-right","right"===e),n.css("float",e)}),this.resize=this.wrapCommand(function(e){t(o.restoreTarget()).css({width:100*e+"%",height:""})})}return e.prototype.initialize=function(){var t=this;this.$editable.on("keydown",function(e){if(e.keyCode===At.code.ENTER&&t.context.triggerEvent("enter",e),t.context.triggerEvent("keydown",e),e.isDefaultPrevented()||(t.options.shortcuts?t.handleKeyMap(e):t.preventDefaultEditableShortCuts(e)),t.isLimited(1,e))return!1}).on("keyup",function(e){t.context.triggerEvent("keyup",e)}).on("focus",function(e){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.context.triggerEvent("mouseup",e)}).on("scroll",function(e){t.context.triggerEvent("scroll",e)}).on("paste",function(e){t.context.triggerEvent("paste",e)}),this.$editable.html(Nt.html(this.$note)||Nt.emptyPara),this.$editable.on(z.inputEventName,C.debounce(function(){t.context.triggerEvent("change",t.$editable.html())},100)),this.$editor.on("focusin",function(e){t.context.triggerEvent("focusin",e)}).on("focusout",function(e){t.context.triggerEvent("focusout",e)}),this.options.airMode||(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()},e.prototype.destroy=function(){this.$editable.off()},e.prototype.handleKeyMap=function(t){var e=this.options.keyMap[z.isMac?"mac":"pc"],o=[];t.metaKey&&o.push("CMD"),t.ctrlKey&&!t.altKey&&o.push("CTRL"),t.shiftKey&&o.push("SHIFT");var n=At.nameFromCode[t.keyCode];n&&o.push(n);var i=e[o.join("+")];i?!1!==this.context.invoke(i)&&t.preventDefault():At.isEdit(t.keyCode)&&this.afterCommand()},e.prototype.preventDefaultEditableShortCuts=function(t){(t.ctrlKey||t.metaKey)&&N.contains([66,73,85],t.keyCode)&&t.preventDefault()},e.prototype.isLimited=function(t,e){return t=t||0,(void 0===e||!(At.isMove(e.keyCode)||e.ctrlKey||e.metaKey||N.contains([At.code.BACKSPACE,At.code.DELETE],e.keyCode)))&&(this.options.maxTextLength>0&&this.$editable.text().length+t>=this.options.maxTextLength)},e.prototype.createRange=function(){return this.focus(),Ht.create(this.editable)},e.prototype.saveRange=function(t){this.lastRange=this.createRange(),t&&this.lastRange.collapse().select()},e.prototype.restoreRange=function(){this.lastRange&&(this.lastRange.select(),this.focus())},e.prototype.saveTarget=function(t){this.$editable.data("target",t)},e.prototype.clearTarget=function(){this.$editable.removeData("target")},e.prototype.restoreTarget=function(){return this.$editable.data("target")},e.prototype.currentStyle=function(){var t=Ht.create();return t&&(t=t.normalize()),t?this.style.current(t):this.style.fromNode(this.$editable)},e.prototype.styleFromNode=function(t){return this.style.fromNode(t)},e.prototype.undo=function(){this.context.triggerEvent("before.command",this.$editable.html()),this.history.undo(),this.context.triggerEvent("change",this.$editable.html())},e.prototype.redo=function(){this.context.triggerEvent("before.command",this.$editable.html()),this.history.redo(),this.context.triggerEvent("change",this.$editable.html())},e.prototype.beforeCommand=function(){this.context.triggerEvent("before.command",this.$editable.html()),this.focus()},e.prototype.afterCommand=function(t){this.normalizeContent(),this.history.recordUndo(),t||this.context.triggerEvent("change",this.$editable.html())},e.prototype.tab=function(){var t=this.createRange();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())}},e.prototype.untab=function(){var t=this.createRange();if(t.isCollapsed()&&t.isOnCell())this.table.tab(t,!0);else if(0===this.options.tabSize)return!1},e.prototype.wrapCommand=function(t){var e=this;return function(){e.beforeCommand(),t.apply(e,arguments),e.afterCommand()}},e.prototype.insertImage=function(e,o){var n,i=this;return(n=e,t.Deferred(function(e){var o=t("<img>");o.one("load",function(){o.off("error abort"),e.resolve(o)}).one("error abort",function(){o.off("load").detach(),e.reject(o)}).css({display:"none"}).appendTo(document.body).attr("src",n)}).promise()).then(function(t){i.beforeCommand(),"function"==typeof o?o(t):("string"==typeof o&&t.attr("data-filename",o),t.css("width",Math.min(i.$editable.width(),t.width()))),t.show(),Ht.create(i.editable).insertNode(t[0]),Ht.createFromNodeAfter(t[0]).select(),i.afterCommand()}).fail(function(t){i.context.triggerEvent("image.upload.error",t)})},e.prototype.insertImages=function(e){var o=this;t.each(e,function(e,n){var i,r=n.name;o.options.maximumImageFileSize&&o.options.maximumImageFileSize<n.size?o.context.triggerEvent("image.upload.error",o.lang.image.maximumFileSizeError):(i=n,t.Deferred(function(e){t.extend(new FileReader,{onload:function(t){var o=t.target.result;e.resolve(o)},onerror:function(t){e.reject(t)}}).readAsDataURL(i)}).promise()).then(function(t){return o.insertImage(t,r)}).fail(function(){o.context.triggerEvent("image.upload.error")})})},e.prototype.insertImagesOrCallback=function(t){this.options.callbacks.onImageUpload?this.context.triggerEvent("image.upload",t):this.insertImages(t)},e.prototype.getSelectedText=function(){var t=this.createRange();return t.isOnAnchor()&&(t=Ht.createFromNode(Nt.ancestor(t.sc,Nt.isAnchor))),t.toString()},e.prototype.onFormatBlock=function(e,o){if(e=z.isMSIE?"<"+e+">":e,document.execCommand("FormatBlock",!1,e),o&&o.length){var n=o[0].className||"";if(n){var i=this.createRange();t([i.sc,i.ec]).closest(e).addClass(n)}}},e.prototype.formatPara=function(){this.formatBlock("P")},e.prototype.fontStyling=function(e,o){var n=this.createRange();if(n){var i=this.style.styleNodes(n);if(t(i).css(e,o),n.isCollapsed()){var r=N.head(i);r&&!Nt.nodeLength(r)&&(r.innerHTML=Nt.ZERO_WIDTH_NBSP_CHAR,Ht.createFromNodeAfter(r.firstChild).select(),this.$editable.data("bogus",r))}}},e.prototype.unlink=function(){var t=this.createRange();if(t.isOnAnchor()){var e=Nt.ancestor(t.sc,Nt.isAnchor);(t=Ht.createFromNode(e)).select(),this.beforeCommand(),document.execCommand("unlink"),this.afterCommand()}},e.prototype.getLinkInfo=function(){var e=this.createRange().expand(Nt.isAnchor),o=t(N.head(e.nodes(Nt.isAnchor))),n={range:e,text:e.toString(),url:o.length?o.attr("href"):""};return o.length&&(n.isNewWindow="_blank"===o.attr("target")),n},e.prototype.addRow=function(t){var e=this.createRange(this.$editable);e.isCollapsed()&&e.isOnCell()&&(this.beforeCommand(),this.table.addRow(e,t),this.afterCommand())},e.prototype.addCol=function(t){var e=this.createRange(this.$editable);e.isCollapsed()&&e.isOnCell()&&(this.beforeCommand(),this.table.addCol(e,t),this.afterCommand())},e.prototype.deleteRow=function(){var t=this.createRange(this.$editable);t.isCollapsed()&&t.isOnCell()&&(this.beforeCommand(),this.table.deleteRow(t),this.afterCommand())},e.prototype.deleteCol=function(){var t=this.createRange(this.$editable);t.isCollapsed()&&t.isOnCell()&&(this.beforeCommand(),this.table.deleteCol(t),this.afterCommand())},e.prototype.deleteTable=function(){var t=this.createRange(this.$editable);t.isCollapsed()&&t.isOnCell()&&(this.beforeCommand(),this.table.deleteTable(t),this.afterCommand())},e.prototype.resizeTo=function(t,e,o){var n;if(o){var i=t.y/t.x,r=e.data("ratio");n={width:r>i?t.x:t.y/r,height:r>i?t.x*r:t.y}}else n={width:t.x,height:t.y};e.css(n)},e.prototype.hasFocus=function(){return this.$editable.is(":focus")},e.prototype.focus=function(){this.hasFocus()||this.$editable.focus()},e.prototype.isEmpty=function(){return Nt.isEmpty(this.$editable[0])||Nt.emptyPara===this.$editable.html()},e.prototype.empty=function(){this.context.invoke("code",Nt.emptyPara)},e.prototype.normalizeContent=function(){this.$editable[0].normalize()},e}(),qt=function(){function t(t){this.context=t,this.$editable=t.layoutInfo.editable}return t.prototype.initialize=function(){this.$editable.on("paste",this.pasteByEvent.bind(this))},t.prototype.pasteByEvent=function(t){var e=t.originalEvent.clipboardData;if(e&&e.items&&e.items.length){var o=N.head(e.items);"file"===o.kind&&-1!==o.type.indexOf("image/")&&this.context.invoke("editor.insertImagesOrCallback",[o.getAsFile()]),this.context.invoke("editor.afterCommand")}},t}(),Kt=function(){function e(e){this.context=e,this.$eventListener=t(document),this.$editor=e.layoutInfo.editor,this.$editable=e.layoutInfo.editable,this.options=e.options,this.lang=this.options.langInfo,this.documentEventHandlers={},this.$dropzone=t(['<div class="note-dropzone">',' <div class="note-dropzone-message"/>',"</div>"].join("")).prependTo(this.$editor)}return e.prototype.initialize=function(){this.options.disableDragAndDrop?(this.documentEventHandlers.onDrop=function(t){t.preventDefault()},this.$eventListener=this.$dropzone,this.$eventListener.on("drop",this.documentEventHandlers.onDrop)):this.attachDragAndDropEvent()},e.prototype.attachDragAndDropEvent=function(){var e=this,o=t(),n=this.$dropzone.find(".note-dropzone-message");this.documentEventHandlers.onDragenter=function(t){var i=e.context.invoke("codeview.isActivated"),r=e.$editor.width()>0&&e.$editor.height()>0;i||o.length||!r||(e.$editor.addClass("dragover"),e.$dropzone.width(e.$editor.width()),e.$dropzone.height(e.$editor.height()),n.text(e.lang.image.dragImageHere)),o=o.add(t.target)},this.documentEventHandlers.onDragleave=function(t){(o=o.not(t.target)).length||e.$editor.removeClass("dragover")},this.documentEventHandlers.onDrop=function(){o=t(),e.$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(){e.$dropzone.addClass("hover"),n.text(e.lang.image.dropImage)}).on("dragleave",function(){e.$dropzone.removeClass("hover"),n.text(e.lang.image.dragImageHere)}),this.$dropzone.on("drop",function(o){var n=o.originalEvent.dataTransfer;o.preventDefault(),n&&n.files&&n.files.length?(e.$editable.focus(),e.context.invoke("editor.insertImagesOrCallback",n.files)):t.each(n.types,function(o,i){var r=n.getData(i);i.toLowerCase().indexOf("text")>-1?e.context.invoke("editor.pasteHTML",r):t(r).each(function(t,o){e.context.invoke("editor.insertNode",o)})})}).on("dragover",!1)},e.prototype.destroy=function(){var t=this;Object.keys(this.documentEventHandlers).forEach(function(e){t.$eventListener.off(e.substr(2).toLowerCase(),t.documentEventHandlers[e])}),this.documentEventHandlers={}},e}();z.hasCodeMirror&&(z.isSupportAmd?require(["codemirror"],function(t){Ot=t}):Ot=window.CodeMirror);var Vt=function(){function t(t){this.context=t,this.$editor=t.layoutInfo.editor,this.$editable=t.layoutInfo.editable,this.$codable=t.layoutInfo.codable,this.options=t.options}return t.prototype.sync=function(){this.isActivated()&&z.hasCodeMirror&&this.$codable.data("cmEditor").save()},t.prototype.isActivated=function(){return this.$editor.hasClass("codeview")},t.prototype.toggle=function(){this.isActivated()?this.deactivate():this.activate(),this.context.triggerEvent("codeview.toggled")},t.prototype.activate=function(){var t=this;if(this.$codable.val(Nt.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(),z.hasCodeMirror){var e=Ot.fromTextArea(this.$codable[0],this.options.codemirror);if(this.options.codemirror.tern){var o=new Ot.TernServer(this.options.codemirror.tern);e.ternServer=o,e.on("cursorActivity",function(t){o.updateArgHints(t)})}e.on("blur",function(o){t.context.triggerEvent("blur.codeview",e.getValue(),o)}),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)})},t.prototype.deactivate=function(){if(z.hasCodeMirror){var t=this.$codable.data("cmEditor");this.$codable.val(t.getValue()),t.toTextArea()}var e=Nt.value(this.$codable,this.options.prettifyHtml)||Nt.emptyPara,o=this.$editable.html()!==e;this.$editable.html(e),this.$editable.height(this.options.height?this.$codable.height():"auto"),this.$editor.removeClass("codeview"),o&&this.context.triggerEvent("change",this.$editable.html(),this.$editable),this.$editable.focus(),this.context.invoke("toolbar.updateCodeview",!1)},t.prototype.destroy=function(){this.isActivated()&&this.deactivate()},t}(),Wt=function(){function e(e){this.$document=t(document),this.$statusbar=e.layoutInfo.statusbar,this.$editable=e.layoutInfo.editable,this.options=e.options}return e.prototype.initialize=function(){var t=this;this.options.airMode||this.options.disableResizeEditor?this.destroy():this.$statusbar.on("mousedown",function(e){e.preventDefault(),e.stopPropagation();var o=t.$editable.offset().top-t.$document.scrollTop(),n=function(e){var n=e.clientY-(o+24);n=t.options.minheight>0?Math.max(n,t.options.minheight):n,n=t.options.maxHeight>0?Math.min(n,t.options.maxHeight):n,t.$editable.height(n)};t.$document.on("mousemove",n).one("mouseup",function(){t.$document.off("mousemove",n)})})},e.prototype.destroy=function(){this.$statusbar.off(),this.$statusbar.addClass("locked")},e}(),Gt=function(){function e(e){var o=this;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=t(window),this.$scrollbar=t("html, body"),this.onResize=function(){o.resizeTo({h:o.$window.height()-o.$toolbar.outerHeight()})}}return e.prototype.resizeTo=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)},e.prototype.toggle=function(){this.$editor.toggleClass("fullscreen"),this.isFullscreen()?(this.$editable.data("orgHeight",this.$editable.css("height")),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.$scrollbar.css("overflow","visible")),this.context.invoke("toolbar.updateFullscreen",this.isFullscreen())},e.prototype.isFullscreen=function(){return this.$editor.hasClass("fullscreen")},e}(),_t=function(){function e(e){var o=this;this.context=e,this.$document=t(document),this.$editingArea=e.layoutInfo.editingArea,this.options=e.options,this.lang=this.options.langInfo,this.events={"summernote.mousedown":function(t,e){o.update(e.target)&&e.preventDefault()},"summernote.keyup summernote.scroll summernote.change summernote.dialog.shown":function(){o.update()},"summernote.disable":function(){o.hide()},"summernote.codeview.toggled":function(){o.update()}}}return e.prototype.initialize=function(){var e=this;this.$handle=t(['<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(t){if(Nt.isControlSizing(t.target)){t.preventDefault(),t.stopPropagation();var o=e.$handle.find(".note-control-selection").data("target"),n=o.offset(),i=e.$document.scrollTop(),r=function(t){e.context.invoke("editor.resizeTo",{x:t.clientX-n.left,y:t.clientY-(n.top-i)},o,!t.shiftKey),e.update(o[0])};e.$document.on("mousemove",r).one("mouseup",function(t){t.preventDefault(),e.$document.off("mousemove",r),e.context.invoke("editor.afterCommand")}),o.data("ratio")||o.data("ratio",o.height()/o.width())}}),this.$handle.on("wheel",function(t){t.preventDefault(),e.update()})},e.prototype.destroy=function(){this.$handle.remove()},e.prototype.update=function(e){if(this.context.isDisabled())return!1;var o=Nt.isImg(e),n=this.$handle.find(".note-control-selection");if(this.context.invoke("imagePopover.update",e),o){var i=t(e),r=i.position(),s={left:r.left+parseInt(i.css("marginLeft"),10),top:r.top+parseInt(i.css("marginTop"),10)},a={w:i.outerWidth(!1),h:i.outerHeight(!1)};n.css({display:"block",left:s.left,top:s.top,width:a.w,height:a.h}).data("target",i);var l=new Image;l.src=i.attr("src");var c=a.w+"x"+a.h+" ("+this.lang.image.original+": "+l.width+"x"+l.height+")";n.find(".note-control-selection-info").text(c),this.context.invoke("editor.saveTarget",e)}else this.hide();return o},e.prototype.hide=function(){this.context.invoke("editor.clearTarget"),this.$handle.children().hide()},e}(),Zt=/^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i,Yt=function(){function e(t){var e=this;this.context=t,this.events={"summernote.keyup":function(t,o){o.isDefaultPrevented()||e.handleKeyup(o)},"summernote.keydown":function(t,o){e.handleKeydown(o)}}}return e.prototype.initialize=function(){this.lastWordRange=null},e.prototype.destroy=function(){this.lastWordRange=null},e.prototype.replace=function(){if(this.lastWordRange){var e=this.lastWordRange.toString(),o=e.match(Zt);if(o&&(o[1]||o[2])){var n=o[1]?e:"http://"+e,i=t("<a />").html(e).attr("href",n)[0];this.lastWordRange.insertNode(i),this.lastWordRange=null,this.context.invoke("editor.focus")}}},e.prototype.handleKeydown=function(t){if(N.contains([At.code.ENTER,At.code.SPACE],t.keyCode)){var e=this.context.invoke("editor.createRange").getWordRange();this.lastWordRange=e}},e.prototype.handleKeyup=function(t){N.contains([At.code.ENTER,At.code.SPACE],t.keyCode)&&this.replace()},e}(),Qt=function(){function t(t){var e=this;this.$note=t.layoutInfo.note,this.events={"summernote.change":function(){e.$note.val(t.invoke("code"))}}}return t.prototype.shouldInitialize=function(){return Nt.isTextarea(this.$note[0])},t}(),Jt=function(){function e(t){var e=this;this.context=t,this.$editingArea=t.layoutInfo.editingArea,this.options=t.options,this.events={"summernote.init summernote.change":function(){e.update()},"summernote.codeview.toggled":function(){e.update()}}}return e.prototype.shouldInitialize=function(){return!!this.options.placeholder},e.prototype.initialize=function(){var e=this;this.$placeholder=t('<div class="note-placeholder">'),this.$placeholder.on("click",function(){e.context.invoke("focus")}).text(this.options.placeholder).prependTo(this.$editingArea),this.update()},e.prototype.destroy=function(){this.$placeholder.remove()},e.prototype.update=function(){var t=!this.context.invoke("codeview.isActivated")&&this.context.invoke("editor.isEmpty");this.$placeholder.toggle(t)},e}(),Xt=function(){function e(e){this.ui=t.summernote.ui,this.context=e,this.$toolbar=e.layoutInfo.toolbar,this.options=e.options,this.lang=this.options.langInfo,this.invertedKeyMap=C.invertObject(this.options.keyMap[z.isMac?"mac":"pc"])}return e.prototype.representShortcut=function(t){var e=this.invertedKeyMap[t];return this.options.shortcuts&&e?(z.isMac&&(e=e.replace("CMD","⌘").replace("SHIFT","⇧"))," ("+(e=e.replace("BACKSLASH","\\").replace("SLASH","/").replace("LEFTBRACKET","[").replace("RIGHTBRACKET","]"))+")"):""},e.prototype.button=function(t){return!this.options.tooltip&&t.tooltip&&delete t.tooltip,t.container=this.options.container,this.ui.button(t)},e.prototype.initialize=function(){this.addToolbarButtons(),this.addImagePopoverButtons(),this.addLinkPopoverButtons(),this.addTablePopoverButtons(),this.fontInstalledMap={}},e.prototype.destroy=function(){delete this.fontInstalledMap},e.prototype.isFontInstalled=function(t){return this.fontInstalledMap.hasOwnProperty(t)||(this.fontInstalledMap[t]=z.isFontInstalled(t)||N.contains(this.options.fontNamesIgnoreCheck,t)),this.fontInstalledMap[t]},e.prototype.isFontDeservedToAdd=function(e){return""!==(e=e.toLowerCase())&&this.isFontInstalled(e)&&-1===t.inArray(e,["sans-serif","serif","monospace","cursive","fantasy"])},e.prototype.addToolbarButtons=function(){var e=this;this.context.memo("button.style",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.magic),e.options),tooltip:e.lang.style.style,data:{toggle:"dropdown"}}),e.ui.dropdown({className:"dropdown-style",items:e.options.styleTags,title:e.lang.style.style,template:function(t){"string"==typeof t&&(t={tag:t,title:e.lang.style.hasOwnProperty(t)?e.lang.style[t]:t});var o=t.tag,n=t.title;return"<"+o+(t.style?' style="'+t.style+'" ':"")+(t.className?' class="'+t.className+'"':"")+">"+n+"</"+o+">"},click:e.context.createInvokeHandler("editor.formatBlock")})]).render()});for(var o=function(t,o){var i=n.options.styleTags[t];n.context.memo("button.style."+i,function(){return e.button({className:"note-btn-style-"+i,contents:'<div data-value="'+i+'">'+i.toUpperCase()+"</div>",tooltip:e.lang.style[i],click:e.context.createInvokeHandler("editor.formatBlock")}).render()})},n=this,i=0,r=this.options.styleTags.length;i<r;i++)o(i);this.context.memo("button.bold",function(){return e.button({className:"note-btn-bold",contents:e.ui.icon(e.options.icons.bold),tooltip:e.lang.font.bold+e.representShortcut("bold"),click:e.context.createInvokeHandlerAndUpdateState("editor.bold")}).render()}),this.context.memo("button.italic",function(){return e.button({className:"note-btn-italic",contents:e.ui.icon(e.options.icons.italic),tooltip:e.lang.font.italic+e.representShortcut("italic"),click:e.context.createInvokeHandlerAndUpdateState("editor.italic")}).render()}),this.context.memo("button.underline",function(){return e.button({className:"note-btn-underline",contents:e.ui.icon(e.options.icons.underline),tooltip:e.lang.font.underline+e.representShortcut("underline"),click:e.context.createInvokeHandlerAndUpdateState("editor.underline")}).render()}),this.context.memo("button.clear",function(){return e.button({contents:e.ui.icon(e.options.icons.eraser),tooltip:e.lang.font.clear+e.representShortcut("removeFormat"),click:e.context.createInvokeHandler("editor.removeFormat")}).render()}),this.context.memo("button.strikethrough",function(){return e.button({className:"note-btn-strikethrough",contents:e.ui.icon(e.options.icons.strikethrough),tooltip:e.lang.font.strikethrough+e.representShortcut("strikethrough"),click:e.context.createInvokeHandlerAndUpdateState("editor.strikethrough")}).render()}),this.context.memo("button.superscript",function(){return e.button({className:"note-btn-superscript",contents:e.ui.icon(e.options.icons.superscript),tooltip:e.lang.font.superscript,click:e.context.createInvokeHandlerAndUpdateState("editor.superscript")}).render()}),this.context.memo("button.subscript",function(){return e.button({className:"note-btn-subscript",contents:e.ui.icon(e.options.icons.subscript),tooltip:e.lang.font.subscript,click:e.context.createInvokeHandlerAndUpdateState("editor.subscript")}).render()}),this.context.memo("button.fontname",function(){var o=e.context.invoke("editor.currentStyle");return t.each(o["font-family"].split(","),function(o,n){n=n.trim().replace(/['"]+/g,""),e.isFontDeservedToAdd(n)&&-1===t.inArray(n,e.options.fontNames)&&e.options.fontNames.push(n)}),e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents('<span class="note-current-fontname"/>',e.options),tooltip:e.lang.font.name,data:{toggle:"dropdown"}}),e.ui.dropdownCheck({className:"dropdown-fontname",checkClassName:e.options.icons.menuCheck,items:e.options.fontNames.filter(e.isFontInstalled.bind(e)),title:e.lang.font.name,template:function(t){return"<span style=\"font-family: '"+t+"'\">"+t+"</span>"},click:e.context.createInvokeHandlerAndUpdateState("editor.fontName")})]).render()}),this.context.memo("button.fontsize",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents('<span class="note-current-fontsize"/>',e.options),tooltip:e.lang.font.size,data:{toggle:"dropdown"}}),e.ui.dropdownCheck({className:"dropdown-fontsize",checkClassName:e.options.icons.menuCheck,items:e.options.fontSizes,title:e.lang.font.size,click:e.context.createInvokeHandlerAndUpdateState("editor.fontSize")})]).render()}),this.context.memo("button.color",function(){return e.ui.buttonGroup({className:"note-color",children:[e.button({className:"note-current-color-button",contents:e.ui.icon(e.options.icons.font+" note-recent-color"),tooltip:e.lang.color.recent,click:function(o){var n=t(o.currentTarget);e.context.invoke("editor.color",{backColor:n.attr("data-backColor"),foreColor:n.attr("data-foreColor")})},callback:function(t){t.find(".note-recent-color").css("background-color","#FFFF00"),t.attr("data-backColor","#FFFF00")}}),e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents("",e.options),tooltip:e.lang.color.more,data:{toggle:"dropdown"}}),e.ui.dropdown({items:['<div class="note-palette">',' <div class="note-palette-title">'+e.lang.color.background+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-light" data-event="backColor" data-value="inherit">',e.lang.color.transparent," </button>"," </div>",' <div class="note-holder" data-event="backColor"/>',"</div>",'<div class="note-palette">',' <div class="note-palette-title">'+e.lang.color.foreground+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-light" data-event="removeFormat" data-value="foreColor">',e.lang.color.resetToDefault," </button>"," </div>",' <div class="note-holder" data-event="foreColor"/>',"</div>"].join(""),callback:function(o){o.find(".note-holder").each(function(o,n){var i=t(n);i.append(e.ui.palette({colors:e.options.colors,colorsName:e.options.colorsName,eventName:i.data("event"),container:e.options.container,tooltip:e.options.tooltip}).render())})},click:function(o){var n=t(o.target),i=n.data("event"),r=n.data("value");if(i&&r){var s="backColor"===i?"background-color":"color",a=n.closest(".note-color").find(".note-recent-color"),l=n.closest(".note-color").find(".note-current-color-button");a.css(s,r),l.attr("data-"+i,r),e.context.invoke("editor."+i,r)}}})]}).render()}),this.context.memo("button.ul",function(){return e.button({contents:e.ui.icon(e.options.icons.unorderedlist),tooltip:e.lang.lists.unordered+e.representShortcut("insertUnorderedList"),click:e.context.createInvokeHandler("editor.insertUnorderedList")}).render()}),this.context.memo("button.ol",function(){return e.button({contents:e.ui.icon(e.options.icons.orderedlist),tooltip:e.lang.lists.ordered+e.representShortcut("insertOrderedList"),click:e.context.createInvokeHandler("editor.insertOrderedList")}).render()});var s=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")}),l=this.button({contents:this.ui.icon(this.options.icons.alignRight),tooltip:this.lang.paragraph.right+this.representShortcut("justifyRight"),click:this.context.createInvokeHandler("editor.justifyRight")}),c=this.button({contents:this.ui.icon(this.options.icons.alignJustify),tooltip:this.lang.paragraph.justify+this.representShortcut("justifyFull"),click:this.context.createInvokeHandler("editor.justifyFull")}),d=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",C.invoke(s,"render")),this.context.memo("button.justifyCenter",C.invoke(a,"render")),this.context.memo("button.justifyRight",C.invoke(l,"render")),this.context.memo("button.justifyFull",C.invoke(c,"render")),this.context.memo("button.outdent",C.invoke(d,"render")),this.context.memo("button.indent",C.invoke(u,"render")),this.context.memo("button.paragraph",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.alignLeft),e.options),tooltip:e.lang.paragraph.paragraph,data:{toggle:"dropdown"}}),e.ui.dropdown([e.ui.buttonGroup({className:"note-align",children:[s,a,l,c]}),e.ui.buttonGroup({className:"note-list",children:[d,u]})])]).render()}),this.context.memo("button.height",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.textHeight),e.options),tooltip:e.lang.font.height,data:{toggle:"dropdown"}}),e.ui.dropdownCheck({items:e.options.lineHeights,checkClassName:e.options.icons.menuCheck,className:"dropdown-line-height",title:e.lang.font.height,click:e.context.createInvokeHandler("editor.lineHeight")})]).render()}),this.context.memo("button.table",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.table),e.options),tooltip:e.lang.table.table,data:{toggle:"dropdown"}}),e.ui.dropdown({title:e.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(t){t.find(".note-dimension-picker-mousecatcher").css({width:e.options.insertTableMaxSize.col+"em",height:e.options.insertTableMaxSize.row+"em"}).mousedown(e.context.createInvokeHandler("editor.insertTable")).on("mousemove",e.tableMoveHandler.bind(e))}}).render()}),this.context.memo("button.link",function(){return e.button({contents:e.ui.icon(e.options.icons.link),tooltip:e.lang.link.link+e.representShortcut("linkDialog.show"),click:e.context.createInvokeHandler("linkDialog.show")}).render()}),this.context.memo("button.picture",function(){return e.button({contents:e.ui.icon(e.options.icons.picture),tooltip:e.lang.image.image,click:e.context.createInvokeHandler("imageDialog.show")}).render()}),this.context.memo("button.video",function(){return e.button({contents:e.ui.icon(e.options.icons.video),tooltip:e.lang.video.video,click:e.context.createInvokeHandler("videoDialog.show")}).render()}),this.context.memo("button.hr",function(){return e.button({contents:e.ui.icon(e.options.icons.minus),tooltip:e.lang.hr.insert+e.representShortcut("insertHorizontalRule"),click:e.context.createInvokeHandler("editor.insertHorizontalRule")}).render()}),this.context.memo("button.fullscreen",function(){return e.button({className:"btn-fullscreen",contents:e.ui.icon(e.options.icons.arrowsAlt),tooltip:e.lang.options.fullscreen,click:e.context.createInvokeHandler("fullscreen.toggle")}).render()}),this.context.memo("button.codeview",function(){return e.button({className:"btn-codeview",contents:e.ui.icon(e.options.icons.code),tooltip:e.lang.options.codeview,click:e.context.createInvokeHandler("codeview.toggle")}).render()}),this.context.memo("button.redo",function(){return e.button({contents:e.ui.icon(e.options.icons.redo),tooltip:e.lang.history.redo+e.representShortcut("redo"),click:e.context.createInvokeHandler("editor.redo")}).render()}),this.context.memo("button.undo",function(){return e.button({contents:e.ui.icon(e.options.icons.undo),tooltip:e.lang.history.undo+e.representShortcut("undo"),click:e.context.createInvokeHandler("editor.undo")}).render()}),this.context.memo("button.help",function(){return e.button({contents:e.ui.icon(e.options.icons.question),tooltip:e.lang.options.help,click:e.context.createInvokeHandler("helpDialog.show")}).render()})},e.prototype.addImagePopoverButtons=function(){var t=this;this.context.memo("button.imageSize100",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.imageSize50",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.imageSize25",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.floatLeft",function(){return t.button({contents:t.ui.icon(t.options.icons.alignLeft),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.alignRight),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.alignJustify),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()})},e.prototype.addLinkPopoverButtons=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()})},e.prototype.addTablePopoverButtons=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()})},e.prototype.build=function(e,o){for(var n=0,i=o.length;n<i;n++){for(var r=o[n],s=t.isArray(r)?r[0]:r,a=t.isArray(r)?1===r.length?[r[0]]:r[1]:[r],l=this.ui.buttonGroup({className:"note-"+s}).render(),c=0,d=a.length;c<d;c++){var u=this.context.memo("button."+a[c]);u&&l.append("function"==typeof u?u(this.context):u)}l.appendTo(e)}},e.prototype.updateCurrentStyle=function(e){var o=this,n=e||this.$toolbar,i=this.context.invoke("editor.currentStyle");if(this.updateBtnStates(n,{".note-btn-bold":function(){return"bold"===i["font-bold"]},".note-btn-italic":function(){return"italic"===i["font-italic"]},".note-btn-underline":function(){return"underline"===i["font-underline"]},".note-btn-subscript":function(){return"subscript"===i["font-subscript"]},".note-btn-superscript":function(){return"superscript"===i["font-superscript"]},".note-btn-strikethrough":function(){return"strikethrough"===i["font-strikethrough"]}}),i["font-family"]){var r=i["font-family"].split(",").map(function(t){return t.replace(/[\'\"]/g,"").replace(/\s+$/,"").replace(/^\s+/,"")}),s=N.find(r,this.isFontInstalled.bind(this));n.find(".dropdown-fontname a").each(function(e,o){var n=t(o),i=n.data("value")+""==s+"";n.toggleClass("checked",i)}),n.find(".note-current-fontname").text(s).css("font-family",s)}if(i["font-size"]){var a=i["font-size"];n.find(".dropdown-fontsize a").each(function(e,o){var n=t(o),i=n.data("value")+""==a+"";n.toggleClass("checked",i)}),n.find(".note-current-fontsize").text(a)}if(i["line-height"]){var l=i["line-height"];n.find(".dropdown-line-height li a").each(function(e,n){var i=t(n).data("value")+""==l+"";o.className=i?"checked":""})}},e.prototype.updateBtnStates=function(e,o){var n=this;t.each(o,function(t,o){n.ui.toggleBtnActive(e.find(t),o())})},e.prototype.tableMoveHandler=function(e){var o,n=t(e.target.parentNode),i=n.next(),r=n.find(".note-dimension-picker-mousecatcher"),s=n.find(".note-dimension-picker-highlighted"),a=n.find(".note-dimension-picker-unhighlighted");if(void 0===e.offsetX){var l=t(e.target).offset();o={x:e.pageX-l.left,y:e.pageY-l.top}}else o={x:e.offsetX,y:e.offsetY};var c=Math.ceil(o.x/18)||1,d=Math.ceil(o.y/18)||1;s.css({width:c+"em",height:d+"em"}),r.data("value",c+"x"+d),c>3&&c<this.options.insertTableMaxSize.col&&a.css({width:c+1+"em"}),d>3&&d<this.options.insertTableMaxSize.row&&a.css({height:d+1+"em"}),i.html(c+" x "+d)},e}(),te=function(){function e(e){this.context=e,this.$window=t(window),this.$document=t(document),this.ui=t.summernote.ui,this.$note=e.layoutInfo.note,this.$editor=e.layoutInfo.editor,this.$toolbar=e.layoutInfo.toolbar,this.options=e.options,this.followScroll=this.followScroll.bind(this)}return e.prototype.shouldInitialize=function(){return!this.options.airMode},e.prototype.initialize=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)},e.prototype.destroy=function(){this.$toolbar.children().remove(),this.options.followingToolbar&&this.$window.off("scroll resize",this.followScroll)},e.prototype.followScroll=function(){if(this.$editor.hasClass("fullscreen"))return!1;var e=this.$toolbar.parent(".note-toolbar-wrapper"),o=this.$editor.outerHeight(),n=this.$editor.width(),i=this.$toolbar.height();e.css({height:i});var r=0;this.options.otherStaticBar&&(r=t(this.options.otherStaticBar).outerHeight());var s=this.$document.scrollTop(),a=this.$editor.offset().top;s>a-r&&s<a+o-r-i?this.$toolbar.css({position:"fixed",top:r,width:n}):this.$toolbar.css({position:"relative",top:0,width:"100%"})},e.prototype.changeContainer=function(t){t?this.$toolbar.prependTo(this.$editor):this.options.toolbarContainer&&this.$toolbar.appendTo(this.options.toolbarContainer)},e.prototype.updateFullscreen=function(t){this.ui.toggleBtnActive(this.$toolbar.find(".btn-fullscreen"),t),this.changeContainer(t)},e.prototype.updateCodeview=function(t){this.ui.toggleBtnActive(this.$toolbar.find(".btn-codeview"),t),t?this.deactivate():this.activate()},e.prototype.activate=function(t){var e=this.$toolbar.find("button");t||(e=e.not(".btn-codeview")),this.ui.toggleBtn(e,!0)},e.prototype.deactivate=function(t){var e=this.$toolbar.find("button");t||(e=e.not(".btn-codeview")),this.ui.toggleBtn(e,!1)},e}(),ee=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(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"])}return e.prototype.initialize=function(){var e=this.options.dialogsInBody?this.$body:this.$editor,o=['<div class="form-group note-form-group">','<label class="note-form-label">'+this.lang.link.textToDisplay+"</label>",'<input class="note-link-text form-control note-form-control note-input" type="text" />',"</div>",'<div class="form-group note-form-group">','<label class="note-form-label">'+this.lang.link.url+"</label>",'<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />',"</div>",this.options.disableLinkTarget?"":t("<div/>").append(this.ui.checkbox({id:"sn-checkbox-open-in-new-window",text:this.lang.link.openInNewWindow,checked:!0}).render()).html()].join(""),n='<button type="submit" href="#" class="btn btn-primary note-btn note-btn-primary note-link-btn" disabled>'+this.lang.link.insert+"</button>";this.$dialog=this.ui.dialog({className:"link-dialog",title:this.lang.link.insert,fade:this.options.dialogsFade,body:o,footer:n}).render().appendTo(e)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.bindEnterKey=function(t,e){t.on("keypress",function(t){t.keyCode===At.code.ENTER&&(t.preventDefault(),e.trigger("click"))})},e.prototype.toggleLinkBtn=function(t,e,o){this.ui.toggleBtn(t,e.val()&&o.val())},e.prototype.showLinkDialog=function(e){var o=this;return t.Deferred(function(t){var n=o.$dialog.find(".note-link-text"),i=o.$dialog.find(".note-link-url"),r=o.$dialog.find(".note-link-btn"),s=o.$dialog.find("input[type=checkbox]");o.ui.onDialogShown(o.$dialog,function(){o.context.triggerEvent("dialog.shown"),e.url||(e.url=e.text),n.val(e.text);var a=function(){o.toggleLinkBtn(r,n,i),e.text=n.val()};n.on("input",a).on("paste",function(){setTimeout(a,0)});var l=function(){o.toggleLinkBtn(r,n,i),e.text||n.val(i.val())};i.on("input",l).on("paste",function(){setTimeout(l,0)}).val(e.url),z.isSupportTouch||i.trigger("focus"),o.toggleLinkBtn(r,n,i),o.bindEnterKey(i,r),o.bindEnterKey(n,r);var c=void 0!==e.isNewWindow?e.isNewWindow:o.context.options.linkTargetBlank;s.prop("checked",c),r.one("click",function(r){r.preventDefault(),t.resolve({range:e.range,url:i.val(),text:n.val(),isNewWindow:s.is(":checked")}),o.ui.hideDialog(o.$dialog)})}),o.ui.onDialogHidden(o.$dialog,function(){n.off("input paste keypress"),i.off("input paste keypress"),r.off("click"),"pending"===t.state()&&t.reject()}),o.ui.showDialog(o.$dialog)}).promise()},e.prototype.show=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")})},e}(),oe=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.options=e.options,this.events={"summernote.keyup summernote.mouseup summernote.change summernote.scroll":function(){o.update()},"summernote.disable summernote.dialog.shown":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return!N.isEmpty(this.options.popover.link)},e.prototype.initialize=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> </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)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(){if(this.context.invoke("editor.hasFocus")){var e=this.context.invoke("editor.createRange");if(e.isCollapsed()&&e.isOnAnchor()){var o=Nt.ancestor(e.sc,Nt.isAnchor),n=t(o).attr("href");this.$popover.find("a").attr("href",n).html(n);var i=Nt.posFromPlaceholder(o);this.$popover.css({display:"block",left:i.left,top:i.top})}else this.hide()}else this.hide()},e.prototype.hide=function(){this.$popover.hide()},e}(),ne=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(document.body),this.$editor=e.layoutInfo.editor,this.options=e.options,this.lang=this.options.langInfo}return e.prototype.initialize=function(){var t=this.options.dialogsInBody?this.$body:this.$editor,e="";if(this.options.maximumImageFileSize){var o=Math.floor(Math.log(this.options.maximumImageFileSize)/Math.log(1024)),n=1*(this.options.maximumImageFileSize/Math.pow(1024,o)).toFixed(2)+" "+" KMGTP"[o]+"B";e="<small>"+this.lang.image.maximumFileSize+" : "+n+"</small>"}var i=['<div class="form-group note-form-group note-group-select-from-files">','<label class="note-form-label">'+this.lang.image.selectFromFiles+"</label>",'<input class="note-image-input note-form-control note-input" ',' type="file" name="files" accept="image/*" multiple="multiple" />',e,"</div>",'<div class="form-group note-group-image-url" style="overflow:auto;">','<label class="note-form-label">'+this.lang.image.url+"</label>",'<input class="note-image-url form-control note-form-control note-input ',' col-md-12" type="text" />',"</div>"].join(""),r='<button type="submit" href="#" class="btn btn-primary note-btn note-btn-primary note-image-btn" disabled>'+this.lang.image.insert+"</button>";this.$dialog=this.ui.dialog({title:this.lang.image.insert,fade:this.options.dialogsFade,body:i,footer:r}).render().appendTo(t)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.bindEnterKey=function(t,e){t.on("keypress",function(t){t.keyCode===At.code.ENTER&&(t.preventDefault(),e.trigger("click"))})},e.prototype.show=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.context.invoke("editor.insertImage",e):t.context.invoke("editor.insertImagesOrCallback",e)}).fail(function(){t.context.invoke("editor.restoreRange")})},e.prototype.showImageDialog=function(){var e=this;return t.Deferred(function(t){var o=e.$dialog.find(".note-image-input"),n=e.$dialog.find(".note-image-url"),i=e.$dialog.find(".note-image-btn");e.ui.onDialogShown(e.$dialog,function(){e.context.triggerEvent("dialog.shown"),o.replaceWith(o.clone().on("change",function(e){t.resolve(e.target.files||e.target.value)}).val("")),i.click(function(e){e.preventDefault(),t.resolve(n.val())}),n.on("keyup paste",function(){var t=n.val();e.ui.toggleBtn(i,t)}).val(""),z.isSupportTouch||n.trigger("focus"),e.bindEnterKey(n,i)}),e.ui.onDialogHidden(e.$dialog,function(){o.off("change"),n.off("keyup paste keypress"),i.off("click"),"pending"===t.state()&&t.reject()}),e.ui.showDialog(e.$dialog)})},e}(),ie=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.editable=e.layoutInfo.editable[0],this.options=e.options,this.events={"summernote.disable":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return!N.isEmpty(this.options.popover.image)},e.prototype.initialize=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)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(t){if(Nt.isImg(t)){var e=Nt.posFromPlaceholder(t),o=Nt.posFromPlaceholder(this.editable);this.$popover.css({display:"block",left:this.options.popatmouse?event.pageX-20:e.left,top:this.options.popatmouse?event.pageY:Math.min(e.top,o.top)})}else this.hide()},e.prototype.hide=function(){this.$popover.hide()},e}(),re=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.options=e.options,this.events={"summernote.mousedown":function(t,e){o.update(e.target)},"summernote.keyup summernote.scroll summernote.change":function(){o.update()},"summernote.disable":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return!N.isEmpty(this.options.popover.table)},e.prototype.initialize=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),z.isFF&&document.execCommand("enableInlineTableEditing",!1,!1)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(t){if(this.context.isDisabled())return!1;var e=Nt.isCell(t);if(e){var o=Nt.posFromPlaceholder(t);this.$popover.css({display:"block",left:o.left,top:o.top})}else this.hide();return e},e.prototype.hide=function(){this.$popover.hide()},e}(),se=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(document.body),this.$editor=e.layoutInfo.editor,this.options=e.options,this.lang=this.options.langInfo}return e.prototype.initialize=function(){var t=this.options.dialogsInBody?this.$body:this.$editor,e=['<div class="form-group note-form-group row-fluid">','<label class="note-form-label">'+this.lang.video.url+' <small class="text-muted">'+this.lang.video.providers+"</small></label>",'<input class="note-video-url form-control note-form-control note-input" type="text" />',"</div>"].join(""),o='<button type="submit" href="#" class="btn btn-primary note-btn note-btn-primary note-video-btn" disabled>'+this.lang.video.insert+"</button>";this.$dialog=this.ui.dialog({title:this.lang.video.insert,fade:this.options.dialogsFade,body:e,footer:o}).render().appendTo(t)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.bindEnterKey=function(t,e){t.on("keypress",function(t){t.keyCode===At.code.ENTER&&(t.preventDefault(),e.trigger("click"))})},e.prototype.createVideoNode=function(e){var o,n=e.match(/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/),i=e.match(/(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/),r=e.match(/\/\/vine\.co\/v\/([a-zA-Z0-9]+)/),s=e.match(/\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/),a=e.match(/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/),l=e.match(/\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/),c=e.match(/\/\/v\.qq\.com.*?vid=(.+)/),d=e.match(/\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/),u=e.match(/^.+.(mp4|m4v)$/),h=e.match(/^.+.(ogg|ogv)$/),p=e.match(/^.+.(webm)$/);if(n&&11===n[1].length){var f=n[1];o=t("<iframe>").attr("frameborder",0).attr("src","//www.youtube.com/embed/"+f).attr("width","640").attr("height","360")}else if(i&&i[0].length)o=t("<iframe>").attr("frameborder",0).attr("src","https://instagram.com/p/"+i[1]+"/embed/").attr("width","612").attr("height","710").attr("scrolling","no").attr("allowtransparency","true");else if(r&&r[0].length)o=t("<iframe>").attr("frameborder",0).attr("src",r[0]+"/embed/simple").attr("width","600").attr("height","600").attr("class","vine-embed");else if(s&&s[3].length)o=t("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("src","//player.vimeo.com/video/"+s[3]).attr("width","640").attr("height","360");else if(a&&a[2].length)o=t("<iframe>").attr("frameborder",0).attr("src","//www.dailymotion.com/embed/video/"+a[2]).attr("width","640").attr("height","360");else if(l&&l[1].length)o=t("<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||d&&d[2].length){var m=c&&c[1].length?c[1]:d[2];o=t("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("height","310").attr("width","500").attr("src","http://v.qq.com/iframe/player.html?vid="+m+"&auto=0")}else{if(!(u||h||p))return!1;o=t("<video controls>").attr("src",e).attr("width","640").attr("height","360")}return o.addClass("note-video-clip"),o[0]},e.prototype.show=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 o=t.createVideoNode(e);o&&t.context.invoke("editor.insertNode",o)}).fail(function(){t.context.invoke("editor.restoreRange")})},e.prototype.showVideoDialog=function(e){var o=this;return t.Deferred(function(t){var n=o.$dialog.find(".note-video-url"),i=o.$dialog.find(".note-video-btn");o.ui.onDialogShown(o.$dialog,function(){o.context.triggerEvent("dialog.shown"),n.val(e).on("input",function(){o.ui.toggleBtn(i,n.val())}),z.isSupportTouch||n.trigger("focus"),i.click(function(e){e.preventDefault(),t.resolve(n.val())}),o.bindEnterKey(n,i)}),o.ui.onDialogHidden(o.$dialog,function(){n.off("input"),i.off("click"),"pending"===t.state()&&t.reject()}),o.ui.showDialog(o.$dialog)})},e}(),ae=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(document.body),this.$editor=e.layoutInfo.editor,this.options=e.options,this.lang=this.options.langInfo}return e.prototype.initialize=function(){var t=this.options.dialogsInBody?this.$body:this.$editor,e=['<p class="text-center">','<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</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)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.createShortcutList=function(){var e=this,o=this.options.keyMap[z.isMac?"mac":"pc"];return Object.keys(o).map(function(n){var i=o[n],r=t('<div><div class="help-list-item"/></div>');return r.append(t("<label><kbd>"+n+"</kdb></label>").css({width:180,"margin-right":10})).append(t("<span/>").html(e.context.memo("help."+i)||i)),r.html()}).join("")},e.prototype.showHelpDialog=function(){var e=this;return t.Deferred(function(t){e.ui.onDialogShown(e.$dialog,function(){e.context.triggerEvent("dialog.shown"),t.resolve()}),e.ui.showDialog(e.$dialog)}).promise()},e.prototype.show=function(){var t=this;this.context.invoke("editor.saveRange"),this.showHelpDialog().then(function(){t.context.invoke("editor.restoreRange")})},e}(),le=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.options=e.options,this.events={"summernote.keyup summernote.mouseup summernote.scroll":function(){o.update()},"summernote.disable summernote.change summernote.dialog.shown":function(){o.hide()},"summernote.focusout":function(t,e){z.isFF||e.relatedTarget&&Nt.ancestor(e.relatedTarget,C.eq(o.$popover[0]))||o.hide()}}}return e.prototype.shouldInitialize=function(){return this.options.airMode&&!N.isEmpty(this.options.popover.air)},e.prototype.initialize=function(){this.$popover=this.ui.popover({className:"note-air-popover"}).render().appendTo(this.options.container);var t=this.$popover.find(".popover-content");this.context.invoke("buttons.build",t,this.options.popover.air)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(){var t=this.context.invoke("editor.currentStyle");if(t.range&&!t.range.isCollapsed()){var e=N.last(t.range.getClientRects());if(e){var o=C.rect2bnd(e);this.$popover.css({display:"block",left:Math.max(o.left+o.width/2,0)-20,top:o.top+o.height}),this.context.invoke("buttons.updateCurrentStyle",this.$popover)}}else this.hide()},e.prototype.hide=function(){this.$popover.hide()},e}(),ce=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.$editable=e.layoutInfo.editable,this.options=e.options,this.hint=this.options.hint||[],this.direction=this.options.hintDirection||"bottom",this.hints=t.isArray(this.hint)?this.hint:[this.hint],this.events={"summernote.keyup":function(t,e){e.isDefaultPrevented()||o.handleKeyup(e)},"summernote.keydown":function(t,e){o.handleKeydown(e)},"summernote.disable summernote.dialog.shown":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return this.hints.length>0},e.prototype.initialize=function(){var e=this;this.lastWordRange=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.$content.find(".active").removeClass("active"),t(e).addClass("active"),e.replace()})},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.selectItem=function(t){this.$content.find(".active").removeClass("active"),t.addClass("active"),this.$content[0].scrollTop=t[0].offsetTop-this.$content.innerHeight()/2},e.prototype.moveDown=function(){var t=this.$content.find(".note-hint-item.active"),e=t.next();if(e.length)this.selectItem(e);else{var o=t.parent().next();o.length||(o=this.$content.find(".note-hint-group").first()),this.selectItem(o.find(".note-hint-item").first())}},e.prototype.moveUp=function(){var t=this.$content.find(".note-hint-item.active"),e=t.prev();if(e.length)this.selectItem(e);else{var o=t.parent().prev();o.length||(o=this.$content.find(".note-hint-group").last()),this.selectItem(o.find(".note-hint-item").last())}},e.prototype.replace=function(){var t=this.$content.find(".note-hint-item.active");if(t.length){var e=this.nodeFromItem(t);this.lastWordRange.insertNode(e),Ht.createFromNode(e).collapse().select(),this.lastWordRange=null,this.hide(),this.context.triggerEvent("change",this.$editable.html(),this.$editable[0]),this.context.invoke("editor.focus")}},e.prototype.nodeFromItem=function(t){var e=this.hints[t.data("index")],o=t.data("item"),n=e.content?e.content(o):o;return"string"==typeof n&&(n=Nt.createText(n)),n},e.prototype.createItemTemplates=function(e,o){var n=this.hints[e];return o.map(function(o,i){var r=t('<div class="note-hint-item"/>');return r.append(n.template?n.template(o):o+""),r.data({index:e,item:o}),r})},e.prototype.handleKeydown=function(t){this.$popover.is(":visible")&&(t.keyCode===At.code.ENTER?(t.preventDefault(),this.replace()):t.keyCode===At.code.UP?(t.preventDefault(),this.moveUp()):t.keyCode===At.code.DOWN&&(t.preventDefault(),this.moveDown()))},e.prototype.searchKeyword=function(t,e,o){var n=this.hints[t];if(n&&n.match.test(e)&&n.search){var i=n.match.exec(e);n.search(i[1],o)}else o()},e.prototype.createGroup=function(e,o){var n=this,i=t('<div class="note-hint-group note-hint-group-'+e+'"/>');return this.searchKeyword(e,o,function(t){(t=t||[]).length&&(i.html(n.createItemTemplates(e,t)),n.show())}),i},e.prototype.handleKeyup=function(t){var e=this;if(!N.contains([At.code.ENTER,At.code.UP,At.code.DOWN],t.keyCode)){var o=this.context.invoke("editor.createRange").getWordRange(),n=o.toString();if(this.hints.length&&n){this.$content.empty();var i=C.rect2bnd(N.last(o.getClientRects()));i&&(this.$popover.hide(),this.lastWordRange=o,this.hints.forEach(function(t,o){t.match.test(n)&&e.createGroup(o,n).appendTo(e.$content)}),this.$content.find(".note-hint-item:first").addClass("active"),"top"===this.direction?this.$popover.css({left:i.left,top:i.top-this.$popover.outerHeight()-5}):this.$popover.css({left:i.left,top:i.top+i.height+5}))}else this.hide()}},e.prototype.show=function(){this.$popover.show()},e.prototype.hide=function(){this.$popover.hide()},e}(),de=function(){function e(e,o){this.ui=t.summernote.ui,this.$note=e,this.memos={},this.modules={},this.layoutInfo={},this.options=o,this.initialize()}return e.prototype.initialize=function(){return this.layoutInfo=this.ui.createLayout(this.$note,this.options),this._initialize(),this.$note.hide(),this},e.prototype.destroy=function(){this._destroy(),this.$note.removeData("summernote"),this.ui.removeLayout(this.$note,this.layoutInfo)},e.prototype.reset=function(){var t=this.isDisabled();this.code(Nt.emptyPara),this._destroy(),this._initialize(),t&&this.disable()},e.prototype._initialize=function(){var e=this,o=t.extend({},this.options.buttons);Object.keys(o).forEach(function(t){e.memo("button."+t,o[t])});var n=t.extend({},this.options.modules,t.summernote.plugins||{});Object.keys(n).forEach(function(t){e.module(t,n[t],!0)}),Object.keys(this.modules).forEach(function(t){e.initializeModule(t)})},e.prototype._destroy=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)},e.prototype.code=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)},e.prototype.isDisabled=function(){return"false"===this.layoutInfo.editable.attr("contenteditable")},e.prototype.enable=function(){this.layoutInfo.editable.attr("contenteditable",!0),this.invoke("toolbar.activate",!0),this.triggerEvent("disable",!1)},e.prototype.disable=function(){this.invoke("codeview.isActivated")&&this.invoke("codeview.deactivate"),this.layoutInfo.editable.attr("contenteditable",!1),this.invoke("toolbar.deactivate",!0),this.triggerEvent("disable",!0)},e.prototype.triggerEvent=function(){var t=N.head(arguments),e=N.tail(N.from(arguments)),o=this.options.callbacks[C.namespaceToCamel(t,"on")];o&&o.apply(this.$note[0],e),this.$note.trigger("summernote."+t,e)},e.prototype.initializeModule=function(t){var e=this.modules[t];e.shouldInitialize=e.shouldInitialize||C.ok,e.shouldInitialize()&&(e.initialize&&e.initialize(),e.events&&Nt.attachEvents(this.$note,e.events))},e.prototype.module=function(t,e,o){if(1===arguments.length)return this.modules[t];this.modules[t]=new e(this),o||this.initializeModule(t)},e.prototype.removeModule=function(t){var e=this.modules[t];e.shouldInitialize()&&(e.events&&Nt.detachEvents(this.$note,e.events),e.destroy&&e.destroy()),delete this.modules[t]},e.prototype.memo=function(t,e){if(1===arguments.length)return this.memos[t];this.memos[t]=e},e.prototype.removeMemo=function(t){this.memos[t]&&this.memos[t].destroy&&this.memos[t].destroy(),delete this.memos[t]},e.prototype.createInvokeHandlerAndUpdateState=function(t,e){var o=this;return function(n){o.createInvokeHandler(t,e)(n),o.invoke("buttons.updateCurrentStyle")}},e.prototype.createInvokeHandler=function(e,o){var n=this;return function(i){i.preventDefault();var r=t(i.target);n.invoke(e,o||r.closest("[data-value]").data("value"),r)}},e.prototype.invoke=function(){var t=N.head(arguments),e=N.tail(N.from(arguments)),o=t.split("."),n=o.length>1,i=n&&N.head(o),r=n?N.last(o):N.head(o),s=this.modules[i||"editor"];return!i&&this[r]?this[r].apply(this,e):s&&s[r]&&s.shouldInitialize()?s[r].apply(s,e):void 0},e}();t.fn.extend({summernote:function(){var e=t.type(N.head(arguments)),o="string"===e,n="object"===e,i=t.extend({},t.summernote.options,n?N.head(arguments):{});i.langInfo=t.extend(!0,{},t.summernote.lang["en-US"],t.summernote.lang[i.lang]),i.icons=t.extend(!0,{},t.summernote.options.icons,i.icons),i.tooltip="auto"===i.tooltip?!z.isSupportTouch:i.tooltip,this.each(function(e,o){var n=t(o);if(!n.data("summernote")){var r=new de(n,i);n.data("summernote",r),n.data("summernote").triggerEvent("init",r.layoutInfo)}});var r=this.first();if(r.length){var s=r.data("summernote");if(o)return s.invoke.apply(s,N.from(arguments));i.focus&&s.invoke("editor.focus")}return this}}),t.summernote=t.extend(t.summernote,{version:"0.8.10",ui:y,dom:Nt,plugins:{},options:{modules:{editor:jt,clipboard:qt,dropzone:Kt,codeview:Vt,statusbar:Wt,fullscreen:Gt,handle:_t,hintPopover:ce,autoLink:Yt,autoSync:Qt,placeholder:Jt,buttons:Xt,toolbar:te,linkDialog:ee,linkPopover:oe,imageDialog:ne,imagePopover:ie,tablePopover:re,videoDialog:se,helpDialog:ae,airPopover:le},buttons:{},lang:"en-US",followingToolbar:!0,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:[["imagesize",["imageSize100","imageSize50","imageSize25"]],["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"]]]},airMode:!1,width:null,height:null,linkTargetBlank:!0,focus:!1,tabSize:4,styleWithSpan:!0,shortcuts:!0,textareaAutoSync:!0,hintDirection:"bottom",tooltip:"auto",container:"body",maxTextLength:0,styleTags:["p",{title:"Blockquote",tag:"blockquote",className:"blockquote",value:"blockquote"},"h1","h2","h3","h4","h5","h6"],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Tahoma","Times New Roman","Verdana"],fontSizes:["8","9","10","11","12","14","18","24","36"],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"]],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:{onInit:null,onFocus:null,onBlur:null,onBlurCodeview:null,onEnter:null,onKeyup:null,onKeydown:null,onImageUpload:null,onImageUploadError:null},codemirror:{mode:"text/html",htmlMode:!0,lineNumbers:!0},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",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",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"}}})});PKf[�\�Í)')'dist/summernote-bs4.jsnu�[���/** * Super simple wysiwyg editor v0.8.10 * https://summernote.org * * Copyright 2013- Alan Hong. and other contributors * summernote may be freely distributed under the MIT license. * * Date: 2018-02-20T00:34Z */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : (factory(global.jQuery)); }(this, (function ($$1) { 'use strict'; $$1 = $$1 && $$1.hasOwnProperty('default') ? $$1['default'] : $$1; var Renderer = /** @class */ (function () { function Renderer(markup, children, options, callback) { this.markup = markup; this.children = children; this.options = options; this.callback = callback; } Renderer.prototype.render = function ($parent) { var $node = $$1(this.markup); if (this.options && this.options.contents) { $node.html(this.options.contents); } if (this.options && this.options.className) { $node.addClass(this.options.className); } if (this.options && this.options.data) { $$1.each(this.options.data, function (k, v) { $node.attr('data-' + k, v); }); } if (this.options && this.options.click) { $node.on('click', this.options.click); } if (this.children) { var $container_1 = $node.find('.note-children-container'); this.children.forEach(function (child) { child.render($container_1.length ? $container_1 : $node); }); } if (this.callback) { this.callback($node, this.options); } if (this.options && this.options.callback) { this.options.callback($node); } if ($parent) { $parent.append($node); } return $node; }; return Renderer; }()); var renderer = { create: function (markup, callback) { return function () { var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; var children = $$1.isArray(arguments[0]) ? arguments[0] : []; if (options && options.children) { children = options.children; } return new Renderer(markup, children, options, callback); }; } }; var editor = renderer.create('<div class="note-editor note-frame card"/>'); var toolbar = renderer.create('<div class="note-toolbar-wrapper"><div class="note-toolbar card-header" role="toolbar"></div></div>'); var editingArea = renderer.create('<div class="note-editing-area"/>'); var codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); var editable = renderer.create('<div class="note-editable card-block" contentEditable="true" role="textbox" aria-multiline="true"/>'); var statusbar = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-statusbar" role="status">', ' <output class="note-status-output" aria-live="polite"></output>', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); var airEditor = renderer.create('<div class="note-editor"/>'); var airEditable = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); var buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); var dropdown = renderer.create('<div class="dropdown-menu" role="list">', function ($node, options) { var markup = $$1.isArray(options.items) ? options.items.map(function (item) { var value = (typeof item === 'string') ? item : (item.value || ''); var content = options.template ? options.template(item) : item; var option = (typeof item === 'object') ? item.option : undefined; var dataValue = 'data-value="' + value + '"'; var dataOption = (option !== undefined) ? ' data-option="' + option + '"' : ''; return '<a class="dropdown-item" href="#" ' + (dataValue + dataOption) + ' role="listitem" aria-label="' + item + '">' + content + '</a>'; }).join('') : options.items; $node.html(markup).attr({ 'aria-label': options.title }); }); var dropdownButtonContents = function (contents) { return contents; }; var dropdownCheck = renderer.create('<div class="dropdown-menu note-check" role="list">', function ($node, options) { var markup = $$1.isArray(options.items) ? options.items.map(function (item) { var value = (typeof item === 'string') ? item : (item.value || ''); var content = options.template ? options.template(item) : item; return '<a class="dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '">' + icon(options.checkClassName) + ' ' + content + '</a>'; }).join('') : options.items; $node.html(markup).attr({ 'aria-label': options.title }); }); var palette = renderer.create('<div class="note-color-palette"/>', function ($node, options) { var contents = []; for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) { var eventName = options.eventName; var colors = options.colors[row]; var colorsName = options.colorsName[row]; var buttons = []; for (var col = 0, colSize = colors.length; col < colSize; col++) { var color = colors[col]; var colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); if (options.tooltip) { $node.find('.note-color-btn').tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } }); var dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function ($node, options) { if (options.fade) { $node.addClass('fade'); } $node.attr({ 'aria-label': options.title }); $node.html([ '<div class="modal-dialog">', ' <div class="modal-content">', (options.title ? ' <div class="modal-header">' + ' <h4 class="modal-title">' + options.title + '</h4>' + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>' + ' </div>' : ''), ' <div class="modal-body">' + options.body + '</div>', (options.footer ? ' <div class="modal-footer">' + options.footer + '</div>' : ''), ' </div>', '</div>' ].join('')); }); var popover = renderer.create([ '<div class="note-popover popover in">', ' <div class="arrow"/>', ' <div class="popover-content note-children-container"/>', '</div>' ].join(''), function ($node, options) { var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; $node.addClass(direction); if (options.hideArrow) { $node.find('.arrow').hide(); } }); var checkbox = renderer.create('<label class="custom-control custom-checkbox"></label>', function ($node, options) { if (options.id) { $node.attr('for', options.id); } $node.html([ ' <input role="checkbox" type="checkbox" class="custom-control-input"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', ' <span class="custom-control-indicator"></span>', ' <span class="custom-control-description">' + (options.text ? options.text : '') + '</span>', '</label>' ].join('')); }); var icon = function (iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; var ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, dropdown: dropdown, dropdownButtonContents: dropdownButtonContents, dropdownCheck: dropdownCheck, palette: palette, dialog: dialog, popover: popover, icon: icon, checkbox: checkbox, options: {}, button: function ($node, options) { return renderer.create('<button type="button" class="note-btn btn btn-light btn-sm" role="button" tabindex="-1">', function ($node, options) { if (options && options.tooltip) { $node.attr({ title: options.tooltip, 'aria-label': options.tooltip }).tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } })($node, options); }, toggleBtn: function ($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function ($btn, isActive) { $btn.toggleClass('active', isActive); }, onDialogShown: function ($dialog, handler) { $dialog.one('shown.bs.modal', handler); }, onDialogHidden: function ($dialog, handler) { $dialog.one('hidden.bs.modal', handler); }, showDialog: function ($dialog) { $dialog.modal('show'); }, hideDialog: function ($dialog) { $dialog.modal('hide'); }, createLayout: function ($note, options) { var $editor = (options.airMode ? ui.airEditor([ ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function ($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.show(); } }; /** * @class core.func * * func utils (for high-order func's arg) * * @singleton * @alternateClassName func */ function eq(itemA) { return function (itemB) { return itemA === itemB; }; } function eq2(itemA, itemB) { return itemA === itemB; } function peq2(propName) { return function (itemA, itemB) { return itemA[propName] === itemB[propName]; }; } function ok() { return true; } function fail() { return false; } function not(f) { return function () { return !f.apply(f, arguments); }; } function and(fA, fB) { return function (item) { return fA(item) && fB(item); }; } function self(a) { return a; } function invoke(obj, method) { return function () { return obj[method].apply(obj, arguments); }; } var idCounter = 0; /** * generate a globally-unique id * * @param {String} [prefix] */ function uniqueId(prefix) { var id = ++idCounter + ''; return prefix ? prefix + id : id; } /** * returns bnd (bounds) from rect * * - IE Compatibility Issue: http://goo.gl/sRLOAo * - Scroll Issue: http://goo.gl/sNjUc * * @param {Rect} rect * @return {Object} bounds * @return {Number} bounds.top * @return {Number} bounds.left * @return {Number} bounds.width * @return {Number} bounds.height */ function rect2bnd(rect) { var $document = $(document); return { top: rect.top + $document.scrollTop(), left: rect.left + $document.scrollLeft(), width: rect.right - rect.left, height: rect.bottom - rect.top }; } /** * returns a copy of the object where the keys have become the values and the values the keys. * @param {Object} obj * @return {Object} */ function invertObject(obj) { var inverted = {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { inverted[obj[key]] = key; } } return inverted; } /** * @param {String} namespace * @param {String} [prefix] * @return {String} */ function namespaceToCamel(namespace, prefix) { prefix = prefix || ''; return prefix + namespace.split('.').map(function (name) { return name.substring(0, 1).toUpperCase() + name.substring(1); }).join(''); } /** * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for * N milliseconds. If `immediate` is passed, trigger the function on the * leading edge, instead of the trailing. * @param {Function} func * @param {Number} wait * @param {Boolean} immediate * @return {Function} */ function debounce(func, wait, immediate) { var _this = this; var timeout; return function () { var context = _this; var args = arguments; var later = function () { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } var func = { eq: eq, eq2: eq2, peq2: peq2, ok: ok, fail: fail, self: self, not: not, and: and, invoke: invoke, uniqueId: uniqueId, rect2bnd: rect2bnd, invertObject: invertObject, namespaceToCamel: namespaceToCamel, debounce: debounce }; /** * returns the first item of an array. * * @param {Array} array */ function head(array) { return array[0]; } /** * returns the last item of an array. * * @param {Array} array */ function last(array) { return array[array.length - 1]; } /** * returns everything but the last entry of the array. * * @param {Array} array */ function initial(array) { return array.slice(0, array.length - 1); } /** * returns the rest of the items in an array. * * @param {Array} array */ function tail(array) { return array.slice(1); } /** * returns item of array */ function find(array, pred) { for (var idx = 0, len = array.length; idx < len; idx++) { var item = array[idx]; if (pred(item)) { return item; } } } /** * returns true if all of the values in the array pass the predicate truth test. */ function all(array, pred) { for (var idx = 0, len = array.length; idx < len; idx++) { if (!pred(array[idx])) { return false; } } return true; } /** * returns index of item */ function indexOf(array, item) { return $$1.inArray(item, array); } /** * returns true if the value is present in the list. */ function contains(array, item) { return indexOf(array, item) !== -1; } /** * get sum from a list * * @param {Array} array - array * @param {Function} fn - iterator */ function sum(array, fn) { fn = fn || func.self; return array.reduce(function (memo, v) { return memo + fn(v); }, 0); } /** * returns a copy of the collection with array type. * @param {Collection} collection - collection eg) node.childNodes, ... */ function from(collection) { var result = []; var length = collection.length; var idx = -1; while (++idx < length) { result[idx] = collection[idx]; } return result; } /** * returns whether list is empty or not */ function isEmpty$1(array) { return !array || !array.length; } /** * cluster elements by predicate function. * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule * @param {Array[]} */ function clusterBy(array, fn) { if (!array.length) { return []; } var aTail = tail(array); return aTail.reduce(function (memo, v) { var aLast = last(memo); if (fn(last(aLast), v)) { aLast[aLast.length] = v; } else { memo[memo.length] = [v]; } return memo; }, [[head(array)]]); } /** * returns a copy of the array with all false values removed * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule */ function compact(array) { var aResult = []; for (var idx = 0, len = array.length; idx < len; idx++) { if (array[idx]) { aResult.push(array[idx]); } } return aResult; } /** * produces a duplicate-free version of the array * * @param {Array} array */ function unique(array) { var results = []; for (var idx = 0, len = array.length; idx < len; idx++) { if (!contains(results, array[idx])) { results.push(array[idx]); } } return results; } /** * returns next item. * @param {Array} array */ function next(array, item) { var idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx + 1]; } /** * returns prev item. * @param {Array} array */ function prev(array, item) { var idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx - 1]; } /** * @class core.list * * list utils * * @singleton * @alternateClassName list */ var lists = { head: head, last: last, initial: initial, tail: tail, prev: prev, next: next, find: find, contains: contains, all: all, sum: sum, from: from, isEmpty: isEmpty$1, clusterBy: clusterBy, compact: compact, unique: unique }; var isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line /** * returns whether font is installed or not. * * @param {String} fontName * @return {Boolean} */ function isFontInstalled(fontName) { var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; var $tester = $$1('<div>').css({ position: 'absolute', left: '-9999px', top: '-9999px', fontSize: '200px' }).text('mmmmmmmmmwwwwwww').appendTo(document.body); var originalWidth = $tester.css('fontFamily', testFontName).width(); var width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); $tester.remove(); return originalWidth !== width; } var userAgent = navigator.userAgent; var isMSIE = /MSIE|Trident/i.test(userAgent); var browserVersion; if (isMSIE) { var matches = /MSIE (\d+[.]\d+)/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } } var isEdge = /Edge\/\d+/.test(userAgent); var hasCodeMirror = !!window.CodeMirror; if (!hasCodeMirror && isSupportAmd) { // Webpack if (typeof __webpack_require__ === 'function') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } } else if (typeof require !== 'undefined') { // Browserify if (typeof require.resolve !== 'undefined') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } // Almond/Require } else if (typeof require.specified !== 'undefined') { hasCodeMirror = require.specified('codemirror'); } } } var isSupportTouch = (('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); // [workaround] IE doesn't have input events for contentEditable // - see: https://goo.gl/4bfIvA var inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input'; /** * @class core.env * * Object which check platform and agent * * @singleton * @alternateClassName env */ var env = { isMac: navigator.appVersion.indexOf('Mac') > -1, isMSIE: isMSIE, isEdge: isEdge, isFF: !isEdge && /firefox/i.test(userAgent), isPhantom: /PhantomJS/i.test(userAgent), isWebkit: !isEdge && /webkit/i.test(userAgent), isChrome: !isEdge && /chrome/i.test(userAgent), isSafari: !isEdge && /safari/i.test(userAgent), browserVersion: browserVersion, jqueryVersion: parseFloat($$1.fn.jquery), isSupportAmd: isSupportAmd, isSupportTouch: isSupportTouch, hasCodeMirror: hasCodeMirror, isFontInstalled: isFontInstalled, isW3CRangeSupport: !!document.createRange, inputEventName: inputEventName }; var NBSP_CHAR = String.fromCharCode(160); var ZERO_WIDTH_NBSP_CHAR = '\ufeff'; /** * @method isEditable * * returns whether node is `note-editable` or not. * * @param {Node} node * @return {Boolean} */ function isEditable(node) { return node && $$1(node).hasClass('note-editable'); } /** * @method isControlSizing * * returns whether node is `note-control-sizing` or not. * * @param {Node} node * @return {Boolean} */ function isControlSizing(node) { return node && $$1(node).hasClass('note-control-sizing'); } /** * @method makePredByNodeName * * returns predicate which judge whether nodeName is same * * @param {String} nodeName * @return {Function} */ function makePredByNodeName(nodeName) { nodeName = nodeName.toUpperCase(); return function (node) { return node && node.nodeName.toUpperCase() === nodeName; }; } /** * @method isText * * * * @param {Node} node * @return {Boolean} true if node's type is text(3) */ function isText(node) { return node && node.nodeType === 3; } /** * @method isElement * * * * @param {Node} node * @return {Boolean} true if node's type is element(1) */ function isElement(node) { return node && node.nodeType === 1; } /** * ex) br, col, embed, hr, img, input, ... * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements */ function isVoid(node) { return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase()); } function isPara(node) { if (isEditable(node)) { return false; } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); } function isHeading(node) { return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); } var isPre = makePredByNodeName('PRE'); var isLi = makePredByNodeName('LI'); function isPurePara(node) { return isPara(node) && !isLi(node); } var isTable = makePredByNodeName('TABLE'); var isData = makePredByNodeName('DATA'); function isInline(node) { return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node); } function isList(node) { return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); } var isHr = makePredByNodeName('HR'); function isCell(node) { return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); } var isBlockquote = makePredByNodeName('BLOCKQUOTE'); function isBodyContainer(node) { return isCell(node) || isBlockquote(node) || isEditable(node); } var isAnchor = makePredByNodeName('A'); function isParaInline(node) { return isInline(node) && !!ancestor(node, isPara); } function isBodyInline(node) { return isInline(node) && !ancestor(node, isPara); } var isBody = makePredByNodeName('BODY'); /** * returns whether nodeB is closest sibling of nodeA * * @param {Node} nodeA * @param {Node} nodeB * @return {Boolean} */ function isClosestSibling(nodeA, nodeB) { return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB; } /** * returns array of closest siblings with node * * @param {Node} node * @param {function} [pred] - predicate function * @return {Node[]} */ function withClosestSiblings(node, pred) { pred = pred || func.ok; var siblings = []; if (node.previousSibling && pred(node.previousSibling)) { siblings.push(node.previousSibling); } siblings.push(node); if (node.nextSibling && pred(node.nextSibling)) { siblings.push(node.nextSibling); } return siblings; } /** * blank HTML for cursor position * - [workaround] old IE only works with * - [workaround] IE11 and other browser works with bogus br */ var blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>'; /** * @method nodeLength * * returns #text's text size or element's childNodes size * * @param {Node} node */ function nodeLength(node) { if (isText(node)) { return node.nodeValue.length; } if (node) { return node.childNodes.length; } return 0; } /** * returns whether node is empty or not. * * @param {Node} node * @return {Boolean} */ function isEmpty(node) { var len = nodeLength(node); if (len === 0) { return true; } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { // ex) <p><br></p>, <span><br></span> return true; } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') { // ex) <p></p>, <span></span> return true; } return false; } /** * padding blankHTML if node is empty (for cursor position) */ function paddingBlankHTML(node) { if (!isVoid(node) && !nodeLength(node)) { node.innerHTML = blankHTML; } } /** * find nearest ancestor predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function ancestor(node, pred) { while (node) { if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * find nearest ancestor only single child blood line and predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function singleChildAncestor(node, pred) { node = node.parentNode; while (node) { if (nodeLength(node) !== 1) { break; } if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * returns new array of ancestor nodes (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listAncestor(node, pred) { pred = pred || func.fail; var ancestors = []; ancestor(node, function (el) { if (!isEditable(el)) { ancestors.push(el); } return pred(el); }); return ancestors; } /** * find farthest ancestor predicate hit */ function lastAncestor(node, pred) { var ancestors = listAncestor(node); return lists.last(ancestors.filter(pred)); } /** * returns common ancestor node between two nodes. * * @param {Node} nodeA * @param {Node} nodeB */ function commonAncestor(nodeA, nodeB) { var ancestors = listAncestor(nodeA); for (var n = nodeB; n; n = n.parentNode) { if ($$1.inArray(n, ancestors) > -1) { return n; } } return null; // difference document area } /** * listing all previous siblings (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listPrev(node, pred) { pred = pred || func.fail; var nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.previousSibling; } return nodes; } /** * listing next siblings (until predicate hit). * * @param {Node} node * @param {Function} [pred] - predicate function */ function listNext(node, pred) { pred = pred || func.fail; var nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.nextSibling; } return nodes; } /** * listing descendant nodes * * @param {Node} node * @param {Function} [pred] - predicate function */ function listDescendant(node, pred) { var descendants = []; pred = pred || func.ok; // start DFS(depth first search) with node (function fnWalk(current) { if (node !== current && pred(current)) { descendants.push(current); } for (var idx = 0, len = current.childNodes.length; idx < len; idx++) { fnWalk(current.childNodes[idx]); } })(node); return descendants; } /** * wrap node with new tag. * * @param {Node} node * @param {Node} tagName of wrapper * @return {Node} - wrapper */ function wrap(node, wrapperName) { var parent = node.parentNode; var wrapper = $$1('<' + wrapperName + '>')[0]; parent.insertBefore(wrapper, node); wrapper.appendChild(node); return wrapper; } /** * insert node after preceding * * @param {Node} node * @param {Node} preceding - predicate function */ function insertAfter(node, preceding) { var next = preceding.nextSibling; var parent = preceding.parentNode; if (next) { parent.insertBefore(node, next); } else { parent.appendChild(node); } return node; } /** * append elements. * * @param {Node} node * @param {Collection} aChild */ function appendChildNodes(node, aChild) { $$1.each(aChild, function (idx, child) { node.appendChild(child); }); return node; } /** * returns whether boundaryPoint is left edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isLeftEdgePoint(point) { return point.offset === 0; } /** * returns whether boundaryPoint is right edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isRightEdgePoint(point) { return point.offset === nodeLength(point.node); } /** * returns whether boundaryPoint is edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isEdgePoint(point) { return isLeftEdgePoint(point) || isRightEdgePoint(point); } /** * returns whether node is left edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgeOf(node, ancestor) { while (node && node !== ancestor) { if (position(node) !== 0) { return false; } node = node.parentNode; } return true; } /** * returns whether node is right edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isRightEdgeOf(node, ancestor) { if (!ancestor) { return false; } while (node && node !== ancestor) { if (position(node) !== nodeLength(node.parentNode) - 1) { return false; } node = node.parentNode; } return true; } /** * returns whether point is left edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgePointOf(point, ancestor) { return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); } /** * returns whether point is right edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isRightEdgePointOf(point, ancestor) { return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); } /** * returns offset from parent. * * @param {Node} node */ function position(node) { var offset = 0; while ((node = node.previousSibling)) { offset += 1; } return offset; } function hasChildren(node) { return !!(node && node.childNodes && node.childNodes.length); } /** * returns previous boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function prevPoint(point, isSkipInnerOffset) { var node; var offset; if (point.offset === 0) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node); } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset - 1]; offset = nodeLength(node); } else { node = point.node; offset = isSkipInnerOffset ? 0 : point.offset - 1; } return { node: node, offset: offset }; } /** * returns next boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function nextPoint(point, isSkipInnerOffset) { var node, offset; if (nodeLength(point.node) === point.offset) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node) + 1; } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset]; offset = 0; } else { node = point.node; offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; } return { node: node, offset: offset }; } /** * returns whether pointA and pointB is same or not. * * @param {BoundaryPoint} pointA * @param {BoundaryPoint} pointB * @return {Boolean} */ function isSamePoint(pointA, pointB) { return pointA.node === pointB.node && pointA.offset === pointB.offset; } /** * returns whether point is visible (can set cursor) or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isVisiblePoint(point) { if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) { return true; } var leftNode = point.node.childNodes[point.offset - 1]; var rightNode = point.node.childNodes[point.offset]; if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { return true; } return false; } /** * @method prevPointUtil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function prevPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = prevPoint(point); } return null; } /** * @method nextPointUntil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function nextPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = nextPoint(point); } return null; } /** * returns whether point has character or not. * * @param {Point} point * @return {Boolean} */ function isCharPoint(point) { if (!isText(point.node)) { return false; } var ch = point.node.nodeValue.charAt(point.offset - 1); return ch && (ch !== ' ' && ch !== NBSP_CHAR); } /** * @method walkPoint * * @param {BoundaryPoint} startPoint * @param {BoundaryPoint} endPoint * @param {Function} handler * @param {Boolean} isSkipInnerOffset */ function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) { var point = startPoint; while (point) { handler(point); if (isSamePoint(point, endPoint)) { break; } var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node; point = nextPoint(point, isSkipOffset); } } /** * @method makeOffsetPath * * return offsetPath(array of offset) from ancestor * * @param {Node} ancestor - ancestor node * @param {Node} node */ function makeOffsetPath(ancestor, node) { var ancestors = listAncestor(node, func.eq(ancestor)); return ancestors.map(position).reverse(); } /** * @method fromOffsetPath * * return element from offsetPath(array of offset) * * @param {Node} ancestor - ancestor node * @param {array} offsets - offsetPath */ function fromOffsetPath(ancestor, offsets) { var current = ancestor; for (var i = 0, len = offsets.length; i < len; i++) { if (current.childNodes.length <= offsets[i]) { current = current.childNodes[current.childNodes.length - 1]; } else { current = current.childNodes[offsets[i]]; } } return current; } /** * @method splitNode * * split element or #text * * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitNode(point, options) { var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; // edge case if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { if (isLeftEdgePoint(point)) { return point.node; } else if (isRightEdgePoint(point)) { return point.node.nextSibling; } } // split #text if (isText(point.node)) { return point.node.splitText(point.offset); } else { var childNode = point.node.childNodes[point.offset]; var clone = insertAfter(point.node.cloneNode(false), point.node); appendChildNodes(clone, listNext(childNode)); if (!isSkipPaddingBlankHTML) { paddingBlankHTML(point.node); paddingBlankHTML(clone); } return clone; } } /** * @method splitTree * * split tree by point * * @param {Node} root - split root * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitTree(root, point, options) { // ex) [#text, <span>, <p>] var ancestors = listAncestor(point.node, func.eq(root)); if (!ancestors.length) { return null; } else if (ancestors.length === 1) { return splitNode(point, options); } return ancestors.reduce(function (node, parent) { if (node === point.node) { node = splitNode(point, options); } return splitNode({ node: parent, offset: node ? position(node) : nodeLength(parent) }, options); }); } /** * split point * * @param {Point} point * @param {Boolean} isInline * @return {Object} */ function splitPoint(point, isInline) { // find splitRoot, container // - inline: splitRoot is a child of paragraph // - block: splitRoot is a child of bodyContainer var pred = isInline ? isPara : isBodyContainer; var ancestors = listAncestor(point.node, pred); var topAncestor = lists.last(ancestors) || point.node; var splitRoot, container; if (pred(topAncestor)) { splitRoot = ancestors[ancestors.length - 2]; container = topAncestor; } else { splitRoot = topAncestor; container = splitRoot.parentNode; } // if splitRoot is exists, split with splitTree var pivot = splitRoot && splitTree(splitRoot, point, { isSkipPaddingBlankHTML: isInline, isNotSplitEdgePoint: isInline }); // if container is point.node, find pivot with point.offset if (!pivot && container === point.node) { pivot = point.node.childNodes[point.offset]; } return { rightNode: pivot, container: container }; } function create(nodeName) { return document.createElement(nodeName); } function createText(text) { return document.createTextNode(text); } /** * @method remove * * remove node, (isRemoveChild: remove child or not) * * @param {Node} node * @param {Boolean} isRemoveChild */ function remove(node, isRemoveChild) { if (!node || !node.parentNode) { return; } if (node.removeNode) { return node.removeNode(isRemoveChild); } var parent = node.parentNode; if (!isRemoveChild) { var nodes = []; for (var i = 0, len = node.childNodes.length; i < len; i++) { nodes.push(node.childNodes[i]); } for (var i = 0, len = nodes.length; i < len; i++) { parent.insertBefore(nodes[i], node); } } parent.removeChild(node); } /** * @method removeWhile * * @param {Node} node * @param {Function} pred */ function removeWhile(node, pred) { while (node) { if (isEditable(node) || !pred(node)) { break; } var parent = node.parentNode; remove(node); node = parent; } } /** * @method replace * * replace node with provided nodeName * * @param {Node} node * @param {String} nodeName * @return {Node} - new node */ function replace(node, nodeName) { if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { return node; } var newNode = create(nodeName); if (node.style.cssText) { newNode.style.cssText = node.style.cssText; } appendChildNodes(newNode, lists.from(node.childNodes)); insertAfter(newNode, node); remove(node); return newNode; } var isTextarea = makePredByNodeName('TEXTAREA'); /** * @param {jQuery} $node * @param {Boolean} [stripLinebreaks] - default: false */ function value($node, stripLinebreaks) { var val = isTextarea($node[0]) ? $node.val() : $node.html(); if (stripLinebreaks) { return val.replace(/[\n\r]/g, ''); } return val; } /** * @method html * * get the HTML contents of node * * @param {jQuery} $node * @param {Boolean} [isNewlineOnBlock] */ function html($node, isNewlineOnBlock) { var markup = value($node); if (isNewlineOnBlock) { var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g; markup = markup.replace(regexTag, function (match, endSlash, name) { name = name.toUpperCase(); var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash; var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name); return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : ''); }); markup = $$1.trim(markup); } return markup; } function posFromPlaceholder(placeholder) { var $placeholder = $$1(placeholder); var pos = $placeholder.offset(); var height = $placeholder.outerHeight(true); // include margin return { left: pos.left, top: pos.top + height }; } function attachEvents($node, events) { Object.keys(events).forEach(function (key) { $node.on(key, events[key]); }); } function detachEvents($node, events) { Object.keys(events).forEach(function (key) { $node.off(key, events[key]); }); } /** * @method isCustomStyleTag * * assert if a node contains a "note-styletag" class, * which implies that's a custom-made style tag node * * @param {Node} an HTML DOM node */ function isCustomStyleTag(node) { return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); } var dom = { /** @property {String} NBSP_CHAR */ NBSP_CHAR: NBSP_CHAR, /** @property {String} ZERO_WIDTH_NBSP_CHAR */ ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR, /** @property {String} blank */ blank: blankHTML, /** @property {String} emptyPara */ emptyPara: "<p>" + blankHTML + "</p>", makePredByNodeName: makePredByNodeName, isEditable: isEditable, isControlSizing: isControlSizing, isText: isText, isElement: isElement, isVoid: isVoid, isPara: isPara, isPurePara: isPurePara, isHeading: isHeading, isInline: isInline, isBlock: func.not(isInline), isBodyInline: isBodyInline, isBody: isBody, isParaInline: isParaInline, isPre: isPre, isList: isList, isTable: isTable, isData: isData, isCell: isCell, isBlockquote: isBlockquote, isBodyContainer: isBodyContainer, isAnchor: isAnchor, isDiv: makePredByNodeName('DIV'), isLi: isLi, isBR: makePredByNodeName('BR'), isSpan: makePredByNodeName('SPAN'), isB: makePredByNodeName('B'), isU: makePredByNodeName('U'), isS: makePredByNodeName('S'), isI: makePredByNodeName('I'), isImg: makePredByNodeName('IMG'), isTextarea: isTextarea, isEmpty: isEmpty, isEmptyAnchor: func.and(isAnchor, isEmpty), isClosestSibling: isClosestSibling, withClosestSiblings: withClosestSiblings, nodeLength: nodeLength, isLeftEdgePoint: isLeftEdgePoint, isRightEdgePoint: isRightEdgePoint, isEdgePoint: isEdgePoint, isLeftEdgeOf: isLeftEdgeOf, isRightEdgeOf: isRightEdgeOf, isLeftEdgePointOf: isLeftEdgePointOf, isRightEdgePointOf: isRightEdgePointOf, prevPoint: prevPoint, nextPoint: nextPoint, isSamePoint: isSamePoint, isVisiblePoint: isVisiblePoint, prevPointUntil: prevPointUntil, nextPointUntil: nextPointUntil, isCharPoint: isCharPoint, walkPoint: walkPoint, ancestor: ancestor, singleChildAncestor: singleChildAncestor, listAncestor: listAncestor, lastAncestor: lastAncestor, listNext: listNext, listPrev: listPrev, listDescendant: listDescendant, commonAncestor: commonAncestor, wrap: wrap, insertAfter: insertAfter, appendChildNodes: appendChildNodes, position: position, hasChildren: hasChildren, makeOffsetPath: makeOffsetPath, fromOffsetPath: fromOffsetPath, splitTree: splitTree, splitPoint: splitPoint, create: create, createText: createText, remove: remove, removeWhile: removeWhile, replace: replace, html: html, value: value, posFromPlaceholder: posFromPlaceholder, attachEvents: attachEvents, detachEvents: detachEvents, isCustomStyleTag: isCustomStyleTag }; $$1.summernote = $$1.summernote || { lang: {} }; $$1.extend($$1.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' }, image: { image: 'Picture', insert: 'Insert Image', resizeFull: 'Resize Full', resizeHalf: 'Resize Half', resizeQuarter: 'Resize Quarter', floatLeft: 'Float Left', floatRight: 'Float Right', floatNone: 'Float None', 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' }, 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: 'Foreground Color', transparent: 'Transparent', setTransparent: 'Set transparent', reset: 'Reset', resetToDefault: 'Reset to default' }, 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' } } }); var KEY_MAP = { 'BACKSPACE': 8, 'TAB': 9, 'ENTER': 13, 'SPACE': 32, 'DELETE': 46, // Arrow 'LEFT': 37, 'UP': 38, 'RIGHT': 39, 'DOWN': 40, // Number: 0-9 'NUM0': 48, 'NUM1': 49, 'NUM2': 50, 'NUM3': 51, 'NUM4': 52, 'NUM5': 53, 'NUM6': 54, 'NUM7': 55, 'NUM8': 56, // Alphabet: a-z 'B': 66, 'E': 69, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'R': 82, 'S': 83, 'U': 85, 'V': 86, 'Y': 89, 'Z': 90, 'SLASH': 191, 'LEFTBRACKET': 219, 'BACKSLASH': 220, 'RIGHTBRACKET': 221 }; /** * @class core.key * * Object for keycodes. * * @singleton * @alternateClassName key */ var key = { /** * @method isEdit * * @param {Number} keyCode * @return {Boolean} */ isEdit: function (keyCode) { return lists.contains([ KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE ], keyCode); }, /** * @method isMove * * @param {Number} keyCode * @return {Boolean} */ isMove: function (keyCode) { return lists.contains([ KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN ], keyCode); }, /** * @property {Object} nameFromCode * @property {String} nameFromCode.8 "BACKSPACE" */ nameFromCode: func.invertObject(KEY_MAP), code: KEY_MAP }; /** * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js * * @param {TextRange} textRange * @param {Boolean} isStart * @return {BoundaryPoint} * * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx */ function textRangeToPoint(textRange, isStart) { var container = textRange.parentElement(); var offset; var tester = document.body.createTextRange(); var prevContainer; var childNodes = lists.from(container.childNodes); for (offset = 0; offset < childNodes.length; offset++) { if (dom.isText(childNodes[offset])) { continue; } tester.moveToElementText(childNodes[offset]); if (tester.compareEndPoints('StartToStart', textRange) >= 0) { break; } prevContainer = childNodes[offset]; } if (offset !== 0 && dom.isText(childNodes[offset - 1])) { var textRangeStart = document.body.createTextRange(); var curTextNode = null; textRangeStart.moveToElementText(prevContainer || container); textRangeStart.collapse(!prevContainer); curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild; var pointTester = textRange.duplicate(); pointTester.setEndPoint('StartToStart', textRangeStart); var textCount = pointTester.text.replace(/[\r\n]/g, '').length; while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } // [workaround] enforce IE to re-reference curTextNode, hack var dummy = curTextNode.nodeValue; // eslint-disable-line if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } container = curTextNode; offset = textCount; } return { cont: container, offset: offset }; } /** * return TextRange from boundary point (inspired by google closure-library) * @param {BoundaryPoint} point * @return {TextRange} */ function pointToTextRange(point) { var textRangeInfo = function (container, offset) { var node, isCollapseToStart; if (dom.isText(container)) { var prevTextNodes = dom.listPrev(container, func.not(dom.isText)); var prevContainer = lists.last(prevTextNodes).previousSibling; node = prevContainer || container.parentNode; offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength); isCollapseToStart = !prevContainer; } else { node = container.childNodes[offset] || container; if (dom.isText(node)) { return textRangeInfo(node, 0); } offset = 0; isCollapseToStart = false; } return { node: node, collapseToStart: isCollapseToStart, offset: offset }; }; var textRange = document.body.createTextRange(); var info = textRangeInfo(point.node, point.offset); textRange.moveToElementText(info.node); textRange.collapse(info.collapseToStart); textRange.moveStart('character', info.offset); return textRange; } /** * Wrapped Range * * @constructor * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset */ var WrappedRange = /** @class */ (function () { function WrappedRange(sc, so, ec, eo) { this.sc = sc; this.so = so; this.ec = ec; this.eo = eo; // isOnEditable: judge whether range is on editable or not this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not this.isOnData = this.makeIsOn(dom.isData); } // nativeRange: get nativeRange from sc, so, ec, eo WrappedRange.prototype.nativeRange = function () { if (env.isW3CRangeSupport) { var w3cRange = document.createRange(); w3cRange.setStart(this.sc, this.so); w3cRange.setEnd(this.ec, this.eo); return w3cRange; } else { var textRange = pointToTextRange({ node: this.sc, offset: this.so }); textRange.setEndPoint('EndToEnd', pointToTextRange({ node: this.ec, offset: this.eo })); return textRange; } }; WrappedRange.prototype.getPoints = function () { return { sc: this.sc, so: this.so, ec: this.ec, eo: this.eo }; }; WrappedRange.prototype.getStartPoint = function () { return { node: this.sc, offset: this.so }; }; WrappedRange.prototype.getEndPoint = function () { return { node: this.ec, offset: this.eo }; }; /** * select update visible range */ WrappedRange.prototype.select = function () { var nativeRng = this.nativeRange(); if (env.isW3CRangeSupport) { var selection = document.getSelection(); if (selection.rangeCount > 0) { selection.removeAllRanges(); } selection.addRange(nativeRng); } else { nativeRng.select(); } return this; }; /** * Moves the scrollbar to start container(sc) of current range * * @return {WrappedRange} */ WrappedRange.prototype.scrollIntoView = function (container) { var height = $$1(container).height(); if (container.scrollTop + height < this.sc.offsetTop) { container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop); } return this; }; /** * @return {WrappedRange} */ WrappedRange.prototype.normalize = function () { /** * @param {BoundaryPoint} point * @param {Boolean} isLeftToRight * @return {BoundaryPoint} */ var getVisiblePoint = function (point, isLeftToRight) { if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { return point; } // point on block's edge var block = dom.ancestor(point.node, dom.isBlock); if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { // returns point already on visible point if (dom.isVisiblePoint(point)) { return point; } // reverse direction isLeftToRight = !isLeftToRight; } var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); return nextPoint || point; }; var endPoint = getVisiblePoint(this.getEndPoint(), false); var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); }; /** * returns matched nodes on range * * @param {Function} [pred] - predicate function * @param {Object} [options] * @param {Boolean} [options.includeAncestor] * @param {Boolean} [options.fullyContains] * @return {Node[]} */ WrappedRange.prototype.nodes = function (pred, options) { pred = pred || func.ok; var includeAncestor = options && options.includeAncestor; var fullyContains = options && options.fullyContains; // TODO compare points and sort var startPoint = this.getStartPoint(); var endPoint = this.getEndPoint(); var nodes = []; var leftEdgeNodes = []; dom.walkPoint(startPoint, endPoint, function (point) { if (dom.isEditable(point.node)) { return; } var node; if (fullyContains) { if (dom.isLeftEdgePoint(point)) { leftEdgeNodes.push(point.node); } if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) { node = point.node; } } else if (includeAncestor) { node = dom.ancestor(point.node, pred); } else { node = point.node; } if (node && pred(node)) { nodes.push(node); } }, true); return lists.unique(nodes); }; /** * returns commonAncestor of range * @return {Element} - commonAncestor */ WrappedRange.prototype.commonAncestor = function () { return dom.commonAncestor(this.sc, this.ec); }; /** * returns expanded range by pred * * @param {Function} pred - predicate function * @return {WrappedRange} */ WrappedRange.prototype.expand = function (pred) { var startAncestor = dom.ancestor(this.sc, pred); var endAncestor = dom.ancestor(this.ec, pred); if (!startAncestor && !endAncestor) { return new WrappedRange(this.sc, this.so, this.ec, this.eo); } var boundaryPoints = this.getPoints(); if (startAncestor) { boundaryPoints.sc = startAncestor; boundaryPoints.so = 0; } if (endAncestor) { boundaryPoints.ec = endAncestor; boundaryPoints.eo = dom.nodeLength(endAncestor); } return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); }; /** * @param {Boolean} isCollapseToStart * @return {WrappedRange} */ WrappedRange.prototype.collapse = function (isCollapseToStart) { if (isCollapseToStart) { return new WrappedRange(this.sc, this.so, this.sc, this.so); } else { return new WrappedRange(this.ec, this.eo, this.ec, this.eo); } }; /** * splitText on range */ WrappedRange.prototype.splitText = function () { var isSameContainer = this.sc === this.ec; var boundaryPoints = this.getPoints(); if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) { this.ec.splitText(this.eo); } if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) { boundaryPoints.sc = this.sc.splitText(this.so); boundaryPoints.so = 0; if (isSameContainer) { boundaryPoints.ec = boundaryPoints.sc; boundaryPoints.eo = this.eo - this.so; } } return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); }; /** * delete contents on range * @return {WrappedRange} */ WrappedRange.prototype.deleteContents = function () { if (this.isCollapsed()) { return this; } var rng = this.splitText(); var nodes = rng.nodes(null, { fullyContains: true }); // find new cursor point var point = dom.prevPointUntil(rng.getStartPoint(), function (point) { return !lists.contains(nodes, point.node); }); var emptyParents = []; $$1.each(nodes, function (idx, node) { // find empty parents var parent = node.parentNode; if (point.node !== parent && dom.nodeLength(parent) === 1) { emptyParents.push(parent); } dom.remove(node, false); }); // remove empty parents $$1.each(emptyParents, function (idx, node) { dom.remove(node, false); }); return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize(); }; /** * makeIsOn: return isOn(pred) function */ WrappedRange.prototype.makeIsOn = function (pred) { return function () { var ancestor = dom.ancestor(this.sc, pred); return !!ancestor && (ancestor === dom.ancestor(this.ec, pred)); }; }; /** * @param {Function} pred * @return {Boolean} */ WrappedRange.prototype.isLeftEdgeOf = function (pred) { if (!dom.isLeftEdgePoint(this.getStartPoint())) { return false; } var node = dom.ancestor(this.sc, pred); return node && dom.isLeftEdgeOf(this.sc, node); }; /** * returns whether range was collapsed or not */ WrappedRange.prototype.isCollapsed = function () { return this.sc === this.ec && this.so === this.eo; }; /** * wrap inline nodes which children of body with paragraph * * @return {WrappedRange} */ WrappedRange.prototype.wrapBodyInlineWithPara = function () { if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) { this.sc.innerHTML = dom.emptyPara; return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0); } /** * [workaround] firefox often create range on not visible point. so normalize here. * - firefox: |<p>text</p>| * - chrome: <p>|text|</p> */ var rng = this.normalize(); if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) { return rng; } // find inline top ancestor var topAncestor; if (dom.isInline(rng.sc)) { var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); topAncestor = lists.last(ancestors); if (!dom.isInline(topAncestor)) { topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so]; } } else { topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0]; } // siblings not in paragraph var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph if (inlineSiblings.length) { var para = dom.wrap(lists.head(inlineSiblings), 'p'); dom.appendChildNodes(para, lists.tail(inlineSiblings)); } return this.normalize(); }; /** * insert node at current cursor * * @param {Node} node * @return {Node} */ WrappedRange.prototype.insertNode = function (node) { var rng = this.wrapBodyInlineWithPara().deleteContents(); var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); if (info.rightNode) { info.rightNode.parentNode.insertBefore(node, info.rightNode); } else { info.container.appendChild(node); } return node; }; /** * insert html at current cursor */ WrappedRange.prototype.pasteHTML = function (markup) { var contentsContainer = $$1('<div></div>').html(markup)[0]; var childNodes = lists.from(contentsContainer.childNodes); var rng = this.wrapBodyInlineWithPara().deleteContents(); return childNodes.reverse().map(function (childNode) { return rng.insertNode(childNode); }).reverse(); }; /** * returns text in range * * @return {String} */ WrappedRange.prototype.toString = function () { var nativeRng = this.nativeRange(); return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text; }; /** * returns range for word before cursor * * @param {Boolean} [findAfter] - find after cursor, default: false * @return {WrappedRange} */ WrappedRange.prototype.getWordRange = function (findAfter) { var endPoint = this.getEndPoint(); if (!dom.isCharPoint(endPoint)) { return this; } var startPoint = dom.prevPointUntil(endPoint, function (point) { return !dom.isCharPoint(point); }); if (findAfter) { endPoint = dom.nextPointUntil(endPoint, function (point) { return !dom.isCharPoint(point); }); } return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); }; /** * create offsetPath bookmark * * @param {Node} editable */ WrappedRange.prototype.bookmark = function (editable) { return { s: { path: dom.makeOffsetPath(editable, this.sc), offset: this.so }, e: { path: dom.makeOffsetPath(editable, this.ec), offset: this.eo } }; }; /** * create offsetPath bookmark base on paragraph * * @param {Node[]} paras */ WrappedRange.prototype.paraBookmark = function (paras) { return { s: { path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)), offset: this.so }, e: { path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)), offset: this.eo } }; }; /** * getClientRects * @return {Rect[]} */ WrappedRange.prototype.getClientRects = function () { var nativeRng = this.nativeRange(); return nativeRng.getClientRects(); }; return WrappedRange; }()); /** * Data structure * * BoundaryPoint: a point of dom tree * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range * * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position */ var range = { /** * create Range Object From arguments or Browser Selection * * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset * @return {WrappedRange} */ create: function (sc, so, ec, eo) { if (arguments.length === 4) { return new WrappedRange(sc, so, ec, eo); } else if (arguments.length === 2) { ec = sc; eo = so; return new WrappedRange(sc, so, ec, eo); } else { var wrappedRange = this.createFromSelection(); if (!wrappedRange && arguments.length === 1) { wrappedRange = this.createFromNode(arguments[0]); return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); } return wrappedRange; } }, createFromSelection: function () { var sc, so, ec, eo; if (env.isW3CRangeSupport) { var selection = document.getSelection(); if (!selection || selection.rangeCount === 0) { return null; } else if (dom.isBody(selection.anchorNode)) { // Firefox: returns entire body as range on initialization. // We won't never need it. return null; } var nativeRng = selection.getRangeAt(0); sc = nativeRng.startContainer; so = nativeRng.startOffset; ec = nativeRng.endContainer; eo = nativeRng.endOffset; } else { var textRange = document.selection.createRange(); var textRangeEnd = textRange.duplicate(); textRangeEnd.collapse(false); var textRangeStart = textRange; textRangeStart.collapse(true); var startPoint = textRangeToPoint(textRangeStart, true); var endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed. if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) { startPoint = endPoint; } sc = startPoint.cont; so = startPoint.offset; ec = endPoint.cont; eo = endPoint.offset; } return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from node * * @param {Node} node * @return {WrappedRange} */ createFromNode: function (node) { var sc = node; var so = 0; var ec = node; var eo = dom.nodeLength(ec); // browsers can't target a picture or void node if (dom.isVoid(sc)) { so = dom.listPrev(sc).length - 1; sc = sc.parentNode; } if (dom.isBR(ec)) { eo = dom.listPrev(ec).length - 1; ec = ec.parentNode; } else if (dom.isVoid(ec)) { eo = dom.listPrev(ec).length; ec = ec.parentNode; } return this.create(sc, so, ec, eo); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeBefore: function (node) { return this.createFromNode(node).collapse(true); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeAfter: function (node) { return this.createFromNode(node).collapse(); }, /** * @method * * create WrappedRange from bookmark * * @param {Node} editable * @param {Object} bookmark * @return {WrappedRange} */ createFromBookmark: function (editable, bookmark) { var sc = dom.fromOffsetPath(editable, bookmark.s.path); var so = bookmark.s.offset; var ec = dom.fromOffsetPath(editable, bookmark.e.path); var eo = bookmark.e.offset; return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from paraBookmark * * @param {Object} bookmark * @param {Node[]} paras * @return {WrappedRange} */ createFromParaBookmark: function (bookmark, paras) { var so = bookmark.s.offset; var eo = bookmark.e.offset; var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path); var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path); return new WrappedRange(sc, so, ec, eo); } }; /** * @method readFileAsDataURL * * read contents of file as representing URL * * @param {File} file * @return {Promise} - then: dataUrl */ function readFileAsDataURL(file) { return $$1.Deferred(function (deferred) { $$1.extend(new FileReader(), { onload: function (e) { var dataURL = e.target.result; deferred.resolve(dataURL); }, onerror: function (err) { deferred.reject(err); } }).readAsDataURL(file); }).promise(); } /** * @method createImage * * create `<image>` from url string * * @param {String} url * @return {Promise} - then: $image */ function createImage(url) { return $$1.Deferred(function (deferred) { var $img = $$1('<img>'); $img.one('load', function () { $img.off('error abort'); deferred.resolve($img); }).one('error abort', function () { $img.off('load').detach(); deferred.reject($img); }).css({ display: 'none' }).appendTo(document.body).attr('src', url); }).promise(); } var History = /** @class */ (function () { function History($editable) { this.stack = []; this.stackOffset = -1; this.$editable = $editable; this.editable = $editable[0]; } History.prototype.makeSnapshot = function () { var rng = range.create(this.editable); var emptyBookmark = { s: { path: [], offset: 0 }, e: { path: [], offset: 0 } }; return { contents: this.$editable.html(), bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark) }; }; History.prototype.applySnapshot = function (snapshot) { if (snapshot.contents !== null) { this.$editable.html(snapshot.contents); } if (snapshot.bookmark !== null) { range.createFromBookmark(this.editable, snapshot.bookmark).select(); } }; /** * @method rewind * Rewinds the history stack back to the first snapshot taken. * Leaves the stack intact, so that "Redo" can still be used. */ History.prototype.rewind = function () { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } // Return to the first available snapshot. this.stackOffset = 0; // Apply that snapshot. this.applySnapshot(this.stack[this.stackOffset]); }; /** * @method reset * Resets the history stack completely; reverting to an empty editor. */ History.prototype.reset = function () { // Clear the stack. this.stack = []; // Restore stackOffset to its original value. this.stackOffset = -1; // Clear the editable area. this.$editable.html(''); // Record our first snapshot (of nothing). this.recordUndo(); }; /** * undo */ History.prototype.undo = function () { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } if (this.stackOffset > 0) { this.stackOffset--; this.applySnapshot(this.stack[this.stackOffset]); } }; /** * redo */ History.prototype.redo = function () { if (this.stack.length - 1 > this.stackOffset) { this.stackOffset++; this.applySnapshot(this.stack[this.stackOffset]); } }; /** * recorded undo */ History.prototype.recordUndo = function () { this.stackOffset++; // Wash out stack after stackOffset if (this.stack.length > this.stackOffset) { this.stack = this.stack.slice(0, this.stackOffset); } // Create new snapshot and push it to the end this.stack.push(this.makeSnapshot()); }; return History; }()); var Style = /** @class */ (function () { function Style() { } /** * @method jQueryCSS * * [workaround] for old jQuery * passing an array of style properties to .css() * will result in an object of property-value pairs. * (compability with version < 1.9) * * @private * @param {jQuery} $obj * @param {Array} propertyNames - An array of one or more CSS properties. * @return {Object} */ Style.prototype.jQueryCSS = function ($obj, propertyNames) { if (env.jqueryVersion < 1.9) { var result_1 = {}; $$1.each(propertyNames, function (idx, propertyName) { result_1[propertyName] = $obj.css(propertyName); }); return result_1; } return $obj.css(propertyNames); }; /** * returns style object from node * * @param {jQuery} $node * @return {Object} */ Style.prototype.fromNode = function ($node) { var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; var styleInfo = this.jQueryCSS($node, properties) || {}; styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); return styleInfo; }; /** * paragraph level style * * @param {WrappedRange} rng * @param {Object} styleInfo */ Style.prototype.stylePara = function (rng, styleInfo) { $$1.each(rng.nodes(dom.isPara, { includeAncestor: true }), function (idx, para) { $$1(para).css(styleInfo); }); }; /** * insert and returns styleNodes on range. * * @param {WrappedRange} rng * @param {Object} [options] - options for styleNodes * @param {String} [options.nodeName] - default: `SPAN` * @param {Boolean} [options.expandClosestSibling] - default: `false` * @param {Boolean} [options.onlyPartialContains] - default: `false` * @return {Node[]} */ Style.prototype.styleNodes = function (rng, options) { rng = rng.splitText(); var nodeName = (options && options.nodeName) || 'SPAN'; var expandClosestSibling = !!(options && options.expandClosestSibling); var onlyPartialContains = !!(options && options.onlyPartialContains); if (rng.isCollapsed()) { return [rng.insertNode(dom.create(nodeName))]; } var pred = dom.makePredByNodeName(nodeName); var nodes = rng.nodes(dom.isText, { fullyContains: true }).map(function (text) { return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); }); if (expandClosestSibling) { if (onlyPartialContains) { var nodesInRange_1 = rng.nodes(); // compose with partial contains predication pred = func.and(pred, function (node) { return lists.contains(nodesInRange_1, node); }); } return nodes.map(function (node) { var siblings = dom.withClosestSiblings(node, pred); var head = lists.head(siblings); var tails = lists.tail(siblings); $$1.each(tails, function (idx, elem) { dom.appendChildNodes(head, elem.childNodes); dom.remove(elem); }); return lists.head(siblings); }); } else { return nodes; } }; /** * get current style on cursor * * @param {WrappedRange} rng * @return {Object} - object contains style properties. */ Style.prototype.current = function (rng) { var $cont = $$1(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc); var styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" try { styleInfo = $$1.extend(styleInfo, { 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal', 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'] }); } catch (e) { } // list-style-type to list-style(unordered, ordered) if (!rng.isOnList()) { styleInfo['list-style'] = 'none'; } else { var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square']; var isUnordered = $$1.inArray(styleInfo['list-style-type'], orderedTypes) > -1; styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered'; } var para = dom.ancestor(rng.sc, dom.isPara); if (para && para.style['line-height']) { styleInfo['line-height'] = para.style.lineHeight; } else { var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); styleInfo['line-height'] = lineHeight.toFixed(1); } styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); styleInfo.range = rng; return styleInfo; }; return Style; }()); var Bullet = /** @class */ (function () { function Bullet() { } /** * toggle ordered list */ Bullet.prototype.insertOrderedList = function (editable) { this.toggleList('OL', editable); }; /** * toggle unordered list */ Bullet.prototype.insertUnorderedList = function (editable) { this.toggleList('UL', editable); }; /** * indent */ Bullet.prototype.indent = function (editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); if (dom.isLi(head)) { _this.wrapList(paras, head.parentNode.nodeName); } else { $$1.each(paras, function (idx, para) { $$1(para).css('marginLeft', function (idx, val) { return (parseInt(val, 10) || 0) + 25; }); }); } }); rng.select(); }; /** * outdent */ Bullet.prototype.outdent = function (editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); if (dom.isLi(head)) { _this.releaseList([paras]); } else { $$1.each(paras, function (idx, para) { $$1(para).css('marginLeft', function (idx, val) { val = (parseInt(val, 10) || 0); return val > 25 ? val - 25 : ''; }); }); } }); rng.select(); }; /** * toggle list * * @param {String} listName - OL or UL */ Bullet.prototype.toggleList = function (listName, editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var bookmark = rng.paraBookmark(paras); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list if (lists.find(paras, dom.isPurePara)) { var wrappedParas_1 = []; $$1.each(clustereds, function (idx, paras) { wrappedParas_1 = wrappedParas_1.concat(_this.wrapList(paras, listName)); }); paras = wrappedParas_1; // list to paragraph or change list style } else { var diffLists = rng.nodes(dom.isList, { includeAncestor: true }).filter(function (listNode) { return !$$1.nodeName(listNode, listName); }); if (diffLists.length) { $$1.each(diffLists, function (idx, listNode) { dom.replace(listNode, listName); }); } else { paras = this.releaseList(clustereds, true); } } range.createFromParaBookmark(bookmark, paras).select(); }; /** * @param {Node[]} paras * @param {String} listName * @return {Node[]} */ Bullet.prototype.wrapList = function (paras, listName) { var head = lists.head(paras); var last = lists.last(paras); var prevList = dom.isList(head.previousSibling) && head.previousSibling; var nextList = dom.isList(last.nextSibling) && last.nextSibling; var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI paras = paras.map(function (para) { return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; }); // append to list(<ul>, <ol>) dom.appendChildNodes(listNode, paras); if (nextList) { dom.appendChildNodes(listNode, lists.from(nextList.childNodes)); dom.remove(nextList); } return paras; }; /** * @method releaseList * * @param {Array[]} clustereds * @param {Boolean} isEscapseToBody * @return {Node[]} */ Bullet.prototype.releaseList = function (clustereds, isEscapseToBody) { var releasedParas = []; $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); var last = lists.last(paras); var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode; var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, { node: last.parentNode, offset: dom.position(last) + 1 }, { isSkipPaddingBlankHTML: true }) : null; var middleList = dom.splitTree(headList, { node: head.parentNode, offset: dom.position(head) }, { isSkipPaddingBlankHTML: true }); paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P if (isEscapseToBody || !dom.isList(headList.parentNode)) { paras = paras.map(function (para) { return dom.replace(para, 'P'); }); } $$1.each(lists.from(paras).reverse(), function (idx, para) { dom.insertAfter(para, headList); }); // remove empty lists var rootLists = lists.compact([headList, middleList, lastList]); $$1.each(rootLists, function (idx, rootList) { var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); $$1.each(listNodes.reverse(), function (idx, listNode) { if (!dom.nodeLength(listNode)) { dom.remove(listNode, true); } }); }); releasedParas = releasedParas.concat(paras); }); return releasedParas; }; return Bullet; }()); /** * @class editing.Typing * * Typing * */ var Typing = /** @class */ (function () { function Typing() { // a Bullet instance to toggle lists off this.bullet = new Bullet(); } /** * insert tab * * @param {WrappedRange} rng * @param {Number} tabsize */ Typing.prototype.insertTab = function (rng, tabsize) { var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); rng = rng.deleteContents(); rng.insertNode(tab, true); rng = range.create(tab, tabsize); rng.select(); }; /** * insert paragraph */ Typing.prototype.insertParagraph = function (editable) { var rng = range.create(editable); // deleteContents on range. rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph rng = rng.wrapBodyInlineWithPara(); // finding paragraph var splitRoot = dom.ancestor(rng.sc, dom.isPara); var nextPara; // on paragraph: split paragraph if (splitRoot) { // if it is an empty line with li if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { // toogle UL/OL and escape this.bullet.toggleList(splitRoot.parentNode.nodeName); return; // if it is an empty line with para on blockquote } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { // escape blockquote dom.insertAfter(splitRoot, splitRoot.parentNode); nextPara = splitRoot; // if new line has content (not a line break) } else { nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); $$1.each(emptyAnchors, function (idx, anchor) { dom.remove(anchor); }); // replace empty heading, pre or custom-made styleTag with P tag if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) { nextPara = dom.replace(nextPara, 'p'); } } // no paragraph: insert empty paragraph } else { var next = rng.sc.childNodes[rng.so]; nextPara = $$1(dom.emptyPara)[0]; if (next) { rng.sc.insertBefore(nextPara, next); } else { rng.sc.appendChild(nextPara); } } range.create(nextPara, 0).normalize().select().scrollIntoView(editable); }; return Typing; }()); /** * @class Create a virtual table to create what actions to do in change. * @param {object} startPoint Cell selected to apply change. * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction * @param {object} domTable Dom element of table to make changes. */ var TableResultAction = function (startPoint, where, action, domTable) { var _startPoint = { 'colPos': 0, 'rowPos': 0 }; var _virtualTable = []; var _actionCellList = []; /// /////////////////////////////////////////// // Private functions /// /////////////////////////////////////////// /** * Set the startPoint of action. */ function setStartPoint() { if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) { console.error('Impossible to identify start Cell point.', startPoint); return; } _startPoint.colPos = startPoint.cellIndex; if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') { console.error('Impossible to identify start Row point.', startPoint); return; } _startPoint.rowPos = startPoint.parentElement.rowIndex; } /** * Define virtual table position info object. * * @param {int} rowIndex Index position in line of virtual table. * @param {int} cellIndex Index position in column of virtual table. * @param {object} baseRow Row affected by this position. * @param {object} baseCell Cell affected by this position. * @param {bool} isSpan Inform if it is an span cell/row. */ function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) { var objPosition = { 'baseRow': baseRow, 'baseCell': baseCell, 'isRowSpan': isRowSpan, 'isColSpan': isColSpan, 'isVirtual': isVirtualCell }; if (!_virtualTable[rowIndex]) { _virtualTable[rowIndex] = []; } _virtualTable[rowIndex][cellIndex] = objPosition; } /** * Create action cell object. * * @param {object} virtualTableCellObj Object of specific position on virtual table. * @param {enum} resultAction Action to be applied in that item. */ function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) { return { 'baseCell': virtualTableCellObj.baseCell, 'action': resultAction, 'virtualTable': { 'rowIndex': virtualRowPosition, 'cellIndex': virtualColPosition } }; } /** * Recover free index of row to append Cell. * * @param {int} rowIndex Index of row to find free space. * @param {int} cellIndex Index of cell to find free space in table. */ function recoverCellIndex(rowIndex, cellIndex) { if (!_virtualTable[rowIndex]) { return cellIndex; } if (!_virtualTable[rowIndex][cellIndex]) { return cellIndex; } var newCellIndex = cellIndex; while (_virtualTable[rowIndex][newCellIndex]) { newCellIndex++; if (!_virtualTable[rowIndex][newCellIndex]) { return newCellIndex; } } } /** * Recover info about row and cell and add information to virtual table. * * @param {object} row Row to recover information. * @param {object} cell Cell to recover information. */ function addCellInfoToVirtual(row, cell) { var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex); var cellHasColspan = (cell.colSpan > 1); var cellHasRowspan = (cell.rowSpan > 1); var isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos); setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table. var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0; if (rowspanNumber > 1) { for (var rp = 1; rp < rowspanNumber; rp++) { var rowspanIndex = row.rowIndex + rp; adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell); setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true); } } // Add span cols to virtual table. var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0; if (colspanNumber > 1) { for (var cp = 1; cp < colspanNumber; cp++) { var cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp)); adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell); setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true); } } } /** * Process validation and adjust of start point if needed * * @param {int} rowIndex * @param {int} cellIndex * @param {object} cell * @param {bool} isSelectedCell */ function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) { if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) { _startPoint.colPos++; } } /** * Create virtual table of cells with all cells, including span cells. */ function createVirtualTable() { var rows = domTable.rows; for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) { var cells = rows[rowIndex].cells; for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) { addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]); } } } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getDeleteResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; case TableResultAction.where.Row: if (!cell.isVirtual && cell.isRowSpan) { return TableResultAction.resultAction.AddCell; } else if (cell.isRowSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; } return TableResultAction.resultAction.RemoveCell; } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getAddResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isRowSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; case TableResultAction.where.Row: if (cell.isRowSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isColSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; } return TableResultAction.resultAction.AddCell; } function init() { setStartPoint(); createVirtualTable(); } /// /////////////////////////////////////////// // Public functions /// /////////////////////////////////////////// /** * Recover array os what to do in table. */ this.getActionList = function () { var fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1; var fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1; var actualPosition = 0; var canContinue = true; while (canContinue) { var rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition; var colPosition = (fixedCol >= 0) ? fixedCol : actualPosition; var row = _virtualTable[rowPosition]; if (!row) { canContinue = false; return _actionCellList; } var cell = row[colPosition]; if (!cell) { canContinue = false; return _actionCellList; } // Define action to be applied in this cell var resultAction = TableResultAction.resultAction.Ignore; switch (action) { case TableResultAction.requestAction.Add: resultAction = getAddResultActionToCell(cell); break; case TableResultAction.requestAction.Delete: resultAction = getDeleteResultActionToCell(cell); break; } _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition)); actualPosition++; } return _actionCellList; }; init(); }; /** * * Where action occours enum. */ TableResultAction.where = { 'Row': 0, 'Column': 1 }; /** * * Requested action to apply enum. */ TableResultAction.requestAction = { 'Add': 0, 'Delete': 1 }; /** * * Result action to be executed enum. */ TableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 }; /** * * @class editing.Table * * Table * */ var Table = /** @class */ (function () { function Table() { } /** * handle tab key * * @param {WrappedRange} rng * @param {Boolean} isShift */ Table.prototype.tab = function (rng, isShift) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var table = dom.ancestor(cell, dom.isTable); var cells = dom.listDescendant(table, dom.isCell); var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell); if (nextCell) { range.create(nextCell, 0).select(); } }; /** * Add a new row * * @param {WrappedRange} rng * @param {String} position (top/bottom) * @return {Node} */ Table.prototype.addRow = function (rng, position) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var currentTr = $$1(cell).closest('tr'); var trAttributes = this.recoverAttributes(currentTr); var html = $$1('<tr' + trAttributes + '></tr>'); var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, $$1(currentTr).closest('table')[0]); var actions = vTable.getActionList(); for (var idCell = 0; idCell < actions.length; idCell++) { var currentCell = actions[idCell]; var tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: html.append('<td' + tdAttributes + '>' + dom.blank + '</td>'); break; case TableResultAction.resultAction.SumSpanCount: if (position === 'top') { var baseCellTr = currentCell.baseCell.parent; var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex; if (isTopFromRowSpan) { var newTd = $$1('<div></div>').append($$1('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html(); html.append(newTd); break; } } var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10); rowspanNumber++; currentCell.baseCell.setAttribute('rowSpan', rowspanNumber); break; } } if (position === 'top') { currentTr.before(html); } else { var cellHasRowspan = (cell.rowSpan > 1); if (cellHasRowspan) { var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2); $$1($$1(currentTr).parent().find('tr')[lastTrIndex]).after($$1(html)); return; } currentTr.after(html); } }; /** * Add a new col * * @param {WrappedRange} rng * @param {String} position (left/right) * @return {Node} */ Table.prototype.addCol = function (rng, position) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var rowsGroup = $$1(row).siblings(); rowsGroup.push(row); var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { var currentCell = actions[actionIndex]; var tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: if (position === 'right') { $$1(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>'); } else { $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; case TableResultAction.resultAction.SumSpanCount: if (position === 'right') { var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10); colspanNumber++; currentCell.baseCell.setAttribute('colSpan', colspanNumber); } else { $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; } } }; /* * Copy attributes from element. * * @param {object} Element to recover attributes. * @return {string} Copied string elements. */ Table.prototype.recoverAttributes = function (el) { var resultStr = ''; if (!el) { return resultStr; } var attrList = el.attributes || []; for (var i = 0; i < attrList.length; i++) { if (attrList[i].name.toLowerCase() === 'id') { continue; } if (attrList[i].specified) { resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\''; } } return resultStr; }; /** * Delete current row * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteRow = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var cellPos = row.children('td, th').index($$1(cell)); var rowPos = row[0].rowIndex; var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } var baseCell = actions[actionIndex].baseCell; var virtualPosition = actions[actionIndex].virtualTable; var hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1); var rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0; switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.AddCell: var nextRow = row.next('tr')[0]; if (!nextRow) { continue; } var cloneRow = row[0].cells[cellPos]; if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber); nextRow.cells[cellPos].innerHTML = ''; } else if (rowspanNumber === 2) { nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].removeAttribute('rowSpan'); nextRow.cells[cellPos].innerHTML = ''; } } continue; case TableResultAction.resultAction.SubtractSpanCount: if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; baseCell.setAttribute('rowSpan', rowspanNumber); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (rowspanNumber === 2) { baseCell.removeAttribute('rowSpan'); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: // Do not need remove cell because row will be deleted. continue; } } row.remove(); }; /** * Delete current col * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteCol = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var cellPos = row.children('td, th').index($$1(cell)); var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.SubtractSpanCount: var baseCell = actions[actionIndex].baseCell; var hasColspan = (baseCell.colSpan && baseCell.colSpan > 1); if (hasColspan) { var colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0; if (colspanNumber > 2) { colspanNumber--; baseCell.setAttribute('colSpan', colspanNumber); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (colspanNumber === 2) { baseCell.removeAttribute('colSpan'); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: dom.remove(actions[actionIndex].baseCell, true); continue; } } }; /** * create empty table element * * @param {Number} rowCount * @param {Number} colCount * @return {Node} */ Table.prototype.createTable = function (colCount, rowCount, options) { var tds = []; var tdHTML; for (var idxCol = 0; idxCol < colCount; idxCol++) { tds.push('<td>' + dom.blank + '</td>'); } tdHTML = tds.join(''); var trs = []; var trHTML; for (var idxRow = 0; idxRow < rowCount; idxRow++) { trs.push('<tr>' + tdHTML + '</tr>'); } trHTML = trs.join(''); var $table = $$1('<table>' + trHTML + '</table>'); if (options && options.tableClassName) { $table.addClass(options.tableClassName); } return $table[0]; }; /** * Delete current table * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteTable = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); $$1(cell).closest('table').remove(); }; return Table; }()); var KEY_BOGUS = 'bogus'; /** * @class Editor */ var Editor = /** @class */ (function () { function Editor(context) { var _this = this; this.context = context; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.editable = this.$editable[0]; this.lastRange = null; this.style = new Style(); this.table = new Table(); this.typing = new Typing(); this.bullet = new Bullet(); this.history = new History(this.$editable); this.context.memo('help.undo', this.lang.help.undo); this.context.memo('help.redo', this.lang.help.redo); this.context.memo('help.tab', this.lang.help.tab); this.context.memo('help.untab', this.lang.help.untab); this.context.memo('help.insertParagraph', this.lang.help.insertParagraph); this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList); this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList); this.context.memo('help.indent', this.lang.help.indent); this.context.memo('help.outdent', this.lang.help.outdent); this.context.memo('help.formatPara', this.lang.help.formatPara); this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule); this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand var commands = [ 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor' ]; for (var idx = 0, len = commands.length; idx < len; idx++) { this[commands[idx]] = (function (sCmd) { return function (value) { _this.beforeCommand(); document.execCommand(sCmd, false, value); _this.afterCommand(true); }; })(commands[idx]); this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]); } this.fontName = this.wrapCommand(function (value) { return _this.fontStyling('font-family', "\'" + value + "\'"); }); this.fontSize = this.wrapCommand(function (value) { return _this.fontStyling('font-size', value + 'px'); }); for (var idx = 1; idx <= 6; idx++) { this['formatH' + idx] = (function (idx) { return function () { _this.formatBlock('H' + idx); }; })(idx); this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]); } this.insertParagraph = this.wrapCommand(function () { _this.typing.insertParagraph(_this.editable); }); this.insertOrderedList = this.wrapCommand(function () { _this.bullet.insertOrderedList(_this.editable); }); this.insertUnorderedList = this.wrapCommand(function () { _this.bullet.insertUnorderedList(_this.editable); }); this.indent = this.wrapCommand(function () { _this.bullet.indent(_this.editable); }); this.outdent = this.wrapCommand(function () { _this.bullet.outdent(_this.editable); }); /** * insertNode * insert node * @param {Node} node */ this.insertNode = this.wrapCommand(function (node) { if (_this.isLimited($$1(node).text().length)) { return; } var rng = _this.createRange(); rng.insertNode(node); range.createFromNodeAfter(node).select(); }); /** * insert text * @param {String} text */ this.insertText = this.wrapCommand(function (text) { if (_this.isLimited(text.length)) { return; } var rng = _this.createRange(); var textNode = rng.insertNode(dom.createText(text)); range.create(textNode, dom.nodeLength(textNode)).select(); }); /** * paste HTML * @param {String} markup */ this.pasteHTML = this.wrapCommand(function (markup) { if (_this.isLimited(markup.length)) { return; } var contents = _this.createRange().pasteHTML(markup); range.createFromNodeAfter(lists.last(contents)).select(); }); /** * formatBlock * * @param {String} tagName */ this.formatBlock = this.wrapCommand(function (tagName, $target) { var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle; if (onApplyCustomStyle) { onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock); } else { _this.onFormatBlock(tagName, $target); } }); /** * insert horizontal rule */ this.insertHorizontalRule = this.wrapCommand(function () { var hrNode = _this.createRange().insertNode(dom.create('HR')); if (hrNode.nextSibling) { range.create(hrNode.nextSibling, 0).normalize().select(); } }); /** * lineHeight * @param {String} value */ this.lineHeight = this.wrapCommand(function (value) { _this.style.stylePara(_this.createRange(), { lineHeight: value }); }); /** * create link (command) * * @param {Object} linkInfo */ this.createLink = this.wrapCommand(function (linkInfo) { var linkUrl = linkInfo.url; var linkText = linkInfo.text; var isNewWindow = linkInfo.isNewWindow; var rng = linkInfo.range || _this.createRange(); var isTextChanged = rng.toString() !== linkText; // handle spaced urls from input if (typeof linkUrl === 'string') { linkUrl = linkUrl.trim(); } if (_this.options.onCreateLink) { linkUrl = _this.options.onCreateLink(linkUrl); } else { // if url doesn't match an URL schema, set http:// as default linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) ? linkUrl : 'http://' + linkUrl; } var anchors = []; if (isTextChanged) { rng = rng.deleteContents(); var anchor = rng.insertNode($$1('<A>' + linkText + '</A>')[0]); anchors.push(anchor); } else { anchors = _this.style.styleNodes(rng, { nodeName: 'A', expandClosestSibling: true, onlyPartialContains: true }); } $$1.each(anchors, function (idx, anchor) { $$1(anchor).attr('href', linkUrl); if (isNewWindow) { $$1(anchor).attr('target', '_blank'); } else { $$1(anchor).removeAttr('target'); } }); var startRange = range.createFromNodeBefore(lists.head(anchors)); var startPoint = startRange.getStartPoint(); var endRange = range.createFromNodeAfter(lists.last(anchors)); var endPoint = endRange.getEndPoint(); range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset).select(); }); /** * setting color * * @param {Object} sObjColor color code * @param {String} sObjColor.foreColor foreground color * @param {String} sObjColor.backColor background color */ this.color = this.wrapCommand(function (colorInfo) { var foreColor = colorInfo.foreColor; var backColor = colorInfo.backColor; if (foreColor) { document.execCommand('foreColor', false, foreColor); } if (backColor) { document.execCommand('backColor', false, backColor); } }); /** * Set foreground color * * @param {String} colorCode foreground color code */ this.foreColor = this.wrapCommand(function (colorInfo) { document.execCommand('styleWithCSS', false, true); document.execCommand('foreColor', false, colorInfo); }); /** * insert Table * * @param {String} dimension of table (ex : "5x5") */ this.insertTable = this.wrapCommand(function (dim) { var dimension = dim.split('x'); var rng = _this.createRange().deleteContents(); rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options)); }); /** * remove media object and Figure Elements if media object is img with Figure. */ this.removeMedia = this.wrapCommand(function () { var $target = $$1(_this.restoreTarget()).parent(); if ($target.parent('figure').length) { $target.parent('figure').remove(); } else { $target = $$1(_this.restoreTarget()).detach(); } _this.context.triggerEvent('media.delete', $target, _this.$editable); }); /** * float me * * @param {String} value */ this.floatMe = this.wrapCommand(function (value) { var $target = $$1(_this.restoreTarget()); $target.toggleClass('note-float-left', value === 'left'); $target.toggleClass('note-float-right', value === 'right'); $target.css('float', value); }); /** * resize overlay element * @param {String} value */ this.resize = this.wrapCommand(function (value) { var $target = $$1(_this.restoreTarget()); $target.css({ width: value * 100 + '%', height: '' }); }); } Editor.prototype.initialize = function () { var _this = this; // bind custom events this.$editable.on('keydown', function (event) { if (event.keyCode === key.code.ENTER) { _this.context.triggerEvent('enter', event); } _this.context.triggerEvent('keydown', event); if (!event.isDefaultPrevented()) { if (_this.options.shortcuts) { _this.handleKeyMap(event); } else { _this.preventDefaultEditableShortCuts(event); } } if (_this.isLimited(1, event)) { return false; } }).on('keyup', function (event) { _this.context.triggerEvent('keyup', event); }).on('focus', function (event) { _this.context.triggerEvent('focus', event); }).on('blur', function (event) { _this.context.triggerEvent('blur', event); }).on('mousedown', function (event) { _this.context.triggerEvent('mousedown', event); }).on('mouseup', function (event) { _this.context.triggerEvent('mouseup', event); }).on('scroll', function (event) { _this.context.triggerEvent('scroll', event); }).on('paste', function (event) { _this.context.triggerEvent('paste', event); }); // init content before set event this.$editable.html(dom.html(this.$note) || dom.emptyPara); this.$editable.on(env.inputEventName, func.debounce(function () { _this.context.triggerEvent('change', _this.$editable.html()); }, 100)); this.$editor.on('focusin', function (event) { _this.context.triggerEvent('focusin', event); }).on('focusout', function (event) { _this.context.triggerEvent('focusout', event); }); if (!this.options.airMode) { if (this.options.width) { this.$editor.outerWidth(this.options.width); } if (this.options.height) { this.$editable.outerHeight(this.options.height); } if (this.options.maxHeight) { this.$editable.css('max-height', this.options.maxHeight); } if (this.options.minHeight) { this.$editable.css('min-height', this.options.minHeight); } } this.history.recordUndo(); }; Editor.prototype.destroy = function () { this.$editable.off(); }; Editor.prototype.handleKeyMap = function (event) { var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; var keys = []; if (event.metaKey) { keys.push('CMD'); } if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); } if (event.shiftKey) { keys.push('SHIFT'); } var keyName = key.nameFromCode[event.keyCode]; if (keyName) { keys.push(keyName); } var eventName = keyMap[keys.join('+')]; if (eventName) { if (this.context.invoke(eventName) !== false) { event.preventDefault(); } } else if (key.isEdit(event.keyCode)) { this.afterCommand(); } }; Editor.prototype.preventDefaultEditableShortCuts = function (event) { // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) { event.preventDefault(); } }; Editor.prototype.isLimited = function (pad, event) { pad = pad || 0; if (typeof event !== 'undefined') { if (key.isMove(event.keyCode) || (event.ctrlKey || event.metaKey) || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) { return false; } } if (this.options.maxTextLength > 0) { if ((this.$editable.text().length + pad) >= this.options.maxTextLength) { return true; } } return false; }; /** * create range * @return {WrappedRange} */ Editor.prototype.createRange = function () { this.focus(); return range.create(this.editable); }; /** * saveRange * * save current range * * @param {Boolean} [thenCollapse=false] */ Editor.prototype.saveRange = function (thenCollapse) { this.lastRange = this.createRange(); if (thenCollapse) { this.lastRange.collapse().select(); } }; /** * restoreRange * * restore lately range */ Editor.prototype.restoreRange = function () { if (this.lastRange) { this.lastRange.select(); this.focus(); } }; Editor.prototype.saveTarget = function (node) { this.$editable.data('target', node); }; Editor.prototype.clearTarget = function () { this.$editable.removeData('target'); }; Editor.prototype.restoreTarget = function () { return this.$editable.data('target'); }; /** * currentStyle * * current style * @return {Object|Boolean} unfocus */ Editor.prototype.currentStyle = function () { var rng = range.create(); if (rng) { rng = rng.normalize(); } return rng ? this.style.current(rng) : this.style.fromNode(this.$editable); }; /** * style from node * * @param {jQuery} $node * @return {Object} */ Editor.prototype.styleFromNode = function ($node) { return this.style.fromNode($node); }; /** * undo */ Editor.prototype.undo = function () { this.context.triggerEvent('before.command', this.$editable.html()); this.history.undo(); this.context.triggerEvent('change', this.$editable.html()); }; /** * redo */ Editor.prototype.redo = function () { this.context.triggerEvent('before.command', this.$editable.html()); this.history.redo(); this.context.triggerEvent('change', this.$editable.html()); }; /** * before command */ Editor.prototype.beforeCommand = function () { this.context.triggerEvent('before.command', this.$editable.html()); // keep focus on editable before command execution this.focus(); }; /** * after command * @param {Boolean} isPreventTrigger */ Editor.prototype.afterCommand = function (isPreventTrigger) { this.normalizeContent(); this.history.recordUndo(); if (!isPreventTrigger) { this.context.triggerEvent('change', this.$editable.html()); } }; /** * handle tab key */ Editor.prototype.tab = function () { var rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng); } else { if (this.options.tabSize === 0) { return false; } if (!this.isLimited(this.options.tabSize)) { this.beforeCommand(); this.typing.insertTab(rng, this.options.tabSize); this.afterCommand(); } } }; /** * handle shift+tab key */ Editor.prototype.untab = function () { var rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng, true); } else { if (this.options.tabSize === 0) { return false; } } }; /** * run given function between beforeCommand and afterCommand */ Editor.prototype.wrapCommand = function (fn) { var _this = this; return function () { _this.beforeCommand(); fn.apply(_this, arguments); _this.afterCommand(); }; }; /** * insert image * * @param {String} src * @param {String|Function} param * @return {Promise} */ Editor.prototype.insertImage = function (src, param) { var _this = this; return createImage(src, param).then(function ($image) { _this.beforeCommand(); if (typeof param === 'function') { param($image); } else { if (typeof param === 'string') { $image.attr('data-filename', param); } $image.css('width', Math.min(_this.$editable.width(), $image.width())); } $image.show(); range.create(_this.editable).insertNode($image[0]); range.createFromNodeAfter($image[0]).select(); _this.afterCommand(); }).fail(function (e) { _this.context.triggerEvent('image.upload.error', e); }); }; /** * insertImages * @param {File[]} files */ Editor.prototype.insertImages = function (files) { var _this = this; $$1.each(files, function (idx, file) { var filename = file.name; if (_this.options.maximumImageFileSize && _this.options.maximumImageFileSize < file.size) { _this.context.triggerEvent('image.upload.error', _this.lang.image.maximumFileSizeError); } else { readFileAsDataURL(file).then(function (dataURL) { return _this.insertImage(dataURL, filename); }).fail(function () { _this.context.triggerEvent('image.upload.error'); }); } }); }; /** * insertImagesOrCallback * @param {File[]} files */ Editor.prototype.insertImagesOrCallback = function (files) { var callbacks = this.options.callbacks; // If onImageUpload this.options setted if (callbacks.onImageUpload) { this.context.triggerEvent('image.upload', files); // else insert Image as dataURL } else { this.insertImages(files); } }; /** * return selected plain text * @return {String} text */ Editor.prototype.getSelectedText = function () { var rng = this.createRange(); // if range on anchor, expand range with anchor if (rng.isOnAnchor()) { rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor)); } return rng.toString(); }; Editor.prototype.onFormatBlock = function (tagName, $target) { // [workaround] for MSIE, IE need `<` tagName = env.isMSIE ? '<' + tagName + '>' : tagName; document.execCommand('FormatBlock', false, tagName); // support custom class if ($target && $target.length) { var className = $target[0].className || ''; if (className) { var currentRange = this.createRange(); var $parent = $$1([currentRange.sc, currentRange.ec]).closest(tagName); $parent.addClass(className); } } }; Editor.prototype.formatPara = function () { this.formatBlock('P'); }; Editor.prototype.fontStyling = function (target, value) { var rng = this.createRange(); if (rng) { var spans = this.style.styleNodes(rng); $$1(spans).css(target, value); // [workaround] added styled bogus span for style // - also bogus character needed for cursor position if (rng.isCollapsed()) { var firstSpan = lists.head(spans); if (firstSpan && !dom.nodeLength(firstSpan)) { firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; range.createFromNodeAfter(firstSpan.firstChild).select(); this.$editable.data(KEY_BOGUS, firstSpan); } } } }; /** * unlink * * @type command */ Editor.prototype.unlink = function () { var rng = this.createRange(); if (rng.isOnAnchor()) { var anchor = dom.ancestor(rng.sc, dom.isAnchor); rng = range.createFromNode(anchor); rng.select(); this.beforeCommand(); document.execCommand('unlink'); this.afterCommand(); } }; /** * returns link info * * @return {Object} * @return {WrappedRange} return.range * @return {String} return.text * @return {Boolean} [return.isNewWindow=true] * @return {String} [return.url=""] */ Editor.prototype.getLinkInfo = function () { var rng = this.createRange().expand(dom.isAnchor); // Get the first anchor on range(for edit). var $anchor = $$1(lists.head(rng.nodes(dom.isAnchor))); var linkInfo = { range: rng, text: rng.toString(), url: $anchor.length ? $anchor.attr('href') : '' }; // Define isNewWindow when anchor exists. if ($anchor.length) { linkInfo.isNewWindow = $anchor.attr('target') === '_blank'; } return linkInfo; }; Editor.prototype.addRow = function (position) { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addRow(rng, position); this.afterCommand(); } }; Editor.prototype.addCol = function (position) { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addCol(rng, position); this.afterCommand(); } }; Editor.prototype.deleteRow = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteRow(rng); this.afterCommand(); } }; Editor.prototype.deleteCol = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteCol(rng); this.afterCommand(); } }; Editor.prototype.deleteTable = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteTable(rng); this.afterCommand(); } }; /** * @param {Position} pos * @param {jQuery} $target - target element * @param {Boolean} [bKeepRatio] - keep ratio */ Editor.prototype.resizeTo = function (pos, $target, bKeepRatio) { var imageSize; if (bKeepRatio) { var newRatio = pos.y / pos.x; var ratio = $target.data('ratio'); imageSize = { width: ratio > newRatio ? pos.x : pos.y / ratio, height: ratio > newRatio ? pos.x * ratio : pos.y }; } else { imageSize = { width: pos.x, height: pos.y }; } $target.css(imageSize); }; /** * returns whether editable area has focus or not. */ Editor.prototype.hasFocus = function () { return this.$editable.is(':focus'); }; /** * set focus */ Editor.prototype.focus = function () { // [workaround] Screen will move when page is scolled in IE. // - do focus when not focused if (!this.hasFocus()) { this.$editable.focus(); } }; /** * returns whether contents is empty or not. * @return {Boolean} */ Editor.prototype.isEmpty = function () { return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html(); }; /** * Removes all contents and restores the editable instance to an _emptyPara_. */ Editor.prototype.empty = function () { this.context.invoke('code', dom.emptyPara); }; /** * normalize content */ Editor.prototype.normalizeContent = function () { this.$editable[0].normalize(); }; return Editor; }()); var Clipboard = /** @class */ (function () { function Clipboard(context) { this.context = context; this.$editable = context.layoutInfo.editable; } Clipboard.prototype.initialize = function () { this.$editable.on('paste', this.pasteByEvent.bind(this)); }; /** * paste by clipboard event * * @param {Event} event */ Clipboard.prototype.pasteByEvent = function (event) { var clipboardData = event.originalEvent.clipboardData; if (clipboardData && clipboardData.items && clipboardData.items.length) { var item = lists.head(clipboardData.items); if (item.kind === 'file' && item.type.indexOf('image/') !== -1) { this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]); } this.context.invoke('editor.afterCommand'); } }; return Clipboard; }()); var Dropzone = /** @class */ (function () { function Dropzone(context) { this.context = context; this.$eventListener = $$1(document); this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.documentEventHandlers = {}; this.$dropzone = $$1([ '<div class="note-dropzone">', ' <div class="note-dropzone-message"/>', '</div>' ].join('')).prependTo(this.$editor); } /** * attach Drag and Drop Events */ Dropzone.prototype.initialize = function () { if (this.options.disableDragAndDrop) { // prevent default drop event this.documentEventHandlers.onDrop = function (e) { e.preventDefault(); }; // do not consider outside of dropzone this.$eventListener = this.$dropzone; this.$eventListener.on('drop', this.documentEventHandlers.onDrop); } else { this.attachDragAndDropEvent(); } }; /** * attach Drag and Drop Events */ Dropzone.prototype.attachDragAndDropEvent = function () { var _this = this; var collection = $$1(); var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message'); this.documentEventHandlers.onDragenter = function (e) { var isCodeview = _this.context.invoke('codeview.isActivated'); var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0; if (!isCodeview && !collection.length && hasEditorSize) { _this.$editor.addClass('dragover'); _this.$dropzone.width(_this.$editor.width()); _this.$dropzone.height(_this.$editor.height()); $dropzoneMessage.text(_this.lang.image.dragImageHere); } collection = collection.add(e.target); }; this.documentEventHandlers.onDragleave = function (e) { collection = collection.not(e.target); if (!collection.length) { _this.$editor.removeClass('dragover'); } }; this.documentEventHandlers.onDrop = function () { collection = $$1(); _this.$editor.removeClass('dragover'); }; // show dropzone on dragenter when dragging a object to document // -but only if the editor is visible, i.e. has a positive width and height this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter) .on('dragleave', this.documentEventHandlers.onDragleave) .on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover. this.$dropzone.on('dragenter', function () { _this.$dropzone.addClass('hover'); $dropzoneMessage.text(_this.lang.image.dropImage); }).on('dragleave', function () { _this.$dropzone.removeClass('hover'); $dropzoneMessage.text(_this.lang.image.dragImageHere); }); // attach dropImage this.$dropzone.on('drop', function (event) { var dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content event.preventDefault(); if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { _this.$editable.focus(); _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files); } else { $$1.each(dataTransfer.types, function (idx, type) { var content = dataTransfer.getData(type); if (type.toLowerCase().indexOf('text') > -1) { _this.context.invoke('editor.pasteHTML', content); } else { $$1(content).each(function (idx, item) { _this.context.invoke('editor.insertNode', item); }); } }); } }).on('dragover', false); // prevent default dragover event }; Dropzone.prototype.destroy = function () { var _this = this; Object.keys(this.documentEventHandlers).forEach(function (key) { _this.$eventListener.off(key.substr(2).toLowerCase(), _this.documentEventHandlers[key]); }); this.documentEventHandlers = {}; }; return Dropzone; }()); var CodeMirror; if (env.hasCodeMirror) { if (env.isSupportAmd) { require(['codemirror'], function (cm) { CodeMirror = cm; }); } else { CodeMirror = window.CodeMirror; } } /** * @class Codeview */ var CodeView = /** @class */ (function () { function CodeView(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.options = context.options; } CodeView.prototype.sync = function () { var isCodeview = this.isActivated(); if (isCodeview && env.hasCodeMirror) { this.$codable.data('cmEditor').save(); } }; /** * @return {Boolean} */ CodeView.prototype.isActivated = function () { return this.$editor.hasClass('codeview'); }; /** * toggle codeview */ CodeView.prototype.toggle = function () { if (this.isActivated()) { this.deactivate(); } else { this.activate(); } this.context.triggerEvent('codeview.toggled'); }; /** * activate code view */ CodeView.prototype.activate = function () { var _this = this; this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml)); this.$codable.height(this.$editable.height()); this.context.invoke('toolbar.updateCodeview', true); this.$editor.addClass('codeview'); this.$codable.focus(); // activate CodeMirror as codable if (env.hasCodeMirror) { var cmEditor_1 = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer if (this.options.codemirror.tern) { var server_1 = new CodeMirror.TernServer(this.options.codemirror.tern); cmEditor_1.ternServer = server_1; cmEditor_1.on('cursorActivity', function (cm) { server_1.updateArgHints(cm); }); } cmEditor_1.on('blur', function (event) { _this.context.triggerEvent('blur.codeview', cmEditor_1.getValue(), event); }); // CodeMirror hasn't Padding. cmEditor_1.setSize(null, this.$editable.outerHeight()); this.$codable.data('cmEditor', cmEditor_1); } else { this.$codable.on('blur', function (event) { _this.context.triggerEvent('blur.codeview', _this.$codable.val(), event); }); } }; /** * deactivate code view */ CodeView.prototype.deactivate = function () { // deactivate CodeMirror as codable if (env.hasCodeMirror) { var cmEditor = this.$codable.data('cmEditor'); this.$codable.val(cmEditor.getValue()); cmEditor.toTextArea(); } var value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara; var isChange = this.$editable.html() !== value; this.$editable.html(value); this.$editable.height(this.options.height ? this.$codable.height() : 'auto'); this.$editor.removeClass('codeview'); if (isChange) { this.context.triggerEvent('change', this.$editable.html(), this.$editable); } this.$editable.focus(); this.context.invoke('toolbar.updateCodeview', false); }; CodeView.prototype.destroy = function () { if (this.isActivated()) { this.deactivate(); } }; return CodeView; }()); var EDITABLE_PADDING = 24; var Statusbar = /** @class */ (function () { function Statusbar(context) { this.$document = $$1(document); this.$statusbar = context.layoutInfo.statusbar; this.$editable = context.layoutInfo.editable; this.options = context.options; } Statusbar.prototype.initialize = function () { var _this = this; if (this.options.airMode || this.options.disableResizeEditor) { this.destroy(); return; } this.$statusbar.on('mousedown', function (event) { event.preventDefault(); event.stopPropagation(); var editableTop = _this.$editable.offset().top - _this.$document.scrollTop(); var onMouseMove = function (event) { var height = event.clientY - (editableTop + EDITABLE_PADDING); height = (_this.options.minheight > 0) ? Math.max(height, _this.options.minheight) : height; height = (_this.options.maxHeight > 0) ? Math.min(height, _this.options.maxHeight) : height; _this.$editable.height(height); }; _this.$document.on('mousemove', onMouseMove).one('mouseup', function () { _this.$document.off('mousemove', onMouseMove); }); }); }; Statusbar.prototype.destroy = function () { this.$statusbar.off(); this.$statusbar.addClass('locked'); }; return Statusbar; }()); var Fullscreen = /** @class */ (function () { function Fullscreen(context) { var _this = this; this.context = context; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.$window = $$1(window); this.$scrollbar = $$1('html, body'); this.onResize = function () { _this.resizeTo({ h: _this.$window.height() - _this.$toolbar.outerHeight() }); }; } Fullscreen.prototype.resizeTo = function (size) { this.$editable.css('height', size.h); this.$codable.css('height', size.h); if (this.$codable.data('cmeditor')) { this.$codable.data('cmeditor').setsize(null, size.h); } }; /** * toggle fullscreen */ Fullscreen.prototype.toggle = function () { this.$editor.toggleClass('fullscreen'); if (this.isFullscreen()) { this.$editable.data('orgHeight', this.$editable.css('height')); this.$window.on('resize', this.onResize).trigger('resize'); this.$scrollbar.css('overflow', 'hidden'); } else { this.$window.off('resize', this.onResize); this.resizeTo({ h: this.$editable.data('orgHeight') }); this.$scrollbar.css('overflow', 'visible'); } this.context.invoke('toolbar.updateFullscreen', this.isFullscreen()); }; Fullscreen.prototype.isFullscreen = function () { return this.$editor.hasClass('fullscreen'); }; return Fullscreen; }()); var Handle = /** @class */ (function () { function Handle(context) { var _this = this; this.context = context; this.$document = $$1(document); this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.lang = this.options.langInfo; this.events = { 'summernote.mousedown': function (we, e) { if (_this.update(e.target)) { e.preventDefault(); } }, 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () { _this.update(); }, 'summernote.disable': function () { _this.hide(); }, 'summernote.codeview.toggled': function () { _this.update(); } }; } Handle.prototype.initialize = function () { var _this = this; this.$handle = $$1([ '<div class="note-handle">', '<div class="note-control-selection">', '<div class="note-control-selection-bg"></div>', '<div class="note-control-holder note-control-nw"></div>', '<div class="note-control-holder note-control-ne"></div>', '<div class="note-control-holder note-control-sw"></div>', '<div class="', (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'), ' note-control-se"></div>', (this.options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>'), '</div>', '</div>' ].join('')).prependTo(this.$editingArea); this.$handle.on('mousedown', function (event) { if (dom.isControlSizing(event.target)) { event.preventDefault(); event.stopPropagation(); var $target_1 = _this.$handle.find('.note-control-selection').data('target'); var posStart_1 = $target_1.offset(); var scrollTop_1 = _this.$document.scrollTop(); var onMouseMove_1 = function (event) { _this.context.invoke('editor.resizeTo', { x: event.clientX - posStart_1.left, y: event.clientY - (posStart_1.top - scrollTop_1) }, $target_1, !event.shiftKey); _this.update($target_1[0]); }; _this.$document .on('mousemove', onMouseMove_1) .one('mouseup', function (e) { e.preventDefault(); _this.$document.off('mousemove', onMouseMove_1); _this.context.invoke('editor.afterCommand'); }); if (!$target_1.data('ratio')) { $target_1.data('ratio', $target_1.height() / $target_1.width()); } } }); // Listen for scrolling on the handle overlay. this.$handle.on('wheel', function (e) { e.preventDefault(); _this.update(); }); }; Handle.prototype.destroy = function () { this.$handle.remove(); }; Handle.prototype.update = function (target) { if (this.context.isDisabled()) { return false; } var isImage = dom.isImg(target); var $selection = this.$handle.find('.note-control-selection'); this.context.invoke('imagePopover.update', target); if (isImage) { var $image = $$1(target); var position = $image.position(); var pos = { left: position.left + parseInt($image.css('marginLeft'), 10), top: position.top + parseInt($image.css('marginTop'), 10) }; // exclude margin var imageSize = { w: $image.outerWidth(false), h: $image.outerHeight(false) }; $selection.css({ display: 'block', left: pos.left, top: pos.top, width: imageSize.w, height: imageSize.h }).data('target', $image); // save current image element. var origImageObj = new Image(); origImageObj.src = $image.attr('src'); var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')'; $selection.find('.note-control-selection-info').text(sizingText); this.context.invoke('editor.saveTarget', target); } else { this.hide(); } return isImage; }; /** * hide * * @param {jQuery} $handle */ Handle.prototype.hide = function () { this.context.invoke('editor.clearTarget'); this.$handle.children().hide(); }; return Handle; }()); var defaultScheme = 'http://'; var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; var AutoLink = /** @class */ (function () { function AutoLink(context) { var _this = this; this.context = context; this.events = { 'summernote.keyup': function (we, e) { if (!e.isDefaultPrevented()) { _this.handleKeyup(e); } }, 'summernote.keydown': function (we, e) { _this.handleKeydown(e); } }; } AutoLink.prototype.initialize = function () { this.lastWordRange = null; }; AutoLink.prototype.destroy = function () { this.lastWordRange = null; }; AutoLink.prototype.replace = function () { if (!this.lastWordRange) { return; } var keyword = this.lastWordRange.toString(); var match = keyword.match(linkPattern); if (match && (match[1] || match[2])) { var link = match[1] ? keyword : defaultScheme + keyword; var node = $$1('<a />').html(keyword).attr('href', link)[0]; this.lastWordRange.insertNode(node); this.lastWordRange = null; this.context.invoke('editor.focus'); } }; AutoLink.prototype.handleKeydown = function (e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { var wordRange = this.context.invoke('editor.createRange').getWordRange(); this.lastWordRange = wordRange; } }; AutoLink.prototype.handleKeyup = function (e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { this.replace(); } }; return AutoLink; }()); /** * textarea auto sync. */ var AutoSync = /** @class */ (function () { function AutoSync(context) { var _this = this; this.$note = context.layoutInfo.note; this.events = { 'summernote.change': function () { _this.$note.val(context.invoke('code')); } }; } AutoSync.prototype.shouldInitialize = function () { return dom.isTextarea(this.$note[0]); }; return AutoSync; }()); var Placeholder = /** @class */ (function () { function Placeholder(context) { var _this = this; this.context = context; this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.events = { 'summernote.init summernote.change': function () { _this.update(); }, 'summernote.codeview.toggled': function () { _this.update(); } }; } Placeholder.prototype.shouldInitialize = function () { return !!this.options.placeholder; }; Placeholder.prototype.initialize = function () { var _this = this; this.$placeholder = $$1('<div class="note-placeholder">'); this.$placeholder.on('click', function () { _this.context.invoke('focus'); }).text(this.options.placeholder).prependTo(this.$editingArea); this.update(); }; Placeholder.prototype.destroy = function () { this.$placeholder.remove(); }; Placeholder.prototype.update = function () { var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty'); this.$placeholder.toggle(isShow); }; return Placeholder; }()); var Buttons = /** @class */ (function () { function Buttons(context) { this.ui = $$1.summernote.ui; this.context = context; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.lang = this.options.langInfo; this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']); } Buttons.prototype.representShortcut = function (editorMethod) { var shortcut = this.invertedKeyMap[editorMethod]; if (!this.options.shortcuts || !shortcut) { return ''; } if (env.isMac) { shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); } shortcut = shortcut.replace('BACKSLASH', '\\') .replace('SLASH', '/') .replace('LEFTBRACKET', '[') .replace('RIGHTBRACKET', ']'); return ' (' + shortcut + ')'; }; Buttons.prototype.button = function (o) { if (!this.options.tooltip && o.tooltip) { delete o.tooltip; } o.container = this.options.container; return this.ui.button(o); }; Buttons.prototype.initialize = function () { this.addToolbarButtons(); this.addImagePopoverButtons(); this.addLinkPopoverButtons(); this.addTablePopoverButtons(); this.fontInstalledMap = {}; }; Buttons.prototype.destroy = function () { delete this.fontInstalledMap; }; Buttons.prototype.isFontInstalled = function (name) { if (!this.fontInstalledMap.hasOwnProperty(name)) { this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name); } return this.fontInstalledMap[name]; }; Buttons.prototype.isFontDeservedToAdd = function (name) { var genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy']; name = name.toLowerCase(); return ((name !== '') && this.isFontInstalled(name) && ($$1.inArray(name, genericFamilies) === -1)); }; Buttons.prototype.addToolbarButtons = function () { var _this = this; this.context.memo('button.style', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.magic), _this.options), tooltip: _this.lang.style.style, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ className: 'dropdown-style', items: _this.options.styleTags, title: _this.lang.style.style, template: function (item) { if (typeof item === 'string') { item = { tag: item, title: (_this.lang.style.hasOwnProperty(item) ? _this.lang.style[item] : item) }; } var tag = item.tag; var title = item.title; var style = item.style ? ' style="' + item.style + '" ' : ''; var className = item.className ? ' class="' + item.className + '"' : ''; return '<' + tag + style + className + '>' + title + '</' + tag + '>'; }, click: _this.context.createInvokeHandler('editor.formatBlock') }) ]).render(); }); var _loop_1 = function (styleIdx, styleLen) { var item = this_1.options.styleTags[styleIdx]; this_1.context.memo('button.style.' + item, function () { return _this.button({ className: 'note-btn-style-' + item, contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>', tooltip: _this.lang.style[item], click: _this.context.createInvokeHandler('editor.formatBlock') }).render(); }); }; var this_1 = this; for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) { _loop_1(styleIdx, styleLen); } this.context.memo('button.bold', function () { return _this.button({ className: 'note-btn-bold', contents: _this.ui.icon(_this.options.icons.bold), tooltip: _this.lang.font.bold + _this.representShortcut('bold'), click: _this.context.createInvokeHandlerAndUpdateState('editor.bold') }).render(); }); this.context.memo('button.italic', function () { return _this.button({ className: 'note-btn-italic', contents: _this.ui.icon(_this.options.icons.italic), tooltip: _this.lang.font.italic + _this.representShortcut('italic'), click: _this.context.createInvokeHandlerAndUpdateState('editor.italic') }).render(); }); this.context.memo('button.underline', function () { return _this.button({ className: 'note-btn-underline', contents: _this.ui.icon(_this.options.icons.underline), tooltip: _this.lang.font.underline + _this.representShortcut('underline'), click: _this.context.createInvokeHandlerAndUpdateState('editor.underline') }).render(); }); this.context.memo('button.clear', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.eraser), tooltip: _this.lang.font.clear + _this.representShortcut('removeFormat'), click: _this.context.createInvokeHandler('editor.removeFormat') }).render(); }); this.context.memo('button.strikethrough', function () { return _this.button({ className: 'note-btn-strikethrough', contents: _this.ui.icon(_this.options.icons.strikethrough), tooltip: _this.lang.font.strikethrough + _this.representShortcut('strikethrough'), click: _this.context.createInvokeHandlerAndUpdateState('editor.strikethrough') }).render(); }); this.context.memo('button.superscript', function () { return _this.button({ className: 'note-btn-superscript', contents: _this.ui.icon(_this.options.icons.superscript), tooltip: _this.lang.font.superscript, click: _this.context.createInvokeHandlerAndUpdateState('editor.superscript') }).render(); }); this.context.memo('button.subscript', function () { return _this.button({ className: 'note-btn-subscript', contents: _this.ui.icon(_this.options.icons.subscript), tooltip: _this.lang.font.subscript, click: _this.context.createInvokeHandlerAndUpdateState('editor.subscript') }).render(); }); this.context.memo('button.fontname', function () { var styleInfo = _this.context.invoke('editor.currentStyle'); // Add 'default' fonts into the fontnames array if not exist $$1.each(styleInfo['font-family'].split(','), function (idx, fontname) { fontname = fontname.trim().replace(/['"]+/g, ''); if (_this.isFontDeservedToAdd(fontname)) { if ($$1.inArray(fontname, _this.options.fontNames) === -1) { _this.options.fontNames.push(fontname); } } }); return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('<span class="note-current-fontname"/>', _this.options), tooltip: _this.lang.font.name, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ className: 'dropdown-fontname', checkClassName: _this.options.icons.menuCheck, items: _this.options.fontNames.filter(_this.isFontInstalled.bind(_this)), title: _this.lang.font.name, template: function (item) { return '<span style="font-family: \'' + item + '\'">' + item + '</span>'; }, click: _this.context.createInvokeHandlerAndUpdateState('editor.fontName') }) ]).render(); }); this.context.memo('button.fontsize', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>', _this.options), tooltip: _this.lang.font.size, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ className: 'dropdown-fontsize', checkClassName: _this.options.icons.menuCheck, items: _this.options.fontSizes, title: _this.lang.font.size, click: _this.context.createInvokeHandlerAndUpdateState('editor.fontSize') }) ]).render(); }); this.context.memo('button.color', function () { return _this.ui.buttonGroup({ className: 'note-color', children: [ _this.button({ className: 'note-current-color-button', contents: _this.ui.icon(_this.options.icons.font + ' note-recent-color'), tooltip: _this.lang.color.recent, click: function (e) { var $button = $$1(e.currentTarget); _this.context.invoke('editor.color', { backColor: $button.attr('data-backColor'), foreColor: $button.attr('data-foreColor') }); }, callback: function ($button) { var $recentColor = $button.find('.note-recent-color'); $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } }), _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('', _this.options), tooltip: _this.lang.color.more, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ items: [ '<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>', '<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>' ].join(''), callback: function ($dropdown) { $dropdown.find('.note-holder').each(function (idx, item) { var $holder = $$1(item); $holder.append(_this.ui.palette({ colors: _this.options.colors, colorsName: _this.options.colorsName, eventName: $holder.data('event'), container: _this.options.container, tooltip: _this.options.tooltip }).render()); }); }, click: function (event) { var $button = $$1(event.target); var eventName = $button.data('event'); var value = $button.data('value'); if (eventName && value) { var key = eventName === 'backColor' ? 'background-color' : 'color'; var $color = $button.closest('.note-color').find('.note-recent-color'); var $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); _this.context.invoke('editor.' + eventName, value); } } }) ] }).render(); }); this.context.memo('button.ul', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.unorderedlist), tooltip: _this.lang.lists.unordered + _this.representShortcut('insertUnorderedList'), click: _this.context.createInvokeHandler('editor.insertUnorderedList') }).render(); }); this.context.memo('button.ol', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.orderedlist), tooltip: _this.lang.lists.ordered + _this.representShortcut('insertOrderedList'), click: _this.context.createInvokeHandler('editor.insertOrderedList') }).render(); }); var justifyLeft = this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'), click: this.context.createInvokeHandler('editor.justifyLeft') }); var justifyCenter = this.button({ contents: this.ui.icon(this.options.icons.alignCenter), tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'), click: this.context.createInvokeHandler('editor.justifyCenter') }); var justifyRight = this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'), click: this.context.createInvokeHandler('editor.justifyRight') }); var justifyFull = this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'), click: this.context.createInvokeHandler('editor.justifyFull') }); var outdent = this.button({ contents: this.ui.icon(this.options.icons.outdent), tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'), click: this.context.createInvokeHandler('editor.outdent') }); var indent = this.button({ contents: this.ui.icon(this.options.icons.indent), tooltip: this.lang.paragraph.indent + this.representShortcut('indent'), click: this.context.createInvokeHandler('editor.indent') }); this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); this.context.memo('button.outdent', func.invoke(outdent, 'render')); this.context.memo('button.indent', func.invoke(indent, 'render')); this.context.memo('button.paragraph', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.alignLeft), _this.options), tooltip: _this.lang.paragraph.paragraph, data: { toggle: 'dropdown' } }), _this.ui.dropdown([ _this.ui.buttonGroup({ className: 'note-align', children: [justifyLeft, justifyCenter, justifyRight, justifyFull] }), _this.ui.buttonGroup({ className: 'note-list', children: [outdent, indent] }) ]) ]).render(); }); this.context.memo('button.height', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.textHeight), _this.options), tooltip: _this.lang.font.height, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ items: _this.options.lineHeights, checkClassName: _this.options.icons.menuCheck, className: 'dropdown-line-height', title: _this.lang.font.height, click: _this.context.createInvokeHandler('editor.lineHeight') }) ]).render(); }); this.context.memo('button.table', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.table), _this.options), tooltip: _this.lang.table.table, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ title: _this.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 ($node) { var $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: _this.options.insertTableMaxSize.col + 'em', height: _this.options.insertTableMaxSize.row + 'em' }).mousedown(_this.context.createInvokeHandler('editor.insertTable')) .on('mousemove', _this.tableMoveHandler.bind(_this)); } }).render(); }); this.context.memo('button.link', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.link), tooltip: _this.lang.link.link + _this.representShortcut('linkDialog.show'), click: _this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.picture', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.picture), tooltip: _this.lang.image.image, click: _this.context.createInvokeHandler('imageDialog.show') }).render(); }); this.context.memo('button.video', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.video), tooltip: _this.lang.video.video, click: _this.context.createInvokeHandler('videoDialog.show') }).render(); }); this.context.memo('button.hr', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.minus), tooltip: _this.lang.hr.insert + _this.representShortcut('insertHorizontalRule'), click: _this.context.createInvokeHandler('editor.insertHorizontalRule') }).render(); }); this.context.memo('button.fullscreen', function () { return _this.button({ className: 'btn-fullscreen', contents: _this.ui.icon(_this.options.icons.arrowsAlt), tooltip: _this.lang.options.fullscreen, click: _this.context.createInvokeHandler('fullscreen.toggle') }).render(); }); this.context.memo('button.codeview', function () { return _this.button({ className: 'btn-codeview', contents: _this.ui.icon(_this.options.icons.code), tooltip: _this.lang.options.codeview, click: _this.context.createInvokeHandler('codeview.toggle') }).render(); }); this.context.memo('button.redo', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.redo), tooltip: _this.lang.history.redo + _this.representShortcut('redo'), click: _this.context.createInvokeHandler('editor.redo') }).render(); }); this.context.memo('button.undo', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.undo), tooltip: _this.lang.history.undo + _this.representShortcut('undo'), click: _this.context.createInvokeHandler('editor.undo') }).render(); }); this.context.memo('button.help', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.question), tooltip: _this.lang.options.help, click: _this.context.createInvokeHandler('helpDialog.show') }).render(); }); }; /** * image : [ * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], * ['remove', ['removeMedia']] * ], */ Buttons.prototype.addImagePopoverButtons = function () { var _this = this; // Image Size Buttons this.context.memo('button.imageSize100', function () { return _this.button({ contents: '<span class="note-fontsize-10">100%</span>', tooltip: _this.lang.image.resizeFull, click: _this.context.createInvokeHandler('editor.resize', '1') }).render(); }); this.context.memo('button.imageSize50', function () { return _this.button({ contents: '<span class="note-fontsize-10">50%</span>', tooltip: _this.lang.image.resizeHalf, click: _this.context.createInvokeHandler('editor.resize', '0.5') }).render(); }); this.context.memo('button.imageSize25', function () { return _this.button({ contents: '<span class="note-fontsize-10">25%</span>', tooltip: _this.lang.image.resizeQuarter, click: _this.context.createInvokeHandler('editor.resize', '0.25') }).render(); }); // Float Buttons this.context.memo('button.floatLeft', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignLeft), tooltip: _this.lang.image.floatLeft, click: _this.context.createInvokeHandler('editor.floatMe', 'left') }).render(); }); this.context.memo('button.floatRight', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignRight), tooltip: _this.lang.image.floatRight, click: _this.context.createInvokeHandler('editor.floatMe', 'right') }).render(); }); this.context.memo('button.floatNone', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignJustify), tooltip: _this.lang.image.floatNone, click: _this.context.createInvokeHandler('editor.floatMe', 'none') }).render(); }); // Remove Buttons this.context.memo('button.removeMedia', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.trash), tooltip: _this.lang.image.remove, click: _this.context.createInvokeHandler('editor.removeMedia') }).render(); }); }; Buttons.prototype.addLinkPopoverButtons = function () { var _this = this; this.context.memo('button.linkDialogShow', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.link), tooltip: _this.lang.link.edit, click: _this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.unlink', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.unlink), tooltip: _this.lang.link.unlink, click: _this.context.createInvokeHandler('editor.unlink') }).render(); }); }; /** * table : [ * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] * ], */ Buttons.prototype.addTablePopoverButtons = function () { var _this = this; this.context.memo('button.addRowUp', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowAbove), tooltip: _this.lang.table.addRowAbove, click: _this.context.createInvokeHandler('editor.addRow', 'top') }).render(); }); this.context.memo('button.addRowDown', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowBelow), tooltip: _this.lang.table.addRowBelow, click: _this.context.createInvokeHandler('editor.addRow', 'bottom') }).render(); }); this.context.memo('button.addColLeft', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colBefore), tooltip: _this.lang.table.addColLeft, click: _this.context.createInvokeHandler('editor.addCol', 'left') }).render(); }); this.context.memo('button.addColRight', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colAfter), tooltip: _this.lang.table.addColRight, click: _this.context.createInvokeHandler('editor.addCol', 'right') }).render(); }); this.context.memo('button.deleteRow', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowRemove), tooltip: _this.lang.table.delRow, click: _this.context.createInvokeHandler('editor.deleteRow') }).render(); }); this.context.memo('button.deleteCol', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colRemove), tooltip: _this.lang.table.delCol, click: _this.context.createInvokeHandler('editor.deleteCol') }).render(); }); this.context.memo('button.deleteTable', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.trash), tooltip: _this.lang.table.delTable, click: _this.context.createInvokeHandler('editor.deleteTable') }).render(); }); }; Buttons.prototype.build = function ($container, groups) { for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { var group = groups[groupIdx]; var groupName = $$1.isArray(group) ? group[0] : group; var buttons = $$1.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group]; var $group = this.ui.buttonGroup({ className: 'note-' + groupName }).render(); for (var idx = 0, len = buttons.length; idx < len; idx++) { var btn = this.context.memo('button.' + buttons[idx]); if (btn) { $group.append(typeof btn === 'function' ? btn(this.context) : btn); } } $group.appendTo($container); } }; /** * @param {jQuery} [$container] */ Buttons.prototype.updateCurrentStyle = function ($container) { var _this = this; var $cont = $container || this.$toolbar; var styleInfo = this.context.invoke('editor.currentStyle'); this.updateBtnStates($cont, { '.note-btn-bold': function () { return styleInfo['font-bold'] === 'bold'; }, '.note-btn-italic': function () { return styleInfo['font-italic'] === 'italic'; }, '.note-btn-underline': function () { return styleInfo['font-underline'] === 'underline'; }, '.note-btn-subscript': function () { return styleInfo['font-subscript'] === 'subscript'; }, '.note-btn-superscript': function () { return styleInfo['font-superscript'] === 'superscript'; }, '.note-btn-strikethrough': function () { return styleInfo['font-strikethrough'] === 'strikethrough'; } }); if (styleInfo['font-family']) { var fontNames = styleInfo['font-family'].split(',').map(function (name) { return name.replace(/[\'\"]/g, '') .replace(/\s+$/, '') .replace(/^\s+/, ''); }); var fontName_1 = lists.find(fontNames, this.isFontInstalled.bind(this)); $cont.find('.dropdown-fontname a').each(function (idx, item) { var $item = $$1(item); // always compare string to avoid creating another func. var isChecked = ($item.data('value') + '') === (fontName_1 + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontname').text(fontName_1).css('font-family', fontName_1); } if (styleInfo['font-size']) { var fontSize_1 = styleInfo['font-size']; $cont.find('.dropdown-fontsize a').each(function (idx, item) { var $item = $$1(item); // always compare with string to avoid creating another func. var isChecked = ($item.data('value') + '') === (fontSize_1 + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontsize').text(fontSize_1); } if (styleInfo['line-height']) { var lineHeight_1 = styleInfo['line-height']; $cont.find('.dropdown-line-height li a').each(function (idx, item) { // always compare with string to avoid creating another func. var isChecked = ($$1(item).data('value') + '') === (lineHeight_1 + ''); _this.className = isChecked ? 'checked' : ''; }); } }; Buttons.prototype.updateBtnStates = function ($container, infos) { var _this = this; $$1.each(infos, function (selector, pred) { _this.ui.toggleBtnActive($container.find(selector), pred()); }); }; Buttons.prototype.tableMoveHandler = function (event) { var PX_PER_EM = 18; var $picker = $$1(event.target.parentNode); // target is mousecatcher var $dimensionDisplay = $picker.next(); var $catcher = $picker.find('.note-dimension-picker-mousecatcher'); var $highlighted = $picker.find('.note-dimension-picker-highlighted'); var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox if (event.offsetX === undefined) { var posCatcher = $$1(event.target).offset(); posOffset = { x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { posOffset = { x: event.offsetX, y: event.offsetY }; } var dim = { c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); $catcher.data('value', dim.c + 'x' + dim.r); if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) { $unhighlighted.css({ width: dim.c + 1 + 'em' }); } if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) { $unhighlighted.css({ height: dim.r + 1 + 'em' }); } $dimensionDisplay.html(dim.c + ' x ' + dim.r); }; return Buttons; }()); var Toolbar = /** @class */ (function () { function Toolbar(context) { this.context = context; this.$window = $$1(window); this.$document = $$1(document); this.ui = $$1.summernote.ui; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.followScroll = this.followScroll.bind(this); } Toolbar.prototype.shouldInitialize = function () { return !this.options.airMode; }; Toolbar.prototype.initialize = function () { var _this = this; this.options.toolbar = this.options.toolbar || []; if (!this.options.toolbar.length) { this.$toolbar.hide(); } else { this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar); } if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } this.changeContainer(false); this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () { _this.context.invoke('buttons.updateCurrentStyle'); }); this.context.invoke('buttons.updateCurrentStyle'); if (this.options.followingToolbar) { this.$window.on('scroll resize', this.followScroll); } }; Toolbar.prototype.destroy = function () { this.$toolbar.children().remove(); if (this.options.followingToolbar) { this.$window.off('scroll resize', this.followScroll); } }; Toolbar.prototype.followScroll = function () { if (this.$editor.hasClass('fullscreen')) { return false; } var $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper'); var editorHeight = this.$editor.outerHeight(); var editorWidth = this.$editor.width(); var toolbarHeight = this.$toolbar.height(); $toolbarWrapper.css({ height: toolbarHeight }); // check if the web app is currently using another static bar var otherBarHeight = 0; if (this.options.otherStaticBar) { otherBarHeight = $$1(this.options.otherStaticBar).outerHeight(); } var currentOffset = this.$document.scrollTop(); var editorOffsetTop = this.$editor.offset().top; var editorOffsetBottom = editorOffsetTop + editorHeight; var activateOffset = editorOffsetTop - otherBarHeight; var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight; if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) { this.$toolbar.css({ position: 'fixed', top: otherBarHeight, width: editorWidth }); } else { this.$toolbar.css({ position: 'relative', top: 0, width: '100%' }); } }; Toolbar.prototype.changeContainer = function (isFullscreen) { if (isFullscreen) { this.$toolbar.prependTo(this.$editor); } else { if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } } }; Toolbar.prototype.updateFullscreen = function (isFullscreen) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen); this.changeContainer(isFullscreen); }; Toolbar.prototype.updateCodeview = function (isCodeview) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview); if (isCodeview) { this.deactivate(); } else { this.activate(); } }; Toolbar.prototype.activate = function (isIncludeCodeview) { var $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, true); }; Toolbar.prototype.deactivate = function (isIncludeCodeview) { var $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, false); }; return Toolbar; }()); var LinkDialog = /** @class */ (function () { function LinkDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']); } LinkDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<div class="form-group note-form-group">', "<label class=\"note-form-label\">" + this.lang.link.textToDisplay + "</label>", '<input class="note-link-text form-control note-form-control note-input" type="text" />', '</div>', '<div class="form-group note-form-group">', "<label class=\"note-form-label\">" + this.lang.link.url + "</label>", '<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />', '</div>', !this.options.disableLinkTarget ? $$1('<div/>').append(this.ui.checkbox({ id: 'sn-checkbox-open-in-new-window', text: this.lang.link.openInNewWindow, checked: true }).render()).html() : '' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.link.insert + "</button>"; this.$dialog = this.ui.dialog({ className: 'link-dialog', title: this.lang.link.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; LinkDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; LinkDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; /** * toggle update button */ LinkDialog.prototype.toggleLinkBtn = function ($linkBtn, $linkText, $linkUrl) { this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val()); }; /** * Show link dialog and set event handlers on dialog controls. * * @param {Object} linkInfo * @return {Promise} */ LinkDialog.prototype.showLinkDialog = function (linkInfo) { var _this = this; return $$1.Deferred(function (deferred) { var $linkText = _this.$dialog.find('.note-link-text'); var $linkUrl = _this.$dialog.find('.note-link-url'); var $linkBtn = _this.$dialog.find('.note-link-btn'); var $openInNewWindow = _this.$dialog.find('input[type=checkbox]'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); // if no url was given, copy text to url if (!linkInfo.url) { linkInfo.url = linkInfo.text; } $linkText.val(linkInfo.text); var handleLinkTextUpdate = function () { _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // if linktext was modified by keyup, // stop cloning text from linkUrl linkInfo.text = $linkText.val(); }; $linkText.on('input', handleLinkTextUpdate).on('paste', function () { setTimeout(handleLinkTextUpdate, 0); }); var handleLinkUrlUpdate = function () { _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // display same link on `Text to display` input // when create a new link if (!linkInfo.text) { $linkText.val($linkUrl.val()); } }; $linkUrl.on('input', handleLinkUrlUpdate).on('paste', function () { setTimeout(handleLinkUrlUpdate, 0); }).val(linkInfo.url); if (!env.isSupportTouch) { $linkUrl.trigger('focus'); } _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); _this.bindEnterKey($linkUrl, $linkBtn); _this.bindEnterKey($linkText, $linkBtn); var isChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank; $openInNewWindow.prop('checked', isChecked); $linkBtn.one('click', function (event) { event.preventDefault(); deferred.resolve({ range: linkInfo.range, url: $linkUrl.val(), text: $linkText.val(), isNewWindow: $openInNewWindow.is(':checked') }); _this.ui.hideDialog(_this.$dialog); }); }); _this.ui.onDialogHidden(_this.$dialog, function () { // detach events $linkText.off('input paste keypress'); $linkUrl.off('input paste keypress'); $linkBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }).promise(); }; /** * @param {Object} layoutInfo */ LinkDialog.prototype.show = function () { var _this = this; var linkInfo = this.context.invoke('editor.getLinkInfo'); this.context.invoke('editor.saveRange'); this.showLinkDialog(linkInfo).then(function (linkInfo) { _this.context.invoke('editor.restoreRange'); _this.context.invoke('editor.createLink', linkInfo); }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; return LinkDialog; }()); var LinkPopover = /** @class */ (function () { function LinkPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () { _this.update(); }, 'summernote.disable summernote.dialog.shown': function () { _this.hide(); } }; } LinkPopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.link); }; LinkPopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-link-popover', callback: function ($node) { var $content = $node.find('.popover-content,.note-popover-content'); $content.prepend('<span><a target="_blank"></a> </span>'); } }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.link); }; LinkPopover.prototype.destroy = function () { this.$popover.remove(); }; LinkPopover.prototype.update = function () { // Prevent focusing on editable when invoke('code') is executed if (!this.context.invoke('editor.hasFocus')) { this.hide(); return; } var rng = this.context.invoke('editor.createRange'); if (rng.isCollapsed() && rng.isOnAnchor()) { var anchor = dom.ancestor(rng.sc, dom.isAnchor); var href = $$1(anchor).attr('href'); this.$popover.find('a').attr('href', href).html(href); var pos = dom.posFromPlaceholder(anchor); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } }; LinkPopover.prototype.hide = function () { this.$popover.hide(); }; return LinkPopover; }()); var ImageDialog = /** @class */ (function () { function ImageDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } ImageDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var imageLimitation = ''; if (this.options.maximumImageFileSize) { var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)); var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B'; imageLimitation = "<small>" + (this.lang.image.maximumFileSize + ' : ' + readableSize) + "</small>"; } var body = [ '<div class="form-group note-form-group note-group-select-from-files">', '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', '<input class="note-image-input note-form-control note-input" ', ' type="file" name="files" accept="image/*" multiple="multiple" />', imageLimitation, '</div>', '<div class="form-group note-group-image-url" style="overflow:auto;">', '<label class="note-form-label">' + this.lang.image.url + '</label>', '<input class="note-image-url form-control note-form-control note-input ', ' col-md-12" type="text" />', '</div>' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.image.insert + "</button>"; this.$dialog = this.ui.dialog({ title: this.lang.image.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; ImageDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; ImageDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; ImageDialog.prototype.show = function () { var _this = this; this.context.invoke('editor.saveRange'); this.showImageDialog().then(function (data) { // [workaround] hide dialog before restore range for IE range focus _this.ui.hideDialog(_this.$dialog); _this.context.invoke('editor.restoreRange'); if (typeof data === 'string') { _this.context.invoke('editor.insertImage', data); } else { _this.context.invoke('editor.insertImagesOrCallback', data); } }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ ImageDialog.prototype.showImageDialog = function () { var _this = this; return $$1.Deferred(function (deferred) { var $imageInput = _this.$dialog.find('.note-image-input'); var $imageUrl = _this.$dialog.find('.note-image-url'); var $imageBtn = _this.$dialog.find('.note-image-btn'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element. $imageInput.replaceWith($imageInput.clone().on('change', function (event) { deferred.resolve(event.target.files || event.target.value); }).val('')); $imageBtn.click(function (event) { event.preventDefault(); deferred.resolve($imageUrl.val()); }); $imageUrl.on('keyup paste', function () { var url = $imageUrl.val(); _this.ui.toggleBtn($imageBtn, url); }).val(''); if (!env.isSupportTouch) { $imageUrl.trigger('focus'); } _this.bindEnterKey($imageUrl, $imageBtn); }); _this.ui.onDialogHidden(_this.$dialog, function () { $imageInput.off('change'); $imageUrl.off('keyup paste keypress'); $imageBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }); }; return ImageDialog; }()); /** * Image popover module * mouse events that show/hide popover will be handled by Handle.js. * Handle.js will receive the events and invoke 'imagePopover.update'. */ var ImagePopover = /** @class */ (function () { function ImagePopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.editable = context.layoutInfo.editable[0]; this.options = context.options; this.events = { 'summernote.disable': function () { _this.hide(); } }; } ImagePopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.image); }; ImagePopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-image-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.image); }; ImagePopover.prototype.destroy = function () { this.$popover.remove(); }; ImagePopover.prototype.update = function (target) { if (dom.isImg(target)) { var pos = dom.posFromPlaceholder(target); var posEditor = dom.posFromPlaceholder(this.editable); this.$popover.css({ display: 'block', left: this.options.popatmouse ? event.pageX - 20 : pos.left, top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top) }); } else { this.hide(); } }; ImagePopover.prototype.hide = function () { this.$popover.hide(); }; return ImagePopover; }()); var TablePopover = /** @class */ (function () { function TablePopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.mousedown': function (we, e) { _this.update(e.target); }, 'summernote.keyup summernote.scroll summernote.change': function () { _this.update(); }, 'summernote.disable': function () { _this.hide(); } }; } TablePopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.table); }; TablePopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-table-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor if (env.isFF) { document.execCommand('enableInlineTableEditing', false, false); } }; TablePopover.prototype.destroy = function () { this.$popover.remove(); }; TablePopover.prototype.update = function (target) { if (this.context.isDisabled()) { return false; } var isCell = dom.isCell(target); if (isCell) { var pos = dom.posFromPlaceholder(target); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } return isCell; }; TablePopover.prototype.hide = function () { this.$popover.hide(); }; return TablePopover; }()); var VideoDialog = /** @class */ (function () { function VideoDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } VideoDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<div class="form-group note-form-group row-fluid">', "<label class=\"note-form-label\">" + this.lang.video.url + " <small class=\"text-muted\">" + this.lang.video.providers + "</small></label>", '<input class="note-video-url form-control note-form-control note-input" type="text" />', '</div>' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.video.insert + "</button>"; this.$dialog = this.ui.dialog({ title: this.lang.video.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; VideoDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; VideoDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; VideoDialog.prototype.createVideoNode = function (url) { // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) var ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; var ytMatch = url.match(ytRegExp); var igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; var igMatch = url.match(igRegExp); var vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; var vMatch = url.match(vRegExp); var vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/; var vimMatch = url.match(vimRegExp); var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; var dmMatch = url.match(dmRegExp); var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; var youkuMatch = url.match(youkuRegExp); var qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/; var qqMatch = url.match(qqRegExp); var qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/; var qqMatch2 = url.match(qqRegExp2); var mp4RegExp = /^.+.(mp4|m4v)$/; var mp4Match = url.match(mp4RegExp); var oggRegExp = /^.+.(ogg|ogv)$/; var oggMatch = url.match(oggRegExp); var webmRegExp = /^.+.(webm)$/; var webmMatch = url.match(webmRegExp); var $video; if (ytMatch && ytMatch[1].length === 11) { var youtubeId = ytMatch[1]; $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', '//www.youtube.com/embed/' + youtubeId) .attr('width', '640').attr('height', '360'); } else if (igMatch && igMatch[0].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') .attr('width', '612').attr('height', '710') .attr('scrolling', 'no') .attr('allowtransparency', 'true'); } else if (vMatch && vMatch[0].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', vMatch[0] + '/embed/simple') .attr('width', '600').attr('height', '600') .attr('class', 'vine-embed'); } else if (vimMatch && vimMatch[3].length) { $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) .attr('width', '640').attr('height', '360'); } else if (dmMatch && dmMatch[2].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) .attr('width', '640').attr('height', '360'); } else if (youkuMatch && youkuMatch[1].length) { $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '498') .attr('width', '510') .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) { var vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]); $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '310') .attr('width', '500') .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0'); } else if (mp4Match || oggMatch || webmMatch) { $video = $$1('<video controls>') .attr('src', url) .attr('width', '640').attr('height', '360'); } else { // this is not a known video link. Now what, Cat? Now what? return false; } $video.addClass('note-video-clip'); return $video[0]; }; VideoDialog.prototype.show = function () { var _this = this; var text = this.context.invoke('editor.getSelectedText'); this.context.invoke('editor.saveRange'); this.showVideoDialog(text).then(function (url) { // [workaround] hide dialog before restore range for IE range focus _this.ui.hideDialog(_this.$dialog); _this.context.invoke('editor.restoreRange'); // build node var $node = _this.createVideoNode(url); if ($node) { // insert video node _this.context.invoke('editor.insertNode', $node); } }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ VideoDialog.prototype.showVideoDialog = function (text) { var _this = this; return $$1.Deferred(function (deferred) { var $videoUrl = _this.$dialog.find('.note-video-url'); var $videoBtn = _this.$dialog.find('.note-video-btn'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); $videoUrl.val(text).on('input', function () { _this.ui.toggleBtn($videoBtn, $videoUrl.val()); }); if (!env.isSupportTouch) { $videoUrl.trigger('focus'); } $videoBtn.click(function (event) { event.preventDefault(); deferred.resolve($videoUrl.val()); }); _this.bindEnterKey($videoUrl, $videoBtn); }); _this.ui.onDialogHidden(_this.$dialog, function () { $videoUrl.off('input'); $videoBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }); }; return VideoDialog; }()); var HelpDialog = /** @class */ (function () { function HelpDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } HelpDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</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: body, callback: function ($node) { $node.find('.modal-body,.note-modal-body').css({ 'max-height': 300, 'overflow': 'scroll' }); } }).render().appendTo($container); }; HelpDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; HelpDialog.prototype.createShortcutList = function () { var _this = this; var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; return Object.keys(keyMap).map(function (key) { var command = keyMap[key]; var $row = $$1('<div><div class="help-list-item"/></div>'); $row.append($$1('<label><kbd>' + key + '</kdb></label>').css({ 'width': 180, 'margin-right': 10 })).append($$1('<span/>').html(_this.context.memo('help.' + command) || command)); return $row.html(); }).join(''); }; /** * show help dialog * * @return {Promise} */ HelpDialog.prototype.showHelpDialog = function () { var _this = this; return $$1.Deferred(function (deferred) { _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); deferred.resolve(); }); _this.ui.showDialog(_this.$dialog); }).promise(); }; HelpDialog.prototype.show = function () { var _this = this; this.context.invoke('editor.saveRange'); this.showHelpDialog().then(function () { _this.context.invoke('editor.restoreRange'); }); }; return HelpDialog; }()); var AIR_MODE_POPOVER_X_OFFSET = 20; var AirPopover = /** @class */ (function () { function AirPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.scroll': function () { _this.update(); }, 'summernote.disable summernote.change summernote.dialog.shown': function () { _this.hide(); }, 'summernote.focusout': function (we, e) { // [workaround] Firefox doesn't support relatedTarget on focusout // - Ignore hide action on focus out in FF. if (env.isFF) { return; } if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(_this.$popover[0]))) { _this.hide(); } } }; } AirPopover.prototype.shouldInitialize = function () { return this.options.airMode && !lists.isEmpty(this.options.popover.air); }; AirPopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-air-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.air); }; AirPopover.prototype.destroy = function () { this.$popover.remove(); }; AirPopover.prototype.update = function () { var styleInfo = this.context.invoke('editor.currentStyle'); if (styleInfo.range && !styleInfo.range.isCollapsed()) { var rect = lists.last(styleInfo.range.getClientRects()); if (rect) { var bnd = func.rect2bnd(rect); this.$popover.css({ display: 'block', left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, top: bnd.top + bnd.height }); this.context.invoke('buttons.updateCurrentStyle', this.$popover); } } else { this.hide(); } }; AirPopover.prototype.hide = function () { this.$popover.hide(); }; return AirPopover; }()); var POPOVER_DIST = 5; var HintPopover = /** @class */ (function () { function HintPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.$editable = context.layoutInfo.editable; this.options = context.options; this.hint = this.options.hint || []; this.direction = this.options.hintDirection || 'bottom'; this.hints = $$1.isArray(this.hint) ? this.hint : [this.hint]; this.events = { 'summernote.keyup': function (we, e) { if (!e.isDefaultPrevented()) { _this.handleKeyup(e); } }, 'summernote.keydown': function (we, e) { _this.handleKeydown(e); }, 'summernote.disable summernote.dialog.shown': function () { _this.hide(); } }; } HintPopover.prototype.shouldInitialize = function () { return this.hints.length > 0; }; HintPopover.prototype.initialize = function () { var _this = this; this.lastWordRange = null; this.$popover = this.ui.popover({ className: 'note-hint-popover', hideArrow: true, direction: '' }).render().appendTo(this.options.container); this.$popover.hide(); this.$content = this.$popover.find('.popover-content,.note-popover-content'); this.$content.on('click', '.note-hint-item', function () { _this.$content.find('.active').removeClass('active'); $$1(_this).addClass('active'); _this.replace(); }); }; HintPopover.prototype.destroy = function () { this.$popover.remove(); }; HintPopover.prototype.selectItem = function ($item) { this.$content.find('.active').removeClass('active'); $item.addClass('active'); this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2); }; HintPopover.prototype.moveDown = function () { var $current = this.$content.find('.note-hint-item.active'); var $next = $current.next(); if ($next.length) { this.selectItem($next); } else { var $nextGroup = $current.parent().next(); if (!$nextGroup.length) { $nextGroup = this.$content.find('.note-hint-group').first(); } this.selectItem($nextGroup.find('.note-hint-item').first()); } }; HintPopover.prototype.moveUp = function () { var $current = this.$content.find('.note-hint-item.active'); var $prev = $current.prev(); if ($prev.length) { this.selectItem($prev); } else { var $prevGroup = $current.parent().prev(); if (!$prevGroup.length) { $prevGroup = this.$content.find('.note-hint-group').last(); } this.selectItem($prevGroup.find('.note-hint-item').last()); } }; HintPopover.prototype.replace = function () { var $item = this.$content.find('.note-hint-item.active'); if ($item.length) { var node = this.nodeFromItem($item); // XXX: consider to move codes to editor for recording redo/undo. this.lastWordRange.insertNode(node); range.createFromNode(node).collapse().select(); this.lastWordRange = null; this.hide(); this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]); this.context.invoke('editor.focus'); } }; HintPopover.prototype.nodeFromItem = function ($item) { var hint = this.hints[$item.data('index')]; var item = $item.data('item'); var node = hint.content ? hint.content(item) : item; if (typeof node === 'string') { node = dom.createText(node); } return node; }; HintPopover.prototype.createItemTemplates = function (hintIdx, items) { var hint = this.hints[hintIdx]; return items.map(function (item, idx) { var $item = $$1('<div class="note-hint-item"/>'); $item.append(hint.template ? hint.template(item) : item + ''); $item.data({ 'index': hintIdx, 'item': item }); return $item; }); }; HintPopover.prototype.handleKeydown = function (e) { if (!this.$popover.is(':visible')) { return; } if (e.keyCode === key.code.ENTER) { e.preventDefault(); this.replace(); } else if (e.keyCode === key.code.UP) { e.preventDefault(); this.moveUp(); } else if (e.keyCode === key.code.DOWN) { e.preventDefault(); this.moveDown(); } }; HintPopover.prototype.searchKeyword = function (index, keyword, callback) { var hint = this.hints[index]; if (hint && hint.match.test(keyword) && hint.search) { var matches = hint.match.exec(keyword); hint.search(matches[1], callback); } else { callback(); } }; HintPopover.prototype.createGroup = function (idx, keyword) { var _this = this; var $group = $$1('<div class="note-hint-group note-hint-group-' + idx + '"/>'); this.searchKeyword(idx, keyword, function (items) { items = items || []; if (items.length) { $group.html(_this.createItemTemplates(idx, items)); _this.show(); } }); return $group; }; HintPopover.prototype.handleKeyup = function (e) { var _this = this; if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) { var wordRange = this.context.invoke('editor.createRange').getWordRange(); var keyword_1 = wordRange.toString(); if (this.hints.length && keyword_1) { this.$content.empty(); var bnd = func.rect2bnd(lists.last(wordRange.getClientRects())); if (bnd) { this.$popover.hide(); this.lastWordRange = wordRange; this.hints.forEach(function (hint, idx) { if (hint.match.test(keyword_1)) { _this.createGroup(idx, keyword_1).appendTo(_this.$content); } }); // select first .note-hint-item this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created if (this.direction === 'top') { this.$popover.css({ left: bnd.left, top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST }); } else { this.$popover.css({ left: bnd.left, top: bnd.top + bnd.height + POPOVER_DIST }); } } } else { this.hide(); } } }; HintPopover.prototype.show = function () { this.$popover.show(); }; HintPopover.prototype.hide = function () { this.$popover.hide(); }; return HintPopover; }()); var Context = /** @class */ (function () { /** * @param {jQuery} $note * @param {Object} options */ function Context($note, options) { this.ui = $$1.summernote.ui; this.$note = $note; this.memos = {}; this.modules = {}; this.layoutInfo = {}; this.options = options; this.initialize(); } /** * create layout and initialize modules and other resources */ Context.prototype.initialize = function () { this.layoutInfo = this.ui.createLayout(this.$note, this.options); this._initialize(); this.$note.hide(); return this; }; /** * destroy modules and other resources and remove layout */ Context.prototype.destroy = function () { this._destroy(); this.$note.removeData('summernote'); this.ui.removeLayout(this.$note, this.layoutInfo); }; /** * destory modules and other resources and initialize it again */ Context.prototype.reset = function () { var disabled = this.isDisabled(); this.code(dom.emptyPara); this._destroy(); this._initialize(); if (disabled) { this.disable(); } }; Context.prototype._initialize = function () { var _this = this; // add optional buttons var buttons = $$1.extend({}, this.options.buttons); Object.keys(buttons).forEach(function (key) { _this.memo('button.' + key, buttons[key]); }); var modules = $$1.extend({}, this.options.modules, $$1.summernote.plugins || {}); // add and initialize modules Object.keys(modules).forEach(function (key) { _this.module(key, modules[key], true); }); Object.keys(this.modules).forEach(function (key) { _this.initializeModule(key); }); }; Context.prototype._destroy = function () { var _this = this; // destroy modules with reversed order Object.keys(this.modules).reverse().forEach(function (key) { _this.removeModule(key); }); Object.keys(this.memos).forEach(function (key) { _this.removeMemo(key); }); // trigger custom onDestroy callback this.triggerEvent('destroy', this); }; Context.prototype.code = function (html) { var isActivated = this.invoke('codeview.isActivated'); if (html === undefined) { this.invoke('codeview.sync'); return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html(); } else { if (isActivated) { this.layoutInfo.codable.val(html); } else { this.layoutInfo.editable.html(html); } this.$note.val(html); this.triggerEvent('change', html); } }; Context.prototype.isDisabled = function () { return this.layoutInfo.editable.attr('contenteditable') === 'false'; }; Context.prototype.enable = function () { this.layoutInfo.editable.attr('contenteditable', true); this.invoke('toolbar.activate', true); this.triggerEvent('disable', false); }; Context.prototype.disable = function () { // close codeview if codeview is opend if (this.invoke('codeview.isActivated')) { this.invoke('codeview.deactivate'); } this.layoutInfo.editable.attr('contenteditable', false); this.invoke('toolbar.deactivate', true); this.triggerEvent('disable', true); }; Context.prototype.triggerEvent = function () { var namespace = lists.head(arguments); var args = lists.tail(lists.from(arguments)); var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; if (callback) { callback.apply(this.$note[0], args); } this.$note.trigger('summernote.' + namespace, args); }; Context.prototype.initializeModule = function (key) { var module = this.modules[key]; module.shouldInitialize = module.shouldInitialize || func.ok; if (!module.shouldInitialize()) { return; } // initialize module if (module.initialize) { module.initialize(); } // attach events if (module.events) { dom.attachEvents(this.$note, module.events); } }; Context.prototype.module = function (key, ModuleClass, withoutIntialize) { if (arguments.length === 1) { return this.modules[key]; } this.modules[key] = new ModuleClass(this); if (!withoutIntialize) { this.initializeModule(key); } }; Context.prototype.removeModule = function (key) { var module = this.modules[key]; if (module.shouldInitialize()) { if (module.events) { dom.detachEvents(this.$note, module.events); } if (module.destroy) { module.destroy(); } } delete this.modules[key]; }; Context.prototype.memo = function (key, obj) { if (arguments.length === 1) { return this.memos[key]; } this.memos[key] = obj; }; Context.prototype.removeMemo = function (key) { if (this.memos[key] && this.memos[key].destroy) { this.memos[key].destroy(); } delete this.memos[key]; }; /** * Some buttons need to change their visual style immediately once they get pressed */ Context.prototype.createInvokeHandlerAndUpdateState = function (namespace, value) { var _this = this; return function (event) { _this.createInvokeHandler(namespace, value)(event); _this.invoke('buttons.updateCurrentStyle'); }; }; Context.prototype.createInvokeHandler = function (namespace, value) { var _this = this; return function (event) { event.preventDefault(); var $target = $$1(event.target); _this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target); }; }; Context.prototype.invoke = function () { var namespace = lists.head(arguments); var args = lists.tail(lists.from(arguments)); var splits = namespace.split('.'); var hasSeparator = splits.length > 1; var moduleName = hasSeparator && lists.head(splits); var methodName = hasSeparator ? lists.last(splits) : lists.head(splits); var module = this.modules[moduleName || 'editor']; if (!moduleName && this[methodName]) { return this[methodName].apply(this, args); } else if (module && module[methodName] && module.shouldInitialize()) { return module[methodName].apply(module, args); } }; return Context; }()); $$1.fn.extend({ /** * Summernote API * * @param {Object|String} * @return {this} */ summernote: function () { var type = $$1.type(lists.head(arguments)); var isExternalAPICalled = type === 'string'; var hasInitOptions = type === 'object'; var options = $$1.extend({}, $$1.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options options.langInfo = $$1.extend(true, {}, $$1.summernote.lang['en-US'], $$1.summernote.lang[options.lang]); options.icons = $$1.extend(true, {}, $$1.summernote.options.icons, options.icons); options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip; this.each(function (idx, note) { var $note = $$1(note); if (!$note.data('summernote')) { var context = new Context($note, options); $note.data('summernote', context); $note.data('summernote').triggerEvent('init', context.layoutInfo); } }); var $note = this.first(); if ($note.length) { var context = $note.data('summernote'); if (isExternalAPICalled) { return context.invoke.apply(context, lists.from(arguments)); } else if (options.focus) { context.invoke('editor.focus'); } } return this; } }); $$1.summernote = $$1.extend($$1.summernote, { version: '0.8.10', ui: ui, dom: dom, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': CodeView, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, linkTargetBlank: true, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: [ 'p', { title: 'Blockquote', tag: 'blockquote', className: 'blockquote', value: 'blockquote' }, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); }))); //# sourceMappingURL=summernote-bs4.js.map PKf[�\�Ҝ�%�%dist/summernote.jsnu�[���/** * Super simple wysiwyg editor v0.8.10 * https://summernote.org * * Copyright 2013- Alan Hong. and other contributors * summernote may be freely distributed under the MIT license. * * Date: 2018-02-20T00:34Z */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : (factory(global.jQuery)); }(this, (function ($$1) { 'use strict'; $$1 = $$1 && $$1.hasOwnProperty('default') ? $$1['default'] : $$1; var Renderer = /** @class */ (function () { function Renderer(markup, children, options, callback) { this.markup = markup; this.children = children; this.options = options; this.callback = callback; } Renderer.prototype.render = function ($parent) { var $node = $$1(this.markup); if (this.options && this.options.contents) { $node.html(this.options.contents); } if (this.options && this.options.className) { $node.addClass(this.options.className); } if (this.options && this.options.data) { $$1.each(this.options.data, function (k, v) { $node.attr('data-' + k, v); }); } if (this.options && this.options.click) { $node.on('click', this.options.click); } if (this.children) { var $container_1 = $node.find('.note-children-container'); this.children.forEach(function (child) { child.render($container_1.length ? $container_1 : $node); }); } if (this.callback) { this.callback($node, this.options); } if (this.options && this.options.callback) { this.options.callback($node); } if ($parent) { $parent.append($node); } return $node; }; return Renderer; }()); var renderer = { create: function (markup, callback) { return function () { var options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; var children = $$1.isArray(arguments[0]) ? arguments[0] : []; if (options && options.children) { children = options.children; } return new Renderer(markup, children, options, callback); }; } }; var editor = renderer.create('<div class="note-editor note-frame panel"/>'); var toolbar = renderer.create('<div class="note-toolbar-wrapper panel-default"><div class="note-toolbar panel-heading" role="toolbar"></div></div>'); var editingArea = renderer.create('<div class="note-editing-area"/>'); var codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); var editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'); var statusbar = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-statusbar" role="status">', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); var airEditor = renderer.create('<div class="note-editor"/>'); var airEditable = renderer.create([ ' <output class="note-status-output" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); var buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); var dropdown = renderer.create('<ul class="dropdown-menu" role="list">', function ($node, options) { var markup = $$1.isArray(options.items) ? options.items.map(function (item) { var value = (typeof item === 'string') ? item : (item.value || ''); var content = options.template ? options.template(item) : item; var option = (typeof item === 'object') ? item.option : undefined; var dataValue = 'data-value="' + value + '"'; var dataOption = (option !== undefined) ? ' data-option="' + option + '"' : ''; return '<li role="listitem" aria-label="' + item + '"><a href="#" ' + (dataValue + dataOption) + '>' + content + '</a></li>'; }).join('') : options.items; $node.html(markup).attr({ 'aria-label': options.title }); }); var dropdownButtonContents = function (contents, options) { return contents + ' ' + icon(options.icons.caret, 'span'); }; var dropdownCheck = renderer.create('<ul class="dropdown-menu note-check" role="list">', function ($node, options) { var markup = $$1.isArray(options.items) ? options.items.map(function (item) { var value = (typeof item === 'string') ? item : (item.value || ''); var content = options.template ? options.template(item) : item; return '<li role="listitem" aria-label="' + item + '"><a href="#" data-value="' + value + '">' + icon(options.checkClassName) + ' ' + content + '</a></li>'; }).join('') : options.items; $node.html(markup).attr({ 'aria-label': options.title }); }); var palette = renderer.create('<div class="note-color-palette"/>', function ($node, options) { var contents = []; for (var row = 0, rowSize = options.colors.length; row < rowSize; row++) { var eventName = options.eventName; var colors = options.colors[row]; var colorsName = options.colorsName[row]; var buttons = []; for (var col = 0, colSize = colors.length; col < colSize; col++) { var color = colors[col]; var colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); if (options.tooltip) { $node.find('.note-color-btn').tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } }); var dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function ($node, options) { if (options.fade) { $node.addClass('fade'); } $node.attr({ 'aria-label': options.title }); $node.html([ '<div class="modal-dialog">', ' <div class="modal-content">', (options.title ? ' <div class="modal-header">' + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button>' + ' <h4 class="modal-title">' + options.title + '</h4>' + ' </div>' : ''), ' <div class="modal-body">' + options.body + '</div>', (options.footer ? ' <div class="modal-footer">' + options.footer + '</div>' : ''), ' </div>', '</div>' ].join('')); }); var popover = renderer.create([ '<div class="note-popover popover in">', ' <div class="arrow"/>', ' <div class="popover-content note-children-container"/>', '</div>' ].join(''), function ($node, options) { var direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom'; $node.addClass(direction); if (options.hideArrow) { $node.find('.arrow').hide(); } }); var checkbox = renderer.create('<div class="checkbox"></div>', function ($node, options) { $node.html([ ' <label' + (options.id ? ' for="' + options.id + '"' : '') + '>', ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', (options.text ? options.text : ''), '</label>' ].join('')); }); var icon = function (iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; var ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, dropdown: dropdown, dropdownButtonContents: dropdownButtonContents, dropdownCheck: dropdownCheck, palette: palette, dialog: dialog, popover: popover, checkbox: checkbox, icon: icon, options: {}, button: function ($node, options) { return renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">', function ($node, options) { if (options && options.tooltip) { $node.attr({ title: options.tooltip, 'aria-label': options.tooltip }).tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } })($node, options); }, toggleBtn: function ($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function ($btn, isActive) { $btn.toggleClass('active', isActive); }, onDialogShown: function ($dialog, handler) { $dialog.one('shown.bs.modal', handler); }, onDialogHidden: function ($dialog, handler) { $dialog.one('hidden.bs.modal', handler); }, showDialog: function ($dialog) { $dialog.modal('show'); }, hideDialog: function ($dialog) { $dialog.modal('hide'); }, createLayout: function ($note, options) { var $editor = (options.airMode ? ui.airEditor([ ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function ($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.show(); } }; /** * @class core.func * * func utils (for high-order func's arg) * * @singleton * @alternateClassName func */ function eq(itemA) { return function (itemB) { return itemA === itemB; }; } function eq2(itemA, itemB) { return itemA === itemB; } function peq2(propName) { return function (itemA, itemB) { return itemA[propName] === itemB[propName]; }; } function ok() { return true; } function fail() { return false; } function not(f) { return function () { return !f.apply(f, arguments); }; } function and(fA, fB) { return function (item) { return fA(item) && fB(item); }; } function self(a) { return a; } function invoke(obj, method) { return function () { return obj[method].apply(obj, arguments); }; } var idCounter = 0; /** * generate a globally-unique id * * @param {String} [prefix] */ function uniqueId(prefix) { var id = ++idCounter + ''; return prefix ? prefix + id : id; } /** * returns bnd (bounds) from rect * * - IE Compatibility Issue: http://goo.gl/sRLOAo * - Scroll Issue: http://goo.gl/sNjUc * * @param {Rect} rect * @return {Object} bounds * @return {Number} bounds.top * @return {Number} bounds.left * @return {Number} bounds.width * @return {Number} bounds.height */ function rect2bnd(rect) { var $document = $(document); return { top: rect.top + $document.scrollTop(), left: rect.left + $document.scrollLeft(), width: rect.right - rect.left, height: rect.bottom - rect.top }; } /** * returns a copy of the object where the keys have become the values and the values the keys. * @param {Object} obj * @return {Object} */ function invertObject(obj) { var inverted = {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { inverted[obj[key]] = key; } } return inverted; } /** * @param {String} namespace * @param {String} [prefix] * @return {String} */ function namespaceToCamel(namespace, prefix) { prefix = prefix || ''; return prefix + namespace.split('.').map(function (name) { return name.substring(0, 1).toUpperCase() + name.substring(1); }).join(''); } /** * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for * N milliseconds. If `immediate` is passed, trigger the function on the * leading edge, instead of the trailing. * @param {Function} func * @param {Number} wait * @param {Boolean} immediate * @return {Function} */ function debounce(func, wait, immediate) { var _this = this; var timeout; return function () { var context = _this; var args = arguments; var later = function () { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } var func = { eq: eq, eq2: eq2, peq2: peq2, ok: ok, fail: fail, self: self, not: not, and: and, invoke: invoke, uniqueId: uniqueId, rect2bnd: rect2bnd, invertObject: invertObject, namespaceToCamel: namespaceToCamel, debounce: debounce }; /** * returns the first item of an array. * * @param {Array} array */ function head(array) { return array[0]; } /** * returns the last item of an array. * * @param {Array} array */ function last(array) { return array[array.length - 1]; } /** * returns everything but the last entry of the array. * * @param {Array} array */ function initial(array) { return array.slice(0, array.length - 1); } /** * returns the rest of the items in an array. * * @param {Array} array */ function tail(array) { return array.slice(1); } /** * returns item of array */ function find(array, pred) { for (var idx = 0, len = array.length; idx < len; idx++) { var item = array[idx]; if (pred(item)) { return item; } } } /** * returns true if all of the values in the array pass the predicate truth test. */ function all(array, pred) { for (var idx = 0, len = array.length; idx < len; idx++) { if (!pred(array[idx])) { return false; } } return true; } /** * returns index of item */ function indexOf(array, item) { return $$1.inArray(item, array); } /** * returns true if the value is present in the list. */ function contains(array, item) { return indexOf(array, item) !== -1; } /** * get sum from a list * * @param {Array} array - array * @param {Function} fn - iterator */ function sum(array, fn) { fn = fn || func.self; return array.reduce(function (memo, v) { return memo + fn(v); }, 0); } /** * returns a copy of the collection with array type. * @param {Collection} collection - collection eg) node.childNodes, ... */ function from(collection) { var result = []; var length = collection.length; var idx = -1; while (++idx < length) { result[idx] = collection[idx]; } return result; } /** * returns whether list is empty or not */ function isEmpty$1(array) { return !array || !array.length; } /** * cluster elements by predicate function. * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule * @param {Array[]} */ function clusterBy(array, fn) { if (!array.length) { return []; } var aTail = tail(array); return aTail.reduce(function (memo, v) { var aLast = last(memo); if (fn(last(aLast), v)) { aLast[aLast.length] = v; } else { memo[memo.length] = [v]; } return memo; }, [[head(array)]]); } /** * returns a copy of the array with all false values removed * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule */ function compact(array) { var aResult = []; for (var idx = 0, len = array.length; idx < len; idx++) { if (array[idx]) { aResult.push(array[idx]); } } return aResult; } /** * produces a duplicate-free version of the array * * @param {Array} array */ function unique(array) { var results = []; for (var idx = 0, len = array.length; idx < len; idx++) { if (!contains(results, array[idx])) { results.push(array[idx]); } } return results; } /** * returns next item. * @param {Array} array */ function next(array, item) { var idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx + 1]; } /** * returns prev item. * @param {Array} array */ function prev(array, item) { var idx = indexOf(array, item); if (idx === -1) { return null; } return array[idx - 1]; } /** * @class core.list * * list utils * * @singleton * @alternateClassName list */ var lists = { head: head, last: last, initial: initial, tail: tail, prev: prev, next: next, find: find, contains: contains, all: all, sum: sum, from: from, isEmpty: isEmpty$1, clusterBy: clusterBy, compact: compact, unique: unique }; var isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line /** * returns whether font is installed or not. * * @param {String} fontName * @return {Boolean} */ function isFontInstalled(fontName) { var testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; var $tester = $$1('<div>').css({ position: 'absolute', left: '-9999px', top: '-9999px', fontSize: '200px' }).text('mmmmmmmmmwwwwwww').appendTo(document.body); var originalWidth = $tester.css('fontFamily', testFontName).width(); var width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); $tester.remove(); return originalWidth !== width; } var userAgent = navigator.userAgent; var isMSIE = /MSIE|Trident/i.test(userAgent); var browserVersion; if (isMSIE) { var matches = /MSIE (\d+[.]\d+)/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent); if (matches) { browserVersion = parseFloat(matches[1]); } } var isEdge = /Edge\/\d+/.test(userAgent); var hasCodeMirror = !!window.CodeMirror; if (!hasCodeMirror && isSupportAmd) { // Webpack if (typeof __webpack_require__ === 'function') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } } else if (typeof require !== 'undefined') { // Browserify if (typeof require.resolve !== 'undefined') { try { // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. require.resolve('codemirror'); hasCodeMirror = true; } catch (e) { // do nothing } // Almond/Require } else if (typeof require.specified !== 'undefined') { hasCodeMirror = require.specified('codemirror'); } } } var isSupportTouch = (('ontouchstart' in window) || (navigator.MaxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); // [workaround] IE doesn't have input events for contentEditable // - see: https://goo.gl/4bfIvA var inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input'; /** * @class core.env * * Object which check platform and agent * * @singleton * @alternateClassName env */ var env = { isMac: navigator.appVersion.indexOf('Mac') > -1, isMSIE: isMSIE, isEdge: isEdge, isFF: !isEdge && /firefox/i.test(userAgent), isPhantom: /PhantomJS/i.test(userAgent), isWebkit: !isEdge && /webkit/i.test(userAgent), isChrome: !isEdge && /chrome/i.test(userAgent), isSafari: !isEdge && /safari/i.test(userAgent), browserVersion: browserVersion, jqueryVersion: parseFloat($$1.fn.jquery), isSupportAmd: isSupportAmd, isSupportTouch: isSupportTouch, hasCodeMirror: hasCodeMirror, isFontInstalled: isFontInstalled, isW3CRangeSupport: !!document.createRange, inputEventName: inputEventName }; var NBSP_CHAR = String.fromCharCode(160); var ZERO_WIDTH_NBSP_CHAR = '\ufeff'; /** * @method isEditable * * returns whether node is `note-editable` or not. * * @param {Node} node * @return {Boolean} */ function isEditable(node) { return node && $$1(node).hasClass('note-editable'); } /** * @method isControlSizing * * returns whether node is `note-control-sizing` or not. * * @param {Node} node * @return {Boolean} */ function isControlSizing(node) { return node && $$1(node).hasClass('note-control-sizing'); } /** * @method makePredByNodeName * * returns predicate which judge whether nodeName is same * * @param {String} nodeName * @return {Function} */ function makePredByNodeName(nodeName) { nodeName = nodeName.toUpperCase(); return function (node) { return node && node.nodeName.toUpperCase() === nodeName; }; } /** * @method isText * * * * @param {Node} node * @return {Boolean} true if node's type is text(3) */ function isText(node) { return node && node.nodeType === 3; } /** * @method isElement * * * * @param {Node} node * @return {Boolean} true if node's type is element(1) */ function isElement(node) { return node && node.nodeType === 1; } /** * ex) br, col, embed, hr, img, input, ... * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements */ function isVoid(node) { return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase()); } function isPara(node) { if (isEditable(node)) { return false; } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); } function isHeading(node) { return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); } var isPre = makePredByNodeName('PRE'); var isLi = makePredByNodeName('LI'); function isPurePara(node) { return isPara(node) && !isLi(node); } var isTable = makePredByNodeName('TABLE'); var isData = makePredByNodeName('DATA'); function isInline(node) { return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node); } function isList(node) { return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); } var isHr = makePredByNodeName('HR'); function isCell(node) { return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); } var isBlockquote = makePredByNodeName('BLOCKQUOTE'); function isBodyContainer(node) { return isCell(node) || isBlockquote(node) || isEditable(node); } var isAnchor = makePredByNodeName('A'); function isParaInline(node) { return isInline(node) && !!ancestor(node, isPara); } function isBodyInline(node) { return isInline(node) && !ancestor(node, isPara); } var isBody = makePredByNodeName('BODY'); /** * returns whether nodeB is closest sibling of nodeA * * @param {Node} nodeA * @param {Node} nodeB * @return {Boolean} */ function isClosestSibling(nodeA, nodeB) { return nodeA.nextSibling === nodeB || nodeA.previousSibling === nodeB; } /** * returns array of closest siblings with node * * @param {Node} node * @param {function} [pred] - predicate function * @return {Node[]} */ function withClosestSiblings(node, pred) { pred = pred || func.ok; var siblings = []; if (node.previousSibling && pred(node.previousSibling)) { siblings.push(node.previousSibling); } siblings.push(node); if (node.nextSibling && pred(node.nextSibling)) { siblings.push(node.nextSibling); } return siblings; } /** * blank HTML for cursor position * - [workaround] old IE only works with * - [workaround] IE11 and other browser works with bogus br */ var blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>'; /** * @method nodeLength * * returns #text's text size or element's childNodes size * * @param {Node} node */ function nodeLength(node) { if (isText(node)) { return node.nodeValue.length; } if (node) { return node.childNodes.length; } return 0; } /** * returns whether node is empty or not. * * @param {Node} node * @return {Boolean} */ function isEmpty(node) { var len = nodeLength(node); if (len === 0) { return true; } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { // ex) <p><br></p>, <span><br></span> return true; } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') { // ex) <p></p>, <span></span> return true; } return false; } /** * padding blankHTML if node is empty (for cursor position) */ function paddingBlankHTML(node) { if (!isVoid(node) && !nodeLength(node)) { node.innerHTML = blankHTML; } } /** * find nearest ancestor predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function ancestor(node, pred) { while (node) { if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * find nearest ancestor only single child blood line and predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function singleChildAncestor(node, pred) { node = node.parentNode; while (node) { if (nodeLength(node) !== 1) { break; } if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * returns new array of ancestor nodes (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listAncestor(node, pred) { pred = pred || func.fail; var ancestors = []; ancestor(node, function (el) { if (!isEditable(el)) { ancestors.push(el); } return pred(el); }); return ancestors; } /** * find farthest ancestor predicate hit */ function lastAncestor(node, pred) { var ancestors = listAncestor(node); return lists.last(ancestors.filter(pred)); } /** * returns common ancestor node between two nodes. * * @param {Node} nodeA * @param {Node} nodeB */ function commonAncestor(nodeA, nodeB) { var ancestors = listAncestor(nodeA); for (var n = nodeB; n; n = n.parentNode) { if ($$1.inArray(n, ancestors) > -1) { return n; } } return null; // difference document area } /** * listing all previous siblings (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listPrev(node, pred) { pred = pred || func.fail; var nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.previousSibling; } return nodes; } /** * listing next siblings (until predicate hit). * * @param {Node} node * @param {Function} [pred] - predicate function */ function listNext(node, pred) { pred = pred || func.fail; var nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.nextSibling; } return nodes; } /** * listing descendant nodes * * @param {Node} node * @param {Function} [pred] - predicate function */ function listDescendant(node, pred) { var descendants = []; pred = pred || func.ok; // start DFS(depth first search) with node (function fnWalk(current) { if (node !== current && pred(current)) { descendants.push(current); } for (var idx = 0, len = current.childNodes.length; idx < len; idx++) { fnWalk(current.childNodes[idx]); } })(node); return descendants; } /** * wrap node with new tag. * * @param {Node} node * @param {Node} tagName of wrapper * @return {Node} - wrapper */ function wrap(node, wrapperName) { var parent = node.parentNode; var wrapper = $$1('<' + wrapperName + '>')[0]; parent.insertBefore(wrapper, node); wrapper.appendChild(node); return wrapper; } /** * insert node after preceding * * @param {Node} node * @param {Node} preceding - predicate function */ function insertAfter(node, preceding) { var next = preceding.nextSibling; var parent = preceding.parentNode; if (next) { parent.insertBefore(node, next); } else { parent.appendChild(node); } return node; } /** * append elements. * * @param {Node} node * @param {Collection} aChild */ function appendChildNodes(node, aChild) { $$1.each(aChild, function (idx, child) { node.appendChild(child); }); return node; } /** * returns whether boundaryPoint is left edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isLeftEdgePoint(point) { return point.offset === 0; } /** * returns whether boundaryPoint is right edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isRightEdgePoint(point) { return point.offset === nodeLength(point.node); } /** * returns whether boundaryPoint is edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isEdgePoint(point) { return isLeftEdgePoint(point) || isRightEdgePoint(point); } /** * returns whether node is left edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgeOf(node, ancestor) { while (node && node !== ancestor) { if (position(node) !== 0) { return false; } node = node.parentNode; } return true; } /** * returns whether node is right edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isRightEdgeOf(node, ancestor) { if (!ancestor) { return false; } while (node && node !== ancestor) { if (position(node) !== nodeLength(node.parentNode) - 1) { return false; } node = node.parentNode; } return true; } /** * returns whether point is left edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgePointOf(point, ancestor) { return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); } /** * returns whether point is right edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isRightEdgePointOf(point, ancestor) { return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); } /** * returns offset from parent. * * @param {Node} node */ function position(node) { var offset = 0; while ((node = node.previousSibling)) { offset += 1; } return offset; } function hasChildren(node) { return !!(node && node.childNodes && node.childNodes.length); } /** * returns previous boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function prevPoint(point, isSkipInnerOffset) { var node; var offset; if (point.offset === 0) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node); } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset - 1]; offset = nodeLength(node); } else { node = point.node; offset = isSkipInnerOffset ? 0 : point.offset - 1; } return { node: node, offset: offset }; } /** * returns next boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function nextPoint(point, isSkipInnerOffset) { var node, offset; if (nodeLength(point.node) === point.offset) { if (isEditable(point.node)) { return null; } node = point.node.parentNode; offset = position(point.node) + 1; } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset]; offset = 0; } else { node = point.node; offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; } return { node: node, offset: offset }; } /** * returns whether pointA and pointB is same or not. * * @param {BoundaryPoint} pointA * @param {BoundaryPoint} pointB * @return {Boolean} */ function isSamePoint(pointA, pointB) { return pointA.node === pointB.node && pointA.offset === pointB.offset; } /** * returns whether point is visible (can set cursor) or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isVisiblePoint(point) { if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) { return true; } var leftNode = point.node.childNodes[point.offset - 1]; var rightNode = point.node.childNodes[point.offset]; if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { return true; } return false; } /** * @method prevPointUtil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function prevPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = prevPoint(point); } return null; } /** * @method nextPointUntil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function nextPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = nextPoint(point); } return null; } /** * returns whether point has character or not. * * @param {Point} point * @return {Boolean} */ function isCharPoint(point) { if (!isText(point.node)) { return false; } var ch = point.node.nodeValue.charAt(point.offset - 1); return ch && (ch !== ' ' && ch !== NBSP_CHAR); } /** * @method walkPoint * * @param {BoundaryPoint} startPoint * @param {BoundaryPoint} endPoint * @param {Function} handler * @param {Boolean} isSkipInnerOffset */ function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) { var point = startPoint; while (point) { handler(point); if (isSamePoint(point, endPoint)) { break; } var isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node; point = nextPoint(point, isSkipOffset); } } /** * @method makeOffsetPath * * return offsetPath(array of offset) from ancestor * * @param {Node} ancestor - ancestor node * @param {Node} node */ function makeOffsetPath(ancestor, node) { var ancestors = listAncestor(node, func.eq(ancestor)); return ancestors.map(position).reverse(); } /** * @method fromOffsetPath * * return element from offsetPath(array of offset) * * @param {Node} ancestor - ancestor node * @param {array} offsets - offsetPath */ function fromOffsetPath(ancestor, offsets) { var current = ancestor; for (var i = 0, len = offsets.length; i < len; i++) { if (current.childNodes.length <= offsets[i]) { current = current.childNodes[current.childNodes.length - 1]; } else { current = current.childNodes[offsets[i]]; } } return current; } /** * @method splitNode * * split element or #text * * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitNode(point, options) { var isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; var isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; // edge case if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { if (isLeftEdgePoint(point)) { return point.node; } else if (isRightEdgePoint(point)) { return point.node.nextSibling; } } // split #text if (isText(point.node)) { return point.node.splitText(point.offset); } else { var childNode = point.node.childNodes[point.offset]; var clone = insertAfter(point.node.cloneNode(false), point.node); appendChildNodes(clone, listNext(childNode)); if (!isSkipPaddingBlankHTML) { paddingBlankHTML(point.node); paddingBlankHTML(clone); } return clone; } } /** * @method splitTree * * split tree by point * * @param {Node} root - split root * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitTree(root, point, options) { // ex) [#text, <span>, <p>] var ancestors = listAncestor(point.node, func.eq(root)); if (!ancestors.length) { return null; } else if (ancestors.length === 1) { return splitNode(point, options); } return ancestors.reduce(function (node, parent) { if (node === point.node) { node = splitNode(point, options); } return splitNode({ node: parent, offset: node ? position(node) : nodeLength(parent) }, options); }); } /** * split point * * @param {Point} point * @param {Boolean} isInline * @return {Object} */ function splitPoint(point, isInline) { // find splitRoot, container // - inline: splitRoot is a child of paragraph // - block: splitRoot is a child of bodyContainer var pred = isInline ? isPara : isBodyContainer; var ancestors = listAncestor(point.node, pred); var topAncestor = lists.last(ancestors) || point.node; var splitRoot, container; if (pred(topAncestor)) { splitRoot = ancestors[ancestors.length - 2]; container = topAncestor; } else { splitRoot = topAncestor; container = splitRoot.parentNode; } // if splitRoot is exists, split with splitTree var pivot = splitRoot && splitTree(splitRoot, point, { isSkipPaddingBlankHTML: isInline, isNotSplitEdgePoint: isInline }); // if container is point.node, find pivot with point.offset if (!pivot && container === point.node) { pivot = point.node.childNodes[point.offset]; } return { rightNode: pivot, container: container }; } function create(nodeName) { return document.createElement(nodeName); } function createText(text) { return document.createTextNode(text); } /** * @method remove * * remove node, (isRemoveChild: remove child or not) * * @param {Node} node * @param {Boolean} isRemoveChild */ function remove(node, isRemoveChild) { if (!node || !node.parentNode) { return; } if (node.removeNode) { return node.removeNode(isRemoveChild); } var parent = node.parentNode; if (!isRemoveChild) { var nodes = []; for (var i = 0, len = node.childNodes.length; i < len; i++) { nodes.push(node.childNodes[i]); } for (var i = 0, len = nodes.length; i < len; i++) { parent.insertBefore(nodes[i], node); } } parent.removeChild(node); } /** * @method removeWhile * * @param {Node} node * @param {Function} pred */ function removeWhile(node, pred) { while (node) { if (isEditable(node) || !pred(node)) { break; } var parent = node.parentNode; remove(node); node = parent; } } /** * @method replace * * replace node with provided nodeName * * @param {Node} node * @param {String} nodeName * @return {Node} - new node */ function replace(node, nodeName) { if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { return node; } var newNode = create(nodeName); if (node.style.cssText) { newNode.style.cssText = node.style.cssText; } appendChildNodes(newNode, lists.from(node.childNodes)); insertAfter(newNode, node); remove(node); return newNode; } var isTextarea = makePredByNodeName('TEXTAREA'); /** * @param {jQuery} $node * @param {Boolean} [stripLinebreaks] - default: false */ function value($node, stripLinebreaks) { var val = isTextarea($node[0]) ? $node.val() : $node.html(); if (stripLinebreaks) { return val.replace(/[\n\r]/g, ''); } return val; } /** * @method html * * get the HTML contents of node * * @param {jQuery} $node * @param {Boolean} [isNewlineOnBlock] */ function html($node, isNewlineOnBlock) { var markup = value($node); if (isNewlineOnBlock) { var regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g; markup = markup.replace(regexTag, function (match, endSlash, name) { name = name.toUpperCase(); var isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) && !!endSlash; var isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name); return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : ''); }); markup = $$1.trim(markup); } return markup; } function posFromPlaceholder(placeholder) { var $placeholder = $$1(placeholder); var pos = $placeholder.offset(); var height = $placeholder.outerHeight(true); // include margin return { left: pos.left, top: pos.top + height }; } function attachEvents($node, events) { Object.keys(events).forEach(function (key) { $node.on(key, events[key]); }); } function detachEvents($node, events) { Object.keys(events).forEach(function (key) { $node.off(key, events[key]); }); } /** * @method isCustomStyleTag * * assert if a node contains a "note-styletag" class, * which implies that's a custom-made style tag node * * @param {Node} an HTML DOM node */ function isCustomStyleTag(node) { return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); } var dom = { /** @property {String} NBSP_CHAR */ NBSP_CHAR: NBSP_CHAR, /** @property {String} ZERO_WIDTH_NBSP_CHAR */ ZERO_WIDTH_NBSP_CHAR: ZERO_WIDTH_NBSP_CHAR, /** @property {String} blank */ blank: blankHTML, /** @property {String} emptyPara */ emptyPara: "<p>" + blankHTML + "</p>", makePredByNodeName: makePredByNodeName, isEditable: isEditable, isControlSizing: isControlSizing, isText: isText, isElement: isElement, isVoid: isVoid, isPara: isPara, isPurePara: isPurePara, isHeading: isHeading, isInline: isInline, isBlock: func.not(isInline), isBodyInline: isBodyInline, isBody: isBody, isParaInline: isParaInline, isPre: isPre, isList: isList, isTable: isTable, isData: isData, isCell: isCell, isBlockquote: isBlockquote, isBodyContainer: isBodyContainer, isAnchor: isAnchor, isDiv: makePredByNodeName('DIV'), isLi: isLi, isBR: makePredByNodeName('BR'), isSpan: makePredByNodeName('SPAN'), isB: makePredByNodeName('B'), isU: makePredByNodeName('U'), isS: makePredByNodeName('S'), isI: makePredByNodeName('I'), isImg: makePredByNodeName('IMG'), isTextarea: isTextarea, isEmpty: isEmpty, isEmptyAnchor: func.and(isAnchor, isEmpty), isClosestSibling: isClosestSibling, withClosestSiblings: withClosestSiblings, nodeLength: nodeLength, isLeftEdgePoint: isLeftEdgePoint, isRightEdgePoint: isRightEdgePoint, isEdgePoint: isEdgePoint, isLeftEdgeOf: isLeftEdgeOf, isRightEdgeOf: isRightEdgeOf, isLeftEdgePointOf: isLeftEdgePointOf, isRightEdgePointOf: isRightEdgePointOf, prevPoint: prevPoint, nextPoint: nextPoint, isSamePoint: isSamePoint, isVisiblePoint: isVisiblePoint, prevPointUntil: prevPointUntil, nextPointUntil: nextPointUntil, isCharPoint: isCharPoint, walkPoint: walkPoint, ancestor: ancestor, singleChildAncestor: singleChildAncestor, listAncestor: listAncestor, lastAncestor: lastAncestor, listNext: listNext, listPrev: listPrev, listDescendant: listDescendant, commonAncestor: commonAncestor, wrap: wrap, insertAfter: insertAfter, appendChildNodes: appendChildNodes, position: position, hasChildren: hasChildren, makeOffsetPath: makeOffsetPath, fromOffsetPath: fromOffsetPath, splitTree: splitTree, splitPoint: splitPoint, create: create, createText: createText, remove: remove, removeWhile: removeWhile, replace: replace, html: html, value: value, posFromPlaceholder: posFromPlaceholder, attachEvents: attachEvents, detachEvents: detachEvents, isCustomStyleTag: isCustomStyleTag }; $$1.summernote = $$1.summernote || { lang: {} }; $$1.extend($$1.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' }, image: { image: 'Picture', insert: 'Insert Image', resizeFull: 'Resize Full', resizeHalf: 'Resize Half', resizeQuarter: 'Resize Quarter', floatLeft: 'Float Left', floatRight: 'Float Right', floatNone: 'Float None', 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' }, 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: 'Foreground Color', transparent: 'Transparent', setTransparent: 'Set transparent', reset: 'Reset', resetToDefault: 'Reset to default' }, 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' } } }); var KEY_MAP = { 'BACKSPACE': 8, 'TAB': 9, 'ENTER': 13, 'SPACE': 32, 'DELETE': 46, // Arrow 'LEFT': 37, 'UP': 38, 'RIGHT': 39, 'DOWN': 40, // Number: 0-9 'NUM0': 48, 'NUM1': 49, 'NUM2': 50, 'NUM3': 51, 'NUM4': 52, 'NUM5': 53, 'NUM6': 54, 'NUM7': 55, 'NUM8': 56, // Alphabet: a-z 'B': 66, 'E': 69, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'R': 82, 'S': 83, 'U': 85, 'V': 86, 'Y': 89, 'Z': 90, 'SLASH': 191, 'LEFTBRACKET': 219, 'BACKSLASH': 220, 'RIGHTBRACKET': 221 }; /** * @class core.key * * Object for keycodes. * * @singleton * @alternateClassName key */ var key = { /** * @method isEdit * * @param {Number} keyCode * @return {Boolean} */ isEdit: function (keyCode) { return lists.contains([ KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE ], keyCode); }, /** * @method isMove * * @param {Number} keyCode * @return {Boolean} */ isMove: function (keyCode) { return lists.contains([ KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN ], keyCode); }, /** * @property {Object} nameFromCode * @property {String} nameFromCode.8 "BACKSPACE" */ nameFromCode: func.invertObject(KEY_MAP), code: KEY_MAP }; /** * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js * * @param {TextRange} textRange * @param {Boolean} isStart * @return {BoundaryPoint} * * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx */ function textRangeToPoint(textRange, isStart) { var container = textRange.parentElement(); var offset; var tester = document.body.createTextRange(); var prevContainer; var childNodes = lists.from(container.childNodes); for (offset = 0; offset < childNodes.length; offset++) { if (dom.isText(childNodes[offset])) { continue; } tester.moveToElementText(childNodes[offset]); if (tester.compareEndPoints('StartToStart', textRange) >= 0) { break; } prevContainer = childNodes[offset]; } if (offset !== 0 && dom.isText(childNodes[offset - 1])) { var textRangeStart = document.body.createTextRange(); var curTextNode = null; textRangeStart.moveToElementText(prevContainer || container); textRangeStart.collapse(!prevContainer); curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild; var pointTester = textRange.duplicate(); pointTester.setEndPoint('StartToStart', textRangeStart); var textCount = pointTester.text.replace(/[\r\n]/g, '').length; while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } // [workaround] enforce IE to re-reference curTextNode, hack var dummy = curTextNode.nodeValue; // eslint-disable-line if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) && textCount === curTextNode.nodeValue.length) { textCount -= curTextNode.nodeValue.length; curTextNode = curTextNode.nextSibling; } container = curTextNode; offset = textCount; } return { cont: container, offset: offset }; } /** * return TextRange from boundary point (inspired by google closure-library) * @param {BoundaryPoint} point * @return {TextRange} */ function pointToTextRange(point) { var textRangeInfo = function (container, offset) { var node, isCollapseToStart; if (dom.isText(container)) { var prevTextNodes = dom.listPrev(container, func.not(dom.isText)); var prevContainer = lists.last(prevTextNodes).previousSibling; node = prevContainer || container.parentNode; offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength); isCollapseToStart = !prevContainer; } else { node = container.childNodes[offset] || container; if (dom.isText(node)) { return textRangeInfo(node, 0); } offset = 0; isCollapseToStart = false; } return { node: node, collapseToStart: isCollapseToStart, offset: offset }; }; var textRange = document.body.createTextRange(); var info = textRangeInfo(point.node, point.offset); textRange.moveToElementText(info.node); textRange.collapse(info.collapseToStart); textRange.moveStart('character', info.offset); return textRange; } /** * Wrapped Range * * @constructor * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset */ var WrappedRange = /** @class */ (function () { function WrappedRange(sc, so, ec, eo) { this.sc = sc; this.so = so; this.ec = ec; this.eo = eo; // isOnEditable: judge whether range is on editable or not this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not this.isOnData = this.makeIsOn(dom.isData); } // nativeRange: get nativeRange from sc, so, ec, eo WrappedRange.prototype.nativeRange = function () { if (env.isW3CRangeSupport) { var w3cRange = document.createRange(); w3cRange.setStart(this.sc, this.so); w3cRange.setEnd(this.ec, this.eo); return w3cRange; } else { var textRange = pointToTextRange({ node: this.sc, offset: this.so }); textRange.setEndPoint('EndToEnd', pointToTextRange({ node: this.ec, offset: this.eo })); return textRange; } }; WrappedRange.prototype.getPoints = function () { return { sc: this.sc, so: this.so, ec: this.ec, eo: this.eo }; }; WrappedRange.prototype.getStartPoint = function () { return { node: this.sc, offset: this.so }; }; WrappedRange.prototype.getEndPoint = function () { return { node: this.ec, offset: this.eo }; }; /** * select update visible range */ WrappedRange.prototype.select = function () { var nativeRng = this.nativeRange(); if (env.isW3CRangeSupport) { var selection = document.getSelection(); if (selection.rangeCount > 0) { selection.removeAllRanges(); } selection.addRange(nativeRng); } else { nativeRng.select(); } return this; }; /** * Moves the scrollbar to start container(sc) of current range * * @return {WrappedRange} */ WrappedRange.prototype.scrollIntoView = function (container) { var height = $$1(container).height(); if (container.scrollTop + height < this.sc.offsetTop) { container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop); } return this; }; /** * @return {WrappedRange} */ WrappedRange.prototype.normalize = function () { /** * @param {BoundaryPoint} point * @param {Boolean} isLeftToRight * @return {BoundaryPoint} */ var getVisiblePoint = function (point, isLeftToRight) { if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { return point; } // point on block's edge var block = dom.ancestor(point.node, dom.isBlock); if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { // returns point already on visible point if (dom.isVisiblePoint(point)) { return point; } // reverse direction isLeftToRight = !isLeftToRight; } var nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); return nextPoint || point; }; var endPoint = getVisiblePoint(this.getEndPoint(), false); var startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); }; /** * returns matched nodes on range * * @param {Function} [pred] - predicate function * @param {Object} [options] * @param {Boolean} [options.includeAncestor] * @param {Boolean} [options.fullyContains] * @return {Node[]} */ WrappedRange.prototype.nodes = function (pred, options) { pred = pred || func.ok; var includeAncestor = options && options.includeAncestor; var fullyContains = options && options.fullyContains; // TODO compare points and sort var startPoint = this.getStartPoint(); var endPoint = this.getEndPoint(); var nodes = []; var leftEdgeNodes = []; dom.walkPoint(startPoint, endPoint, function (point) { if (dom.isEditable(point.node)) { return; } var node; if (fullyContains) { if (dom.isLeftEdgePoint(point)) { leftEdgeNodes.push(point.node); } if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) { node = point.node; } } else if (includeAncestor) { node = dom.ancestor(point.node, pred); } else { node = point.node; } if (node && pred(node)) { nodes.push(node); } }, true); return lists.unique(nodes); }; /** * returns commonAncestor of range * @return {Element} - commonAncestor */ WrappedRange.prototype.commonAncestor = function () { return dom.commonAncestor(this.sc, this.ec); }; /** * returns expanded range by pred * * @param {Function} pred - predicate function * @return {WrappedRange} */ WrappedRange.prototype.expand = function (pred) { var startAncestor = dom.ancestor(this.sc, pred); var endAncestor = dom.ancestor(this.ec, pred); if (!startAncestor && !endAncestor) { return new WrappedRange(this.sc, this.so, this.ec, this.eo); } var boundaryPoints = this.getPoints(); if (startAncestor) { boundaryPoints.sc = startAncestor; boundaryPoints.so = 0; } if (endAncestor) { boundaryPoints.ec = endAncestor; boundaryPoints.eo = dom.nodeLength(endAncestor); } return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); }; /** * @param {Boolean} isCollapseToStart * @return {WrappedRange} */ WrappedRange.prototype.collapse = function (isCollapseToStart) { if (isCollapseToStart) { return new WrappedRange(this.sc, this.so, this.sc, this.so); } else { return new WrappedRange(this.ec, this.eo, this.ec, this.eo); } }; /** * splitText on range */ WrappedRange.prototype.splitText = function () { var isSameContainer = this.sc === this.ec; var boundaryPoints = this.getPoints(); if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) { this.ec.splitText(this.eo); } if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) { boundaryPoints.sc = this.sc.splitText(this.so); boundaryPoints.so = 0; if (isSameContainer) { boundaryPoints.ec = boundaryPoints.sc; boundaryPoints.eo = this.eo - this.so; } } return new WrappedRange(boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo); }; /** * delete contents on range * @return {WrappedRange} */ WrappedRange.prototype.deleteContents = function () { if (this.isCollapsed()) { return this; } var rng = this.splitText(); var nodes = rng.nodes(null, { fullyContains: true }); // find new cursor point var point = dom.prevPointUntil(rng.getStartPoint(), function (point) { return !lists.contains(nodes, point.node); }); var emptyParents = []; $$1.each(nodes, function (idx, node) { // find empty parents var parent = node.parentNode; if (point.node !== parent && dom.nodeLength(parent) === 1) { emptyParents.push(parent); } dom.remove(node, false); }); // remove empty parents $$1.each(emptyParents, function (idx, node) { dom.remove(node, false); }); return new WrappedRange(point.node, point.offset, point.node, point.offset).normalize(); }; /** * makeIsOn: return isOn(pred) function */ WrappedRange.prototype.makeIsOn = function (pred) { return function () { var ancestor = dom.ancestor(this.sc, pred); return !!ancestor && (ancestor === dom.ancestor(this.ec, pred)); }; }; /** * @param {Function} pred * @return {Boolean} */ WrappedRange.prototype.isLeftEdgeOf = function (pred) { if (!dom.isLeftEdgePoint(this.getStartPoint())) { return false; } var node = dom.ancestor(this.sc, pred); return node && dom.isLeftEdgeOf(this.sc, node); }; /** * returns whether range was collapsed or not */ WrappedRange.prototype.isCollapsed = function () { return this.sc === this.ec && this.so === this.eo; }; /** * wrap inline nodes which children of body with paragraph * * @return {WrappedRange} */ WrappedRange.prototype.wrapBodyInlineWithPara = function () { if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) { this.sc.innerHTML = dom.emptyPara; return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0); } /** * [workaround] firefox often create range on not visible point. so normalize here. * - firefox: |<p>text</p>| * - chrome: <p>|text|</p> */ var rng = this.normalize(); if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) { return rng; } // find inline top ancestor var topAncestor; if (dom.isInline(rng.sc)) { var ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); topAncestor = lists.last(ancestors); if (!dom.isInline(topAncestor)) { topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so]; } } else { topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0]; } // siblings not in paragraph var inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph if (inlineSiblings.length) { var para = dom.wrap(lists.head(inlineSiblings), 'p'); dom.appendChildNodes(para, lists.tail(inlineSiblings)); } return this.normalize(); }; /** * insert node at current cursor * * @param {Node} node * @return {Node} */ WrappedRange.prototype.insertNode = function (node) { var rng = this.wrapBodyInlineWithPara().deleteContents(); var info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); if (info.rightNode) { info.rightNode.parentNode.insertBefore(node, info.rightNode); } else { info.container.appendChild(node); } return node; }; /** * insert html at current cursor */ WrappedRange.prototype.pasteHTML = function (markup) { var contentsContainer = $$1('<div></div>').html(markup)[0]; var childNodes = lists.from(contentsContainer.childNodes); var rng = this.wrapBodyInlineWithPara().deleteContents(); return childNodes.reverse().map(function (childNode) { return rng.insertNode(childNode); }).reverse(); }; /** * returns text in range * * @return {String} */ WrappedRange.prototype.toString = function () { var nativeRng = this.nativeRange(); return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text; }; /** * returns range for word before cursor * * @param {Boolean} [findAfter] - find after cursor, default: false * @return {WrappedRange} */ WrappedRange.prototype.getWordRange = function (findAfter) { var endPoint = this.getEndPoint(); if (!dom.isCharPoint(endPoint)) { return this; } var startPoint = dom.prevPointUntil(endPoint, function (point) { return !dom.isCharPoint(point); }); if (findAfter) { endPoint = dom.nextPointUntil(endPoint, function (point) { return !dom.isCharPoint(point); }); } return new WrappedRange(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset); }; /** * create offsetPath bookmark * * @param {Node} editable */ WrappedRange.prototype.bookmark = function (editable) { return { s: { path: dom.makeOffsetPath(editable, this.sc), offset: this.so }, e: { path: dom.makeOffsetPath(editable, this.ec), offset: this.eo } }; }; /** * create offsetPath bookmark base on paragraph * * @param {Node[]} paras */ WrappedRange.prototype.paraBookmark = function (paras) { return { s: { path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)), offset: this.so }, e: { path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)), offset: this.eo } }; }; /** * getClientRects * @return {Rect[]} */ WrappedRange.prototype.getClientRects = function () { var nativeRng = this.nativeRange(); return nativeRng.getClientRects(); }; return WrappedRange; }()); /** * Data structure * * BoundaryPoint: a point of dom tree * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range * * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position */ var range = { /** * create Range Object From arguments or Browser Selection * * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset * @return {WrappedRange} */ create: function (sc, so, ec, eo) { if (arguments.length === 4) { return new WrappedRange(sc, so, ec, eo); } else if (arguments.length === 2) { ec = sc; eo = so; return new WrappedRange(sc, so, ec, eo); } else { var wrappedRange = this.createFromSelection(); if (!wrappedRange && arguments.length === 1) { wrappedRange = this.createFromNode(arguments[0]); return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); } return wrappedRange; } }, createFromSelection: function () { var sc, so, ec, eo; if (env.isW3CRangeSupport) { var selection = document.getSelection(); if (!selection || selection.rangeCount === 0) { return null; } else if (dom.isBody(selection.anchorNode)) { // Firefox: returns entire body as range on initialization. // We won't never need it. return null; } var nativeRng = selection.getRangeAt(0); sc = nativeRng.startContainer; so = nativeRng.startOffset; ec = nativeRng.endContainer; eo = nativeRng.endOffset; } else { var textRange = document.selection.createRange(); var textRangeEnd = textRange.duplicate(); textRangeEnd.collapse(false); var textRangeStart = textRange; textRangeStart.collapse(true); var startPoint = textRangeToPoint(textRangeStart, true); var endPoint = textRangeToPoint(textRangeEnd, false); // same visible point case: range was collapsed. if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) && dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) { startPoint = endPoint; } sc = startPoint.cont; so = startPoint.offset; ec = endPoint.cont; eo = endPoint.offset; } return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from node * * @param {Node} node * @return {WrappedRange} */ createFromNode: function (node) { var sc = node; var so = 0; var ec = node; var eo = dom.nodeLength(ec); // browsers can't target a picture or void node if (dom.isVoid(sc)) { so = dom.listPrev(sc).length - 1; sc = sc.parentNode; } if (dom.isBR(ec)) { eo = dom.listPrev(ec).length - 1; ec = ec.parentNode; } else if (dom.isVoid(ec)) { eo = dom.listPrev(ec).length; ec = ec.parentNode; } return this.create(sc, so, ec, eo); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeBefore: function (node) { return this.createFromNode(node).collapse(true); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeAfter: function (node) { return this.createFromNode(node).collapse(); }, /** * @method * * create WrappedRange from bookmark * * @param {Node} editable * @param {Object} bookmark * @return {WrappedRange} */ createFromBookmark: function (editable, bookmark) { var sc = dom.fromOffsetPath(editable, bookmark.s.path); var so = bookmark.s.offset; var ec = dom.fromOffsetPath(editable, bookmark.e.path); var eo = bookmark.e.offset; return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from paraBookmark * * @param {Object} bookmark * @param {Node[]} paras * @return {WrappedRange} */ createFromParaBookmark: function (bookmark, paras) { var so = bookmark.s.offset; var eo = bookmark.e.offset; var sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path); var ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path); return new WrappedRange(sc, so, ec, eo); } }; /** * @method readFileAsDataURL * * read contents of file as representing URL * * @param {File} file * @return {Promise} - then: dataUrl */ function readFileAsDataURL(file) { return $$1.Deferred(function (deferred) { $$1.extend(new FileReader(), { onload: function (e) { var dataURL = e.target.result; deferred.resolve(dataURL); }, onerror: function (err) { deferred.reject(err); } }).readAsDataURL(file); }).promise(); } /** * @method createImage * * create `<image>` from url string * * @param {String} url * @return {Promise} - then: $image */ function createImage(url) { return $$1.Deferred(function (deferred) { var $img = $$1('<img>'); $img.one('load', function () { $img.off('error abort'); deferred.resolve($img); }).one('error abort', function () { $img.off('load').detach(); deferred.reject($img); }).css({ display: 'none' }).appendTo(document.body).attr('src', url); }).promise(); } var History = /** @class */ (function () { function History($editable) { this.stack = []; this.stackOffset = -1; this.$editable = $editable; this.editable = $editable[0]; } History.prototype.makeSnapshot = function () { var rng = range.create(this.editable); var emptyBookmark = { s: { path: [], offset: 0 }, e: { path: [], offset: 0 } }; return { contents: this.$editable.html(), bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark) }; }; History.prototype.applySnapshot = function (snapshot) { if (snapshot.contents !== null) { this.$editable.html(snapshot.contents); } if (snapshot.bookmark !== null) { range.createFromBookmark(this.editable, snapshot.bookmark).select(); } }; /** * @method rewind * Rewinds the history stack back to the first snapshot taken. * Leaves the stack intact, so that "Redo" can still be used. */ History.prototype.rewind = function () { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } // Return to the first available snapshot. this.stackOffset = 0; // Apply that snapshot. this.applySnapshot(this.stack[this.stackOffset]); }; /** * @method reset * Resets the history stack completely; reverting to an empty editor. */ History.prototype.reset = function () { // Clear the stack. this.stack = []; // Restore stackOffset to its original value. this.stackOffset = -1; // Clear the editable area. this.$editable.html(''); // Record our first snapshot (of nothing). this.recordUndo(); }; /** * undo */ History.prototype.undo = function () { // Create snap shot if not yet recorded if (this.$editable.html() !== this.stack[this.stackOffset].contents) { this.recordUndo(); } if (this.stackOffset > 0) { this.stackOffset--; this.applySnapshot(this.stack[this.stackOffset]); } }; /** * redo */ History.prototype.redo = function () { if (this.stack.length - 1 > this.stackOffset) { this.stackOffset++; this.applySnapshot(this.stack[this.stackOffset]); } }; /** * recorded undo */ History.prototype.recordUndo = function () { this.stackOffset++; // Wash out stack after stackOffset if (this.stack.length > this.stackOffset) { this.stack = this.stack.slice(0, this.stackOffset); } // Create new snapshot and push it to the end this.stack.push(this.makeSnapshot()); }; return History; }()); var Style = /** @class */ (function () { function Style() { } /** * @method jQueryCSS * * [workaround] for old jQuery * passing an array of style properties to .css() * will result in an object of property-value pairs. * (compability with version < 1.9) * * @private * @param {jQuery} $obj * @param {Array} propertyNames - An array of one or more CSS properties. * @return {Object} */ Style.prototype.jQueryCSS = function ($obj, propertyNames) { if (env.jqueryVersion < 1.9) { var result_1 = {}; $$1.each(propertyNames, function (idx, propertyName) { result_1[propertyName] = $obj.css(propertyName); }); return result_1; } return $obj.css(propertyNames); }; /** * returns style object from node * * @param {jQuery} $node * @return {Object} */ Style.prototype.fromNode = function ($node) { var properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; var styleInfo = this.jQueryCSS($node, properties) || {}; styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); return styleInfo; }; /** * paragraph level style * * @param {WrappedRange} rng * @param {Object} styleInfo */ Style.prototype.stylePara = function (rng, styleInfo) { $$1.each(rng.nodes(dom.isPara, { includeAncestor: true }), function (idx, para) { $$1(para).css(styleInfo); }); }; /** * insert and returns styleNodes on range. * * @param {WrappedRange} rng * @param {Object} [options] - options for styleNodes * @param {String} [options.nodeName] - default: `SPAN` * @param {Boolean} [options.expandClosestSibling] - default: `false` * @param {Boolean} [options.onlyPartialContains] - default: `false` * @return {Node[]} */ Style.prototype.styleNodes = function (rng, options) { rng = rng.splitText(); var nodeName = (options && options.nodeName) || 'SPAN'; var expandClosestSibling = !!(options && options.expandClosestSibling); var onlyPartialContains = !!(options && options.onlyPartialContains); if (rng.isCollapsed()) { return [rng.insertNode(dom.create(nodeName))]; } var pred = dom.makePredByNodeName(nodeName); var nodes = rng.nodes(dom.isText, { fullyContains: true }).map(function (text) { return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); }); if (expandClosestSibling) { if (onlyPartialContains) { var nodesInRange_1 = rng.nodes(); // compose with partial contains predication pred = func.and(pred, function (node) { return lists.contains(nodesInRange_1, node); }); } return nodes.map(function (node) { var siblings = dom.withClosestSiblings(node, pred); var head = lists.head(siblings); var tails = lists.tail(siblings); $$1.each(tails, function (idx, elem) { dom.appendChildNodes(head, elem.childNodes); dom.remove(elem); }); return lists.head(siblings); }); } else { return nodes; } }; /** * get current style on cursor * * @param {WrappedRange} rng * @return {Object} - object contains style properties. */ Style.prototype.current = function (rng) { var $cont = $$1(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc); var styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" try { styleInfo = $$1.extend(styleInfo, { 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal', 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'] }); } catch (e) { } // list-style-type to list-style(unordered, ordered) if (!rng.isOnList()) { styleInfo['list-style'] = 'none'; } else { var orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square']; var isUnordered = $$1.inArray(styleInfo['list-style-type'], orderedTypes) > -1; styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered'; } var para = dom.ancestor(rng.sc, dom.isPara); if (para && para.style['line-height']) { styleInfo['line-height'] = para.style.lineHeight; } else { var lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); styleInfo['line-height'] = lineHeight.toFixed(1); } styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); styleInfo.range = rng; return styleInfo; }; return Style; }()); var Bullet = /** @class */ (function () { function Bullet() { } /** * toggle ordered list */ Bullet.prototype.insertOrderedList = function (editable) { this.toggleList('OL', editable); }; /** * toggle unordered list */ Bullet.prototype.insertUnorderedList = function (editable) { this.toggleList('UL', editable); }; /** * indent */ Bullet.prototype.indent = function (editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); if (dom.isLi(head)) { _this.wrapList(paras, head.parentNode.nodeName); } else { $$1.each(paras, function (idx, para) { $$1(para).css('marginLeft', function (idx, val) { return (parseInt(val, 10) || 0) + 25; }); }); } }); rng.select(); }; /** * outdent */ Bullet.prototype.outdent = function (editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); if (dom.isLi(head)) { _this.releaseList([paras]); } else { $$1.each(paras, function (idx, para) { $$1(para).css('marginLeft', function (idx, val) { val = (parseInt(val, 10) || 0); return val > 25 ? val - 25 : ''; }); }); } }); rng.select(); }; /** * toggle list * * @param {String} listName - OL or UL */ Bullet.prototype.toggleList = function (listName, editable) { var _this = this; var rng = range.create(editable).wrapBodyInlineWithPara(); var paras = rng.nodes(dom.isPara, { includeAncestor: true }); var bookmark = rng.paraBookmark(paras); var clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list if (lists.find(paras, dom.isPurePara)) { var wrappedParas_1 = []; $$1.each(clustereds, function (idx, paras) { wrappedParas_1 = wrappedParas_1.concat(_this.wrapList(paras, listName)); }); paras = wrappedParas_1; // list to paragraph or change list style } else { var diffLists = rng.nodes(dom.isList, { includeAncestor: true }).filter(function (listNode) { return !$$1.nodeName(listNode, listName); }); if (diffLists.length) { $$1.each(diffLists, function (idx, listNode) { dom.replace(listNode, listName); }); } else { paras = this.releaseList(clustereds, true); } } range.createFromParaBookmark(bookmark, paras).select(); }; /** * @param {Node[]} paras * @param {String} listName * @return {Node[]} */ Bullet.prototype.wrapList = function (paras, listName) { var head = lists.head(paras); var last = lists.last(paras); var prevList = dom.isList(head.previousSibling) && head.previousSibling; var nextList = dom.isList(last.nextSibling) && last.nextSibling; var listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI paras = paras.map(function (para) { return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; }); // append to list(<ul>, <ol>) dom.appendChildNodes(listNode, paras); if (nextList) { dom.appendChildNodes(listNode, lists.from(nextList.childNodes)); dom.remove(nextList); } return paras; }; /** * @method releaseList * * @param {Array[]} clustereds * @param {Boolean} isEscapseToBody * @return {Node[]} */ Bullet.prototype.releaseList = function (clustereds, isEscapseToBody) { var releasedParas = []; $$1.each(clustereds, function (idx, paras) { var head = lists.head(paras); var last = lists.last(paras); var headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode; var lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, { node: last.parentNode, offset: dom.position(last) + 1 }, { isSkipPaddingBlankHTML: true }) : null; var middleList = dom.splitTree(headList, { node: head.parentNode, offset: dom.position(head) }, { isSkipPaddingBlankHTML: true }); paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P if (isEscapseToBody || !dom.isList(headList.parentNode)) { paras = paras.map(function (para) { return dom.replace(para, 'P'); }); } $$1.each(lists.from(paras).reverse(), function (idx, para) { dom.insertAfter(para, headList); }); // remove empty lists var rootLists = lists.compact([headList, middleList, lastList]); $$1.each(rootLists, function (idx, rootList) { var listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); $$1.each(listNodes.reverse(), function (idx, listNode) { if (!dom.nodeLength(listNode)) { dom.remove(listNode, true); } }); }); releasedParas = releasedParas.concat(paras); }); return releasedParas; }; return Bullet; }()); /** * @class editing.Typing * * Typing * */ var Typing = /** @class */ (function () { function Typing() { // a Bullet instance to toggle lists off this.bullet = new Bullet(); } /** * insert tab * * @param {WrappedRange} rng * @param {Number} tabsize */ Typing.prototype.insertTab = function (rng, tabsize) { var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); rng = rng.deleteContents(); rng.insertNode(tab, true); rng = range.create(tab, tabsize); rng.select(); }; /** * insert paragraph */ Typing.prototype.insertParagraph = function (editable) { var rng = range.create(editable); // deleteContents on range. rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph rng = rng.wrapBodyInlineWithPara(); // finding paragraph var splitRoot = dom.ancestor(rng.sc, dom.isPara); var nextPara; // on paragraph: split paragraph if (splitRoot) { // if it is an empty line with li if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { // toogle UL/OL and escape this.bullet.toggleList(splitRoot.parentNode.nodeName); return; // if it is an empty line with para on blockquote } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { // escape blockquote dom.insertAfter(splitRoot, splitRoot.parentNode); nextPara = splitRoot; // if new line has content (not a line break) } else { nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); $$1.each(emptyAnchors, function (idx, anchor) { dom.remove(anchor); }); // replace empty heading, pre or custom-made styleTag with P tag if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) { nextPara = dom.replace(nextPara, 'p'); } } // no paragraph: insert empty paragraph } else { var next = rng.sc.childNodes[rng.so]; nextPara = $$1(dom.emptyPara)[0]; if (next) { rng.sc.insertBefore(nextPara, next); } else { rng.sc.appendChild(nextPara); } } range.create(nextPara, 0).normalize().select().scrollIntoView(editable); }; return Typing; }()); /** * @class Create a virtual table to create what actions to do in change. * @param {object} startPoint Cell selected to apply change. * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction * @param {object} domTable Dom element of table to make changes. */ var TableResultAction = function (startPoint, where, action, domTable) { var _startPoint = { 'colPos': 0, 'rowPos': 0 }; var _virtualTable = []; var _actionCellList = []; /// /////////////////////////////////////////// // Private functions /// /////////////////////////////////////////// /** * Set the startPoint of action. */ function setStartPoint() { if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) { console.error('Impossible to identify start Cell point.', startPoint); return; } _startPoint.colPos = startPoint.cellIndex; if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') { console.error('Impossible to identify start Row point.', startPoint); return; } _startPoint.rowPos = startPoint.parentElement.rowIndex; } /** * Define virtual table position info object. * * @param {int} rowIndex Index position in line of virtual table. * @param {int} cellIndex Index position in column of virtual table. * @param {object} baseRow Row affected by this position. * @param {object} baseCell Cell affected by this position. * @param {bool} isSpan Inform if it is an span cell/row. */ function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) { var objPosition = { 'baseRow': baseRow, 'baseCell': baseCell, 'isRowSpan': isRowSpan, 'isColSpan': isColSpan, 'isVirtual': isVirtualCell }; if (!_virtualTable[rowIndex]) { _virtualTable[rowIndex] = []; } _virtualTable[rowIndex][cellIndex] = objPosition; } /** * Create action cell object. * * @param {object} virtualTableCellObj Object of specific position on virtual table. * @param {enum} resultAction Action to be applied in that item. */ function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) { return { 'baseCell': virtualTableCellObj.baseCell, 'action': resultAction, 'virtualTable': { 'rowIndex': virtualRowPosition, 'cellIndex': virtualColPosition } }; } /** * Recover free index of row to append Cell. * * @param {int} rowIndex Index of row to find free space. * @param {int} cellIndex Index of cell to find free space in table. */ function recoverCellIndex(rowIndex, cellIndex) { if (!_virtualTable[rowIndex]) { return cellIndex; } if (!_virtualTable[rowIndex][cellIndex]) { return cellIndex; } var newCellIndex = cellIndex; while (_virtualTable[rowIndex][newCellIndex]) { newCellIndex++; if (!_virtualTable[rowIndex][newCellIndex]) { return newCellIndex; } } } /** * Recover info about row and cell and add information to virtual table. * * @param {object} row Row to recover information. * @param {object} cell Cell to recover information. */ function addCellInfoToVirtual(row, cell) { var cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex); var cellHasColspan = (cell.colSpan > 1); var cellHasRowspan = (cell.rowSpan > 1); var isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos); setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table. var rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0; if (rowspanNumber > 1) { for (var rp = 1; rp < rowspanNumber; rp++) { var rowspanIndex = row.rowIndex + rp; adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell); setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true); } } // Add span cols to virtual table. var colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0; if (colspanNumber > 1) { for (var cp = 1; cp < colspanNumber; cp++) { var cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp)); adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell); setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true); } } } /** * Process validation and adjust of start point if needed * * @param {int} rowIndex * @param {int} cellIndex * @param {object} cell * @param {bool} isSelectedCell */ function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) { if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) { _startPoint.colPos++; } } /** * Create virtual table of cells with all cells, including span cells. */ function createVirtualTable() { var rows = domTable.rows; for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) { var cells = rows[rowIndex].cells; for (var cellIndex = 0; cellIndex < cells.length; cellIndex++) { addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]); } } } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getDeleteResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; case TableResultAction.where.Row: if (!cell.isVirtual && cell.isRowSpan) { return TableResultAction.resultAction.AddCell; } else if (cell.isRowSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; } return TableResultAction.resultAction.RemoveCell; } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getAddResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isRowSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; case TableResultAction.where.Row: if (cell.isRowSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isColSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; } return TableResultAction.resultAction.AddCell; } function init() { setStartPoint(); createVirtualTable(); } /// /////////////////////////////////////////// // Public functions /// /////////////////////////////////////////// /** * Recover array os what to do in table. */ this.getActionList = function () { var fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1; var fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1; var actualPosition = 0; var canContinue = true; while (canContinue) { var rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition; var colPosition = (fixedCol >= 0) ? fixedCol : actualPosition; var row = _virtualTable[rowPosition]; if (!row) { canContinue = false; return _actionCellList; } var cell = row[colPosition]; if (!cell) { canContinue = false; return _actionCellList; } // Define action to be applied in this cell var resultAction = TableResultAction.resultAction.Ignore; switch (action) { case TableResultAction.requestAction.Add: resultAction = getAddResultActionToCell(cell); break; case TableResultAction.requestAction.Delete: resultAction = getDeleteResultActionToCell(cell); break; } _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition)); actualPosition++; } return _actionCellList; }; init(); }; /** * * Where action occours enum. */ TableResultAction.where = { 'Row': 0, 'Column': 1 }; /** * * Requested action to apply enum. */ TableResultAction.requestAction = { 'Add': 0, 'Delete': 1 }; /** * * Result action to be executed enum. */ TableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 }; /** * * @class editing.Table * * Table * */ var Table = /** @class */ (function () { function Table() { } /** * handle tab key * * @param {WrappedRange} rng * @param {Boolean} isShift */ Table.prototype.tab = function (rng, isShift) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var table = dom.ancestor(cell, dom.isTable); var cells = dom.listDescendant(table, dom.isCell); var nextCell = lists[isShift ? 'prev' : 'next'](cells, cell); if (nextCell) { range.create(nextCell, 0).select(); } }; /** * Add a new row * * @param {WrappedRange} rng * @param {String} position (top/bottom) * @return {Node} */ Table.prototype.addRow = function (rng, position) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var currentTr = $$1(cell).closest('tr'); var trAttributes = this.recoverAttributes(currentTr); var html = $$1('<tr' + trAttributes + '></tr>'); var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, $$1(currentTr).closest('table')[0]); var actions = vTable.getActionList(); for (var idCell = 0; idCell < actions.length; idCell++) { var currentCell = actions[idCell]; var tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: html.append('<td' + tdAttributes + '>' + dom.blank + '</td>'); break; case TableResultAction.resultAction.SumSpanCount: if (position === 'top') { var baseCellTr = currentCell.baseCell.parent; var isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex; if (isTopFromRowSpan) { var newTd = $$1('<div></div>').append($$1('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html(); html.append(newTd); break; } } var rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10); rowspanNumber++; currentCell.baseCell.setAttribute('rowSpan', rowspanNumber); break; } } if (position === 'top') { currentTr.before(html); } else { var cellHasRowspan = (cell.rowSpan > 1); if (cellHasRowspan) { var lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2); $$1($$1(currentTr).parent().find('tr')[lastTrIndex]).after($$1(html)); return; } currentTr.after(html); } }; /** * Add a new col * * @param {WrappedRange} rng * @param {String} position (left/right) * @return {Node} */ Table.prototype.addCol = function (rng, position) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var rowsGroup = $$1(row).siblings(); rowsGroup.push(row); var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { var currentCell = actions[actionIndex]; var tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: if (position === 'right') { $$1(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>'); } else { $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; case TableResultAction.resultAction.SumSpanCount: if (position === 'right') { var colspanNumber = parseInt(currentCell.baseCell.colSpan, 10); colspanNumber++; currentCell.baseCell.setAttribute('colSpan', colspanNumber); } else { $$1(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; } } }; /* * Copy attributes from element. * * @param {object} Element to recover attributes. * @return {string} Copied string elements. */ Table.prototype.recoverAttributes = function (el) { var resultStr = ''; if (!el) { return resultStr; } var attrList = el.attributes || []; for (var i = 0; i < attrList.length; i++) { if (attrList[i].name.toLowerCase() === 'id') { continue; } if (attrList[i].specified) { resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\''; } } return resultStr; }; /** * Delete current row * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteRow = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var cellPos = row.children('td, th').index($$1(cell)); var rowPos = row[0].rowIndex; var vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } var baseCell = actions[actionIndex].baseCell; var virtualPosition = actions[actionIndex].virtualTable; var hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1); var rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0; switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.AddCell: var nextRow = row.next('tr')[0]; if (!nextRow) { continue; } var cloneRow = row[0].cells[cellPos]; if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber); nextRow.cells[cellPos].innerHTML = ''; } else if (rowspanNumber === 2) { nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].removeAttribute('rowSpan'); nextRow.cells[cellPos].innerHTML = ''; } } continue; case TableResultAction.resultAction.SubtractSpanCount: if (hasRowspan) { if (rowspanNumber > 2) { rowspanNumber--; baseCell.setAttribute('rowSpan', rowspanNumber); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (rowspanNumber === 2) { baseCell.removeAttribute('rowSpan'); if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: // Do not need remove cell because row will be deleted. continue; } } row.remove(); }; /** * Delete current col * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteCol = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); var row = $$1(cell).closest('tr'); var cellPos = row.children('td, th').index($$1(cell)); var vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, $$1(row).closest('table')[0]); var actions = vTable.getActionList(); for (var actionIndex = 0; actionIndex < actions.length; actionIndex++) { if (!actions[actionIndex]) { continue; } switch (actions[actionIndex].action) { case TableResultAction.resultAction.Ignore: continue; case TableResultAction.resultAction.SubtractSpanCount: var baseCell = actions[actionIndex].baseCell; var hasColspan = (baseCell.colSpan && baseCell.colSpan > 1); if (hasColspan) { var colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0; if (colspanNumber > 2) { colspanNumber--; baseCell.setAttribute('colSpan', colspanNumber); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } else if (colspanNumber === 2) { baseCell.removeAttribute('colSpan'); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: dom.remove(actions[actionIndex].baseCell, true); continue; } } }; /** * create empty table element * * @param {Number} rowCount * @param {Number} colCount * @return {Node} */ Table.prototype.createTable = function (colCount, rowCount, options) { var tds = []; var tdHTML; for (var idxCol = 0; idxCol < colCount; idxCol++) { tds.push('<td>' + dom.blank + '</td>'); } tdHTML = tds.join(''); var trs = []; var trHTML; for (var idxRow = 0; idxRow < rowCount; idxRow++) { trs.push('<tr>' + tdHTML + '</tr>'); } trHTML = trs.join(''); var $table = $$1('<table>' + trHTML + '</table>'); if (options && options.tableClassName) { $table.addClass(options.tableClassName); } return $table[0]; }; /** * Delete current table * * @param {WrappedRange} rng * @return {Node} */ Table.prototype.deleteTable = function (rng) { var cell = dom.ancestor(rng.commonAncestor(), dom.isCell); $$1(cell).closest('table').remove(); }; return Table; }()); var KEY_BOGUS = 'bogus'; /** * @class Editor */ var Editor = /** @class */ (function () { function Editor(context) { var _this = this; this.context = context; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.editable = this.$editable[0]; this.lastRange = null; this.style = new Style(); this.table = new Table(); this.typing = new Typing(); this.bullet = new Bullet(); this.history = new History(this.$editable); this.context.memo('help.undo', this.lang.help.undo); this.context.memo('help.redo', this.lang.help.redo); this.context.memo('help.tab', this.lang.help.tab); this.context.memo('help.untab', this.lang.help.untab); this.context.memo('help.insertParagraph', this.lang.help.insertParagraph); this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList); this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList); this.context.memo('help.indent', this.lang.help.indent); this.context.memo('help.outdent', this.lang.help.outdent); this.context.memo('help.formatPara', this.lang.help.formatPara); this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule); this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand var commands = [ 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor' ]; for (var idx = 0, len = commands.length; idx < len; idx++) { this[commands[idx]] = (function (sCmd) { return function (value) { _this.beforeCommand(); document.execCommand(sCmd, false, value); _this.afterCommand(true); }; })(commands[idx]); this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]); } this.fontName = this.wrapCommand(function (value) { return _this.fontStyling('font-family', "\'" + value + "\'"); }); this.fontSize = this.wrapCommand(function (value) { return _this.fontStyling('font-size', value + 'px'); }); for (var idx = 1; idx <= 6; idx++) { this['formatH' + idx] = (function (idx) { return function () { _this.formatBlock('H' + idx); }; })(idx); this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]); } this.insertParagraph = this.wrapCommand(function () { _this.typing.insertParagraph(_this.editable); }); this.insertOrderedList = this.wrapCommand(function () { _this.bullet.insertOrderedList(_this.editable); }); this.insertUnorderedList = this.wrapCommand(function () { _this.bullet.insertUnorderedList(_this.editable); }); this.indent = this.wrapCommand(function () { _this.bullet.indent(_this.editable); }); this.outdent = this.wrapCommand(function () { _this.bullet.outdent(_this.editable); }); /** * insertNode * insert node * @param {Node} node */ this.insertNode = this.wrapCommand(function (node) { if (_this.isLimited($$1(node).text().length)) { return; } var rng = _this.createRange(); rng.insertNode(node); range.createFromNodeAfter(node).select(); }); /** * insert text * @param {String} text */ this.insertText = this.wrapCommand(function (text) { if (_this.isLimited(text.length)) { return; } var rng = _this.createRange(); var textNode = rng.insertNode(dom.createText(text)); range.create(textNode, dom.nodeLength(textNode)).select(); }); /** * paste HTML * @param {String} markup */ this.pasteHTML = this.wrapCommand(function (markup) { if (_this.isLimited(markup.length)) { return; } var contents = _this.createRange().pasteHTML(markup); range.createFromNodeAfter(lists.last(contents)).select(); }); /** * formatBlock * * @param {String} tagName */ this.formatBlock = this.wrapCommand(function (tagName, $target) { var onApplyCustomStyle = _this.options.callbacks.onApplyCustomStyle; if (onApplyCustomStyle) { onApplyCustomStyle.call(_this, $target, _this.context, _this.onFormatBlock); } else { _this.onFormatBlock(tagName, $target); } }); /** * insert horizontal rule */ this.insertHorizontalRule = this.wrapCommand(function () { var hrNode = _this.createRange().insertNode(dom.create('HR')); if (hrNode.nextSibling) { range.create(hrNode.nextSibling, 0).normalize().select(); } }); /** * lineHeight * @param {String} value */ this.lineHeight = this.wrapCommand(function (value) { _this.style.stylePara(_this.createRange(), { lineHeight: value }); }); /** * create link (command) * * @param {Object} linkInfo */ this.createLink = this.wrapCommand(function (linkInfo) { var linkUrl = linkInfo.url; var linkText = linkInfo.text; var isNewWindow = linkInfo.isNewWindow; var rng = linkInfo.range || _this.createRange(); var isTextChanged = rng.toString() !== linkText; // handle spaced urls from input if (typeof linkUrl === 'string') { linkUrl = linkUrl.trim(); } if (_this.options.onCreateLink) { linkUrl = _this.options.onCreateLink(linkUrl); } else { // if url doesn't match an URL schema, set http:// as default linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) ? linkUrl : 'http://' + linkUrl; } var anchors = []; if (isTextChanged) { rng = rng.deleteContents(); var anchor = rng.insertNode($$1('<A>' + linkText + '</A>')[0]); anchors.push(anchor); } else { anchors = _this.style.styleNodes(rng, { nodeName: 'A', expandClosestSibling: true, onlyPartialContains: true }); } $$1.each(anchors, function (idx, anchor) { $$1(anchor).attr('href', linkUrl); if (isNewWindow) { $$1(anchor).attr('target', '_blank'); } else { $$1(anchor).removeAttr('target'); } }); var startRange = range.createFromNodeBefore(lists.head(anchors)); var startPoint = startRange.getStartPoint(); var endRange = range.createFromNodeAfter(lists.last(anchors)); var endPoint = endRange.getEndPoint(); range.create(startPoint.node, startPoint.offset, endPoint.node, endPoint.offset).select(); }); /** * setting color * * @param {Object} sObjColor color code * @param {String} sObjColor.foreColor foreground color * @param {String} sObjColor.backColor background color */ this.color = this.wrapCommand(function (colorInfo) { var foreColor = colorInfo.foreColor; var backColor = colorInfo.backColor; if (foreColor) { document.execCommand('foreColor', false, foreColor); } if (backColor) { document.execCommand('backColor', false, backColor); } }); /** * Set foreground color * * @param {String} colorCode foreground color code */ this.foreColor = this.wrapCommand(function (colorInfo) { document.execCommand('styleWithCSS', false, true); document.execCommand('foreColor', false, colorInfo); }); /** * insert Table * * @param {String} dimension of table (ex : "5x5") */ this.insertTable = this.wrapCommand(function (dim) { var dimension = dim.split('x'); var rng = _this.createRange().deleteContents(); rng.insertNode(_this.table.createTable(dimension[0], dimension[1], _this.options)); }); /** * remove media object and Figure Elements if media object is img with Figure. */ this.removeMedia = this.wrapCommand(function () { var $target = $$1(_this.restoreTarget()).parent(); if ($target.parent('figure').length) { $target.parent('figure').remove(); } else { $target = $$1(_this.restoreTarget()).detach(); } _this.context.triggerEvent('media.delete', $target, _this.$editable); }); /** * float me * * @param {String} value */ this.floatMe = this.wrapCommand(function (value) { var $target = $$1(_this.restoreTarget()); $target.toggleClass('note-float-left', value === 'left'); $target.toggleClass('note-float-right', value === 'right'); $target.css('float', value); }); /** * resize overlay element * @param {String} value */ this.resize = this.wrapCommand(function (value) { var $target = $$1(_this.restoreTarget()); $target.css({ width: value * 100 + '%', height: '' }); }); } Editor.prototype.initialize = function () { var _this = this; // bind custom events this.$editable.on('keydown', function (event) { if (event.keyCode === key.code.ENTER) { _this.context.triggerEvent('enter', event); } _this.context.triggerEvent('keydown', event); if (!event.isDefaultPrevented()) { if (_this.options.shortcuts) { _this.handleKeyMap(event); } else { _this.preventDefaultEditableShortCuts(event); } } if (_this.isLimited(1, event)) { return false; } }).on('keyup', function (event) { _this.context.triggerEvent('keyup', event); }).on('focus', function (event) { _this.context.triggerEvent('focus', event); }).on('blur', function (event) { _this.context.triggerEvent('blur', event); }).on('mousedown', function (event) { _this.context.triggerEvent('mousedown', event); }).on('mouseup', function (event) { _this.context.triggerEvent('mouseup', event); }).on('scroll', function (event) { _this.context.triggerEvent('scroll', event); }).on('paste', function (event) { _this.context.triggerEvent('paste', event); }); // init content before set event this.$editable.html(dom.html(this.$note) || dom.emptyPara); this.$editable.on(env.inputEventName, func.debounce(function () { _this.context.triggerEvent('change', _this.$editable.html()); }, 100)); this.$editor.on('focusin', function (event) { _this.context.triggerEvent('focusin', event); }).on('focusout', function (event) { _this.context.triggerEvent('focusout', event); }); if (!this.options.airMode) { if (this.options.width) { this.$editor.outerWidth(this.options.width); } if (this.options.height) { this.$editable.outerHeight(this.options.height); } if (this.options.maxHeight) { this.$editable.css('max-height', this.options.maxHeight); } if (this.options.minHeight) { this.$editable.css('min-height', this.options.minHeight); } } this.history.recordUndo(); }; Editor.prototype.destroy = function () { this.$editable.off(); }; Editor.prototype.handleKeyMap = function (event) { var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; var keys = []; if (event.metaKey) { keys.push('CMD'); } if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); } if (event.shiftKey) { keys.push('SHIFT'); } var keyName = key.nameFromCode[event.keyCode]; if (keyName) { keys.push(keyName); } var eventName = keyMap[keys.join('+')]; if (eventName) { if (this.context.invoke(eventName) !== false) { event.preventDefault(); } } else if (key.isEdit(event.keyCode)) { this.afterCommand(); } }; Editor.prototype.preventDefaultEditableShortCuts = function (event) { // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) if ((event.ctrlKey || event.metaKey) && lists.contains([66, 73, 85], event.keyCode)) { event.preventDefault(); } }; Editor.prototype.isLimited = function (pad, event) { pad = pad || 0; if (typeof event !== 'undefined') { if (key.isMove(event.keyCode) || (event.ctrlKey || event.metaKey) || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) { return false; } } if (this.options.maxTextLength > 0) { if ((this.$editable.text().length + pad) >= this.options.maxTextLength) { return true; } } return false; }; /** * create range * @return {WrappedRange} */ Editor.prototype.createRange = function () { this.focus(); return range.create(this.editable); }; /** * saveRange * * save current range * * @param {Boolean} [thenCollapse=false] */ Editor.prototype.saveRange = function (thenCollapse) { this.lastRange = this.createRange(); if (thenCollapse) { this.lastRange.collapse().select(); } }; /** * restoreRange * * restore lately range */ Editor.prototype.restoreRange = function () { if (this.lastRange) { this.lastRange.select(); this.focus(); } }; Editor.prototype.saveTarget = function (node) { this.$editable.data('target', node); }; Editor.prototype.clearTarget = function () { this.$editable.removeData('target'); }; Editor.prototype.restoreTarget = function () { return this.$editable.data('target'); }; /** * currentStyle * * current style * @return {Object|Boolean} unfocus */ Editor.prototype.currentStyle = function () { var rng = range.create(); if (rng) { rng = rng.normalize(); } return rng ? this.style.current(rng) : this.style.fromNode(this.$editable); }; /** * style from node * * @param {jQuery} $node * @return {Object} */ Editor.prototype.styleFromNode = function ($node) { return this.style.fromNode($node); }; /** * undo */ Editor.prototype.undo = function () { this.context.triggerEvent('before.command', this.$editable.html()); this.history.undo(); this.context.triggerEvent('change', this.$editable.html()); }; /** * redo */ Editor.prototype.redo = function () { this.context.triggerEvent('before.command', this.$editable.html()); this.history.redo(); this.context.triggerEvent('change', this.$editable.html()); }; /** * before command */ Editor.prototype.beforeCommand = function () { this.context.triggerEvent('before.command', this.$editable.html()); // keep focus on editable before command execution this.focus(); }; /** * after command * @param {Boolean} isPreventTrigger */ Editor.prototype.afterCommand = function (isPreventTrigger) { this.normalizeContent(); this.history.recordUndo(); if (!isPreventTrigger) { this.context.triggerEvent('change', this.$editable.html()); } }; /** * handle tab key */ Editor.prototype.tab = function () { var rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng); } else { if (this.options.tabSize === 0) { return false; } if (!this.isLimited(this.options.tabSize)) { this.beforeCommand(); this.typing.insertTab(rng, this.options.tabSize); this.afterCommand(); } } }; /** * handle shift+tab key */ Editor.prototype.untab = function () { var rng = this.createRange(); if (rng.isCollapsed() && rng.isOnCell()) { this.table.tab(rng, true); } else { if (this.options.tabSize === 0) { return false; } } }; /** * run given function between beforeCommand and afterCommand */ Editor.prototype.wrapCommand = function (fn) { var _this = this; return function () { _this.beforeCommand(); fn.apply(_this, arguments); _this.afterCommand(); }; }; /** * insert image * * @param {String} src * @param {String|Function} param * @return {Promise} */ Editor.prototype.insertImage = function (src, param) { var _this = this; return createImage(src, param).then(function ($image) { _this.beforeCommand(); if (typeof param === 'function') { param($image); } else { if (typeof param === 'string') { $image.attr('data-filename', param); } $image.css('width', Math.min(_this.$editable.width(), $image.width())); } $image.show(); range.create(_this.editable).insertNode($image[0]); range.createFromNodeAfter($image[0]).select(); _this.afterCommand(); }).fail(function (e) { _this.context.triggerEvent('image.upload.error', e); }); }; /** * insertImages * @param {File[]} files */ Editor.prototype.insertImages = function (files) { var _this = this; $$1.each(files, function (idx, file) { var filename = file.name; if (_this.options.maximumImageFileSize && _this.options.maximumImageFileSize < file.size) { _this.context.triggerEvent('image.upload.error', _this.lang.image.maximumFileSizeError); } else { readFileAsDataURL(file).then(function (dataURL) { return _this.insertImage(dataURL, filename); }).fail(function () { _this.context.triggerEvent('image.upload.error'); }); } }); }; /** * insertImagesOrCallback * @param {File[]} files */ Editor.prototype.insertImagesOrCallback = function (files) { var callbacks = this.options.callbacks; // If onImageUpload this.options setted if (callbacks.onImageUpload) { this.context.triggerEvent('image.upload', files); // else insert Image as dataURL } else { this.insertImages(files); } }; /** * return selected plain text * @return {String} text */ Editor.prototype.getSelectedText = function () { var rng = this.createRange(); // if range on anchor, expand range with anchor if (rng.isOnAnchor()) { rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor)); } return rng.toString(); }; Editor.prototype.onFormatBlock = function (tagName, $target) { // [workaround] for MSIE, IE need `<` tagName = env.isMSIE ? '<' + tagName + '>' : tagName; document.execCommand('FormatBlock', false, tagName); // support custom class if ($target && $target.length) { var className = $target[0].className || ''; if (className) { var currentRange = this.createRange(); var $parent = $$1([currentRange.sc, currentRange.ec]).closest(tagName); $parent.addClass(className); } } }; Editor.prototype.formatPara = function () { this.formatBlock('P'); }; Editor.prototype.fontStyling = function (target, value) { var rng = this.createRange(); if (rng) { var spans = this.style.styleNodes(rng); $$1(spans).css(target, value); // [workaround] added styled bogus span for style // - also bogus character needed for cursor position if (rng.isCollapsed()) { var firstSpan = lists.head(spans); if (firstSpan && !dom.nodeLength(firstSpan)) { firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; range.createFromNodeAfter(firstSpan.firstChild).select(); this.$editable.data(KEY_BOGUS, firstSpan); } } } }; /** * unlink * * @type command */ Editor.prototype.unlink = function () { var rng = this.createRange(); if (rng.isOnAnchor()) { var anchor = dom.ancestor(rng.sc, dom.isAnchor); rng = range.createFromNode(anchor); rng.select(); this.beforeCommand(); document.execCommand('unlink'); this.afterCommand(); } }; /** * returns link info * * @return {Object} * @return {WrappedRange} return.range * @return {String} return.text * @return {Boolean} [return.isNewWindow=true] * @return {String} [return.url=""] */ Editor.prototype.getLinkInfo = function () { var rng = this.createRange().expand(dom.isAnchor); // Get the first anchor on range(for edit). var $anchor = $$1(lists.head(rng.nodes(dom.isAnchor))); var linkInfo = { range: rng, text: rng.toString(), url: $anchor.length ? $anchor.attr('href') : '' }; // Define isNewWindow when anchor exists. if ($anchor.length) { linkInfo.isNewWindow = $anchor.attr('target') === '_blank'; } return linkInfo; }; Editor.prototype.addRow = function (position) { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addRow(rng, position); this.afterCommand(); } }; Editor.prototype.addCol = function (position) { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.addCol(rng, position); this.afterCommand(); } }; Editor.prototype.deleteRow = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteRow(rng); this.afterCommand(); } }; Editor.prototype.deleteCol = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteCol(rng); this.afterCommand(); } }; Editor.prototype.deleteTable = function () { var rng = this.createRange(this.$editable); if (rng.isCollapsed() && rng.isOnCell()) { this.beforeCommand(); this.table.deleteTable(rng); this.afterCommand(); } }; /** * @param {Position} pos * @param {jQuery} $target - target element * @param {Boolean} [bKeepRatio] - keep ratio */ Editor.prototype.resizeTo = function (pos, $target, bKeepRatio) { var imageSize; if (bKeepRatio) { var newRatio = pos.y / pos.x; var ratio = $target.data('ratio'); imageSize = { width: ratio > newRatio ? pos.x : pos.y / ratio, height: ratio > newRatio ? pos.x * ratio : pos.y }; } else { imageSize = { width: pos.x, height: pos.y }; } $target.css(imageSize); }; /** * returns whether editable area has focus or not. */ Editor.prototype.hasFocus = function () { return this.$editable.is(':focus'); }; /** * set focus */ Editor.prototype.focus = function () { // [workaround] Screen will move when page is scolled in IE. // - do focus when not focused if (!this.hasFocus()) { this.$editable.focus(); } }; /** * returns whether contents is empty or not. * @return {Boolean} */ Editor.prototype.isEmpty = function () { return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html(); }; /** * Removes all contents and restores the editable instance to an _emptyPara_. */ Editor.prototype.empty = function () { this.context.invoke('code', dom.emptyPara); }; /** * normalize content */ Editor.prototype.normalizeContent = function () { this.$editable[0].normalize(); }; return Editor; }()); var Clipboard = /** @class */ (function () { function Clipboard(context) { this.context = context; this.$editable = context.layoutInfo.editable; } Clipboard.prototype.initialize = function () { this.$editable.on('paste', this.pasteByEvent.bind(this)); }; /** * paste by clipboard event * * @param {Event} event */ Clipboard.prototype.pasteByEvent = function (event) { var clipboardData = event.originalEvent.clipboardData; if (clipboardData && clipboardData.items && clipboardData.items.length) { var item = lists.head(clipboardData.items); if (item.kind === 'file' && item.type.indexOf('image/') !== -1) { this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]); } this.context.invoke('editor.afterCommand'); } }; return Clipboard; }()); var Dropzone = /** @class */ (function () { function Dropzone(context) { this.context = context; this.$eventListener = $$1(document); this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.documentEventHandlers = {}; this.$dropzone = $$1([ '<div class="note-dropzone">', ' <div class="note-dropzone-message"/>', '</div>' ].join('')).prependTo(this.$editor); } /** * attach Drag and Drop Events */ Dropzone.prototype.initialize = function () { if (this.options.disableDragAndDrop) { // prevent default drop event this.documentEventHandlers.onDrop = function (e) { e.preventDefault(); }; // do not consider outside of dropzone this.$eventListener = this.$dropzone; this.$eventListener.on('drop', this.documentEventHandlers.onDrop); } else { this.attachDragAndDropEvent(); } }; /** * attach Drag and Drop Events */ Dropzone.prototype.attachDragAndDropEvent = function () { var _this = this; var collection = $$1(); var $dropzoneMessage = this.$dropzone.find('.note-dropzone-message'); this.documentEventHandlers.onDragenter = function (e) { var isCodeview = _this.context.invoke('codeview.isActivated'); var hasEditorSize = _this.$editor.width() > 0 && _this.$editor.height() > 0; if (!isCodeview && !collection.length && hasEditorSize) { _this.$editor.addClass('dragover'); _this.$dropzone.width(_this.$editor.width()); _this.$dropzone.height(_this.$editor.height()); $dropzoneMessage.text(_this.lang.image.dragImageHere); } collection = collection.add(e.target); }; this.documentEventHandlers.onDragleave = function (e) { collection = collection.not(e.target); if (!collection.length) { _this.$editor.removeClass('dragover'); } }; this.documentEventHandlers.onDrop = function () { collection = $$1(); _this.$editor.removeClass('dragover'); }; // show dropzone on dragenter when dragging a object to document // -but only if the editor is visible, i.e. has a positive width and height this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter) .on('dragleave', this.documentEventHandlers.onDragleave) .on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover. this.$dropzone.on('dragenter', function () { _this.$dropzone.addClass('hover'); $dropzoneMessage.text(_this.lang.image.dropImage); }).on('dragleave', function () { _this.$dropzone.removeClass('hover'); $dropzoneMessage.text(_this.lang.image.dragImageHere); }); // attach dropImage this.$dropzone.on('drop', function (event) { var dataTransfer = event.originalEvent.dataTransfer; // stop the browser from opening the dropped content event.preventDefault(); if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { _this.$editable.focus(); _this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files); } else { $$1.each(dataTransfer.types, function (idx, type) { var content = dataTransfer.getData(type); if (type.toLowerCase().indexOf('text') > -1) { _this.context.invoke('editor.pasteHTML', content); } else { $$1(content).each(function (idx, item) { _this.context.invoke('editor.insertNode', item); }); } }); } }).on('dragover', false); // prevent default dragover event }; Dropzone.prototype.destroy = function () { var _this = this; Object.keys(this.documentEventHandlers).forEach(function (key) { _this.$eventListener.off(key.substr(2).toLowerCase(), _this.documentEventHandlers[key]); }); this.documentEventHandlers = {}; }; return Dropzone; }()); var CodeMirror; if (env.hasCodeMirror) { if (env.isSupportAmd) { require(['codemirror'], function (cm) { CodeMirror = cm; }); } else { CodeMirror = window.CodeMirror; } } /** * @class Codeview */ var CodeView = /** @class */ (function () { function CodeView(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.options = context.options; } CodeView.prototype.sync = function () { var isCodeview = this.isActivated(); if (isCodeview && env.hasCodeMirror) { this.$codable.data('cmEditor').save(); } }; /** * @return {Boolean} */ CodeView.prototype.isActivated = function () { return this.$editor.hasClass('codeview'); }; /** * toggle codeview */ CodeView.prototype.toggle = function () { if (this.isActivated()) { this.deactivate(); } else { this.activate(); } this.context.triggerEvent('codeview.toggled'); }; /** * activate code view */ CodeView.prototype.activate = function () { var _this = this; this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml)); this.$codable.height(this.$editable.height()); this.context.invoke('toolbar.updateCodeview', true); this.$editor.addClass('codeview'); this.$codable.focus(); // activate CodeMirror as codable if (env.hasCodeMirror) { var cmEditor_1 = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror); // CodeMirror TernServer if (this.options.codemirror.tern) { var server_1 = new CodeMirror.TernServer(this.options.codemirror.tern); cmEditor_1.ternServer = server_1; cmEditor_1.on('cursorActivity', function (cm) { server_1.updateArgHints(cm); }); } cmEditor_1.on('blur', function (event) { _this.context.triggerEvent('blur.codeview', cmEditor_1.getValue(), event); }); // CodeMirror hasn't Padding. cmEditor_1.setSize(null, this.$editable.outerHeight()); this.$codable.data('cmEditor', cmEditor_1); } else { this.$codable.on('blur', function (event) { _this.context.triggerEvent('blur.codeview', _this.$codable.val(), event); }); } }; /** * deactivate code view */ CodeView.prototype.deactivate = function () { // deactivate CodeMirror as codable if (env.hasCodeMirror) { var cmEditor = this.$codable.data('cmEditor'); this.$codable.val(cmEditor.getValue()); cmEditor.toTextArea(); } var value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara; var isChange = this.$editable.html() !== value; this.$editable.html(value); this.$editable.height(this.options.height ? this.$codable.height() : 'auto'); this.$editor.removeClass('codeview'); if (isChange) { this.context.triggerEvent('change', this.$editable.html(), this.$editable); } this.$editable.focus(); this.context.invoke('toolbar.updateCodeview', false); }; CodeView.prototype.destroy = function () { if (this.isActivated()) { this.deactivate(); } }; return CodeView; }()); var EDITABLE_PADDING = 24; var Statusbar = /** @class */ (function () { function Statusbar(context) { this.$document = $$1(document); this.$statusbar = context.layoutInfo.statusbar; this.$editable = context.layoutInfo.editable; this.options = context.options; } Statusbar.prototype.initialize = function () { var _this = this; if (this.options.airMode || this.options.disableResizeEditor) { this.destroy(); return; } this.$statusbar.on('mousedown', function (event) { event.preventDefault(); event.stopPropagation(); var editableTop = _this.$editable.offset().top - _this.$document.scrollTop(); var onMouseMove = function (event) { var height = event.clientY - (editableTop + EDITABLE_PADDING); height = (_this.options.minheight > 0) ? Math.max(height, _this.options.minheight) : height; height = (_this.options.maxHeight > 0) ? Math.min(height, _this.options.maxHeight) : height; _this.$editable.height(height); }; _this.$document.on('mousemove', onMouseMove).one('mouseup', function () { _this.$document.off('mousemove', onMouseMove); }); }); }; Statusbar.prototype.destroy = function () { this.$statusbar.off(); this.$statusbar.addClass('locked'); }; return Statusbar; }()); var Fullscreen = /** @class */ (function () { function Fullscreen(context) { var _this = this; this.context = context; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.$window = $$1(window); this.$scrollbar = $$1('html, body'); this.onResize = function () { _this.resizeTo({ h: _this.$window.height() - _this.$toolbar.outerHeight() }); }; } Fullscreen.prototype.resizeTo = function (size) { this.$editable.css('height', size.h); this.$codable.css('height', size.h); if (this.$codable.data('cmeditor')) { this.$codable.data('cmeditor').setsize(null, size.h); } }; /** * toggle fullscreen */ Fullscreen.prototype.toggle = function () { this.$editor.toggleClass('fullscreen'); if (this.isFullscreen()) { this.$editable.data('orgHeight', this.$editable.css('height')); this.$window.on('resize', this.onResize).trigger('resize'); this.$scrollbar.css('overflow', 'hidden'); } else { this.$window.off('resize', this.onResize); this.resizeTo({ h: this.$editable.data('orgHeight') }); this.$scrollbar.css('overflow', 'visible'); } this.context.invoke('toolbar.updateFullscreen', this.isFullscreen()); }; Fullscreen.prototype.isFullscreen = function () { return this.$editor.hasClass('fullscreen'); }; return Fullscreen; }()); var Handle = /** @class */ (function () { function Handle(context) { var _this = this; this.context = context; this.$document = $$1(document); this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.lang = this.options.langInfo; this.events = { 'summernote.mousedown': function (we, e) { if (_this.update(e.target)) { e.preventDefault(); } }, 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': function () { _this.update(); }, 'summernote.disable': function () { _this.hide(); }, 'summernote.codeview.toggled': function () { _this.update(); } }; } Handle.prototype.initialize = function () { var _this = this; this.$handle = $$1([ '<div class="note-handle">', '<div class="note-control-selection">', '<div class="note-control-selection-bg"></div>', '<div class="note-control-holder note-control-nw"></div>', '<div class="note-control-holder note-control-ne"></div>', '<div class="note-control-holder note-control-sw"></div>', '<div class="', (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'), ' note-control-se"></div>', (this.options.disableResizeImage ? '' : '<div class="note-control-selection-info"></div>'), '</div>', '</div>' ].join('')).prependTo(this.$editingArea); this.$handle.on('mousedown', function (event) { if (dom.isControlSizing(event.target)) { event.preventDefault(); event.stopPropagation(); var $target_1 = _this.$handle.find('.note-control-selection').data('target'); var posStart_1 = $target_1.offset(); var scrollTop_1 = _this.$document.scrollTop(); var onMouseMove_1 = function (event) { _this.context.invoke('editor.resizeTo', { x: event.clientX - posStart_1.left, y: event.clientY - (posStart_1.top - scrollTop_1) }, $target_1, !event.shiftKey); _this.update($target_1[0]); }; _this.$document .on('mousemove', onMouseMove_1) .one('mouseup', function (e) { e.preventDefault(); _this.$document.off('mousemove', onMouseMove_1); _this.context.invoke('editor.afterCommand'); }); if (!$target_1.data('ratio')) { $target_1.data('ratio', $target_1.height() / $target_1.width()); } } }); // Listen for scrolling on the handle overlay. this.$handle.on('wheel', function (e) { e.preventDefault(); _this.update(); }); }; Handle.prototype.destroy = function () { this.$handle.remove(); }; Handle.prototype.update = function (target) { if (this.context.isDisabled()) { return false; } var isImage = dom.isImg(target); var $selection = this.$handle.find('.note-control-selection'); this.context.invoke('imagePopover.update', target); if (isImage) { var $image = $$1(target); var position = $image.position(); var pos = { left: position.left + parseInt($image.css('marginLeft'), 10), top: position.top + parseInt($image.css('marginTop'), 10) }; // exclude margin var imageSize = { w: $image.outerWidth(false), h: $image.outerHeight(false) }; $selection.css({ display: 'block', left: pos.left, top: pos.top, width: imageSize.w, height: imageSize.h }).data('target', $image); // save current image element. var origImageObj = new Image(); origImageObj.src = $image.attr('src'); var sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')'; $selection.find('.note-control-selection-info').text(sizingText); this.context.invoke('editor.saveTarget', target); } else { this.hide(); } return isImage; }; /** * hide * * @param {jQuery} $handle */ Handle.prototype.hide = function () { this.context.invoke('editor.clearTarget'); this.$handle.children().hide(); }; return Handle; }()); var defaultScheme = 'http://'; var linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; var AutoLink = /** @class */ (function () { function AutoLink(context) { var _this = this; this.context = context; this.events = { 'summernote.keyup': function (we, e) { if (!e.isDefaultPrevented()) { _this.handleKeyup(e); } }, 'summernote.keydown': function (we, e) { _this.handleKeydown(e); } }; } AutoLink.prototype.initialize = function () { this.lastWordRange = null; }; AutoLink.prototype.destroy = function () { this.lastWordRange = null; }; AutoLink.prototype.replace = function () { if (!this.lastWordRange) { return; } var keyword = this.lastWordRange.toString(); var match = keyword.match(linkPattern); if (match && (match[1] || match[2])) { var link = match[1] ? keyword : defaultScheme + keyword; var node = $$1('<a />').html(keyword).attr('href', link)[0]; this.lastWordRange.insertNode(node); this.lastWordRange = null; this.context.invoke('editor.focus'); } }; AutoLink.prototype.handleKeydown = function (e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { var wordRange = this.context.invoke('editor.createRange').getWordRange(); this.lastWordRange = wordRange; } }; AutoLink.prototype.handleKeyup = function (e) { if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { this.replace(); } }; return AutoLink; }()); /** * textarea auto sync. */ var AutoSync = /** @class */ (function () { function AutoSync(context) { var _this = this; this.$note = context.layoutInfo.note; this.events = { 'summernote.change': function () { _this.$note.val(context.invoke('code')); } }; } AutoSync.prototype.shouldInitialize = function () { return dom.isTextarea(this.$note[0]); }; return AutoSync; }()); var Placeholder = /** @class */ (function () { function Placeholder(context) { var _this = this; this.context = context; this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.events = { 'summernote.init summernote.change': function () { _this.update(); }, 'summernote.codeview.toggled': function () { _this.update(); } }; } Placeholder.prototype.shouldInitialize = function () { return !!this.options.placeholder; }; Placeholder.prototype.initialize = function () { var _this = this; this.$placeholder = $$1('<div class="note-placeholder">'); this.$placeholder.on('click', function () { _this.context.invoke('focus'); }).text(this.options.placeholder).prependTo(this.$editingArea); this.update(); }; Placeholder.prototype.destroy = function () { this.$placeholder.remove(); }; Placeholder.prototype.update = function () { var isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty'); this.$placeholder.toggle(isShow); }; return Placeholder; }()); var Buttons = /** @class */ (function () { function Buttons(context) { this.ui = $$1.summernote.ui; this.context = context; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.lang = this.options.langInfo; this.invertedKeyMap = func.invertObject(this.options.keyMap[env.isMac ? 'mac' : 'pc']); } Buttons.prototype.representShortcut = function (editorMethod) { var shortcut = this.invertedKeyMap[editorMethod]; if (!this.options.shortcuts || !shortcut) { return ''; } if (env.isMac) { shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); } shortcut = shortcut.replace('BACKSLASH', '\\') .replace('SLASH', '/') .replace('LEFTBRACKET', '[') .replace('RIGHTBRACKET', ']'); return ' (' + shortcut + ')'; }; Buttons.prototype.button = function (o) { if (!this.options.tooltip && o.tooltip) { delete o.tooltip; } o.container = this.options.container; return this.ui.button(o); }; Buttons.prototype.initialize = function () { this.addToolbarButtons(); this.addImagePopoverButtons(); this.addLinkPopoverButtons(); this.addTablePopoverButtons(); this.fontInstalledMap = {}; }; Buttons.prototype.destroy = function () { delete this.fontInstalledMap; }; Buttons.prototype.isFontInstalled = function (name) { if (!this.fontInstalledMap.hasOwnProperty(name)) { this.fontInstalledMap[name] = env.isFontInstalled(name) || lists.contains(this.options.fontNamesIgnoreCheck, name); } return this.fontInstalledMap[name]; }; Buttons.prototype.isFontDeservedToAdd = function (name) { var genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy']; name = name.toLowerCase(); return ((name !== '') && this.isFontInstalled(name) && ($$1.inArray(name, genericFamilies) === -1)); }; Buttons.prototype.addToolbarButtons = function () { var _this = this; this.context.memo('button.style', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.magic), _this.options), tooltip: _this.lang.style.style, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ className: 'dropdown-style', items: _this.options.styleTags, title: _this.lang.style.style, template: function (item) { if (typeof item === 'string') { item = { tag: item, title: (_this.lang.style.hasOwnProperty(item) ? _this.lang.style[item] : item) }; } var tag = item.tag; var title = item.title; var style = item.style ? ' style="' + item.style + '" ' : ''; var className = item.className ? ' class="' + item.className + '"' : ''; return '<' + tag + style + className + '>' + title + '</' + tag + '>'; }, click: _this.context.createInvokeHandler('editor.formatBlock') }) ]).render(); }); var _loop_1 = function (styleIdx, styleLen) { var item = this_1.options.styleTags[styleIdx]; this_1.context.memo('button.style.' + item, function () { return _this.button({ className: 'note-btn-style-' + item, contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>', tooltip: _this.lang.style[item], click: _this.context.createInvokeHandler('editor.formatBlock') }).render(); }); }; var this_1 = this; for (var styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) { _loop_1(styleIdx, styleLen); } this.context.memo('button.bold', function () { return _this.button({ className: 'note-btn-bold', contents: _this.ui.icon(_this.options.icons.bold), tooltip: _this.lang.font.bold + _this.representShortcut('bold'), click: _this.context.createInvokeHandlerAndUpdateState('editor.bold') }).render(); }); this.context.memo('button.italic', function () { return _this.button({ className: 'note-btn-italic', contents: _this.ui.icon(_this.options.icons.italic), tooltip: _this.lang.font.italic + _this.representShortcut('italic'), click: _this.context.createInvokeHandlerAndUpdateState('editor.italic') }).render(); }); this.context.memo('button.underline', function () { return _this.button({ className: 'note-btn-underline', contents: _this.ui.icon(_this.options.icons.underline), tooltip: _this.lang.font.underline + _this.representShortcut('underline'), click: _this.context.createInvokeHandlerAndUpdateState('editor.underline') }).render(); }); this.context.memo('button.clear', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.eraser), tooltip: _this.lang.font.clear + _this.representShortcut('removeFormat'), click: _this.context.createInvokeHandler('editor.removeFormat') }).render(); }); this.context.memo('button.strikethrough', function () { return _this.button({ className: 'note-btn-strikethrough', contents: _this.ui.icon(_this.options.icons.strikethrough), tooltip: _this.lang.font.strikethrough + _this.representShortcut('strikethrough'), click: _this.context.createInvokeHandlerAndUpdateState('editor.strikethrough') }).render(); }); this.context.memo('button.superscript', function () { return _this.button({ className: 'note-btn-superscript', contents: _this.ui.icon(_this.options.icons.superscript), tooltip: _this.lang.font.superscript, click: _this.context.createInvokeHandlerAndUpdateState('editor.superscript') }).render(); }); this.context.memo('button.subscript', function () { return _this.button({ className: 'note-btn-subscript', contents: _this.ui.icon(_this.options.icons.subscript), tooltip: _this.lang.font.subscript, click: _this.context.createInvokeHandlerAndUpdateState('editor.subscript') }).render(); }); this.context.memo('button.fontname', function () { var styleInfo = _this.context.invoke('editor.currentStyle'); // Add 'default' fonts into the fontnames array if not exist $$1.each(styleInfo['font-family'].split(','), function (idx, fontname) { fontname = fontname.trim().replace(/['"]+/g, ''); if (_this.isFontDeservedToAdd(fontname)) { if ($$1.inArray(fontname, _this.options.fontNames) === -1) { _this.options.fontNames.push(fontname); } } }); return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('<span class="note-current-fontname"/>', _this.options), tooltip: _this.lang.font.name, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ className: 'dropdown-fontname', checkClassName: _this.options.icons.menuCheck, items: _this.options.fontNames.filter(_this.isFontInstalled.bind(_this)), title: _this.lang.font.name, template: function (item) { return '<span style="font-family: \'' + item + '\'">' + item + '</span>'; }, click: _this.context.createInvokeHandlerAndUpdateState('editor.fontName') }) ]).render(); }); this.context.memo('button.fontsize', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>', _this.options), tooltip: _this.lang.font.size, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ className: 'dropdown-fontsize', checkClassName: _this.options.icons.menuCheck, items: _this.options.fontSizes, title: _this.lang.font.size, click: _this.context.createInvokeHandlerAndUpdateState('editor.fontSize') }) ]).render(); }); this.context.memo('button.color', function () { return _this.ui.buttonGroup({ className: 'note-color', children: [ _this.button({ className: 'note-current-color-button', contents: _this.ui.icon(_this.options.icons.font + ' note-recent-color'), tooltip: _this.lang.color.recent, click: function (e) { var $button = $$1(e.currentTarget); _this.context.invoke('editor.color', { backColor: $button.attr('data-backColor'), foreColor: $button.attr('data-foreColor') }); }, callback: function ($button) { var $recentColor = $button.find('.note-recent-color'); $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } }), _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents('', _this.options), tooltip: _this.lang.color.more, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ items: [ '<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>', '<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>' ].join(''), callback: function ($dropdown) { $dropdown.find('.note-holder').each(function (idx, item) { var $holder = $$1(item); $holder.append(_this.ui.palette({ colors: _this.options.colors, colorsName: _this.options.colorsName, eventName: $holder.data('event'), container: _this.options.container, tooltip: _this.options.tooltip }).render()); }); }, click: function (event) { var $button = $$1(event.target); var eventName = $button.data('event'); var value = $button.data('value'); if (eventName && value) { var key = eventName === 'backColor' ? 'background-color' : 'color'; var $color = $button.closest('.note-color').find('.note-recent-color'); var $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); _this.context.invoke('editor.' + eventName, value); } } }) ] }).render(); }); this.context.memo('button.ul', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.unorderedlist), tooltip: _this.lang.lists.unordered + _this.representShortcut('insertUnorderedList'), click: _this.context.createInvokeHandler('editor.insertUnorderedList') }).render(); }); this.context.memo('button.ol', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.orderedlist), tooltip: _this.lang.lists.ordered + _this.representShortcut('insertOrderedList'), click: _this.context.createInvokeHandler('editor.insertOrderedList') }).render(); }); var justifyLeft = this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'), click: this.context.createInvokeHandler('editor.justifyLeft') }); var justifyCenter = this.button({ contents: this.ui.icon(this.options.icons.alignCenter), tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'), click: this.context.createInvokeHandler('editor.justifyCenter') }); var justifyRight = this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'), click: this.context.createInvokeHandler('editor.justifyRight') }); var justifyFull = this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'), click: this.context.createInvokeHandler('editor.justifyFull') }); var outdent = this.button({ contents: this.ui.icon(this.options.icons.outdent), tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'), click: this.context.createInvokeHandler('editor.outdent') }); var indent = this.button({ contents: this.ui.icon(this.options.icons.indent), tooltip: this.lang.paragraph.indent + this.representShortcut('indent'), click: this.context.createInvokeHandler('editor.indent') }); this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); this.context.memo('button.outdent', func.invoke(outdent, 'render')); this.context.memo('button.indent', func.invoke(indent, 'render')); this.context.memo('button.paragraph', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.alignLeft), _this.options), tooltip: _this.lang.paragraph.paragraph, data: { toggle: 'dropdown' } }), _this.ui.dropdown([ _this.ui.buttonGroup({ className: 'note-align', children: [justifyLeft, justifyCenter, justifyRight, justifyFull] }), _this.ui.buttonGroup({ className: 'note-list', children: [outdent, indent] }) ]) ]).render(); }); this.context.memo('button.height', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.textHeight), _this.options), tooltip: _this.lang.font.height, data: { toggle: 'dropdown' } }), _this.ui.dropdownCheck({ items: _this.options.lineHeights, checkClassName: _this.options.icons.menuCheck, className: 'dropdown-line-height', title: _this.lang.font.height, click: _this.context.createInvokeHandler('editor.lineHeight') }) ]).render(); }); this.context.memo('button.table', function () { return _this.ui.buttonGroup([ _this.button({ className: 'dropdown-toggle', contents: _this.ui.dropdownButtonContents(_this.ui.icon(_this.options.icons.table), _this.options), tooltip: _this.lang.table.table, data: { toggle: 'dropdown' } }), _this.ui.dropdown({ title: _this.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 ($node) { var $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: _this.options.insertTableMaxSize.col + 'em', height: _this.options.insertTableMaxSize.row + 'em' }).mousedown(_this.context.createInvokeHandler('editor.insertTable')) .on('mousemove', _this.tableMoveHandler.bind(_this)); } }).render(); }); this.context.memo('button.link', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.link), tooltip: _this.lang.link.link + _this.representShortcut('linkDialog.show'), click: _this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.picture', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.picture), tooltip: _this.lang.image.image, click: _this.context.createInvokeHandler('imageDialog.show') }).render(); }); this.context.memo('button.video', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.video), tooltip: _this.lang.video.video, click: _this.context.createInvokeHandler('videoDialog.show') }).render(); }); this.context.memo('button.hr', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.minus), tooltip: _this.lang.hr.insert + _this.representShortcut('insertHorizontalRule'), click: _this.context.createInvokeHandler('editor.insertHorizontalRule') }).render(); }); this.context.memo('button.fullscreen', function () { return _this.button({ className: 'btn-fullscreen', contents: _this.ui.icon(_this.options.icons.arrowsAlt), tooltip: _this.lang.options.fullscreen, click: _this.context.createInvokeHandler('fullscreen.toggle') }).render(); }); this.context.memo('button.codeview', function () { return _this.button({ className: 'btn-codeview', contents: _this.ui.icon(_this.options.icons.code), tooltip: _this.lang.options.codeview, click: _this.context.createInvokeHandler('codeview.toggle') }).render(); }); this.context.memo('button.redo', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.redo), tooltip: _this.lang.history.redo + _this.representShortcut('redo'), click: _this.context.createInvokeHandler('editor.redo') }).render(); }); this.context.memo('button.undo', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.undo), tooltip: _this.lang.history.undo + _this.representShortcut('undo'), click: _this.context.createInvokeHandler('editor.undo') }).render(); }); this.context.memo('button.help', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.question), tooltip: _this.lang.options.help, click: _this.context.createInvokeHandler('helpDialog.show') }).render(); }); }; /** * image : [ * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], * ['remove', ['removeMedia']] * ], */ Buttons.prototype.addImagePopoverButtons = function () { var _this = this; // Image Size Buttons this.context.memo('button.imageSize100', function () { return _this.button({ contents: '<span class="note-fontsize-10">100%</span>', tooltip: _this.lang.image.resizeFull, click: _this.context.createInvokeHandler('editor.resize', '1') }).render(); }); this.context.memo('button.imageSize50', function () { return _this.button({ contents: '<span class="note-fontsize-10">50%</span>', tooltip: _this.lang.image.resizeHalf, click: _this.context.createInvokeHandler('editor.resize', '0.5') }).render(); }); this.context.memo('button.imageSize25', function () { return _this.button({ contents: '<span class="note-fontsize-10">25%</span>', tooltip: _this.lang.image.resizeQuarter, click: _this.context.createInvokeHandler('editor.resize', '0.25') }).render(); }); // Float Buttons this.context.memo('button.floatLeft', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignLeft), tooltip: _this.lang.image.floatLeft, click: _this.context.createInvokeHandler('editor.floatMe', 'left') }).render(); }); this.context.memo('button.floatRight', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignRight), tooltip: _this.lang.image.floatRight, click: _this.context.createInvokeHandler('editor.floatMe', 'right') }).render(); }); this.context.memo('button.floatNone', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.alignJustify), tooltip: _this.lang.image.floatNone, click: _this.context.createInvokeHandler('editor.floatMe', 'none') }).render(); }); // Remove Buttons this.context.memo('button.removeMedia', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.trash), tooltip: _this.lang.image.remove, click: _this.context.createInvokeHandler('editor.removeMedia') }).render(); }); }; Buttons.prototype.addLinkPopoverButtons = function () { var _this = this; this.context.memo('button.linkDialogShow', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.link), tooltip: _this.lang.link.edit, click: _this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.unlink', function () { return _this.button({ contents: _this.ui.icon(_this.options.icons.unlink), tooltip: _this.lang.link.unlink, click: _this.context.createInvokeHandler('editor.unlink') }).render(); }); }; /** * table : [ * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] * ], */ Buttons.prototype.addTablePopoverButtons = function () { var _this = this; this.context.memo('button.addRowUp', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowAbove), tooltip: _this.lang.table.addRowAbove, click: _this.context.createInvokeHandler('editor.addRow', 'top') }).render(); }); this.context.memo('button.addRowDown', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowBelow), tooltip: _this.lang.table.addRowBelow, click: _this.context.createInvokeHandler('editor.addRow', 'bottom') }).render(); }); this.context.memo('button.addColLeft', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colBefore), tooltip: _this.lang.table.addColLeft, click: _this.context.createInvokeHandler('editor.addCol', 'left') }).render(); }); this.context.memo('button.addColRight', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colAfter), tooltip: _this.lang.table.addColRight, click: _this.context.createInvokeHandler('editor.addCol', 'right') }).render(); }); this.context.memo('button.deleteRow', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.rowRemove), tooltip: _this.lang.table.delRow, click: _this.context.createInvokeHandler('editor.deleteRow') }).render(); }); this.context.memo('button.deleteCol', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.colRemove), tooltip: _this.lang.table.delCol, click: _this.context.createInvokeHandler('editor.deleteCol') }).render(); }); this.context.memo('button.deleteTable', function () { return _this.button({ className: 'btn-md', contents: _this.ui.icon(_this.options.icons.trash), tooltip: _this.lang.table.delTable, click: _this.context.createInvokeHandler('editor.deleteTable') }).render(); }); }; Buttons.prototype.build = function ($container, groups) { for (var groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { var group = groups[groupIdx]; var groupName = $$1.isArray(group) ? group[0] : group; var buttons = $$1.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group]; var $group = this.ui.buttonGroup({ className: 'note-' + groupName }).render(); for (var idx = 0, len = buttons.length; idx < len; idx++) { var btn = this.context.memo('button.' + buttons[idx]); if (btn) { $group.append(typeof btn === 'function' ? btn(this.context) : btn); } } $group.appendTo($container); } }; /** * @param {jQuery} [$container] */ Buttons.prototype.updateCurrentStyle = function ($container) { var _this = this; var $cont = $container || this.$toolbar; var styleInfo = this.context.invoke('editor.currentStyle'); this.updateBtnStates($cont, { '.note-btn-bold': function () { return styleInfo['font-bold'] === 'bold'; }, '.note-btn-italic': function () { return styleInfo['font-italic'] === 'italic'; }, '.note-btn-underline': function () { return styleInfo['font-underline'] === 'underline'; }, '.note-btn-subscript': function () { return styleInfo['font-subscript'] === 'subscript'; }, '.note-btn-superscript': function () { return styleInfo['font-superscript'] === 'superscript'; }, '.note-btn-strikethrough': function () { return styleInfo['font-strikethrough'] === 'strikethrough'; } }); if (styleInfo['font-family']) { var fontNames = styleInfo['font-family'].split(',').map(function (name) { return name.replace(/[\'\"]/g, '') .replace(/\s+$/, '') .replace(/^\s+/, ''); }); var fontName_1 = lists.find(fontNames, this.isFontInstalled.bind(this)); $cont.find('.dropdown-fontname a').each(function (idx, item) { var $item = $$1(item); // always compare string to avoid creating another func. var isChecked = ($item.data('value') + '') === (fontName_1 + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontname').text(fontName_1).css('font-family', fontName_1); } if (styleInfo['font-size']) { var fontSize_1 = styleInfo['font-size']; $cont.find('.dropdown-fontsize a').each(function (idx, item) { var $item = $$1(item); // always compare with string to avoid creating another func. var isChecked = ($item.data('value') + '') === (fontSize_1 + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontsize').text(fontSize_1); } if (styleInfo['line-height']) { var lineHeight_1 = styleInfo['line-height']; $cont.find('.dropdown-line-height li a').each(function (idx, item) { // always compare with string to avoid creating another func. var isChecked = ($$1(item).data('value') + '') === (lineHeight_1 + ''); _this.className = isChecked ? 'checked' : ''; }); } }; Buttons.prototype.updateBtnStates = function ($container, infos) { var _this = this; $$1.each(infos, function (selector, pred) { _this.ui.toggleBtnActive($container.find(selector), pred()); }); }; Buttons.prototype.tableMoveHandler = function (event) { var PX_PER_EM = 18; var $picker = $$1(event.target.parentNode); // target is mousecatcher var $dimensionDisplay = $picker.next(); var $catcher = $picker.find('.note-dimension-picker-mousecatcher'); var $highlighted = $picker.find('.note-dimension-picker-highlighted'); var $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted'); var posOffset; // HTML5 with jQuery - e.offsetX is undefined in Firefox if (event.offsetX === undefined) { var posCatcher = $$1(event.target).offset(); posOffset = { x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { posOffset = { x: event.offsetX, y: event.offsetY }; } var dim = { c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' }); $catcher.data('value', dim.c + 'x' + dim.r); if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) { $unhighlighted.css({ width: dim.c + 1 + 'em' }); } if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) { $unhighlighted.css({ height: dim.r + 1 + 'em' }); } $dimensionDisplay.html(dim.c + ' x ' + dim.r); }; return Buttons; }()); var Toolbar = /** @class */ (function () { function Toolbar(context) { this.context = context; this.$window = $$1(window); this.$document = $$1(document); this.ui = $$1.summernote.ui; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.followScroll = this.followScroll.bind(this); } Toolbar.prototype.shouldInitialize = function () { return !this.options.airMode; }; Toolbar.prototype.initialize = function () { var _this = this; this.options.toolbar = this.options.toolbar || []; if (!this.options.toolbar.length) { this.$toolbar.hide(); } else { this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar); } if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } this.changeContainer(false); this.$note.on('summernote.keyup summernote.mouseup summernote.change', function () { _this.context.invoke('buttons.updateCurrentStyle'); }); this.context.invoke('buttons.updateCurrentStyle'); if (this.options.followingToolbar) { this.$window.on('scroll resize', this.followScroll); } }; Toolbar.prototype.destroy = function () { this.$toolbar.children().remove(); if (this.options.followingToolbar) { this.$window.off('scroll resize', this.followScroll); } }; Toolbar.prototype.followScroll = function () { if (this.$editor.hasClass('fullscreen')) { return false; } var $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper'); var editorHeight = this.$editor.outerHeight(); var editorWidth = this.$editor.width(); var toolbarHeight = this.$toolbar.height(); $toolbarWrapper.css({ height: toolbarHeight }); // check if the web app is currently using another static bar var otherBarHeight = 0; if (this.options.otherStaticBar) { otherBarHeight = $$1(this.options.otherStaticBar).outerHeight(); } var currentOffset = this.$document.scrollTop(); var editorOffsetTop = this.$editor.offset().top; var editorOffsetBottom = editorOffsetTop + editorHeight; var activateOffset = editorOffsetTop - otherBarHeight; var deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight; if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) { this.$toolbar.css({ position: 'fixed', top: otherBarHeight, width: editorWidth }); } else { this.$toolbar.css({ position: 'relative', top: 0, width: '100%' }); } }; Toolbar.prototype.changeContainer = function (isFullscreen) { if (isFullscreen) { this.$toolbar.prependTo(this.$editor); } else { if (this.options.toolbarContainer) { this.$toolbar.appendTo(this.options.toolbarContainer); } } }; Toolbar.prototype.updateFullscreen = function (isFullscreen) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen); this.changeContainer(isFullscreen); }; Toolbar.prototype.updateCodeview = function (isCodeview) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview); if (isCodeview) { this.deactivate(); } else { this.activate(); } }; Toolbar.prototype.activate = function (isIncludeCodeview) { var $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, true); }; Toolbar.prototype.deactivate = function (isIncludeCodeview) { var $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, false); }; return Toolbar; }()); var LinkDialog = /** @class */ (function () { function LinkDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']); } LinkDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<div class="form-group note-form-group">', "<label class=\"note-form-label\">" + this.lang.link.textToDisplay + "</label>", '<input class="note-link-text form-control note-form-control note-input" type="text" />', '</div>', '<div class="form-group note-form-group">', "<label class=\"note-form-label\">" + this.lang.link.url + "</label>", '<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />', '</div>', !this.options.disableLinkTarget ? $$1('<div/>').append(this.ui.checkbox({ id: 'sn-checkbox-open-in-new-window', text: this.lang.link.openInNewWindow, checked: true }).render()).html() : '' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.link.insert + "</button>"; this.$dialog = this.ui.dialog({ className: 'link-dialog', title: this.lang.link.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; LinkDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; LinkDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; /** * toggle update button */ LinkDialog.prototype.toggleLinkBtn = function ($linkBtn, $linkText, $linkUrl) { this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val()); }; /** * Show link dialog and set event handlers on dialog controls. * * @param {Object} linkInfo * @return {Promise} */ LinkDialog.prototype.showLinkDialog = function (linkInfo) { var _this = this; return $$1.Deferred(function (deferred) { var $linkText = _this.$dialog.find('.note-link-text'); var $linkUrl = _this.$dialog.find('.note-link-url'); var $linkBtn = _this.$dialog.find('.note-link-btn'); var $openInNewWindow = _this.$dialog.find('input[type=checkbox]'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); // if no url was given, copy text to url if (!linkInfo.url) { linkInfo.url = linkInfo.text; } $linkText.val(linkInfo.text); var handleLinkTextUpdate = function () { _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // if linktext was modified by keyup, // stop cloning text from linkUrl linkInfo.text = $linkText.val(); }; $linkText.on('input', handleLinkTextUpdate).on('paste', function () { setTimeout(handleLinkTextUpdate, 0); }); var handleLinkUrlUpdate = function () { _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); // display same link on `Text to display` input // when create a new link if (!linkInfo.text) { $linkText.val($linkUrl.val()); } }; $linkUrl.on('input', handleLinkUrlUpdate).on('paste', function () { setTimeout(handleLinkUrlUpdate, 0); }).val(linkInfo.url); if (!env.isSupportTouch) { $linkUrl.trigger('focus'); } _this.toggleLinkBtn($linkBtn, $linkText, $linkUrl); _this.bindEnterKey($linkUrl, $linkBtn); _this.bindEnterKey($linkText, $linkBtn); var isChecked = linkInfo.isNewWindow !== undefined ? linkInfo.isNewWindow : _this.context.options.linkTargetBlank; $openInNewWindow.prop('checked', isChecked); $linkBtn.one('click', function (event) { event.preventDefault(); deferred.resolve({ range: linkInfo.range, url: $linkUrl.val(), text: $linkText.val(), isNewWindow: $openInNewWindow.is(':checked') }); _this.ui.hideDialog(_this.$dialog); }); }); _this.ui.onDialogHidden(_this.$dialog, function () { // detach events $linkText.off('input paste keypress'); $linkUrl.off('input paste keypress'); $linkBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }).promise(); }; /** * @param {Object} layoutInfo */ LinkDialog.prototype.show = function () { var _this = this; var linkInfo = this.context.invoke('editor.getLinkInfo'); this.context.invoke('editor.saveRange'); this.showLinkDialog(linkInfo).then(function (linkInfo) { _this.context.invoke('editor.restoreRange'); _this.context.invoke('editor.createLink', linkInfo); }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; return LinkDialog; }()); var LinkPopover = /** @class */ (function () { function LinkPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function () { _this.update(); }, 'summernote.disable summernote.dialog.shown': function () { _this.hide(); } }; } LinkPopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.link); }; LinkPopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-link-popover', callback: function ($node) { var $content = $node.find('.popover-content,.note-popover-content'); $content.prepend('<span><a target="_blank"></a> </span>'); } }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.link); }; LinkPopover.prototype.destroy = function () { this.$popover.remove(); }; LinkPopover.prototype.update = function () { // Prevent focusing on editable when invoke('code') is executed if (!this.context.invoke('editor.hasFocus')) { this.hide(); return; } var rng = this.context.invoke('editor.createRange'); if (rng.isCollapsed() && rng.isOnAnchor()) { var anchor = dom.ancestor(rng.sc, dom.isAnchor); var href = $$1(anchor).attr('href'); this.$popover.find('a').attr('href', href).html(href); var pos = dom.posFromPlaceholder(anchor); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } }; LinkPopover.prototype.hide = function () { this.$popover.hide(); }; return LinkPopover; }()); var ImageDialog = /** @class */ (function () { function ImageDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } ImageDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var imageLimitation = ''; if (this.options.maximumImageFileSize) { var unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024)); var readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 + ' ' + ' KMGTP'[unit] + 'B'; imageLimitation = "<small>" + (this.lang.image.maximumFileSize + ' : ' + readableSize) + "</small>"; } var body = [ '<div class="form-group note-form-group note-group-select-from-files">', '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', '<input class="note-image-input note-form-control note-input" ', ' type="file" name="files" accept="image/*" multiple="multiple" />', imageLimitation, '</div>', '<div class="form-group note-group-image-url" style="overflow:auto;">', '<label class="note-form-label">' + this.lang.image.url + '</label>', '<input class="note-image-url form-control note-form-control note-input ', ' col-md-12" type="text" />', '</div>' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.image.insert + "</button>"; this.$dialog = this.ui.dialog({ title: this.lang.image.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; ImageDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; ImageDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; ImageDialog.prototype.show = function () { var _this = this; this.context.invoke('editor.saveRange'); this.showImageDialog().then(function (data) { // [workaround] hide dialog before restore range for IE range focus _this.ui.hideDialog(_this.$dialog); _this.context.invoke('editor.restoreRange'); if (typeof data === 'string') { _this.context.invoke('editor.insertImage', data); } else { _this.context.invoke('editor.insertImagesOrCallback', data); } }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ ImageDialog.prototype.showImageDialog = function () { var _this = this; return $$1.Deferred(function (deferred) { var $imageInput = _this.$dialog.find('.note-image-input'); var $imageUrl = _this.$dialog.find('.note-image-url'); var $imageBtn = _this.$dialog.find('.note-image-btn'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); // Cloning imageInput to clear element. $imageInput.replaceWith($imageInput.clone().on('change', function (event) { deferred.resolve(event.target.files || event.target.value); }).val('')); $imageBtn.click(function (event) { event.preventDefault(); deferred.resolve($imageUrl.val()); }); $imageUrl.on('keyup paste', function () { var url = $imageUrl.val(); _this.ui.toggleBtn($imageBtn, url); }).val(''); if (!env.isSupportTouch) { $imageUrl.trigger('focus'); } _this.bindEnterKey($imageUrl, $imageBtn); }); _this.ui.onDialogHidden(_this.$dialog, function () { $imageInput.off('change'); $imageUrl.off('keyup paste keypress'); $imageBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }); }; return ImageDialog; }()); /** * Image popover module * mouse events that show/hide popover will be handled by Handle.js. * Handle.js will receive the events and invoke 'imagePopover.update'. */ var ImagePopover = /** @class */ (function () { function ImagePopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.editable = context.layoutInfo.editable[0]; this.options = context.options; this.events = { 'summernote.disable': function () { _this.hide(); } }; } ImagePopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.image); }; ImagePopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-image-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.image); }; ImagePopover.prototype.destroy = function () { this.$popover.remove(); }; ImagePopover.prototype.update = function (target) { if (dom.isImg(target)) { var pos = dom.posFromPlaceholder(target); var posEditor = dom.posFromPlaceholder(this.editable); this.$popover.css({ display: 'block', left: this.options.popatmouse ? event.pageX - 20 : pos.left, top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top) }); } else { this.hide(); } }; ImagePopover.prototype.hide = function () { this.$popover.hide(); }; return ImagePopover; }()); var TablePopover = /** @class */ (function () { function TablePopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.mousedown': function (we, e) { _this.update(e.target); }, 'summernote.keyup summernote.scroll summernote.change': function () { _this.update(); }, 'summernote.disable': function () { _this.hide(); } }; } TablePopover.prototype.shouldInitialize = function () { return !lists.isEmpty(this.options.popover.table); }; TablePopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-table-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor if (env.isFF) { document.execCommand('enableInlineTableEditing', false, false); } }; TablePopover.prototype.destroy = function () { this.$popover.remove(); }; TablePopover.prototype.update = function (target) { if (this.context.isDisabled()) { return false; } var isCell = dom.isCell(target); if (isCell) { var pos = dom.posFromPlaceholder(target); this.$popover.css({ display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } return isCell; }; TablePopover.prototype.hide = function () { this.$popover.hide(); }; return TablePopover; }()); var VideoDialog = /** @class */ (function () { function VideoDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } VideoDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<div class="form-group note-form-group row-fluid">', "<label class=\"note-form-label\">" + this.lang.video.url + " <small class=\"text-muted\">" + this.lang.video.providers + "</small></label>", '<input class="note-video-url form-control note-form-control note-input" type="text" />', '</div>' ].join(''); var buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn'; var footer = "<button type=\"submit\" href=\"#\" class=\"" + buttonClass + "\" disabled>" + this.lang.video.insert + "</button>"; this.$dialog = this.ui.dialog({ title: this.lang.video.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); }; VideoDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; VideoDialog.prototype.bindEnterKey = function ($input, $btn) { $input.on('keypress', function (event) { if (event.keyCode === key.code.ENTER) { event.preventDefault(); $btn.trigger('click'); } }); }; VideoDialog.prototype.createVideoNode = function (url) { // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) var ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; var ytMatch = url.match(ytRegExp); var igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; var igMatch = url.match(igRegExp); var vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; var vMatch = url.match(vRegExp); var vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/; var vimMatch = url.match(vimRegExp); var dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; var dmMatch = url.match(dmRegExp); var youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; var youkuMatch = url.match(youkuRegExp); var qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/; var qqMatch = url.match(qqRegExp); var qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/; var qqMatch2 = url.match(qqRegExp2); var mp4RegExp = /^.+.(mp4|m4v)$/; var mp4Match = url.match(mp4RegExp); var oggRegExp = /^.+.(ogg|ogv)$/; var oggMatch = url.match(oggRegExp); var webmRegExp = /^.+.(webm)$/; var webmMatch = url.match(webmRegExp); var $video; if (ytMatch && ytMatch[1].length === 11) { var youtubeId = ytMatch[1]; $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', '//www.youtube.com/embed/' + youtubeId) .attr('width', '640').attr('height', '360'); } else if (igMatch && igMatch[0].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') .attr('width', '612').attr('height', '710') .attr('scrolling', 'no') .attr('allowtransparency', 'true'); } else if (vMatch && vMatch[0].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', vMatch[0] + '/embed/simple') .attr('width', '600').attr('height', '600') .attr('class', 'vine-embed'); } else if (vimMatch && vimMatch[3].length) { $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) .attr('width', '640').attr('height', '360'); } else if (dmMatch && dmMatch[2].length) { $video = $$1('<iframe>') .attr('frameborder', 0) .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) .attr('width', '640').attr('height', '360'); } else if (youkuMatch && youkuMatch[1].length) { $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '498') .attr('width', '510') .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) { var vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]); $video = $$1('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '310') .attr('width', '500') .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0'); } else if (mp4Match || oggMatch || webmMatch) { $video = $$1('<video controls>') .attr('src', url) .attr('width', '640').attr('height', '360'); } else { // this is not a known video link. Now what, Cat? Now what? return false; } $video.addClass('note-video-clip'); return $video[0]; }; VideoDialog.prototype.show = function () { var _this = this; var text = this.context.invoke('editor.getSelectedText'); this.context.invoke('editor.saveRange'); this.showVideoDialog(text).then(function (url) { // [workaround] hide dialog before restore range for IE range focus _this.ui.hideDialog(_this.$dialog); _this.context.invoke('editor.restoreRange'); // build node var $node = _this.createVideoNode(url); if ($node) { // insert video node _this.context.invoke('editor.insertNode', $node); } }).fail(function () { _this.context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ VideoDialog.prototype.showVideoDialog = function (text) { var _this = this; return $$1.Deferred(function (deferred) { var $videoUrl = _this.$dialog.find('.note-video-url'); var $videoBtn = _this.$dialog.find('.note-video-btn'); _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); $videoUrl.val(text).on('input', function () { _this.ui.toggleBtn($videoBtn, $videoUrl.val()); }); if (!env.isSupportTouch) { $videoUrl.trigger('focus'); } $videoBtn.click(function (event) { event.preventDefault(); deferred.resolve($videoUrl.val()); }); _this.bindEnterKey($videoUrl, $videoBtn); }); _this.ui.onDialogHidden(_this.$dialog, function () { $videoUrl.off('input'); $videoBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); _this.ui.showDialog(_this.$dialog); }); }; return VideoDialog; }()); var HelpDialog = /** @class */ (function () { function HelpDialog(context) { this.context = context; this.ui = $$1.summernote.ui; this.$body = $$1(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } HelpDialog.prototype.initialize = function () { var $container = this.options.dialogsInBody ? this.$body : this.$editor; var body = [ '<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</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: body, callback: function ($node) { $node.find('.modal-body,.note-modal-body').css({ 'max-height': 300, 'overflow': 'scroll' }); } }).render().appendTo($container); }; HelpDialog.prototype.destroy = function () { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); }; HelpDialog.prototype.createShortcutList = function () { var _this = this; var keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc']; return Object.keys(keyMap).map(function (key) { var command = keyMap[key]; var $row = $$1('<div><div class="help-list-item"/></div>'); $row.append($$1('<label><kbd>' + key + '</kdb></label>').css({ 'width': 180, 'margin-right': 10 })).append($$1('<span/>').html(_this.context.memo('help.' + command) || command)); return $row.html(); }).join(''); }; /** * show help dialog * * @return {Promise} */ HelpDialog.prototype.showHelpDialog = function () { var _this = this; return $$1.Deferred(function (deferred) { _this.ui.onDialogShown(_this.$dialog, function () { _this.context.triggerEvent('dialog.shown'); deferred.resolve(); }); _this.ui.showDialog(_this.$dialog); }).promise(); }; HelpDialog.prototype.show = function () { var _this = this; this.context.invoke('editor.saveRange'); this.showHelpDialog().then(function () { _this.context.invoke('editor.restoreRange'); }); }; return HelpDialog; }()); var AIR_MODE_POPOVER_X_OFFSET = 20; var AirPopover = /** @class */ (function () { function AirPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.scroll': function () { _this.update(); }, 'summernote.disable summernote.change summernote.dialog.shown': function () { _this.hide(); }, 'summernote.focusout': function (we, e) { // [workaround] Firefox doesn't support relatedTarget on focusout // - Ignore hide action on focus out in FF. if (env.isFF) { return; } if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(_this.$popover[0]))) { _this.hide(); } } }; } AirPopover.prototype.shouldInitialize = function () { return this.options.airMode && !lists.isEmpty(this.options.popover.air); }; AirPopover.prototype.initialize = function () { this.$popover = this.ui.popover({ className: 'note-air-popover' }).render().appendTo(this.options.container); var $content = this.$popover.find('.popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.air); }; AirPopover.prototype.destroy = function () { this.$popover.remove(); }; AirPopover.prototype.update = function () { var styleInfo = this.context.invoke('editor.currentStyle'); if (styleInfo.range && !styleInfo.range.isCollapsed()) { var rect = lists.last(styleInfo.range.getClientRects()); if (rect) { var bnd = func.rect2bnd(rect); this.$popover.css({ display: 'block', left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, top: bnd.top + bnd.height }); this.context.invoke('buttons.updateCurrentStyle', this.$popover); } } else { this.hide(); } }; AirPopover.prototype.hide = function () { this.$popover.hide(); }; return AirPopover; }()); var POPOVER_DIST = 5; var HintPopover = /** @class */ (function () { function HintPopover(context) { var _this = this; this.context = context; this.ui = $$1.summernote.ui; this.$editable = context.layoutInfo.editable; this.options = context.options; this.hint = this.options.hint || []; this.direction = this.options.hintDirection || 'bottom'; this.hints = $$1.isArray(this.hint) ? this.hint : [this.hint]; this.events = { 'summernote.keyup': function (we, e) { if (!e.isDefaultPrevented()) { _this.handleKeyup(e); } }, 'summernote.keydown': function (we, e) { _this.handleKeydown(e); }, 'summernote.disable summernote.dialog.shown': function () { _this.hide(); } }; } HintPopover.prototype.shouldInitialize = function () { return this.hints.length > 0; }; HintPopover.prototype.initialize = function () { var _this = this; this.lastWordRange = null; this.$popover = this.ui.popover({ className: 'note-hint-popover', hideArrow: true, direction: '' }).render().appendTo(this.options.container); this.$popover.hide(); this.$content = this.$popover.find('.popover-content,.note-popover-content'); this.$content.on('click', '.note-hint-item', function () { _this.$content.find('.active').removeClass('active'); $$1(_this).addClass('active'); _this.replace(); }); }; HintPopover.prototype.destroy = function () { this.$popover.remove(); }; HintPopover.prototype.selectItem = function ($item) { this.$content.find('.active').removeClass('active'); $item.addClass('active'); this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2); }; HintPopover.prototype.moveDown = function () { var $current = this.$content.find('.note-hint-item.active'); var $next = $current.next(); if ($next.length) { this.selectItem($next); } else { var $nextGroup = $current.parent().next(); if (!$nextGroup.length) { $nextGroup = this.$content.find('.note-hint-group').first(); } this.selectItem($nextGroup.find('.note-hint-item').first()); } }; HintPopover.prototype.moveUp = function () { var $current = this.$content.find('.note-hint-item.active'); var $prev = $current.prev(); if ($prev.length) { this.selectItem($prev); } else { var $prevGroup = $current.parent().prev(); if (!$prevGroup.length) { $prevGroup = this.$content.find('.note-hint-group').last(); } this.selectItem($prevGroup.find('.note-hint-item').last()); } }; HintPopover.prototype.replace = function () { var $item = this.$content.find('.note-hint-item.active'); if ($item.length) { var node = this.nodeFromItem($item); // XXX: consider to move codes to editor for recording redo/undo. this.lastWordRange.insertNode(node); range.createFromNode(node).collapse().select(); this.lastWordRange = null; this.hide(); this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]); this.context.invoke('editor.focus'); } }; HintPopover.prototype.nodeFromItem = function ($item) { var hint = this.hints[$item.data('index')]; var item = $item.data('item'); var node = hint.content ? hint.content(item) : item; if (typeof node === 'string') { node = dom.createText(node); } return node; }; HintPopover.prototype.createItemTemplates = function (hintIdx, items) { var hint = this.hints[hintIdx]; return items.map(function (item, idx) { var $item = $$1('<div class="note-hint-item"/>'); $item.append(hint.template ? hint.template(item) : item + ''); $item.data({ 'index': hintIdx, 'item': item }); return $item; }); }; HintPopover.prototype.handleKeydown = function (e) { if (!this.$popover.is(':visible')) { return; } if (e.keyCode === key.code.ENTER) { e.preventDefault(); this.replace(); } else if (e.keyCode === key.code.UP) { e.preventDefault(); this.moveUp(); } else if (e.keyCode === key.code.DOWN) { e.preventDefault(); this.moveDown(); } }; HintPopover.prototype.searchKeyword = function (index, keyword, callback) { var hint = this.hints[index]; if (hint && hint.match.test(keyword) && hint.search) { var matches = hint.match.exec(keyword); hint.search(matches[1], callback); } else { callback(); } }; HintPopover.prototype.createGroup = function (idx, keyword) { var _this = this; var $group = $$1('<div class="note-hint-group note-hint-group-' + idx + '"/>'); this.searchKeyword(idx, keyword, function (items) { items = items || []; if (items.length) { $group.html(_this.createItemTemplates(idx, items)); _this.show(); } }); return $group; }; HintPopover.prototype.handleKeyup = function (e) { var _this = this; if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) { var wordRange = this.context.invoke('editor.createRange').getWordRange(); var keyword_1 = wordRange.toString(); if (this.hints.length && keyword_1) { this.$content.empty(); var bnd = func.rect2bnd(lists.last(wordRange.getClientRects())); if (bnd) { this.$popover.hide(); this.lastWordRange = wordRange; this.hints.forEach(function (hint, idx) { if (hint.match.test(keyword_1)) { _this.createGroup(idx, keyword_1).appendTo(_this.$content); } }); // select first .note-hint-item this.$content.find('.note-hint-item:first').addClass('active'); // set position for popover after group is created if (this.direction === 'top') { this.$popover.css({ left: bnd.left, top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST }); } else { this.$popover.css({ left: bnd.left, top: bnd.top + bnd.height + POPOVER_DIST }); } } } else { this.hide(); } } }; HintPopover.prototype.show = function () { this.$popover.show(); }; HintPopover.prototype.hide = function () { this.$popover.hide(); }; return HintPopover; }()); var Context = /** @class */ (function () { /** * @param {jQuery} $note * @param {Object} options */ function Context($note, options) { this.ui = $$1.summernote.ui; this.$note = $note; this.memos = {}; this.modules = {}; this.layoutInfo = {}; this.options = options; this.initialize(); } /** * create layout and initialize modules and other resources */ Context.prototype.initialize = function () { this.layoutInfo = this.ui.createLayout(this.$note, this.options); this._initialize(); this.$note.hide(); return this; }; /** * destroy modules and other resources and remove layout */ Context.prototype.destroy = function () { this._destroy(); this.$note.removeData('summernote'); this.ui.removeLayout(this.$note, this.layoutInfo); }; /** * destory modules and other resources and initialize it again */ Context.prototype.reset = function () { var disabled = this.isDisabled(); this.code(dom.emptyPara); this._destroy(); this._initialize(); if (disabled) { this.disable(); } }; Context.prototype._initialize = function () { var _this = this; // add optional buttons var buttons = $$1.extend({}, this.options.buttons); Object.keys(buttons).forEach(function (key) { _this.memo('button.' + key, buttons[key]); }); var modules = $$1.extend({}, this.options.modules, $$1.summernote.plugins || {}); // add and initialize modules Object.keys(modules).forEach(function (key) { _this.module(key, modules[key], true); }); Object.keys(this.modules).forEach(function (key) { _this.initializeModule(key); }); }; Context.prototype._destroy = function () { var _this = this; // destroy modules with reversed order Object.keys(this.modules).reverse().forEach(function (key) { _this.removeModule(key); }); Object.keys(this.memos).forEach(function (key) { _this.removeMemo(key); }); // trigger custom onDestroy callback this.triggerEvent('destroy', this); }; Context.prototype.code = function (html) { var isActivated = this.invoke('codeview.isActivated'); if (html === undefined) { this.invoke('codeview.sync'); return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html(); } else { if (isActivated) { this.layoutInfo.codable.val(html); } else { this.layoutInfo.editable.html(html); } this.$note.val(html); this.triggerEvent('change', html); } }; Context.prototype.isDisabled = function () { return this.layoutInfo.editable.attr('contenteditable') === 'false'; }; Context.prototype.enable = function () { this.layoutInfo.editable.attr('contenteditable', true); this.invoke('toolbar.activate', true); this.triggerEvent('disable', false); }; Context.prototype.disable = function () { // close codeview if codeview is opend if (this.invoke('codeview.isActivated')) { this.invoke('codeview.deactivate'); } this.layoutInfo.editable.attr('contenteditable', false); this.invoke('toolbar.deactivate', true); this.triggerEvent('disable', true); }; Context.prototype.triggerEvent = function () { var namespace = lists.head(arguments); var args = lists.tail(lists.from(arguments)); var callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; if (callback) { callback.apply(this.$note[0], args); } this.$note.trigger('summernote.' + namespace, args); }; Context.prototype.initializeModule = function (key) { var module = this.modules[key]; module.shouldInitialize = module.shouldInitialize || func.ok; if (!module.shouldInitialize()) { return; } // initialize module if (module.initialize) { module.initialize(); } // attach events if (module.events) { dom.attachEvents(this.$note, module.events); } }; Context.prototype.module = function (key, ModuleClass, withoutIntialize) { if (arguments.length === 1) { return this.modules[key]; } this.modules[key] = new ModuleClass(this); if (!withoutIntialize) { this.initializeModule(key); } }; Context.prototype.removeModule = function (key) { var module = this.modules[key]; if (module.shouldInitialize()) { if (module.events) { dom.detachEvents(this.$note, module.events); } if (module.destroy) { module.destroy(); } } delete this.modules[key]; }; Context.prototype.memo = function (key, obj) { if (arguments.length === 1) { return this.memos[key]; } this.memos[key] = obj; }; Context.prototype.removeMemo = function (key) { if (this.memos[key] && this.memos[key].destroy) { this.memos[key].destroy(); } delete this.memos[key]; }; /** * Some buttons need to change their visual style immediately once they get pressed */ Context.prototype.createInvokeHandlerAndUpdateState = function (namespace, value) { var _this = this; return function (event) { _this.createInvokeHandler(namespace, value)(event); _this.invoke('buttons.updateCurrentStyle'); }; }; Context.prototype.createInvokeHandler = function (namespace, value) { var _this = this; return function (event) { event.preventDefault(); var $target = $$1(event.target); _this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target); }; }; Context.prototype.invoke = function () { var namespace = lists.head(arguments); var args = lists.tail(lists.from(arguments)); var splits = namespace.split('.'); var hasSeparator = splits.length > 1; var moduleName = hasSeparator && lists.head(splits); var methodName = hasSeparator ? lists.last(splits) : lists.head(splits); var module = this.modules[moduleName || 'editor']; if (!moduleName && this[methodName]) { return this[methodName].apply(this, args); } else if (module && module[methodName] && module.shouldInitialize()) { return module[methodName].apply(module, args); } }; return Context; }()); $$1.fn.extend({ /** * Summernote API * * @param {Object|String} * @return {this} */ summernote: function () { var type = $$1.type(lists.head(arguments)); var isExternalAPICalled = type === 'string'; var hasInitOptions = type === 'object'; var options = $$1.extend({}, $$1.summernote.options, hasInitOptions ? lists.head(arguments) : {}); // Update options options.langInfo = $$1.extend(true, {}, $$1.summernote.lang['en-US'], $$1.summernote.lang[options.lang]); options.icons = $$1.extend(true, {}, $$1.summernote.options.icons, options.icons); options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip; this.each(function (idx, note) { var $note = $$1(note); if (!$note.data('summernote')) { var context = new Context($note, options); $note.data('summernote', context); $note.data('summernote').triggerEvent('init', context.layoutInfo); } }); var $note = this.first(); if ($note.length) { var context = $note.data('summernote'); if (isExternalAPICalled) { return context.invoke.apply(context, lists.from(arguments)); } else if (options.focus) { context.invoke('editor.focus'); } } return this; } }); $$1.summernote = $$1.extend($$1.summernote, { version: '0.8.10', ui: ui, dom: dom, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': CodeView, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, linkTargetBlank: true, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); }))); //# sourceMappingURL=summernote.js.map PKf[�\�~�EEdist/summernote-bs4.cssnu�[���@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("./font/summernote.eot?dbafe969167589eda84514394d126413");src:url("./font/summernote.eot?#iefix") format("embedded-opentype"),url("./font/summernote.woff?dbafe969167589eda84514394d126413") format("woff"),url("./font/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:"\f101"}.note-icon-align-indent:before{content:"\f102"}.note-icon-align-justify:before{content:"\f103"}.note-icon-align-left:before{content:"\f104"}.note-icon-align-outdent:before{content:"\f105"}.note-icon-align-right:before{content:"\f106"}.note-icon-align:before{content:"\f107"}.note-icon-arrow-circle-down:before{content:"\f108"}.note-icon-arrow-circle-left:before{content:"\f109"}.note-icon-arrow-circle-right:before{content:"\f10a"}.note-icon-arrow-circle-up:before{content:"\f10b"}.note-icon-arrows-alt:before{content:"\f10c"}.note-icon-arrows-h:before{content:"\f10d"}.note-icon-arrows-v:before{content:"\f10e"}.note-icon-bold:before{content:"\f10f"}.note-icon-caret:before{content:"\f110"}.note-icon-chain-broken:before{content:"\f111"}.note-icon-circle:before{content:"\f112"}.note-icon-close:before{content:"\f113"}.note-icon-code:before{content:"\f114"}.note-icon-col-after:before{content:"\f115"}.note-icon-col-before:before{content:"\f116"}.note-icon-col-remove:before{content:"\f117"}.note-icon-eraser:before{content:"\f118"}.note-icon-font:before{content:"\f119"}.note-icon-frame:before{content:"\f11a"}.note-icon-italic:before{content:"\f11b"}.note-icon-link:before{content:"\f11c"}.note-icon-magic:before{content:"\f11d"}.note-icon-menu-check:before{content:"\f11e"}.note-icon-minus:before{content:"\f11f"}.note-icon-orderedlist:before{content:"\f120"}.note-icon-pencil:before{content:"\f121"}.note-icon-picture:before{content:"\f122"}.note-icon-question:before{content:"\f123"}.note-icon-redo:before{content:"\f124"}.note-icon-row-above:before{content:"\f125"}.note-icon-row-below:before{content:"\f126"}.note-icon-row-remove:before{content:"\f127"}.note-icon-special-character:before{content:"\f128"}.note-icon-square:before{content:"\f129"}.note-icon-strikethrough:before{content:"\f12a"}.note-icon-subscript:before{content:"\f12b"}.note-icon-summernote:before{content:"\f12c"}.note-icon-superscript:before{content:"\f12d"}.note-icon-table:before{content:"\f12e"}.note-icon-text-height:before{content:"\f12f"}.note-icon-trash:before{content:"\f130"}.note-icon-underline:before{content:"\f131"}.note-icon-undo:before{content:"\f132"}.note-icon-unorderedlist:before{content:"\f133"}.note-icon-video:before{content:"\f134"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area img.note-float-left{margin-right:10px}.note-editor .note-editing-area img.note-float-right{margin-left:10px}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right{float:right!important}.note-editor.note-frame .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert{padding:7px 10px 2px 10px;margin:-7px 0 0 0;color:#000;background-color:#f5f5f5;border-radius:0}.note-editor.note-frame .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success{color:#3c763d!important;background-color:#dff0d8!important}.note-editor.note-frame .note-status-output .alert-info{color:#31708f!important;background-color:#d9edf7!important}.note-editor.note-frame .note-status-output .alert-warning{color:#8a6d3b!important;background-color:#fcf8e3!important}.note-editor.note-frame .note-status-output .alert-danger{color:#a94442!important;background-color:#f2dede!important}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{display:none;max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-toolbar{position:relative;z-index:500}.note-popover .popover-content,.card-header.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.card-header.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.card-header.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.card-header.note-toolbar .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.card-header.note-toolbar .note-style .dropdown-style pre{padding:5px 10px;margin:0}.note-popover .popover-content .note-style .dropdown-style h1,.card-header.note-toolbar .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.card-header.note-toolbar .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.card-header.note-toolbar .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.card-header.note-toolbar .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.card-header.note-toolbar .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.card-header.note-toolbar .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.card-header.note-toolbar .note-style .dropdown-style p{padding:0;margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.card-header.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.card-header.note-toolbar .note-color .dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-menu .note-palette,.card-header.note-toolbar .note-color .dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .popover-content .note-color .dropdown-menu .note-palette:first-child,.card-header.note-toolbar .note-color .dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-palette-title,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-row,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset:hover,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.card-header.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.card-header.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.card-header.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.card-header.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.card-header.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.card-header.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check a i,.card-header.note-toolbar .dropdown-menu.note-check a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check a.checked i,.card-header.note-toolbar .dropdown-menu.note-check a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.card-header.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.card-header.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.card-header.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.card-header.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:black;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:white;border:1px solid black}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}PKf[�\�xf�W�W�dist/summernote.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e(t.jQuery)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e=function(){function e(t,e,o,n){this.markup=t,this.children=e,this.options=o,this.callback=n}return e.prototype.render=function(e){var o=t(this.markup);if(this.options&&this.options.contents&&o.html(this.options.contents),this.options&&this.options.className&&o.addClass(this.options.className),this.options&&this.options.data&&t.each(this.options.data,function(t,e){o.attr("data-"+t,e)}),this.options&&this.options.click&&o.on("click",this.options.click),this.children){var n=o.find(".note-children-container");this.children.forEach(function(t){t.render(n.length?n:o)})}return this.callback&&this.callback(o,this.options),this.options&&this.options.callback&&this.options.callback(o),e&&e.append(o),o},e}(),o=function(o,n){return function(){var i="object"==typeof arguments[1]?arguments[1]:arguments[0],r=t.isArray(arguments[0])?arguments[0]:[];return i&&i.children&&(r=i.children),new e(o,r,i,n)}},n=o('<div class="note-editor note-frame panel"/>'),i=o('<div class="note-toolbar-wrapper panel-default"><div class="note-toolbar panel-heading" role="toolbar"></div></div>'),r=o('<div class="note-editing-area"/>'),s=o('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'),a=o('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'),l=o(['<output class="note-status-output" aria-live="polite"/>','<div class="note-statusbar" role="status">',' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>',' <div class="note-icon-bar"/>'," </div>","</div>"].join("")),c=o('<div class="note-editor"/>'),d=o([' <output class="note-status-output" aria-live="polite"/>','<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'].join("")),u=o('<div class="note-btn-group btn-group">'),h=o('<ul class="dropdown-menu" role="list">',function(e,o){var n=t.isArray(o.items)?o.items.map(function(t){var e="string"==typeof t?t:t.value||"",n=o.template?o.template(t):t,i="object"==typeof t?t.option:void 0;return'<li role="listitem" aria-label="'+t+'"><a href="#" '+('data-value="'+e+'"'+(void 0!==i?' data-option="'+i+'"':""))+">"+n+"</a></li>"}).join(""):o.items;e.html(n).attr({"aria-label":o.title})}),p=o('<ul class="dropdown-menu note-check" role="list">',function(e,o){var n=t.isArray(o.items)?o.items.map(function(t){var e="string"==typeof t?t:t.value||"",n=o.template?o.template(t):t;return'<li role="listitem" aria-label="'+t+'"><a href="#" data-value="'+e+'">'+b(o.checkClassName)+" "+n+"</a></li>"}).join(""):o.items;e.html(n).attr({"aria-label":o.title})}),f=o('<div class="note-color-palette"/>',function(t,e){for(var o=[],n=0,i=e.colors.length;n<i;n++){for(var r=e.eventName,s=e.colors[n],a=e.colorsName[n],l=[],c=0,d=s.length;c<d;c++){var u=s[c],h=a[c];l.push(['<button type="button" class="note-color-btn"','style="background-color:',u,'" ','data-event="',r,'" ','data-value="',u,'" ','title="',h,'" ','aria-label="',h,'" ','data-toggle="button" tabindex="-1"></button>'].join(""))}o.push('<div class="note-color-row">'+l.join("")+"</div>")}t.html(o.join("")),e.tooltip&&t.find(".note-color-btn").tooltip({container:e.container,trigger:"hover",placement:"bottom"})}),m=o('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>',function(t,e){e.fade&&t.addClass("fade"),t.attr({"aria-label":e.title}),t.html(['<div class="modal-dialog">',' <div class="modal-content">',e.title?' <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">×</button> <h4 class="modal-title">'+e.title+"</h4> </div>":"",' <div class="modal-body">'+e.body+"</div>",e.footer?' <div class="modal-footer">'+e.footer+"</div>":""," </div>","</div>"].join(""))}),g=o(['<div class="note-popover popover in">',' <div class="arrow"/>',' <div class="popover-content note-children-container"/>',"</div>"].join(""),function(t,e){var o=void 0!==e.direction?e.direction:"bottom";t.addClass(o),e.hideArrow&&t.find(".arrow").hide()}),v=o('<div class="checkbox"></div>',function(t,e){t.html([" <label"+(e.id?' for="'+e.id+'"':"")+">",' <input role="checkbox" type="checkbox"'+(e.id?' id="'+e.id+'"':""),e.checked?" checked":"",' aria-checked="'+(e.checked?"true":"false")+'"/>',e.text?e.text:"","</label>"].join(""))}),b=function(t,e){return"<"+(e=e||"i")+' class="'+t+'"/>'},y={editor:n,toolbar:i,editingArea:r,codable:s,editable:a,statusbar:l,airEditor:c,airEditable:d,buttonGroup:u,dropdown:h,dropdownButtonContents:function(t,e){return t+" "+b(e.icons.caret,"span")},dropdownCheck:p,palette:f,dialog:m,popover:g,checkbox:v,icon:b,options:{},button:function(t,e){return o('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">',function(t,e){e&&e.tooltip&&t.attr({title:e.tooltip,"aria-label":e.tooltip}).tooltip({container:e.container,trigger:"hover",placement:"bottom"})})(t,e)},toggleBtn:function(t,e){t.toggleClass("disabled",!e),t.attr("disabled",!e)},toggleBtnActive:function(t,e){t.toggleClass("active",e)},onDialogShown:function(t,e){t.one("shown.bs.modal",e)},onDialogHidden:function(t,e){t.one("hidden.bs.modal",e)},showDialog:function(t){t.modal("show")},hideDialog:function(t){t.modal("hide")},createLayout:function(t,e){var o=(e.airMode?y.airEditor([y.editingArea([y.airEditable()])]):y.editor([y.toolbar(),y.editingArea([y.codable(),y.editable()]),y.statusbar()])).render();return o.insertAfter(t),{note:t,editor:o,toolbar:o.find(".note-toolbar"),editingArea:o.find(".note-editing-area"),editable:o.find(".note-editable"),codable:o.find(".note-codable"),statusbar:o.find(".note-statusbar")}},removeLayout:function(t,e){t.html(e.editable.html()),e.editor.remove(),t.show()}};var k=0;var C={eq:function(t){return function(e){return t===e}},eq2:function(t,e){return t===e},peq2:function(t){return function(e,o){return e[t]===o[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(o){return t(o)&&e(o)}},invoke:function(t,e){return function(){return t[e].apply(t,arguments)}},uniqueId:function(t){var e=++k+"";return t?t+e:e},rect2bnd:function(t){var e=$(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 o in t)t.hasOwnProperty(o)&&(e[t[o]]=o);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,o){var n,i=this;return function(){var r=i,s=arguments,a=o&&!n;clearTimeout(n),n=setTimeout(function(){n=null,o||t.apply(r,s)},e),a&&t.apply(r,s)}}};function w(t){return t[0]}function x(t){return t[t.length-1]}function S(t){return t.slice(1)}function T(e,o){return t.inArray(o,e)}function I(t,e){return-1!==T(t,e)}var N={head:w,last:x,initial:function(t){return t.slice(0,t.length-1)},tail:S,prev:function(t,e){var o=T(t,e);return-1===o?null:t[o-1]},next:function(t,e){var o=T(t,e);return-1===o?null:t[o+1]},find:function(t,e){for(var o=0,n=t.length;o<n;o++){var i=t[o];if(e(i))return i}},contains:I,all:function(t,e){for(var o=0,n=t.length;o<n;o++)if(!e(t[o]))return!1;return!0},sum:function(t,e){return e=e||C.self,t.reduce(function(t,o){return t+e(o)},0)},from:function(t){for(var e=[],o=t.length,n=-1;++n<o;)e[n]=t[n];return e},isEmpty:function(t){return!t||!t.length},clusterBy:function(t,e){return t.length?S(t).reduce(function(t,o){var n=x(t);return e(x(n),o)?n[n.length]=o:t[t.length]=[o],t},[[w(t)]]):[]},compact:function(t){for(var e=[],o=0,n=t.length;o<n;o++)t[o]&&e.push(t[o]);return e},unique:function(t){for(var e=[],o=0,n=t.length;o<n;o++)I(e,t[o])||e.push(t[o]);return e}},E="function"==typeof define&&define.amd;var A,R=navigator.userAgent,P=/MSIE|Trident/i.test(R);if(P){var L=/MSIE (\d+[.]\d+)/.exec(R);L&&(A=parseFloat(L[1])),(L=/Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(R))&&(A=parseFloat(L[1]))}var H=/Edge\/\d+/.test(R),D=!!window.CodeMirror;if(!D&&E)if("function"==typeof __webpack_require__)try{require.resolve("codemirror"),D=!0}catch(t){}else if("undefined"!=typeof require)if(void 0!==require.resolve)try{require.resolve("codemirror"),D=!0}catch(t){}else void 0!==require.specified&&(D=require.specified("codemirror"));var F="ontouchstart"in window||navigator.MaxTouchPoints>0||navigator.msMaxTouchPoints>0,B=P||H?"DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted":"input",z={isMac:navigator.appVersion.indexOf("Mac")>-1,isMSIE:P,isEdge:H,isFF:!H&&/firefox/i.test(R),isPhantom:/PhantomJS/i.test(R),isWebkit:!H&&/webkit/i.test(R),isChrome:!H&&/chrome/i.test(R),isSafari:!H&&/safari/i.test(R),browserVersion:A,jqueryVersion:parseFloat(t.fn.jquery),isSupportAmd:E,isSupportTouch:F,hasCodeMirror:D,isFontInstalled:function(e){var o="Comic Sans MS"===e?"Courier New":"Comic Sans MS",n=t("<div>").css({position:"absolute",left:"-9999px",top:"-9999px",fontSize:"200px"}).text("mmmmmmmmmwwwwwww").appendTo(document.body),i=n.css("fontFamily",o).width(),r=n.css("fontFamily",e+","+o).width();return n.remove(),i!==r},isW3CRangeSupport:!!document.createRange,inputEventName:B},M=String.fromCharCode(160);function O(e){return e&&t(e).hasClass("note-editable")}function U(t){return t=t.toUpperCase(),function(e){return e&&e.nodeName.toUpperCase()===t}}function j(t){return t&&3===t.nodeType}function q(t){return t&&/^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(t.nodeName.toUpperCase())}function K(t){return!O(t)&&(t&&/^DIV|^P|^LI|^H[1-7]/.test(t.nodeName.toUpperCase()))}var V=U("PRE"),W=U("LI");var G=U("TABLE"),_=U("DATA");function Z(t){return!(tt(t)||Y(t)||Q(t)||K(t)||G(t)||X(t)||_(t))}function Y(t){return t&&/^UL|^OL/.test(t.nodeName.toUpperCase())}var Q=U("HR");function J(t){return t&&/^TD|^TH/.test(t.nodeName.toUpperCase())}var X=U("BLOCKQUOTE");function tt(t){return J(t)||X(t)||O(t)}var et=U("A");var ot=U("BODY");var nt=z.isMSIE&&z.browserVersion<11?" ":"<br>";function it(t){return j(t)?t.nodeValue.length:t?t.childNodes.length:0}function rt(t){var e=it(t);return 0===e||(!j(t)&&1===e&&t.innerHTML===nt||!(!N.all(t.childNodes,j)||""!==t.innerHTML))}function st(t){q(t)||it(t)||(t.innerHTML=nt)}function at(t,e){for(;t;){if(e(t))return t;if(O(t))break;t=t.parentNode}return null}function lt(t,e){e=e||C.fail;var o=[];return at(t,function(t){return O(t)||o.push(t),e(t)}),o}function ct(t,e){e=e||C.fail;for(var o=[];t&&!e(t);)o.push(t),t=t.nextSibling;return o}function dt(t,e){var o=e.nextSibling,n=e.parentNode;return o?n.insertBefore(t,o):n.appendChild(t),t}function ut(e,o){return t.each(o,function(t,o){e.appendChild(o)}),e}function ht(t){return 0===t.offset}function pt(t){return t.offset===it(t.node)}function ft(t){return ht(t)||pt(t)}function mt(t,e){for(;t&&t!==e;){if(0!==vt(t))return!1;t=t.parentNode}return!0}function gt(t,e){if(!e)return!1;for(;t&&t!==e;){if(vt(t)!==it(t.parentNode)-1)return!1;t=t.parentNode}return!0}function vt(t){for(var e=0;t=t.previousSibling;)e+=1;return e}function bt(t){return!!(t&&t.childNodes&&t.childNodes.length)}function yt(t,e){var o,n;if(0===t.offset){if(O(t.node))return null;o=t.node.parentNode,n=vt(t.node)}else bt(t.node)?n=it(o=t.node.childNodes[t.offset-1]):(o=t.node,n=e?0:t.offset-1);return{node:o,offset:n}}function kt(t,e){var o,n;if(it(t.node)===t.offset){if(O(t.node))return null;o=t.node.parentNode,n=vt(t.node)+1}else bt(t.node)?(o=t.node.childNodes[t.offset],n=0):(o=t.node,n=e?it(t.node):t.offset+1);return{node:o,offset:n}}function Ct(t,e){return t.node===e.node&&t.offset===e.offset}function wt(t,e){var o=e&&e.isSkipPaddingBlankHTML,n=e&&e.isNotSplitEdgePoint;if(ft(t)&&(j(t.node)||n)){if(ht(t))return t.node;if(pt(t))return t.node.nextSibling}if(j(t.node))return t.node.splitText(t.offset);var i=t.node.childNodes[t.offset],r=dt(t.node.cloneNode(!1),t.node);return ut(r,ct(i)),o||(st(t.node),st(r)),r}function xt(t,e,o){var n=lt(e.node,C.eq(t));return n.length?1===n.length?wt(e,o):n.reduce(function(t,n){return t===e.node&&(t=wt(e,o)),wt({node:n,offset:t?vt(t):it(n)},o)}):null}function St(t){return document.createElement(t)}function Tt(t,e){if(t&&t.parentNode){if(t.removeNode)return t.removeNode(e);var o=t.parentNode;if(!e){for(var n=[],i=0,r=t.childNodes.length;i<r;i++)n.push(t.childNodes[i]);for(i=0,r=n.length;i<r;i++)o.insertBefore(n[i],t)}o.removeChild(t)}}var It=U("TEXTAREA");function $t(t,e){var o=It(t[0])?t.val():t.html();return e?o.replace(/[\n\r]/g,""):o}var Nt={NBSP_CHAR:M,ZERO_WIDTH_NBSP_CHAR:"\ufeff",blank:nt,emptyPara:"<p>"+nt+"</p>",makePredByNodeName:U,isEditable:O,isControlSizing:function(e){return e&&t(e).hasClass("note-control-sizing")},isText:j,isElement:function(t){return t&&1===t.nodeType},isVoid:q,isPara:K,isPurePara:function(t){return K(t)&&!W(t)},isHeading:function(t){return t&&/^H[1-7]/.test(t.nodeName.toUpperCase())},isInline:Z,isBlock:C.not(Z),isBodyInline:function(t){return Z(t)&&!at(t,K)},isBody:ot,isParaInline:function(t){return Z(t)&&!!at(t,K)},isPre:V,isList:Y,isTable:G,isData:_,isCell:J,isBlockquote:X,isBodyContainer:tt,isAnchor:et,isDiv:U("DIV"),isLi:W,isBR:U("BR"),isSpan:U("SPAN"),isB:U("B"),isU:U("U"),isS:U("S"),isI:U("I"),isImg:U("IMG"),isTextarea:It,isEmpty:rt,isEmptyAnchor:C.and(et,rt),isClosestSibling:function(t,e){return t.nextSibling===e||t.previousSibling===e},withClosestSiblings:function(t,e){e=e||C.ok;var o=[];return t.previousSibling&&e(t.previousSibling)&&o.push(t.previousSibling),o.push(t),t.nextSibling&&e(t.nextSibling)&&o.push(t.nextSibling),o},nodeLength:it,isLeftEdgePoint:ht,isRightEdgePoint:pt,isEdgePoint:ft,isLeftEdgeOf:mt,isRightEdgeOf:gt,isLeftEdgePointOf:function(t,e){return ht(t)&&mt(t.node,e)},isRightEdgePointOf:function(t,e){return pt(t)&>(t.node,e)},prevPoint:yt,nextPoint:kt,isSamePoint:Ct,isVisiblePoint:function(t){if(j(t.node)||!bt(t.node)||rt(t.node))return!0;var e=t.node.childNodes[t.offset-1],o=t.node.childNodes[t.offset];return!(e&&!q(e)||o&&!q(o))},prevPointUntil:function(t,e){for(;t;){if(e(t))return t;t=yt(t)}return null},nextPointUntil:function(t,e){for(;t;){if(e(t))return t;t=kt(t)}return null},isCharPoint:function(t){if(!j(t.node))return!1;var e=t.node.nodeValue.charAt(t.offset-1);return e&&" "!==e&&e!==M},walkPoint:function(t,e,o,n){for(var i=t;i&&(o(i),!Ct(i,e));)i=kt(i,n&&t.node!==i.node&&e.node!==i.node)},ancestor:at,singleChildAncestor:function(t,e){for(t=t.parentNode;t&&1===it(t);){if(e(t))return t;if(O(t))break;t=t.parentNode}return null},listAncestor:lt,lastAncestor:function(t,e){var o=lt(t);return N.last(o.filter(e))},listNext:ct,listPrev:function(t,e){e=e||C.fail;for(var o=[];t&&!e(t);)o.push(t),t=t.previousSibling;return o},listDescendant:function(t,e){var o=[];return e=e||C.ok,function n(i){t!==i&&e(i)&&o.push(i);for(var r=0,s=i.childNodes.length;r<s;r++)n(i.childNodes[r])}(t),o},commonAncestor:function(e,o){for(var n=lt(e),i=o;i;i=i.parentNode)if(t.inArray(i,n)>-1)return i;return null},wrap:function(e,o){var n=e.parentNode,i=t("<"+o+">")[0];return n.insertBefore(i,e),i.appendChild(e),i},insertAfter:dt,appendChildNodes:ut,position:vt,hasChildren:bt,makeOffsetPath:function(t,e){return lt(e,C.eq(t)).map(vt).reverse()},fromOffsetPath:function(t,e){for(var o=t,n=0,i=e.length;n<i;n++)o=o.childNodes.length<=e[n]?o.childNodes[o.childNodes.length-1]:o.childNodes[e[n]];return o},splitTree:xt,splitPoint:function(t,e){var o,n,i=e?K:tt,r=lt(t.node,i),s=N.last(r)||t.node;i(s)?(o=r[r.length-2],n=s):n=(o=s).parentNode;var a=o&&xt(o,t,{isSkipPaddingBlankHTML:e,isNotSplitEdgePoint:e});return a||n!==t.node||(a=t.node.childNodes[t.offset]),{rightNode:a,container:n}},create:St,createText:function(t){return document.createTextNode(t)},remove:Tt,removeWhile:function(t,e){for(;t&&!O(t)&&e(t);){var o=t.parentNode;Tt(t),t=o}},replace:function(t,e){if(t.nodeName.toUpperCase()===e.toUpperCase())return t;var o=St(e);return t.style.cssText&&(o.style.cssText=t.style.cssText),ut(o,N.from(t.childNodes)),dt(o,t),Tt(t),o},html:function(e,o){var n=$t(e);o&&(n=n.replace(/<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g,function(t,e,o){o=o.toUpperCase();var n=/^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(o)&&!!e,i=/^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(o);return t+(n||i?"\n":"")}),n=t.trim(n));return n},value:$t,posFromPlaceholder:function(e){var o=t(e),n=o.offset(),i=o.outerHeight(!0);return{left:n.left,top:n.top+i}},attachEvents:function(t,e){Object.keys(e).forEach(function(o){t.on(o,e[o])})},detachEvents:function(t,e){Object.keys(e).forEach(function(o){t.off(o,e[o])})},isCustomStyleTag:function(t){return t&&!j(t)&&N.contains(t.classList,"note-styletag")}};t.summernote=t.summernote||{lang:{}},t.extend(t.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"},image:{image:"Picture",insert:"Insert Image",resizeFull:"Resize Full",resizeHalf:"Resize Half",resizeQuarter:"Resize Quarter",floatLeft:"Float Left",floatRight:"Float Right",floatNone:"Float None",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"},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:"Foreground Color",transparent:"Transparent",setTransparent:"Set transparent",reset:"Reset",resetToDefault:"Reset to default"},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"}}});var Et={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},At={isEdit:function(t){return N.contains([Et.BACKSPACE,Et.TAB,Et.ENTER,Et.SPACE,Et.DELETE],t)},isMove:function(t){return N.contains([Et.LEFT,Et.UP,Et.RIGHT,Et.DOWN],t)},nameFromCode:C.invertObject(Et),code:Et};function Rt(t,e){var o,n,i=t.parentElement(),r=document.body.createTextRange(),s=N.from(i.childNodes);for(o=0;o<s.length;o++)if(!Nt.isText(s[o])){if(r.moveToElementText(s[o]),r.compareEndPoints("StartToStart",t)>=0)break;n=s[o]}if(0!==o&&Nt.isText(s[o-1])){var a=document.body.createTextRange(),l=null;a.moveToElementText(n||i),a.collapse(!n),l=n?n.nextSibling:i.firstChild;var c=t.duplicate();c.setEndPoint("StartToStart",a);for(var d=c.text.replace(/[\r\n]/g,"").length;d>l.nodeValue.length&&l.nextSibling;)d-=l.nodeValue.length,l=l.nextSibling;l.nodeValue;e&&l.nextSibling&&Nt.isText(l.nextSibling)&&d===l.nodeValue.length&&(d-=l.nodeValue.length,l=l.nextSibling),i=l,o=d}return{cont:i,offset:o}}function Pt(t){var e=function(t,o){var n,i;if(Nt.isText(t)){var r=Nt.listPrev(t,C.not(Nt.isText)),s=N.last(r).previousSibling;n=s||t.parentNode,o+=N.sum(N.tail(r),Nt.nodeLength),i=!s}else{if(n=t.childNodes[o]||t,Nt.isText(n))return e(n,0);o=0,i=!1}return{node:n,collapseToStart:i,offset:o}},o=document.body.createTextRange(),n=e(t.node,t.offset);return o.moveToElementText(n.node),o.collapse(n.collapseToStart),o.moveStart("character",n.offset),o}var Lt=function(){function e(t,e,o,n){this.sc=t,this.so=e,this.ec=o,this.eo=n,this.isOnEditable=this.makeIsOn(Nt.isEditable),this.isOnList=this.makeIsOn(Nt.isList),this.isOnAnchor=this.makeIsOn(Nt.isAnchor),this.isOnCell=this.makeIsOn(Nt.isCell),this.isOnData=this.makeIsOn(Nt.isData)}return e.prototype.nativeRange=function(){if(z.isW3CRangeSupport){var t=document.createRange();return t.setStart(this.sc,this.so),t.setEnd(this.ec,this.eo),t}var e=Pt({node:this.sc,offset:this.so});return e.setEndPoint("EndToEnd",Pt({node:this.ec,offset:this.eo})),e},e.prototype.getPoints=function(){return{sc:this.sc,so:this.so,ec:this.ec,eo:this.eo}},e.prototype.getStartPoint=function(){return{node:this.sc,offset:this.so}},e.prototype.getEndPoint=function(){return{node:this.ec,offset:this.eo}},e.prototype.select=function(){var t=this.nativeRange();if(z.isW3CRangeSupport){var e=document.getSelection();e.rangeCount>0&&e.removeAllRanges(),e.addRange(t)}else t.select();return this},e.prototype.scrollIntoView=function(e){var o=t(e).height();return e.scrollTop+o<this.sc.offsetTop&&(e.scrollTop+=Math.abs(e.scrollTop+o-this.sc.offsetTop)),this},e.prototype.normalize=function(){var t=function(t,e){if(Nt.isVisiblePoint(t)&&!Nt.isEdgePoint(t)||Nt.isVisiblePoint(t)&&Nt.isRightEdgePoint(t)&&!e||Nt.isVisiblePoint(t)&&Nt.isLeftEdgePoint(t)&&e||Nt.isVisiblePoint(t)&&Nt.isBlock(t.node)&&Nt.isEmpty(t.node))return t;var o=Nt.ancestor(t.node,Nt.isBlock);if((Nt.isLeftEdgePointOf(t,o)||Nt.isVoid(Nt.prevPoint(t).node))&&!e||(Nt.isRightEdgePointOf(t,o)||Nt.isVoid(Nt.nextPoint(t).node))&&e){if(Nt.isVisiblePoint(t))return t;e=!e}return(e?Nt.nextPointUntil(Nt.nextPoint(t),Nt.isVisiblePoint):Nt.prevPointUntil(Nt.prevPoint(t),Nt.isVisiblePoint))||t},o=t(this.getEndPoint(),!1),n=this.isCollapsed()?o:t(this.getStartPoint(),!0);return new e(n.node,n.offset,o.node,o.offset)},e.prototype.nodes=function(t,e){t=t||C.ok;var o=e&&e.includeAncestor,n=e&&e.fullyContains,i=this.getStartPoint(),r=this.getEndPoint(),s=[],a=[];return Nt.walkPoint(i,r,function(e){var i;Nt.isEditable(e.node)||(n?(Nt.isLeftEdgePoint(e)&&a.push(e.node),Nt.isRightEdgePoint(e)&&N.contains(a,e.node)&&(i=e.node)):i=o?Nt.ancestor(e.node,t):e.node,i&&t(i)&&s.push(i))},!0),N.unique(s)},e.prototype.commonAncestor=function(){return Nt.commonAncestor(this.sc,this.ec)},e.prototype.expand=function(t){var o=Nt.ancestor(this.sc,t),n=Nt.ancestor(this.ec,t);if(!o&&!n)return new e(this.sc,this.so,this.ec,this.eo);var i=this.getPoints();return o&&(i.sc=o,i.so=0),n&&(i.ec=n,i.eo=Nt.nodeLength(n)),new e(i.sc,i.so,i.ec,i.eo)},e.prototype.collapse=function(t){return t?new e(this.sc,this.so,this.sc,this.so):new e(this.ec,this.eo,this.ec,this.eo)},e.prototype.splitText=function(){var t=this.sc===this.ec,o=this.getPoints();return Nt.isText(this.ec)&&!Nt.isEdgePoint(this.getEndPoint())&&this.ec.splitText(this.eo),Nt.isText(this.sc)&&!Nt.isEdgePoint(this.getStartPoint())&&(o.sc=this.sc.splitText(this.so),o.so=0,t&&(o.ec=o.sc,o.eo=this.eo-this.so)),new e(o.sc,o.so,o.ec,o.eo)},e.prototype.deleteContents=function(){if(this.isCollapsed())return this;var o=this.splitText(),n=o.nodes(null,{fullyContains:!0}),i=Nt.prevPointUntil(o.getStartPoint(),function(t){return!N.contains(n,t.node)}),r=[];return t.each(n,function(t,e){var o=e.parentNode;i.node!==o&&1===Nt.nodeLength(o)&&r.push(o),Nt.remove(e,!1)}),t.each(r,function(t,e){Nt.remove(e,!1)}),new e(i.node,i.offset,i.node,i.offset).normalize()},e.prototype.makeIsOn=function(t){return function(){var e=Nt.ancestor(this.sc,t);return!!e&&e===Nt.ancestor(this.ec,t)}},e.prototype.isLeftEdgeOf=function(t){if(!Nt.isLeftEdgePoint(this.getStartPoint()))return!1;var e=Nt.ancestor(this.sc,t);return e&&Nt.isLeftEdgeOf(this.sc,e)},e.prototype.isCollapsed=function(){return this.sc===this.ec&&this.so===this.eo},e.prototype.wrapBodyInlineWithPara=function(){if(Nt.isBodyContainer(this.sc)&&Nt.isEmpty(this.sc))return this.sc.innerHTML=Nt.emptyPara,new e(this.sc.firstChild,0,this.sc.firstChild,0);var t,o=this.normalize();if(Nt.isParaInline(this.sc)||Nt.isPara(this.sc))return o;if(Nt.isInline(o.sc)){var n=Nt.listAncestor(o.sc,C.not(Nt.isInline));t=N.last(n),Nt.isInline(t)||(t=n[n.length-2]||o.sc.childNodes[o.so])}else t=o.sc.childNodes[o.so>0?o.so-1:0];var i=Nt.listPrev(t,Nt.isParaInline).reverse();if((i=i.concat(Nt.listNext(t.nextSibling,Nt.isParaInline))).length){var r=Nt.wrap(N.head(i),"p");Nt.appendChildNodes(r,N.tail(i))}return this.normalize()},e.prototype.insertNode=function(t){var e=this.wrapBodyInlineWithPara().deleteContents(),o=Nt.splitPoint(e.getStartPoint(),Nt.isInline(t));return o.rightNode?o.rightNode.parentNode.insertBefore(t,o.rightNode):o.container.appendChild(t),t},e.prototype.pasteHTML=function(e){var o=t("<div></div>").html(e)[0],n=N.from(o.childNodes),i=this.wrapBodyInlineWithPara().deleteContents();return n.reverse().map(function(t){return i.insertNode(t)}).reverse()},e.prototype.toString=function(){var t=this.nativeRange();return z.isW3CRangeSupport?t.toString():t.text},e.prototype.getWordRange=function(t){var o=this.getEndPoint();if(!Nt.isCharPoint(o))return this;var n=Nt.prevPointUntil(o,function(t){return!Nt.isCharPoint(t)});return t&&(o=Nt.nextPointUntil(o,function(t){return!Nt.isCharPoint(t)})),new e(n.node,n.offset,o.node,o.offset)},e.prototype.bookmark=function(t){return{s:{path:Nt.makeOffsetPath(t,this.sc),offset:this.so},e:{path:Nt.makeOffsetPath(t,this.ec),offset:this.eo}}},e.prototype.paraBookmark=function(t){return{s:{path:N.tail(Nt.makeOffsetPath(N.head(t),this.sc)),offset:this.so},e:{path:N.tail(Nt.makeOffsetPath(N.last(t),this.ec)),offset:this.eo}}},e.prototype.getClientRects=function(){return this.nativeRange().getClientRects()},e}(),Ht={create:function(t,e,o,n){if(4===arguments.length)return new Lt(t,e,o,n);if(2===arguments.length)return new Lt(t,e,o=t,n=e);var i=this.createFromSelection();return i||1!==arguments.length?i:(i=this.createFromNode(arguments[0])).collapse(Nt.emptyPara===arguments[0].innerHTML)},createFromSelection:function(){var t,e,o,n;if(z.isW3CRangeSupport){var i=document.getSelection();if(!i||0===i.rangeCount)return null;if(Nt.isBody(i.anchorNode))return null;var r=i.getRangeAt(0);t=r.startContainer,e=r.startOffset,o=r.endContainer,n=r.endOffset}else{var s=document.selection.createRange(),a=s.duplicate();a.collapse(!1);var l=s;l.collapse(!0);var c=Rt(l,!0),d=Rt(a,!1);Nt.isText(c.node)&&Nt.isLeftEdgePoint(c)&&Nt.isTextNode(d.node)&&Nt.isRightEdgePoint(d)&&d.node.nextSibling===c.node&&(c=d),t=c.cont,e=c.offset,o=d.cont,n=d.offset}return new Lt(t,e,o,n)},createFromNode:function(t){var e=t,o=0,n=t,i=Nt.nodeLength(n);return Nt.isVoid(e)&&(o=Nt.listPrev(e).length-1,e=e.parentNode),Nt.isBR(n)?(i=Nt.listPrev(n).length-1,n=n.parentNode):Nt.isVoid(n)&&(i=Nt.listPrev(n).length,n=n.parentNode),this.create(e,o,n,i)},createFromNodeBefore:function(t){return this.createFromNode(t).collapse(!0)},createFromNodeAfter:function(t){return this.createFromNode(t).collapse()},createFromBookmark:function(t,e){var o=Nt.fromOffsetPath(t,e.s.path),n=e.s.offset,i=Nt.fromOffsetPath(t,e.e.path),r=e.e.offset;return new Lt(o,n,i,r)},createFromParaBookmark:function(t,e){var o=t.s.offset,n=t.e.offset,i=Nt.fromOffsetPath(N.head(e),t.s.path),r=Nt.fromOffsetPath(N.last(e),t.e.path);return new Lt(i,o,r,n)}};var Dt=function(){function t(t){this.stack=[],this.stackOffset=-1,this.$editable=t,this.editable=t[0]}return t.prototype.makeSnapshot=function(){var t=Ht.create(this.editable);return{contents:this.$editable.html(),bookmark:t?t.bookmark(this.editable):{s:{path:[],offset:0},e:{path:[],offset:0}}}},t.prototype.applySnapshot=function(t){null!==t.contents&&this.$editable.html(t.contents),null!==t.bookmark&&Ht.createFromBookmark(this.editable,t.bookmark).select()},t.prototype.rewind=function(){this.$editable.html()!==this.stack[this.stackOffset].contents&&this.recordUndo(),this.stackOffset=0,this.applySnapshot(this.stack[this.stackOffset])},t.prototype.reset=function(){this.stack=[],this.stackOffset=-1,this.$editable.html(""),this.recordUndo()},t.prototype.undo=function(){this.$editable.html()!==this.stack[this.stackOffset].contents&&this.recordUndo(),this.stackOffset>0&&(this.stackOffset--,this.applySnapshot(this.stack[this.stackOffset]))},t.prototype.redo=function(){this.stack.length-1>this.stackOffset&&(this.stackOffset++,this.applySnapshot(this.stack[this.stackOffset]))},t.prototype.recordUndo=function(){this.stackOffset++,this.stack.length>this.stackOffset&&(this.stack=this.stack.slice(0,this.stackOffset)),this.stack.push(this.makeSnapshot())},t}(),Ft=function(){function e(){}return e.prototype.jQueryCSS=function(e,o){if(z.jqueryVersion<1.9){var n={};return t.each(o,function(t,o){n[o]=e.css(o)}),n}return e.css(o)},e.prototype.fromNode=function(t){var e=this.jQueryCSS(t,["font-family","font-size","text-align","list-style-type","line-height"])||{};return e["font-size"]=parseInt(e["font-size"],10),e},e.prototype.stylePara=function(e,o){t.each(e.nodes(Nt.isPara,{includeAncestor:!0}),function(e,n){t(n).css(o)})},e.prototype.styleNodes=function(e,o){e=e.splitText();var n=o&&o.nodeName||"SPAN",i=!(!o||!o.expandClosestSibling),r=!(!o||!o.onlyPartialContains);if(e.isCollapsed())return[e.insertNode(Nt.create(n))];var s=Nt.makePredByNodeName(n),a=e.nodes(Nt.isText,{fullyContains:!0}).map(function(t){return Nt.singleChildAncestor(t,s)||Nt.wrap(t,n)});if(i){if(r){var l=e.nodes();s=C.and(s,function(t){return N.contains(l,t)})}return a.map(function(e){var o=Nt.withClosestSiblings(e,s),n=N.head(o),i=N.tail(o);return t.each(i,function(t,e){Nt.appendChildNodes(n,e.childNodes),Nt.remove(e)}),N.head(o)})}return a},e.prototype.current=function(e){var o=t(Nt.isElement(e.sc)?e.sc:e.sc.parentNode),n=this.fromNode(o);try{n=t.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(e.isOnList()){var i=t.inArray(n["list-style-type"],["circle","disc","disc-leading-zero","square"])>-1;n["list-style"]=i?"unordered":"ordered"}else n["list-style"]="none";var r=Nt.ancestor(e.sc,Nt.isPara);if(r&&r.style["line-height"])n["line-height"]=r.style.lineHeight;else{var s=parseInt(n["line-height"],10)/parseInt(n["font-size"],10);n["line-height"]=s.toFixed(1)}return n.anchor=e.isOnAnchor()&&Nt.ancestor(e.sc,Nt.isAnchor),n.ancestors=Nt.listAncestor(e.sc,Nt.isEditable),n.range=e,n},e}(),Bt=function(){function e(){}return e.prototype.insertOrderedList=function(t){this.toggleList("OL",t)},e.prototype.insertUnorderedList=function(t){this.toggleList("UL",t)},e.prototype.indent=function(e){var o=this,n=Ht.create(e).wrapBodyInlineWithPara(),i=n.nodes(Nt.isPara,{includeAncestor:!0}),r=N.clusterBy(i,C.peq2("parentNode"));t.each(r,function(e,n){var i=N.head(n);Nt.isLi(i)?o.wrapList(n,i.parentNode.nodeName):t.each(n,function(e,o){t(o).css("marginLeft",function(t,e){return(parseInt(e,10)||0)+25})})}),n.select()},e.prototype.outdent=function(e){var o=this,n=Ht.create(e).wrapBodyInlineWithPara(),i=n.nodes(Nt.isPara,{includeAncestor:!0}),r=N.clusterBy(i,C.peq2("parentNode"));t.each(r,function(e,n){var i=N.head(n);Nt.isLi(i)?o.releaseList([n]):t.each(n,function(e,o){t(o).css("marginLeft",function(t,e){return(e=parseInt(e,10)||0)>25?e-25:""})})}),n.select()},e.prototype.toggleList=function(e,o){var n=this,i=Ht.create(o).wrapBodyInlineWithPara(),r=i.nodes(Nt.isPara,{includeAncestor:!0}),s=i.paraBookmark(r),a=N.clusterBy(r,C.peq2("parentNode"));if(N.find(r,Nt.isPurePara)){var l=[];t.each(a,function(t,o){l=l.concat(n.wrapList(o,e))}),r=l}else{var c=i.nodes(Nt.isList,{includeAncestor:!0}).filter(function(o){return!t.nodeName(o,e)});c.length?t.each(c,function(t,o){Nt.replace(o,e)}):r=this.releaseList(a,!0)}Ht.createFromParaBookmark(s,r).select()},e.prototype.wrapList=function(t,e){var o=N.head(t),n=N.last(t),i=Nt.isList(o.previousSibling)&&o.previousSibling,r=Nt.isList(n.nextSibling)&&n.nextSibling,s=i||Nt.insertAfter(Nt.create(e||"UL"),n);return t=t.map(function(t){return Nt.isPurePara(t)?Nt.replace(t,"LI"):t}),Nt.appendChildNodes(s,t),r&&(Nt.appendChildNodes(s,N.from(r.childNodes)),Nt.remove(r)),t},e.prototype.releaseList=function(e,o){var n=[];return t.each(e,function(e,i){var r=N.head(i),s=N.last(i),a=o?Nt.lastAncestor(r,Nt.isList):r.parentNode,l=a.childNodes.length>1?Nt.splitTree(a,{node:s.parentNode,offset:Nt.position(s)+1},{isSkipPaddingBlankHTML:!0}):null,c=Nt.splitTree(a,{node:r.parentNode,offset:Nt.position(r)},{isSkipPaddingBlankHTML:!0});i=o?Nt.listDescendant(c,Nt.isLi):N.from(c.childNodes).filter(Nt.isLi),!o&&Nt.isList(a.parentNode)||(i=i.map(function(t){return Nt.replace(t,"P")})),t.each(N.from(i).reverse(),function(t,e){Nt.insertAfter(e,a)});var d=N.compact([a,c,l]);t.each(d,function(e,o){var n=[o].concat(Nt.listDescendant(o,Nt.isList));t.each(n.reverse(),function(t,e){Nt.nodeLength(e)||Nt.remove(e,!0)})}),n=n.concat(i)}),n},e}(),zt=function(){function e(){this.bullet=new Bt}return e.prototype.insertTab=function(t,e){var o=Nt.createText(new Array(e+1).join(Nt.NBSP_CHAR));(t=t.deleteContents()).insertNode(o,!0),(t=Ht.create(o,e)).select()},e.prototype.insertParagraph=function(e){var o=Ht.create(e);o=(o=o.deleteContents()).wrapBodyInlineWithPara();var n,i=Nt.ancestor(o.sc,Nt.isPara);if(i){if(Nt.isEmpty(i)&&Nt.isLi(i))return void this.bullet.toggleList(i.parentNode.nodeName);if(Nt.isEmpty(i)&&Nt.isPara(i)&&Nt.isBlockquote(i.parentNode))Nt.insertAfter(i,i.parentNode),n=i;else{n=Nt.splitTree(i,o.getStartPoint());var r=Nt.listDescendant(i,Nt.isEmptyAnchor);r=r.concat(Nt.listDescendant(n,Nt.isEmptyAnchor)),t.each(r,function(t,e){Nt.remove(e)}),(Nt.isHeading(n)||Nt.isPre(n)||Nt.isCustomStyleTag(n))&&Nt.isEmpty(n)&&(n=Nt.replace(n,"p"))}}else{var s=o.sc.childNodes[o.so];n=t(Nt.emptyPara)[0],s?o.sc.insertBefore(n,s):o.sc.appendChild(n)}Ht.create(n,0).normalize().select().scrollIntoView(e)},e}(),Mt=function(t,e,o,n){var i={colPos:0,rowPos:0},r=[],s=[];function a(t,e,o,n,i,s,a){var l={baseRow:o,baseCell:n,isRowSpan:i,isColSpan:s,isVirtual:a};r[t]||(r[t]=[]),r[t][e]=l}function l(t,e){if(!r[t])return e;if(!r[t][e])return e;for(var o=e;r[t][o];)if(o++,!r[t][o])return o}function c(t,e){var o=l(t.rowIndex,e.cellIndex),n=e.colSpan>1,r=e.rowSpan>1,s=t.rowIndex===i.rowPos&&e.cellIndex===i.colPos;a(t.rowIndex,o,t,e,r,n,!1);var c=e.attributes.rowSpan?parseInt(e.attributes.rowSpan.value,10):0;if(c>1)for(var u=1;u<c;u++){var h=t.rowIndex+u;d(h,o,e,s),a(h,o,t,e,!0,n,!0)}var p=e.attributes.colSpan?parseInt(e.attributes.colSpan.value,10):0;if(p>1)for(var f=1;f<p;f++){var m=l(t.rowIndex,o+f);d(t.rowIndex,m,e,s),a(t.rowIndex,m,t,e,r,!0,!0)}}function d(t,e,o,n){t===i.rowPos&&i.colPos>=o.cellIndex&&o.cellIndex<=e&&!n&&i.colPos++}function u(t){switch(e){case Mt.where.Column:if(t.isColSpan)return Mt.resultAction.SubtractSpanCount;break;case Mt.where.Row:if(!t.isVirtual&&t.isRowSpan)return Mt.resultAction.AddCell;if(t.isRowSpan)return Mt.resultAction.SubtractSpanCount}return Mt.resultAction.RemoveCell}function h(t){switch(e){case Mt.where.Column:if(t.isColSpan)return Mt.resultAction.SumSpanCount;if(t.isRowSpan&&t.isVirtual)return Mt.resultAction.Ignore;break;case Mt.where.Row:if(t.isRowSpan)return Mt.resultAction.SumSpanCount;if(t.isColSpan&&t.isVirtual)return Mt.resultAction.Ignore}return Mt.resultAction.AddCell}this.getActionList=function(){for(var t,n,a,l=e===Mt.where.Row?i.rowPos:-1,c=e===Mt.where.Column?i.colPos:-1,d=0,p=!0;p;){var f=l>=0?l:d,m=c>=0?c:d,g=r[f];if(!g)return p=!1,s;var v=g[m];if(!v)return p=!1,s;var b=Mt.resultAction.Ignore;switch(o){case Mt.requestAction.Add:b=h(v);break;case Mt.requestAction.Delete:b=u(v)}s.push((t=b,n=f,a=m,{baseCell:v.baseCell,action:t,virtualTable:{rowIndex:n,cellIndex:a}})),d++}return s},t&&t.tagName&&("td"===t.tagName.toLowerCase()||"th"===t.tagName.toLowerCase())?(i.colPos=t.cellIndex,t.parentElement&&t.parentElement.tagName&&"tr"===t.parentElement.tagName.toLowerCase()?i.rowPos=t.parentElement.rowIndex:console.error("Impossible to identify start Row point.",t)):console.error("Impossible to identify start Cell point.",t),function(){for(var t=n.rows,e=0;e<t.length;e++)for(var o=t[e].cells,i=0;i<o.length;i++)c(t[e],o[i])}()};Mt.where={Row:0,Column:1},Mt.requestAction={Add:0,Delete:1},Mt.resultAction={Ignore:0,SubtractSpanCount:1,RemoveCell:2,AddCell:3,SumSpanCount:4};var Ot,Ut=function(){function e(){}return e.prototype.tab=function(t,e){var o=Nt.ancestor(t.commonAncestor(),Nt.isCell),n=Nt.ancestor(o,Nt.isTable),i=Nt.listDescendant(n,Nt.isCell),r=N[e?"prev":"next"](i,o);r&&Ht.create(r,0).select()},e.prototype.addRow=function(e,o){for(var n=Nt.ancestor(e.commonAncestor(),Nt.isCell),i=t(n).closest("tr"),r=this.recoverAttributes(i),s=t("<tr"+r+"></tr>"),a=new Mt(n,Mt.where.Row,Mt.requestAction.Add,t(i).closest("table")[0]).getActionList(),l=0;l<a.length;l++){var c=a[l],d=this.recoverAttributes(c.baseCell);switch(c.action){case Mt.resultAction.AddCell:s.append("<td"+d+">"+Nt.blank+"</td>");break;case Mt.resultAction.SumSpanCount:if("top"===o)if((c.baseCell.parent?c.baseCell.closest("tr").rowIndex:0)<=i[0].rowIndex){var u=t("<div></div>").append(t("<td"+d+">"+Nt.blank+"</td>").removeAttr("rowspan")).html();s.append(u);break}var h=parseInt(c.baseCell.rowSpan,10);h++,c.baseCell.setAttribute("rowSpan",h)}}if("top"===o)i.before(s);else{if(n.rowSpan>1){var p=i[0].rowIndex+(n.rowSpan-2);return void t(t(i).parent().find("tr")[p]).after(t(s))}i.after(s)}},e.prototype.addCol=function(e,o){var n=Nt.ancestor(e.commonAncestor(),Nt.isCell),i=t(n).closest("tr");t(i).siblings().push(i);for(var r=new Mt(n,Mt.where.Column,Mt.requestAction.Add,t(i).closest("table")[0]).getActionList(),s=0;s<r.length;s++){var a=r[s],l=this.recoverAttributes(a.baseCell);switch(a.action){case Mt.resultAction.AddCell:"right"===o?t(a.baseCell).after("<td"+l+">"+Nt.blank+"</td>"):t(a.baseCell).before("<td"+l+">"+Nt.blank+"</td>");break;case Mt.resultAction.SumSpanCount:if("right"===o){var c=parseInt(a.baseCell.colSpan,10);c++,a.baseCell.setAttribute("colSpan",c)}else t(a.baseCell).before("<td"+l+">"+Nt.blank+"</td>")}}},e.prototype.recoverAttributes=function(t){var e="";if(!t)return e;for(var o=t.attributes||[],n=0;n<o.length;n++)"id"!==o[n].name.toLowerCase()&&o[n].specified&&(e+=" "+o[n].name+"='"+o[n].value+"'");return e},e.prototype.deleteRow=function(e){for(var o=Nt.ancestor(e.commonAncestor(),Nt.isCell),n=t(o).closest("tr"),i=n.children("td, th").index(t(o)),r=n[0].rowIndex,s=new Mt(o,Mt.where.Row,Mt.requestAction.Delete,t(n).closest("table")[0]).getActionList(),a=0;a<s.length;a++)if(s[a]){var l=s[a].baseCell,c=s[a].virtualTable,d=l.rowSpan&&l.rowSpan>1,u=d?parseInt(l.rowSpan,10):0;switch(s[a].action){case Mt.resultAction.Ignore:continue;case Mt.resultAction.AddCell:var h=n.next("tr")[0];if(!h)continue;var p=n[0].cells[i];d&&(u>2?(u--,h.insertBefore(p,h.cells[i]),h.cells[i].setAttribute("rowSpan",u),h.cells[i].innerHTML=""):2===u&&(h.insertBefore(p,h.cells[i]),h.cells[i].removeAttribute("rowSpan"),h.cells[i].innerHTML=""));continue;case Mt.resultAction.SubtractSpanCount:d&&(u>2?(u--,l.setAttribute("rowSpan",u),c.rowIndex!==r&&l.cellIndex===i&&(l.innerHTML="")):2===u&&(l.removeAttribute("rowSpan"),c.rowIndex!==r&&l.cellIndex===i&&(l.innerHTML="")));continue;case Mt.resultAction.RemoveCell:continue}}n.remove()},e.prototype.deleteCol=function(e){for(var o=Nt.ancestor(e.commonAncestor(),Nt.isCell),n=t(o).closest("tr"),i=n.children("td, th").index(t(o)),r=new Mt(o,Mt.where.Column,Mt.requestAction.Delete,t(n).closest("table")[0]).getActionList(),s=0;s<r.length;s++)if(r[s])switch(r[s].action){case Mt.resultAction.Ignore:continue;case Mt.resultAction.SubtractSpanCount:var a=r[s].baseCell;if(a.colSpan&&a.colSpan>1){var l=a.colSpan?parseInt(a.colSpan,10):0;l>2?(l--,a.setAttribute("colSpan",l),a.cellIndex===i&&(a.innerHTML="")):2===l&&(a.removeAttribute("colSpan"),a.cellIndex===i&&(a.innerHTML=""))}continue;case Mt.resultAction.RemoveCell:Nt.remove(r[s].baseCell,!0);continue}},e.prototype.createTable=function(e,o,n){for(var i,r=[],s=0;s<e;s++)r.push("<td>"+Nt.blank+"</td>");i=r.join("");for(var a,l=[],c=0;c<o;c++)l.push("<tr>"+i+"</tr>");a=l.join("");var d=t("<table>"+a+"</table>");return n&&n.tableClassName&&d.addClass(n.tableClassName),d[0]},e.prototype.deleteTable=function(e){var o=Nt.ancestor(e.commonAncestor(),Nt.isCell);t(o).closest("table").remove()},e}(),jt=function(){function e(e){var o=this;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.style=new Ft,this.table=new Ut,this.typing=new zt,this.bullet=new Bt,this.history=new Dt(this.$editable),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 n=["bold","italic","underline","strikethrough","superscript","subscript","justifyLeft","justifyCenter","justifyRight","justifyFull","formatBlock","removeFormat","backColor"],i=0,r=n.length;i<r;i++)this[n[i]]=function(t){return function(e){o.beforeCommand(),document.execCommand(t,!1,e),o.afterCommand(!0)}}(n[i]),this.context.memo("help."+n[i],this.lang.help[n[i]]);this.fontName=this.wrapCommand(function(t){return o.fontStyling("font-family","'"+t+"'")}),this.fontSize=this.wrapCommand(function(t){return o.fontStyling("font-size",t+"px")});for(i=1;i<=6;i++)this["formatH"+i]=function(t){return function(){o.formatBlock("H"+t)}}(i),this.context.memo("help.formatH"+i,this.lang.help["formatH"+i]);this.insertParagraph=this.wrapCommand(function(){o.typing.insertParagraph(o.editable)}),this.insertOrderedList=this.wrapCommand(function(){o.bullet.insertOrderedList(o.editable)}),this.insertUnorderedList=this.wrapCommand(function(){o.bullet.insertUnorderedList(o.editable)}),this.indent=this.wrapCommand(function(){o.bullet.indent(o.editable)}),this.outdent=this.wrapCommand(function(){o.bullet.outdent(o.editable)}),this.insertNode=this.wrapCommand(function(e){o.isLimited(t(e).text().length)||(o.createRange().insertNode(e),Ht.createFromNodeAfter(e).select())}),this.insertText=this.wrapCommand(function(t){if(!o.isLimited(t.length)){var e=o.createRange().insertNode(Nt.createText(t));Ht.create(e,Nt.nodeLength(e)).select()}}),this.pasteHTML=this.wrapCommand(function(t){if(!o.isLimited(t.length)){var e=o.createRange().pasteHTML(t);Ht.createFromNodeAfter(N.last(e)).select()}}),this.formatBlock=this.wrapCommand(function(t,e){var n=o.options.callbacks.onApplyCustomStyle;n?n.call(o,e,o.context,o.onFormatBlock):o.onFormatBlock(t,e)}),this.insertHorizontalRule=this.wrapCommand(function(){var t=o.createRange().insertNode(Nt.create("HR"));t.nextSibling&&Ht.create(t.nextSibling,0).normalize().select()}),this.lineHeight=this.wrapCommand(function(t){o.style.stylePara(o.createRange(),{lineHeight:t})}),this.createLink=this.wrapCommand(function(e){var n=e.url,i=e.text,r=e.isNewWindow,s=e.range||o.createRange(),a=s.toString()!==i;"string"==typeof n&&(n=n.trim()),n=o.options.onCreateLink?o.options.onCreateLink(n):/^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(n)?n:"http://"+n;var l=[];if(a){var c=(s=s.deleteContents()).insertNode(t("<A>"+i+"</A>")[0]);l.push(c)}else l=o.style.styleNodes(s,{nodeName:"A",expandClosestSibling:!0,onlyPartialContains:!0});t.each(l,function(e,o){t(o).attr("href",n),r?t(o).attr("target","_blank"):t(o).removeAttr("target")});var d=Ht.createFromNodeBefore(N.head(l)).getStartPoint(),u=Ht.createFromNodeAfter(N.last(l)).getEndPoint();Ht.create(d.node,d.offset,u.node,u.offset).select()}),this.color=this.wrapCommand(function(t){var e=t.foreColor,o=t.backColor;e&&document.execCommand("foreColor",!1,e),o&&document.execCommand("backColor",!1,o)}),this.foreColor=this.wrapCommand(function(t){document.execCommand("styleWithCSS",!1,!0),document.execCommand("foreColor",!1,t)}),this.insertTable=this.wrapCommand(function(t){var e=t.split("x");o.createRange().deleteContents().insertNode(o.table.createTable(e[0],e[1],o.options))}),this.removeMedia=this.wrapCommand(function(){var e=t(o.restoreTarget()).parent();e.parent("figure").length?e.parent("figure").remove():e=t(o.restoreTarget()).detach(),o.context.triggerEvent("media.delete",e,o.$editable)}),this.floatMe=this.wrapCommand(function(e){var n=t(o.restoreTarget());n.toggleClass("note-float-left","left"===e),n.toggleClass("note-float-right","right"===e),n.css("float",e)}),this.resize=this.wrapCommand(function(e){t(o.restoreTarget()).css({width:100*e+"%",height:""})})}return e.prototype.initialize=function(){var t=this;this.$editable.on("keydown",function(e){if(e.keyCode===At.code.ENTER&&t.context.triggerEvent("enter",e),t.context.triggerEvent("keydown",e),e.isDefaultPrevented()||(t.options.shortcuts?t.handleKeyMap(e):t.preventDefaultEditableShortCuts(e)),t.isLimited(1,e))return!1}).on("keyup",function(e){t.context.triggerEvent("keyup",e)}).on("focus",function(e){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.context.triggerEvent("mouseup",e)}).on("scroll",function(e){t.context.triggerEvent("scroll",e)}).on("paste",function(e){t.context.triggerEvent("paste",e)}),this.$editable.html(Nt.html(this.$note)||Nt.emptyPara),this.$editable.on(z.inputEventName,C.debounce(function(){t.context.triggerEvent("change",t.$editable.html())},100)),this.$editor.on("focusin",function(e){t.context.triggerEvent("focusin",e)}).on("focusout",function(e){t.context.triggerEvent("focusout",e)}),this.options.airMode||(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()},e.prototype.destroy=function(){this.$editable.off()},e.prototype.handleKeyMap=function(t){var e=this.options.keyMap[z.isMac?"mac":"pc"],o=[];t.metaKey&&o.push("CMD"),t.ctrlKey&&!t.altKey&&o.push("CTRL"),t.shiftKey&&o.push("SHIFT");var n=At.nameFromCode[t.keyCode];n&&o.push(n);var i=e[o.join("+")];i?!1!==this.context.invoke(i)&&t.preventDefault():At.isEdit(t.keyCode)&&this.afterCommand()},e.prototype.preventDefaultEditableShortCuts=function(t){(t.ctrlKey||t.metaKey)&&N.contains([66,73,85],t.keyCode)&&t.preventDefault()},e.prototype.isLimited=function(t,e){return t=t||0,(void 0===e||!(At.isMove(e.keyCode)||e.ctrlKey||e.metaKey||N.contains([At.code.BACKSPACE,At.code.DELETE],e.keyCode)))&&(this.options.maxTextLength>0&&this.$editable.text().length+t>=this.options.maxTextLength)},e.prototype.createRange=function(){return this.focus(),Ht.create(this.editable)},e.prototype.saveRange=function(t){this.lastRange=this.createRange(),t&&this.lastRange.collapse().select()},e.prototype.restoreRange=function(){this.lastRange&&(this.lastRange.select(),this.focus())},e.prototype.saveTarget=function(t){this.$editable.data("target",t)},e.prototype.clearTarget=function(){this.$editable.removeData("target")},e.prototype.restoreTarget=function(){return this.$editable.data("target")},e.prototype.currentStyle=function(){var t=Ht.create();return t&&(t=t.normalize()),t?this.style.current(t):this.style.fromNode(this.$editable)},e.prototype.styleFromNode=function(t){return this.style.fromNode(t)},e.prototype.undo=function(){this.context.triggerEvent("before.command",this.$editable.html()),this.history.undo(),this.context.triggerEvent("change",this.$editable.html())},e.prototype.redo=function(){this.context.triggerEvent("before.command",this.$editable.html()),this.history.redo(),this.context.triggerEvent("change",this.$editable.html())},e.prototype.beforeCommand=function(){this.context.triggerEvent("before.command",this.$editable.html()),this.focus()},e.prototype.afterCommand=function(t){this.normalizeContent(),this.history.recordUndo(),t||this.context.triggerEvent("change",this.$editable.html())},e.prototype.tab=function(){var t=this.createRange();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())}},e.prototype.untab=function(){var t=this.createRange();if(t.isCollapsed()&&t.isOnCell())this.table.tab(t,!0);else if(0===this.options.tabSize)return!1},e.prototype.wrapCommand=function(t){var e=this;return function(){e.beforeCommand(),t.apply(e,arguments),e.afterCommand()}},e.prototype.insertImage=function(e,o){var n,i=this;return(n=e,t.Deferred(function(e){var o=t("<img>");o.one("load",function(){o.off("error abort"),e.resolve(o)}).one("error abort",function(){o.off("load").detach(),e.reject(o)}).css({display:"none"}).appendTo(document.body).attr("src",n)}).promise()).then(function(t){i.beforeCommand(),"function"==typeof o?o(t):("string"==typeof o&&t.attr("data-filename",o),t.css("width",Math.min(i.$editable.width(),t.width()))),t.show(),Ht.create(i.editable).insertNode(t[0]),Ht.createFromNodeAfter(t[0]).select(),i.afterCommand()}).fail(function(t){i.context.triggerEvent("image.upload.error",t)})},e.prototype.insertImages=function(e){var o=this;t.each(e,function(e,n){var i,r=n.name;o.options.maximumImageFileSize&&o.options.maximumImageFileSize<n.size?o.context.triggerEvent("image.upload.error",o.lang.image.maximumFileSizeError):(i=n,t.Deferred(function(e){t.extend(new FileReader,{onload:function(t){var o=t.target.result;e.resolve(o)},onerror:function(t){e.reject(t)}}).readAsDataURL(i)}).promise()).then(function(t){return o.insertImage(t,r)}).fail(function(){o.context.triggerEvent("image.upload.error")})})},e.prototype.insertImagesOrCallback=function(t){this.options.callbacks.onImageUpload?this.context.triggerEvent("image.upload",t):this.insertImages(t)},e.prototype.getSelectedText=function(){var t=this.createRange();return t.isOnAnchor()&&(t=Ht.createFromNode(Nt.ancestor(t.sc,Nt.isAnchor))),t.toString()},e.prototype.onFormatBlock=function(e,o){if(e=z.isMSIE?"<"+e+">":e,document.execCommand("FormatBlock",!1,e),o&&o.length){var n=o[0].className||"";if(n){var i=this.createRange();t([i.sc,i.ec]).closest(e).addClass(n)}}},e.prototype.formatPara=function(){this.formatBlock("P")},e.prototype.fontStyling=function(e,o){var n=this.createRange();if(n){var i=this.style.styleNodes(n);if(t(i).css(e,o),n.isCollapsed()){var r=N.head(i);r&&!Nt.nodeLength(r)&&(r.innerHTML=Nt.ZERO_WIDTH_NBSP_CHAR,Ht.createFromNodeAfter(r.firstChild).select(),this.$editable.data("bogus",r))}}},e.prototype.unlink=function(){var t=this.createRange();if(t.isOnAnchor()){var e=Nt.ancestor(t.sc,Nt.isAnchor);(t=Ht.createFromNode(e)).select(),this.beforeCommand(),document.execCommand("unlink"),this.afterCommand()}},e.prototype.getLinkInfo=function(){var e=this.createRange().expand(Nt.isAnchor),o=t(N.head(e.nodes(Nt.isAnchor))),n={range:e,text:e.toString(),url:o.length?o.attr("href"):""};return o.length&&(n.isNewWindow="_blank"===o.attr("target")),n},e.prototype.addRow=function(t){var e=this.createRange(this.$editable);e.isCollapsed()&&e.isOnCell()&&(this.beforeCommand(),this.table.addRow(e,t),this.afterCommand())},e.prototype.addCol=function(t){var e=this.createRange(this.$editable);e.isCollapsed()&&e.isOnCell()&&(this.beforeCommand(),this.table.addCol(e,t),this.afterCommand())},e.prototype.deleteRow=function(){var t=this.createRange(this.$editable);t.isCollapsed()&&t.isOnCell()&&(this.beforeCommand(),this.table.deleteRow(t),this.afterCommand())},e.prototype.deleteCol=function(){var t=this.createRange(this.$editable);t.isCollapsed()&&t.isOnCell()&&(this.beforeCommand(),this.table.deleteCol(t),this.afterCommand())},e.prototype.deleteTable=function(){var t=this.createRange(this.$editable);t.isCollapsed()&&t.isOnCell()&&(this.beforeCommand(),this.table.deleteTable(t),this.afterCommand())},e.prototype.resizeTo=function(t,e,o){var n;if(o){var i=t.y/t.x,r=e.data("ratio");n={width:r>i?t.x:t.y/r,height:r>i?t.x*r:t.y}}else n={width:t.x,height:t.y};e.css(n)},e.prototype.hasFocus=function(){return this.$editable.is(":focus")},e.prototype.focus=function(){this.hasFocus()||this.$editable.focus()},e.prototype.isEmpty=function(){return Nt.isEmpty(this.$editable[0])||Nt.emptyPara===this.$editable.html()},e.prototype.empty=function(){this.context.invoke("code",Nt.emptyPara)},e.prototype.normalizeContent=function(){this.$editable[0].normalize()},e}(),qt=function(){function t(t){this.context=t,this.$editable=t.layoutInfo.editable}return t.prototype.initialize=function(){this.$editable.on("paste",this.pasteByEvent.bind(this))},t.prototype.pasteByEvent=function(t){var e=t.originalEvent.clipboardData;if(e&&e.items&&e.items.length){var o=N.head(e.items);"file"===o.kind&&-1!==o.type.indexOf("image/")&&this.context.invoke("editor.insertImagesOrCallback",[o.getAsFile()]),this.context.invoke("editor.afterCommand")}},t}(),Kt=function(){function e(e){this.context=e,this.$eventListener=t(document),this.$editor=e.layoutInfo.editor,this.$editable=e.layoutInfo.editable,this.options=e.options,this.lang=this.options.langInfo,this.documentEventHandlers={},this.$dropzone=t(['<div class="note-dropzone">',' <div class="note-dropzone-message"/>',"</div>"].join("")).prependTo(this.$editor)}return e.prototype.initialize=function(){this.options.disableDragAndDrop?(this.documentEventHandlers.onDrop=function(t){t.preventDefault()},this.$eventListener=this.$dropzone,this.$eventListener.on("drop",this.documentEventHandlers.onDrop)):this.attachDragAndDropEvent()},e.prototype.attachDragAndDropEvent=function(){var e=this,o=t(),n=this.$dropzone.find(".note-dropzone-message");this.documentEventHandlers.onDragenter=function(t){var i=e.context.invoke("codeview.isActivated"),r=e.$editor.width()>0&&e.$editor.height()>0;i||o.length||!r||(e.$editor.addClass("dragover"),e.$dropzone.width(e.$editor.width()),e.$dropzone.height(e.$editor.height()),n.text(e.lang.image.dragImageHere)),o=o.add(t.target)},this.documentEventHandlers.onDragleave=function(t){(o=o.not(t.target)).length||e.$editor.removeClass("dragover")},this.documentEventHandlers.onDrop=function(){o=t(),e.$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(){e.$dropzone.addClass("hover"),n.text(e.lang.image.dropImage)}).on("dragleave",function(){e.$dropzone.removeClass("hover"),n.text(e.lang.image.dragImageHere)}),this.$dropzone.on("drop",function(o){var n=o.originalEvent.dataTransfer;o.preventDefault(),n&&n.files&&n.files.length?(e.$editable.focus(),e.context.invoke("editor.insertImagesOrCallback",n.files)):t.each(n.types,function(o,i){var r=n.getData(i);i.toLowerCase().indexOf("text")>-1?e.context.invoke("editor.pasteHTML",r):t(r).each(function(t,o){e.context.invoke("editor.insertNode",o)})})}).on("dragover",!1)},e.prototype.destroy=function(){var t=this;Object.keys(this.documentEventHandlers).forEach(function(e){t.$eventListener.off(e.substr(2).toLowerCase(),t.documentEventHandlers[e])}),this.documentEventHandlers={}},e}();z.hasCodeMirror&&(z.isSupportAmd?require(["codemirror"],function(t){Ot=t}):Ot=window.CodeMirror);var Vt=function(){function t(t){this.context=t,this.$editor=t.layoutInfo.editor,this.$editable=t.layoutInfo.editable,this.$codable=t.layoutInfo.codable,this.options=t.options}return t.prototype.sync=function(){this.isActivated()&&z.hasCodeMirror&&this.$codable.data("cmEditor").save()},t.prototype.isActivated=function(){return this.$editor.hasClass("codeview")},t.prototype.toggle=function(){this.isActivated()?this.deactivate():this.activate(),this.context.triggerEvent("codeview.toggled")},t.prototype.activate=function(){var t=this;if(this.$codable.val(Nt.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(),z.hasCodeMirror){var e=Ot.fromTextArea(this.$codable[0],this.options.codemirror);if(this.options.codemirror.tern){var o=new Ot.TernServer(this.options.codemirror.tern);e.ternServer=o,e.on("cursorActivity",function(t){o.updateArgHints(t)})}e.on("blur",function(o){t.context.triggerEvent("blur.codeview",e.getValue(),o)}),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)})},t.prototype.deactivate=function(){if(z.hasCodeMirror){var t=this.$codable.data("cmEditor");this.$codable.val(t.getValue()),t.toTextArea()}var e=Nt.value(this.$codable,this.options.prettifyHtml)||Nt.emptyPara,o=this.$editable.html()!==e;this.$editable.html(e),this.$editable.height(this.options.height?this.$codable.height():"auto"),this.$editor.removeClass("codeview"),o&&this.context.triggerEvent("change",this.$editable.html(),this.$editable),this.$editable.focus(),this.context.invoke("toolbar.updateCodeview",!1)},t.prototype.destroy=function(){this.isActivated()&&this.deactivate()},t}(),Wt=function(){function e(e){this.$document=t(document),this.$statusbar=e.layoutInfo.statusbar,this.$editable=e.layoutInfo.editable,this.options=e.options}return e.prototype.initialize=function(){var t=this;this.options.airMode||this.options.disableResizeEditor?this.destroy():this.$statusbar.on("mousedown",function(e){e.preventDefault(),e.stopPropagation();var o=t.$editable.offset().top-t.$document.scrollTop(),n=function(e){var n=e.clientY-(o+24);n=t.options.minheight>0?Math.max(n,t.options.minheight):n,n=t.options.maxHeight>0?Math.min(n,t.options.maxHeight):n,t.$editable.height(n)};t.$document.on("mousemove",n).one("mouseup",function(){t.$document.off("mousemove",n)})})},e.prototype.destroy=function(){this.$statusbar.off(),this.$statusbar.addClass("locked")},e}(),Gt=function(){function e(e){var o=this;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=t(window),this.$scrollbar=t("html, body"),this.onResize=function(){o.resizeTo({h:o.$window.height()-o.$toolbar.outerHeight()})}}return e.prototype.resizeTo=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)},e.prototype.toggle=function(){this.$editor.toggleClass("fullscreen"),this.isFullscreen()?(this.$editable.data("orgHeight",this.$editable.css("height")),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.$scrollbar.css("overflow","visible")),this.context.invoke("toolbar.updateFullscreen",this.isFullscreen())},e.prototype.isFullscreen=function(){return this.$editor.hasClass("fullscreen")},e}(),_t=function(){function e(e){var o=this;this.context=e,this.$document=t(document),this.$editingArea=e.layoutInfo.editingArea,this.options=e.options,this.lang=this.options.langInfo,this.events={"summernote.mousedown":function(t,e){o.update(e.target)&&e.preventDefault()},"summernote.keyup summernote.scroll summernote.change summernote.dialog.shown":function(){o.update()},"summernote.disable":function(){o.hide()},"summernote.codeview.toggled":function(){o.update()}}}return e.prototype.initialize=function(){var e=this;this.$handle=t(['<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(t){if(Nt.isControlSizing(t.target)){t.preventDefault(),t.stopPropagation();var o=e.$handle.find(".note-control-selection").data("target"),n=o.offset(),i=e.$document.scrollTop(),r=function(t){e.context.invoke("editor.resizeTo",{x:t.clientX-n.left,y:t.clientY-(n.top-i)},o,!t.shiftKey),e.update(o[0])};e.$document.on("mousemove",r).one("mouseup",function(t){t.preventDefault(),e.$document.off("mousemove",r),e.context.invoke("editor.afterCommand")}),o.data("ratio")||o.data("ratio",o.height()/o.width())}}),this.$handle.on("wheel",function(t){t.preventDefault(),e.update()})},e.prototype.destroy=function(){this.$handle.remove()},e.prototype.update=function(e){if(this.context.isDisabled())return!1;var o=Nt.isImg(e),n=this.$handle.find(".note-control-selection");if(this.context.invoke("imagePopover.update",e),o){var i=t(e),r=i.position(),s={left:r.left+parseInt(i.css("marginLeft"),10),top:r.top+parseInt(i.css("marginTop"),10)},a={w:i.outerWidth(!1),h:i.outerHeight(!1)};n.css({display:"block",left:s.left,top:s.top,width:a.w,height:a.h}).data("target",i);var l=new Image;l.src=i.attr("src");var c=a.w+"x"+a.h+" ("+this.lang.image.original+": "+l.width+"x"+l.height+")";n.find(".note-control-selection-info").text(c),this.context.invoke("editor.saveTarget",e)}else this.hide();return o},e.prototype.hide=function(){this.context.invoke("editor.clearTarget"),this.$handle.children().hide()},e}(),Zt=/^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i,Yt=function(){function e(t){var e=this;this.context=t,this.events={"summernote.keyup":function(t,o){o.isDefaultPrevented()||e.handleKeyup(o)},"summernote.keydown":function(t,o){e.handleKeydown(o)}}}return e.prototype.initialize=function(){this.lastWordRange=null},e.prototype.destroy=function(){this.lastWordRange=null},e.prototype.replace=function(){if(this.lastWordRange){var e=this.lastWordRange.toString(),o=e.match(Zt);if(o&&(o[1]||o[2])){var n=o[1]?e:"http://"+e,i=t("<a />").html(e).attr("href",n)[0];this.lastWordRange.insertNode(i),this.lastWordRange=null,this.context.invoke("editor.focus")}}},e.prototype.handleKeydown=function(t){if(N.contains([At.code.ENTER,At.code.SPACE],t.keyCode)){var e=this.context.invoke("editor.createRange").getWordRange();this.lastWordRange=e}},e.prototype.handleKeyup=function(t){N.contains([At.code.ENTER,At.code.SPACE],t.keyCode)&&this.replace()},e}(),Qt=function(){function t(t){var e=this;this.$note=t.layoutInfo.note,this.events={"summernote.change":function(){e.$note.val(t.invoke("code"))}}}return t.prototype.shouldInitialize=function(){return Nt.isTextarea(this.$note[0])},t}(),Jt=function(){function e(t){var e=this;this.context=t,this.$editingArea=t.layoutInfo.editingArea,this.options=t.options,this.events={"summernote.init summernote.change":function(){e.update()},"summernote.codeview.toggled":function(){e.update()}}}return e.prototype.shouldInitialize=function(){return!!this.options.placeholder},e.prototype.initialize=function(){var e=this;this.$placeholder=t('<div class="note-placeholder">'),this.$placeholder.on("click",function(){e.context.invoke("focus")}).text(this.options.placeholder).prependTo(this.$editingArea),this.update()},e.prototype.destroy=function(){this.$placeholder.remove()},e.prototype.update=function(){var t=!this.context.invoke("codeview.isActivated")&&this.context.invoke("editor.isEmpty");this.$placeholder.toggle(t)},e}(),Xt=function(){function e(e){this.ui=t.summernote.ui,this.context=e,this.$toolbar=e.layoutInfo.toolbar,this.options=e.options,this.lang=this.options.langInfo,this.invertedKeyMap=C.invertObject(this.options.keyMap[z.isMac?"mac":"pc"])}return e.prototype.representShortcut=function(t){var e=this.invertedKeyMap[t];return this.options.shortcuts&&e?(z.isMac&&(e=e.replace("CMD","⌘").replace("SHIFT","⇧"))," ("+(e=e.replace("BACKSLASH","\\").replace("SLASH","/").replace("LEFTBRACKET","[").replace("RIGHTBRACKET","]"))+")"):""},e.prototype.button=function(t){return!this.options.tooltip&&t.tooltip&&delete t.tooltip,t.container=this.options.container,this.ui.button(t)},e.prototype.initialize=function(){this.addToolbarButtons(),this.addImagePopoverButtons(),this.addLinkPopoverButtons(),this.addTablePopoverButtons(),this.fontInstalledMap={}},e.prototype.destroy=function(){delete this.fontInstalledMap},e.prototype.isFontInstalled=function(t){return this.fontInstalledMap.hasOwnProperty(t)||(this.fontInstalledMap[t]=z.isFontInstalled(t)||N.contains(this.options.fontNamesIgnoreCheck,t)),this.fontInstalledMap[t]},e.prototype.isFontDeservedToAdd=function(e){return""!==(e=e.toLowerCase())&&this.isFontInstalled(e)&&-1===t.inArray(e,["sans-serif","serif","monospace","cursive","fantasy"])},e.prototype.addToolbarButtons=function(){var e=this;this.context.memo("button.style",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.magic),e.options),tooltip:e.lang.style.style,data:{toggle:"dropdown"}}),e.ui.dropdown({className:"dropdown-style",items:e.options.styleTags,title:e.lang.style.style,template:function(t){"string"==typeof t&&(t={tag:t,title:e.lang.style.hasOwnProperty(t)?e.lang.style[t]:t});var o=t.tag,n=t.title;return"<"+o+(t.style?' style="'+t.style+'" ':"")+(t.className?' class="'+t.className+'"':"")+">"+n+"</"+o+">"},click:e.context.createInvokeHandler("editor.formatBlock")})]).render()});for(var o=function(t,o){var i=n.options.styleTags[t];n.context.memo("button.style."+i,function(){return e.button({className:"note-btn-style-"+i,contents:'<div data-value="'+i+'">'+i.toUpperCase()+"</div>",tooltip:e.lang.style[i],click:e.context.createInvokeHandler("editor.formatBlock")}).render()})},n=this,i=0,r=this.options.styleTags.length;i<r;i++)o(i);this.context.memo("button.bold",function(){return e.button({className:"note-btn-bold",contents:e.ui.icon(e.options.icons.bold),tooltip:e.lang.font.bold+e.representShortcut("bold"),click:e.context.createInvokeHandlerAndUpdateState("editor.bold")}).render()}),this.context.memo("button.italic",function(){return e.button({className:"note-btn-italic",contents:e.ui.icon(e.options.icons.italic),tooltip:e.lang.font.italic+e.representShortcut("italic"),click:e.context.createInvokeHandlerAndUpdateState("editor.italic")}).render()}),this.context.memo("button.underline",function(){return e.button({className:"note-btn-underline",contents:e.ui.icon(e.options.icons.underline),tooltip:e.lang.font.underline+e.representShortcut("underline"),click:e.context.createInvokeHandlerAndUpdateState("editor.underline")}).render()}),this.context.memo("button.clear",function(){return e.button({contents:e.ui.icon(e.options.icons.eraser),tooltip:e.lang.font.clear+e.representShortcut("removeFormat"),click:e.context.createInvokeHandler("editor.removeFormat")}).render()}),this.context.memo("button.strikethrough",function(){return e.button({className:"note-btn-strikethrough",contents:e.ui.icon(e.options.icons.strikethrough),tooltip:e.lang.font.strikethrough+e.representShortcut("strikethrough"),click:e.context.createInvokeHandlerAndUpdateState("editor.strikethrough")}).render()}),this.context.memo("button.superscript",function(){return e.button({className:"note-btn-superscript",contents:e.ui.icon(e.options.icons.superscript),tooltip:e.lang.font.superscript,click:e.context.createInvokeHandlerAndUpdateState("editor.superscript")}).render()}),this.context.memo("button.subscript",function(){return e.button({className:"note-btn-subscript",contents:e.ui.icon(e.options.icons.subscript),tooltip:e.lang.font.subscript,click:e.context.createInvokeHandlerAndUpdateState("editor.subscript")}).render()}),this.context.memo("button.fontname",function(){var o=e.context.invoke("editor.currentStyle");return t.each(o["font-family"].split(","),function(o,n){n=n.trim().replace(/['"]+/g,""),e.isFontDeservedToAdd(n)&&-1===t.inArray(n,e.options.fontNames)&&e.options.fontNames.push(n)}),e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents('<span class="note-current-fontname"/>',e.options),tooltip:e.lang.font.name,data:{toggle:"dropdown"}}),e.ui.dropdownCheck({className:"dropdown-fontname",checkClassName:e.options.icons.menuCheck,items:e.options.fontNames.filter(e.isFontInstalled.bind(e)),title:e.lang.font.name,template:function(t){return"<span style=\"font-family: '"+t+"'\">"+t+"</span>"},click:e.context.createInvokeHandlerAndUpdateState("editor.fontName")})]).render()}),this.context.memo("button.fontsize",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents('<span class="note-current-fontsize"/>',e.options),tooltip:e.lang.font.size,data:{toggle:"dropdown"}}),e.ui.dropdownCheck({className:"dropdown-fontsize",checkClassName:e.options.icons.menuCheck,items:e.options.fontSizes,title:e.lang.font.size,click:e.context.createInvokeHandlerAndUpdateState("editor.fontSize")})]).render()}),this.context.memo("button.color",function(){return e.ui.buttonGroup({className:"note-color",children:[e.button({className:"note-current-color-button",contents:e.ui.icon(e.options.icons.font+" note-recent-color"),tooltip:e.lang.color.recent,click:function(o){var n=t(o.currentTarget);e.context.invoke("editor.color",{backColor:n.attr("data-backColor"),foreColor:n.attr("data-foreColor")})},callback:function(t){t.find(".note-recent-color").css("background-color","#FFFF00"),t.attr("data-backColor","#FFFF00")}}),e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents("",e.options),tooltip:e.lang.color.more,data:{toggle:"dropdown"}}),e.ui.dropdown({items:['<div class="note-palette">',' <div class="note-palette-title">'+e.lang.color.background+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-light" data-event="backColor" data-value="inherit">',e.lang.color.transparent," </button>"," </div>",' <div class="note-holder" data-event="backColor"/>',"</div>",'<div class="note-palette">',' <div class="note-palette-title">'+e.lang.color.foreground+"</div>"," <div>",' <button type="button" class="note-color-reset btn btn-light" data-event="removeFormat" data-value="foreColor">',e.lang.color.resetToDefault," </button>"," </div>",' <div class="note-holder" data-event="foreColor"/>',"</div>"].join(""),callback:function(o){o.find(".note-holder").each(function(o,n){var i=t(n);i.append(e.ui.palette({colors:e.options.colors,colorsName:e.options.colorsName,eventName:i.data("event"),container:e.options.container,tooltip:e.options.tooltip}).render())})},click:function(o){var n=t(o.target),i=n.data("event"),r=n.data("value");if(i&&r){var s="backColor"===i?"background-color":"color",a=n.closest(".note-color").find(".note-recent-color"),l=n.closest(".note-color").find(".note-current-color-button");a.css(s,r),l.attr("data-"+i,r),e.context.invoke("editor."+i,r)}}})]}).render()}),this.context.memo("button.ul",function(){return e.button({contents:e.ui.icon(e.options.icons.unorderedlist),tooltip:e.lang.lists.unordered+e.representShortcut("insertUnorderedList"),click:e.context.createInvokeHandler("editor.insertUnorderedList")}).render()}),this.context.memo("button.ol",function(){return e.button({contents:e.ui.icon(e.options.icons.orderedlist),tooltip:e.lang.lists.ordered+e.representShortcut("insertOrderedList"),click:e.context.createInvokeHandler("editor.insertOrderedList")}).render()});var s=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")}),l=this.button({contents:this.ui.icon(this.options.icons.alignRight),tooltip:this.lang.paragraph.right+this.representShortcut("justifyRight"),click:this.context.createInvokeHandler("editor.justifyRight")}),c=this.button({contents:this.ui.icon(this.options.icons.alignJustify),tooltip:this.lang.paragraph.justify+this.representShortcut("justifyFull"),click:this.context.createInvokeHandler("editor.justifyFull")}),d=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",C.invoke(s,"render")),this.context.memo("button.justifyCenter",C.invoke(a,"render")),this.context.memo("button.justifyRight",C.invoke(l,"render")),this.context.memo("button.justifyFull",C.invoke(c,"render")),this.context.memo("button.outdent",C.invoke(d,"render")),this.context.memo("button.indent",C.invoke(u,"render")),this.context.memo("button.paragraph",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.alignLeft),e.options),tooltip:e.lang.paragraph.paragraph,data:{toggle:"dropdown"}}),e.ui.dropdown([e.ui.buttonGroup({className:"note-align",children:[s,a,l,c]}),e.ui.buttonGroup({className:"note-list",children:[d,u]})])]).render()}),this.context.memo("button.height",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.textHeight),e.options),tooltip:e.lang.font.height,data:{toggle:"dropdown"}}),e.ui.dropdownCheck({items:e.options.lineHeights,checkClassName:e.options.icons.menuCheck,className:"dropdown-line-height",title:e.lang.font.height,click:e.context.createInvokeHandler("editor.lineHeight")})]).render()}),this.context.memo("button.table",function(){return e.ui.buttonGroup([e.button({className:"dropdown-toggle",contents:e.ui.dropdownButtonContents(e.ui.icon(e.options.icons.table),e.options),tooltip:e.lang.table.table,data:{toggle:"dropdown"}}),e.ui.dropdown({title:e.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(t){t.find(".note-dimension-picker-mousecatcher").css({width:e.options.insertTableMaxSize.col+"em",height:e.options.insertTableMaxSize.row+"em"}).mousedown(e.context.createInvokeHandler("editor.insertTable")).on("mousemove",e.tableMoveHandler.bind(e))}}).render()}),this.context.memo("button.link",function(){return e.button({contents:e.ui.icon(e.options.icons.link),tooltip:e.lang.link.link+e.representShortcut("linkDialog.show"),click:e.context.createInvokeHandler("linkDialog.show")}).render()}),this.context.memo("button.picture",function(){return e.button({contents:e.ui.icon(e.options.icons.picture),tooltip:e.lang.image.image,click:e.context.createInvokeHandler("imageDialog.show")}).render()}),this.context.memo("button.video",function(){return e.button({contents:e.ui.icon(e.options.icons.video),tooltip:e.lang.video.video,click:e.context.createInvokeHandler("videoDialog.show")}).render()}),this.context.memo("button.hr",function(){return e.button({contents:e.ui.icon(e.options.icons.minus),tooltip:e.lang.hr.insert+e.representShortcut("insertHorizontalRule"),click:e.context.createInvokeHandler("editor.insertHorizontalRule")}).render()}),this.context.memo("button.fullscreen",function(){return e.button({className:"btn-fullscreen",contents:e.ui.icon(e.options.icons.arrowsAlt),tooltip:e.lang.options.fullscreen,click:e.context.createInvokeHandler("fullscreen.toggle")}).render()}),this.context.memo("button.codeview",function(){return e.button({className:"btn-codeview",contents:e.ui.icon(e.options.icons.code),tooltip:e.lang.options.codeview,click:e.context.createInvokeHandler("codeview.toggle")}).render()}),this.context.memo("button.redo",function(){return e.button({contents:e.ui.icon(e.options.icons.redo),tooltip:e.lang.history.redo+e.representShortcut("redo"),click:e.context.createInvokeHandler("editor.redo")}).render()}),this.context.memo("button.undo",function(){return e.button({contents:e.ui.icon(e.options.icons.undo),tooltip:e.lang.history.undo+e.representShortcut("undo"),click:e.context.createInvokeHandler("editor.undo")}).render()}),this.context.memo("button.help",function(){return e.button({contents:e.ui.icon(e.options.icons.question),tooltip:e.lang.options.help,click:e.context.createInvokeHandler("helpDialog.show")}).render()})},e.prototype.addImagePopoverButtons=function(){var t=this;this.context.memo("button.imageSize100",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.imageSize50",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.imageSize25",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.floatLeft",function(){return t.button({contents:t.ui.icon(t.options.icons.alignLeft),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.alignRight),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.alignJustify),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()})},e.prototype.addLinkPopoverButtons=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()})},e.prototype.addTablePopoverButtons=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()})},e.prototype.build=function(e,o){for(var n=0,i=o.length;n<i;n++){for(var r=o[n],s=t.isArray(r)?r[0]:r,a=t.isArray(r)?1===r.length?[r[0]]:r[1]:[r],l=this.ui.buttonGroup({className:"note-"+s}).render(),c=0,d=a.length;c<d;c++){var u=this.context.memo("button."+a[c]);u&&l.append("function"==typeof u?u(this.context):u)}l.appendTo(e)}},e.prototype.updateCurrentStyle=function(e){var o=this,n=e||this.$toolbar,i=this.context.invoke("editor.currentStyle");if(this.updateBtnStates(n,{".note-btn-bold":function(){return"bold"===i["font-bold"]},".note-btn-italic":function(){return"italic"===i["font-italic"]},".note-btn-underline":function(){return"underline"===i["font-underline"]},".note-btn-subscript":function(){return"subscript"===i["font-subscript"]},".note-btn-superscript":function(){return"superscript"===i["font-superscript"]},".note-btn-strikethrough":function(){return"strikethrough"===i["font-strikethrough"]}}),i["font-family"]){var r=i["font-family"].split(",").map(function(t){return t.replace(/[\'\"]/g,"").replace(/\s+$/,"").replace(/^\s+/,"")}),s=N.find(r,this.isFontInstalled.bind(this));n.find(".dropdown-fontname a").each(function(e,o){var n=t(o),i=n.data("value")+""==s+"";n.toggleClass("checked",i)}),n.find(".note-current-fontname").text(s).css("font-family",s)}if(i["font-size"]){var a=i["font-size"];n.find(".dropdown-fontsize a").each(function(e,o){var n=t(o),i=n.data("value")+""==a+"";n.toggleClass("checked",i)}),n.find(".note-current-fontsize").text(a)}if(i["line-height"]){var l=i["line-height"];n.find(".dropdown-line-height li a").each(function(e,n){var i=t(n).data("value")+""==l+"";o.className=i?"checked":""})}},e.prototype.updateBtnStates=function(e,o){var n=this;t.each(o,function(t,o){n.ui.toggleBtnActive(e.find(t),o())})},e.prototype.tableMoveHandler=function(e){var o,n=t(e.target.parentNode),i=n.next(),r=n.find(".note-dimension-picker-mousecatcher"),s=n.find(".note-dimension-picker-highlighted"),a=n.find(".note-dimension-picker-unhighlighted");if(void 0===e.offsetX){var l=t(e.target).offset();o={x:e.pageX-l.left,y:e.pageY-l.top}}else o={x:e.offsetX,y:e.offsetY};var c=Math.ceil(o.x/18)||1,d=Math.ceil(o.y/18)||1;s.css({width:c+"em",height:d+"em"}),r.data("value",c+"x"+d),c>3&&c<this.options.insertTableMaxSize.col&&a.css({width:c+1+"em"}),d>3&&d<this.options.insertTableMaxSize.row&&a.css({height:d+1+"em"}),i.html(c+" x "+d)},e}(),te=function(){function e(e){this.context=e,this.$window=t(window),this.$document=t(document),this.ui=t.summernote.ui,this.$note=e.layoutInfo.note,this.$editor=e.layoutInfo.editor,this.$toolbar=e.layoutInfo.toolbar,this.options=e.options,this.followScroll=this.followScroll.bind(this)}return e.prototype.shouldInitialize=function(){return!this.options.airMode},e.prototype.initialize=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)},e.prototype.destroy=function(){this.$toolbar.children().remove(),this.options.followingToolbar&&this.$window.off("scroll resize",this.followScroll)},e.prototype.followScroll=function(){if(this.$editor.hasClass("fullscreen"))return!1;var e=this.$toolbar.parent(".note-toolbar-wrapper"),o=this.$editor.outerHeight(),n=this.$editor.width(),i=this.$toolbar.height();e.css({height:i});var r=0;this.options.otherStaticBar&&(r=t(this.options.otherStaticBar).outerHeight());var s=this.$document.scrollTop(),a=this.$editor.offset().top;s>a-r&&s<a+o-r-i?this.$toolbar.css({position:"fixed",top:r,width:n}):this.$toolbar.css({position:"relative",top:0,width:"100%"})},e.prototype.changeContainer=function(t){t?this.$toolbar.prependTo(this.$editor):this.options.toolbarContainer&&this.$toolbar.appendTo(this.options.toolbarContainer)},e.prototype.updateFullscreen=function(t){this.ui.toggleBtnActive(this.$toolbar.find(".btn-fullscreen"),t),this.changeContainer(t)},e.prototype.updateCodeview=function(t){this.ui.toggleBtnActive(this.$toolbar.find(".btn-codeview"),t),t?this.deactivate():this.activate()},e.prototype.activate=function(t){var e=this.$toolbar.find("button");t||(e=e.not(".btn-codeview")),this.ui.toggleBtn(e,!0)},e.prototype.deactivate=function(t){var e=this.$toolbar.find("button");t||(e=e.not(".btn-codeview")),this.ui.toggleBtn(e,!1)},e}(),ee=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(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"])}return e.prototype.initialize=function(){var e=this.options.dialogsInBody?this.$body:this.$editor,o=['<div class="form-group note-form-group">','<label class="note-form-label">'+this.lang.link.textToDisplay+"</label>",'<input class="note-link-text form-control note-form-control note-input" type="text" />',"</div>",'<div class="form-group note-form-group">','<label class="note-form-label">'+this.lang.link.url+"</label>",'<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />',"</div>",this.options.disableLinkTarget?"":t("<div/>").append(this.ui.checkbox({id:"sn-checkbox-open-in-new-window",text:this.lang.link.openInNewWindow,checked:!0}).render()).html()].join(""),n='<button type="submit" href="#" class="btn btn-primary note-btn note-btn-primary note-link-btn" disabled>'+this.lang.link.insert+"</button>";this.$dialog=this.ui.dialog({className:"link-dialog",title:this.lang.link.insert,fade:this.options.dialogsFade,body:o,footer:n}).render().appendTo(e)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.bindEnterKey=function(t,e){t.on("keypress",function(t){t.keyCode===At.code.ENTER&&(t.preventDefault(),e.trigger("click"))})},e.prototype.toggleLinkBtn=function(t,e,o){this.ui.toggleBtn(t,e.val()&&o.val())},e.prototype.showLinkDialog=function(e){var o=this;return t.Deferred(function(t){var n=o.$dialog.find(".note-link-text"),i=o.$dialog.find(".note-link-url"),r=o.$dialog.find(".note-link-btn"),s=o.$dialog.find("input[type=checkbox]");o.ui.onDialogShown(o.$dialog,function(){o.context.triggerEvent("dialog.shown"),e.url||(e.url=e.text),n.val(e.text);var a=function(){o.toggleLinkBtn(r,n,i),e.text=n.val()};n.on("input",a).on("paste",function(){setTimeout(a,0)});var l=function(){o.toggleLinkBtn(r,n,i),e.text||n.val(i.val())};i.on("input",l).on("paste",function(){setTimeout(l,0)}).val(e.url),z.isSupportTouch||i.trigger("focus"),o.toggleLinkBtn(r,n,i),o.bindEnterKey(i,r),o.bindEnterKey(n,r);var c=void 0!==e.isNewWindow?e.isNewWindow:o.context.options.linkTargetBlank;s.prop("checked",c),r.one("click",function(r){r.preventDefault(),t.resolve({range:e.range,url:i.val(),text:n.val(),isNewWindow:s.is(":checked")}),o.ui.hideDialog(o.$dialog)})}),o.ui.onDialogHidden(o.$dialog,function(){n.off("input paste keypress"),i.off("input paste keypress"),r.off("click"),"pending"===t.state()&&t.reject()}),o.ui.showDialog(o.$dialog)}).promise()},e.prototype.show=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")})},e}(),oe=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.options=e.options,this.events={"summernote.keyup summernote.mouseup summernote.change summernote.scroll":function(){o.update()},"summernote.disable summernote.dialog.shown":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return!N.isEmpty(this.options.popover.link)},e.prototype.initialize=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> </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)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(){if(this.context.invoke("editor.hasFocus")){var e=this.context.invoke("editor.createRange");if(e.isCollapsed()&&e.isOnAnchor()){var o=Nt.ancestor(e.sc,Nt.isAnchor),n=t(o).attr("href");this.$popover.find("a").attr("href",n).html(n);var i=Nt.posFromPlaceholder(o);this.$popover.css({display:"block",left:i.left,top:i.top})}else this.hide()}else this.hide()},e.prototype.hide=function(){this.$popover.hide()},e}(),ne=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(document.body),this.$editor=e.layoutInfo.editor,this.options=e.options,this.lang=this.options.langInfo}return e.prototype.initialize=function(){var t=this.options.dialogsInBody?this.$body:this.$editor,e="";if(this.options.maximumImageFileSize){var o=Math.floor(Math.log(this.options.maximumImageFileSize)/Math.log(1024)),n=1*(this.options.maximumImageFileSize/Math.pow(1024,o)).toFixed(2)+" "+" KMGTP"[o]+"B";e="<small>"+this.lang.image.maximumFileSize+" : "+n+"</small>"}var i=['<div class="form-group note-form-group note-group-select-from-files">','<label class="note-form-label">'+this.lang.image.selectFromFiles+"</label>",'<input class="note-image-input note-form-control note-input" ',' type="file" name="files" accept="image/*" multiple="multiple" />',e,"</div>",'<div class="form-group note-group-image-url" style="overflow:auto;">','<label class="note-form-label">'+this.lang.image.url+"</label>",'<input class="note-image-url form-control note-form-control note-input ',' col-md-12" type="text" />',"</div>"].join(""),r='<button type="submit" href="#" class="btn btn-primary note-btn note-btn-primary note-image-btn" disabled>'+this.lang.image.insert+"</button>";this.$dialog=this.ui.dialog({title:this.lang.image.insert,fade:this.options.dialogsFade,body:i,footer:r}).render().appendTo(t)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.bindEnterKey=function(t,e){t.on("keypress",function(t){t.keyCode===At.code.ENTER&&(t.preventDefault(),e.trigger("click"))})},e.prototype.show=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.context.invoke("editor.insertImage",e):t.context.invoke("editor.insertImagesOrCallback",e)}).fail(function(){t.context.invoke("editor.restoreRange")})},e.prototype.showImageDialog=function(){var e=this;return t.Deferred(function(t){var o=e.$dialog.find(".note-image-input"),n=e.$dialog.find(".note-image-url"),i=e.$dialog.find(".note-image-btn");e.ui.onDialogShown(e.$dialog,function(){e.context.triggerEvent("dialog.shown"),o.replaceWith(o.clone().on("change",function(e){t.resolve(e.target.files||e.target.value)}).val("")),i.click(function(e){e.preventDefault(),t.resolve(n.val())}),n.on("keyup paste",function(){var t=n.val();e.ui.toggleBtn(i,t)}).val(""),z.isSupportTouch||n.trigger("focus"),e.bindEnterKey(n,i)}),e.ui.onDialogHidden(e.$dialog,function(){o.off("change"),n.off("keyup paste keypress"),i.off("click"),"pending"===t.state()&&t.reject()}),e.ui.showDialog(e.$dialog)})},e}(),ie=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.editable=e.layoutInfo.editable[0],this.options=e.options,this.events={"summernote.disable":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return!N.isEmpty(this.options.popover.image)},e.prototype.initialize=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)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(t){if(Nt.isImg(t)){var e=Nt.posFromPlaceholder(t),o=Nt.posFromPlaceholder(this.editable);this.$popover.css({display:"block",left:this.options.popatmouse?event.pageX-20:e.left,top:this.options.popatmouse?event.pageY:Math.min(e.top,o.top)})}else this.hide()},e.prototype.hide=function(){this.$popover.hide()},e}(),re=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.options=e.options,this.events={"summernote.mousedown":function(t,e){o.update(e.target)},"summernote.keyup summernote.scroll summernote.change":function(){o.update()},"summernote.disable":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return!N.isEmpty(this.options.popover.table)},e.prototype.initialize=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),z.isFF&&document.execCommand("enableInlineTableEditing",!1,!1)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(t){if(this.context.isDisabled())return!1;var e=Nt.isCell(t);if(e){var o=Nt.posFromPlaceholder(t);this.$popover.css({display:"block",left:o.left,top:o.top})}else this.hide();return e},e.prototype.hide=function(){this.$popover.hide()},e}(),se=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(document.body),this.$editor=e.layoutInfo.editor,this.options=e.options,this.lang=this.options.langInfo}return e.prototype.initialize=function(){var t=this.options.dialogsInBody?this.$body:this.$editor,e=['<div class="form-group note-form-group row-fluid">','<label class="note-form-label">'+this.lang.video.url+' <small class="text-muted">'+this.lang.video.providers+"</small></label>",'<input class="note-video-url form-control note-form-control note-input" type="text" />',"</div>"].join(""),o='<button type="submit" href="#" class="btn btn-primary note-btn note-btn-primary note-video-btn" disabled>'+this.lang.video.insert+"</button>";this.$dialog=this.ui.dialog({title:this.lang.video.insert,fade:this.options.dialogsFade,body:e,footer:o}).render().appendTo(t)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.bindEnterKey=function(t,e){t.on("keypress",function(t){t.keyCode===At.code.ENTER&&(t.preventDefault(),e.trigger("click"))})},e.prototype.createVideoNode=function(e){var o,n=e.match(/^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/),i=e.match(/(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/),r=e.match(/\/\/vine\.co\/v\/([a-zA-Z0-9]+)/),s=e.match(/\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/),a=e.match(/.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/),l=e.match(/\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/),c=e.match(/\/\/v\.qq\.com.*?vid=(.+)/),d=e.match(/\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/),u=e.match(/^.+.(mp4|m4v)$/),h=e.match(/^.+.(ogg|ogv)$/),p=e.match(/^.+.(webm)$/);if(n&&11===n[1].length){var f=n[1];o=t("<iframe>").attr("frameborder",0).attr("src","//www.youtube.com/embed/"+f).attr("width","640").attr("height","360")}else if(i&&i[0].length)o=t("<iframe>").attr("frameborder",0).attr("src","https://instagram.com/p/"+i[1]+"/embed/").attr("width","612").attr("height","710").attr("scrolling","no").attr("allowtransparency","true");else if(r&&r[0].length)o=t("<iframe>").attr("frameborder",0).attr("src",r[0]+"/embed/simple").attr("width","600").attr("height","600").attr("class","vine-embed");else if(s&&s[3].length)o=t("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("src","//player.vimeo.com/video/"+s[3]).attr("width","640").attr("height","360");else if(a&&a[2].length)o=t("<iframe>").attr("frameborder",0).attr("src","//www.dailymotion.com/embed/video/"+a[2]).attr("width","640").attr("height","360");else if(l&&l[1].length)o=t("<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||d&&d[2].length){var m=c&&c[1].length?c[1]:d[2];o=t("<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>").attr("frameborder",0).attr("height","310").attr("width","500").attr("src","http://v.qq.com/iframe/player.html?vid="+m+"&auto=0")}else{if(!(u||h||p))return!1;o=t("<video controls>").attr("src",e).attr("width","640").attr("height","360")}return o.addClass("note-video-clip"),o[0]},e.prototype.show=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 o=t.createVideoNode(e);o&&t.context.invoke("editor.insertNode",o)}).fail(function(){t.context.invoke("editor.restoreRange")})},e.prototype.showVideoDialog=function(e){var o=this;return t.Deferred(function(t){var n=o.$dialog.find(".note-video-url"),i=o.$dialog.find(".note-video-btn");o.ui.onDialogShown(o.$dialog,function(){o.context.triggerEvent("dialog.shown"),n.val(e).on("input",function(){o.ui.toggleBtn(i,n.val())}),z.isSupportTouch||n.trigger("focus"),i.click(function(e){e.preventDefault(),t.resolve(n.val())}),o.bindEnterKey(n,i)}),o.ui.onDialogHidden(o.$dialog,function(){n.off("input"),i.off("click"),"pending"===t.state()&&t.reject()}),o.ui.showDialog(o.$dialog)})},e}(),ae=function(){function e(e){this.context=e,this.ui=t.summernote.ui,this.$body=t(document.body),this.$editor=e.layoutInfo.editor,this.options=e.options,this.lang=this.options.langInfo}return e.prototype.initialize=function(){var t=this.options.dialogsInBody?this.$body:this.$editor,e=['<p class="text-center">','<a href="http://summernote.org/" target="_blank">Summernote 0.8.10</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)},e.prototype.destroy=function(){this.ui.hideDialog(this.$dialog),this.$dialog.remove()},e.prototype.createShortcutList=function(){var e=this,o=this.options.keyMap[z.isMac?"mac":"pc"];return Object.keys(o).map(function(n){var i=o[n],r=t('<div><div class="help-list-item"/></div>');return r.append(t("<label><kbd>"+n+"</kdb></label>").css({width:180,"margin-right":10})).append(t("<span/>").html(e.context.memo("help."+i)||i)),r.html()}).join("")},e.prototype.showHelpDialog=function(){var e=this;return t.Deferred(function(t){e.ui.onDialogShown(e.$dialog,function(){e.context.triggerEvent("dialog.shown"),t.resolve()}),e.ui.showDialog(e.$dialog)}).promise()},e.prototype.show=function(){var t=this;this.context.invoke("editor.saveRange"),this.showHelpDialog().then(function(){t.context.invoke("editor.restoreRange")})},e}(),le=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.options=e.options,this.events={"summernote.keyup summernote.mouseup summernote.scroll":function(){o.update()},"summernote.disable summernote.change summernote.dialog.shown":function(){o.hide()},"summernote.focusout":function(t,e){z.isFF||e.relatedTarget&&Nt.ancestor(e.relatedTarget,C.eq(o.$popover[0]))||o.hide()}}}return e.prototype.shouldInitialize=function(){return this.options.airMode&&!N.isEmpty(this.options.popover.air)},e.prototype.initialize=function(){this.$popover=this.ui.popover({className:"note-air-popover"}).render().appendTo(this.options.container);var t=this.$popover.find(".popover-content");this.context.invoke("buttons.build",t,this.options.popover.air)},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.update=function(){var t=this.context.invoke("editor.currentStyle");if(t.range&&!t.range.isCollapsed()){var e=N.last(t.range.getClientRects());if(e){var o=C.rect2bnd(e);this.$popover.css({display:"block",left:Math.max(o.left+o.width/2,0)-20,top:o.top+o.height}),this.context.invoke("buttons.updateCurrentStyle",this.$popover)}}else this.hide()},e.prototype.hide=function(){this.$popover.hide()},e}(),ce=function(){function e(e){var o=this;this.context=e,this.ui=t.summernote.ui,this.$editable=e.layoutInfo.editable,this.options=e.options,this.hint=this.options.hint||[],this.direction=this.options.hintDirection||"bottom",this.hints=t.isArray(this.hint)?this.hint:[this.hint],this.events={"summernote.keyup":function(t,e){e.isDefaultPrevented()||o.handleKeyup(e)},"summernote.keydown":function(t,e){o.handleKeydown(e)},"summernote.disable summernote.dialog.shown":function(){o.hide()}}}return e.prototype.shouldInitialize=function(){return this.hints.length>0},e.prototype.initialize=function(){var e=this;this.lastWordRange=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.$content.find(".active").removeClass("active"),t(e).addClass("active"),e.replace()})},e.prototype.destroy=function(){this.$popover.remove()},e.prototype.selectItem=function(t){this.$content.find(".active").removeClass("active"),t.addClass("active"),this.$content[0].scrollTop=t[0].offsetTop-this.$content.innerHeight()/2},e.prototype.moveDown=function(){var t=this.$content.find(".note-hint-item.active"),e=t.next();if(e.length)this.selectItem(e);else{var o=t.parent().next();o.length||(o=this.$content.find(".note-hint-group").first()),this.selectItem(o.find(".note-hint-item").first())}},e.prototype.moveUp=function(){var t=this.$content.find(".note-hint-item.active"),e=t.prev();if(e.length)this.selectItem(e);else{var o=t.parent().prev();o.length||(o=this.$content.find(".note-hint-group").last()),this.selectItem(o.find(".note-hint-item").last())}},e.prototype.replace=function(){var t=this.$content.find(".note-hint-item.active");if(t.length){var e=this.nodeFromItem(t);this.lastWordRange.insertNode(e),Ht.createFromNode(e).collapse().select(),this.lastWordRange=null,this.hide(),this.context.triggerEvent("change",this.$editable.html(),this.$editable[0]),this.context.invoke("editor.focus")}},e.prototype.nodeFromItem=function(t){var e=this.hints[t.data("index")],o=t.data("item"),n=e.content?e.content(o):o;return"string"==typeof n&&(n=Nt.createText(n)),n},e.prototype.createItemTemplates=function(e,o){var n=this.hints[e];return o.map(function(o,i){var r=t('<div class="note-hint-item"/>');return r.append(n.template?n.template(o):o+""),r.data({index:e,item:o}),r})},e.prototype.handleKeydown=function(t){this.$popover.is(":visible")&&(t.keyCode===At.code.ENTER?(t.preventDefault(),this.replace()):t.keyCode===At.code.UP?(t.preventDefault(),this.moveUp()):t.keyCode===At.code.DOWN&&(t.preventDefault(),this.moveDown()))},e.prototype.searchKeyword=function(t,e,o){var n=this.hints[t];if(n&&n.match.test(e)&&n.search){var i=n.match.exec(e);n.search(i[1],o)}else o()},e.prototype.createGroup=function(e,o){var n=this,i=t('<div class="note-hint-group note-hint-group-'+e+'"/>');return this.searchKeyword(e,o,function(t){(t=t||[]).length&&(i.html(n.createItemTemplates(e,t)),n.show())}),i},e.prototype.handleKeyup=function(t){var e=this;if(!N.contains([At.code.ENTER,At.code.UP,At.code.DOWN],t.keyCode)){var o=this.context.invoke("editor.createRange").getWordRange(),n=o.toString();if(this.hints.length&&n){this.$content.empty();var i=C.rect2bnd(N.last(o.getClientRects()));i&&(this.$popover.hide(),this.lastWordRange=o,this.hints.forEach(function(t,o){t.match.test(n)&&e.createGroup(o,n).appendTo(e.$content)}),this.$content.find(".note-hint-item:first").addClass("active"),"top"===this.direction?this.$popover.css({left:i.left,top:i.top-this.$popover.outerHeight()-5}):this.$popover.css({left:i.left,top:i.top+i.height+5}))}else this.hide()}},e.prototype.show=function(){this.$popover.show()},e.prototype.hide=function(){this.$popover.hide()},e}(),de=function(){function e(e,o){this.ui=t.summernote.ui,this.$note=e,this.memos={},this.modules={},this.layoutInfo={},this.options=o,this.initialize()}return e.prototype.initialize=function(){return this.layoutInfo=this.ui.createLayout(this.$note,this.options),this._initialize(),this.$note.hide(),this},e.prototype.destroy=function(){this._destroy(),this.$note.removeData("summernote"),this.ui.removeLayout(this.$note,this.layoutInfo)},e.prototype.reset=function(){var t=this.isDisabled();this.code(Nt.emptyPara),this._destroy(),this._initialize(),t&&this.disable()},e.prototype._initialize=function(){var e=this,o=t.extend({},this.options.buttons);Object.keys(o).forEach(function(t){e.memo("button."+t,o[t])});var n=t.extend({},this.options.modules,t.summernote.plugins||{});Object.keys(n).forEach(function(t){e.module(t,n[t],!0)}),Object.keys(this.modules).forEach(function(t){e.initializeModule(t)})},e.prototype._destroy=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)},e.prototype.code=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)},e.prototype.isDisabled=function(){return"false"===this.layoutInfo.editable.attr("contenteditable")},e.prototype.enable=function(){this.layoutInfo.editable.attr("contenteditable",!0),this.invoke("toolbar.activate",!0),this.triggerEvent("disable",!1)},e.prototype.disable=function(){this.invoke("codeview.isActivated")&&this.invoke("codeview.deactivate"),this.layoutInfo.editable.attr("contenteditable",!1),this.invoke("toolbar.deactivate",!0),this.triggerEvent("disable",!0)},e.prototype.triggerEvent=function(){var t=N.head(arguments),e=N.tail(N.from(arguments)),o=this.options.callbacks[C.namespaceToCamel(t,"on")];o&&o.apply(this.$note[0],e),this.$note.trigger("summernote."+t,e)},e.prototype.initializeModule=function(t){var e=this.modules[t];e.shouldInitialize=e.shouldInitialize||C.ok,e.shouldInitialize()&&(e.initialize&&e.initialize(),e.events&&Nt.attachEvents(this.$note,e.events))},e.prototype.module=function(t,e,o){if(1===arguments.length)return this.modules[t];this.modules[t]=new e(this),o||this.initializeModule(t)},e.prototype.removeModule=function(t){var e=this.modules[t];e.shouldInitialize()&&(e.events&&Nt.detachEvents(this.$note,e.events),e.destroy&&e.destroy()),delete this.modules[t]},e.prototype.memo=function(t,e){if(1===arguments.length)return this.memos[t];this.memos[t]=e},e.prototype.removeMemo=function(t){this.memos[t]&&this.memos[t].destroy&&this.memos[t].destroy(),delete this.memos[t]},e.prototype.createInvokeHandlerAndUpdateState=function(t,e){var o=this;return function(n){o.createInvokeHandler(t,e)(n),o.invoke("buttons.updateCurrentStyle")}},e.prototype.createInvokeHandler=function(e,o){var n=this;return function(i){i.preventDefault();var r=t(i.target);n.invoke(e,o||r.closest("[data-value]").data("value"),r)}},e.prototype.invoke=function(){var t=N.head(arguments),e=N.tail(N.from(arguments)),o=t.split("."),n=o.length>1,i=n&&N.head(o),r=n?N.last(o):N.head(o),s=this.modules[i||"editor"];return!i&&this[r]?this[r].apply(this,e):s&&s[r]&&s.shouldInitialize()?s[r].apply(s,e):void 0},e}();t.fn.extend({summernote:function(){var e=t.type(N.head(arguments)),o="string"===e,n="object"===e,i=t.extend({},t.summernote.options,n?N.head(arguments):{});i.langInfo=t.extend(!0,{},t.summernote.lang["en-US"],t.summernote.lang[i.lang]),i.icons=t.extend(!0,{},t.summernote.options.icons,i.icons),i.tooltip="auto"===i.tooltip?!z.isSupportTouch:i.tooltip,this.each(function(e,o){var n=t(o);if(!n.data("summernote")){var r=new de(n,i);n.data("summernote",r),n.data("summernote").triggerEvent("init",r.layoutInfo)}});var r=this.first();if(r.length){var s=r.data("summernote");if(o)return s.invoke.apply(s,N.from(arguments));i.focus&&s.invoke("editor.focus")}return this}}),t.summernote=t.extend(t.summernote,{version:"0.8.10",ui:y,dom:Nt,plugins:{},options:{modules:{editor:jt,clipboard:qt,dropzone:Kt,codeview:Vt,statusbar:Wt,fullscreen:Gt,handle:_t,hintPopover:ce,autoLink:Yt,autoSync:Qt,placeholder:Jt,buttons:Xt,toolbar:te,linkDialog:ee,linkPopover:oe,imageDialog:ne,imagePopover:ie,tablePopover:re,videoDialog:se,helpDialog:ae,airPopover:le},buttons:{},lang:"en-US",followingToolbar:!0,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:[["imagesize",["imageSize100","imageSize50","imageSize25"]],["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"]]]},airMode:!1,width:null,height:null,linkTargetBlank:!0,focus:!1,tabSize:4,styleWithSpan:!0,shortcuts:!0,textareaAutoSync:!0,hintDirection:"bottom",tooltip:"auto",container:"body",maxTextLength:0,styleTags:["p","blockquote","pre","h1","h2","h3","h4","h5","h6"],fontNames:["Arial","Arial Black","Comic Sans MS","Courier New","Helvetica Neue","Helvetica","Impact","Lucida Grande","Tahoma","Times New Roman","Verdana"],fontSizes:["8","9","10","11","12","14","18","24","36"],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"]],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:{onInit:null,onFocus:null,onBlur:null,onBlurCodeview:null,onEnter:null,onKeyup:null,onKeydown:null,onImageUpload:null,onImageUploadError:null},codemirror:{mode:"text/html",htmlMode:!0,lineNumbers:!0},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",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",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"}}})});PKf[�\*�O�����dist/summernote-bs4.js.mapnu�[���{"version":3,"file":"summernote-bs4.js","sources":["../src/js/base/renderer.js","../src/js/bs4/ui.js","../src/js/base/core/func.js","../src/js/base/core/lists.js","../src/js/base/core/env.js","../src/js/base/core/dom.js","../src/js/base/summernote-en-US.js","../src/js/base/core/key.js","../src/js/base/core/range.js","../src/js/base/core/async.js","../src/js/base/editing/History.js","../src/js/base/editing/Style.js","../src/js/base/editing/Bullet.js","../src/js/base/editing/Typing.js","../src/js/base/editing/Table.js","../src/js/base/module/Editor.js","../src/js/base/module/Clipboard.js","../src/js/base/module/Dropzone.js","../src/js/base/module/Codeview.js","../src/js/base/module/Statusbar.js","../src/js/base/module/Fullscreen.js","../src/js/base/module/Handle.js","../src/js/base/module/AutoLink.js","../src/js/base/module/AutoSync.js","../src/js/base/module/Placeholder.js","../src/js/base/module/Buttons.js","../src/js/base/module/Toolbar.js","../src/js/base/module/LinkDialog.js","../src/js/base/module/LinkPopover.js","../src/js/base/module/ImageDialog.js","../src/js/base/module/ImagePopover.js","../src/js/base/module/TablePopover.js","../src/js/base/module/VideoDialog.js","../src/js/base/module/HelpDialog.js","../src/js/base/module/AirPopover.js","../src/js/base/module/HintPopover.js","../src/js/base/Context.js","../src/js/summernote.js","../src/js/bs4/settings.js"],"sourcesContent":["import $ from 'jquery';\n\nclass Renderer {\n constructor(markup, children, options, callback) {\n this.markup = markup;\n this.children = children;\n this.options = options;\n this.callback = callback;\n }\n\n render($parent) {\n const $node = $(this.markup);\n\n if (this.options && this.options.contents) {\n $node.html(this.options.contents);\n }\n\n if (this.options && this.options.className) {\n $node.addClass(this.options.className);\n }\n\n if (this.options && this.options.data) {\n $.each(this.options.data, (k, v) => {\n $node.attr('data-' + k, v);\n });\n }\n\n if (this.options && this.options.click) {\n $node.on('click', this.options.click);\n }\n\n if (this.children) {\n const $container = $node.find('.note-children-container');\n this.children.forEach((child) => {\n child.render($container.length ? $container : $node);\n });\n }\n\n if (this.callback) {\n this.callback($node, this.options);\n }\n\n if (this.options && this.options.callback) {\n this.options.callback($node);\n }\n\n if ($parent) {\n $parent.append($node);\n }\n\n return $node;\n }\n}\n\nexport default {\n create: (markup, callback) => {\n return () => {\n const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0];\n let children = $.isArray(arguments[0]) ? arguments[0] : [];\n if (options && options.children) {\n children = options.children;\n }\n return new Renderer(markup, children, options, callback);\n };\n }\n};\n","import $ from 'jquery';\nimport renderer from '../base/renderer';\n\nconst editor = renderer.create('<div class=\"note-editor note-frame card\"/>');\nconst toolbar = renderer.create('<div class=\"note-toolbar-wrapper\"><div class=\"note-toolbar card-header\" role=\"toolbar\"></div></div>');\nconst editingArea = renderer.create('<div class=\"note-editing-area\"/>');\nconst codable = renderer.create('<textarea class=\"note-codable\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst editable = renderer.create('<div class=\"note-editable card-block\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst statusbar = renderer.create([\n '<output class=\"note-status-output\" aria-live=\"polite\"/>',\n '<div class=\"note-statusbar\" role=\"status\">',\n ' <output class=\"note-status-output\" aria-live=\"polite\"></output>',\n ' <div class=\"note-resizebar\" role=\"seperator\" aria-orientation=\"horizontal\" aria-label=\"Resize\">',\n ' <div class=\"note-icon-bar\"/>',\n ' <div class=\"note-icon-bar\"/>',\n ' <div class=\"note-icon-bar\"/>',\n ' </div>',\n '</div>'\n].join(''));\n\nconst airEditor = renderer.create('<div class=\"note-editor\"/>');\nconst airEditable = renderer.create([\n '<output class=\"note-status-output\" aria-live=\"polite\"/>',\n '<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>'\n].join(''));\n\nconst buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\">');\n\nconst dropdown = renderer.create('<div class=\"dropdown-menu\" role=\"list\">', function($node, options) {\n const markup = $.isArray(options.items) ? options.items.map(function(item) {\n const value = (typeof item === 'string') ? item : (item.value || '');\n const content = options.template ? options.template(item) : item;\n const option = (typeof item === 'object') ? item.option : undefined;\n\n const dataValue = 'data-value=\"' + value + '\"';\n const dataOption = (option !== undefined) ? ' data-option=\"' + option + '\"' : '';\n return '<a class=\"dropdown-item\" href=\"#\" ' + (dataValue + dataOption) + ' role=\"listitem\" aria-label=\"' + item + '\">' + content + '</a>';\n }).join('') : options.items;\n\n $node.html(markup).attr({'aria-label': options.title});\n});\n\nconst dropdownButtonContents = function(contents) {\n return contents;\n};\n\nconst dropdownCheck = renderer.create('<div class=\"dropdown-menu note-check\" role=\"list\">', function($node, options) {\n const markup = $.isArray(options.items) ? options.items.map(function(item) {\n const value = (typeof item === 'string') ? item : (item.value || '');\n const content = options.template ? options.template(item) : item;\n return '<a class=\"dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\">' + icon(options.checkClassName) + ' ' + content + '</a>';\n }).join('') : options.items;\n $node.html(markup).attr({'aria-label': options.title});\n});\n\nconst palette = renderer.create('<div class=\"note-color-palette\"/>', function($node, options) {\n const contents = [];\n for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n const eventName = options.eventName;\n const colors = options.colors[row];\n const colorsName = options.colorsName[row];\n const buttons = [];\n for (let col = 0, colSize = colors.length; col < colSize; col++) {\n const color = colors[col];\n const colorName = colorsName[col];\n buttons.push([\n '<button type=\"button\" class=\"note-color-btn\"',\n 'style=\"background-color:', color, '\" ',\n 'data-event=\"', eventName, '\" ',\n 'data-value=\"', color, '\" ',\n 'title=\"', colorName, '\" ',\n 'aria-label=\"', colorName, '\" ',\n 'data-toggle=\"button\" tabindex=\"-1\"></button>'\n ].join(''));\n }\n contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n }\n $node.html(contents.join(''));\n\n if (options.tooltip) {\n $node.find('.note-color-btn').tooltip({\n container: options.container,\n trigger: 'hover',\n placement: 'bottom'\n });\n }\n});\n\nconst dialog = renderer.create('<div class=\"modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function($node, options) {\n if (options.fade) {\n $node.addClass('fade');\n }\n $node.attr({\n 'aria-label': options.title\n });\n $node.html([\n '<div class=\"modal-dialog\">',\n ' <div class=\"modal-content\">',\n (options.title\n ? ' <div class=\"modal-header\">' +\n ' <h4 class=\"modal-title\">' + options.title + '</h4>' +\n ' <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">×</button>' +\n ' </div>' : ''\n ),\n ' <div class=\"modal-body\">' + options.body + '</div>',\n (options.footer\n ? ' <div class=\"modal-footer\">' + options.footer + '</div>' : ''\n ),\n ' </div>',\n '</div>'\n ].join(''));\n});\n\nconst popover = renderer.create([\n '<div class=\"note-popover popover in\">',\n ' <div class=\"arrow\"/>',\n ' <div class=\"popover-content note-children-container\"/>',\n '</div>'\n].join(''), function($node, options) {\n const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n $node.addClass(direction);\n\n if (options.hideArrow) {\n $node.find('.arrow').hide();\n }\n});\n\nconst checkbox = renderer.create('<label class=\"custom-control custom-checkbox\"></label>', function($node, options) {\n if (options.id) {\n $node.attr('for', options.id);\n }\n $node.html([\n ' <input role=\"checkbox\" type=\"checkbox\" class=\"custom-control-input\"' + (options.id ? ' id=\"' + options.id + '\"' : ''),\n (options.checked ? ' checked' : ''),\n ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>',\n ' <span class=\"custom-control-indicator\"></span>',\n ' <span class=\"custom-control-description\">' + (options.text ? options.text : '') + '</span>',\n '</label>'\n ].join(''));\n});\n\nconst icon = function(iconClassName, tagName) {\n tagName = tagName || 'i';\n return '<' + tagName + ' class=\"' + iconClassName + '\"/>';\n};\n\nconst ui = {\n editor: editor,\n toolbar: toolbar,\n editingArea: editingArea,\n codable: codable,\n editable: editable,\n statusbar: statusbar,\n airEditor: airEditor,\n airEditable: airEditable,\n buttonGroup: buttonGroup,\n dropdown: dropdown,\n dropdownButtonContents: dropdownButtonContents,\n dropdownCheck: dropdownCheck,\n palette: palette,\n dialog: dialog,\n popover: popover,\n icon: icon,\n checkbox: checkbox,\n options: {},\n\n button: function($node, options) {\n return renderer.create('<button type=\"button\" class=\"note-btn btn btn-light btn-sm\" role=\"button\" tabindex=\"-1\">', function($node, options) {\n if (options && options.tooltip) {\n $node.attr({\n title: options.tooltip,\n 'aria-label': options.tooltip\n }).tooltip({\n container: options.container,\n trigger: 'hover',\n placement: 'bottom'\n });\n }\n })($node, options);\n },\n\n toggleBtn: function($btn, isEnable) {\n $btn.toggleClass('disabled', !isEnable);\n $btn.attr('disabled', !isEnable);\n },\n\n toggleBtnActive: function($btn, isActive) {\n $btn.toggleClass('active', isActive);\n },\n\n onDialogShown: function($dialog, handler) {\n $dialog.one('shown.bs.modal', handler);\n },\n\n onDialogHidden: function($dialog, handler) {\n $dialog.one('hidden.bs.modal', handler);\n },\n\n showDialog: function($dialog) {\n $dialog.modal('show');\n },\n\n hideDialog: function($dialog) {\n $dialog.modal('hide');\n },\n\n createLayout: function($note, options) {\n const $editor = (options.airMode ? ui.airEditor([\n ui.editingArea([\n ui.airEditable()\n ])\n ]) : ui.editor([\n ui.toolbar(),\n ui.editingArea([\n ui.codable(),\n ui.editable()\n ]),\n ui.statusbar()\n ])).render();\n\n $editor.insertAfter($note);\n\n return {\n note: $note,\n editor: $editor,\n toolbar: $editor.find('.note-toolbar'),\n editingArea: $editor.find('.note-editing-area'),\n editable: $editor.find('.note-editable'),\n codable: $editor.find('.note-codable'),\n statusbar: $editor.find('.note-statusbar')\n };\n },\n\n removeLayout: function($note, layoutInfo) {\n $note.html(layoutInfo.editable.html());\n layoutInfo.editor.remove();\n $note.show();\n }\n};\n\nexport default ui;\n","/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n return function(itemB) {\n return itemA === itemB;\n };\n}\n\nfunction eq2(itemA, itemB) {\n return itemA === itemB;\n}\n\nfunction peq2(propName) {\n return function(itemA, itemB) {\n return itemA[propName] === itemB[propName];\n };\n}\n\nfunction ok() {\n return true;\n}\n\nfunction fail() {\n return false;\n}\n\nfunction not(f) {\n return () => {\n return !f.apply(f, arguments);\n };\n}\n\nfunction and(fA, fB) {\n return function(item) {\n return fA(item) && fB(item);\n };\n}\n\nfunction self(a) {\n return a;\n}\n\nfunction invoke(obj, method) {\n return () => {\n return obj[method].apply(obj, arguments);\n };\n}\n\nlet idCounter = 0;\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n const id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n const $document = $(document);\n return {\n top: rect.top + $document.scrollTop(),\n left: rect.left + $document.scrollLeft(),\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n const inverted = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n inverted[obj[key]] = key;\n }\n }\n return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n prefix = prefix || '';\n return prefix + namespace.split('.').map(function(name) {\n return name.substring(0, 1).toUpperCase() + name.substring(1);\n }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n let timeout;\n return () => {\n const context = this;\n const args = arguments;\n const later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\n\nexport default {\n eq,\n eq2,\n peq2,\n ok,\n fail,\n self,\n not,\n and,\n invoke,\n uniqueId,\n rect2bnd,\n invertObject,\n namespaceToCamel,\n debounce\n};\n","import $ from 'jquery';\nimport func from './func';\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n for (let idx = 0, len = array.length; idx < len; idx++) {\n const item = array[idx];\n if (pred(item)) {\n return item;\n }\n }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction all(array, pred) {\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (!pred(array[idx])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * returns index of item\n */\nfunction indexOf(array, item) {\n return $.inArray(item, array);\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n return indexOf(array, item) !== -1;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n fn = fn || func.self;\n return array.reduce(function(memo, v) {\n return memo + fn(v);\n }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n const result = [];\n const length = collection.length;\n let idx = -1;\n while (++idx < length) {\n result[idx] = collection[idx];\n }\n return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n if (!array.length) { return []; }\n const aTail = tail(array);\n return aTail.reduce(function(memo, v) {\n const aLast = last(memo);\n if (fn(last(aLast), v)) {\n aLast[aLast.length] = v;\n } else {\n memo[memo.length] = [v];\n }\n return memo;\n }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n const aResult = [];\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (array[idx]) { aResult.push(array[idx]); }\n }\n return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n const results = [];\n\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (!contains(results, array[idx])) {\n results.push(array[idx]);\n }\n }\n\n return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n const idx = indexOf(array, item);\n if (idx === -1) { return null; }\n\n return array[idx + 1];\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n const idx = indexOf(array, item);\n if (idx === -1) { return null; }\n\n return array[idx - 1];\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\nexport default {\n head,\n last,\n initial,\n tail,\n prev,\n next,\n find,\n contains,\n all,\n sum,\n from,\n isEmpty,\n clusterBy,\n compact,\n unique\n};\n","import $ from 'jquery';\nconst isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nfunction isFontInstalled(fontName) {\n const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n const $tester = $('<div>').css({\n position: 'absolute',\n left: '-9999px',\n top: '-9999px',\n fontSize: '200px'\n }).text('mmmmmmmmmwwwwwww').appendTo(document.body);\n\n const originalWidth = $tester.css('fontFamily', testFontName).width();\n const width = $tester.css('fontFamily', fontName + ',' + testFontName).width();\n\n $tester.remove();\n\n return originalWidth !== width;\n}\n\nconst userAgent = navigator.userAgent;\nconst isMSIE = /MSIE|Trident/i.test(userAgent);\nlet browserVersion;\nif (isMSIE) {\n let matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n if (matches) {\n browserVersion = parseFloat(matches[1]);\n }\n matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n if (matches) {\n browserVersion = parseFloat(matches[1]);\n }\n}\n\nconst isEdge = /Edge\\/\\d+/.test(userAgent);\n\nlet hasCodeMirror = !!window.CodeMirror;\nif (!hasCodeMirror && isSupportAmd) {\n // Webpack\n if (typeof __webpack_require__ === 'function') { // eslint-disable-line\n try {\n // If CodeMirror can't be resolved, `require.resolve` will throw an\n // exception and `hasCodeMirror` won't be set to `true`.\n require.resolve('codemirror');\n hasCodeMirror = true;\n } catch (e) {\n // do nothing\n }\n } else if (typeof require !== 'undefined') {\n // Browserify\n if (typeof require.resolve !== 'undefined') {\n try {\n // If CodeMirror can't be resolved, `require.resolve` will throw an\n // exception and `hasCodeMirror` won't be set to `true`.\n require.resolve('codemirror');\n hasCodeMirror = true;\n } catch (e) {\n // do nothing\n }\n // Almond/Require\n } else if (typeof require.specified !== 'undefined') {\n hasCodeMirror = require.specified('codemirror');\n }\n }\n}\n\nconst isSupportTouch =\n (('ontouchstart' in window) ||\n (navigator.MaxTouchPoints > 0) ||\n (navigator.msMaxTouchPoints > 0));\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nconst inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\nexport default {\n isMac: navigator.appVersion.indexOf('Mac') > -1,\n isMSIE,\n isEdge,\n isFF: !isEdge && /firefox/i.test(userAgent),\n isPhantom: /PhantomJS/i.test(userAgent),\n isWebkit: !isEdge && /webkit/i.test(userAgent),\n isChrome: !isEdge && /chrome/i.test(userAgent),\n isSafari: !isEdge && /safari/i.test(userAgent),\n browserVersion,\n jqueryVersion: parseFloat($.fn.jquery),\n isSupportAmd,\n isSupportTouch,\n hasCodeMirror,\n isFontInstalled,\n isW3CRangeSupport: !!document.createRange,\n inputEventName\n};\n","import $ from 'jquery';\nimport func from './func';\nimport lists from './lists';\nimport env from './env';\n\nconst NBSP_CHAR = String.fromCharCode(160);\nconst ZERO_WIDTH_NBSP_CHAR = '\\ufeff';\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n return node && $(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n return node && $(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n nodeName = nodeName.toUpperCase();\n return function(node) {\n return node && node.nodeName.toUpperCase() === nodeName;\n };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n if (isEditable(node)) {\n return false;\n }\n\n // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nconst isPre = makePredByNodeName('PRE');\n\nconst isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n return isPara(node) && !isLi(node);\n}\n\nconst isTable = makePredByNodeName('TABLE');\n\nconst isData = makePredByNodeName('DATA');\n\nfunction isInline(node) {\n return !isBodyContainer(node) &&\n !isList(node) &&\n !isHr(node) &&\n !isPara(node) &&\n !isTable(node) &&\n !isBlockquote(node) &&\n !isData(node);\n}\n\nfunction isList(node) {\n return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nconst isHr = makePredByNodeName('HR');\n\nfunction isCell(node) {\n return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nconst isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n return isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nconst isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n return isInline(node) && !!ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n return isInline(node) && !ancestor(node, isPara);\n}\n\nconst isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n return nodeA.nextSibling === nodeB ||\n nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n pred = pred || func.ok;\n\n const siblings = [];\n if (node.previousSibling && pred(node.previousSibling)) {\n siblings.push(node.previousSibling);\n }\n siblings.push(node);\n if (node.nextSibling && pred(node.nextSibling)) {\n siblings.push(node.nextSibling);\n }\n return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with \n * - [workaround] IE11 and other browser works with bogus br\n */\nconst blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n if (isText(node)) {\n return node.nodeValue.length;\n }\n\n if (node) {\n return node.childNodes.length;\n }\n\n return 0;\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEmpty(node) {\n const len = nodeLength(node);\n\n if (len === 0) {\n return true;\n } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n // ex) <p><br></p>, <span><br></span>\n return true;\n } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n // ex) <p></p>, <span></span>\n return true;\n }\n\n return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n if (!isVoid(node) && !nodeLength(node)) {\n node.innerHTML = blankHTML;\n }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n while (node) {\n if (pred(node)) { return node; }\n if (isEditable(node)) { break; }\n\n node = node.parentNode;\n }\n return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n node = node.parentNode;\n\n while (node) {\n if (nodeLength(node) !== 1) { break; }\n if (pred(node)) { return node; }\n if (isEditable(node)) { break; }\n\n node = node.parentNode;\n }\n return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n pred = pred || func.fail;\n\n const ancestors = [];\n ancestor(node, function(el) {\n if (!isEditable(el)) {\n ancestors.push(el);\n }\n\n return pred(el);\n });\n return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n const ancestors = listAncestor(node);\n return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n const ancestors = listAncestor(nodeA);\n for (let n = nodeB; n; n = n.parentNode) {\n if ($.inArray(n, ancestors) > -1) { return n; }\n }\n return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n pred = pred || func.fail;\n\n const nodes = [];\n while (node) {\n if (pred(node)) { break; }\n nodes.push(node);\n node = node.previousSibling;\n }\n return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n pred = pred || func.fail;\n\n const nodes = [];\n while (node) {\n if (pred(node)) { break; }\n nodes.push(node);\n node = node.nextSibling;\n }\n return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n const descendants = [];\n pred = pred || func.ok;\n\n // start DFS(depth first search) with node\n (function fnWalk(current) {\n if (node !== current && pred(current)) {\n descendants.push(current);\n }\n for (let idx = 0, len = current.childNodes.length; idx < len; idx++) {\n fnWalk(current.childNodes[idx]);\n }\n })(node);\n\n return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n const parent = node.parentNode;\n const wrapper = $('<' + wrapperName + '>')[0];\n\n parent.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n const next = preceding.nextSibling;\n let parent = preceding.parentNode;\n if (next) {\n parent.insertBefore(node, next);\n } else {\n parent.appendChild(node);\n }\n return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild) {\n $.each(aChild, function(idx, child) {\n node.appendChild(child);\n });\n return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n while (node && node !== ancestor) {\n if (position(node) !== 0) {\n return false;\n }\n node = node.parentNode;\n }\n\n return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n if (!ancestor) {\n return false;\n }\n while (node && node !== ancestor) {\n if (position(node) !== nodeLength(node.parentNode) - 1) {\n return false;\n }\n node = node.parentNode;\n }\n\n return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n let offset = 0;\n while ((node = node.previousSibling)) {\n offset += 1;\n }\n return offset;\n}\n\nfunction hasChildren(node) {\n return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n let node;\n let offset;\n\n if (point.offset === 0) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node);\n } else if (hasChildren(point.node)) {\n node = point.node.childNodes[point.offset - 1];\n offset = nodeLength(node);\n } else {\n node = point.node;\n offset = isSkipInnerOffset ? 0 : point.offset - 1;\n }\n\n return {\n node: node,\n offset: offset\n };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n let node, offset;\n\n if (nodeLength(point.node) === point.offset) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node) + 1;\n } else if (hasChildren(point.node)) {\n node = point.node.childNodes[point.offset];\n offset = 0;\n } else {\n node = point.node;\n offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n }\n\n return {\n node: node,\n offset: offset\n };\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {\n return true;\n }\n\n const leftNode = point.node.childNodes[point.offset - 1];\n const rightNode = point.node.childNodes[point.offset];\n if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n while (point) {\n if (pred(point)) {\n return point;\n }\n\n point = prevPoint(point);\n }\n\n return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n while (point) {\n if (pred(point)) {\n return point;\n }\n\n point = nextPoint(point);\n }\n\n return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n if (!isText(point.node)) {\n return false;\n }\n\n const ch = point.node.nodeValue.charAt(point.offset - 1);\n return ch && (ch !== ' ' && ch !== NBSP_CHAR);\n}\n\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n let point = startPoint;\n\n while (point) {\n handler(point);\n\n if (isSamePoint(point, endPoint)) {\n break;\n }\n\n const isSkipOffset = isSkipInnerOffset &&\n startPoint.node !== point.node &&\n endPoint.node !== point.node;\n point = nextPoint(point, isSkipOffset);\n }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n const ancestors = listAncestor(node, func.eq(ancestor));\n return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n let current = ancestor;\n for (let i = 0, len = offsets.length; i < len; i++) {\n if (current.childNodes.length <= offsets[i]) {\n current = current.childNodes[current.childNodes.length - 1];\n } else {\n current = current.childNodes[offsets[i]];\n }\n }\n return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n const isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n\n // edge case\n if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n if (isLeftEdgePoint(point)) {\n return point.node;\n } else if (isRightEdgePoint(point)) {\n return point.node.nextSibling;\n }\n }\n\n // split #text\n if (isText(point.node)) {\n return point.node.splitText(point.offset);\n } else {\n const childNode = point.node.childNodes[point.offset];\n const clone = insertAfter(point.node.cloneNode(false), point.node);\n appendChildNodes(clone, listNext(childNode));\n\n if (!isSkipPaddingBlankHTML) {\n paddingBlankHTML(point.node);\n paddingBlankHTML(clone);\n }\n\n return clone;\n }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n // ex) [#text, <span>, <p>]\n const ancestors = listAncestor(point.node, func.eq(root));\n\n if (!ancestors.length) {\n return null;\n } else if (ancestors.length === 1) {\n return splitNode(point, options);\n }\n\n return ancestors.reduce(function(node, parent) {\n if (node === point.node) {\n node = splitNode(point, options);\n }\n\n return splitNode({\n node: parent,\n offset: node ? position(node) : nodeLength(parent)\n }, options);\n });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n // find splitRoot, container\n // - inline: splitRoot is a child of paragraph\n // - block: splitRoot is a child of bodyContainer\n const pred = isInline ? isPara : isBodyContainer;\n const ancestors = listAncestor(point.node, pred);\n const topAncestor = lists.last(ancestors) || point.node;\n\n let splitRoot, container;\n if (pred(topAncestor)) {\n splitRoot = ancestors[ancestors.length - 2];\n container = topAncestor;\n } else {\n splitRoot = topAncestor;\n container = splitRoot.parentNode;\n }\n\n // if splitRoot is exists, split with splitTree\n let pivot = splitRoot && splitTree(splitRoot, point, {\n isSkipPaddingBlankHTML: isInline,\n isNotSplitEdgePoint: isInline\n });\n\n // if container is point.node, find pivot with point.offset\n if (!pivot && container === point.node) {\n pivot = point.node.childNodes[point.offset];\n }\n\n return {\n rightNode: pivot,\n container: container\n };\n}\n\nfunction create(nodeName) {\n return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n if (!node || !node.parentNode) { return; }\n if (node.removeNode) { return node.removeNode(isRemoveChild); }\n\n const parent = node.parentNode;\n if (!isRemoveChild) {\n const nodes = [];\n for (let i = 0, len = node.childNodes.length; i < len; i++) {\n nodes.push(node.childNodes[i]);\n }\n\n for (let i = 0, len = nodes.length; i < len; i++) {\n parent.insertBefore(nodes[i], node);\n }\n }\n\n parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n while (node) {\n if (isEditable(node) || !pred(node)) {\n break;\n }\n\n const parent = node.parentNode;\n remove(node);\n node = parent;\n }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n return node;\n }\n\n const newNode = create(nodeName);\n\n if (node.style.cssText) {\n newNode.style.cssText = node.style.cssText;\n }\n\n appendChildNodes(newNode, lists.from(node.childNodes));\n insertAfter(newNode, node);\n remove(node);\n\n return newNode;\n}\n\nconst isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n const val = isTextarea($node[0]) ? $node.val() : $node.html();\n if (stripLinebreaks) {\n return val.replace(/[\\n\\r]/g, '');\n }\n return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n let markup = value($node);\n\n if (isNewlineOnBlock) {\n const regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n markup = markup.replace(regexTag, function(match, endSlash, name) {\n name = name.toUpperCase();\n const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&\n !!endSlash;\n const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n\n return match + ((isEndOfInlineContainer || isBlockNode) ? '\\n' : '');\n });\n markup = $.trim(markup);\n }\n\n return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n const $placeholder = $(placeholder);\n const pos = $placeholder.offset();\n const height = $placeholder.outerHeight(true); // include margin\n\n return {\n left: pos.left,\n top: pos.top + height\n };\n}\n\nfunction attachEvents($node, events) {\n Object.keys(events).forEach(function(key) {\n $node.on(key, events[key]);\n });\n}\n\nfunction detachEvents($node, events) {\n Object.keys(events).forEach(function(key) {\n $node.off(key, events[key]);\n });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\nexport default {\n /** @property {String} NBSP_CHAR */\n NBSP_CHAR,\n /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n ZERO_WIDTH_NBSP_CHAR,\n /** @property {String} blank */\n blank: blankHTML,\n /** @property {String} emptyPara */\n emptyPara: `<p>${blankHTML}</p>`,\n makePredByNodeName,\n isEditable,\n isControlSizing,\n isText,\n isElement,\n isVoid,\n isPara,\n isPurePara,\n isHeading,\n isInline,\n isBlock: func.not(isInline),\n isBodyInline,\n isBody,\n isParaInline,\n isPre,\n isList,\n isTable,\n isData,\n isCell,\n isBlockquote,\n isBodyContainer,\n isAnchor,\n isDiv: makePredByNodeName('DIV'),\n isLi,\n isBR: makePredByNodeName('BR'),\n isSpan: makePredByNodeName('SPAN'),\n isB: makePredByNodeName('B'),\n isU: makePredByNodeName('U'),\n isS: makePredByNodeName('S'),\n isI: makePredByNodeName('I'),\n isImg: makePredByNodeName('IMG'),\n isTextarea,\n isEmpty,\n isEmptyAnchor: func.and(isAnchor, isEmpty),\n isClosestSibling,\n withClosestSiblings,\n nodeLength,\n isLeftEdgePoint,\n isRightEdgePoint,\n isEdgePoint,\n isLeftEdgeOf,\n isRightEdgeOf,\n isLeftEdgePointOf,\n isRightEdgePointOf,\n prevPoint,\n nextPoint,\n isSamePoint,\n isVisiblePoint,\n prevPointUntil,\n nextPointUntil,\n isCharPoint,\n walkPoint,\n ancestor,\n singleChildAncestor,\n listAncestor,\n lastAncestor,\n listNext,\n listPrev,\n listDescendant,\n commonAncestor,\n wrap,\n insertAfter,\n appendChildNodes,\n position,\n hasChildren,\n makeOffsetPath,\n fromOffsetPath,\n splitTree,\n splitPoint,\n create,\n createText,\n remove,\n removeWhile,\n replace,\n html,\n value,\n posFromPlaceholder,\n attachEvents,\n detachEvents,\n isCustomStyleTag\n};\n","import $ from 'jquery';\n\n$.summernote = $.summernote || {\n lang: {}\n};\n\n$.extend($.summernote.lang, {\n 'en-US': {\n font: {\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n clear: 'Remove Font Style',\n height: 'Line Height',\n name: 'Font Family',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript',\n size: 'Font Size'\n },\n image: {\n image: 'Picture',\n insert: 'Insert Image',\n resizeFull: 'Resize Full',\n resizeHalf: 'Resize Half',\n resizeQuarter: 'Resize Quarter',\n floatLeft: 'Float Left',\n floatRight: 'Float Right',\n floatNone: 'Float None',\n shapeRounded: 'Shape: Rounded',\n shapeCircle: 'Shape: Circle',\n shapeThumbnail: 'Shape: Thumbnail',\n shapeNone: 'Shape: None',\n dragImageHere: 'Drag image or text here',\n dropImage: 'Drop image or Text',\n selectFromFiles: 'Select from files',\n maximumFileSize: 'Maximum file size',\n maximumFileSizeError: 'Maximum file size exceeded.',\n url: 'Image URL',\n remove: 'Remove Image',\n original: 'Original'\n },\n video: {\n video: 'Video',\n videoLink: 'Video Link',\n insert: 'Insert Video',\n url: 'Video URL',\n providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n },\n link: {\n link: 'Link',\n insert: 'Insert Link',\n unlink: 'Unlink',\n edit: 'Edit',\n textToDisplay: 'Text to display',\n url: 'To what URL should this link go?',\n openInNewWindow: 'Open in new window'\n },\n table: {\n table: 'Table',\n addRowAbove: 'Add row above',\n addRowBelow: 'Add row below',\n addColLeft: 'Add column left',\n addColRight: 'Add column right',\n delRow: 'Delete row',\n delCol: 'Delete column',\n delTable: 'Delete table'\n },\n hr: {\n insert: 'Insert Horizontal Rule'\n },\n style: {\n style: 'Style',\n p: 'Normal',\n blockquote: 'Quote',\n pre: 'Code',\n h1: 'Header 1',\n h2: 'Header 2',\n h3: 'Header 3',\n h4: 'Header 4',\n h5: 'Header 5',\n h6: 'Header 6'\n },\n lists: {\n unordered: 'Unordered list',\n ordered: 'Ordered list'\n },\n options: {\n help: 'Help',\n fullscreen: 'Full Screen',\n codeview: 'Code View'\n },\n paragraph: {\n paragraph: 'Paragraph',\n outdent: 'Outdent',\n indent: 'Indent',\n left: 'Align left',\n center: 'Align center',\n right: 'Align right',\n justify: 'Justify full'\n },\n color: {\n recent: 'Recent Color',\n more: 'More Color',\n background: 'Background Color',\n foreground: 'Foreground Color',\n transparent: 'Transparent',\n setTransparent: 'Set transparent',\n reset: 'Reset',\n resetToDefault: 'Reset to default'\n },\n shortcut: {\n shortcuts: 'Keyboard shortcuts',\n close: 'Close',\n textFormatting: 'Text formatting',\n action: 'Action',\n paragraphFormatting: 'Paragraph formatting',\n documentStyle: 'Document Style',\n extraKeys: 'Extra keys'\n },\n help: {\n 'insertParagraph': 'Insert Paragraph',\n 'undo': 'Undoes the last command',\n 'redo': 'Redoes the last command',\n 'tab': 'Tab',\n 'untab': 'Untab',\n 'bold': 'Set a bold style',\n 'italic': 'Set a italic style',\n 'underline': 'Set a underline style',\n 'strikethrough': 'Set a strikethrough style',\n 'removeFormat': 'Clean a style',\n 'justifyLeft': 'Set left align',\n 'justifyCenter': 'Set center align',\n 'justifyRight': 'Set right align',\n 'justifyFull': 'Set full align',\n 'insertUnorderedList': 'Toggle unordered list',\n 'insertOrderedList': 'Toggle ordered list',\n 'outdent': 'Outdent on current paragraph',\n 'indent': 'Indent on current paragraph',\n 'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n 'formatH1': 'Change current block\\'s format as H1',\n 'formatH2': 'Change current block\\'s format as H2',\n 'formatH3': 'Change current block\\'s format as H3',\n 'formatH4': 'Change current block\\'s format as H4',\n 'formatH5': 'Change current block\\'s format as H5',\n 'formatH6': 'Change current block\\'s format as H6',\n 'insertHorizontalRule': 'Insert horizontal rule',\n 'linkDialog.show': 'Show Link Dialog'\n },\n history: {\n undo: 'Undo',\n redo: 'Redo'\n },\n specialChar: {\n specialChar: 'SPECIAL CHARACTERS',\n select: 'Select Special characters'\n }\n }\n});\n","import lists from './lists';\nimport func from './func';\n\nconst KEY_MAP = {\n 'BACKSPACE': 8,\n 'TAB': 9,\n 'ENTER': 13,\n 'SPACE': 32,\n 'DELETE': 46,\n\n // Arrow\n 'LEFT': 37,\n 'UP': 38,\n 'RIGHT': 39,\n 'DOWN': 40,\n\n // Number: 0-9\n 'NUM0': 48,\n 'NUM1': 49,\n 'NUM2': 50,\n 'NUM3': 51,\n 'NUM4': 52,\n 'NUM5': 53,\n 'NUM6': 54,\n 'NUM7': 55,\n 'NUM8': 56,\n\n // Alphabet: a-z\n 'B': 66,\n 'E': 69,\n 'I': 73,\n 'J': 74,\n 'K': 75,\n 'L': 76,\n 'R': 82,\n 'S': 83,\n 'U': 85,\n 'V': 86,\n 'Y': 89,\n 'Z': 90,\n\n 'SLASH': 191,\n 'LEFTBRACKET': 219,\n 'BACKSLASH': 220,\n 'RIGHTBRACKET': 221\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\nexport default {\n /**\n * @method isEdit\n *\n * @param {Number} keyCode\n * @return {Boolean}\n */\n isEdit: (keyCode) => {\n return lists.contains([\n KEY_MAP.BACKSPACE,\n KEY_MAP.TAB,\n KEY_MAP.ENTER,\n KEY_MAP.SPACE,\n KEY_MAP.DELETE\n ], keyCode);\n },\n /**\n * @method isMove\n *\n * @param {Number} keyCode\n * @return {Boolean}\n */\n isMove: (keyCode) => {\n return lists.contains([\n KEY_MAP.LEFT,\n KEY_MAP.UP,\n KEY_MAP.RIGHT,\n KEY_MAP.DOWN\n ], keyCode);\n },\n /**\n * @property {Object} nameFromCode\n * @property {String} nameFromCode.8 \"BACKSPACE\"\n */\n nameFromCode: func.invertObject(KEY_MAP),\n code: KEY_MAP\n};\n","import $ from 'jquery';\nimport env from './env';\nimport func from './func';\nimport lists from './lists';\nimport dom from './dom';\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n let container = textRange.parentElement();\n let offset;\n\n const tester = document.body.createTextRange();\n let prevContainer;\n const childNodes = lists.from(container.childNodes);\n for (offset = 0; offset < childNodes.length; offset++) {\n if (dom.isText(childNodes[offset])) {\n continue;\n }\n tester.moveToElementText(childNodes[offset]);\n if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n break;\n }\n prevContainer = childNodes[offset];\n }\n\n if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n const textRangeStart = document.body.createTextRange();\n let curTextNode = null;\n textRangeStart.moveToElementText(prevContainer || container);\n textRangeStart.collapse(!prevContainer);\n curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n\n const pointTester = textRange.duplicate();\n pointTester.setEndPoint('StartToStart', textRangeStart);\n let textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n textCount -= curTextNode.nodeValue.length;\n curTextNode = curTextNode.nextSibling;\n }\n\n // [workaround] enforce IE to re-reference curTextNode, hack\n const dummy = curTextNode.nodeValue; // eslint-disable-line\n\n if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&\n textCount === curTextNode.nodeValue.length) {\n textCount -= curTextNode.nodeValue.length;\n curTextNode = curTextNode.nextSibling;\n }\n\n container = curTextNode;\n offset = textCount;\n }\n\n return {\n cont: container,\n offset: offset\n };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n const textRangeInfo = function(container, offset) {\n let node, isCollapseToStart;\n\n if (dom.isText(container)) {\n const prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n const prevContainer = lists.last(prevTextNodes).previousSibling;\n node = prevContainer || container.parentNode;\n offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n isCollapseToStart = !prevContainer;\n } else {\n node = container.childNodes[offset] || container;\n if (dom.isText(node)) {\n return textRangeInfo(node, 0);\n }\n\n offset = 0;\n isCollapseToStart = false;\n }\n\n return {\n node: node,\n collapseToStart: isCollapseToStart,\n offset: offset\n };\n };\n\n const textRange = document.body.createTextRange();\n const info = textRangeInfo(point.node, point.offset);\n\n textRange.moveToElementText(info.node);\n textRange.collapse(info.collapseToStart);\n textRange.moveStart('character', info.offset);\n return textRange;\n}\n\n/**\n * Wrapped Range\n *\n * @constructor\n * @param {Node} sc - start container\n * @param {Number} so - start offset\n * @param {Node} ec - end container\n * @param {Number} eo - end offset\n */\nclass WrappedRange {\n constructor(sc, so, ec, eo) {\n this.sc = sc;\n this.so = so;\n this.ec = ec;\n this.eo = eo;\n\n // isOnEditable: judge whether range is on editable or not\n this.isOnEditable = this.makeIsOn(dom.isEditable);\n // isOnList: judge whether range is on list node or not\n this.isOnList = this.makeIsOn(dom.isList);\n // isOnAnchor: judge whether range is on anchor node or not\n this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n // isOnCell: judge whether range is on cell node or not\n this.isOnCell = this.makeIsOn(dom.isCell);\n // isOnData: judge whether range is on data node or not\n this.isOnData = this.makeIsOn(dom.isData);\n }\n\n // nativeRange: get nativeRange from sc, so, ec, eo\n nativeRange() {\n if (env.isW3CRangeSupport) {\n const w3cRange = document.createRange();\n w3cRange.setStart(this.sc, this.so);\n w3cRange.setEnd(this.ec, this.eo);\n\n return w3cRange;\n } else {\n const textRange = pointToTextRange({\n node: this.sc,\n offset: this.so\n });\n\n textRange.setEndPoint('EndToEnd', pointToTextRange({\n node: this.ec,\n offset: this.eo\n }));\n\n return textRange;\n }\n }\n\n getPoints() {\n return {\n sc: this.sc,\n so: this.so,\n ec: this.ec,\n eo: this.eo\n };\n }\n\n getStartPoint() {\n return {\n node: this.sc,\n offset: this.so\n };\n }\n\n getEndPoint() {\n return {\n node: this.ec,\n offset: this.eo\n };\n }\n\n /**\n * select update visible range\n */\n select() {\n const nativeRng = this.nativeRange();\n if (env.isW3CRangeSupport) {\n const selection = document.getSelection();\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n selection.addRange(nativeRng);\n } else {\n nativeRng.select();\n }\n\n return this;\n }\n\n /**\n * Moves the scrollbar to start container(sc) of current range\n *\n * @return {WrappedRange}\n */\n scrollIntoView(container) {\n const height = $(container).height();\n if (container.scrollTop + height < this.sc.offsetTop) {\n container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n }\n\n return this;\n }\n\n /**\n * @return {WrappedRange}\n */\n normalize() {\n /**\n * @param {BoundaryPoint} point\n * @param {Boolean} isLeftToRight\n * @return {BoundaryPoint}\n */\n const getVisiblePoint = function(point, isLeftToRight) {\n if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) ||\n (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) ||\n (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) ||\n (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) {\n return point;\n }\n\n // point on block's edge\n const block = dom.ancestor(point.node, dom.isBlock);\n if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) ||\n ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) {\n // returns point already on visible point\n if (dom.isVisiblePoint(point)) {\n return point;\n }\n // reverse direction\n isLeftToRight = !isLeftToRight;\n }\n\n const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint)\n : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n return nextPoint || point;\n };\n\n const endPoint = getVisiblePoint(this.getEndPoint(), false);\n const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n\n return new WrappedRange(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n );\n }\n\n /**\n * returns matched nodes on range\n *\n * @param {Function} [pred] - predicate function\n * @param {Object} [options]\n * @param {Boolean} [options.includeAncestor]\n * @param {Boolean} [options.fullyContains]\n * @return {Node[]}\n */\n nodes(pred, options) {\n pred = pred || func.ok;\n\n const includeAncestor = options && options.includeAncestor;\n const fullyContains = options && options.fullyContains;\n\n // TODO compare points and sort\n const startPoint = this.getStartPoint();\n const endPoint = this.getEndPoint();\n\n const nodes = [];\n const leftEdgeNodes = [];\n\n dom.walkPoint(startPoint, endPoint, function(point) {\n if (dom.isEditable(point.node)) {\n return;\n }\n\n let node;\n if (fullyContains) {\n if (dom.isLeftEdgePoint(point)) {\n leftEdgeNodes.push(point.node);\n }\n if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n node = point.node;\n }\n } else if (includeAncestor) {\n node = dom.ancestor(point.node, pred);\n } else {\n node = point.node;\n }\n\n if (node && pred(node)) {\n nodes.push(node);\n }\n }, true);\n\n return lists.unique(nodes);\n }\n\n /**\n * returns commonAncestor of range\n * @return {Element} - commonAncestor\n */\n commonAncestor() {\n return dom.commonAncestor(this.sc, this.ec);\n }\n\n /**\n * returns expanded range by pred\n *\n * @param {Function} pred - predicate function\n * @return {WrappedRange}\n */\n expand(pred) {\n const startAncestor = dom.ancestor(this.sc, pred);\n const endAncestor = dom.ancestor(this.ec, pred);\n\n if (!startAncestor && !endAncestor) {\n return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n }\n\n const boundaryPoints = this.getPoints();\n\n if (startAncestor) {\n boundaryPoints.sc = startAncestor;\n boundaryPoints.so = 0;\n }\n\n if (endAncestor) {\n boundaryPoints.ec = endAncestor;\n boundaryPoints.eo = dom.nodeLength(endAncestor);\n }\n\n return new WrappedRange(\n boundaryPoints.sc,\n boundaryPoints.so,\n boundaryPoints.ec,\n boundaryPoints.eo\n );\n }\n\n /**\n * @param {Boolean} isCollapseToStart\n * @return {WrappedRange}\n */\n collapse(isCollapseToStart) {\n if (isCollapseToStart) {\n return new WrappedRange(this.sc, this.so, this.sc, this.so);\n } else {\n return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n }\n }\n\n /**\n * splitText on range\n */\n splitText() {\n const isSameContainer = this.sc === this.ec;\n const boundaryPoints = this.getPoints();\n\n if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n this.ec.splitText(this.eo);\n }\n\n if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n boundaryPoints.sc = this.sc.splitText(this.so);\n boundaryPoints.so = 0;\n\n if (isSameContainer) {\n boundaryPoints.ec = boundaryPoints.sc;\n boundaryPoints.eo = this.eo - this.so;\n }\n }\n\n return new WrappedRange(\n boundaryPoints.sc,\n boundaryPoints.so,\n boundaryPoints.ec,\n boundaryPoints.eo\n );\n }\n\n /**\n * delete contents on range\n * @return {WrappedRange}\n */\n deleteContents() {\n if (this.isCollapsed()) {\n return this;\n }\n\n const rng = this.splitText();\n const nodes = rng.nodes(null, {\n fullyContains: true\n });\n\n // find new cursor point\n const point = dom.prevPointUntil(rng.getStartPoint(), function(point) {\n return !lists.contains(nodes, point.node);\n });\n\n const emptyParents = [];\n $.each(nodes, function(idx, node) {\n // find empty parents\n const parent = node.parentNode;\n if (point.node !== parent && dom.nodeLength(parent) === 1) {\n emptyParents.push(parent);\n }\n dom.remove(node, false);\n });\n\n // remove empty parents\n $.each(emptyParents, function(idx, node) {\n dom.remove(node, false);\n });\n\n return new WrappedRange(\n point.node,\n point.offset,\n point.node,\n point.offset\n ).normalize();\n }\n\n /**\n * makeIsOn: return isOn(pred) function\n */\n makeIsOn(pred) {\n return function() {\n const ancestor = dom.ancestor(this.sc, pred);\n return !!ancestor && (ancestor === dom.ancestor(this.ec, pred));\n };\n }\n\n /**\n * @param {Function} pred\n * @return {Boolean}\n */\n isLeftEdgeOf(pred) {\n if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n return false;\n }\n\n const node = dom.ancestor(this.sc, pred);\n return node && dom.isLeftEdgeOf(this.sc, node);\n }\n\n /**\n * returns whether range was collapsed or not\n */\n isCollapsed() {\n return this.sc === this.ec && this.so === this.eo;\n }\n\n /**\n * wrap inline nodes which children of body with paragraph\n *\n * @return {WrappedRange}\n */\n wrapBodyInlineWithPara() {\n if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n this.sc.innerHTML = dom.emptyPara;\n return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n }\n\n /**\n * [workaround] firefox often create range on not visible point. so normalize here.\n * - firefox: |<p>text</p>|\n * - chrome: <p>|text|</p>\n */\n const rng = this.normalize();\n if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n return rng;\n }\n\n // find inline top ancestor\n let topAncestor;\n if (dom.isInline(rng.sc)) {\n const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n topAncestor = lists.last(ancestors);\n if (!dom.isInline(topAncestor)) {\n topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n }\n } else {\n topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n }\n\n // siblings not in paragraph\n let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n // wrap with paragraph\n if (inlineSiblings.length) {\n const para = dom.wrap(lists.head(inlineSiblings), 'p');\n dom.appendChildNodes(para, lists.tail(inlineSiblings));\n }\n\n return this.normalize();\n }\n\n /**\n * insert node at current cursor\n *\n * @param {Node} node\n * @return {Node}\n */\n insertNode(node) {\n const rng = this.wrapBodyInlineWithPara().deleteContents();\n const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n if (info.rightNode) {\n info.rightNode.parentNode.insertBefore(node, info.rightNode);\n } else {\n info.container.appendChild(node);\n }\n\n return node;\n }\n\n /**\n * insert html at current cursor\n */\n pasteHTML(markup) {\n const contentsContainer = $('<div></div>').html(markup)[0];\n const childNodes = lists.from(contentsContainer.childNodes);\n\n const rng = this.wrapBodyInlineWithPara().deleteContents();\n\n return childNodes.reverse().map(function(childNode) {\n return rng.insertNode(childNode);\n }).reverse();\n }\n\n /**\n * returns text in range\n *\n * @return {String}\n */\n toString() {\n const nativeRng = this.nativeRange();\n return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n }\n\n /**\n * returns range for word before cursor\n *\n * @param {Boolean} [findAfter] - find after cursor, default: false\n * @return {WrappedRange}\n */\n getWordRange(findAfter) {\n let endPoint = this.getEndPoint();\n\n if (!dom.isCharPoint(endPoint)) {\n return this;\n }\n\n const startPoint = dom.prevPointUntil(endPoint, function(point) {\n return !dom.isCharPoint(point);\n });\n\n if (findAfter) {\n endPoint = dom.nextPointUntil(endPoint, function(point) {\n return !dom.isCharPoint(point);\n });\n }\n\n return new WrappedRange(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n );\n }\n\n /**\n * create offsetPath bookmark\n *\n * @param {Node} editable\n */\n bookmark(editable) {\n return {\n s: {\n path: dom.makeOffsetPath(editable, this.sc),\n offset: this.so\n },\n e: {\n path: dom.makeOffsetPath(editable, this.ec),\n offset: this.eo\n }\n };\n }\n\n /**\n * create offsetPath bookmark base on paragraph\n *\n * @param {Node[]} paras\n */\n paraBookmark(paras) {\n return {\n s: {\n path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n offset: this.so\n },\n e: {\n path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n offset: this.eo\n }\n };\n }\n\n /**\n * getClientRects\n * @return {Rect[]}\n */\n getClientRects() {\n const nativeRng = this.nativeRange();\n return nativeRng.getClientRects();\n }\n}\n\n/**\n * Data structure\n * * BoundaryPoint: a point of dom tree\n * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\nexport default {\n /**\n * create Range Object From arguments or Browser Selection\n *\n * @param {Node} sc - start container\n * @param {Number} so - start offset\n * @param {Node} ec - end container\n * @param {Number} eo - end offset\n * @return {WrappedRange}\n */\n create: function(sc, so, ec, eo) {\n if (arguments.length === 4) {\n return new WrappedRange(sc, so, ec, eo);\n } else if (arguments.length === 2) { // collapsed\n ec = sc;\n eo = so;\n return new WrappedRange(sc, so, ec, eo);\n } else {\n let wrappedRange = this.createFromSelection();\n if (!wrappedRange && arguments.length === 1) {\n wrappedRange = this.createFromNode(arguments[0]);\n return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML);\n }\n return wrappedRange;\n }\n },\n\n createFromSelection: function() {\n let sc, so, ec, eo;\n if (env.isW3CRangeSupport) {\n const selection = document.getSelection();\n if (!selection || selection.rangeCount === 0) {\n return null;\n } else if (dom.isBody(selection.anchorNode)) {\n // Firefox: returns entire body as range on initialization.\n // We won't never need it.\n return null;\n }\n\n const nativeRng = selection.getRangeAt(0);\n sc = nativeRng.startContainer;\n so = nativeRng.startOffset;\n ec = nativeRng.endContainer;\n eo = nativeRng.endOffset;\n } else { // IE8: TextRange\n const textRange = document.selection.createRange();\n const textRangeEnd = textRange.duplicate();\n textRangeEnd.collapse(false);\n const textRangeStart = textRange;\n textRangeStart.collapse(true);\n\n let startPoint = textRangeToPoint(textRangeStart, true);\n let endPoint = textRangeToPoint(textRangeEnd, false);\n\n // same visible point case: range was collapsed.\n if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&\n dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&\n endPoint.node.nextSibling === startPoint.node) {\n startPoint = endPoint;\n }\n\n sc = startPoint.cont;\n so = startPoint.offset;\n ec = endPoint.cont;\n eo = endPoint.offset;\n }\n\n return new WrappedRange(sc, so, ec, eo);\n },\n\n /**\n * @method\n *\n * create WrappedRange from node\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNode: function(node) {\n let sc = node;\n let so = 0;\n let ec = node;\n let eo = dom.nodeLength(ec);\n\n // browsers can't target a picture or void node\n if (dom.isVoid(sc)) {\n so = dom.listPrev(sc).length - 1;\n sc = sc.parentNode;\n }\n if (dom.isBR(ec)) {\n eo = dom.listPrev(ec).length - 1;\n ec = ec.parentNode;\n } else if (dom.isVoid(ec)) {\n eo = dom.listPrev(ec).length;\n ec = ec.parentNode;\n }\n\n return this.create(sc, so, ec, eo);\n },\n\n /**\n * create WrappedRange from node after position\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNodeBefore: function(node) {\n return this.createFromNode(node).collapse(true);\n },\n\n /**\n * create WrappedRange from node after position\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNodeAfter: function(node) {\n return this.createFromNode(node).collapse();\n },\n\n /**\n * @method\n *\n * create WrappedRange from bookmark\n *\n * @param {Node} editable\n * @param {Object} bookmark\n * @return {WrappedRange}\n */\n createFromBookmark: function(editable, bookmark) {\n const sc = dom.fromOffsetPath(editable, bookmark.s.path);\n const so = bookmark.s.offset;\n const ec = dom.fromOffsetPath(editable, bookmark.e.path);\n const eo = bookmark.e.offset;\n return new WrappedRange(sc, so, ec, eo);\n },\n\n /**\n * @method\n *\n * create WrappedRange from paraBookmark\n *\n * @param {Object} bookmark\n * @param {Node[]} paras\n * @return {WrappedRange}\n */\n createFromParaBookmark: function(bookmark, paras) {\n const so = bookmark.s.offset;\n const eo = bookmark.e.offset;\n const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n\n return new WrappedRange(sc, so, ec, eo);\n }\n};\n","import $ from 'jquery';\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nexport function readFileAsDataURL(file) {\n return $.Deferred((deferred) => {\n $.extend(new FileReader(), {\n onload: (e) => {\n const dataURL = e.target.result;\n deferred.resolve(dataURL);\n },\n onerror: (err) => {\n deferred.reject(err);\n }\n }).readAsDataURL(file);\n }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nexport function createImage(url) {\n return $.Deferred((deferred) => {\n const $img = $('<img>');\n\n $img.one('load', () => {\n $img.off('error abort');\n deferred.resolve($img);\n }).one('error abort', () => {\n $img.off('load').detach();\n deferred.reject($img);\n }).css({\n display: 'none'\n }).appendTo(document.body).attr('src', url);\n }).promise();\n}\n","import range from '../core/range';\n\nexport default class History {\n constructor($editable) {\n this.stack = [];\n this.stackOffset = -1;\n this.$editable = $editable;\n this.editable = $editable[0];\n }\n\n makeSnapshot() {\n const rng = range.create(this.editable);\n const emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}};\n\n return {\n contents: this.$editable.html(),\n bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark)\n };\n }\n\n applySnapshot(snapshot) {\n if (snapshot.contents !== null) {\n this.$editable.html(snapshot.contents);\n }\n if (snapshot.bookmark !== null) {\n range.createFromBookmark(this.editable, snapshot.bookmark).select();\n }\n }\n\n /**\n * @method rewind\n * Rewinds the history stack back to the first snapshot taken.\n * Leaves the stack intact, so that \"Redo\" can still be used.\n */\n rewind() {\n // Create snap shot if not yet recorded\n if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n this.recordUndo();\n }\n\n // Return to the first available snapshot.\n this.stackOffset = 0;\n\n // Apply that snapshot.\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n\n /**\n * @method reset\n * Resets the history stack completely; reverting to an empty editor.\n */\n reset() {\n // Clear the stack.\n this.stack = [];\n\n // Restore stackOffset to its original value.\n this.stackOffset = -1;\n\n // Clear the editable area.\n this.$editable.html('');\n\n // Record our first snapshot (of nothing).\n this.recordUndo();\n }\n\n /**\n * undo\n */\n undo() {\n // Create snap shot if not yet recorded\n if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n this.recordUndo();\n }\n\n if (this.stackOffset > 0) {\n this.stackOffset--;\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n }\n\n /**\n * redo\n */\n redo() {\n if (this.stack.length - 1 > this.stackOffset) {\n this.stackOffset++;\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n }\n\n /**\n * recorded undo\n */\n recordUndo() {\n this.stackOffset++;\n\n // Wash out stack after stackOffset\n if (this.stack.length > this.stackOffset) {\n this.stack = this.stack.slice(0, this.stackOffset);\n }\n\n // Create new snapshot and push it to the end\n this.stack.push(this.makeSnapshot());\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class Style {\n /**\n * @method jQueryCSS\n *\n * [workaround] for old jQuery\n * passing an array of style properties to .css()\n * will result in an object of property-value pairs.\n * (compability with version < 1.9)\n *\n * @private\n * @param {jQuery} $obj\n * @param {Array} propertyNames - An array of one or more CSS properties.\n * @return {Object}\n */\n jQueryCSS($obj, propertyNames) {\n if (env.jqueryVersion < 1.9) {\n const result = {};\n $.each(propertyNames, (idx, propertyName) => {\n result[propertyName] = $obj.css(propertyName);\n });\n return result;\n }\n return $obj.css(propertyNames);\n }\n\n /**\n * returns style object from node\n *\n * @param {jQuery} $node\n * @return {Object}\n */\n fromNode($node) {\n const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n const styleInfo = this.jQueryCSS($node, properties) || {};\n styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10);\n return styleInfo;\n }\n\n /**\n * paragraph level style\n *\n * @param {WrappedRange} rng\n * @param {Object} styleInfo\n */\n stylePara(rng, styleInfo) {\n $.each(rng.nodes(dom.isPara, {\n includeAncestor: true\n }), (idx, para) => {\n $(para).css(styleInfo);\n });\n }\n\n /**\n * insert and returns styleNodes on range.\n *\n * @param {WrappedRange} rng\n * @param {Object} [options] - options for styleNodes\n * @param {String} [options.nodeName] - default: `SPAN`\n * @param {Boolean} [options.expandClosestSibling] - default: `false`\n * @param {Boolean} [options.onlyPartialContains] - default: `false`\n * @return {Node[]}\n */\n styleNodes(rng, options) {\n rng = rng.splitText();\n\n const nodeName = (options && options.nodeName) || 'SPAN';\n const expandClosestSibling = !!(options && options.expandClosestSibling);\n const onlyPartialContains = !!(options && options.onlyPartialContains);\n\n if (rng.isCollapsed()) {\n return [rng.insertNode(dom.create(nodeName))];\n }\n\n let pred = dom.makePredByNodeName(nodeName);\n const nodes = rng.nodes(dom.isText, {\n fullyContains: true\n }).map((text) => {\n return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n });\n\n if (expandClosestSibling) {\n if (onlyPartialContains) {\n const nodesInRange = rng.nodes();\n // compose with partial contains predication\n pred = func.and(pred, (node) => {\n return lists.contains(nodesInRange, node);\n });\n }\n\n return nodes.map((node) => {\n const siblings = dom.withClosestSiblings(node, pred);\n const head = lists.head(siblings);\n const tails = lists.tail(siblings);\n $.each(tails, (idx, elem) => {\n dom.appendChildNodes(head, elem.childNodes);\n dom.remove(elem);\n });\n return lists.head(siblings);\n });\n } else {\n return nodes;\n }\n }\n\n /**\n * get current style on cursor\n *\n * @param {WrappedRange} rng\n * @return {Object} - object contains style properties.\n */\n current(rng) {\n const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n let styleInfo = this.fromNode($cont);\n\n // document.queryCommandState for toggle state\n // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n try {\n styleInfo = $.extend(styleInfo, {\n 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n });\n } catch (e) {}\n\n // list-style-type to list-style(unordered, ordered)\n if (!rng.isOnList()) {\n styleInfo['list-style'] = 'none';\n } else {\n const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n const isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1;\n styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n }\n\n const para = dom.ancestor(rng.sc, dom.isPara);\n if (para && para.style['line-height']) {\n styleInfo['line-height'] = para.style.lineHeight;\n } else {\n const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n styleInfo['line-height'] = lineHeight.toFixed(1);\n }\n\n styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n styleInfo.range = rng;\n\n return styleInfo;\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport func from '../core/func';\nimport dom from '../core/dom';\nimport range from '../core/range';\n\nexport default class Bullet {\n /**\n * toggle ordered list\n */\n insertOrderedList(editable) {\n this.toggleList('OL', editable);\n }\n\n /**\n * toggle unordered list\n */\n insertUnorderedList(editable) {\n this.toggleList('UL', editable);\n }\n\n /**\n * indent\n */\n indent(editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n if (dom.isLi(head)) {\n this.wrapList(paras, head.parentNode.nodeName);\n } else {\n $.each(paras, (idx, para) => {\n $(para).css('marginLeft', (idx, val) => {\n return (parseInt(val, 10) || 0) + 25;\n });\n });\n }\n });\n\n rng.select();\n }\n\n /**\n * outdent\n */\n outdent(editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n if (dom.isLi(head)) {\n this.releaseList([paras]);\n } else {\n $.each(paras, (idx, para) => {\n $(para).css('marginLeft', (idx, val) => {\n val = (parseInt(val, 10) || 0);\n return val > 25 ? val - 25 : '';\n });\n });\n }\n });\n\n rng.select();\n }\n\n /**\n * toggle list\n *\n * @param {String} listName - OL or UL\n */\n toggleList(listName, editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n let paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const bookmark = rng.paraBookmark(paras);\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n // paragraph to list\n if (lists.find(paras, dom.isPurePara)) {\n let wrappedParas = [];\n $.each(clustereds, (idx, paras) => {\n wrappedParas = wrappedParas.concat(this.wrapList(paras, listName));\n });\n paras = wrappedParas;\n // list to paragraph or change list style\n } else {\n const diffLists = rng.nodes(dom.isList, {\n includeAncestor: true\n }).filter((listNode) => {\n return !$.nodeName(listNode, listName);\n });\n\n if (diffLists.length) {\n $.each(diffLists, (idx, listNode) => {\n dom.replace(listNode, listName);\n });\n } else {\n paras = this.releaseList(clustereds, true);\n }\n }\n\n range.createFromParaBookmark(bookmark, paras).select();\n }\n\n /**\n * @param {Node[]} paras\n * @param {String} listName\n * @return {Node[]}\n */\n wrapList(paras, listName) {\n const head = lists.head(paras);\n const last = lists.last(paras);\n\n const prevList = dom.isList(head.previousSibling) && head.previousSibling;\n const nextList = dom.isList(last.nextSibling) && last.nextSibling;\n\n const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n // P to LI\n paras = paras.map((para) => {\n return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n });\n\n // append to list(<ul>, <ol>)\n dom.appendChildNodes(listNode, paras);\n\n if (nextList) {\n dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n dom.remove(nextList);\n }\n\n return paras;\n }\n\n /**\n * @method releaseList\n *\n * @param {Array[]} clustereds\n * @param {Boolean} isEscapseToBody\n * @return {Node[]}\n */\n releaseList(clustereds, isEscapseToBody) {\n let releasedParas = [];\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n const last = lists.last(paras);\n\n const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n const lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n node: last.parentNode,\n offset: dom.position(last) + 1\n }, {\n isSkipPaddingBlankHTML: true\n }) : null;\n\n const middleList = dom.splitTree(headList, {\n node: head.parentNode,\n offset: dom.position(head)\n }, {\n isSkipPaddingBlankHTML: true\n });\n\n paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi)\n : lists.from(middleList.childNodes).filter(dom.isLi);\n\n // LI to P\n if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n paras = paras.map((para) => {\n return dom.replace(para, 'P');\n });\n }\n\n $.each(lists.from(paras).reverse(), (idx, para) => {\n dom.insertAfter(para, headList);\n });\n\n // remove empty lists\n const rootLists = lists.compact([headList, middleList, lastList]);\n $.each(rootLists, (idx, rootList) => {\n const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n $.each(listNodes.reverse(), (idx, listNode) => {\n if (!dom.nodeLength(listNode)) {\n dom.remove(listNode, true);\n }\n });\n });\n\n releasedParas = releasedParas.concat(paras);\n });\n\n return releasedParas;\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport Bullet from '../editing/Bullet';\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nexport default class Typing {\n constructor() {\n // a Bullet instance to toggle lists off\n this.bullet = new Bullet();\n }\n\n /**\n * insert tab\n *\n * @param {WrappedRange} rng\n * @param {Number} tabsize\n */\n insertTab(rng, tabsize) {\n const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n rng = rng.deleteContents();\n rng.insertNode(tab, true);\n\n rng = range.create(tab, tabsize);\n rng.select();\n }\n\n /**\n * insert paragraph\n */\n insertParagraph(editable) {\n let rng = range.create(editable);\n\n // deleteContents on range.\n rng = rng.deleteContents();\n\n // Wrap range if it needs to be wrapped by paragraph\n rng = rng.wrapBodyInlineWithPara();\n\n // finding paragraph\n const splitRoot = dom.ancestor(rng.sc, dom.isPara);\n\n let nextPara;\n // on paragraph: split paragraph\n if (splitRoot) {\n // if it is an empty line with li\n if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) {\n // toogle UL/OL and escape\n this.bullet.toggleList(splitRoot.parentNode.nodeName);\n return;\n // if it is an empty line with para on blockquote\n } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) {\n // escape blockquote\n dom.insertAfter(splitRoot, splitRoot.parentNode);\n nextPara = splitRoot;\n // if new line has content (not a line break)\n } else {\n nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n\n $.each(emptyAnchors, (idx, anchor) => {\n dom.remove(anchor);\n });\n\n // replace empty heading, pre or custom-made styleTag with P tag\n if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n nextPara = dom.replace(nextPara, 'p');\n }\n }\n // no paragraph: insert empty paragraph\n } else {\n const next = rng.sc.childNodes[rng.so];\n nextPara = $(dom.emptyPara)[0];\n if (next) {\n rng.sc.insertBefore(nextPara, next);\n } else {\n rng.sc.appendChild(nextPara);\n }\n }\n\n range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport lists from '../core/lists';\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nconst TableResultAction = function(startPoint, where, action, domTable) {\n const _startPoint = { 'colPos': 0, 'rowPos': 0 };\n const _virtualTable = [];\n const _actionCellList = [];\n\n /// ///////////////////////////////////////////\n // Private functions\n /// ///////////////////////////////////////////\n\n /**\n * Set the startPoint of action.\n */\n function setStartPoint() {\n if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) {\n console.error('Impossible to identify start Cell point.', startPoint);\n return;\n }\n _startPoint.colPos = startPoint.cellIndex;\n if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n console.error('Impossible to identify start Row point.', startPoint);\n return;\n }\n _startPoint.rowPos = startPoint.parentElement.rowIndex;\n }\n\n /**\n * Define virtual table position info object.\n *\n * @param {int} rowIndex Index position in line of virtual table.\n * @param {int} cellIndex Index position in column of virtual table.\n * @param {object} baseRow Row affected by this position.\n * @param {object} baseCell Cell affected by this position.\n * @param {bool} isSpan Inform if it is an span cell/row.\n */\n function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n const objPosition = {\n 'baseRow': baseRow,\n 'baseCell': baseCell,\n 'isRowSpan': isRowSpan,\n 'isColSpan': isColSpan,\n 'isVirtual': isVirtualCell\n };\n if (!_virtualTable[rowIndex]) {\n _virtualTable[rowIndex] = [];\n }\n _virtualTable[rowIndex][cellIndex] = objPosition;\n }\n\n /**\n * Create action cell object.\n *\n * @param {object} virtualTableCellObj Object of specific position on virtual table.\n * @param {enum} resultAction Action to be applied in that item.\n */\n function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n return {\n 'baseCell': virtualTableCellObj.baseCell,\n 'action': resultAction,\n 'virtualTable': {\n 'rowIndex': virtualRowPosition,\n 'cellIndex': virtualColPosition\n }\n };\n }\n\n /**\n * Recover free index of row to append Cell.\n *\n * @param {int} rowIndex Index of row to find free space.\n * @param {int} cellIndex Index of cell to find free space in table.\n */\n function recoverCellIndex(rowIndex, cellIndex) {\n if (!_virtualTable[rowIndex]) {\n return cellIndex;\n }\n if (!_virtualTable[rowIndex][cellIndex]) {\n return cellIndex;\n }\n\n let newCellIndex = cellIndex;\n while (_virtualTable[rowIndex][newCellIndex]) {\n newCellIndex++;\n if (!_virtualTable[rowIndex][newCellIndex]) {\n return newCellIndex;\n }\n }\n }\n\n /**\n * Recover info about row and cell and add information to virtual table.\n *\n * @param {object} row Row to recover information.\n * @param {object} cell Cell to recover information.\n */\n function addCellInfoToVirtual(row, cell) {\n const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n const cellHasColspan = (cell.colSpan > 1);\n const cellHasRowspan = (cell.rowSpan > 1);\n const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos);\n setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n // Add span rows to virtual Table.\n const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n if (rowspanNumber > 1) {\n for (let rp = 1; rp < rowspanNumber; rp++) {\n const rowspanIndex = row.rowIndex + rp;\n adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n }\n }\n\n // Add span cols to virtual table.\n const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n if (colspanNumber > 1) {\n for (let cp = 1; cp < colspanNumber; cp++) {\n const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp));\n adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n }\n }\n }\n\n /**\n * Process validation and adjust of start point if needed\n *\n * @param {int} rowIndex\n * @param {int} cellIndex\n * @param {object} cell\n * @param {bool} isSelectedCell\n */\n function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n _startPoint.colPos++;\n }\n }\n\n /**\n * Create virtual table of cells with all cells, including span cells.\n */\n function createVirtualTable() {\n const rows = domTable.rows;\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const cells = rows[rowIndex].cells;\n for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n }\n }\n }\n\n /**\n * Get action to be applied on the cell.\n *\n * @param {object} cell virtual table cell to apply action\n */\n function getDeleteResultActionToCell(cell) {\n switch (where) {\n case TableResultAction.where.Column:\n if (cell.isColSpan) {\n return TableResultAction.resultAction.SubtractSpanCount;\n }\n break;\n case TableResultAction.where.Row:\n if (!cell.isVirtual && cell.isRowSpan) {\n return TableResultAction.resultAction.AddCell;\n } else if (cell.isRowSpan) {\n return TableResultAction.resultAction.SubtractSpanCount;\n }\n break;\n }\n return TableResultAction.resultAction.RemoveCell;\n }\n\n /**\n * Get action to be applied on the cell.\n *\n * @param {object} cell virtual table cell to apply action\n */\n function getAddResultActionToCell(cell) {\n switch (where) {\n case TableResultAction.where.Column:\n if (cell.isColSpan) {\n return TableResultAction.resultAction.SumSpanCount;\n } else if (cell.isRowSpan && cell.isVirtual) {\n return TableResultAction.resultAction.Ignore;\n }\n break;\n case TableResultAction.where.Row:\n if (cell.isRowSpan) {\n return TableResultAction.resultAction.SumSpanCount;\n } else if (cell.isColSpan && cell.isVirtual) {\n return TableResultAction.resultAction.Ignore;\n }\n break;\n }\n return TableResultAction.resultAction.AddCell;\n }\n\n function init() {\n setStartPoint();\n createVirtualTable();\n }\n\n /// ///////////////////////////////////////////\n // Public functions\n /// ///////////////////////////////////////////\n\n /**\n * Recover array os what to do in table.\n */\n this.getActionList = function() {\n const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1;\n const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1;\n\n let actualPosition = 0;\n let canContinue = true;\n while (canContinue) {\n const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition;\n const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition;\n const row = _virtualTable[rowPosition];\n if (!row) {\n canContinue = false;\n return _actionCellList;\n }\n const cell = row[colPosition];\n if (!cell) {\n canContinue = false;\n return _actionCellList;\n }\n\n // Define action to be applied in this cell\n let resultAction = TableResultAction.resultAction.Ignore;\n switch (action) {\n case TableResultAction.requestAction.Add:\n resultAction = getAddResultActionToCell(cell);\n break;\n case TableResultAction.requestAction.Delete:\n resultAction = getDeleteResultActionToCell(cell);\n break;\n }\n _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n actualPosition++;\n }\n\n return _actionCellList;\n };\n\n init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = { 'Row': 0, 'Column': 1 };\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = { 'Add': 0, 'Delete': 1 };\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 };\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nexport default class Table {\n /**\n * handle tab key\n *\n * @param {WrappedRange} rng\n * @param {Boolean} isShift\n */\n tab(rng, isShift) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const table = dom.ancestor(cell, dom.isTable);\n const cells = dom.listDescendant(table, dom.isCell);\n\n const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n if (nextCell) {\n range.create(nextCell, 0).select();\n }\n }\n\n /**\n * Add a new row\n *\n * @param {WrappedRange} rng\n * @param {String} position (top/bottom)\n * @return {Node}\n */\n addRow(rng, position) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n\n const currentTr = $(cell).closest('tr');\n const trAttributes = this.recoverAttributes(currentTr);\n const html = $('<tr' + trAttributes + '></tr>');\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let idCell = 0; idCell < actions.length; idCell++) {\n const currentCell = actions[idCell];\n const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n switch (currentCell.action) {\n case TableResultAction.resultAction.AddCell:\n html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n break;\n case TableResultAction.resultAction.SumSpanCount:\n if (position === 'top') {\n const baseCellTr = currentCell.baseCell.parent;\n const isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n if (isTopFromRowSpan) {\n const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n html.append(newTd);\n break;\n }\n }\n let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n rowspanNumber++;\n currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n break;\n }\n }\n\n if (position === 'top') {\n currentTr.before(html);\n } else {\n const cellHasRowspan = (cell.rowSpan > 1);\n if (cellHasRowspan) {\n const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html));\n return;\n }\n currentTr.after(html);\n }\n }\n\n /**\n * Add a new col\n *\n * @param {WrappedRange} rng\n * @param {String} position (left/right)\n * @return {Node}\n */\n addCol(rng, position) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const rowsGroup = $(row).siblings();\n rowsGroup.push(row);\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n TableResultAction.requestAction.Add, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n const currentCell = actions[actionIndex];\n const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n switch (currentCell.action) {\n case TableResultAction.resultAction.AddCell:\n if (position === 'right') {\n $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n } else {\n $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n }\n break;\n case TableResultAction.resultAction.SumSpanCount:\n if (position === 'right') {\n let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n colspanNumber++;\n currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n } else {\n $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n }\n break;\n }\n }\n }\n\n /*\n * Copy attributes from element.\n *\n * @param {object} Element to recover attributes.\n * @return {string} Copied string elements.\n */\n recoverAttributes(el) {\n let resultStr = '';\n\n if (!el) {\n return resultStr;\n }\n\n const attrList = el.attributes || [];\n\n for (let i = 0; i < attrList.length; i++) {\n if (attrList[i].name.toLowerCase() === 'id') {\n continue;\n }\n\n if (attrList[i].specified) {\n resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n }\n }\n\n return resultStr;\n }\n\n /**\n * Delete current row\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteRow(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const cellPos = row.children('td, th').index($(cell));\n const rowPos = row[0].rowIndex;\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n if (!actions[actionIndex]) {\n continue;\n }\n\n const baseCell = actions[actionIndex].baseCell;\n const virtualPosition = actions[actionIndex].virtualTable;\n const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1);\n let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0;\n switch (actions[actionIndex].action) {\n case TableResultAction.resultAction.Ignore:\n continue;\n case TableResultAction.resultAction.AddCell:\n const nextRow = row.next('tr')[0];\n if (!nextRow) { continue; }\n const cloneRow = row[0].cells[cellPos];\n if (hasRowspan) {\n if (rowspanNumber > 2) {\n rowspanNumber--;\n nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n nextRow.cells[cellPos].innerHTML = '';\n } else if (rowspanNumber === 2) {\n nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n nextRow.cells[cellPos].removeAttribute('rowSpan');\n nextRow.cells[cellPos].innerHTML = '';\n }\n }\n continue;\n case TableResultAction.resultAction.SubtractSpanCount:\n if (hasRowspan) {\n if (rowspanNumber > 2) {\n rowspanNumber--;\n baseCell.setAttribute('rowSpan', rowspanNumber);\n if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n } else if (rowspanNumber === 2) {\n baseCell.removeAttribute('rowSpan');\n if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n }\n }\n continue;\n case TableResultAction.resultAction.RemoveCell:\n // Do not need remove cell because row will be deleted.\n continue;\n }\n }\n row.remove();\n }\n\n /**\n * Delete current col\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteCol(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const cellPos = row.children('td, th').index($(cell));\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n if (!actions[actionIndex]) {\n continue;\n }\n switch (actions[actionIndex].action) {\n case TableResultAction.resultAction.Ignore:\n continue;\n case TableResultAction.resultAction.SubtractSpanCount:\n const baseCell = actions[actionIndex].baseCell;\n const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1);\n if (hasColspan) {\n let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0;\n if (colspanNumber > 2) {\n colspanNumber--;\n baseCell.setAttribute('colSpan', colspanNumber);\n if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n } else if (colspanNumber === 2) {\n baseCell.removeAttribute('colSpan');\n if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n }\n }\n continue;\n case TableResultAction.resultAction.RemoveCell:\n dom.remove(actions[actionIndex].baseCell, true);\n continue;\n }\n }\n }\n\n /**\n * create empty table element\n *\n * @param {Number} rowCount\n * @param {Number} colCount\n * @return {Node}\n */\n createTable(colCount, rowCount, options) {\n const tds = [];\n let tdHTML;\n for (let idxCol = 0; idxCol < colCount; idxCol++) {\n tds.push('<td>' + dom.blank + '</td>');\n }\n tdHTML = tds.join('');\n\n const trs = [];\n let trHTML;\n for (let idxRow = 0; idxRow < rowCount; idxRow++) {\n trs.push('<tr>' + tdHTML + '</tr>');\n }\n trHTML = trs.join('');\n const $table = $('<table>' + trHTML + '</table>');\n if (options && options.tableClassName) {\n $table.addClass(options.tableClassName);\n }\n\n return $table[0];\n }\n\n /**\n * Delete current table\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteTable(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n $(cell).closest('table').remove();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport { readFileAsDataURL, createImage } from '../core/async';\nimport History from '../editing/History';\nimport Style from '../editing/Style';\nimport Typing from '../editing/Typing';\nimport Table from '../editing/Table';\nimport Bullet from '../editing/Bullet';\n\nconst KEY_BOGUS = 'bogus';\n\n/**\n * @class Editor\n */\nexport default class Editor {\n constructor(context) {\n this.context = context;\n\n this.$note = context.layoutInfo.note;\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n this.editable = this.$editable[0];\n this.lastRange = null;\n\n this.style = new Style();\n this.table = new Table();\n this.typing = new Typing();\n this.bullet = new Bullet();\n this.history = new History(this.$editable);\n\n this.context.memo('help.undo', this.lang.help.undo);\n this.context.memo('help.redo', this.lang.help.redo);\n this.context.memo('help.tab', this.lang.help.tab);\n this.context.memo('help.untab', this.lang.help.untab);\n this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n this.context.memo('help.indent', this.lang.help.indent);\n this.context.memo('help.outdent', this.lang.help.outdent);\n this.context.memo('help.formatPara', this.lang.help.formatPara);\n this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n this.context.memo('help.fontName', this.lang.help.fontName);\n\n // native commands(with execCommand), generate function for execCommand\n const commands = [\n 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',\n 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',\n 'formatBlock', 'removeFormat', 'backColor'\n ];\n\n for (let idx = 0, len = commands.length; idx < len; idx++) {\n this[commands[idx]] = ((sCmd) => {\n return (value) => {\n this.beforeCommand();\n document.execCommand(sCmd, false, value);\n this.afterCommand(true);\n };\n })(commands[idx]);\n this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n }\n\n this.fontName = this.wrapCommand((value) => {\n return this.fontStyling('font-family', \"\\'\" + value + \"\\'\");\n });\n\n this.fontSize = this.wrapCommand((value) => {\n return this.fontStyling('font-size', value + 'px');\n });\n\n for (let idx = 1; idx <= 6; idx++) {\n this['formatH' + idx] = ((idx) => {\n return () => {\n this.formatBlock('H' + idx);\n };\n })(idx);\n this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]);\n };\n\n this.insertParagraph = this.wrapCommand(() => {\n this.typing.insertParagraph(this.editable);\n });\n\n this.insertOrderedList = this.wrapCommand(() => {\n this.bullet.insertOrderedList(this.editable);\n });\n\n this.insertUnorderedList = this.wrapCommand(() => {\n this.bullet.insertUnorderedList(this.editable);\n });\n\n this.indent = this.wrapCommand(() => {\n this.bullet.indent(this.editable);\n });\n\n this.outdent = this.wrapCommand(() => {\n this.bullet.outdent(this.editable);\n });\n\n /**\n * insertNode\n * insert node\n * @param {Node} node\n */\n this.insertNode = this.wrapCommand((node) => {\n if (this.isLimited($(node).text().length)) {\n return;\n }\n const rng = this.createRange();\n rng.insertNode(node);\n range.createFromNodeAfter(node).select();\n });\n\n /**\n * insert text\n * @param {String} text\n */\n this.insertText = this.wrapCommand((text) => {\n if (this.isLimited(text.length)) {\n return;\n }\n const rng = this.createRange();\n const textNode = rng.insertNode(dom.createText(text));\n range.create(textNode, dom.nodeLength(textNode)).select();\n });\n /**\n * paste HTML\n * @param {String} markup\n */\n this.pasteHTML = this.wrapCommand((markup) => {\n if (this.isLimited(markup.length)) {\n return;\n }\n const contents = this.createRange().pasteHTML(markup);\n range.createFromNodeAfter(lists.last(contents)).select();\n });\n\n /**\n * formatBlock\n *\n * @param {String} tagName\n */\n this.formatBlock = this.wrapCommand((tagName, $target) => {\n const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle;\n if (onApplyCustomStyle) {\n onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock);\n } else {\n this.onFormatBlock(tagName, $target);\n }\n });\n\n /**\n * insert horizontal rule\n */\n this.insertHorizontalRule = this.wrapCommand(() => {\n const hrNode = this.createRange().insertNode(dom.create('HR'));\n if (hrNode.nextSibling) {\n range.create(hrNode.nextSibling, 0).normalize().select();\n }\n });\n\n /**\n * lineHeight\n * @param {String} value\n */\n this.lineHeight = this.wrapCommand((value) => {\n this.style.stylePara(this.createRange(), {\n lineHeight: value\n });\n });\n\n /**\n * create link (command)\n *\n * @param {Object} linkInfo\n */\n this.createLink = this.wrapCommand((linkInfo) => {\n let linkUrl = linkInfo.url;\n const linkText = linkInfo.text;\n const isNewWindow = linkInfo.isNewWindow;\n let rng = linkInfo.range || this.createRange();\n const isTextChanged = rng.toString() !== linkText;\n\n // handle spaced urls from input\n if (typeof linkUrl === 'string') {\n linkUrl = linkUrl.trim();\n }\n\n if (this.options.onCreateLink) {\n linkUrl = this.options.onCreateLink(linkUrl);\n } else {\n // if url doesn't match an URL schema, set http:// as default\n linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?/.test(linkUrl)\n ? linkUrl : 'http://' + linkUrl;\n }\n\n let anchors = [];\n if (isTextChanged) {\n rng = rng.deleteContents();\n const anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]);\n anchors.push(anchor);\n } else {\n anchors = this.style.styleNodes(rng, {\n nodeName: 'A',\n expandClosestSibling: true,\n onlyPartialContains: true\n });\n }\n\n $.each(anchors, (idx, anchor) => {\n $(anchor).attr('href', linkUrl);\n if (isNewWindow) {\n $(anchor).attr('target', '_blank');\n } else {\n $(anchor).removeAttr('target');\n }\n });\n\n const startRange = range.createFromNodeBefore(lists.head(anchors));\n const startPoint = startRange.getStartPoint();\n const endRange = range.createFromNodeAfter(lists.last(anchors));\n const endPoint = endRange.getEndPoint();\n\n range.create(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n ).select();\n });\n\n /**\n * setting color\n *\n * @param {Object} sObjColor color code\n * @param {String} sObjColor.foreColor foreground color\n * @param {String} sObjColor.backColor background color\n */\n this.color = this.wrapCommand((colorInfo) => {\n const foreColor = colorInfo.foreColor;\n const backColor = colorInfo.backColor;\n\n if (foreColor) { document.execCommand('foreColor', false, foreColor); }\n if (backColor) { document.execCommand('backColor', false, backColor); }\n });\n\n /**\n * Set foreground color\n *\n * @param {String} colorCode foreground color code\n */\n this.foreColor = this.wrapCommand((colorInfo) => {\n document.execCommand('styleWithCSS', false, true);\n document.execCommand('foreColor', false, colorInfo);\n });\n\n /**\n * insert Table\n *\n * @param {String} dimension of table (ex : \"5x5\")\n */\n this.insertTable = this.wrapCommand((dim) => {\n const dimension = dim.split('x');\n\n const rng = this.createRange().deleteContents();\n rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options));\n });\n\n /**\n * remove media object and Figure Elements if media object is img with Figure.\n */\n this.removeMedia = this.wrapCommand(() => {\n let $target = $(this.restoreTarget()).parent();\n if ($target.parent('figure').length) {\n $target.parent('figure').remove();\n } else {\n $target = $(this.restoreTarget()).detach();\n }\n this.context.triggerEvent('media.delete', $target, this.$editable);\n });\n\n /**\n * float me\n *\n * @param {String} value\n */\n this.floatMe = this.wrapCommand((value) => {\n const $target = $(this.restoreTarget());\n $target.toggleClass('note-float-left', value === 'left');\n $target.toggleClass('note-float-right', value === 'right');\n $target.css('float', value);\n });\n\n /**\n * resize overlay element\n * @param {String} value\n */\n this.resize = this.wrapCommand((value) => {\n const $target = $(this.restoreTarget());\n $target.css({\n width: value * 100 + '%',\n height: ''\n });\n });\n }\n\n initialize() {\n // bind custom events\n this.$editable.on('keydown', (event) => {\n if (event.keyCode === key.code.ENTER) {\n this.context.triggerEvent('enter', event);\n }\n this.context.triggerEvent('keydown', event);\n\n if (!event.isDefaultPrevented()) {\n if (this.options.shortcuts) {\n this.handleKeyMap(event);\n } else {\n this.preventDefaultEditableShortCuts(event);\n }\n }\n if (this.isLimited(1, event)) {\n return false;\n }\n }).on('keyup', (event) => {\n this.context.triggerEvent('keyup', event);\n }).on('focus', (event) => {\n this.context.triggerEvent('focus', event);\n }).on('blur', (event) => {\n this.context.triggerEvent('blur', event);\n }).on('mousedown', (event) => {\n this.context.triggerEvent('mousedown', event);\n }).on('mouseup', (event) => {\n this.context.triggerEvent('mouseup', event);\n }).on('scroll', (event) => {\n this.context.triggerEvent('scroll', event);\n }).on('paste', (event) => {\n this.context.triggerEvent('paste', event);\n });\n\n // init content before set event\n this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n\n this.$editable.on(env.inputEventName, func.debounce(() => {\n this.context.triggerEvent('change', this.$editable.html());\n }, 100));\n\n this.$editor.on('focusin', (event) => {\n this.context.triggerEvent('focusin', event);\n }).on('focusout', (event) => {\n this.context.triggerEvent('focusout', event);\n });\n\n if (!this.options.airMode) {\n if (this.options.width) {\n this.$editor.outerWidth(this.options.width);\n }\n if (this.options.height) {\n this.$editable.outerHeight(this.options.height);\n }\n if (this.options.maxHeight) {\n this.$editable.css('max-height', this.options.maxHeight);\n }\n if (this.options.minHeight) {\n this.$editable.css('min-height', this.options.minHeight);\n }\n }\n\n this.history.recordUndo();\n }\n\n destroy() {\n this.$editable.off();\n }\n\n handleKeyMap(event) {\n const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n const keys = [];\n\n if (event.metaKey) { keys.push('CMD'); }\n if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }\n if (event.shiftKey) { keys.push('SHIFT'); }\n\n const keyName = key.nameFromCode[event.keyCode];\n if (keyName) {\n keys.push(keyName);\n }\n\n const eventName = keyMap[keys.join('+')];\n if (eventName) {\n if (this.context.invoke(eventName) !== false) {\n event.preventDefault();\n }\n } else if (key.isEdit(event.keyCode)) {\n this.afterCommand();\n }\n }\n\n preventDefaultEditableShortCuts(event) {\n // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n if ((event.ctrlKey || event.metaKey) &&\n lists.contains([66, 73, 85], event.keyCode)) {\n event.preventDefault();\n }\n }\n\n isLimited(pad, event) {\n pad = pad || 0;\n\n if (typeof event !== 'undefined') {\n if (key.isMove(event.keyCode) ||\n (event.ctrlKey || event.metaKey) ||\n lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n return false;\n }\n }\n\n if (this.options.maxTextLength > 0) {\n if ((this.$editable.text().length + pad) >= this.options.maxTextLength) {\n return true;\n }\n }\n return false;\n }\n /**\n * create range\n * @return {WrappedRange}\n */\n createRange() {\n this.focus();\n return range.create(this.editable);\n }\n\n /**\n * saveRange\n *\n * save current range\n *\n * @param {Boolean} [thenCollapse=false]\n */\n saveRange(thenCollapse) {\n this.lastRange = this.createRange();\n if (thenCollapse) {\n this.lastRange.collapse().select();\n }\n }\n\n /**\n * restoreRange\n *\n * restore lately range\n */\n restoreRange() {\n if (this.lastRange) {\n this.lastRange.select();\n this.focus();\n }\n }\n\n saveTarget(node) {\n this.$editable.data('target', node);\n }\n\n clearTarget() {\n this.$editable.removeData('target');\n }\n\n restoreTarget() {\n return this.$editable.data('target');\n }\n\n /**\n * currentStyle\n *\n * current style\n * @return {Object|Boolean} unfocus\n */\n currentStyle() {\n let rng = range.create();\n if (rng) {\n rng = rng.normalize();\n }\n return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n }\n\n /**\n * style from node\n *\n * @param {jQuery} $node\n * @return {Object}\n */\n styleFromNode($node) {\n return this.style.fromNode($node);\n }\n\n /**\n * undo\n */\n undo() {\n this.context.triggerEvent('before.command', this.$editable.html());\n this.history.undo();\n this.context.triggerEvent('change', this.$editable.html());\n }\n\n /**\n * redo\n */\n redo() {\n this.context.triggerEvent('before.command', this.$editable.html());\n this.history.redo();\n this.context.triggerEvent('change', this.$editable.html());\n }\n\n /**\n * before command\n */\n beforeCommand() {\n this.context.triggerEvent('before.command', this.$editable.html());\n // keep focus on editable before command execution\n this.focus();\n }\n\n /**\n * after command\n * @param {Boolean} isPreventTrigger\n */\n afterCommand(isPreventTrigger) {\n this.normalizeContent();\n this.history.recordUndo();\n if (!isPreventTrigger) {\n this.context.triggerEvent('change', this.$editable.html());\n }\n }\n\n /**\n * handle tab key\n */\n tab() {\n const rng = this.createRange();\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.table.tab(rng);\n } else {\n if (this.options.tabSize === 0) {\n return false;\n }\n\n if (!this.isLimited(this.options.tabSize)) {\n this.beforeCommand();\n this.typing.insertTab(rng, this.options.tabSize);\n this.afterCommand();\n }\n }\n }\n\n /**\n * handle shift+tab key\n */\n untab() {\n const rng = this.createRange();\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.table.tab(rng, true);\n } else {\n if (this.options.tabSize === 0) {\n return false;\n }\n }\n }\n\n /**\n * run given function between beforeCommand and afterCommand\n */\n wrapCommand(fn) {\n return () => {\n this.beforeCommand();\n fn.apply(this, arguments);\n this.afterCommand();\n };\n }\n\n /**\n * insert image\n *\n * @param {String} src\n * @param {String|Function} param\n * @return {Promise}\n */\n insertImage(src, param) {\n return createImage(src, param).then(($image) => {\n this.beforeCommand();\n\n if (typeof param === 'function') {\n param($image);\n } else {\n if (typeof param === 'string') {\n $image.attr('data-filename', param);\n }\n $image.css('width', Math.min(this.$editable.width(), $image.width()));\n }\n\n $image.show();\n range.create(this.editable).insertNode($image[0]);\n range.createFromNodeAfter($image[0]).select();\n this.afterCommand();\n }).fail((e) => {\n this.context.triggerEvent('image.upload.error', e);\n });\n }\n\n /**\n * insertImages\n * @param {File[]} files\n */\n insertImages(files) {\n $.each(files, (idx, file) => {\n const filename = file.name;\n if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) {\n this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError);\n } else {\n readFileAsDataURL(file).then((dataURL) => {\n return this.insertImage(dataURL, filename);\n }).fail(() => {\n this.context.triggerEvent('image.upload.error');\n });\n }\n });\n }\n\n /**\n * insertImagesOrCallback\n * @param {File[]} files\n */\n insertImagesOrCallback(files) {\n const callbacks = this.options.callbacks;\n\n // If onImageUpload this.options setted\n if (callbacks.onImageUpload) {\n this.context.triggerEvent('image.upload', files);\n // else insert Image as dataURL\n } else {\n this.insertImages(files);\n }\n }\n\n /**\n * return selected plain text\n * @return {String} text\n */\n getSelectedText() {\n let rng = this.createRange();\n\n // if range on anchor, expand range with anchor\n if (rng.isOnAnchor()) {\n rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n }\n\n return rng.toString();\n }\n\n onFormatBlock(tagName, $target) {\n // [workaround] for MSIE, IE need `<`\n tagName = env.isMSIE ? '<' + tagName + '>' : tagName;\n document.execCommand('FormatBlock', false, tagName);\n\n // support custom class\n if ($target && $target.length) {\n const className = $target[0].className || '';\n if (className) {\n const currentRange = this.createRange();\n\n const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName);\n $parent.addClass(className);\n }\n }\n }\n\n formatPara() {\n this.formatBlock('P');\n }\n\n fontStyling(target, value) {\n const rng = this.createRange();\n\n if (rng) {\n const spans = this.style.styleNodes(rng);\n $(spans).css(target, value);\n\n // [workaround] added styled bogus span for style\n // - also bogus character needed for cursor position\n if (rng.isCollapsed()) {\n const firstSpan = lists.head(spans);\n if (firstSpan && !dom.nodeLength(firstSpan)) {\n firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n range.createFromNodeAfter(firstSpan.firstChild).select();\n this.$editable.data(KEY_BOGUS, firstSpan);\n }\n }\n }\n }\n\n /**\n * unlink\n *\n * @type command\n */\n unlink() {\n let rng = this.createRange();\n if (rng.isOnAnchor()) {\n const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n rng = range.createFromNode(anchor);\n rng.select();\n\n this.beforeCommand();\n document.execCommand('unlink');\n this.afterCommand();\n }\n }\n\n /**\n * returns link info\n *\n * @return {Object}\n * @return {WrappedRange} return.range\n * @return {String} return.text\n * @return {Boolean} [return.isNewWindow=true]\n * @return {String} [return.url=\"\"]\n */\n getLinkInfo() {\n const rng = this.createRange().expand(dom.isAnchor);\n\n // Get the first anchor on range(for edit).\n const $anchor = $(lists.head(rng.nodes(dom.isAnchor)));\n const linkInfo = {\n range: rng,\n text: rng.toString(),\n url: $anchor.length ? $anchor.attr('href') : ''\n };\n\n // Define isNewWindow when anchor exists.\n if ($anchor.length) {\n linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n }\n\n return linkInfo;\n }\n\n addRow(position) {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.addRow(rng, position);\n this.afterCommand();\n }\n }\n\n addCol(position) {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.addCol(rng, position);\n this.afterCommand();\n }\n }\n\n deleteRow() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteRow(rng);\n this.afterCommand();\n }\n }\n\n deleteCol() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteCol(rng);\n this.afterCommand();\n }\n }\n\n deleteTable() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteTable(rng);\n this.afterCommand();\n }\n }\n\n /**\n * @param {Position} pos\n * @param {jQuery} $target - target element\n * @param {Boolean} [bKeepRatio] - keep ratio\n */\n resizeTo(pos, $target, bKeepRatio) {\n let imageSize;\n if (bKeepRatio) {\n const newRatio = pos.y / pos.x;\n const ratio = $target.data('ratio');\n imageSize = {\n width: ratio > newRatio ? pos.x : pos.y / ratio,\n height: ratio > newRatio ? pos.x * ratio : pos.y\n };\n } else {\n imageSize = {\n width: pos.x,\n height: pos.y\n };\n }\n\n $target.css(imageSize);\n }\n\n /**\n * returns whether editable area has focus or not.\n */\n hasFocus() {\n return this.$editable.is(':focus');\n }\n\n /**\n * set focus\n */\n focus() {\n // [workaround] Screen will move when page is scolled in IE.\n // - do focus when not focused\n if (!this.hasFocus()) {\n this.$editable.focus();\n }\n }\n\n /**\n * returns whether contents is empty or not.\n * @return {Boolean}\n */\n isEmpty() {\n return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n }\n\n /**\n * Removes all contents and restores the editable instance to an _emptyPara_.\n */\n empty() {\n this.context.invoke('code', dom.emptyPara);\n }\n\n /**\n * normalize content\n */\n normalizeContent() {\n this.$editable[0].normalize();\n }\n}\n","import lists from '../core/lists';\n\nexport default class Clipboard {\n constructor(context) {\n this.context = context;\n this.$editable = context.layoutInfo.editable;\n }\n\n initialize() {\n this.$editable.on('paste', this.pasteByEvent.bind(this));\n }\n\n /**\n * paste by clipboard event\n *\n * @param {Event} event\n */\n pasteByEvent(event) {\n const clipboardData = event.originalEvent.clipboardData;\n if (clipboardData && clipboardData.items && clipboardData.items.length) {\n const item = lists.head(clipboardData.items);\n if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n }\n this.context.invoke('editor.afterCommand');\n }\n }\n}\n","import $ from 'jquery';\n\nexport default class Dropzone {\n constructor(context) {\n this.context = context;\n this.$eventListener = $(document);\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.lang = this.options.langInfo;\n this.documentEventHandlers = {};\n\n this.$dropzone = $([\n '<div class=\"note-dropzone\">',\n ' <div class=\"note-dropzone-message\"/>',\n '</div>'\n ].join('')).prependTo(this.$editor);\n }\n\n /**\n * attach Drag and Drop Events\n */\n initialize() {\n if (this.options.disableDragAndDrop) {\n // prevent default drop event\n this.documentEventHandlers.onDrop = (e) => {\n e.preventDefault();\n };\n // do not consider outside of dropzone\n this.$eventListener = this.$dropzone;\n this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n } else {\n this.attachDragAndDropEvent();\n }\n }\n\n /**\n * attach Drag and Drop Events\n */\n attachDragAndDropEvent() {\n let collection = $();\n const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n this.documentEventHandlers.onDragenter = (e) => {\n const isCodeview = this.context.invoke('codeview.isActivated');\n const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0;\n if (!isCodeview && !collection.length && hasEditorSize) {\n this.$editor.addClass('dragover');\n this.$dropzone.width(this.$editor.width());\n this.$dropzone.height(this.$editor.height());\n $dropzoneMessage.text(this.lang.image.dragImageHere);\n }\n collection = collection.add(e.target);\n };\n\n this.documentEventHandlers.onDragleave = (e) => {\n collection = collection.not(e.target);\n if (!collection.length) {\n this.$editor.removeClass('dragover');\n }\n };\n\n this.documentEventHandlers.onDrop = () => {\n collection = $();\n this.$editor.removeClass('dragover');\n };\n\n // show dropzone on dragenter when dragging a object to document\n // -but only if the editor is visible, i.e. has a positive width and height\n this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter)\n .on('dragleave', this.documentEventHandlers.onDragleave)\n .on('drop', this.documentEventHandlers.onDrop);\n\n // change dropzone's message on hover.\n this.$dropzone.on('dragenter', () => {\n this.$dropzone.addClass('hover');\n $dropzoneMessage.text(this.lang.image.dropImage);\n }).on('dragleave', () => {\n this.$dropzone.removeClass('hover');\n $dropzoneMessage.text(this.lang.image.dragImageHere);\n });\n\n // attach dropImage\n this.$dropzone.on('drop', (event) => {\n const dataTransfer = event.originalEvent.dataTransfer;\n\n // stop the browser from opening the dropped content\n event.preventDefault();\n\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n this.$editable.focus();\n this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n } else {\n $.each(dataTransfer.types, (idx, type) => {\n const content = dataTransfer.getData(type);\n\n if (type.toLowerCase().indexOf('text') > -1) {\n this.context.invoke('editor.pasteHTML', content);\n } else {\n $(content).each((idx, item) => {\n this.context.invoke('editor.insertNode', item);\n });\n }\n });\n }\n }).on('dragover', false); // prevent default dragover event\n }\n\n destroy() {\n Object.keys(this.documentEventHandlers).forEach((key) => {\n this.$eventListener.off(key.substr(2).toLowerCase(), this.documentEventHandlers[key]);\n });\n this.documentEventHandlers = {};\n }\n}\n","import env from '../core/env';\nimport dom from '../core/dom';\n\nlet CodeMirror;\nif (env.hasCodeMirror) {\n if (env.isSupportAmd) {\n require(['codemirror'], function(cm) {\n CodeMirror = cm;\n });\n } else {\n CodeMirror = window.CodeMirror;\n }\n}\n\n/**\n * @class Codeview\n */\nexport default class CodeView {\n constructor(context) {\n this.context = context;\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.$codable = context.layoutInfo.codable;\n this.options = context.options;\n }\n\n sync() {\n const isCodeview = this.isActivated();\n if (isCodeview && env.hasCodeMirror) {\n this.$codable.data('cmEditor').save();\n }\n }\n\n /**\n * @return {Boolean}\n */\n isActivated() {\n return this.$editor.hasClass('codeview');\n }\n\n /**\n * toggle codeview\n */\n toggle() {\n if (this.isActivated()) {\n this.deactivate();\n } else {\n this.activate();\n }\n this.context.triggerEvent('codeview.toggled');\n }\n\n /**\n * activate code view\n */\n activate() {\n this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n this.$codable.height(this.$editable.height());\n\n this.context.invoke('toolbar.updateCodeview', true);\n this.$editor.addClass('codeview');\n this.$codable.focus();\n\n // activate CodeMirror as codable\n if (env.hasCodeMirror) {\n const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n // CodeMirror TernServer\n if (this.options.codemirror.tern) {\n const server = new CodeMirror.TernServer(this.options.codemirror.tern);\n cmEditor.ternServer = server;\n cmEditor.on('cursorActivity', (cm) => {\n server.updateArgHints(cm);\n });\n }\n\n cmEditor.on('blur', (event) => {\n this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n });\n\n // CodeMirror hasn't Padding.\n cmEditor.setSize(null, this.$editable.outerHeight());\n this.$codable.data('cmEditor', cmEditor);\n } else {\n this.$codable.on('blur', (event) => {\n this.context.triggerEvent('blur.codeview', this.$codable.val(), event);\n });\n }\n }\n\n /**\n * deactivate code view\n */\n deactivate() {\n // deactivate CodeMirror as codable\n if (env.hasCodeMirror) {\n const cmEditor = this.$codable.data('cmEditor');\n this.$codable.val(cmEditor.getValue());\n cmEditor.toTextArea();\n }\n\n const value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara;\n const isChange = this.$editable.html() !== value;\n\n this.$editable.html(value);\n this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n this.$editor.removeClass('codeview');\n\n if (isChange) {\n this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n }\n\n this.$editable.focus();\n\n this.context.invoke('toolbar.updateCodeview', false);\n }\n\n destroy() {\n if (this.isActivated()) {\n this.deactivate();\n }\n }\n}\n","import $ from 'jquery';\nconst EDITABLE_PADDING = 24;\n\nexport default class Statusbar {\n constructor(context) {\n this.$document = $(document);\n this.$statusbar = context.layoutInfo.statusbar;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n }\n\n initialize() {\n if (this.options.airMode || this.options.disableResizeEditor) {\n this.destroy();\n return;\n }\n\n this.$statusbar.on('mousedown', (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n const editableTop = this.$editable.offset().top - this.$document.scrollTop();\n const onMouseMove = (event) => {\n let height = event.clientY - (editableTop + EDITABLE_PADDING);\n\n height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height;\n height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height;\n\n this.$editable.height(height);\n };\n\n this.$document.on('mousemove', onMouseMove).one('mouseup', () => {\n this.$document.off('mousemove', onMouseMove);\n });\n });\n }\n\n destroy() {\n this.$statusbar.off();\n this.$statusbar.addClass('locked');\n }\n}\n","import $ from 'jquery';\n\nexport default class Fullscreen {\n constructor(context) {\n this.context = context;\n\n this.$editor = context.layoutInfo.editor;\n this.$toolbar = context.layoutInfo.toolbar;\n this.$editable = context.layoutInfo.editable;\n this.$codable = context.layoutInfo.codable;\n\n this.$window = $(window);\n this.$scrollbar = $('html, body');\n\n this.onResize = () => {\n this.resizeTo({\n h: this.$window.height() - this.$toolbar.outerHeight()\n });\n };\n }\n\n resizeTo(size) {\n this.$editable.css('height', size.h);\n this.$codable.css('height', size.h);\n if (this.$codable.data('cmeditor')) {\n this.$codable.data('cmeditor').setsize(null, size.h);\n }\n }\n\n /**\n * toggle fullscreen\n */\n toggle() {\n this.$editor.toggleClass('fullscreen');\n if (this.isFullscreen()) {\n this.$editable.data('orgHeight', this.$editable.css('height'));\n this.$window.on('resize', this.onResize).trigger('resize');\n this.$scrollbar.css('overflow', 'hidden');\n } else {\n this.$window.off('resize', this.onResize);\n this.resizeTo({ h: this.$editable.data('orgHeight') });\n this.$scrollbar.css('overflow', 'visible');\n }\n\n this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n }\n\n isFullscreen() {\n return this.$editor.hasClass('fullscreen');\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\n\nexport default class Handle {\n constructor(context) {\n this.context = context;\n this.$document = $(document);\n this.$editingArea = context.layoutInfo.editingArea;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n this.events = {\n 'summernote.mousedown': (we, e) => {\n if (this.update(e.target)) {\n e.preventDefault();\n }\n },\n 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => {\n this.update();\n },\n 'summernote.disable': () => {\n this.hide();\n },\n 'summernote.codeview.toggled': () => {\n this.update();\n }\n };\n }\n\n initialize() {\n this.$handle = $([\n '<div class=\"note-handle\">',\n '<div class=\"note-control-selection\">',\n '<div class=\"note-control-selection-bg\"></div>',\n '<div class=\"note-control-holder note-control-nw\"></div>',\n '<div class=\"note-control-holder note-control-ne\"></div>',\n '<div class=\"note-control-holder note-control-sw\"></div>',\n '<div class=\"',\n (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'),\n ' note-control-se\"></div>',\n (this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>'),\n '</div>',\n '</div>'\n ].join('')).prependTo(this.$editingArea);\n\n this.$handle.on('mousedown', (event) => {\n if (dom.isControlSizing(event.target)) {\n event.preventDefault();\n event.stopPropagation();\n\n const $target = this.$handle.find('.note-control-selection').data('target');\n const posStart = $target.offset();\n const scrollTop = this.$document.scrollTop();\n\n const onMouseMove = (event) => {\n this.context.invoke('editor.resizeTo', {\n x: event.clientX - posStart.left,\n y: event.clientY - (posStart.top - scrollTop)\n }, $target, !event.shiftKey);\n\n this.update($target[0]);\n };\n\n this.$document\n .on('mousemove', onMouseMove)\n .one('mouseup', (e) => {\n e.preventDefault();\n this.$document.off('mousemove', onMouseMove);\n this.context.invoke('editor.afterCommand');\n });\n\n if (!$target.data('ratio')) { // original ratio.\n $target.data('ratio', $target.height() / $target.width());\n }\n }\n });\n\n // Listen for scrolling on the handle overlay.\n this.$handle.on('wheel', (e) => {\n e.preventDefault();\n this.update();\n });\n }\n\n destroy() {\n this.$handle.remove();\n }\n\n update(target) {\n if (this.context.isDisabled()) {\n return false;\n }\n\n const isImage = dom.isImg(target);\n const $selection = this.$handle.find('.note-control-selection');\n\n this.context.invoke('imagePopover.update', target);\n\n if (isImage) {\n const $image = $(target);\n const position = $image.position();\n const pos = {\n left: position.left + parseInt($image.css('marginLeft'), 10),\n top: position.top + parseInt($image.css('marginTop'), 10)\n };\n\n // exclude margin\n const imageSize = {\n w: $image.outerWidth(false),\n h: $image.outerHeight(false)\n };\n\n $selection.css({\n display: 'block',\n left: pos.left,\n top: pos.top,\n width: imageSize.w,\n height: imageSize.h\n }).data('target', $image); // save current image element.\n\n const origImageObj = new Image();\n origImageObj.src = $image.attr('src');\n\n const sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n $selection.find('.note-control-selection-info').text(sizingText);\n this.context.invoke('editor.saveTarget', target);\n } else {\n this.hide();\n }\n\n return isImage;\n }\n\n /**\n * hide\n *\n * @param {jQuery} $handle\n */\n hide() {\n this.context.invoke('editor.clearTarget');\n this.$handle.children().hide();\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport key from '../core/key';\n\nconst defaultScheme = 'http://';\nconst linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nexport default class AutoLink {\n constructor(context) {\n this.context = context;\n this.events = {\n 'summernote.keyup': (we, e) => {\n if (!e.isDefaultPrevented()) {\n this.handleKeyup(e);\n }\n },\n 'summernote.keydown': (we, e) => {\n this.handleKeydown(e);\n }\n };\n }\n\n initialize() {\n this.lastWordRange = null;\n }\n\n destroy() {\n this.lastWordRange = null;\n }\n\n replace() {\n if (!this.lastWordRange) {\n return;\n }\n\n const keyword = this.lastWordRange.toString();\n const match = keyword.match(linkPattern);\n\n if (match && (match[1] || match[2])) {\n const link = match[1] ? keyword : defaultScheme + keyword;\n const node = $('<a />').html(keyword).attr('href', link)[0];\n\n this.lastWordRange.insertNode(node);\n this.lastWordRange = null;\n this.context.invoke('editor.focus');\n }\n }\n\n handleKeydown(e) {\n if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n const wordRange = this.context.invoke('editor.createRange').getWordRange();\n this.lastWordRange = wordRange;\n }\n }\n\n handleKeyup(e) {\n if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n this.replace();\n }\n }\n}\n","import dom from '../core/dom';\n\n/**\n * textarea auto sync.\n */\nexport default class AutoSync {\n constructor(context) {\n this.$note = context.layoutInfo.note;\n this.events = {\n 'summernote.change': () => {\n this.$note.val(context.invoke('code'));\n }\n };\n }\n\n shouldInitialize() {\n return dom.isTextarea(this.$note[0]);\n }\n}\n","import $ from 'jquery';\nexport default class Placeholder {\n constructor(context) {\n this.context = context;\n\n this.$editingArea = context.layoutInfo.editingArea;\n this.options = context.options;\n this.events = {\n 'summernote.init summernote.change': () => {\n this.update();\n },\n 'summernote.codeview.toggled': () => {\n this.update();\n }\n };\n }\n\n shouldInitialize() {\n return !!this.options.placeholder;\n }\n\n initialize() {\n this.$placeholder = $('<div class=\"note-placeholder\">');\n this.$placeholder.on('click', () => {\n this.context.invoke('focus');\n }).text(this.options.placeholder).prependTo(this.$editingArea);\n\n this.update();\n }\n\n destroy() {\n this.$placeholder.remove();\n }\n\n update() {\n const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n this.$placeholder.toggle(isShow);\n }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport env from '../core/env';\n\nexport default class Buttons {\n constructor(context) {\n this.ui = $.summernote.ui;\n this.context = context;\n this.$toolbar = context.layoutInfo.toolbar;\n this.options = context.options;\n this.lang = this.options.langInfo;\n this.invertedKeyMap = func.invertObject(\n this.options.keyMap[env.isMac ? 'mac' : 'pc']\n );\n }\n\n representShortcut(editorMethod) {\n let shortcut = this.invertedKeyMap[editorMethod];\n if (!this.options.shortcuts || !shortcut) {\n return '';\n }\n\n if (env.isMac) {\n shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n }\n\n shortcut = shortcut.replace('BACKSLASH', '\\\\')\n .replace('SLASH', '/')\n .replace('LEFTBRACKET', '[')\n .replace('RIGHTBRACKET', ']');\n\n return ' (' + shortcut + ')';\n }\n\n button(o) {\n if (!this.options.tooltip && o.tooltip) {\n delete o.tooltip;\n }\n o.container = this.options.container;\n return this.ui.button(o);\n }\n\n initialize() {\n this.addToolbarButtons();\n this.addImagePopoverButtons();\n this.addLinkPopoverButtons();\n this.addTablePopoverButtons();\n this.fontInstalledMap = {};\n }\n\n destroy() {\n delete this.fontInstalledMap;\n }\n\n isFontInstalled(name) {\n if (!this.fontInstalledMap.hasOwnProperty(name)) {\n this.fontInstalledMap[name] = env.isFontInstalled(name) ||\n lists.contains(this.options.fontNamesIgnoreCheck, name);\n }\n\n return this.fontInstalledMap[name];\n }\n\n isFontDeservedToAdd(name) {\n const genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n name = name.toLowerCase();\n\n return ((name !== '') && this.isFontInstalled(name) && ($.inArray(name, genericFamilies) === -1));\n }\n\n addToolbarButtons() {\n this.context.memo('button.style', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(\n this.ui.icon(this.options.icons.magic), this.options\n ),\n tooltip: this.lang.style.style,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n className: 'dropdown-style',\n items: this.options.styleTags,\n title: this.lang.style.style,\n template: (item) => {\n if (typeof item === 'string') {\n item = { tag: item, title: (this.lang.style.hasOwnProperty(item) ? this.lang.style[item] : item) };\n }\n\n const tag = item.tag;\n const title = item.title;\n const style = item.style ? ' style=\"' + item.style + '\" ' : '';\n const className = item.className ? ' class=\"' + item.className + '\"' : '';\n\n return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n },\n click: this.context.createInvokeHandler('editor.formatBlock')\n })\n ]).render();\n });\n\n for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n const item = this.options.styleTags[styleIdx];\n\n this.context.memo('button.style.' + item, () => {\n return this.button({\n className: 'note-btn-style-' + item,\n contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n tooltip: this.lang.style[item],\n click: this.context.createInvokeHandler('editor.formatBlock')\n }).render();\n });\n }\n\n this.context.memo('button.bold', () => {\n return this.button({\n className: 'note-btn-bold',\n contents: this.ui.icon(this.options.icons.bold),\n tooltip: this.lang.font.bold + this.representShortcut('bold'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.bold')\n }).render();\n });\n\n this.context.memo('button.italic', () => {\n return this.button({\n className: 'note-btn-italic',\n contents: this.ui.icon(this.options.icons.italic),\n tooltip: this.lang.font.italic + this.representShortcut('italic'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.italic')\n }).render();\n });\n\n this.context.memo('button.underline', () => {\n return this.button({\n className: 'note-btn-underline',\n contents: this.ui.icon(this.options.icons.underline),\n tooltip: this.lang.font.underline + this.representShortcut('underline'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.underline')\n }).render();\n });\n\n this.context.memo('button.clear', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.eraser),\n tooltip: this.lang.font.clear + this.representShortcut('removeFormat'),\n click: this.context.createInvokeHandler('editor.removeFormat')\n }).render();\n });\n\n this.context.memo('button.strikethrough', () => {\n return this.button({\n className: 'note-btn-strikethrough',\n contents: this.ui.icon(this.options.icons.strikethrough),\n tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n }).render();\n });\n\n this.context.memo('button.superscript', () => {\n return this.button({\n className: 'note-btn-superscript',\n contents: this.ui.icon(this.options.icons.superscript),\n tooltip: this.lang.font.superscript,\n click: this.context.createInvokeHandlerAndUpdateState('editor.superscript')\n }).render();\n });\n\n this.context.memo('button.subscript', () => {\n return this.button({\n className: 'note-btn-subscript',\n contents: this.ui.icon(this.options.icons.subscript),\n tooltip: this.lang.font.subscript,\n click: this.context.createInvokeHandlerAndUpdateState('editor.subscript')\n }).render();\n });\n\n this.context.memo('button.fontname', () => {\n const styleInfo = this.context.invoke('editor.currentStyle');\n\n // Add 'default' fonts into the fontnames array if not exist\n $.each(styleInfo['font-family'].split(','), (idx, fontname) => {\n fontname = fontname.trim().replace(/['\"]+/g, '');\n if (this.isFontDeservedToAdd(fontname)) {\n if ($.inArray(fontname, this.options.fontNames) === -1) {\n this.options.fontNames.push(fontname);\n }\n }\n });\n\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(\n '<span class=\"note-current-fontname\"/>', this.options\n ),\n tooltip: this.lang.font.name,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n className: 'dropdown-fontname',\n checkClassName: this.options.icons.menuCheck,\n items: this.options.fontNames.filter(this.isFontInstalled.bind(this)),\n title: this.lang.font.name,\n template: (item) => {\n return '<span style=\"font-family: \\'' + item + '\\'\">' + item + '</span>';\n },\n click: this.context.createInvokeHandlerAndUpdateState('editor.fontName')\n })\n ]).render();\n });\n\n this.context.memo('button.fontsize', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"/>', this.options),\n tooltip: this.lang.font.size,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n className: 'dropdown-fontsize',\n checkClassName: this.options.icons.menuCheck,\n items: this.options.fontSizes,\n title: this.lang.font.size,\n click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n })\n ]).render();\n });\n\n this.context.memo('button.color', () => {\n return this.ui.buttonGroup({\n className: 'note-color',\n children: [\n this.button({\n className: 'note-current-color-button',\n contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n tooltip: this.lang.color.recent,\n click: (e) => {\n const $button = $(e.currentTarget);\n this.context.invoke('editor.color', {\n backColor: $button.attr('data-backColor'),\n foreColor: $button.attr('data-foreColor')\n });\n },\n callback: ($button) => {\n const $recentColor = $button.find('.note-recent-color');\n $recentColor.css('background-color', '#FFFF00');\n $button.attr('data-backColor', '#FFFF00');\n }\n }),\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents('', this.options),\n tooltip: this.lang.color.more,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n items: [\n '<div class=\"note-palette\">',\n ' <div class=\"note-palette-title\">' + this.lang.color.background + '</div>',\n ' <div>',\n ' <button type=\"button\" class=\"note-color-reset btn btn-light\" data-event=\"backColor\" data-value=\"inherit\">',\n this.lang.color.transparent,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"backColor\"/>',\n '</div>',\n '<div class=\"note-palette\">',\n ' <div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>',\n ' <div>',\n ' <button type=\"button\" class=\"note-color-reset btn btn-light\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n this.lang.color.resetToDefault,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"foreColor\"/>',\n '</div>'\n ].join(''),\n callback: ($dropdown) => {\n $dropdown.find('.note-holder').each((idx, item) => {\n const $holder = $(item);\n $holder.append(this.ui.palette({\n colors: this.options.colors,\n colorsName: this.options.colorsName,\n eventName: $holder.data('event'),\n container: this.options.container,\n tooltip: this.options.tooltip\n }).render());\n });\n },\n click: (event) => {\n const $button = $(event.target);\n const eventName = $button.data('event');\n const value = $button.data('value');\n\n if (eventName && value) {\n const key = eventName === 'backColor' ? 'background-color' : 'color';\n const $color = $button.closest('.note-color').find('.note-recent-color');\n const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n $color.css(key, value);\n $currentButton.attr('data-' + eventName, value);\n this.context.invoke('editor.' + eventName, value);\n }\n }\n })\n ]\n }).render();\n });\n\n this.context.memo('button.ul', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.unorderedlist),\n tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'),\n click: this.context.createInvokeHandler('editor.insertUnorderedList')\n }).render();\n });\n\n this.context.memo('button.ol', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.orderedlist),\n tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'),\n click: this.context.createInvokeHandler('editor.insertOrderedList')\n }).render();\n });\n\n const justifyLeft = this.button({\n contents: this.ui.icon(this.options.icons.alignLeft),\n tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n click: this.context.createInvokeHandler('editor.justifyLeft')\n });\n\n const justifyCenter = this.button({\n contents: this.ui.icon(this.options.icons.alignCenter),\n tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n click: this.context.createInvokeHandler('editor.justifyCenter')\n });\n\n const justifyRight = this.button({\n contents: this.ui.icon(this.options.icons.alignRight),\n tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n click: this.context.createInvokeHandler('editor.justifyRight')\n });\n\n const justifyFull = this.button({\n contents: this.ui.icon(this.options.icons.alignJustify),\n tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n click: this.context.createInvokeHandler('editor.justifyFull')\n });\n\n const outdent = this.button({\n contents: this.ui.icon(this.options.icons.outdent),\n tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n click: this.context.createInvokeHandler('editor.outdent')\n });\n\n const indent = this.button({\n contents: this.ui.icon(this.options.icons.indent),\n tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n click: this.context.createInvokeHandler('editor.indent')\n });\n\n this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n this.context.memo('button.indent', func.invoke(indent, 'render'));\n\n this.context.memo('button.paragraph', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options),\n tooltip: this.lang.paragraph.paragraph,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown([\n this.ui.buttonGroup({\n className: 'note-align',\n children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n }),\n this.ui.buttonGroup({\n className: 'note-list',\n children: [outdent, indent]\n })\n ])\n ]).render();\n });\n\n this.context.memo('button.height', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options),\n tooltip: this.lang.font.height,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n items: this.options.lineHeights,\n checkClassName: this.options.icons.menuCheck,\n className: 'dropdown-line-height',\n title: this.lang.font.height,\n click: this.context.createInvokeHandler('editor.lineHeight')\n })\n ]).render();\n });\n\n this.context.memo('button.table', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options),\n tooltip: this.lang.table.table,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n title: this.lang.table.table,\n className: 'note-table',\n items: [\n '<div class=\"note-dimension-picker\">',\n ' <div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"/>',\n ' <div class=\"note-dimension-picker-highlighted\"/>',\n ' <div class=\"note-dimension-picker-unhighlighted\"/>',\n '</div>',\n '<div class=\"note-dimension-display\">1 x 1</div>'\n ].join('')\n })\n ], {\n callback: ($node) => {\n const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n $catcher.css({\n width: this.options.insertTableMaxSize.col + 'em',\n height: this.options.insertTableMaxSize.row + 'em'\n }).mousedown(this.context.createInvokeHandler('editor.insertTable'))\n .on('mousemove', this.tableMoveHandler.bind(this));\n }\n }).render();\n });\n\n this.context.memo('button.link', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.link),\n tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'),\n click: this.context.createInvokeHandler('linkDialog.show')\n }).render();\n });\n\n this.context.memo('button.picture', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.picture),\n tooltip: this.lang.image.image,\n click: this.context.createInvokeHandler('imageDialog.show')\n }).render();\n });\n\n this.context.memo('button.video', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.video),\n tooltip: this.lang.video.video,\n click: this.context.createInvokeHandler('videoDialog.show')\n }).render();\n });\n\n this.context.memo('button.hr', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.minus),\n tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'),\n click: this.context.createInvokeHandler('editor.insertHorizontalRule')\n }).render();\n });\n\n this.context.memo('button.fullscreen', () => {\n return this.button({\n className: 'btn-fullscreen',\n contents: this.ui.icon(this.options.icons.arrowsAlt),\n tooltip: this.lang.options.fullscreen,\n click: this.context.createInvokeHandler('fullscreen.toggle')\n }).render();\n });\n\n this.context.memo('button.codeview', () => {\n return this.button({\n className: 'btn-codeview',\n contents: this.ui.icon(this.options.icons.code),\n tooltip: this.lang.options.codeview,\n click: this.context.createInvokeHandler('codeview.toggle')\n }).render();\n });\n\n this.context.memo('button.redo', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.redo),\n tooltip: this.lang.history.redo + this.representShortcut('redo'),\n click: this.context.createInvokeHandler('editor.redo')\n }).render();\n });\n\n this.context.memo('button.undo', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.undo),\n tooltip: this.lang.history.undo + this.representShortcut('undo'),\n click: this.context.createInvokeHandler('editor.undo')\n }).render();\n });\n\n this.context.memo('button.help', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.question),\n tooltip: this.lang.options.help,\n click: this.context.createInvokeHandler('helpDialog.show')\n }).render();\n });\n }\n\n /**\n * image : [\n * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n * ['float', ['floatLeft', 'floatRight', 'floatNone' ]],\n * ['remove', ['removeMedia']]\n * ],\n */\n addImagePopoverButtons() {\n // Image Size Buttons\n this.context.memo('button.imageSize100', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">100%</span>',\n tooltip: this.lang.image.resizeFull,\n click: this.context.createInvokeHandler('editor.resize', '1')\n }).render();\n });\n this.context.memo('button.imageSize50', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">50%</span>',\n tooltip: this.lang.image.resizeHalf,\n click: this.context.createInvokeHandler('editor.resize', '0.5')\n }).render();\n });\n this.context.memo('button.imageSize25', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">25%</span>',\n tooltip: this.lang.image.resizeQuarter,\n click: this.context.createInvokeHandler('editor.resize', '0.25')\n }).render();\n });\n\n // Float Buttons\n this.context.memo('button.floatLeft', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignLeft),\n tooltip: this.lang.image.floatLeft,\n click: this.context.createInvokeHandler('editor.floatMe', 'left')\n }).render();\n });\n\n this.context.memo('button.floatRight', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignRight),\n tooltip: this.lang.image.floatRight,\n click: this.context.createInvokeHandler('editor.floatMe', 'right')\n }).render();\n });\n\n this.context.memo('button.floatNone', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignJustify),\n tooltip: this.lang.image.floatNone,\n click: this.context.createInvokeHandler('editor.floatMe', 'none')\n }).render();\n });\n\n // Remove Buttons\n this.context.memo('button.removeMedia', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.trash),\n tooltip: this.lang.image.remove,\n click: this.context.createInvokeHandler('editor.removeMedia')\n }).render();\n });\n }\n\n addLinkPopoverButtons() {\n this.context.memo('button.linkDialogShow', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.link),\n tooltip: this.lang.link.edit,\n click: this.context.createInvokeHandler('linkDialog.show')\n }).render();\n });\n\n this.context.memo('button.unlink', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.unlink),\n tooltip: this.lang.link.unlink,\n click: this.context.createInvokeHandler('editor.unlink')\n }).render();\n });\n }\n\n /**\n * table : [\n * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n * ],\n */\n addTablePopoverButtons() {\n this.context.memo('button.addRowUp', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowAbove),\n tooltip: this.lang.table.addRowAbove,\n click: this.context.createInvokeHandler('editor.addRow', 'top')\n }).render();\n });\n this.context.memo('button.addRowDown', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowBelow),\n tooltip: this.lang.table.addRowBelow,\n click: this.context.createInvokeHandler('editor.addRow', 'bottom')\n }).render();\n });\n this.context.memo('button.addColLeft', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colBefore),\n tooltip: this.lang.table.addColLeft,\n click: this.context.createInvokeHandler('editor.addCol', 'left')\n }).render();\n });\n this.context.memo('button.addColRight', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colAfter),\n tooltip: this.lang.table.addColRight,\n click: this.context.createInvokeHandler('editor.addCol', 'right')\n }).render();\n });\n this.context.memo('button.deleteRow', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowRemove),\n tooltip: this.lang.table.delRow,\n click: this.context.createInvokeHandler('editor.deleteRow')\n }).render();\n });\n this.context.memo('button.deleteCol', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colRemove),\n tooltip: this.lang.table.delCol,\n click: this.context.createInvokeHandler('editor.deleteCol')\n }).render();\n });\n this.context.memo('button.deleteTable', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.trash),\n tooltip: this.lang.table.delTable,\n click: this.context.createInvokeHandler('editor.deleteTable')\n }).render();\n });\n }\n\n build($container, groups) {\n for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n const group = groups[groupIdx];\n const groupName = $.isArray(group) ? group[0] : group;\n const buttons = $.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group];\n\n const $group = this.ui.buttonGroup({\n className: 'note-' + groupName\n }).render();\n\n for (let idx = 0, len = buttons.length; idx < len; idx++) {\n const btn = this.context.memo('button.' + buttons[idx]);\n if (btn) {\n $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n }\n }\n $group.appendTo($container);\n }\n }\n\n /**\n * @param {jQuery} [$container]\n */\n updateCurrentStyle($container) {\n const $cont = $container || this.$toolbar;\n\n const styleInfo = this.context.invoke('editor.currentStyle');\n this.updateBtnStates($cont, {\n '.note-btn-bold': () => {\n return styleInfo['font-bold'] === 'bold';\n },\n '.note-btn-italic': () => {\n return styleInfo['font-italic'] === 'italic';\n },\n '.note-btn-underline': () => {\n return styleInfo['font-underline'] === 'underline';\n },\n '.note-btn-subscript': () => {\n return styleInfo['font-subscript'] === 'subscript';\n },\n '.note-btn-superscript': () => {\n return styleInfo['font-superscript'] === 'superscript';\n },\n '.note-btn-strikethrough': () => {\n return styleInfo['font-strikethrough'] === 'strikethrough';\n }\n });\n\n if (styleInfo['font-family']) {\n const fontNames = styleInfo['font-family'].split(',').map((name) => {\n return name.replace(/[\\'\\\"]/g, '')\n .replace(/\\s+$/, '')\n .replace(/^\\s+/, '');\n });\n const fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n\n $cont.find('.dropdown-fontname a').each((idx, item) => {\n const $item = $(item);\n // always compare string to avoid creating another func.\n const isChecked = ($item.data('value') + '') === (fontName + '');\n $item.toggleClass('checked', isChecked);\n });\n $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n }\n\n if (styleInfo['font-size']) {\n const fontSize = styleInfo['font-size'];\n $cont.find('.dropdown-fontsize a').each((idx, item) => {\n const $item = $(item);\n // always compare with string to avoid creating another func.\n const isChecked = ($item.data('value') + '') === (fontSize + '');\n $item.toggleClass('checked', isChecked);\n });\n $cont.find('.note-current-fontsize').text(fontSize);\n }\n\n if (styleInfo['line-height']) {\n const lineHeight = styleInfo['line-height'];\n $cont.find('.dropdown-line-height li a').each((idx, item) => {\n // always compare with string to avoid creating another func.\n const isChecked = ($(item).data('value') + '') === (lineHeight + '');\n this.className = isChecked ? 'checked' : '';\n });\n }\n }\n\n updateBtnStates($container, infos) {\n $.each(infos, (selector, pred) => {\n this.ui.toggleBtnActive($container.find(selector), pred());\n });\n }\n\n tableMoveHandler(event) {\n const PX_PER_EM = 18;\n const $picker = $(event.target.parentNode); // target is mousecatcher\n const $dimensionDisplay = $picker.next();\n const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n let posOffset;\n // HTML5 with jQuery - e.offsetX is undefined in Firefox\n if (event.offsetX === undefined) {\n const posCatcher = $(event.target).offset();\n posOffset = {\n x: event.pageX - posCatcher.left,\n y: event.pageY - posCatcher.top\n };\n } else {\n posOffset = {\n x: event.offsetX,\n y: event.offsetY\n };\n }\n\n const dim = {\n c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n };\n\n $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n $catcher.data('value', dim.c + 'x' + dim.r);\n\n if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n $unhighlighted.css({ width: dim.c + 1 + 'em' });\n }\n\n if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n $unhighlighted.css({ height: dim.r + 1 + 'em' });\n }\n\n $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n }\n}\n","import $ from 'jquery';\nexport default class Toolbar {\n constructor(context) {\n this.context = context;\n\n this.$window = $(window);\n this.$document = $(document);\n\n this.ui = $.summernote.ui;\n this.$note = context.layoutInfo.note;\n this.$editor = context.layoutInfo.editor;\n this.$toolbar = context.layoutInfo.toolbar;\n this.options = context.options;\n\n this.followScroll = this.followScroll.bind(this);\n }\n\n shouldInitialize() {\n return !this.options.airMode;\n }\n\n initialize() {\n this.options.toolbar = this.options.toolbar || [];\n\n if (!this.options.toolbar.length) {\n this.$toolbar.hide();\n } else {\n this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n }\n\n if (this.options.toolbarContainer) {\n this.$toolbar.appendTo(this.options.toolbarContainer);\n }\n\n this.changeContainer(false);\n\n this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => {\n this.context.invoke('buttons.updateCurrentStyle');\n });\n\n this.context.invoke('buttons.updateCurrentStyle');\n if (this.options.followingToolbar) {\n this.$window.on('scroll resize', this.followScroll);\n }\n }\n\n destroy() {\n this.$toolbar.children().remove();\n\n if (this.options.followingToolbar) {\n this.$window.off('scroll resize', this.followScroll);\n }\n }\n\n followScroll() {\n if (this.$editor.hasClass('fullscreen')) {\n return false;\n }\n\n const $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper');\n const editorHeight = this.$editor.outerHeight();\n const editorWidth = this.$editor.width();\n\n const toolbarHeight = this.$toolbar.height();\n $toolbarWrapper.css({\n height: toolbarHeight\n });\n\n // check if the web app is currently using another static bar\n let otherBarHeight = 0;\n if (this.options.otherStaticBar) {\n otherBarHeight = $(this.options.otherStaticBar).outerHeight();\n }\n\n const currentOffset = this.$document.scrollTop();\n const editorOffsetTop = this.$editor.offset().top;\n const editorOffsetBottom = editorOffsetTop + editorHeight;\n const activateOffset = editorOffsetTop - otherBarHeight;\n const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight;\n\n if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) {\n this.$toolbar.css({\n position: 'fixed',\n top: otherBarHeight,\n width: editorWidth\n });\n } else {\n this.$toolbar.css({\n position: 'relative',\n top: 0,\n width: '100%'\n });\n }\n }\n\n changeContainer(isFullscreen) {\n if (isFullscreen) {\n this.$toolbar.prependTo(this.$editor);\n } else {\n if (this.options.toolbarContainer) {\n this.$toolbar.appendTo(this.options.toolbarContainer);\n }\n }\n }\n\n updateFullscreen(isFullscreen) {\n this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n\n this.changeContainer(isFullscreen);\n }\n\n updateCodeview(isCodeview) {\n this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n if (isCodeview) {\n this.deactivate();\n } else {\n this.activate();\n }\n }\n\n activate(isIncludeCodeview) {\n let $btn = this.$toolbar.find('button');\n if (!isIncludeCodeview) {\n $btn = $btn.not('.btn-codeview');\n }\n this.ui.toggleBtn($btn, true);\n }\n\n deactivate(isIncludeCodeview) {\n let $btn = this.$toolbar.find('button');\n if (!isIncludeCodeview) {\n $btn = $btn.not('.btn-codeview');\n }\n this.ui.toggleBtn($btn, false);\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class LinkDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<div class=\"form-group note-form-group\">',\n `<label class=\"note-form-label\">${this.lang.link.textToDisplay}</label>`,\n '<input class=\"note-link-text form-control note-form-control note-input\" type=\"text\" />',\n '</div>',\n '<div class=\"form-group note-form-group\">',\n `<label class=\"note-form-label\">${this.lang.link.url}</label>`,\n '<input class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\" />',\n '</div>',\n !this.options.disableLinkTarget\n ? $('<div/>').append(this.ui.checkbox({\n id: 'sn-checkbox-open-in-new-window',\n text: this.lang.link.openInNewWindow,\n checked: true\n }).render()).html()\n : ''\n ].join('');\n\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.link.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n className: 'link-dialog',\n title: this.lang.link.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n /**\n * toggle update button\n */\n toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n }\n\n /**\n * Show link dialog and set event handlers on dialog controls.\n *\n * @param {Object} linkInfo\n * @return {Promise}\n */\n showLinkDialog(linkInfo) {\n return $.Deferred((deferred) => {\n const $linkText = this.$dialog.find('.note-link-text');\n const $linkUrl = this.$dialog.find('.note-link-url');\n const $linkBtn = this.$dialog.find('.note-link-btn');\n const $openInNewWindow = this.$dialog.find('input[type=checkbox]');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n // if no url was given, copy text to url\n if (!linkInfo.url) {\n linkInfo.url = linkInfo.text;\n }\n\n $linkText.val(linkInfo.text);\n\n const handleLinkTextUpdate = () => {\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n // if linktext was modified by keyup,\n // stop cloning text from linkUrl\n linkInfo.text = $linkText.val();\n };\n\n $linkText.on('input', handleLinkTextUpdate).on('paste', () => {\n setTimeout(handleLinkTextUpdate, 0);\n });\n\n const handleLinkUrlUpdate = () => {\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n // display same link on `Text to display` input\n // when create a new link\n if (!linkInfo.text) {\n $linkText.val($linkUrl.val());\n }\n };\n\n $linkUrl.on('input', handleLinkUrlUpdate).on('paste', () => {\n setTimeout(handleLinkUrlUpdate, 0);\n }).val(linkInfo.url);\n\n if (!env.isSupportTouch) {\n $linkUrl.trigger('focus');\n }\n\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n this.bindEnterKey($linkUrl, $linkBtn);\n this.bindEnterKey($linkText, $linkBtn);\n\n const isChecked = linkInfo.isNewWindow !== undefined\n ? linkInfo.isNewWindow : this.context.options.linkTargetBlank;\n\n $openInNewWindow.prop('checked', isChecked);\n\n $linkBtn.one('click', (event) => {\n event.preventDefault();\n\n deferred.resolve({\n range: linkInfo.range,\n url: $linkUrl.val(),\n text: $linkText.val(),\n isNewWindow: $openInNewWindow.is(':checked')\n });\n this.ui.hideDialog(this.$dialog);\n });\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n // detach events\n $linkText.off('input paste keypress');\n $linkUrl.off('input paste keypress');\n $linkBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n }).promise();\n }\n\n /**\n * @param {Object} layoutInfo\n */\n show() {\n const linkInfo = this.context.invoke('editor.getLinkInfo');\n\n this.context.invoke('editor.saveRange');\n this.showLinkDialog(linkInfo).then((linkInfo) => {\n this.context.invoke('editor.restoreRange');\n this.context.invoke('editor.createLink', linkInfo);\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class LinkPopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => {\n this.update();\n },\n 'summernote.disable summernote.dialog.shown': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.link);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-link-popover',\n callback: ($node) => {\n const $content = $node.find('.popover-content,.note-popover-content');\n $content.prepend('<span><a target=\"_blank\"></a> </span>');\n }\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.link);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update() {\n // Prevent focusing on editable when invoke('code') is executed\n if (!this.context.invoke('editor.hasFocus')) {\n this.hide();\n return;\n }\n\n const rng = this.context.invoke('editor.createRange');\n if (rng.isCollapsed() && rng.isOnAnchor()) {\n const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n const href = $(anchor).attr('href');\n this.$popover.find('a').attr('href', href).html(href);\n\n const pos = dom.posFromPlaceholder(anchor);\n this.$popover.css({\n display: 'block',\n left: pos.left,\n top: pos.top\n });\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class ImageDialog {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n let imageLimitation = '';\n if (this.options.maximumImageFileSize) {\n const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +\n ' ' + ' KMGTP'[unit] + 'B';\n imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`;\n }\n\n const body = [\n '<div class=\"form-group note-form-group note-group-select-from-files\">',\n '<label class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>',\n '<input class=\"note-image-input note-form-control note-input\" ',\n ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\" />',\n imageLimitation,\n '</div>',\n '<div class=\"form-group note-group-image-url\" style=\"overflow:auto;\">',\n '<label class=\"note-form-label\">' + this.lang.image.url + '</label>',\n '<input class=\"note-image-url form-control note-form-control note-input ',\n ' col-md-12\" type=\"text\" />',\n '</div>'\n ].join('');\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.image.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n title: this.lang.image.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n show() {\n this.context.invoke('editor.saveRange');\n this.showImageDialog().then((data) => {\n // [workaround] hide dialog before restore range for IE range focus\n this.ui.hideDialog(this.$dialog);\n this.context.invoke('editor.restoreRange');\n\n if (typeof data === 'string') { // image url\n this.context.invoke('editor.insertImage', data);\n } else { // array of files\n this.context.invoke('editor.insertImagesOrCallback', data);\n }\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n\n /**\n * show image dialog\n *\n * @param {jQuery} $dialog\n * @return {Promise}\n */\n showImageDialog() {\n return $.Deferred((deferred) => {\n const $imageInput = this.$dialog.find('.note-image-input');\n const $imageUrl = this.$dialog.find('.note-image-url');\n const $imageBtn = this.$dialog.find('.note-image-btn');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n // Cloning imageInput to clear element.\n $imageInput.replaceWith($imageInput.clone().on('change', (event) => {\n deferred.resolve(event.target.files || event.target.value);\n }).val(''));\n\n $imageBtn.click((event) => {\n event.preventDefault();\n\n deferred.resolve($imageUrl.val());\n });\n\n $imageUrl.on('keyup paste', () => {\n const url = $imageUrl.val();\n this.ui.toggleBtn($imageBtn, url);\n }).val('');\n\n if (!env.isSupportTouch) {\n $imageUrl.trigger('focus');\n }\n this.bindEnterKey($imageUrl, $imageBtn);\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n $imageInput.off('change');\n $imageUrl.off('keyup paste keypress');\n $imageBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n });\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\n/**\n * Image popover module\n * mouse events that show/hide popover will be handled by Handle.js.\n * Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nexport default class ImagePopover {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n\n this.editable = context.layoutInfo.editable[0];\n this.options = context.options;\n\n this.events = {\n 'summernote.disable': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.image);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-image-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n this.context.invoke('buttons.build', $content, this.options.popover.image);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update(target) {\n if (dom.isImg(target)) {\n const pos = dom.posFromPlaceholder(target);\n const posEditor = dom.posFromPlaceholder(this.editable);\n this.$popover.css({\n display: 'block',\n left: this.options.popatmouse ? event.pageX - 20 : pos.left,\n top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top)\n });\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class TablePopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.mousedown': (we, e) => {\n this.update(e.target);\n },\n 'summernote.keyup summernote.scroll summernote.change': () => {\n this.update();\n },\n 'summernote.disable': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.table);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-table-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n // [workaround] Disable Firefox's default table editor\n if (env.isFF) {\n document.execCommand('enableInlineTableEditing', false, false);\n }\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update(target) {\n if (this.context.isDisabled()) {\n return false;\n }\n\n const isCell = dom.isCell(target);\n\n if (isCell) {\n const pos = dom.posFromPlaceholder(target);\n this.$popover.css({\n display: 'block',\n left: pos.left,\n top: pos.top\n });\n } else {\n this.hide();\n }\n\n return isCell;\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class VideoDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<div class=\"form-group note-form-group row-fluid\">',\n `<label class=\"note-form-label\">${this.lang.video.url} <small class=\"text-muted\">${this.lang.video.providers}</small></label>`,\n '<input class=\"note-video-url form-control note-form-control note-input\" type=\"text\" />',\n '</div>'\n ].join('');\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.video.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n title: this.lang.video.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n createVideoNode(url) {\n // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n const ytRegExp = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n const ytMatch = url.match(ytRegExp);\n\n const igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n const igMatch = url.match(igRegExp);\n\n const vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n const vMatch = url.match(vRegExp);\n\n const vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n const vimMatch = url.match(vimRegExp);\n\n const dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n const dmMatch = url.match(dmRegExp);\n\n const youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n const youkuMatch = url.match(youkuRegExp);\n\n const qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n const qqMatch = url.match(qqRegExp);\n\n const qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n const qqMatch2 = url.match(qqRegExp2);\n\n const mp4RegExp = /^.+.(mp4|m4v)$/;\n const mp4Match = url.match(mp4RegExp);\n\n const oggRegExp = /^.+.(ogg|ogv)$/;\n const oggMatch = url.match(oggRegExp);\n\n const webmRegExp = /^.+.(webm)$/;\n const webmMatch = url.match(webmRegExp);\n\n let $video;\n if (ytMatch && ytMatch[1].length === 11) {\n const youtubeId = ytMatch[1];\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', '//www.youtube.com/embed/' + youtubeId)\n .attr('width', '640').attr('height', '360');\n } else if (igMatch && igMatch[0].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/')\n .attr('width', '612').attr('height', '710')\n .attr('scrolling', 'no')\n .attr('allowtransparency', 'true');\n } else if (vMatch && vMatch[0].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', vMatch[0] + '/embed/simple')\n .attr('width', '600').attr('height', '600')\n .attr('class', 'vine-embed');\n } else if (vimMatch && vimMatch[3].length) {\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('src', '//player.vimeo.com/video/' + vimMatch[3])\n .attr('width', '640').attr('height', '360');\n } else if (dmMatch && dmMatch[2].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])\n .attr('width', '640').attr('height', '360');\n } else if (youkuMatch && youkuMatch[1].length) {\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('height', '498')\n .attr('width', '510')\n .attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) {\n const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]);\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('height', '310')\n .attr('width', '500')\n .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0');\n } else if (mp4Match || oggMatch || webmMatch) {\n $video = $('<video controls>')\n .attr('src', url)\n .attr('width', '640').attr('height', '360');\n } else {\n // this is not a known video link. Now what, Cat? Now what?\n return false;\n }\n\n $video.addClass('note-video-clip');\n\n return $video[0];\n }\n\n show() {\n const text = this.context.invoke('editor.getSelectedText');\n this.context.invoke('editor.saveRange');\n this.showVideoDialog(text).then((url) => {\n // [workaround] hide dialog before restore range for IE range focus\n this.ui.hideDialog(this.$dialog);\n this.context.invoke('editor.restoreRange');\n\n // build node\n const $node = this.createVideoNode(url);\n\n if ($node) {\n // insert video node\n this.context.invoke('editor.insertNode', $node);\n }\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n\n /**\n * show image dialog\n *\n * @param {jQuery} $dialog\n * @return {Promise}\n */\n showVideoDialog(text) {\n return $.Deferred((deferred) => {\n const $videoUrl = this.$dialog.find('.note-video-url');\n const $videoBtn = this.$dialog.find('.note-video-btn');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n $videoUrl.val(text).on('input', () => {\n this.ui.toggleBtn($videoBtn, $videoUrl.val());\n });\n\n if (!env.isSupportTouch) {\n $videoUrl.trigger('focus');\n }\n\n $videoBtn.click((event) => {\n event.preventDefault();\n\n deferred.resolve($videoUrl.val());\n });\n\n this.bindEnterKey($videoUrl, $videoBtn);\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n $videoUrl.off('input');\n $videoBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n });\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\n\nexport default class HelpDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<p class=\"text-center\">',\n '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote @@VERSION@@</a> · ',\n '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ',\n '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>',\n '</p>'\n ].join('');\n\n this.$dialog = this.ui.dialog({\n title: this.lang.options.help,\n fade: this.options.dialogsFade,\n body: this.createShortcutList(),\n footer: body,\n callback: ($node) => {\n $node.find('.modal-body,.note-modal-body').css({\n 'max-height': 300,\n 'overflow': 'scroll'\n });\n }\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n createShortcutList() {\n const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n return Object.keys(keyMap).map((key) => {\n const command = keyMap[key];\n const $row = $('<div><div class=\"help-list-item\"/></div>');\n $row.append($('<label><kbd>' + key + '</kdb></label>').css({\n 'width': 180,\n 'margin-right': 10\n })).append($('<span/>').html(this.context.memo('help.' + command) || command));\n return $row.html();\n }).join('');\n }\n\n /**\n * show help dialog\n *\n * @return {Promise}\n */\n showHelpDialog() {\n return $.Deferred((deferred) => {\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n deferred.resolve();\n });\n this.ui.showDialog(this.$dialog);\n }).promise();\n }\n\n show() {\n this.context.invoke('editor.saveRange');\n this.showHelpDialog().then(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nconst AIR_MODE_POPOVER_X_OFFSET = 20;\n\nexport default class AirPopover {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.scroll': () => {\n this.update();\n },\n 'summernote.disable summernote.change summernote.dialog.shown': () => {\n this.hide();\n },\n 'summernote.focusout': (we, e) => {\n // [workaround] Firefox doesn't support relatedTarget on focusout\n // - Ignore hide action on focus out in FF.\n if (env.isFF) {\n return;\n }\n\n if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(this.$popover[0]))) {\n this.hide();\n }\n }\n };\n }\n\n shouldInitialize() {\n return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-air-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.air);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update() {\n const styleInfo = this.context.invoke('editor.currentStyle');\n if (styleInfo.range && !styleInfo.range.isCollapsed()) {\n const rect = lists.last(styleInfo.range.getClientRects());\n if (rect) {\n const bnd = func.rect2bnd(rect);\n this.$popover.css({\n display: 'block',\n left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET,\n top: bnd.top + bnd.height\n });\n this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n }\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport key from '../core/key';\n\nconst POPOVER_DIST = 5;\n\nexport default class HintPopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.hint = this.options.hint || [];\n this.direction = this.options.hintDirection || 'bottom';\n this.hints = $.isArray(this.hint) ? this.hint : [this.hint];\n\n this.events = {\n 'summernote.keyup': (we, e) => {\n if (!e.isDefaultPrevented()) {\n this.handleKeyup(e);\n }\n },\n 'summernote.keydown': (we, e) => {\n this.handleKeydown(e);\n },\n 'summernote.disable summernote.dialog.shown': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return this.hints.length > 0;\n }\n\n initialize() {\n this.lastWordRange = null;\n this.$popover = this.ui.popover({\n className: 'note-hint-popover',\n hideArrow: true,\n direction: ''\n }).render().appendTo(this.options.container);\n\n this.$popover.hide();\n this.$content = this.$popover.find('.popover-content,.note-popover-content');\n this.$content.on('click', '.note-hint-item', () => {\n this.$content.find('.active').removeClass('active');\n $(this).addClass('active');\n this.replace();\n });\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n selectItem($item) {\n this.$content.find('.active').removeClass('active');\n $item.addClass('active');\n\n this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);\n }\n\n moveDown() {\n const $current = this.$content.find('.note-hint-item.active');\n const $next = $current.next();\n\n if ($next.length) {\n this.selectItem($next);\n } else {\n let $nextGroup = $current.parent().next();\n\n if (!$nextGroup.length) {\n $nextGroup = this.$content.find('.note-hint-group').first();\n }\n\n this.selectItem($nextGroup.find('.note-hint-item').first());\n }\n }\n\n moveUp() {\n const $current = this.$content.find('.note-hint-item.active');\n const $prev = $current.prev();\n\n if ($prev.length) {\n this.selectItem($prev);\n } else {\n let $prevGroup = $current.parent().prev();\n\n if (!$prevGroup.length) {\n $prevGroup = this.$content.find('.note-hint-group').last();\n }\n\n this.selectItem($prevGroup.find('.note-hint-item').last());\n }\n }\n\n replace() {\n const $item = this.$content.find('.note-hint-item.active');\n\n if ($item.length) {\n const node = this.nodeFromItem($item);\n // XXX: consider to move codes to editor for recording redo/undo.\n this.lastWordRange.insertNode(node);\n range.createFromNode(node).collapse().select();\n\n this.lastWordRange = null;\n this.hide();\n this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]);\n this.context.invoke('editor.focus');\n }\n }\n\n nodeFromItem($item) {\n const hint = this.hints[$item.data('index')];\n const item = $item.data('item');\n let node = hint.content ? hint.content(item) : item;\n if (typeof node === 'string') {\n node = dom.createText(node);\n }\n return node;\n }\n\n createItemTemplates(hintIdx, items) {\n const hint = this.hints[hintIdx];\n return items.map((item, idx) => {\n const $item = $('<div class=\"note-hint-item\"/>');\n $item.append(hint.template ? hint.template(item) : item + '');\n $item.data({\n 'index': hintIdx,\n 'item': item\n });\n return $item;\n });\n }\n\n handleKeydown(e) {\n if (!this.$popover.is(':visible')) {\n return;\n }\n\n if (e.keyCode === key.code.ENTER) {\n e.preventDefault();\n this.replace();\n } else if (e.keyCode === key.code.UP) {\n e.preventDefault();\n this.moveUp();\n } else if (e.keyCode === key.code.DOWN) {\n e.preventDefault();\n this.moveDown();\n }\n }\n\n searchKeyword(index, keyword, callback) {\n const hint = this.hints[index];\n if (hint && hint.match.test(keyword) && hint.search) {\n const matches = hint.match.exec(keyword);\n hint.search(matches[1], callback);\n } else {\n callback();\n }\n }\n\n createGroup(idx, keyword) {\n const $group = $('<div class=\"note-hint-group note-hint-group-' + idx + '\"/>');\n this.searchKeyword(idx, keyword, (items) => {\n items = items || [];\n if (items.length) {\n $group.html(this.createItemTemplates(idx, items));\n this.show();\n }\n });\n\n return $group;\n }\n\n handleKeyup(e) {\n if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) {\n const wordRange = this.context.invoke('editor.createRange').getWordRange();\n const keyword = wordRange.toString();\n if (this.hints.length && keyword) {\n this.$content.empty();\n\n const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n if (bnd) {\n this.$popover.hide();\n this.lastWordRange = wordRange;\n this.hints.forEach((hint, idx) => {\n if (hint.match.test(keyword)) {\n this.createGroup(idx, keyword).appendTo(this.$content);\n }\n });\n // select first .note-hint-item\n this.$content.find('.note-hint-item:first').addClass('active');\n\n // set position for popover after group is created\n if (this.direction === 'top') {\n this.$popover.css({\n left: bnd.left,\n top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n });\n } else {\n this.$popover.css({\n left: bnd.left,\n top: bnd.top + bnd.height + POPOVER_DIST\n });\n }\n }\n } else {\n this.hide();\n }\n }\n }\n\n show() {\n this.$popover.show();\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport func from './core/func';\nimport lists from './core/lists';\nimport dom from './core/dom';\n\nexport default class Context {\n /**\n * @param {jQuery} $note\n * @param {Object} options\n */\n constructor($note, options) {\n this.ui = $.summernote.ui;\n this.$note = $note;\n\n this.memos = {};\n this.modules = {};\n this.layoutInfo = {};\n this.options = options;\n\n this.initialize();\n }\n\n /**\n * create layout and initialize modules and other resources\n */\n initialize() {\n this.layoutInfo = this.ui.createLayout(this.$note, this.options);\n this._initialize();\n this.$note.hide();\n return this;\n }\n\n /**\n * destroy modules and other resources and remove layout\n */\n destroy() {\n this._destroy();\n this.$note.removeData('summernote');\n this.ui.removeLayout(this.$note, this.layoutInfo);\n }\n\n /**\n * destory modules and other resources and initialize it again\n */\n reset() {\n const disabled = this.isDisabled();\n this.code(dom.emptyPara);\n this._destroy();\n this._initialize();\n\n if (disabled) {\n this.disable();\n }\n }\n\n _initialize() {\n // add optional buttons\n const buttons = $.extend({}, this.options.buttons);\n Object.keys(buttons).forEach((key) => {\n this.memo('button.' + key, buttons[key]);\n });\n\n const modules = $.extend({}, this.options.modules, $.summernote.plugins || {});\n\n // add and initialize modules\n Object.keys(modules).forEach((key) => {\n this.module(key, modules[key], true);\n });\n\n Object.keys(this.modules).forEach((key) => {\n this.initializeModule(key);\n });\n }\n\n _destroy() {\n // destroy modules with reversed order\n Object.keys(this.modules).reverse().forEach((key) => {\n this.removeModule(key);\n });\n\n Object.keys(this.memos).forEach((key) => {\n this.removeMemo(key);\n });\n // trigger custom onDestroy callback\n this.triggerEvent('destroy', this);\n }\n\n code(html) {\n const isActivated = this.invoke('codeview.isActivated');\n\n if (html === undefined) {\n this.invoke('codeview.sync');\n return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n } else {\n if (isActivated) {\n this.layoutInfo.codable.val(html);\n } else {\n this.layoutInfo.editable.html(html);\n }\n this.$note.val(html);\n this.triggerEvent('change', html);\n }\n }\n\n isDisabled() {\n return this.layoutInfo.editable.attr('contenteditable') === 'false';\n }\n\n enable() {\n this.layoutInfo.editable.attr('contenteditable', true);\n this.invoke('toolbar.activate', true);\n this.triggerEvent('disable', false);\n }\n\n disable() {\n // close codeview if codeview is opend\n if (this.invoke('codeview.isActivated')) {\n this.invoke('codeview.deactivate');\n }\n this.layoutInfo.editable.attr('contenteditable', false);\n this.invoke('toolbar.deactivate', true);\n\n this.triggerEvent('disable', true);\n }\n\n triggerEvent() {\n const namespace = lists.head(arguments);\n const args = lists.tail(lists.from(arguments));\n\n const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n if (callback) {\n callback.apply(this.$note[0], args);\n }\n this.$note.trigger('summernote.' + namespace, args);\n }\n\n initializeModule(key) {\n const module = this.modules[key];\n module.shouldInitialize = module.shouldInitialize || func.ok;\n if (!module.shouldInitialize()) {\n return;\n }\n\n // initialize module\n if (module.initialize) {\n module.initialize();\n }\n\n // attach events\n if (module.events) {\n dom.attachEvents(this.$note, module.events);\n }\n }\n\n module(key, ModuleClass, withoutIntialize) {\n if (arguments.length === 1) {\n return this.modules[key];\n }\n\n this.modules[key] = new ModuleClass(this);\n\n if (!withoutIntialize) {\n this.initializeModule(key);\n }\n }\n\n removeModule(key) {\n const module = this.modules[key];\n if (module.shouldInitialize()) {\n if (module.events) {\n dom.detachEvents(this.$note, module.events);\n }\n\n if (module.destroy) {\n module.destroy();\n }\n }\n\n delete this.modules[key];\n }\n\n memo(key, obj) {\n if (arguments.length === 1) {\n return this.memos[key];\n }\n this.memos[key] = obj;\n }\n\n removeMemo(key) {\n if (this.memos[key] && this.memos[key].destroy) {\n this.memos[key].destroy();\n }\n\n delete this.memos[key];\n }\n\n /**\n * Some buttons need to change their visual style immediately once they get pressed\n */\n createInvokeHandlerAndUpdateState(namespace, value) {\n return (event) => {\n this.createInvokeHandler(namespace, value)(event);\n this.invoke('buttons.updateCurrentStyle');\n };\n }\n\n createInvokeHandler(namespace, value) {\n return (event) => {\n event.preventDefault();\n const $target = $(event.target);\n this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n };\n }\n\n invoke() {\n const namespace = lists.head(arguments);\n const args = lists.tail(lists.from(arguments));\n\n const splits = namespace.split('.');\n const hasSeparator = splits.length > 1;\n const moduleName = hasSeparator && lists.head(splits);\n const methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n\n const module = this.modules[moduleName || 'editor'];\n if (!moduleName && this[methodName]) {\n return this[methodName].apply(this, args);\n } else if (module && module[methodName] && module.shouldInitialize()) {\n return module[methodName].apply(module, args);\n }\n }\n}\n","import $ from 'jquery';\nimport env from './base/core/env';\nimport lists from './base/core/lists';\nimport Context from './base/Context';\n\n$.fn.extend({\n /**\n * Summernote API\n *\n * @param {Object|String}\n * @return {this}\n */\n summernote: function() {\n const type = $.type(lists.head(arguments));\n const isExternalAPICalled = type === 'string';\n const hasInitOptions = type === 'object';\n\n const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n // Update options\n options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);\n options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);\n options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n\n this.each((idx, note) => {\n const $note = $(note);\n if (!$note.data('summernote')) {\n const context = new Context($note, options);\n $note.data('summernote', context);\n $note.data('summernote').triggerEvent('init', context.layoutInfo);\n }\n });\n\n const $note = this.first();\n if ($note.length) {\n const context = $note.data('summernote');\n if (isExternalAPICalled) {\n return context.invoke.apply(context, lists.from(arguments));\n } else if (options.focus) {\n context.invoke('editor.focus');\n }\n }\n\n return this;\n }\n});\n","import $ from 'jquery';\nimport ui from '../bs4/ui';\nimport dom from '../base/core/dom';\nimport '../base/summernote-en-US';\nimport Editor from '../base/module/Editor';\nimport Clipboard from '../base/module/Clipboard';\nimport Dropzone from '../base/module/Dropzone';\nimport Codeview from '../base/module/Codeview';\nimport Statusbar from '../base/module/Statusbar';\nimport Fullscreen from '../base/module/Fullscreen';\nimport Handle from '../base/module/Handle';\nimport AutoLink from '../base/module/AutoLink';\nimport AutoSync from '../base/module/AutoSync';\nimport Placeholder from '../base/module/Placeholder';\nimport Buttons from '../base/module/Buttons';\nimport Toolbar from '../base/module/Toolbar';\nimport LinkDialog from '../base/module/LinkDialog';\nimport LinkPopover from '../base/module/LinkPopover';\nimport ImageDialog from '../base/module/ImageDialog';\nimport ImagePopover from '../base/module/ImagePopover';\nimport TablePopover from '../base/module/TablePopover';\nimport VideoDialog from '../base/module/VideoDialog';\nimport HelpDialog from '../base/module/HelpDialog';\nimport AirPopover from '../base/module/AirPopover';\nimport HintPopover from '../base/module/HintPopover';\n\n$.summernote = $.extend($.summernote, {\n version: '@@VERSION@@',\n ui: ui,\n dom: dom,\n\n plugins: {},\n\n options: {\n modules: {\n 'editor': Editor,\n 'clipboard': Clipboard,\n 'dropzone': Dropzone,\n 'codeview': Codeview,\n 'statusbar': Statusbar,\n 'fullscreen': Fullscreen,\n 'handle': Handle,\n // FIXME: HintPopover must be front of autolink\n // - Script error about range when Enter key is pressed on hint popover\n 'hintPopover': HintPopover,\n 'autoLink': AutoLink,\n 'autoSync': AutoSync,\n 'placeholder': Placeholder,\n 'buttons': Buttons,\n 'toolbar': Toolbar,\n 'linkDialog': LinkDialog,\n 'linkPopover': LinkPopover,\n 'imageDialog': ImageDialog,\n 'imagePopover': ImagePopover,\n 'tablePopover': TablePopover,\n 'videoDialog': VideoDialog,\n 'helpDialog': HelpDialog,\n 'airPopover': AirPopover\n },\n\n buttons: {},\n\n lang: 'en-US',\n\n followingToolbar: true,\n otherStaticBar: '',\n\n // toolbar\n toolbar: [\n ['style', ['style']],\n ['font', ['bold', 'underline', 'clear']],\n ['fontname', ['fontname']],\n ['color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture', 'video']],\n ['view', ['fullscreen', 'codeview', 'help']]\n ],\n\n // popover\n popatmouse: true,\n popover: {\n image: [\n ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n ['float', ['floatLeft', 'floatRight', 'floatNone']],\n ['remove', ['removeMedia']]\n ],\n link: [\n ['link', ['linkDialogShow', 'unlink']]\n ],\n table: [\n ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n ],\n air: [\n ['color', ['color']],\n ['font', ['bold', 'underline', 'clear']],\n ['para', ['ul', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture']]\n ]\n },\n\n // air mode: inline editor\n airMode: false,\n\n width: null,\n height: null,\n linkTargetBlank: true,\n\n focus: false,\n tabSize: 4,\n styleWithSpan: true,\n shortcuts: true,\n textareaAutoSync: true,\n hintDirection: 'bottom',\n tooltip: 'auto',\n container: 'body',\n maxTextLength: 0,\n\n styleTags: [\n 'p',\n { title: 'Blockquote', tag: 'blockquote', className: 'blockquote', value: 'blockquote' },\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'\n ],\n\n fontNames: [\n 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande',\n 'Tahoma', 'Times New Roman', 'Verdana'\n ],\n\n fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n\n // pallete colors(n x n)\n colors: [\n ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],\n ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],\n ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],\n ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],\n ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],\n ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],\n ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],\n ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']\n ],\n\n // http://chir.ag/projects/name-that-color/\n colorsName: [\n ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'],\n ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'],\n ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'],\n ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'],\n ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'],\n ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'],\n ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'],\n ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']\n ],\n\n lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n\n tableClassName: 'table table-bordered',\n\n insertTableMaxSize: {\n col: 10,\n row: 10\n },\n\n dialogsInBody: false,\n dialogsFade: false,\n\n maximumImageFileSize: null,\n\n callbacks: {\n onInit: null,\n onFocus: null,\n onBlur: null,\n onBlurCodeview: null,\n onEnter: null,\n onKeyup: null,\n onKeydown: null,\n onImageUpload: null,\n onImageUploadError: null\n },\n\n codemirror: {\n mode: 'text/html',\n htmlMode: true,\n lineNumbers: true\n },\n\n keyMap: {\n pc: {\n 'ENTER': 'insertParagraph',\n 'CTRL+Z': 'undo',\n 'CTRL+Y': 'redo',\n 'TAB': 'tab',\n 'SHIFT+TAB': 'untab',\n 'CTRL+B': 'bold',\n 'CTRL+I': 'italic',\n 'CTRL+U': 'underline',\n 'CTRL+SHIFT+S': 'strikethrough',\n 'CTRL+BACKSLASH': 'removeFormat',\n 'CTRL+SHIFT+L': 'justifyLeft',\n 'CTRL+SHIFT+E': 'justifyCenter',\n 'CTRL+SHIFT+R': 'justifyRight',\n 'CTRL+SHIFT+J': 'justifyFull',\n 'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n 'CTRL+SHIFT+NUM8': 'insertOrderedList',\n 'CTRL+LEFTBRACKET': 'outdent',\n 'CTRL+RIGHTBRACKET': 'indent',\n 'CTRL+NUM0': 'formatPara',\n 'CTRL+NUM1': 'formatH1',\n 'CTRL+NUM2': 'formatH2',\n 'CTRL+NUM3': 'formatH3',\n 'CTRL+NUM4': 'formatH4',\n 'CTRL+NUM5': 'formatH5',\n 'CTRL+NUM6': 'formatH6',\n 'CTRL+ENTER': 'insertHorizontalRule',\n 'CTRL+K': 'linkDialog.show'\n },\n\n mac: {\n 'ENTER': 'insertParagraph',\n 'CMD+Z': 'undo',\n 'CMD+SHIFT+Z': 'redo',\n 'TAB': 'tab',\n 'SHIFT+TAB': 'untab',\n 'CMD+B': 'bold',\n 'CMD+I': 'italic',\n 'CMD+U': 'underline',\n 'CMD+SHIFT+S': 'strikethrough',\n 'CMD+BACKSLASH': 'removeFormat',\n 'CMD+SHIFT+L': 'justifyLeft',\n 'CMD+SHIFT+E': 'justifyCenter',\n 'CMD+SHIFT+R': 'justifyRight',\n 'CMD+SHIFT+J': 'justifyFull',\n 'CMD+SHIFT+NUM7': 'insertUnorderedList',\n 'CMD+SHIFT+NUM8': 'insertOrderedList',\n 'CMD+LEFTBRACKET': 'outdent',\n 'CMD+RIGHTBRACKET': 'indent',\n 'CMD+NUM0': 'formatPara',\n 'CMD+NUM1': 'formatH1',\n 'CMD+NUM2': 'formatH2',\n 'CMD+NUM3': 'formatH3',\n 'CMD+NUM4': 'formatH4',\n 'CMD+NUM5': 'formatH5',\n 'CMD+NUM6': 'formatH6',\n 'CMD+ENTER': 'insertHorizontalRule',\n 'CMD+K': 'linkDialog.show'\n }\n },\n icons: {\n 'align': 'note-icon-align',\n 'alignCenter': 'note-icon-align-center',\n 'alignJustify': 'note-icon-align-justify',\n 'alignLeft': 'note-icon-align-left',\n 'alignRight': 'note-icon-align-right',\n 'rowBelow': 'note-icon-row-below',\n 'colBefore': 'note-icon-col-before',\n 'colAfter': 'note-icon-col-after',\n 'rowAbove': 'note-icon-row-above',\n 'rowRemove': 'note-icon-row-remove',\n 'colRemove': 'note-icon-col-remove',\n 'indent': 'note-icon-align-indent',\n 'outdent': 'note-icon-align-outdent',\n 'arrowsAlt': 'note-icon-arrows-alt',\n 'bold': 'note-icon-bold',\n 'caret': 'note-icon-caret',\n 'circle': 'note-icon-circle',\n 'close': 'note-icon-close',\n 'code': 'note-icon-code',\n 'eraser': 'note-icon-eraser',\n 'font': 'note-icon-font',\n 'frame': 'note-icon-frame',\n 'italic': 'note-icon-italic',\n 'link': 'note-icon-link',\n 'unlink': 'note-icon-chain-broken',\n 'magic': 'note-icon-magic',\n 'menuCheck': 'note-icon-menu-check',\n 'minus': 'note-icon-minus',\n 'orderedlist': 'note-icon-orderedlist',\n 'pencil': 'note-icon-pencil',\n 'picture': 'note-icon-picture',\n 'question': 'note-icon-question',\n 'redo': 'note-icon-redo',\n 'square': 'note-icon-square',\n 'strikethrough': 'note-icon-strikethrough',\n 'subscript': 'note-icon-subscript',\n 'superscript': 'note-icon-superscript',\n 'table': 'note-icon-table',\n 'textHeight': 'note-icon-text-height',\n 'trash': 'note-icon-trash',\n 'underline': 'note-icon-underline',\n 'undo': 'note-icon-undo',\n 'unorderedlist': 'note-icon-unorderedlist',\n 'video': 'note-icon-video'\n }\n }\n});\n\nimport '../summernote'; // eslint-disable-line\n"],"names":["$","Codeview"],"mappings":"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"}PKf[�\SԫA�"�"dist/font/summernote.ttfnu�[��� �PFFTM�>u�"�OS/2A(]�X`cmap��0Bcvt Dtgasp��"�glyf�yk��\headn!t�6hheaG $hmtx���vloca�r�txpmaxp��8 name���ZD�postK�IP ����^_<�֧�y֧�y���nk�n.����k7� @.�LfGLf�� PfEd���4���.� $$$$�0���J��'��Q���@6����Z����������������< �4�����D***Fx����V��Dv���� .��@f�R|�.:��Dr� � � � �Z��p�� .�U.�/<��2��<��2�/<��2��<��233'3#�wffU��3�}!5!5!!!�����V�^�|KK�L�K����!!5!5!%&=46��� �� �xwM�LL�LL�`_��}!5!5!!����|KK�LL�K�}!5!5!!�8|���|LL�KK�K����!!5!5!%6'.'&47>��� �� ��wxM�LL�LL��_` �|!!5!5!/�7L}��|L�KK�KK�p75!%!!!5! /������Q��GG�H��H$����+$4/&"54&+"'&"2?6".4>2�6$6ggM:exe::exe�6��6hhIxe::exe::$����+%54&+764/&"2?64/32>".4>2��6hh6�I:exe::exe�$6gg6Vxe::exe::$����+$4/&"#";2?6".4>2�h6��6hL:exe::exe�g6$6gIxe::exe::$����+$4/&"2?;26=2?6".4>2�gg6$6M:exe::exe�hh6��6Ixe::exe::����7#7'#57'537'3��A�A��A�A�=�>��>�A�A�@~~@�A�=�=��=�d$"&=!"/&4?62!5462J��JJ$J�I $$ II $$ I���\�+32"/&46;#"&4?62[ $$ II $$ IIl��JJ$JJ���� -+52654ᙤ'32654.#32654.�::EDXf�%&�yW�%&& !%6?28@%"!&<3F�#+ & ȃ .-%)0m32"'.'&6=�01cAC����/� )7Uq&/&6767>'.'.?>'&676&2#".4>;2>&+".54632+"&46372+"3�& & p& & ?& & e& & Q<V'D(b b!./!b ua<VV=` `$/!�= = G= = �Y= = G= = �U<'C& .A- �UwU $!-����2"&4$"264�響��ʎ�ʎܨ쨨�{�Ȍ��J�u%"/"/&?'&?62762�������������������k� %57'53%7'����'�:���ܢ��"6UU7x'���p�x7UU6x���159=%"/&4?#"&=46;'&4?632#".546;2'5#75#75#m 8� �8 {{�� �}}}}}-8 8{{m��*vv�vv�uu�����159=232+"/&4?32+".54>353535�8� �8{{���~~~~~T8 7{{u��+uu�vv�uu���#37;?4?62762"/"/&4?'#"&546;2'5#75#75#�EEDDEEDD.��"}}}}} EE DE EE ED����*vv�vv�uu'����2+"&54637#�\#�#[$�����##-#��������%#3#52733#52654/3� �.�*�%�!\9vL((Nx��8(( ݑ����U�*:T`lx�!2#!"&546"&3!26=4.#%!2#!"&546"#"3!2654.#"#6&"2?664/&"64/&"$&"2?6� �%RO!$ �%l �� s (:�<% r8 8��8 868 8��8 8� �� H $��k �* � # ��6"9K 8 7D 87�g 8 8S 8 8Q����3"3#7267654&'Ӻ Y � Z� �� ��//Q9H2#".4>;2>&+".54632+"&46372+"374>;2+"&�<V'D(b b!./!b u a<VV=` `!./!# ��QU<'C& .A- � UwU .A-O ����^7537775377�II,n�I�I�&���\�\\\IH�''�H�IFmm�>�[�e[[[@ �`7'577ɉ7S�7�!�3S�3��6���75!6��PP����%)-17>54&#"#&6323#4>#573#%!5!!5!* $# %. V�.0%�}��|: (4%��UU�T�TT��� 7'72,�����W� I�+���;gV�G���7�)1I!"&5463!24.##!"'"3!265&"&462#&#!"#.6?>7>�� # �u *�*d(( �� E ,D+( ��q � ��))�$$��^%Z����#5367632#>?67654&#"�b�='8Ib #X$ &&-^^F\&FD*6* (1��SOn!74.">32O��N HfZ7) /4K(8d>. _��J) --2.8( �����/37;"/+"&="/&4?62#!"&=4>3!2#3'#3'#3�8 8{{u��*vv�uu�vv68� �8{{��� }}}}}������-159$"/&4?62546;27627#!"&=463!25##5##5#�{{8 7t��*v'u'v]{{8� �8���}}}}}}���#59=A6"/&4?'&4?62762"/#!"&=4>3!2#3'#3'#3� EE EE EE EED��*vv�uu�uu� DE EE ED EE.�� !}}}}}���� $0<$&5462# &54632#7&=4632#"'&&54632#''7'7�* �z��������̎--� �w�����������1�!2#!"&546"3!2654&# �%%�&&>%%�%%�&�i&&�&$%��&&O%����/S%!"=4;&'&54>323273#.#"3232>54'&'3#".#"#53�c(+<"', #!4>!#*F���C%(�,N. 3@ �7&2/" �&9!# 7!!!'A$ ���e�1#567>74#"'6323%#532?'&+5373#";#dm03��_}b_uabu _b~o (��0��0��0��0 ���nR %/8CNXb%#654'32'&'762?"&463275462&"'&462"&46;#"'&47"&=27#"/61,, m ��E�.�ƍ�cN?�"� v ,7 "� �� ��?Nc��ƍ.��, ,e �� C, ,d ��e�1#567>74#"'632#'#532?'&+5373#"3dm0u~__~ b^ubbu_b;" (��0��0��0��0�� ����#'+;'35#75#35#75#35#75#535335335%�$�$�����������������$�$�(�1$j$kk�j$kk�j$kk�llllll����^� &%3'3#7#&+;#53265#"#5!#EVVEARQ@�&4'"�%)#%�(BB(BB#��$$,+||����)53!532653!32>54&"2654&"&"2654V���q�F�E1 pY# $�##�>}��@�� ��������(,#".=45#"32>=4#53!5!�+N01O*$� 3$'7@��Q�~�-:6 1:(�##�.5$'92�A##�7#��SMn>32."!*I7=a3)J5.-5[eIM��_E+34* 5)!$# J�����!5!!5!#55353��}��}�LUUVU�UU�T�TT�UU�TT�TT��#\'5%2#!"&=4>3#�v �� T�<`� �� � 4&� �� $ L< � � summernotesummernoteRegularRegularFontForge 2.0 : summernote : 13-2-2018FontForge 2.0 : summernote : 13-2-2018summernotesummernoteVersion 001.000 Version 001.000 summernotesummernote��7 � !""#$%&'()*+,-./0123align-centeralign-indent align-justify align-left align-outdentalign-rightalignarrow-circle-downarrow-circle-leftarrow-circle-rightarrow-circle-up arrows-altarrows-harrows-vboldcaretchain-brokencircleclosecode col-after col-before col-removeeraserfontframeitaliclinkmagic menu-checkorderedlistpencilpictureredo row-above row-below row-removespecial-charactersquare strikethrough subscript summernotesuperscripttabletext-heighttrash underlineundo unorderedlistvideo����֧�y֧�yPKf[�\��D�z#z#dist/font/summernote.eotnu�[���z#�" �LP^߲�summernoteRegular Version 001.000 summernote �PFFTM�>u�"�OS/2A(]�X`cmap��0Bcvt Dtgasp��"�glyf�yk��\headn!t�6hheaG $hmtx���vloca�r�txpmaxp��8 name���ZD�postK�IP ����^_<�֧�y֧�y���nk�n.����k7� @.�LfGLf�� PfEd���4���.� $$$$�0���J��'��Q���@6����Z����������������< �4�����D***Fx����V��Dv���� .��@f�R|�.:��Dr� � � � �Z��p�� .�U.�/<��2��<��2�/<��2��<��233'3#�wffU��3�}!5!5!!!�����V�^�|KK�L�K����!!5!5!%&=46��� �� �xwM�LL�LL�`_��}!5!5!!����|KK�LL�K�}!5!5!!�8|���|LL�KK�K����!!5!5!%6'.'&47>��� �� ��wxM�LL�LL��_` �|!!5!5!/�7L}��|L�KK�KK�p75!%!!!5! /������Q��GG�H��H$����+$4/&"54&+"'&"2?6".4>2�6$6ggM:exe::exe�6��6hhIxe::exe::$����+%54&+764/&"2?64/32>".4>2��6hh6�I:exe::exe�$6gg6Vxe::exe::$����+$4/&"#";2?6".4>2�h6��6hL:exe::exe�g6$6gIxe::exe::$����+$4/&"2?;26=2?6".4>2�gg6$6M:exe::exe�hh6��6Ixe::exe::����7#7'#57'537'3��A�A��A�A�=�>��>�A�A�@~~@�A�=�=��=�d$"&=!"/&4?62!5462J��JJ$J�I $$ II $$ I���\�+32"/&46;#"&4?62[ $$ II $$ IIl��JJ$JJ���� -+52654ᙤ'32654.#32654.�::EDXf�%&�yW�%&& !%6?28@%"!&<3F�#+ & ȃ .-%)0m32"'.'&6=�01cAC����/� )7Uq&/&6767>'.'.?>'&676&2#".4>;2>&+".54632+"&46372+"3�& & p& & ?& & e& & Q<V'D(b b!./!b ua<VV=` `$/!�= = G= = �Y= = G= = �U<'C& .A- �UwU $!-����2"&4$"264�響��ʎ�ʎܨ쨨�{�Ȍ��J�u%"/"/&?'&?62762�������������������k� %57'53%7'����'�:���ܢ��"6UU7x'���p�x7UU6x���159=%"/&4?#"&=46;'&4?632#".546;2'5#75#75#m 8� �8 {{�� �}}}}}-8 8{{m��*vv�vv�uu�����159=232+"/&4?32+".54>353535�8� �8{{���~~~~~T8 7{{u��+uu�vv�uu���#37;?4?62762"/"/&4?'#"&546;2'5#75#75#�EEDDEEDD.��"}}}}} EE DE EE ED����*vv�vv�uu'����2+"&54637#�\#�#[$�����##-#��������%#3#52733#52654/3� �.�*�%�!\9vL((Nx��8(( ݑ����U�*:T`lx�!2#!"&546"&3!26=4.#%!2#!"&546"#"3!2654.#"#6&"2?664/&"64/&"$&"2?6� �%RO!$ �%l �� s (:�<% r8 8��8 868 8��8 8� �� H $��k �* � # ��6"9K 8 7D 87�g 8 8S 8 8Q����3"3#7267654&'Ӻ Y � Z� �� ��//Q9H2#".4>;2>&+".54632+"&46372+"374>;2+"&�<V'D(b b!./!b u a<VV=` `!./!# ��QU<'C& .A- � UwU .A-O ����^7537775377�II,n�I�I�&���\�\\\IH�''�H�IFmm�>�[�e[[[@ �`7'577ɉ7S�7�!�3S�3��6���75!6��PP����%)-17>54&#"#&6323#4>#573#%!5!!5!* $# %. V�.0%�}��|: (4%��UU�T�TT��� 7'72,�����W� I�+���;gV�G���7�)1I!"&5463!24.##!"'"3!265&"&462#&#!"#.6?>7>�� # �u *�*d(( �� E ,D+( ��q � ��))�$$��^%Z����#5367632#>?67654&#"�b�='8Ib #X$ &&-^^F\&FD*6* (1��SOn!74.">32O��N HfZ7) /4K(8d>. _��J) --2.8( �����/37;"/+"&="/&4?62#!"&=4>3!2#3'#3'#3�8 8{{u��*vv�uu�vv68� �8{{��� }}}}}������-159$"/&4?62546;27627#!"&=463!25##5##5#�{{8 7t��*v'u'v]{{8� �8���}}}}}}���#59=A6"/&4?'&4?62762"/#!"&=4>3!2#3'#3'#3� EE EE EE EED��*vv�uu�uu� DE EE ED EE.�� !}}}}}���� $0<$&5462# &54632#7&=4632#"'&&54632#''7'7�* �z��������̎--� �w�����������1�!2#!"&546"3!2654&# �%%�&&>%%�%%�&�i&&�&$%��&&O%����/S%!"=4;&'&54>323273#.#"3232>54'&'3#".#"#53�c(+<"', #!4>!#*F���C%(�,N. 3@ �7&2/" �&9!# 7!!!'A$ ���e�1#567>74#"'6323%#532?'&+5373#";#dm03��_}b_uabu _b~o (��0��0��0��0 ���nR %/8CNXb%#654'32'&'762?"&463275462&"'&462"&46;#"'&47"&=27#"/61,, m ��E�.�ƍ�cN?�"� v ,7 "� �� ��?Nc��ƍ.��, ,e �� C, ,d ��e�1#567>74#"'632#'#532?'&+5373#"3dm0u~__~ b^ubbu_b;" (��0��0��0��0�� ����#'+;'35#75#35#75#35#75#535335335%�$�$�����������������$�$�(�1$j$kk�j$kk�j$kk�llllll����^� &%3'3#7#&+;#53265#"#5!#EVVEARQ@�&4'"�%)#%�(BB(BB#��$$,+||����)53!532653!32>54&"2654&"&"2654V���q�F�E1 pY# $�##�>}��@�� ��������(,#".=45#"32>=4#53!5!�+N01O*$� 3$'7@��Q�~�-:6 1:(�##�.5$'92�A##�7#��SMn>32."!*I7=a3)J5.-5[eIM��_E+34* 5)!$# J�����!5!!5!#55353��}��}�LUUVU�UU�T�TT�UU�TT�TT��#\'5%2#!"&=4>3#�v �� T�<`� �� � 4&� �� $ L< � � summernotesummernoteRegularRegularFontForge 2.0 : summernote : 13-2-2018FontForge 2.0 : summernote : 13-2-2018summernotesummernoteVersion 001.000 Version 001.000 summernotesummernote��7 � !""#$%&'()*+,-./0123align-centeralign-indent align-justify align-left align-outdentalign-rightalignarrow-circle-downarrow-circle-leftarrow-circle-rightarrow-circle-up arrows-altarrows-harrows-vboldcaretchain-brokencircleclosecode col-after col-before col-removeeraserfontframeitaliclinkmagic menu-checkorderedlistpencilpictureredo row-above row-below row-removespecial-charactersquare strikethrough subscript summernotesuperscripttabletext-heighttrash underlineundo unorderedlistvideo����֧�y֧�yPKf[�\�`ƼL=L=dist/font/summernote.woffnu�[���wOFFOTTO=L n�CFF �9�iY'�a�FFTM=0�>u�OS/2LJ`A']�cmap�6B ��head�06n!thhea$ $Fhmtx<�in��maxpD5Pname��Ԝ��Zpost� ��x�c`d``�$���m�2p31����*a�Ā\�4eo x�c`d``��Ϡ����iLY@��PPP5x�c`ab`������Ø�����2H2�0001�r2���������� ���&�� ��?�x����j�0E�;!J�,�����Fv2��9S��3�%������-��\ٯt)������A�{%� < '�a+<�7�·p�G| O�P�4U:�ԑ�������/�)�w���S,U�Z�h�-<:ھilp�#�PS��LG[��3�@�Q�5аL�P���y~;%6���cx�1̻��CmuU��?�Rn�*�L��Ǵ����2L��(�'�Ɇ��6�,�1���;�E�x�c```f�`F���| ��@�G����$��P��lp�m;�x�c`f��$�#+��x��}|U��^I����zP� M �� EzU�rP���R�G@��X8�Oi �A��B���{|�o�����2;;;�;�3{Є���4-h܄#�ǎ5>Yh���DAg������WAe��Z̅�&�^1uV[��1��J�+%����VA�O5dž Մ��^M�VKΉi��"ꊦ��xRt��(1E��b��(��]��b��Y�.Ήt�%n�"Mh�Z���h��x�����Z{J������^������hK�Z��I�Zۍ�hi�<�����*x��$�R�ƍ:�e�cx� ;{Ԅ�eu�<D�Ǝ�b�C���8iԋ�f���3T��9F˟�>ކ��'&��4p�����:�q��QÒG�v���<pT�?��A ���A��ʬ��#FML��%�4j�Ac�HJ�:r؈���<rB�C�56)ylr���Əf�G8~�X�"���@b��Q/P�ǍN8t�p 0v�@1n��;n�ءÒ�;j��!�&$�8v���eB4n�hT���$O����C�ɛ�x�L�X��`Ԅ�娛84)yTyD�B{[{G{W���h30�3�Y�l�}�\m�6_[�}�-�>�>�i�!kK�e�r�'�J�Z[���ֈ�Zm���A���L۬mѶj۴ϵ���%���8�9m�����5���o�> ��+�]hǰ���*�������[c�j��X�f���4�|�����j6�G�z롢V�_�,�po�.]�~�S�'z�vK�}w<�~@�_%�JY�?c��reAӕ^+� �-I�]Y�ʙ?��i���Y�x����~&�Obj��wô�W��hY[3L�:]8U-�����i]�A�Y30��G�%:� &&�*��}��@*|^3,�u �h��C�$��pơ��ku�����1��U���<T��),�(˰�?��k�[V���_�e彋Z��.� �߅�|�~-y�#��<;������F�$�v�J�J���'}���Eț��g���·��?�X�m��g����Q�/~�h�c��"�e�O�E_O� D.<u��ûu��]Vf����K�/@�>��hj$��vE���� fm;�"����:�1G˾B�?�ͩ�$Z�g Y��z~m��@��gQ~Z'�jh��DAQH~�<�� ����/�{yų9���&�^@u�)_2�-q` �� Grf�s�*P��Q�|58�:��~*�3��a��YF�T�^P�~����[}?����ݎ���D��2^7^W�������P�=�!�MAQ�W���`R����R�N˴&��]�]�*���,1@��ڔ�L�����N�"�jGԮ�_��vL�,Z���"�%:Ԇ���s�#�V��q�����]�M'T��$��:ă5��-�dN�L�C��ɘ1>̊����� �4ŝ2Wh,bM�5"��*�Ca����W��w�.|j2MU���PU�V���a'�l���椥xR��jj�JV��w�g�WU�݈�˰�����MM�'��&�*�}y��8vr 8�F��w�)�=&9:��3fE�$iD�b��1v;�+����G%���@:��:�j~��TS[~�1�s: g�����E�=���%jFe��x��cHٝ���&7i�����%�#-G=ҒPNZ�=Ң�¿LVƬ*��4��ė��#-�F�AZds[�n��glqKQ�➀��p��U���ie�OH���sw���t5;�r�,�:��.��rN.�ʻ���y���:e�{�\�ߦ� )j�n�5��@�x�N:�{��ö�ogAy�N�1U靟��A;ʖ_ ��v�i�i�RN��"8���:o%ndsy͍�(K��$9sQ�-?�w\�Mh����-�0+���ޝ� ����swA�o�o��#�(�n���jˋ�Z���u���?��r{G�Z`Oo�gz�o[ ��M���t{z��ڰuW[1�Q�X��U:X��;���?���I� �V�,�s��N���SAb�X�~魞F^�]Z3�+�/�\f�c~c�i�3F�Δ����})�ى7~�?�z�����R�+D�ů���ӂ��I�RkЈ�0�p�1mҗ5A�o�Rtg����fyL�`�\�����r�a�b�[��29�]z���Tr5M+�,KɄ%���WFD���Կ��۱M8�[�έ<�� ���-b��}9"�v��m���_�lH;_^���aє,�+#"�CD��4���&\�X9r�˾Md�-X��Ԓ��%�tB<P��i�]���D���FD��$�$�wrw�{���=�PJY�{���;K���|d�����;�yx��e��Mԯ_Lj�DW����\��"�M����k��Nf�)�cP��e4�Yd�_E�U��W��Z�bPY�Q�j0�??CO��LB:!��D^�u@����0�"�ZV�`!/蘰-i/Vy�8�^������L�>����Y4��yYu�U]}X�[���\p�+38�.t�Y�$��M#/��t�[�@3@�AJЫ%r��*�8@�h��ߣ��ݐ8�Ø�wA�3?C���+�Xg8Ӛ�W��>�]�FyES/����Aѯ��7�!Du���f��+�v�spx���[��C�;�p�wro���&��9�W�X�8�ɱ}b�;(�ۋ��i��u�2J���ɷ��CQ�/�����V�Mnw q<ؒ��<�5t�IV]�L���죯I��p�"z�J���%�/�▤�/גV�&�+T��Cj� /����?�g�#i�u]��z�k���G�(�TW@r�jfR�o�� y7�Q�ϫ:ǔ�dž7�:Gs�D�� ��n�H��8��~��;�T�E�/d�rmB^�'���m��7�/bZ���Γ��9��x'i���dD�x����r���LV�B��,9�<{oG:x��U�8m)�Ϻ������w�^�f���{�W�i�)���z�$��}�:({�]�Z���t ��� X!ZZ� �s��| ~}B^֍�]��7�ۜ�p���%�>�/�Ca���ߧDD��G��ٓM�V��S��uRd!�>t�s܌|��"��/Şӹx��G!c�Da��3暪!H!�C��7#h*)$E� �jAՐH�?���HR��@��l��d(&�!Y� �Q�W7~��'��ϑD7Z��y���ڟ�t�G@<'�ܬqc�N��5�{\MH��l�UN���5��U�sUI-ʁ�n����ϼ6)�5�@Im*&b �=�j�y<-�όyB1C��O>��h�h�Y7в��j�O��e�b��P�K0E��9q���}|� ��x(�����h�\!�`��S1D�0b9r+D�Mh>9��$jz!�[n$��� `��{S}S�{롵�O�??ke��D�-,�i�ߑ�X]�M0��w� �蜺yY���H��K er�=F!�'�|�2D�8b��Q���;1wڅUh�x6�����\������9�mPi5���)��d�XJ�_��a ��i[��`¶��<�;~=mxc�����_��y<�L�� ~�}ҝ��y� P���mLt�u�UՌ�٩J-�}���,�"�D>简�Ҹ�Y�:!�ܕ����e���* 3%˥�g��W�P0'$:t�a�l�gzZ��4�-�| ��ݮ/�b�����'��?�!u���o�O�����E �@���"K�?������������d��7<-�M�'Նk(��+(~�S@�/m�>���;�I��6d{�W@q���7�}�.OGR�P�o��0V�����4���;�G� ��p ����H�\�ϣK������@N�"z�ۯh> ��}z�~���%�MˌÀ�F2a1�za���H�܌����G�r�>u���6j |�r����h�hI�}�6�Ϯػ{���u��ޟqf&ߣ˄z��đC���h�3��^�]��7 hT'�H1��9��jo��C��0ɋ��d�0�|]S1�����;N�糦���>�.�oA+}<{Z4��׳�<h��#i��E'{y.�����8���H&��q�#٠(�A)�=��2�z/��VO��ҜtT�@�����~y�,�:��,��+ǫ�� ��L'�T�T0�9%e�{���0�_��h�a�62m6�ɱ���u/ ���;B^L%�88�UN�פ���f�!�K6�{ <K� ��=����$[n�g��I4;>P� @��oi���;I��y��P��۷F�-�=�2P� �h�v�8��#aݾ��h��^����1��/�t������P���犪�ثU:y4H:�hC/��:��=��{�@��0�ٓ}�cyȫ�,�x�@��N�.��!�� l�J���R���J�_��n�u��FI}�T����ou��-Vz�YZC�[���!!lFs���6-����R�q��C�H�HRg �SKa�ɢ�]:�ϧ�4��]H" &E]{���|��&�sM�>H�|��� {�����k��,�G���H�`��ׅ��2a�����+9eu6=,&U�+$脗��.ۋ�h��MkA�s����/�2��=�M�_Q{C����y��� u�?�Mv�,D7�T�+��Ĩ�>��u�T0i/��ct�a� #�a�K��{�Ļ��?�K�ϒ r*27Uؼv$�M�l�![�@ƈM��&k�ԩ�B�V���+�ھ遦�_�{#��ߐ|w�G��3��2���G�япm�z=���V���qBꆫzt�����Z+6�zn_��>;;H�� 9��#QK�k: K(� M��} �|y�#t �t�ɓ�[g���V����ֆ� �l�2���먃kH���DU��µT��l�S*~� ��e�=N�P�]ik��R���t���Ϋ�c��w�@��K}��Ii؇��J�4�'���s���~N��`I�Ǩ�\AK��BK�ͥ��; �h�L�WpIn���V�R�B�c�.�m�R8djx0�݂)�ڟm*����^�t�D�N����J}:7$����=���d�������ݘ��Ӄ�pc"%Hܔ IS4��T���B��'|:]UcV�%'�(ar'LzJ)�S�-����ĝK�aK:����T� [���5l��21�M�,wc:zGL�L�ّ�����ƫyE�c�a�R��t�t>J�xs�7D|��}q3�/� i�0&����~������\��"���n����P�+�`��Yn�;�����o<W�[�q�i]y�U���_����1. ;�R�`u� �S?dn��ڐ��͈8�zHn����q��H*��W��w�@�l�u<�ŭv-���f��9�k��~�{a��8��I`��H.����8b�ܡ[�_/�|r� ���].j.2c,�=��[�9�����������g�I�'��d��&��נ� �5�Ɉ�}-�g|I���A�^�+>@�� ��`'o�B��Y\�ʽ$�����%��!���4��2-��Z��r7�� �W�G�0l&�+�,;�UOu5R�y�aN;E���Tbʽ^{� �s��o*���]"�'��P�ȫ�0oJ�W^<�i�ӌ��i���N���[+�P��\}��~y���uy��Ӊ���'�5�B�%��y�EZ4��п�:�]h���\� �T*�Tu��~��jU �F�}�n�)gb+C�j���?��#�4�y����q<��n���3�P^bDX��hw���XT<��~o6�����RZ>���a �N���bm=�.�0�z�����^�Q�zw����k�f2�E"�].�K;9�Ve�z�H%�ki��,R dS ��\COMcU����óYl2�P�N�I�� x�D�'y�<�!�V8�N�Ձ`s�c�X�����]� ����S�K�Q��}Em) �EL�Ö5n"�_X�����:�6|�,���:�cX�~���-��<�ȝg���LΪC��� ��m"�P˼^Ðu����s����ںFp����K��?N�!� �7�$���#س\�҈oz��9Ő�@���������-�&���1}�$�W픦�)sU�5y+�����T,�mRC��3�u�2.��2-��Xij��!ʣ�4�Oб�J���QB��D�:Sք�<�DI�4o�6&�Ub�R�m�;�H|�Z��T5A���ކƼR�i�:��@3sN���� ��L��(��d�N�l��W �`Ԕ�n�i[��[��j#k��r�YM�g�t��w1�u�Tɞx�� =2-�d*f��͍��t7�o�6�3���fzƬ��#��0fQn��;���-^�M�}��I���4l9ۢ���[.�}U���czF���(��.0w�%�K�r�L���{��n�"�IZ�c�ӵ�mv��h�����|�c\�nigJ�A` ��Q+`QM�w�,��?yř:�C��o%7�L��c�ϻy�����J$�V�@�.4���F$�WP����t��5�P�\^��cs��t�ݤ��L1:���#��s�>wǼX�$w�H��σ$�6��v{P��הs�l_*�w��q~�QXd1���Ϩ�qd1�Ɓm���̒_E ��_$~�н��q�H���nH�#7Q���$� ђ~�@��y�Ňv�;��Y"~��'o��h1~w;a��_Dx�"�?�E��/�(��#��ԥ��u��rS�E�_DHo���|"1�����u5�dv_e�3����dBc����=.�r����>@�]��J2 q�4L�*K&��"��8���&1j<�G���q���8��h�U}-��gցN�'Ga���u�ι�ޫhQ����ɼ4�S��Xd헔�Z�\�:�D�/x�]u(�U��t���su�����Eh�Z��P��C�Up;���47�@ڬ?�'襯@C��G�{�%�X]�FV���@:�W�F7Y��0Qke[��8�L�R����E��A*}h#���y¤���k$�y����<������D���N'{c��>==T)p� Wؒ��§8��rQk����a@͍2�r ���`5��������Ѓ�KВ�\��zr�zн���/�QSM�̹m�Gg}E�{m�9R+����UA��?��+�����)�gg��*,-�"����3���N���ԬoLK1�kGm����{��rL�N� �y�9��69����a�}�;���� ��@�͵����!q�.A�Alss2��}zCU.땕 �fJ}#��� ���Xe�<�-"�5r�H����`��b^������<d���E�oi ����E �Qa8��l:FF��H���|��X��^� g#>t��~��E>��*�v�6 ���a�j� ��VS�a�K�g�&�����T�d���XԌ��'z#��e�� Pv��:�e"���G� E{�5��ү�+������m�4Z>YI\��e9��� �r��� ŁP%� �{փ��a���.�2z�Pz�3^]d0#�]Ο��G���7.�Hpƈ}��6t��*'��'�"���Y�=�����j�q�H����/�֪;y�G�6:������EZ�w�����ח�ďE��lT}�2��I(r�Cɰ��\[+��2 )r?�\���]*�[��k�4U.QO����(�FO�y,�M���[d�0����J*����w�jLe��f�Op��� ��X��b����k���ҷ��x#�N}��ε�>�kfTG�S<�GBf�8%6�m�������6�P@/��~�@:H�#�Ѯ�#��f;!<]�D�%~a���C�q�݆ �כ��U9[:U-��x ���ԽܖBԯ��E����Б�7[��H-���C� �oJ���]Uf�2��Z��X�>�g�J�!o�����rc����NȬ�yy�����(h�3���[ɖ�Uh w�c�k�W�@�>�^��s���� 4�z������ʮ��y���J(��k+~�\Ck�K��Z3�W��?�św��^_�W�%pϟ�_PG�9��9[)�z� ��JI���ÑT�n��D�p-FZ?#���/ �g��(���m�����t��X�a�a��?����`�?_OSܷN�&+Ͼ���Ѻ8@��~OB�E/�%�m&=~��d���;x��^�}�.�`��ߍ��v�;/���Zw�P�8�lg�O(vD�܁�Ð|�Qg�Ut��!R`�l�5��8�hѣ�u�.�8��ű�Y4�o��դ����[a�}}�qއ�5��WFQs�� �o�I��,����T��M�E4��cG���6I�^=��n��� �h����"�S��� ��s����ѣӔG�v���ۭG�����)W���I��۫'�܂N��_�ҹ��w�>9#����b��{�r� �U'�v�}�I��*?ȥ�w�|p�y��.@��I�[:�J�b*_��i-=z�}�,����$}�4tc�{彛�rr�G���,#6aB�`�^�f�u�C��-�k�?�j�O�\ݛ(�Uz��E�� m��V�)�qǻ���-�/��:��}� vS� �!W�����*;�(���Sl�Jl���@m���T�v^�m��>���F�E�Z�s<�\:ަ�!�Pڅ���x픢�rB;�Q������o]"����^9�O�]��5G��.�(w��;�*�c���i�G%D��Ř��{W����q6��=�)}ŀ����nj�y��e�]��y ^9��JiJd��n����eOP"G77=�D%�>JLQ�!v[Tkk(Q��ۤ)�:.P"�2f�ҏ�P�RYd�@@"�R�!M)��RCP@�j�aLHuC���0Բr�a� jYp/+��e����T(���<nx�'72d���B� Y����V��|3L-v�{�t�v{�,��s�9 �dȂ��J�kwJ���=z�^��H/U��rP�W��[% �)���Q��"�L�pxr[0�P)~��T�O�fIWYі T��(|U�Gn)_z���ڜ�o=�y��fѦ�=Qj}𧺰�$��x��D܊�C9��cݚU%��5}�i�$�H���t��8?X�~0<l�~�W���\Q��2�|�e�w ����}��s���ۼ{87��7��N�����I�R���o��7͍)��'b��7�lKϴO熷���ٞq�ٖ���t��=�6&g9L�L o�t�~I }��]��Is��r�թƇ��ўpw���&���5ʃ)͍��XgU�Ɋx۳-=�E[��)H����3.=��+��'܆)=�)LG=���Q�H��g��gv��k=P{̐+�O�SԟM��DT�ܗ�}�<T��Ag����N*�Sn�arC�� ����`�Nr/�M(��%���68�� �|?؆��f������T�q�!��vm�����ˆR�;�����zP�{�=Rm���1�P ��1�l��tv��!�63��'��u`��V���w�~vTZ�Tj�ڂzn5���Tn���{�y��3��q�e��$ڸ=�0�?P�+�I�OX��A{�t����L��h\�&U9�S�� ��%��9LȄ^x�u�W���PV��~�(:Ɨ����Q]��h�E���h���,����M�2m@��OUX���it�q��sBn�zP��y�Q1�*O�yCI��5��%�mx`;#�xl-�9hΫ襔-�c�pͺLjB�\�X�iY˱V��j�5� w��#��c��kB�]-]��Z�f{�Z̛s9ּ�=ּ �XsD�c͞�k���7gv�{���ƺCʫ��:��b�q9VI'r�؏�(7���s�S|6T��ʼnu~�[��7 �� iD�8,�> ��ʐ��4��X�,{�q���q��|W�(g�g9�l����r�ΫP`T�JWB{ɍ頳�Axj�&6'��rq���؝����� $/�gi��%�[PΐO�ų�xC:�1�u��©\�N�t�۫P�ð\�7�)�M��* �#��>�h��G�n�5\��O+1���n|.iJ�Q��(4(���Bk���x�{�Qi�\ޯz����#�-�n���uj�S���r��n+/%*p��9B���l�A�:�"?��e�lp6��O7��=��}���*�<Uw��UQLGw�Ai������*5�Z_O����S^n8�}��V��C3���Be:��G����"��^z�S����z����\C��4�"Q�].�z2f��\}�z�@��*)?> �D/x�yqn� ��X.�O�N�@��"~׳|/6�}�&�Vڀ )�V��H� $��ֵ��[��.�s�勫�M��o� iϫ��G�k�GX� ~K��B�;����Ő�A����fo�mi9?��n��l�y���g,L�XF�x�Y��t�������̽ɗ�>� 7W~�i�/O}�5W��=f]9�� �2^����6h7HʄЈz� � ^ �/B�\@wv����^��)x��֡}��T o�C�ȋ؈oy@�?�x�(�|{*��(Qod*~�~o��W�kB�E�AE���/� �CR�q��@�����6PM~3i �?��9>��і�F���!\^���ӂ�����i��KIyE4X�}���1����pj�>�fA�,�G�%�0��i}�E,J5:1n�fOW�hs]�s��ٮ5T�����[��3Nʧg"��#sy�5۴�\^e�ʧ�g��_�J��Q%7z���.�؝��Cx�'O���%���7\7H/c]Y(��ؕ���ŗ���R�� ~���y��N�R*绅���\K��2S8#�a��ZT�q�\+�ԋ�+\�/=z~�K]���4�7�gDŽ�f C�}��I��$��g>C�*���M������h�B�O8�=�B��"�S�+�����Y�;c(~�H -J��Y��b�)��^D�/c��O�2 #ڇ"?�U��[_"���q�V�L�V�lR� 9�E�BmPP��ޢ�#\�*��<&Q ���":y�u ����;�އ��}�%��W�8��1��䰋>,�ɰ���t�iظ����K(��Q&����Dx�G��e�}���|�ɜ2�s�T@��>N�2}��l�I�B�@k��\�j⤩�o��<�r<�+�zkq�t$5�eC�ji�ԁKl�^�1\(騎�3R�8�Y}!��JX$�:ӆ*��P�a�f�2��{ngN�\�|��̀�)X$#����X� Ґ)L�FQ�U.�O'�i\�y�M��㓨��~�����E?>�����no������n��t���߉�|� ���1�P,�/��hzs�Q�/��-�Xri]��aQ�U��ܵR�r��� �1٦���Y»q�p%��凙�*Q� �E�s�I�]��&pf?n4�w�V(�m �Ϻ��ʿj�Q��Iϥč��b�G悤� �"�Zs���?;�06�b*�E�+�N&�l�C�F�� A8����x13�.K�YY<1����e��O�h���MF�_�e<*�c_�S��Ȫ�U��F�j�������:$|�B�ڗ���L��ɪ��2�)d�ʅ|pEeu�0E�6V~�l���C�Z������j2��� �c4�O�4�;w��9M�� ^�l>:l��7_Q|�ܖ���o��Vpx�1#�~E�C��t�5���0¼ 21�L�0/�Ե���M?�3n�m8#M��$B�[J��D�~�)B�f���N�r'���/�/� i�pᦡ+�a��Γ�9�Ji\W�~$�8h�L�F۪�r�K�ޢh6z��E ��);a�� �� �4 Ӈ���~�B���!ה���Lj�����I��\�}�k�Q�˜7?� �!��[ז��*x�Y�z=��������*�O=&c����Ќ=G�*p����5�����mK:�%<�t��y���D~൦2�!1g�89o*�!|��*���>ƥ�{�������f$�~��~���5u�O0��t�)b�A[,��e�&9|~����=�I���K,���L5uP;�e����[ƫ%2�@e=�V[�E ֑=2���f�@�Vv�ȄyjQ�O�4��e�;�4r�s����bDHV{.R|��S��!��?�@<90��[O�%g$L�iH\"j���TӬ��b�RD�[�'?� �&.�n��Q�܅�U�<�y"�oYjF ������p6z�~��a��W=��Be.�QW�6wBny8}�7;ó���r���(*�@��d�����mv�m���q~D�p��X9�f'L�fgz6;���Ȏ�gxjz�:���}y+s~#6n&m���U~�5��ւ��� �^�w�h�M��3�9��b���y�%�UV�\���P+���1���a���ن���Ue�|mV���0�Ϧ�3 �/%�%b»H�0v�h��]��������%��`���< �Â��Zn3��y��y�Q2�/�_]'Rʂh���4����Z�q���G�d�:�q4�fq[�o�k�Ş�E�YQ�8-�i��촍��-���2��:nv��ൔ-�r��wpDg��Qq曆7�t5m�P�k���:�(kJnm��l�`?��S��ĭ ��#G���{�>6�u�d�L�s+�n�8�~UQ+jö0�S�1���&��c8����P�0�b2o��3���i�}AGc�("�"s�Sx_o?��b��D�ǖ�2CZ��!�Z}��{(������m��|K/��4�(���l�+>� ����ά�]�zlƮKج�{�q�9 ���F�aH�F �U�0O�5IRC�]�6�x*�TӚy��Π$o:}�����o��1b7ԗ�M��AM ������r����4��I�jp/��m2l�kop�^L�oE��!-���)dq>�e`;��K��R��|�q�[�lĆ�ۋ�|e&e1���. �b�G����5~���5rZ���&���[J٩�B.t<�5���� �ן����Ø�\(��N����<�4�3�_�ZD�����<�P��Ю����KNq�IF�aK�5 ���8�y���r�khQ���͇5�b_Դ�3/��M&ԅy1���!��JCS��x+��?�U����͂4� [�է���ci�W�w(�A�Q2�u�~b'�9�[ �<~�&w7;;�C��Ec/�{����9�]��D���Ulq�p�zԌ����AjW�;ufz:�:��������A��i�c�˺u㼩E�ӝ�{�E�݂26�{�I��FpP��xO������+�yӶ���8F�U�։��#�����緤凲G?��7Z��_fd�O`F&~N���`s�,R.�,k���Ghu6�ZN�W�D�os(c�V?�/3��Fr��"Z��ZV4�P��R�Q��:���e�6���}�����kG#dlk#n��8E�(ʸFm�嘂���s���,�����:OB�ye���x���$U��j�$�6���c�85�#��0�R� �v��G��X�* ���<��о� � ���\-������=�5���>�=Z���$��ā;�����=�;����2��ߠ�� �6Vt1iF�>7a��h� �I�w�T. KQ�f�3�K�%����o4U��jy��@ȫȯ4�r��An����bJ�p��S/z�"���QɭT�Ǫ*_,c�{��w�������z�8b/���|�����'�&t0���V��-)ۮn�=5��1Z�t�k#����c�\��F��弅kX��e[����>4U$�����>&*y�N�i;���Ű�y��ӏ��dC��B��U����|�8((��+����]A�sD8��|Kh�e��E��_��`=m�ܾ��Gj=�{f7G��Gg d��4u�6 ֵ)��_��|�Z�#dȩ�lf-�����2,�қ��|�a��H�o I�X]�=D��+e7�(e��B�Zr�|����a���,c�p�d�9�(a��*0)2���lDV� nP-+�2 �cB�ULq. ��q���g��pmpH5��0[�&"D�h&ڊ^�r��F�.�a�9G���WE�:�(:)��� �খ��?OU���� o���鲉-$[���*|=���?�������5~"�&?�Y] M�4��[��t�0\�XS������)���.x�� $$���w5��_�����Eށ�h��Q/!969J�7ŝ2W��5%�rP�'��@B�Ym~�����%|�^"�{e�2�#ZY�Ry�����+�D��Q���O�y�D��a?���n#��G�S\KO]�����g �<�{z�ٱp��$��r l"ÆE,d��eA��5?���1��lW���=��u+�}���0v?y��էtx�t�������� ��x:����`��j-�^ɐ✺�+%r0(��WzϺ�a �+7Rk:���8����0��x�cb```b`�``b�� Ϡ��@�%B��/����*�3��_����`����/3D����?�8������g`��v�����B�$vx�c```d���|�ז���c� PKf[�\R^s�#k#kdist/summernote-lite.cssnu�[���@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("./font/summernote.eot?dbafe969167589eda84514394d126413");src:url("./font/summernote.eot?#iefix") format("embedded-opentype"),url("./font/summernote.woff?dbafe969167589eda84514394d126413") format("woff"),url("./font/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:"\f101"}.note-icon-align-indent:before{content:"\f102"}.note-icon-align-justify:before{content:"\f103"}.note-icon-align-left:before{content:"\f104"}.note-icon-align-outdent:before{content:"\f105"}.note-icon-align-right:before{content:"\f106"}.note-icon-align:before{content:"\f107"}.note-icon-arrow-circle-down:before{content:"\f108"}.note-icon-arrow-circle-left:before{content:"\f109"}.note-icon-arrow-circle-right:before{content:"\f10a"}.note-icon-arrow-circle-up:before{content:"\f10b"}.note-icon-arrows-alt:before{content:"\f10c"}.note-icon-arrows-h:before{content:"\f10d"}.note-icon-arrows-v:before{content:"\f10e"}.note-icon-bold:before{content:"\f10f"}.note-icon-caret:before{content:"\f110"}.note-icon-chain-broken:before{content:"\f111"}.note-icon-circle:before{content:"\f112"}.note-icon-close:before{content:"\f113"}.note-icon-code:before{content:"\f114"}.note-icon-col-after:before{content:"\f115"}.note-icon-col-before:before{content:"\f116"}.note-icon-col-remove:before{content:"\f117"}.note-icon-eraser:before{content:"\f118"}.note-icon-font:before{content:"\f119"}.note-icon-frame:before{content:"\f11a"}.note-icon-italic:before{content:"\f11b"}.note-icon-link:before{content:"\f11c"}.note-icon-magic:before{content:"\f11d"}.note-icon-menu-check:before{content:"\f11e"}.note-icon-minus:before{content:"\f11f"}.note-icon-orderedlist:before{content:"\f120"}.note-icon-pencil:before{content:"\f121"}.note-icon-picture:before{content:"\f122"}.note-icon-question:before{content:"\f123"}.note-icon-redo:before{content:"\f124"}.note-icon-row-above:before{content:"\f125"}.note-icon-row-below:before{content:"\f126"}.note-icon-row-remove:before{content:"\f127"}.note-icon-special-character:before{content:"\f128"}.note-icon-square:before{content:"\f129"}.note-icon-strikethrough:before{content:"\f12a"}.note-icon-subscript:before{content:"\f12b"}.note-icon-summernote:before{content:"\f12c"}.note-icon-superscript:before{content:"\f12d"}.note-icon-table:before{content:"\f12e"}.note-icon-text-height:before{content:"\f12f"}.note-icon-trash:before{content:"\f130"}.note-icon-underline:before{content:"\f131"}.note-icon-undo:before{content:"\f132"}.note-icon-unorderedlist:before{content:"\f133"}.note-icon-video:before{content:"\f134"}.note-frame *{color:#000;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}p{margin:0 0 10px}kbd{padding:3px 5px;font-weight:700;color:#fff;background-color:#000;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.note-toolbar{padding:10px 5px;border-bottom:1px solid #e2e2e2}.note-btn-group{position:relative;display:inline-block;margin-right:8px}.note-btn-group>.note-btn-group{margin-right:0}.note-btn-group>.note-btn,.note-btn-group>.note-btn-group{margin-left:-4px;border-radius:0}.note-btn-group>.note-btn.focus,.note-btn-group>.note-btn-group.focus,.note-btn-group>.note-btn.active,.note-btn-group>.note-btn-group.active{border-radius:0}.note-btn-group>.note-btn:first-child,.note-btn-group>.note-btn-group:first-child{margin-left:0;border-bottom-left-radius:1px;border-top-left-radius:1px}.note-btn-group>.note-btn:first-child.focus,.note-btn-group>.note-btn-group:first-child.focus,.note-btn-group>.note-btn:first-child.active,.note-btn-group>.note-btn-group:first-child.active{border-bottom-left-radius:1px;border-top-left-radius:1px}.note-btn-group>.note-btn:last-child:not(.note-dropdown),.note-btn-group>.note-btn-group:last-child:not(.note-dropdown){border-top-right-radius:1px;border-bottom-right-radius:1px}.note-btn-group>.note-btn:last-child:not(.note-dropdown).focus,.note-btn-group>.note-btn-group:last-child:not(.note-dropdown).focus,.note-btn-group>.note-btn:last-child:not(.note-dropdown).active,.note-btn-group>.note-btn-group:last-child:not(.note-dropdown).active{border-top-right-radius:1px;border-bottom-right-radius:1px}.note-btn-group.open>.note-dropdown{display:block}.note-btn{display:inline-block;padding:5px 10px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.4;color:#333;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;background-color:#fff;background-image:none;border:1px solid #fff;border-color:#fff;border-radius:1px;outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;touch-action:manipulation}.note-btn:focus,.note-btn.focus{color:#333;background-color:#ebebeb;border-color:#fff}.note-btn:hover{color:#333;background-color:#ebebeb;border-color:#fff}.note-btn.disabled:focus,.note-btn[disabled]:focus,fieldset[disabled] .note-btn:focus,.note-btn.disabled.focus,.note-btn[disabled].focus,fieldset[disabled] .note-btn.focus{background-color:#fff;border-color:#fff}.note-btn:hover,.note-btn:focus,.note-btn.focus{color:#333;text-decoration:none;background-color:#ebebeb;border:1px solid #fff;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;outline:0}.note-btn:active,.note-btn.active{background-image:none;outline:0}.note-btn.disabled,.note-btn[disabled],fieldset[disabled] .note-btn{cursor:not-allowed;-webkit-opacity:.65;-khtml-opacity:.65;-moz-opacity:.65;opacity:.65;-ms-filter:alpha(opacity=65);filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.note-btn-primary{color:#fff;background:#fa6362}.note-btn-primary:hover,.note-btn-primary:focus,.note-btn-primary.focus{color:#fff;text-decoration:none;background-color:#fa6362;border:1px solid #fff;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.note-btn-block{display:block;width:100%}.note-btn-block+.note-btn-block{margin-top:5px}input[type="submit"].note-btn-block,input[type="reset"].note-btn-block,input[type="button"].note-btn-block{width:100%}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.close{float:right;font-size:21px;line-height:1;color:#000;opacity:.2}.close:hover{-webkit-opacity:1;-khtml-opacity:1;-moz-opacity:1;opacity:1;-ms-filter:alpha(opacity=100);filter:alpha(opacity=100)}.note-dropdown{position:relative}.note-dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:100px;padding:5px;text-align:left;background:#fff;border:1px solid #e2e2e2;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.06);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.06);box-shadow:0 1px 1px rgba(0,0,0,0.06);background-clip:padding-box}.note-btn-group.open .note-dropdown-menu{display:block}.note-dropdown-item{display:block}.note-dropdown-item:hover{background-color:#ebebeb}a.note-dropdown-item,a.note-dropdown-item:hover{margin:2px 0;color:#000;text-decoration:none}.note-modal{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-opacity:1;-khtml-opacity:1;-moz-opacity:1;opacity:1;-ms-filter:alpha(opacity=100);filter:alpha(opacity=100)}.note-modal.open{display:block}.note-modal-content{position:relative;width:auto;margin:30px 20px;background:#fff;border:1px solid rgba(0,0,0,0.2);outline:0;background-clip:border-box}.note-modal-header{padding:30px 20px 20px 20px;border:1px solid #ededef}.note-modal-header .close{margin-top:-10px}.note-modal-body{position:relative;padding:20px 30px}.note-modal-footer{height:40px;padding:10px;text-align:center}.note-modal-footer a{color:#337ab7;text-decoration:none}.note-modal-footer a:hover,.note-modal-footer a:focus{color:#23527c;text-decoration:underline}.note-modal-footer .note-btn{float:right}.note-modal-title{margin:0;font-size:26px;line-height:1.4;color:#42515f}.note-modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;background:#000;-webkit-opacity:.5;-khtml-opacity:.5;-moz-opacity:.5;opacity:.5;-ms-filter:alpha(opacity=50);filter:alpha(opacity=50)}.note-modal-backdrop.open{display:block}@media(min-width:768px){.note-modal-content{width:600px;margin:30px auto}}@media(min-width:992px){.note-modal-content-large{width:900px}}.note-form-group{padding-bottom:20px}.note-form-group:last-child{padding-bottom:0}.note-form-label{display:block;margin-bottom:10px;font-size:16px;font-weight:700;color:#42515f}.note-input{display:block;width:100%;padding:6px 4px;font-size:14px;background:#fff;border:1px solid #ededef;outline:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.note-input::-webkit-input-placeholder{color:#eee}.note-input:-moz-placeholder{color:#eee}.note-input::-moz-placeholder{color:#eee}.note-input:-ms-input-placeholder{color:#eee}.note-tooltip{position:absolute;z-index:1070;display:block;font-size:13px;-webkit-opacity:0;-khtml-opacity:0;-moz-opacity:0;opacity:0;-ms-filter:alpha(opacity=0);filter:alpha(opacity=0)}.note-tooltip.in{-webkit-opacity:.9;-khtml-opacity:.9;-moz-opacity:.9;opacity:.9;-ms-filter:alpha(opacity=90);filter:alpha(opacity=90)}.note-tooltip.top{padding:5px 0;margin-top:-3px}.note-tooltip.right{padding:0 5px;margin-left:3px}.note-tooltip.bottom{padding:5px 0;margin-top:3px}.note-tooltip.left{padding:0 5px;margin-left:-3px}.note-tooltip.bottom .note-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.note-tooltip.top .note-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.note-tooltip.right .note-tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.note-tooltip.left .note-tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.note-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.note-tooltip-content{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000}.note-popover{position:absolute;z-index:1060;display:block;display:none;font-size:13px;background:#fff;border:1px solid rgba(0,0,0,0.2);border:1px solid #ccc}.note-popover.in{display:block}.note-popover.top{padding:5 0;margin-top:-3px}.note-popover.right{padding:0 5;margin-left:3px}.note-popover.bottom{padding:5 0;margin-top:3px}.note-popover.left{padding:0 5;margin-left:-3px}.note-popover.bottom .note-popover-arrow{top:-11px;left:50%;margin-left:-10px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.note-popover.bottom .note-popover-arrow::after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.note-popover.top .note-popover-arrow{bottom:-11px;left:50%;margin-left:-10px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.note-popover.top .note-popover-arrow::after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.note-popover.right .note-popover-arrow{top:50%;left:-11px;margin-top:-10px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.note-popover.right .note-popover-arrow::after{left:1px;margin-top:-10px;border-right-color:#fff;border-left-width:0;content:" "}.note-popover.left .note-popover-arrow{top:50%;right:-11px;margin-top:-10px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.note-popover.left .note-popover-arrow::after{right:1px;margin-top:-10px;border-left-color:#fff;border-right-width:0;content:" "}.note-popover-arrow{position:absolute;width:0;height:0;border:11px solid transparent}.note-popover-arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;border-width:10px;content:" "}.note-popover-content{min-width:100px;min-height:30px;padding:3px 8px;color:#000;text-align:center;background-color:#fff}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:.95;pointer-event:none}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area p{margin:0 0 10px}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable table{width:100%;border-collapse:collapse}.note-editor .note-editing-area .note-editable table td,.note-editor .note-editing-area .note-editable table th{padding:5px 3px;border:1px solid #ececec}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area .note-editable a{font-family:inherit;font-weight:inherit;color:#337ab7;text-decoration:inherit;background-color:inherit}.note-editor .note-editing-area .note-editable a:hover,.note-editor .note-editing-area .note-editable a:focus{color:#23527c;text-decoration:underline;outline:0}.note-editor .note-editing-area .note-editable figure{margin:0}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right{float:right!important}.note-editor.note-frame .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert{padding:7px 10px 2px 10px;margin:-7px 0 0 0;color:#000;background-color:#f5f5f5;border-radius:0}.note-editor.note-frame .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success{color:#3c763d!important;background-color:#dff0d8!important}.note-editor.note-frame .note-status-output .alert-info{color:#31708f!important;background-color:#d9edf7!important}.note-editor.note-frame .note-status-output .alert-warning{color:#8a6d3b!important;background-color:#fcf8e3!important}.note-editor.note-frame .note-status-output .alert-danger{color:#a94442!important;background-color:#f2dede!important}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover{max-width:none}.note-popover .note-popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover .note-popover-arrow{left:20px!important}.note-popover .note-popover-content,.note-toolbar{padding:0 0 5px 5px;margin:0;background-color:#fff}.note-popover .note-popover-content>.note-btn-group,.note-toolbar>.note-btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .note-popover-content .note-btn-group .note-table,.note-toolbar .note-btn-group .note-table{min-width:0;padding:5px}.note-popover .note-popover-content .note-btn-group .note-table .note-dimension-picker,.note-toolbar .note-btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .note-popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .note-popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .note-popover-content .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.note-toolbar .note-btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .note-popover-content .note-style h1,.note-toolbar .note-style h1,.note-popover .note-popover-content .note-style h2,.note-toolbar .note-style h2,.note-popover .note-popover-content .note-style h3,.note-toolbar .note-style h3,.note-popover .note-popover-content .note-style h4,.note-toolbar .note-style h4,.note-popover .note-popover-content .note-style h5,.note-toolbar .note-style h5,.note-popover .note-popover-content .note-style h6,.note-toolbar .note-style h6,.note-popover .note-popover-content .note-style blockquote,.note-toolbar .note-style blockquote{margin:0}.note-popover .note-popover-content .note-color .dropdown-toggle,.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .note-popover-content .note-color .note-dropdown-menu,.note-toolbar .note-color .note-dropdown-menu{min-width:346px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.note-popover .note-popover-content .note-color .note-dropdown-menu .note-palette,.note-toolbar .note-color .note-dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .note-popover-content .note-color .note-dropdown-menu .note-palette:first-child,.note-toolbar .note-color .note-dropdown-menu .note-palette:first-child{margin:0 5px;margin-right:15px}.note-popover .note-popover-content .note-color .note-dropdown-menu .note-palette .note-palette-title,.note-toolbar .note-color .note-dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .note-popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset,.note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset{width:100%;padding:2px 3px;margin:3px;cursor:pointer;background-color:#fff;border:0;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .note-popover-content .note-color .note-dropdown-menu .note-palette .note-color-row,.note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .note-popover-content .note-color .note-dropdown-menu .note-palette .note-color-reset:hover,.note-toolbar .note-color .note-dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .note-popover-content .note-para .note-dropdown-menu,.note-toolbar .note-para .note-dropdown-menu{min-width:216px;padding:5px}.note-popover .note-popover-content .note-para .note-dropdown-menu>div:first-child,.note-toolbar .note-para .note-dropdown-menu>div:first-child{margin-right:5px}.note-popover .note-popover-content .note-btn-fontname .note-dropdown-menu,.note-toolbar .note-btn-fontname .note-dropdown-menu{min-width:200px}.note-popover .note-popover-content .note-dropdown-menu,.note-toolbar .note-dropdown-menu{min-width:160px}.note-popover .note-popover-content .note-dropdown-menu.right,.note-toolbar .note-dropdown-menu.right{right:0;left:auto}.note-popover .note-popover-content .note-dropdown-menu.right::before,.note-toolbar .note-dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .note-popover-content .note-dropdown-menu.right::after,.note-toolbar .note-dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .note-popover-content .note-dropdown-menu.note-check .note-dropdown-item i,.note-toolbar .note-dropdown-menu.note-check .note-dropdown-item i{color:deepskyblue;visibility:hidden}.note-popover .note-popover-content .note-dropdown-menu.note-check .note-dropdown-item.checked i,.note-toolbar .note-dropdown-menu.note-check .note-dropdown-item.checked i{visibility:visible}.note-popover .note-popover-content .note-dropdown-menu .note-dropdown-item>*,.note-toolbar .note-dropdown-menu .note-dropdown-item>*{margin:0}.note-popover .note-popover-content .note-fontsize-10,.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .note-popover-content .note-color-palette,.note-toolbar .note-color-palette{line-height:1}.note-popover .note-popover-content .note-color-palette div .note-color-btn,.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .note-popover-content .note-color-palette div .note-color-btn:hover,.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-modal .note-modal-body label{display:inline-block;padding:2px 5px;margin-bottom:2px}.note-modal .note-modal-body .help-list-item:hover{background-color:#e0e0e0}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:#fff;border:1px solid #000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .note-popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .note-popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .note-popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .note-popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}.help-list-item label{display:inline-block;margin-bottom:5px}PKf[�\�P�WMEMEdist/summernote.cssnu�[���@font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("./font/summernote.eot?dbafe969167589eda84514394d126413");src:url("./font/summernote.eot?#iefix") format("embedded-opentype"),url("./font/summernote.woff?dbafe969167589eda84514394d126413") format("woff"),url("./font/summernote.ttf?dbafe969167589eda84514394d126413") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:"\f101"}.note-icon-align-indent:before{content:"\f102"}.note-icon-align-justify:before{content:"\f103"}.note-icon-align-left:before{content:"\f104"}.note-icon-align-outdent:before{content:"\f105"}.note-icon-align-right:before{content:"\f106"}.note-icon-align:before{content:"\f107"}.note-icon-arrow-circle-down:before{content:"\f108"}.note-icon-arrow-circle-left:before{content:"\f109"}.note-icon-arrow-circle-right:before{content:"\f10a"}.note-icon-arrow-circle-up:before{content:"\f10b"}.note-icon-arrows-alt:before{content:"\f10c"}.note-icon-arrows-h:before{content:"\f10d"}.note-icon-arrows-v:before{content:"\f10e"}.note-icon-bold:before{content:"\f10f"}.note-icon-caret:before{content:"\f110"}.note-icon-chain-broken:before{content:"\f111"}.note-icon-circle:before{content:"\f112"}.note-icon-close:before{content:"\f113"}.note-icon-code:before{content:"\f114"}.note-icon-col-after:before{content:"\f115"}.note-icon-col-before:before{content:"\f116"}.note-icon-col-remove:before{content:"\f117"}.note-icon-eraser:before{content:"\f118"}.note-icon-font:before{content:"\f119"}.note-icon-frame:before{content:"\f11a"}.note-icon-italic:before{content:"\f11b"}.note-icon-link:before{content:"\f11c"}.note-icon-magic:before{content:"\f11d"}.note-icon-menu-check:before{content:"\f11e"}.note-icon-minus:before{content:"\f11f"}.note-icon-orderedlist:before{content:"\f120"}.note-icon-pencil:before{content:"\f121"}.note-icon-picture:before{content:"\f122"}.note-icon-question:before{content:"\f123"}.note-icon-redo:before{content:"\f124"}.note-icon-row-above:before{content:"\f125"}.note-icon-row-below:before{content:"\f126"}.note-icon-row-remove:before{content:"\f127"}.note-icon-special-character:before{content:"\f128"}.note-icon-square:before{content:"\f129"}.note-icon-strikethrough:before{content:"\f12a"}.note-icon-subscript:before{content:"\f12b"}.note-icon-summernote:before{content:"\f12c"}.note-icon-superscript:before{content:"\f12d"}.note-icon-table:before{content:"\f12e"}.note-icon-text-height:before{content:"\f12f"}.note-icon-trash:before{content:"\f130"}.note-icon-underline:before{content:"\f131"}.note-icon-undo:before{content:"\f132"}.note-icon-unorderedlist:before{content:"\f133"}.note-icon-video:before{content:"\f134"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area img.note-float-left{margin-right:10px}.note-editor .note-editing-area img.note-float-right{margin-left:10px}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right{float:right!important}.note-editor.note-frame .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert{padding:7px 10px 2px 10px;margin:-7px 0 0 0;color:#000;background-color:#f5f5f5;border-radius:0}.note-editor.note-frame .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success{color:#3c763d!important;background-color:#dff0d8!important}.note-editor.note-frame .note-status-output .alert-info{color:#31708f!important;background-color:#d9edf7!important}.note-editor.note-frame .note-status-output .alert-warning{color:#8a6d3b!important;background-color:#fcf8e3!important}.note-editor.note-frame .note-status-output .alert-danger{color:#a94442!important;background-color:#f2dede!important}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-toolbar{position:relative;z-index:500}.note-popover .popover-content,.panel-heading.note-toolbar{padding:0 0 5px 5px;margin:0}.note-popover .popover-content>.btn-group,.panel-heading.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.panel-heading.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.panel-heading.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.panel-heading.note-toolbar .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.panel-heading.note-toolbar .note-style .dropdown-style pre{padding:5px 10px;margin:0}.note-popover .popover-content .note-style .dropdown-style h1,.panel-heading.note-toolbar .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.panel-heading.note-toolbar .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.panel-heading.note-toolbar .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.panel-heading.note-toolbar .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.panel-heading.note-toolbar .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.panel-heading.note-toolbar .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.panel-heading.note-toolbar .note-style .dropdown-style p{padding:0;margin:0}.note-popover .popover-content .note-color .dropdown-toggle,.panel-heading.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu,.panel-heading.note-toolbar .note-color .dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-menu .note-palette,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .popover-content .note-color .dropdown-menu .note-palette:first-child,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-palette-title,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-row,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset:hover,.panel-heading.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-para .dropdown-menu,.panel-heading.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.panel-heading.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.panel-heading.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.panel-heading.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.panel-heading.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.panel-heading.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check li a i,.panel-heading.note-toolbar .dropdown-menu.note-check li a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check li a.checked i,.panel-heading.note-toolbar .dropdown-menu.note-check li a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.panel-heading.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.panel-heading.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.panel-heading.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.panel-heading.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:#fff;border:1px solid #000}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0}PKf[�\9���O�Odist/summernote-0.8.10-dist.zipnu�[���PKETLdist/summernote-bs4.js�{7�6��ɧh{�҉Eٹ��(q&�%k�8�F�����I(�%1�H I��:���y���������ڝ��K�P�* `�ޫ>��.��y���O������듪>/g�����o���ry����\\�����lYf��0���||r��>�u��j{2�VgӓA5�U��)�ͦ������!Ug���a]��z�:/�`}T]L�P����W��.�5{�����6n}��ѭ�[��>�� w���t�ϦU�d2;NnV���~}�z���|}^ώ�����|���ܹS�f�?֣e���*�>�]�*טKL����W��A��?.������u�ƍj+�� ۱�1��~���(`� k���ǿ��7>{�my:^ܬBO��6z\uE�7���R�;�����p���tg>��/_�{@ax1Y�n�������p^��ǝj��/G��bZGH� ��T�6���8�Y�NǓ�y=�Y��9>�h8�G/�2�o�����g:�:$��F k�W#�&�AK����Ã�l9#O�8�N�`���!R�yR���FA�O�:��c�7>�4��$��=���"�fE=8]�M���|nC;r��8�O�guwsã�{,�h2U�Em ��Vs��z8:-bIHF�7��͚�6��r�F��^�a%�3�,�6�;i\�ins6�F�P/z7����9�6{$�D6B�̿9&_ �������W�H{�5"(\��dz��7S��m��d��O�=��ӓ�)FH�� z��/���^���/�Kʆf�e;�M"R��ٕ u�>AY�`x~}��w�ˋ�T����V���@���UA��ވ.�k��x&]��U��7��6\#��p8?�8�.:����-�Ry[����R�ٹP5�`�؞χ��ƭ眆�7�����q��L�fsK�K��p�x�ef%V3rM�W�6�e�6�o��@3���{��_V2�.�mE��������p�s9�a���l����x5'_ί�jΡ����z���z5�M�;�-�6���ױ ����6�J�X� L��Й��hx{��3��%�� G�9��t�3n���O�7������ u ��Nf��Ŗ�4<0@ւ��h,���Ţ{�D�{��.��ˢ�ZmCs����Kt�|6/��7�z�3�I'�&\��g5��5 ~P|"�f��z1���M��`�!lr��l>Q�� �\?��s�x�����]�1�ͦƘ�6�$%��.�������gc�X���s� �S]|�Ĝ� �d ��+��w���_��mj`���M�c>�8�=�Ӎ)�~a썴GX��^M/���60�]8�M��$��l�|��M+��|��yBw#�/i����b�C��B�/������7YFgW�ަ'�"�ĭ��Z��+�W�bdb���9Z(>�e�$��jE�%�݉�-��SAƊn�*]��%(���X���\�M�=���]���;�ZOeiH$� .�� ��܆f+D+* ѵ^�k�x��4$�`O�W�����V������Ꙏ'�hM�k&��X��,��?4��Ә���C�퍤$�����BiVx�y7����>���U��M���P�D���=E����[Z^�<�JP�N��@Xki$�R�*[�����e�B�Μ��픡wdKΏn@FWY���\�O����^Bo]�j�\��l�a5d��Z�;�� _[`Y\�):��+$ߺ�{�X��":bk[�~&%?�b��M_�����LJ+5�B�4�x���*{�р����QC�]*�/�m�3�"}�볂K}e��=�3�(���[��V?�?������vaC{p~�8��y�p��\�2��u���B��-�����f�iM�oo�|�� ���2�Gp���[0��M(���#&��U�\v/�.�\$�J�yB�bA}9;9���p�.���;�7ns�����W���m��y��B���^��P��un�u{Y'I�b����aj����T���(� ���W�nx�����lJ�ny�MI��p�T;9��8Ng/�y�[`��j�N�8��{�i�1�|�'����I�iYt:>:��^:Nuc��8�G�j�1R��6�#��|7C�P������d�2N�0�Y�.�~oXw|e�a�k;-g�B?�&=���L�)�ג �!�� ,-UP��W:ZG�+��ܡ6������N��&3��06���Tt�f�L���D98���?,�g��,⫺e+Z1�od������u�a���� �D]9 Z�lA�B��t2_���h.��s r�*_<)V������u �Ω��["2��O>� f?�Y��ޙܑ�-h��m�����댚����2Y�}&�R��D֡���5ܿ�Wm%c�Z�͒}�����p�uT�sY��P�.P�B@���?i��a��N�_����n=���U��B9%NԒ�]��xJ_��l�4:��\��f�x0M�Ɔԕ�u��1��{�(.���<���(��A�S=i {�l�[�{�c�lm�U�T�� �6��_ı�|q�p�U�:��E�1b���{k�Ջ�|,�� ?���;�b�&i5��C<K�UT`ü���¶��F���}����Kgl �*�pUf4brߩ���c�~#�Cq�B:T �3˷4�%͋���Cs��X��]�Z��4=9���`nn�I�P��g��Qp��:)��p� ��n�����w7H.U��u�Q=��%l��U��'f*ȿVR������� ��o#("�T���nUo�j��{+�ۤi��(X�EmCR��Y2�,�� ���n2�M �ak^Ew-�ʘ�$�m�]�{�Cð�L�+�U6�m�T��{�A���K�Yg�+f��xŕ���kW^j��˸휾�oo����ק �����.��Yi��q�Y����L��f���0�]K5t�#2RA��5%��2�0I^B��QҜ�(!�������lz_$s�[E&��)��&��hE��)���98D``h�+��nRk�<���/jH-�K[">ڧ�V�z!xk?��M����K@�^��f?�Ɩ`���NUE��:Qa�J�4怯D���b<H�E� ��0q52ɉ�.��#I3��O�`'C��� @H�I�L&i�6e6��Ꝩ��(��4���c�N�F����1�YT��c�� ��?��(UA)d�23�n�Xf�5�R�Z�Z�5Y��L�����f�d�t�i��:���M��^�$웰����V�+�a"r�hz<+��!~��0:���`f;�k��l�M,#�?���T�IA0'�q�����e��� [��.I�@�'\�06fsFA2��`���0�M�p��b2Y�Ry��%_�C�E���Ɩ)_r�z.;b%�_�-ۥ�u8�H�cN`�� B�z^��>?ϣ�މ�vx����S�HN�B{����먢g���YH�XE)pQ��*�3��6y�?��c�|-@c�����M�f��iG�۶����¢��Sx��~X 1������ؘ�Y����YZ��F�T;�Zϭ�(Ş�~s���X�ԭ��3�9���m�a�����1�Q��1�ó�͞l뿭0�&��y) Z��؎���6�6?�0c��`�Z�:�+���G���G$���DYT���r������Dj�4\7�G�v�@�CP-_W���Z�����lp2�\�>~�=C�j��ae0YQ�ɏ�\�|it�Eso���K�7O%�m��t�zrqvX�=���I}��j|�<]W��%��"�>��?J��b��F�1z���=�����t����}�0��Tܟ�GC�]���Q�1�c �U�S���y[�h�tg#ɾ)u�0��x8�Q��Oe@`P�z��$��_/`��q�c4î'Kɶ& �]��O�q��9�Y����rD ��n4�J��Ƀ����n'Z��S"�5�eUz�c�x �XǛ4~RԀ� <�jg_T���z����m�{�za �O�:��3��Ȍm�%]���=@��S�MS�!Sw\kHd��°N�$�,Ρ}�l��"�D0L,.����e��5�3F��.`����n��͡2�w%n�V��.1i-� ��1�&�4O/�<]<a�������� �#�t[��G�j\��0)�|������� ��s��֎灹�Iu����uP=:�~������L�3Z,j�`m�D��E�X��_�`�;~����?r��G�u#+ �+�Wñ�ES�w��ӷU-i�&DjЃG5���6�@����ǟ��{��C2��2S����a�e�ɦ!��4����; -K31U~���\�q�����^L&�6������#\3K1�ƺ^L��L�t \�D�MR3t�]+��#��|_�ַ��H�Ţ^z1鼎N(�N��Ѭ��zcJ��H�Y�{#���|�����3?>�/Z�p�������G3>�W�i�e���7Dt�r�_�@�5�� 3L15�M(�$�{de}��鎳x��f���4?)=Ӥ@�U��h9� xM:$ܿawq�;�K�����q _��F��-6|�V�J��n4�K ���U�x�5g�]���fY}M�� ;�Q���12��PPj� �����9O�B�E���^I��{��j���DR�I(��/]�r���������hq�k!�F�� \��U$]&��I������-�?b�?�Z�'�p!G~��[�gi�*�0QU�*CXG�Zs��\�@��U�j��kYjW�!��� 4YU��yR>�.79M_���Dy S@)��d�I@:.H UZ֠uߖ�N�?�����jA�H ��d=�2��~'������6�ep�ѻ� O���3�h��q9�!j��N4=���ÉNjXNg���4����?*� S{X�H�c�W�ę"��#%�Є�z<uj�촂�+��U�����хY6zx�n��QS��ح��K�`�ެnuѽ\2! n�5������aٍ+��{��[�@��F��On`r�qP9��p�z0h����)B������2Ѵ��p�*�@T���.����U�� �08��(���4�q ZF��h�x�����^��!���pK�-T������B`����T7��Ĭ� bF�R=��=X���H2MD��ԑA��Lun��\o{��Z���TQ�Y�<E)Z"s��/I�:tP���w������RT�%Qh�iy��O�1i! ����ݠ�E$YjȜ��u���ͩ�EkA6��ln��Y�{�2�m�q����!���z��r�V�R��'��{@�)�� �.LD~���nS��!�!�\�����¡Xs,m`��:�G�z���x#hl� 6悪�S��-%I��� �T��߆N���j-���̠]��p����)Wմ8�i'�bI�w �j.�$���]V�,�BʈI�5����w9�Th�&��5��w���:�X��`��&;nθ��Y�MY��F�fj/���_]�R�n�2��������JՏ�0�W�I7���_�&3`-���7&X����p1�5�:V�_�_�a�qf0`����6�3�� ���w_���UtlT4���T�G �/p�����=<)� ��|VmnV5֕�%b�% aRӺ����1(@[�><t~D�W����yY� ���sW])���W(��c�V���Q6�\b)�D?���3�>�xT� ����=�l���aϫ'�+ �,K�8�+�5�p#!�8�1�e<J��l�b�[ox��M.��I�J���m��?��"�H'�<�pݺ�*�Z�M�3�{�@Go�؟�]����a7p�d<N���cݒ~���WC8t_#�'���@6Y|��$a-�Dy��ݔ��02 ��F��o�I�3�Y�8u<1��O�m�J��_�O?;H�z�s��z�����?���3]n"�H�SaP� � �����{��B䴳��T=��w���9�{csP�T� ��±Z��es�?Т�j2.�8�!�Q� #�m}�ns��V���Ɵ���}��@~ݺ���EGGJ�{҂�~� *lv�q�����1B�鮾v����� �*ů�%�*�:� ��m}��HIl�˿���f|o��}��j_� >;�.�r���ȏ��5�p ��%�O`e�&/�����@�~Э��)8^�$���iT�Yon�PtUg~m��@�Л���`~gBK�K��tZ�1����&G�U���b)�hƕ&}� �����G��!A.�@�t��_'�mN�u��d{���t��>z�!d���y(��j8��=��)a���[z��z�_�\n��c����ǘ��i"��fǜ. �*�V�%�:)������&2~���C��T�܀?Lz�b�(��$wp� ��/���(u��(�B���_�4�sƒ���X���]���a�y`W��6�,܄WNZ��'�Ǐ^nkyP�A8Xݷ��ջrE��_�;E��v�}�*�`Rd�].�^�I��/y��!�"��ܵ�\��/�8����@k ߯x��gܪ�����l�+\�����*�������fc�x��.|�=��NW���(��9�{�#����,�+�-��挅ie�T��짶9�v��U[զ��ϽՅ1�c��8qo3�V� �x�:#I[]gox��e�����S8WR�9�Y��ӈ�#���x:���� R9�1�t�"2Jȷ�)��n�>p(_Al��O0E�����{���Imm�4�R���iK�/� 0��nzrwo�{�w���dp�FI�iп�G:�i5���O��������J��.���� X�'��7s�����WR�u�T���z�X����)��[���+)�@}���,ni����d3H�B���H.�/S��a�ۅ��X�2^�9.�Qcc!U~�.h��~�hu��l��ށ���k�-d9�ax̋�J��*�8ƲT�8/t,�g[��H�(��i{5�������}�x��J���4vp{�*h�)��/��K:��Xޞ���v��>ֶ�O���Y�p�\a��is@ᑵ�nj�$/�LѝU]�'^��q'�t�$���cۂ��n!m���qK�F���\��%1����]��� ��K%����Ǽ{��x7_�l����3�����5\_?I�������6|/�I�o���������}�?��!|�������~����'�~��l���'�)��x�Өh��NѪV5�$0w��V�&�N������W_�_~�����Q�2��c�B|��'{��Ϳ���������7������!<�P�E����n�9��Zp�E�M�����>�"�b�y���G,�1�[C`��Ð����X��^H,���hm�����%�o�o70{4�;�����.�g�G�n+�?�xrLSx�ȇ7`Kƌ����@���t���]^��X���f�Z����jW�8�������N��!�6]C�p�A�{5�T�2+�߿����S�+и��齿����}a�@���,�/Ʋ�ʍY?l�UF�����x�@��ud�՜7^y��kC�"W� �Z4ZS˱�E�F�<�] U��Wt�����!o�D��.�`�����!�x�YI���I�c�dNG�]I6~�j�@��Y�q.�ɸ��l�$�ձ��H��.ʸ�f�xv�h f���#b��c7=G@C`pe�cםy���s� �5�Q�t+b���TYY��1B�@�?`s��^|&��`���9��3x1�$�p:3�x:�Ϻ`��8:���[v�$�f�Eȸ�X4�n��H��?� /���_?V'��|E��A���O4��W4�����3�0=\���V�Gn���>.b�X�pvr��F�?Ep��T��W�Q�U.�' ��S���x�7�w��r>"���FC�v7���AP�,@$�-ɴ��K�M�}��sk�Jn���MxO'�� +�?��F��Y�9fUpGek��������_�jn�ݾ�^!(��ڤ��-;)�X����&�'ց�%��|��k2y�#s(�w<�A@�/@O�[������_��>�<���ac�r�̕q���c_��<@��- 0Q��F�p�O�z@*"���\���-=5�8�P��|!�9@N�J��X���T&$l1�J�JX;��ך�;����+�ļ�d@xn��4�A�kN� ŽSbS�W)`U���UpoK�Z�Ge�^�^�in)4yC���Y���-�X���۴�O�"&� ��X��)NK�0���K�+�_#]T9bxf�#�zN��`'5�w��6��Hl��%w���Ab5�)��������d+���7�>��d:���N�F�i1�7.��k<L�e�@��N��UVa3��5#Lt��))os��nD���Lv��N�$��)��gAn�&8$�C�.�5�"�l����)�̢ܰU�H�u�-�����$H��%N:oiЯ]��^!�L^7s;˙!]�M�Q�sX/_�8�|�}y�����ne�%T訶Rt��V������#ʣ���g���� ��8�d�x�c��P��������i�?TK{.7�^���'���vf���d��cÉVeIVxy��O�� �1)^.���s_��E�X�%�+��r]Z���sd��f�r9h�*z߇��d�ǁK�ߚ���ʥs���˒=�[߁�8�va�[uʺ�Y���c�W&��V��i22q���zwM���0��W{�#DW�ڙ�������4?Qr<�v8yчINS.*�%agZ,�ϥ�ȋ���sufx���b�+5�<`�:ဓ/>מf�Ew��ob���D�5ݤ2�!�&�R�VR¼�-�������z�#f�qIk��(���br^�J&�X~��$��ܒtO�2g ��"��h�_=��ab�R�ebw�'O��:M�Y�E݊�AT+��hD�(I��p��>���UJT�����?mQ�E#4Yii��Ǥ�h_qj^�*��N��]��Ɋ�M�������Y#ipC�jjps���ԏ�JkwC�1�"y�Qġ4������R����f�<���j�<v`����d:���$-���{/��z������'4����6z �&��a��!��)�wy7�Wx�%B�".��|��1N�R_�y���� f�nji�6�:�Yq���|��#�"[�j���M+�K���N`'�k�d��k���6؉W:�� �z�:ɳ��M����j��#y��]�J����(l�O�W�-E)������:ZW2�S6�i��-�v #!�R��A��Q�cn`�k9�ژ�>C%�)H̾R�bF�c�W�55FM�j���d��E�s��Hk�A�ĥ\�{�"1�UiQV�IK���ށ6�ɵ�f�@��J+Ɨ��`G4��;4�|��\I&6aE���r�]���p����ޚ�qM;Fw�[¦ �k״iЈ�kW�!�,]�"�Eu��|�Z�I��"�ݽ��G��y*���PFt@4i��-.7-P���(F���yl�[gH`a�x]�K�����b�X�����ؚh2���O��X+Wh�D.�|(��!���0��j��y_"¿�E�FD��uZmu�5Xط���MT�j�:(�M[0$�E�e]�M�'���-t��O�`��v������\��T�Їa�c{Cl�H�� ��ؙG�����ߒ�õ��M)+cI�%[����S�.�]1 �n��U]b`B��L�Q2��0�H���-ƥ�0�K5�u����W���C�;�DZ/�9CZ�cQ��w��7}v���B����7/nj���?8���Z�fSv�o�IS�^CYNJ���vvr���*w�!���˝䌬Oݍ<L<0� ����$G��_��YW��+W6c��R��:�HO�|���_��s��v��UW�ϒ�~x�6���3��b�d�̐��嘟wh���Đ�+�#ϸ7�� |�����4!��rf�Ƭ0�R-+�lTHՕ���D�j�j�48��<$��ϐ�l�@����ɥD�:%<&*�����d���]<r<�&�9?P N�.i�m���A�QN�P˹�\O*k`;�mf�kY�Ε�&�Sz� ��^���tT.���^a�Fz���d�˭Zlb��U$K�=m�y�J#�����N�Xs��F�5V,.�$�Pa( Wɾ!\� M����)T$˯��%R��S�;�qL��e�u�pK��Q�I�U6�+'LC윜�\ZT$��O*h���\��!6�T�����i�N����� �6��77�O�`������)��{}�^2��x�C�A�m-���� <)����'� '���/���0y.�E0z2V��y�J�5���axk��~��`�X���2=���[����C�+��"+�j����q�D��B���r�������,�xjI����Ϫ��6��v��T��<�7!���k�S����n�Fv��+���6����l��$����Oz��:�n�Q?(s���s�Nm����)f����j���x�6�G�ʓ�r�7��}� �(��S���>��&45�J5u�A��f�]{%8]���V�VX���*�P ͽ��*�)%��-N�&�u</�<�]�; �kc�))F�_Q$�7�_a�vm�] ��ϝ�feB&q�F�6�\�ŶZ��S��Jb���jC�Eq�Gi�@fJ�r����x�c@�l��0k�4��Uk�'��K1S�[M8>�I��KN#�X��މFgIA%��qU��1�-2����ԕ�3oK�;pi�[N�>�k�P6Z�����=�i����#)����RK����#�@�=��Z��[fOf�l��1g;a�T�7#�k<���.�}ج+N�b�� ���N���i싕�@�Z/oܞBf@)�Z�B��0/;��L�EQ.\�K��"w�Ma��\�����'UW�b��[vݡ���$Y�$�C 0��̵�M��B$tl��Ns�|1������2r��ZHk��ϧb?e�DgJ����+,�@��� �c90��<9#�&<\�+*4�`�c�Z�;���*��y��v���� ���Cg��t�+K�8�r\@��+]f��E|2�aNcZ��.�US�x���Js�� �+ UE���_��(Li�T ��� �o��fZ5��d*��_S�L�+���?aY���%Q�M�N)��Q9��`u�X�S*�O�Igf���Or����"�av�bB�#�n䎣yp�XyLQ��O�S�8�e�=9>�kt� 7s����v�N�����P�i�}�"]�[�0,��{�z���Hj �1����H�Pb�-C�c7(-E���5��}j�O?t��V�..tY�&=������K/��zdK��� K-��ͽP4�ZR��^6 �#�"�Q4YU*h+IJ]Az ;�e�}���ђ���D�d;�AY��b�9ӻ=�@2t/��@��su�G�˳�궯֢�e�`����ܬ6n���j:����o�.q����ٞL�Ǝ�������q��Nf����#�pXC`�fc��&3�|����ZG��}�z��0ll ���sz2k�h��I��KXC����.�Q�X�D]{7�@bL=#j�悂��[u�%)��5Wy�YA &�m���"r��'H��8-����x��lS{F��!�|��Z���*��:���T���4-,����4nh��V�Rľ��:k� E�����r_�/UM�~���{˧�K�J��`�w������ӗlby�O�sҨ��&�(�fܵ NL��Q�>@�f�g� ̞��ùv`ԇ�W��<�n���&n%��8�FT�PK���D��/��'����3�F:K��+��U��G��N�N��<�a�b�h$��p������ְ�F+[�.7�ix�����ˍ�w���\�v���_|�x�����&.>@�76O�t������3�P���e�hˀS���@��(q��T�MS�0=zz���l-Vv�^��.4i��sD�a�H��jPF� 8���{� �M�0��ۋ�.��%s�EXl��j|'�A�Q��OW����{y���}*�����p�N�##��3�N.�b{�!��M\���3�3���V����o� ��!T�Q��bͱ @2?d��n|@�Sn�Ó��t��%7��x��+0@���f�|�{Fz0މFN|�K6M��_�&:����TnI^�(��N�� �n�o9[P-� ����.Rm6�2�K���� �qT��X�Gç�|+����q��0��yq� g�6����ø>�U�2����u\`��Xc}`7>�ϰ���x}����!-l� 1�R�g��,e�{���q%� �.`+V��FçS�4��@}.�AtE/��Ɖ�cd`)zFa�����Ӡ&��5㙵�|} Q�;�"���O]����y5�����Lxmr��#(���o�Y[Sn(ځ��k����:���!v ~_�E>�d������l���� <��B�3��/E;�����l�.@�6V�a������L�)�t��yv�&����tƌ舁cN]}��p�-1Sh~�2;�����3�s<����Wʟ�-�;�t�9ٞP���mA6ޡ�D��uy$����&D��_O���5���_)?:1�HL�R�4�Df�/O�?ƓKm~�pMj/��1.<g������Jwq���;�I�.�{;�Or��݅��ϺK<�%��K����K�T���Ɋ2_�G.E�2����A?�!?�T'��'�|��6^<�Q�Hpe���]pK��ea�"����-��]�[�2���*7yY�L�ri�Z(��T=��z���9(�O0�@��a�{%K�r(�LӲ�_h�)���9)� ���$��½ؕ��1���w�U��M�w�}+��e�!Ȇ҇BH�r��Ӝ��>�s=N��Ta��'��ʕ�Z����ͷ�e��Z}�K�Od�a]���P�POL篜~?�h���[˔7��Sm�קl�7�$��� [��b�;hnӉ���c)$;ZY&i�;'ֳ<K���}l���5�LS5�T�&�e��+}îY&�m؞wC����ZV�du�J�kK+��u�Ͽ�:]�#�ğ��Ṳ�a���T��A�W�ey���tMi/��������K�NX�h~\$l!Z)/4�S��"JE��N��"^<��4muE����@L(o���{r/�O���K�>6��p�h�^=�x��C��>�sn���M<s���옃��L)�ɏF.b#�9�)(��7ʌ&�������>*Y�4����t��(B �.����9�/-���S�܋� `����>6��Wu�w�V�T�j����o������ �9>Û:M�[bog<��5�2(UDg�Gz��#�h�����W�*�v��Wg��� fI/Ư�b��-k���\k ���|َ�'@�+w?� ��J�WW�'��I���(�8��ѫɯ{�ܪ,��������wW�Ӌ�é<�pSRWyC�P�+��x=��e��>��W�ĤHkď�h�ZR�a֠�l"�0�ђ��+l�,�MIѰ^�LW/5Ά?��.����,��b ��q2�c���>���Zհ}>�k�ˠ�bNƔ>U�v7r]�z�r�2�n$�<�볗�ƭ�YS�,�� 3�%���_�QH�mvAe���Qr:�h�BsP��f��p�3>�g���w� wn�Y���z��G9�(���Fg�x�y����FzY?:�\0��x&?���Ft��9d��1,�!�=�*�=�+�Li�Vb���.I�jq:��=�x�W���d��F%�r����+oL���H�Q%c�*\'���R.�d�=Y=7ZB����!6����Q%O@���z2{J�]���$�ޔ=����/CYp�i��G����{���%�r.� � %r1!P'=O!�%1������T���P<�M@��Yn����{O�6ݰ9��'5P�o|Z�YS�/��jd��F ��ph�v3�Q3��q3�I3�Ӝ�i3�9t� �$��t6�2>�߲�i��Şj-���`�Xt_���z�1x���al�F�}�ȧ�Q��W��7}9�ɭ(>��܅�9<d��N��ѣ�L 5Z�],� 0y���|tP�ɏF�Dm����S8q���EZB?0DNѾ������(�o4�^�ĕ�m9�cN��+?�- 5�8�]wh�k�ә�wvO�K���>:�bo�Ne�J�e�s�ɍ�R��W?���a���+��ȭ9��o��<L?~XD��I��Ŝ3_�.�$��s��k��p6�q���Ms ��Y<d�rR���ȋiQHfE��R�qxTߖ����$�s��qp�S��}�>�K���f��w�ͲE'�T���ãܐJXa��FSN��!�+=��3���ϭ�N?V1A����� C�N����+�4F�ܚ�.0?I�^�\��Y�L9�ձ�5���8����\��Z9OI�5��l�U$w�T�Zy��a �;���:�����zW)C6{l��"t�T�� ������,` *����oi�{�)�M��N�W����5!��lبi�eg=�`؎�0x�ŏ���&�t�a-�x�TI���Êp��I�Ԕ>�a�VKU8�>��w�{����}x�j�P�!�V��+�o�N=����7�+����7M0����7�4���+�c�~ʱ�BY�B��1�<��ܠ>�F�����d����ÿ�r�ft+k�l����ԽA��h�j9Բ��e���M�EVoo�Gۏ+���}o���^���8,��\���q�F-�)��G,$x?��/!x}�_������{w��[���4R�&��?�׃'@߷?�/��G�p���xrn��䏚��mx=^I����G��nş����}�%�ۻ���'�u+�z?]k�6���<���8|S>?q���}j z���|j�e���w���O���&�~��a�����O�ݝ���F|���H���=R珎�#|��������o�1?G�O�/��r��u���/~x��v��=��{���v�p�������m�&�a�?���ˠ��ݦ��cp$r�ȼfđ�����Pg4����w��r��(D��<�� ���x�YY��~'��i�Z����E��W�X�9d��M '�%<��R��dy0�ehȋl`�������1X� Ț3G�( ���L�I攝,7eC��3D��D&��T:"�w�?�D[�v��k�p��O����$�ߐ�d��n?��N���y':�x)?��z���Ÿ�2=��Pl��z��Ff�XL��� ��b����,j�2��\$�d&�ƛ�I}uxs��K W�`:�,Ɠ��S<|�dK�����k)1�qa����[��K)`6&��#\�y�6��t�C/�-�����h>[̎���M��],6'��9*n��ͳŧ����������O���?��H��E���?���~J�kT���1@-�.��v�灆X�PP=����K��K]_Ex�юT%�Eu`����̀r>Q�½�~�/�!�xL�־"�:�>�3���#�����1��g����";{�8P�ϋ3�T[�f<��SLɇy�eڟ�V��~�>c��&��T#�Xnч���?�z7���#���KAr���Qӌ"��Ȩ�;}n1s�p��vI)ecCA�^�A� �ʋ9I�T����t.��.�����C�8P�E��qMOe�pWK@�(��ѱV�c�$R�x j�X�#�e`w�U�:88�@���1�pu9����S��=��jȶ�y͘7��.Jiư�Z������Ӊ$��� /r���|��ӗ{]!�{�� 7�ޜ�03Y-@'�G\r[�J]��|�u(�����/I��V�Q��y�K���k�"��d=B���P*�A����h� �{q�ifp=���XMy��f�B9��iʧ:��g�F����y��O}�<P�m�^��l)�Kn�]u�PՄp�B�G�q2�ѭD�/"50�2s�n2#Wތ�h�ץ9�&^i�R:K�~5��˴�|��I�'Q�� ^q�Y���4�O j��Lr�f�|o͐�FeH<%B ��"���G\���Mg�~��?w�8�����ͷ�3��>�v��y�9�[8�\�4~�%��4"���Vn�,��)�ec�/�h�(�sNn;+��MA�;���^�.�4��$���d9�J Zb-;Jz�ѳ�-+&�;��ƿ����Z �T.I�Y��j@q�d��n�+�t%;��;��`���r%��o^j�UK˄�w/�8j��p�QCxRӨ��z���PĿ� ��4Oe�� ���-�i�<�ؚ���[��c�$<Az��Z�͇����������j1�5J�j��5ʙ�b1K%�F1W�/V�P�\��H?0�� ���Dн�9�v}C�N���N�"R�ƿ��˲<V�5�e �T��Ŭ��.� �fYt��,o�X<��ɚ������w{�e�2�x`Pm � !zT��P�@Є Ƹ�Gn ���n�?�N_�2u���UMf��n���kt(%�7�PV4�����j:�p|f}����Qf����:��<�)��M&�eM��ƨ�9~Y�4lU<W�)Y]�)����r�|}^b�h�D�YQO_b����ٽ��s��BdV��W�\N�bR��%9��Xŋs��τi��Y x�VU})E���� ��,�y"옶�JˬS=C|�O'<G>ɯg�N��N���1��Y�X9��pYp/����\��S��6 |�Y���iߵg��R�f�,��ҙg���y�ӂX Z���liiƬ�W�5�f4��G�hiA�F]�R�7���CA�E��UQ�:���) �P"|��W]�C�Օ��0�|����+�j�W����^���.(��C�I7i�� �.���Y"=B&{z�4�����4ˇ�rJb{2��h�ڧ�ƠUR����_�ԡ�RhRF��sE�d�VU�6�al��<�i~�р�a�{�tQ0F��co,�[�l`�\� ���r���B��R**r��;AYޣ�K 4=���� ��c/��e�M��k�[�uֿS}�3Y���b=���]3�F�Kם�Lc��" ��~&�`�/s���b�t#$c��g;�0K:�%�'��CT�Q�q��� m�����ǝ4��@�頪e�ŌA�o=$$]nB�� D!|��� �/�.'ʕ���^M9���9&dl2��xY%�F���JH⡰�Wc�TМ �wRk9k�P�����m��ۘd�o*t�YSGO^��O:�d�5~Pj�-���ҁ�VKf�B��Do�ٲ�&�MU��*I���'�PAc������RF��H]M���r�P3�n�`�AT>z��%��f�l�H[{I�u%6�a2j�Y�[A�_"���AJIFqg��.�)n���hd���7���n"t6�js6�`7�l6�.���c��Q����I%s_����܈�8#9R#�Rf3z�P"U��+wK���[6�[HP�T��ܬ���&g_k�Ҝ�o�,p��rtjw�����V��,��`�x]�����z�^���,�)���)�K bBn`�Ct�j0|>�'��印� �s�����&�b�]�A��Bf@z�0���^���� �w��P���Pt��~Q$׆�z�)�1ٕWIA-��8(�u39M�9�����+��B�2,�=x^�Olv~b����҅�ղh���匦zڽa*\3g$�B�e�ޝ�[*F�� �ft���4iW �*h���Jgu�-�`�]��v� ���Bg���hӝ��N�� fR���.C�D3]fߐ�.�XS�N���0m:{�X����.�0HS��A��k��|��J�p�|���cs1�0��ť��J�\�F�����kW�*��uuWN�3Z��gi�t0���*k�HO���F�v�� �"��Y�<v���Oڪ��(�Ӕ���6��g Ũ軰_�!�f����4Ĭd\ӱk�ѯۨFμ&FB��u����C�_ez$��v�l��G�%g� �^ �R��B�TB|t�蕰l�����T5���s ��O6��* 8������Q��� S\�}��T���Y5 <(/�$�L#�|�L��j{�<44Yaٸ� �$\�XR|G���V;q�9>k��M�f�� �<~�U�Ҕ����-�)��a�Eg��k5o��J�R�^-3�52ַq:e�gN�bK��S�+~M�n�����r�~xoJS�Ddi�F�q�[�T�x4d[fLCVd�[*.FM� �!2ͺ ��6�#r:��ITN#-�k�v5"`��Į��9>�Z��-Z��A�R呂pyou�����4,�<A+d �^%/d(!TV8X�7��(ĂYn2)A�!��4�v,#6�ee�X��7Y��� l��nb���`Eb�w�C�r=6��S+<f�b��I �{0Z^o&�u^�Y[j� ĵƲA:V,���ȯl�a�+?��w�lW��~*ub9*�l�K $d �qr���<�ݹ���Q�'���M[� �,���_%=�,$h���e����'jFT��$�;��J{dJ:c��jU� ��v^\r��G��Z<y��!@�z�5�-k�R���j�Tdyk"��02��<U&e��W9 ;���k^�,�ް�� x��J6�!#P�Nn�}��vD�(���[~W!�z�9�?=^K6 ���Ѵ ��Jٮ��$�)�W��3(��ʤk�I'5Ҷ�P���}Ň�-J�yD��2��0����ex�4���l����?%�L�F��!�X}��p�o�K�-&�<�d/����;c,�b�w���~�:����tm��w��X)��>Nb�� >8;_�N�v�1#�S\�ccW��<G��(����/7�sgrL� '�;[��<�����'���KԜX��� �|�H��iޮ7H�6�>��U����/�+����H^4�"?���,)�_ [0mRۮ�Y&�U��N��]-f���`���<*yn�Yޘ��+�jLXSdl�6�`2z� ,�(D]N������ZOgPLUK[�(�fdX@��^��Gܝy� ���t��e�����]B��v �D<����L,��tϿ:��e�`W_��_�i�1�Ɖ�[���y������W�E����\`g��H���|S1�e�<�ʿ�2���q�MF��[���:Z:=]�/��Fh4=��'��.N%i�I �t�b�;����L�n���'H_JN���Dϣg��vh�Ez=�LC�n8I�Ee�}�e����@6_�0�R�O�rq��hٞ�)��'���cP�.�2T�L$��w�9"�a�8�<��ٶ�0*C�TĜ7#�&'ȹ��V6�G��D*�2�f��۱;��F���f0���f�d^d��֎�9P�6����C�dL`���h���7��� } � ��3j>��ʪ�� o.:�_� ��q�5づ����Ϡ2R�&��Y��<��t߶4e{""�Ƅ��n̖��U W��%N��ޅBRcWH��鲺"ֺ���y)���`ڪ��ѹU<�е���.nd�I�K ��4_wU��l��3�B:C~Yuh��OD-�~�G�v{%M�-�� �"MRcC4�S�C7I0`xm�*=��2`l\�f3��A8IJ9�-S�6X;�4Ωjc8�Y[�$��i��|���"�-�"�+�$i|��^��Ʋ��Ie�k-\2�ğ�G=���~q�[����0��֏�ԜƟ�MiS�"虷�(�U��,X�ς���Q�$�Z��2��j@Z�tD��U����J�W�G���'V%6L�j����1Ό`���WWu8D�!����U@QI9�� g=(9a�b��G�3��uu����K�;X[ʃza�^#=�-}O�7.��݇�����.qs�;�C89S�WB*�0��/����Z��f�1��E��p��3��29��uq_�)����� ~S�w�-���-�M�;Ba,_��Yp����|6=�9��|�UԨ��ʞ�3��)X���f����|ks�իW�Wf���M�(����d� \Ln8ِڛs���D���H���l!O�ȵ bM�(�E%)y�>p7�T��7^rU�Mˋ3ڪ�T�Ņ����PL�1^��Zu�9k�+�:�>u6�<�\����知�k��"� ��/^`�@��Μ���.q�~��*��mϸ%��Ҕ�ut�w�l�fK���� �x�)�cB#q�C��F� Vz��۸Բ��,��[�����zQ�ժ�W0>꜉���щ�ҵ��I`�-��p��h!��E�$�Wd�H�x�0I��L@��4tC:hM�~��lO�Q�>��>�4t��sq�^vF�ؔTK��Y[�G���x�ok�@Pp�}��r��9lcc�%[؇�I[f<���.��M�����X�⮁ٴ��\B㿈-/�E��5�=�j {��.���7/�X�Tk �Jr"���F�n��S1��r�.r9�M+� ) 6���� ���,vd��q�|�{SC�`���c�-e��㨥"���yf�%�{�Ul��X�*�2�FD����4�m]U(�`�ɳ�ip ��A��X?'ߒdm��M�;V��J�v<$CL�bS��i*�}z�swd����}�\�E��Q� ����:Az���v��k�M�\���ʱ�,�N�-'y�<B�PY^�0õEtYƣEe��sЀ!��� d�\�4w#�6��JX�J2�T&��M�c ��(�eX��p���քy�#C��-�I�������܈�c�*�VQ�*���=����9��C�w�_?���@C7sy����$~�Ǘ�>�ey�����l��@ـB!��ݕ�D<��F�Q�����V����#����& �lSY�6��t���]$�&�K�j|.�-�5�ۈj���2s�>TX�����]����|�\�I��mzkv��v3xc�V�; �K��>+�Ί������x�n�Ho����B��w���'58#������$I=�"��2�����`Xd� Q4���5_���Rѥ�b�W�g�͚n�w���TB�c�y����pmj���g���>2+t��*�� P�G�m���~�?��i���yx*�gLa��z'Wy5v�\��#�˻��[)L/ܗ����x����7\�3|6��3-m�����$�+�a�x���g�(�b�N���K��`L_q�E��9���Q�T���/���ׄK?���dAoJ¬�����Ťai��#���˺ou�*a1���?�J�o�d���1-W��N�>�5A�^ʎ��( ���fw�}*#ĵ�]Ԉ�7"T��é�6��<��j���Mxg�ulŜ+tg�m����}�WrEh�N�wgྶ�7���f������,���ע����U5<ġ��[��Z�=��A\�Q��a0|���� W�[-����!U<�3J�I� o��ϰp ��"}���{����t��<���9���&�� �V���O�q4����C��)�a � "��g.�2����])��`.�������1�)�N.�@��[��aqq��͛yod�S�B���*����<�����9�&r�� ��.G#s�e>-mU��COl�A�E'�M%�i�����N�.�ґ�\�y���e����O,��ܠ�l�cQ�SIﳜX�j'4>�%��/b=��f���2��ɜu���S�2�T��w�����뜾�&�թq��_��ϭc�.]���Y���Ax}Ox]���J�.��t+ B�VEs���_p����&|N���^�����8F���5�7dL$G�}��~x����9�!�_�l��`lsRi9|������4�IΚ��4n�㕸+j2��^�;Wʪ�|�2rH��w��s������^l?tc.R-�%���C�kGoH¯�[���s�I��Q��9�Ȯ���|�6�MV}���E���:��^��52v��a��z���_0#�V��9�bM��BV>��t���p I�U�����������"kI�� \I���m���)����F�̓�g�aM�`�q����({<���or�e����߿��m��x�Wv����ͷ��)��"�:��&E�M�w! P���ʨEl]y����P!��2�6�w:�@�pqk� vΡ9�R��F ���Q53�$��oĨ���х���R#�E���sW���o�����=S2�O����xø��^A�|��3�p>�J�c��k�o���iL̪W f~�so�t �8fT�r���V�(qصP��3?�e��]�p</���y���yu{�go����|>~ �"�UtVUo�o���n+Os_#�n>;���,.���]Ē��|�ݼ,:�P�� ns�Y3j���D�B��o� xD�@y`���h���� o��A�g�m4��4���7�²h+�L��r̍�(.1���6��(?G{�p@�RF1֖�F>��u^6ƬH't?�ե�y�yal ��x� ��������0��J�.C�� Q�0�ERr��H�X?x �?�Ɠ�Xx�����;�����U��� �� ި�I�zC��=�4d3R�=;��� 1a�}��8��M��kRe�O�P�����Mw�����aLe����+Ѳ�� q|�� C B�s����w�� d&��M�m���X,���H�8�I�PD�G@M/d����m��%��-����XF*��V��v<������95��J�I�+��/������7Yi� �=�^SHIULpx �i�����u�����8����a�����% ���$��_c$�d�>���\E���@�=�O�25ڼf=�cO'��m�� �NwD:Y(�������Oz�i�%���t�k�u9(y���Jpe4N~��p��52r�V9�� �Nf� ��1�0����Qn��pC���ׄ�z@I8R�껩�T��i5�ƏL�Jb�/E�㓑�5�P��F?��'X5=�@�#���8�\5�$Q�>���&&I&Td��lo~��tePܗx�J�s�7EUk=�/�0t��~�#��$�U���W7��=::Kٚ��"!o��d�y�HF�e�◁B4�xF$\:��'�x��OE�ƻ�a�(�0j�Y�g?��ZCN����f@�I-V$�e�Vћ,��;VP��O(E}�/7�u��$5���Bi�M�樰f1�r�eE�b�<��qt3Z�=30ʟ��I�Q�k�3��y��7n�`�U��W'�`e���m�8^q{�G�,�>��Eh����4E�w�٥10 ����$\� �ڭ羴��!mS�:�nd���-�L������Mx|!�G��W(���:��j�Ѕ�Vu��O�u��'�n}Z���}�`w���_m?z�l�� {����z��Y 2�f`�L��tJn����!�=�����V�=)B��/y���W�D���U78<.k����hx�9���z.' ��+���8�(���%m�r�F��RX�_��\��� Wi ��/�%���89��GEYm�H�B{�~\�S��r_xo ��'vB��r ����n����IDE�� s�*=C9�#��#oҾ�F]���c�۶��h��R���*f��1<����E�h<MdE��sn�����<����|���?.�oWڔ?B/�y�TK��8��B9��x��*!<�^ln��N��&q{d�L��$��7QM�Whp9�0�G*ay�qf���$�"N-�C9��a �wZ?�y#�;�`���ZN�1qKTx�坼�t!�������ہb��iy��c�t�H�d]3Z,/@ʻ�cB ���A9����N8z�A0��`�FjMs���=2B�Ⱦ��y���'[��ve�$ol-Jżj�h������S�.��'G��.`dX�C���>�ȧ�E׃��0K�weܒ��e�=�v��s�X�R�Pm|O"�$��\�p�c`D ��1�r�}a]܁w�D�dZY6��5�$��3��+ ��L2Ea�k�t��h���X�?>��y.Dz�>�����Z����=�Qh���h�KR�R`qw�X�@�c ,% S ���B8��gA�Y9� ~u,c���j����灆��j��b���3��}'�)O:Ap`�۳ !�.!4��(�J�'�A�a�ѧ%�X��BєvZ�C,-�Q�v:'�Wnط�\���-w:�@:��� :qp// �k���#As4��H��e��^[%+�bB�0!c�/ OX\���d�������ʹ_._6{RO�$e��%�Q�"��ߧ��9���������B0N���D�� �3j1�s�AT��\��M�X��n���N��錴]x˓ϴ:���6��]�N��"0!���NԻ�Ŭ܂^&0Z�wQvO��+�2 �&��1%�<�c�c.�3�ƣS9c̦t��(���c���������hbz��ӈJMj�0��P�0�b�ݴ�51�m���_2��m�b y,���-�.1C�|��y�^&CDyٕx�Bs��0�cp��<!ˊ8�D.�8О��_Ѭf�1e%ɻ��N!�m��K�fw���nYfS횮�'�h277<[:��M#�L xC�^n=��y� P9~�A8]���������ʎ-`�X��.{zE����2J���� ���3���X"�$!�����jU9�2�'@�a��#Ol"�T����GI���l�ڵ� Ŵ���0�j[m|�QrX�Ǐ�M����Q`���3����䋛����Gȭ�!��svn���مK@(�(HQ���9)���3<T�J�AB5h\Ȭhvȝ��e`R����!��8�hf]�,�����b�#*���K�T�F��Ζ�� Q���뢡Hv����y@�,��v���J��Z�j:�Cʒ�Ǫ��2.�d%/K�[����*�� ��7Aք���C�����*W���D=�f��� vK�>,��;B3��F�f�3�}�XI�V!����7E��ҋ����ﻓ��/n�/Im҂Gd�8Md�n��K�bY+���W��얈7z��g0f�����C��g�)�#�LT3���V���iHgQP@�����N1�T�M<1s�3"h41Z`��������&��_�L��"�;�h����J:$�K +�LA��ʛR�iV�r9m8�f�� B�E�f"�� ��f�=�vnVy�u2��?o4�:>w��nzNWWE1,� �r��T��?�ɜ����H���,k�l��=�c�/Ӆ%��c�=���ҙTgU%V����+�e���m��`�F_��[��kH�Ƭ1"ߘ(��d���3s�M�}�t��>E��6�Ɏ�r�@S0�W�~�*i��d��V):�#�ۄ�2�c�������9����ɹ*%�Ήn� ��Pa����Uπ������%ߐ_� P�l��.�v�����L�=���#�Ql����.�&dp�W�n�Z-Ψ7?�l�֟��������(/h��Y��s�$�>�����a��K1�?����q���٦?�6�T��|;^� �*gw��h��VR��Q���7��r�]�m�#;��P���yg�c�FG,�~� ����1��q��م�6����Tcz�F�r3(֔�ϑ\P�H����sB��gj8��I��w�'7�5�r2N`X����"Tk�Բi����Y��ٌ�Y�o�e�tXG�s�S����:���p�ǴO�`�$S ��Q%�I���u�'m�r�����?.f!����B�=W�7� m����L���%�*$���X0j�p��'�Ȑ��6������F����zP�T�l�{��;����C��{Q��|S0��`��}��J7E���t�`:fG�G����X�!ʂ�!�F�Nx^�t0Y`�tC���T"W�FG#ɮ��[f� ��%{���PY+��h�8�0�f��ap���ur̍�6�ggg�xG=��U#�> m�vh���b�䡂_�h?X/v��bi$ߓ�$���A���1��S�Ƈ���W$��UI�U'V+y�������EC G �n�+�ܐkw8�]�?��Ga �����`!��0]n�N��]�b *�z_"(��Y�d����� � j��%�+�e������U�d� y�w#q2m�~��O���V�p��m����v���),1Lb0}� �^�,䰏-�΅㐫�� ��:Gn< �~!�wB�{5Nƪa�S� ��r������-�B(KU}+��V����=êc@ٝ��XޛM�3�`ͭj�X�ʉ�m�u �"~ڄ���BD)�^o^#nn2���oh ����×�g��w���k��K!ha��{&�M��MQ�R�9������M��뢸�!�8�����W�HyE>�2%O��q�����܄6����'������C}P��i���;�wc�Ի�AwE�<���<�t��T��Eʟ�2�D���?�d�s�g��=_`}ɛ{zˣ��0:�"0+`CłM[\�V䞭~���D�H�;��� _% ���lh���P� L�dz�3�!�!3��I@�~P@�2#5C�e:�5�vL9����J~+Z�l��*���pJ�>�_c��{���H˫P�xP5�s���Ya��6�F*i �K��L�\-8���J�0`��3y�w= ��D � ��q<J��7aq�Ј�e��\�>��'o��?���V�gŪh�tvs���u�7:�! 2}��M ��=��M�Ad���>��|�? (EE����b�г&�̽�v>�ZA�,�0B���m�%T���݄c}�2�?��Y T_��( �������]Q,�;,�U7� ����f �A����]F�Ys��͓�O�'s i��z4>��s�mU�,p�K�F���2�)L�`r�x�s�Ju�K��V%b�L���M�L�<������|�6��ȼ�n�NרS ���ދ�P�lWJ8g�cw hR~D�Qr��ע|�:c� �Žn���x�i�I��P2�[e2A��ٸ������p �k��5��inTgh��i��4��BBg8RB�.�y�]��&!�b��D^/�wD������5�T��=L�� �t��X̌Dõ�[PC�b�L=��_+�TL \����ȢtX� �[�br��0�}:�V��]/ �lg|�9�%�j�>�咊 V���i~�a1�Ȯ:AG�ȳ�h{�PS�z�x� �p9��1�eB��̉1��xT���܊ ��>��=�%i4 ]� �'�9�h�#��� E&�K�Xh�`�VDF�����+,4��_�bW{���4��5��ro&d�+8I��!`g�E@R�2a��{LJK\R�|��_�O�*����,2@��µ=�EWR(�f8~�����9����$�qSWQ�i~جH�I�G�C�,%���G?�%��\*�d`��f�e� ��5��Otч�1���bdgw0`1��0G���fܭ��q'&��֍����~�ey��Y5Z3���D��Վ(!=v[G�qkU���⋆��}�~-o����]��@�� �њ�v�3�#.� �1.��9�Q�sV�1�<'Un~����5���´j�Z嚷�'�f^ZfmeZsT[�ۂF�Q��Ώ��Ԕ�_ԋ*�`�?��M����8y6�#>v���F�|�n%�:+�[j����`�����|�r�[��fMu�A`uW�)��p��sG-�9�����}(�ژ�]ɭ��Bsz[ۋ��S��D^� �C��bj�]��e�����R�)��4����ь.�<B[1������h�e:W�t�G���D�*�J�F��O� t�V��!t���?��vE}F�Y�^!�� [1���wm'�nkKQ`i��J��� �K�zD��b".s{��9��.�����(��Ȗs9nk;�;{�ݓk�������u���Ĕ�hw)�F@�$�u��ͨ^m@wkF��nk��r�� @�Ȓ���s�N����ߛ$�:�{t�;R«�.���<�7���Vl~U�;9*�k���~5.ԖVN�U�\���Ĭ���5��K�>��zq��~�mTw_���n�c6�-��@3_�D�%?��'"�Qt�[c��a�\,��(��y;T�2�j�n�%�`��A�Y� |��r8�eF��֭����8g�E��o�R'�9�i�B�~9x<met��G�_2�htdrCT%�L�ԓ��)@1�rP� Z�O'��q�D�P��?"��� *+��I�j�q�$C������ � �p�n�Drm[�ڡ��,8�%V�y)��eй���c�<�&�����N��s@�MF,^���fw*���D9��ο�I��+L�/5������+����y!�B�����lAԱ ���t�`���$�:��=*�����{4>�]eL9����B���A��yM�1��D��W�'c(4��q��DzWc���o��R���+�#�퀗��v;����O��`D]�k��Z�He�k-�.:��y$|�3 �1��.����O�"�P؞�$"�Y��D:���;Ă����`J<�,rAN)"M�fR��(ܶ�S��k�^�~Z�����I8}�������mG��<��@K%�gdɊ�K���Hr��р$H"&u�����y�����(�I�UUwW��I�Nf#���]]]U]]]]]}4:�K�#��'l�G�!,R<Z�Ч�:���]�CH�|2��p��E�֦ O� �:����j�#����%>Z�����h��ճm���5��]m�|�,�ݑ�[l�!��2@�����B�oaYe��s�@>�TA8�� BN��0��Х, N��ӛON�v's�B[�;D����6�h��P�I����Qry:A���$�R��dB�M��sĎ�4�7�PG�[� L/zlQ�h~B�`K�������~q{k>ͮ�dW��P�,��~Qn�H�9�@���J��w���ů+ �p��x�r�f�@� PR�a����F�,���E�(lR�i�o��N�K}��] �A`�����I�b�2��c�r�@c��+�sɘ+E�u/�,�O���fҜP�& e�@PX a�}���!��.��{ҳ�I�b���kM9T��UǗ*+�TY�u� ��r'��� /,R4�k �V�S�����?��O���kCo�|����c��ݫ��9�H���7툐%"5�(�ǐ~����Go��/��s=�뉀�t���=��q�v�i{7���=A� ���"X�Xn/~J�0l�nڱOC?�Rr�</�� ��oϛɾPU�ಉ�C�Ȗ4�Al!N�(���j�&�bwU��P���r�D�&M�s��ɤ�WD��.�k/�Tf�f��Ӱ-1���)o)���t�a��n��1�r�Ɍ��� 9`f.V�T�� ��|"� �*u�QX�]�u�|�[S�>���8��Q��(1�phP9�GxFI�g���;\�⾼ĤXPW�,�^R�.d��t �H�(��a��*����{��}�IM�)�f���Lf MrI�V�`���h���q3��Q���XDjS�<��rV���C��4��K�鑇�fH�����"�|���f�SV>�R�z����(s�8xy��3He��5�C=)0=�{ء/ۛ�X��S�!vs|���O���I[� �E{6a�]��z���@9��蓼8ym^�X+M]�v��ٞ�˽D2��( /-��>W�.uc�Ϩ9!�Pn{��#]bqJ�!b��~Ug⤜�Y%�L��M؉�Am"��O$H�Z���n��[���\�ë6tbu�G9��0���\ް�\����qyJ�>_�� {d>Yf��fÆ������6<Bs�5ESQÜ��j������V])�ԅ���x�����ǰ�Dw�a6����0rV�$tp{��5�qݜ�!a�HNE@�.s��e��� �(���^@&�31�x���`M��lJX 2���P���d��U���T�G����Yt���s��bU-t�Ht�cp���/["�(�|�ȏ��ժ�WK���o�� O��a�4���QP�h)kV���y#�C�1��d o����bVas3�9�5�X�1����?@q�ҕ�Xv˩�� 0sZ S��K|��x<�2C)D��/CU��s�ob\F=��.%x@*˞�qh��|��)9��ǒ�ѭN����hl8� ��eE�|Ύٔf�茗��O�`al���*0n;Y�%(�ªr�Ju�/~s���<���� ��Qqޚ ە�TĊ���z:aw�78C�D�U`�#�D��};�@�p�:��W�@�f��.j�X�7���~���Ǜ�����15Z��|Z�\��+�L�|�)�Bt5�����6)!`R�<����� ~�gٴW=V�Ԍ�� ����ˈ��Z���ֲ� q"B����2k>з�� ���e����V��c76F ����Vir ����,oV� ,38*i{�<p8+�B�:��;��i�y��9��Hx&����N�-�h���C+ss�������f��$N%h��u@J̅� ѧ�iҫ/���\p����_�'}��}�Z$M�ˁ}i��i|��ݑ�V� X��}[��dG�6��mtAV�.<�v���r�U�0M]@�!�ꆚ�����P��~��*M!�I~iZW��eAjT�TNh���P�>C�庴b;A��#jT�e�D��K���6�hqw@�i"�Ѳ��]"�����`KY��I9�1]�`���uL��0�X��$��������@��;9<�asF�ct�CD�O�a�u����kX H��g�% ��c%2�j�1���A�_�ꍁ����G�#�BR��;������.��ϧ��J�mQ+��Ԏ=)�!�w(na���/���B��A~Nl��Ur�����k�����,9���D��1T�YBn�0 ᢍ��fĖ���xo��^�)�Ny�p1�u��ǧ������*ħ+TƵڕ�|�Be���0�P�k��� ��3�,��nbQX��_� �+�2�oqLz�w�s�� pVh%�L�[���+�k���� `� ф�ޭH�x2� zrp���!յR+?H�M�����x���.���\�HN_��'8�s8���7�z��xB���D��N% a�o�T�t���V���� �y8�������#�Ƀ�S�ƴ7������n���e*�L��ۻ��>c8eE{�a��#\��-�V*�����0��w{��ԜL���� II(�����!]�")��o�خ���_�#8/�n��O���������t��l� �[$dD���f��@(ƿ���3�:���=ba��ZTZJ��!�� ��̈ �)���D�Eڦ ��Y�rp�u`��)�Ø��7�� ]���Ne3Ĵ��91P�.lNF��!TW^u��4ß�=b��E]>F�� �D����߶Q:R�Q�q㷋��}L�P�s�Ɠ���k�(��lB�o�Zr$dI~�r�s�m��� �*��&��C)f�Ŭ- ����f[��X���� �Qq�n�?j ��xd���1ɠ����5Ok�h���4��ϙrL|��l��7�E��O�}�?�OY���&&T'\,��gl��ozT�yo� Rd�K����s��#'�K�G����j�|h����Z�pjڎ:�deU·(f�����(��7����u؊p�䯃PeH��� �G����� ��O(���~4��7l�d���T1w$�����~;@��d�]�^���Z:�|ء�pN���N]��C%xa���f��Y�EZ��L�%�xNOgeh��zO�{�ڪCA��Ç��ǡ�u)������kty�Q�w��"�%#E!!��|q��d � x;��,1x����+�Y�Y8��x]�f)�MH}6�4"|=��(N�9?M�Z��\e��Q!��.P�b'�� �[�u=��l�ܙb������y1KKZ��GS�:5�Os��]�Z6�s��m2OA�m�BOЕ 6tU�J�ay{�S(�E��!WĎ��!#kW�0 �b��ڰ�P����/��j��>��k����q+W� I��/�J[�M:�ss[֙��G;y@Ƥ�/�����J�ަv�� ���WH�q(�/\<�yB*��w�N�}J�ϦE��P�%d����%G���o��1ٌ�P��f��bY�px�aeX4+�=���5�8��3�|�:�nx�!�P^�)�w���=�E�g�1�F��3'��8$�@C�&4��Ч4>����B�>ʞ�_Ldl�E����G>�d�Ԋ�F���O�zV��y�-TR \4�ٸ;�`��츈7���W�������#��槷PW��H�����⓰���l�m����k���O_��~��jk��lo���,»!��t�}.��R��Vd��O�>+��d�h�rK�Q���s��5S�Ss&�N�s�{���si�?�gE����P�g�q�& 4�%禙��P%>�[z�A�{��SqD�;&aSV����tK�r�h(?��������D�� ��e휹�h8�;�Y�ָ��0z�!<�M��[A̅�m��D�WkBV뎎�ג���X���c|�2R��7��e��� �����T��J�� X[}���yn�zi�Dhz�](��-�][Q�2+�6�EH����0P�C{\_�g�#��_�؟@^'�_��v?���+@@Ĺ�C���-���B�a+B���j���[ K�X��5�P���!�Jx�O�vÎK�����o�_�y��B#F��Y1 g�,�z�X�RB�W�O� ݱ��خ�]�K�������q�QY��X%�����{a����N�[X�$�! ���RA��)6n�Oy\R�� 1��ö�/q*D���T7!�De)u��������0 �G� ��X�F��p�:W~��7W�"� ����"M-����H #�hd7���V �gY�*V�{��3�t28ۈ~/���8�E�o�Wf�z�� :!vN�[1�劘G��3�#m�f�γ2H�;:�Kܵ�;�Q�ʴ����B!���=�~N��G�/Ed����=x�N- R=�Zê�����{],�Y������ sM�b��ԋ��Y�f"r&Y�C����p8}��;]����#59�$��x�[�O�"��,���Kv"�.�U���>�p>9<� �^�Ak���&sH�DҢ��'�4^ڠh���em�c�7�a'�� m�����g^&����c�t��p�`��`�?$�Ib|ގ��G�R����X�v�Ge�t$�3��R(xʅ�:*JH�K��d�XH�^~}��'��&��J��w��A�+�2�p�����B�8��l�u�0>f�KMI�R�QSɋ>�����#�������_�|����6i '�8�`���:k�ԅ�">�!W;ϐm�C1W�+�h���3��a��ӳZ��KuL�a����T����w�OZ2_)L9| {Jg�D�>�Z�����ɴ�4�J�Z7C�oylc�A��N���� �'�g- �hv���v��%�dT,�Ah�2���ՆޢF<�E-]���"� o���P,�h�l,^����B�1:O����� �r1!�R���B�2���}� }�^q�ION�t� �Z(`@'�o`gÕ�����:%*�&��t�.���De�鐡\Z(��nf���� �$a9����3Za�X�Q�dGj�+�4�P��$��L! j0�>��V��rb����s����w�$j�����Y�je,n�SD�F�I�F �Z���)�;6�!00�@�����mDPm$���Y��C$���*� �lXrp�ϧ�nH��']����2����\;[�&"#"f#��P��m�2���=�ip2ؓ+ N��.p�`��(��^��AX;�O^��������I����@xl���| ԗϿZv��y�ɣ�u8�u*_���{ܢ黭��c�rc���ډ $�Kda�<�n�J8�w��Q4˗MF=%��F�7���<ő��zo����en| �^Q�N�=k��}&0F���-#!w3�nd9z �x�(�L�e�K�?���o7:[�'�'r �z������a��Y���M��{֩ ���bqX���T �t����Yo���e3�טVm#�2V,�Q��3j��m�OQ���?��鶕.ud�^Nj ����|2�)��;������:%EA>]�~y�^<�w��u��D}��/.%5qYi�{�YP��ݸ�A��̎��>�҄/�S��9jĐU��� ^�&Ū�K��~:�H�3}kv�FY�T��c�0���}pW�dgf�z���� {�&D�ּ�1,��<!��¦+���o�Ң����x&�,���N�m\w�������ј;����Ɯ��'��7偣�'��[��"�s`�6���*�h���5��+�0��x�������1��(�����ٙX�!C��#y���;�{��iل��q�yYZ��j�x8�VZЈ:����4b�^Ҍ �E]���*Asj�����m��}�ޥl�%��8�ΰ�?��d ���=�j��,��v[(/���*ak�SO���ZCW��]a�Ǿ�����8m}Ø��!����!'�4���dT�?q��/�~6�������LIa��v8�X �2� PO"/&E��l&�NF0Y�W���� �ٚo!�7ZM3��2 ˆ7C`��[�^�P�H���l����=g���l���dƙ�4вvf�G!l���S7@� ^.k��;��o�c���( �lNi�]V/p�TZ�㠍o4�����-��H~E�Ѩ�:Q��Wf��a<4�ԊT��,j��.:t#����PGGq�e�u�͐�8�i^Pl%(W�O�x���J��C���G���^����+3@mM_�މ�N��Q_O�b=�X-�PMS�O�IS ������Rc ��R/��J,��v�,}��/||��D�o�p�ͤ>-��\CK\�-L�X��"( U�,��G�6�N�ƝC$p v��C<�dC�p<���e\8�V�P����'���5�A�t�!C����1o�;~�=!:G�̜�Hp ��C2�ߜ,blt28l3�B��l�WN���?�0��R��`V�fC�6OQyBL2j�]��J�kQ]W���@�u�QW��r��BƈBԃ���/A�����Y�IL�`L�UP|\o���!���Y�9��#�i��CTɚ��J9:�l���j?̏�'���${S �p���~{�ي�E��[/�,(vٳƢ'��)D������{z����5*�6�d\�����S��N�i�v���p:E:�7�1�FY�� 7Z�j4�n����:dtx�b�x0٨��~X�.��9����ӑ�?��D��S�,��vE.��w�0:����Ȩ~�Jb���Y��mm�1_%6�b�6��g}e���zHv:V��|X��r|�roF �>�H��Rqq(�e�/l�t�b�ܳz�ҿ�Q�l�u[3 e鮶�3=�h5�fz�N�yG���� \> �g#3j|�:��ܓ��Dx��1��a�����?�Al��WrC�^�(�Ri:1E����#g�T�"B�3����Dj}SZ�i����o�#O����2E8�}0E��`�n�k<��{ �rk��^m� �2�p�'~���Й=�tc�&R�,�{r��$3w���JsQ����rF3��'��#(N�SU�� �Zv�=�ơw�/�l��L�����<}�;XO"Y#x�_��+� �m�$w�oK2X=[�U�N�SR��S?2�(��p3����t ����"�0���e��Lɧ��$�9ף�)2R�k���4l\�myc�Y^�#�9(G0��Vo�s�C�)-{*���]��C�j0��<��O���`��f�O�6��Pa8*̔�6��Q����eC�!d�}K>�0O �"Z�R_=�m���e`�r�!�ssR�ڐ���c_Y���a"Ȫ�Y���\α�!K���X��$�_�($�(�Iu+��H��qtY��f�`be��"���v �#�0ßS�r-���s+�4`S��h:���KܙL�j�/V!�T��3Te��]����!�XF�k�`����o^���ǯ���ų��{�D�0D��Z"hZ]$�����x�mY@H������^�O���HT���a��������<�슻W�c�C��m��~6F<g��bl�� �b����x�ٴ`:T�%9�-�V]����)J��v�~�ѭ��J�i3��� I6���Ēqs��X�`6}_$�Q4�F ��L�.:����˖q�V��4ܹr%�k5X__AVy:�\��<�/P�u��@K��F���� ��І�he�d#���P^�RI��T���h����+��>}PB�lh���{ϳ � ��by ��V��N�&2D}Z� E��5p�MYJ��ps��!Ԯ&f j��D�� =�8����P����8� �|Yb�ĥ��L�P-�6�c���+��SՊ�*��N_Tg�7M*i.}x1}Z����P �WW% ��^�FV3q~j���E͍R �?��D�I�˓��,�i��h��!���e{�B��$��~!)qe�|fz �7��/������,0�K~}O,�l��? x�9��OvPK"�|}41��v@0\�/s�x��� p)�≥S8MCT�� �Ŝ�qi�` �@;�����w F()�sT�������^������X 0��e@r �6b�;��2���m�3* |j� R��3�$]���A�A����E�@���o��a�T[O5� �^Bf���܌��}G$6m�̗|�e��ޒ���&���*&�E^�{ښ/}/��m'w|��b�r� $f{��J.�'�� ��Ҷ� H�?��'��@��Dz �@�;v*SMj(g��5qX3'+Жs���_�u�b2��O+�jv�:P�h��m��G�n�.k�^f�:��\n3��sd���[��LV.a�B�+xy;� Ju^�#����ҬMl�'`�h�<UG)I�ie1"+�b1�c�vu!f�gB�i��Ȅ�8�fpv�����d0�����;qN�'�D���k��u�T#]�rH%� N��&B���z���li8 ,��Ǘ���m�D�Ò�9��|g�=|ׁtr*Ƙj�4.p��6�k��d�OZl��6"��2�B}d�=���0�ӆ$�$p2�^q��=�#�����]yܒ��H�pqN�J��%6��� ,�\�pp���t�U�?|��A�+��"Cx�m�'IÏ��p��K��f����(1���-�\����(��$�� �� ��d*�F��l`>�NNq����e�t�a�a����m��{�kiP�s2�Gw�;I\�a���:|[Բ�``�ؓ��w��.� y�9�� ��6�#��'>Ȗ��a�ǧ{{���Uw��f(~�"CL��i-�y2��`w\�jԺ���Hev���+5�"s�ˉ�~c��J��M�kB����P&Q�JG��*��2��������ь�ds��Z�S�Rv�3d��z^U*�u4WYu.��Sd5,eHjQ�-�J� ������Dn6�9����ӻM��LL���OC�$�l�RC�'��:�z��c�L��R�;v�=2�t9�So�,Z����CaP�H'r�tG�|����5Ǣ�?�ǡ�TG����}8w�{]XIn������c�2{Q֍���\�����[��%ЦK�Őd�"�oop�jS�)'�U�Zo����)��yޔs�������6�A�X��$�e�#Tnt<�Z�#z��-һJ����c�31X�%W'� �D)<�x�j[/���AY?J�I�l�X��Fc�0��1.0,��AG��p`v�AGvo�WG�PN4�}�q<��GMC�R�y�Z�DX����t,�U�%.ap�����},�,��b�?�/h{F�F���$2^����f5�ΐ������hs�l��8�rgM !��ߌf���5���/ޕ�S��ĬBa�2�*sW��l�0�OV0�0 �"��U�H�*���+J��E�wgH�(V�D���.J��)��.���g'�f�L�B��VV �SQ ~<k�3��:Zِ�fuuB@I��lA�E�Q[$�Z��:#�XN�Q������@&G)W,G}�\�sΡ8dv����wL�N`�r��;�SN���{� mn��G��Q�d��B@Xg��j��6/Y㜡7OàH�*&8���K�:�#�l��b�14�F�gาƖ@⮄��i�a��6�Cg��t~�����W��#������!b�gXh��=�#��hY�0:#�R�(�� ��0-��O[^s� `-^?L�э�F�da�C�08�@�ՉI`~d��<���,�:o����X�Ѝϩ+�k4-��i6�>�e�[9.˃EaR@�r�_#y�q�~X��d��+��dG|�d��y���JI�`�����3cS��#�3��2��U�eZ&��m��#����2��#�~��T\���!��^���� ν��<��l4��e�q" �H��H�א�� ��;I�z��S���[��&o����?�BV����\�n�_P"��jZ�*]��%�A��iǝuuo�������"NK\`ʌ@7�f��{�P�t�*�ڭ�,�-D�F!s�1q��cP8�y�����29Ιzŷ�������A�!숫f�m�J�]Z�n0E��9�t� &�D����&݆��e��Q��m� q�z�~�>n�Q?A�vġ�|$�ג"A����Ў�V�M��&�*X�pD��N�X��0��rȉŅt�r�ү��|WM�t��Y�?F�ְ�C$sx�8ЇR��N���d�k�8��w��05N~'��ᤥI�x��&z �6���hO�7x��(��0YTg���F��D�����KXi�"`�gk;����o �&������p�%_D�X�Q|� �5���8��C̱t(�!��~j(wV����U����z}S�VlA����\F�i�{d�h�[ޓNnξ���$�����ו�F��03��ɾ����Z�kV�-�\7�d��`�������y #O/�1Ǹ�6�H'o�{�A��_r=A\������^���N�h�" S�s�g���s�ǣ�Y�ب�V p�Ԛ&��u��Ӧ��KW� ���Gt��8��4�g� f"Zԉ%擨�\�$�6yF�,cA�{���M?��4D����kI�5nF����T/M)"RP�8��2�9�C��(�ad��l>i�PfJe-jWQ3'��&�,k1F�4M��_�@�����"M_���/��5����,"�;W/�_��3���?C�lۀG��|����{_~��{<�����~����p��l��V_v�Z�뮫a ���;��oE�,�n�v��T�[Qk�U���.i��&�噧&"��}�\�x�´:LL��Z�CHE u��HK��7I$�Dgm�=K��xY���HX�xJ�K��k^��OpҘ�n�3�9H��f ҃㸼uUk�'㧼d���!K��~�n(�@�<M���{�k�r9A&(~"�2��hl�$5�]K�2x�����Ia��-��TmjAc!i?w~7��c����B�E��\RP�~A �GO�9H+ID�ѷ��i�L���rz2\{��sz;4|7�k��&/4�8U��i�w<����6M�T�#��a^Ga�j5��q �L"��%��~�K�V������33ȃ��*����c�Rx[ւB��^�^�uԉ�*���G����t�d1�k}����d�}�@��U�b�J�H�8��K�p!���9Ymn$=|��|�6H;�a��D�7�l2�y��#� �S�]E Û��G ���3g4Fê��!�S㰻"���q��\q��@NIatq�H��������[�KD�H˚25��(Rb4K͵xӒA�?�A�� -ɌY���նJC�S��6��)f�U��� �6��k�?����a�{�,��Uw��J��4�#A�{:N� �n*����g[�����Ejc���H� d.��}2 M�ݘ��q�Ǭ�1���� o��5h�R��ܤ�shs���V�sR08��� �Mtl�h�[��I��pKVQ��Q#Tb��I0���� ���a�'����M���ieV㇊C� uL��0/ZV�]5�Ri�ʯ���[�g���W=�XL�+���'�L��q���rֹB��Ў���V�m[-�5�q~��u"�B6a����"��&��A�6d�c��m3�]7c��TX�mj�,�Sgs���_p���#��" � H��^�᥀���Mq� ��Ȝ�ż`Y��r�W��T_w��gN�Y[OWAC�l�O�M�w�-�i��$L�; �e~]�ժ�����Bhi�Y�oM]��K�x[ɟ\��`��5���,�=�Hv�ǫͣ�z����!t��b1:���TtդYQ��~\��x�¤��� m:��H�&!L�����gG}��.p� ���V2����w�2OП��J�G8�<-���x�\euiE���,@�!��z펼x�]�ڬ�M��E<��,o�Hh.U�>�*q�iznں��Щ�*De룂��\ڼ?@�I��E\ڎ�"?~)�O,�>�?Oq�&���Nbr+���$ �,r�#��: ,�!vl��`��d6cn��* �pڊm�L���[��~.�h&��Q]���b�8{g5���Aݛ ^�6�j"�I��T��q)�f�@ϽU����%L�~�t���D�:�<������+�!���O-K�����gk�MN�n�:��Sr@:�qõ�`7���\o5*s��d��� }= Q�,�;t�C�0Ψ�%9���,W�Mg�'�e�WO� �1� 0tp�qa]"�F5��Zaa��@exz#l�n��������@���ŷHm�o�wr���<6g 83|au��t�n���(QB�&�.�R�G�.,Q/��er��Nq�b�:�Q����YF�S��Qާ ��5�9��OEԒ�$��~�#<F��\A 2��@"������q?��q����4��t,�P�u��{�1�ozv�g��d�e �;�����?:z�(@�^)!Yo��T;��`�*Cf#ͫ^�S�VU2f����j*&)�6�_�O5L՚����;W.��D�냓·��I�+���ဋi��*q�pRh�Rt���L��1{*rc��zcU�2��`pv<�w4���)1?���nS��C�$�$�������l�m����k���O_��~��jk���Op?�|r���\�ܹ������o߾��o���խ������a��U$T�>��i��|@i� !���?ӣ��ʤ�1��Z6*M�#�W�&e�$��+��/ ���G�ݢmVl��Z6���%��Z!�A����p]�sab�^6+�W�����H �6Ji�h�������/�8� A���L:M`��IJ~�`%d�FV�h����9U��t �Xjy����;Ď����v�`a��-��w#��B�S��Ev�@��@d�LPH���^o�$��E�l`љ��%�u� �[�ܬ�$�?R�4em��Xi�^�i&�!����%���T��rÆ�Zo�B/�~��ˇ���r!5�恦��g)Z�1 �E]r���1�q�+&it(6���2M��("����j``c�e��Tn��\vLH����g��X煞�Yo�b�s�Q�5u�!��m,�Mb�t|�KwK�)��*ʀ�i����;�=O�R�l����w��fΎ��,�q0V����/c��$@rQY���l3�C�չ9�ױ1\�@O3�z�OdC"�����{�n7�r*T�X���[�+���ڊ�b{��<��"?��c�D���Cp��*C���zc+�=K��kҡSi�@ʕ�ޘ��!^X)r)�&)/�i��b ����䤙 ���L�K4sZH֕L���U�]�g'�'��C�L�q���Q�) ����t�_^!D]j6�e�\�> ���s��:�)�/��s��ҫO\V���'g#I���g�BGuPҾﯞ#�oU��F��|8E"�?�?��<�S=W�oX�&C�m�Ni��]ӓ���X��u�ΉΉFH��`�`? ��`�t���/��$�iO�`w�_ ��PA��#��ҤUw��b%��gƵ�'�o����S�R�� 4�� �c�+��DU����>����c4>}�ɣ����8H-HU�_��_�{� ^���c��P� 3O`*���G/�|x��ւϟ���/����SG\��9�l�6�cW�k&O�&?9��S�� V���� 75)}z��#�x�Ո�M$!K���TϺhh�&�jjvo��Q@"���5ި%��j��ѷ���$y_R��^=a�`f{VmQ�hh�xٜe��>��ܭ���=�P&4rɤ�HrS6��oގy�*�}Oj�TEo�EwЬ�� 4�b��A77��6{r����Gý�w�$zId���R�V��(d����ۧG&-�eGE��5��� NF8�u�;C"#�)MGTA���d<��\{<� �z���_h��]���@��Kw��m�� i�<_�Y�0�����t:P�^/���� 9�������,�n�"� k7������j O"��H�1 �"�ldZ� ��4-��+q��w��k�"�E/Φ�Z�-+� ��=A��"TԱ� ���Q��G{�h���h�������>#�5���}!��-_q�?�ҹ��W������)wl*����,#W=֡��C6ȤF��ASH����Y����LU�V#Z��2G�$�˲3Q�2C��F� ,u04?T�h�:xu&6)Q{状I�û�ъ��F�$+��i�9B��oR��)�s�%mA2�ä��e�s,����By�Z�[�sE�3ٮ���t/!��ΣDŽǑ ��.���-,k��N�5[��nQ��<�f��-� R��-��ơ[�T����r�H���a�8z�yϧ��Yج�Cn��*R�"��[U!n��E}O&�E�� /�o�C��r֤܀ �ّ�1b�7��Q+zۜ�A8����+O�;o ~����(,e�g��M9<���|�_t$M�EBB�b�"��[4�Z�A�.�1^�t�bS��ˊS2�:���� .��|������7��2)~��ݎ��^�V��k��^h.5eF�t#�V�Ъ��"|u��Uآ��*����#D��$[qNm�!�2��Z�}���)�3��[��d!���Ɉ�Pq*�ԓ��z�D���P;O�� �̏ŕ=�v]�(� ![9�5���� w�����lKs����r������5��.�"� M[+-�U,����������VsyԪ��S�s��Cy�r���H�<����^��B�N^,\�.��n'����u�Ik�eq.+xֵL@��7�3Xt���?}�ks1AZ���Z�����闯Q.Ĕݏ͒�bp�c�U��ݺ4V��Os��H���J@��`�c�k�}�$�f��=.�r�<b���Z<k�T��1�yx<%`��� �!g�K������t�"w�-��v��7�㶏�ѼU�LI�Z)�bޡ��+� � b7�mmw��\�:����!��R�o��%�J�F������!*^H�:3O|t/pg)>a���O�fH�PJ�AEE�m:��'~����s�wo�?�'��M~7Y�/��]����k*�u��:^�@�6�;���'[';��g�m� h�:b�d6�M��t@�{6��~��(mnT�5�7��K�l�9Gg����7�\a;��nu^u�� W���A��-V�H���+P�\��^6��%��&���^�� ���P�8������p�(Q �T��IM�D磎5ܯ�4Z��)��E�C�? /�5�,hG�nu�拓uNhuò?�Ԭܔvy/��Z�!�"��~2��W�cL�{����ֹ�����9��P���<�.fv!��i�_�>�0e��ov��8+�l_�ߕ�m��J��%���'K�T�bc�Dds%�]D�� ȥ�*�����K�3{���"��֡r�x��.�P�d����̅�nX�W8=�L��{�b��/��q�����7 ��U��&7��ZDߝc<���Ł^�h �� p߆y�]��,�� �}�@*��f����y��҈ =�]4K��N�fD�0��L�t:8�uH�@�J����VwS,l�SUvȾ���$�j�.�\��6�F(h ��w��+�Ҏ g�����������h~Eb�rU���Ƕk����|)y���=�E^8)aэ-E}�>W(҅������D[�WP�/�(���c� ՛?o���ʼno})�~9�S��Z�L�L�t������U-I�!ݠ����l��e�\"ʨ�,�%^�8����]L�x�F��K��j���*�[� f^&��� W�>m'f�ͿZV�3����P���$Q� (t��-v�x��*���c��!&'8<iF�L�p�6�}���VY�q#K�y^�~ ��Ire �j�����LY92�ټ���!3i��<]f��/�0@ش�Z�i� �P�M��ܹ��7a���P�N��fP�rKd`�wh��!��w{Ǔ�p�M��^a�Kwq�:�Ԏ.��^����\�*z �ٮ�MV' �u#�b�k=��_-���:@�3-+�s���D����d��L#�џ��z��,O�V�v�Q���+K�V���p h��#�y�Ŕ��!�&��,���i6�oC#_���*_՝c>�p/� �� �e��[o�ǗL��zħB��ٌ72}4����H'q�2�rD��G��uc �����(�RGd�y���ӣ�`N^U$�aYJ�I���hQ�w*��+G�����)�� �B\�4�a��#`�����^�z��/�<�2=�2G�Cd�K�#p/�8km��2I�t��C���!��D�J$[�e�%3m��E�J\�L+-`�^)�:���� �.J��J�Log'Y�����½�']c�\;K��z���w���� W^����*T�Yh��=]�q7���́s�6=�jWgn���[���xK$C ��|�o�����3�V�8�f��.�Hº�e���G>��d�i�\�S���`���@1�����;��a��O����+_WT��A"����V�L�:���lr'Z�9��"��JǾ$��-\,Ti�����x�2/�&��qt kQ���h�jX 0)QZ"{.!�ȏ�����f�s��."��n��J�D᧺�`����N3�t��L�í���Y�gX�إ��cCfD��2�,�Ih�#�N����<E��p�pO���]ؔ;���в=�)�$��ٛ�nJgu��p+5|o�D�/��xuxK����n ����λ�MU�Dڈm�.UQ햞���n9�@g�U�$�@X6�YY��ͦ�������@�����\$���<� Hwx�2&K��r�҉c6EbC֠0�`�!� h[«�%]CX�V!z� �x��m�.�����-��`�[�'��J�d�� aj�"���K�T��tb�� ��-���� 4�l����jCW֮�kSkuEr��}��9߮NC�q䲈�WJ�r���_#�Y�\��R�/�^����h�H�K���l�"����R�/�Z�1nm�cQ����p�E���J�%�˒��!pR��_����a]F^z�¢�u�����;^u;�� ��0"AA^@���hߐ��#?��� �"ƵY1P=�|��Nq�B�ؚ�M�HBl��'�،ݟ,�6ҋ ��'C�. (���3�3���e�B��3�UWzQ��6q�e�hx|zzb ���3D�ay^!F��AӋ~�?��a���>�2���l��3��x���&�j������7�[C������7ݝ��98��v� �M�*�v�����b��5L\��ק�4�2�i'��w�}){@3���`��ڻ<m2��uS��jY�X�@Z�!q���k(�n��g��Ү�,9�rp��m2m�� 8,n�� uS�j�)�B��#�n��?~�� �2s��HR�����A�.��7���$���e�2!��7��?��ݵ����>(�{���P ����� ^^���%D�0�,��nW �K`����J����K�vE+�Ü��T^�P=��\�N�w�d��2������w++�\��i����#}��u�o��!���Z"��^�}�נ��U��+x�/l�k��o~��.u�\>6���b�>ײ�R�l7ż]w�S�lL�?2���u�5.BA�&X�q�^��l����*D���'o�&�W<ůo�(����_:Y�%�6�������+ �����C6��\�I��8,]�/l����� Z�Y�]L+J���z���*�U�:Y�+�/o+X��#ݿ�N�&k&����kV[{}��;Aڞ�K%}�?;�c���!O��K{�����.7�R�����e+P���� ���R)�K?1��DZ^m��(�.a���'ڬadȂ�g����S�ώܐ������ X��ѕ�j\]���:�D�J�!�ͥ�[i��|��w�F�k�o�Ȕ�a"�ә���T�W��+�2���"F~�!��:�J�X�v,�~C��0�~�*�v����"8\cI�AiI�<���2:��C�Ղ|m��X�X��I=��v��+@���o�lpQ"�+�^�hG��q�M�ډ��2���`��U�,I����h|:Y�#���6�}��&S��/���I�h��h��T�)<Ƌ���)d��[ۤY&����:�P�5LH{�9L�E�aF�����^~H�r������I��_��l8}�Cg;��sm�rz��}�&� �C��8=�ڷ�F�J�˻�E��-Ή6���.i6��A�b2w�c�G��X��)�et�%?{6�!�s�w0H�mF-����U����W ���s����s�٬ն��תMc��n�9g� �!�����,\pN�!=X�tǹ�H "��ʘd����H�&{X�ՎO�@mXJy�����ަ��t�V��z��KO{I��Q��ʁcÍ����w��_u_]ٱ"�a��o*�jv��\*� ��FI-XP�i[��}�� 5�dM�4�M��؋;u5��o�M� Q��|@<�Ep�yg����:�D0�a�%�f�j�sy��:�=q�F�o�gH�v� c���Ql6vo&���d��yJ�y�� 9���ܐ[�*�k�-K����� SCʕ��O��'Q�,ާ����i�!]����5^|��@U1TB~�@YЕGB���e��M�_�t-���6T�х�!#V����#E���h�����h~�cJ�駓a��Eh��I<�Yг��dUWWw��-M%p�|�]d�h�y���:&*&���vyѯW ���ܘT�7�h$��d�B��0�V�ւ!�P�'�q�&�[�x��{9{���A�RQ�mFU�������;�[[�����3K�z� [\�|T�c�~��b/�����_?|��7�5����1H��#�-{#R2�����,iRG��<FU)�� �#\��ۖW[菩��8���#4;��������;��]�Ui��D� 0�T�<�̾98@������˧_����u�����)�'R�:z�Iz4�<M��SX���c/ �]I(�q_��V��ap<�X1�:b�|�ϻ[�w2s8�:�ڐth�J�5����NZւ VK��x6,0YG#����,G�䄐6h�w��t0?�� Gǽ�V�]g+ � .�o�X��Z���z7G��N���i8U �{4�xl4�S&c���ڃxd����S�����3%QK|�U�T��m��c�\�Dk)�W�qT�%�I>:ӎCg ����v�J�C�B�c >WQNO��j��O��b�C�T5��rʦ��������}�{�7R�wrx������1��ɸ���'V��\i8i�9`ڷ���շ�тs�:c�'Zf�w��25��,w6������pJs�6*��N� ��<�|.9p��R/���ܳV*Z�}���c��Z�'E���1��_�M���8��[]jM`㑋�G�����h��\Ax;�˫I�'�T�h��5��m��C��Ս���D��c(��D)�_�oe�=N3� �G8 �g��*S�T \~�ྖ������4̜ ��؏Z�c%*��wDS��i�F�[jY�u4cc���H��vK��d��!���g��@��ў@u�"���<���}��^Hp� �m���}�^��ޜL�:�� 1q��@�X_Ȣc5�d��uU���ܘ��Q��6p�fʐ �!��� �W/����}y��h�]D���� f�J�[��0�L���D�(���o۠X�c[���F�ͷZ�K�)v����e�3é���Hվ��n7�:*�<��E�N`��N���=D�ܒS��r���b�!�m^�+q�w;��\;~�9�y��l>���:�!���P�24���H<��R sg��*%��h(Ȑh��o�FR���:��ș`��u���zZ'~j5��5�$�zc��������Z+AC^zDO�I9����0�\V�,ȞW߇����`KHXwer� �����_t�6h�enw��4�y���+��s?X8�ܙ��:���QܸUP�Y�R�(Ye�fp�ԓd��x�2 ���c����fͱ��}���0��a7��D�u�љ:���4�`s#�_���n{'sg$vN+�L�{N�,$cCO�F�=bl��\^�6�"!��Z ��J"�J�Q��r��ŝk? r{$��)����!��/�a�� �h�{��ݏ�7�GЋ2W%�E1�K{Iix���6�Bj�j%H�R���x�lֳ�S�J�*8�5f�}� �'���G�?\��Z�T$j&&:4��cu,Q�g��o�x��?U�*�n&�K]�g��p8F����LR�s�MVsu�N��g�|&}>+U��\tb��I�+�]��3�\ {R�cf�u��ߒ��V5���$9�O�P,��>ow���*۱��'z��Ԋ�Sv��'��_��wm4�aE�W��c�x����Y�C�ŝlj8�כ�w#���ǃ��&���J*/�_]�� |�����&�d���ٖʵΕ�[R��+� ѽ=��� ��&�M.��w�2ƚ�X�%Ξ�#p���]�ڕN�F��U�?*EΦ̂�6X-�t"F� $"�Ε��������T�Z�}�l�o�c9�)� w�_*��7b�"�օ,�v'�*�2k��a+�0���sۜ�N��7�÷���X��IV� Hr��O�_�~'.�\�X���EeLB���X� �x�QƄ���X1%�L�FF�&��f2�5�}�U��S����W��C�(g�썌<u!~z0�p���Jv��+H;�_]�a� ��_�U�������3(�xk�ݯ�ߘ� �5���z��G�SPY`�>(-80 4�>i����)��"�E�ă�>@I���6-�o�ԃ��ſ�s%"߄�����&ŵxX��9"h����d>����?�����?�V}c��Lj�E�B��Ƣ?�U�t�* ��p�T���G�O���2�ic{��OsQ7�Q���[�;� �ï_>|�a~�ᕋvE�7����}Ĉ���� Go��X�0�:��⢓ua��ő e���\���/łv4���!��o/�����c�_�N���I��j�ix$�%@�`V�ps��!s�� �����;��Y�ف�{�x8�u��fl��Y(ݧ�N�f�/�A��Z�����l:9͆F�ET�p��2�B"Q&tO!�����5͈H�p�h�q��â8^d ZWǾ �,6�؈uQJTN,��y����v���x��(f�Ld4o��fΝ�"1���+��eE6�,�!J #��6$r���*d� ��օ�b<�V���Y��%����{���wQ��?� R�G���Z��e@�X��A��B�2(12��kX����+�G������������tKM)8}���P�UvR�z2��l���7��U��YM�M<�Q0K�-�`�ݾ��2���9�*T25̺��p�JDsL����A��L�,�*��K)��ޫ��Qð�,�-��Ӱ&�Ġ��M�S��E�c�����fj���'���Π3ZUK���&����șK~�P٤�b��rm�AHu�̸���d#WgP>́(t�� ����� �'g{Gmċ��&��Mf��&��š0�m�g SV��m�(�+r8��Y��G��6�|����y7�_1\�����E�X~����br���t���F�:AL��(�ӧXam" /ќ�]`���`��M�����J�2~�V�����:,>��[��텩�4����cj���d�-[w��� v|@6�U!�M���j uJX��3�F�G��r=��v8��>kp))� �Dkwdr�<�k�ʨ��b�Z"�l��f"u����q�Az���c�px�.o��t�UCmݖk�V�s��iNpG,�16���4�w�UL��SN,[���m�^"!(��\R$|,"{�%��,u�����^��AqUf�7��э ��P��>&{�<�/ ���45�}�f�����`/a�Ŧ��ă����� reaF��B��>�\S`�z�'V����."��h�h��b����E�5�HW��9�.�|ܞ/\���i�Iw�Qe�zY�h����C>�x����V��5[�RJ�Q���^��K� ��za�zs4{xr:����NN7��%Sf�A����D\�`��ħoO �;[ŭ�Q�ie��Z�MQ�e��"��ES^6j��8�F�S��D2�OH���OO3q{`'w�\y�KK����_�r�;;�<��v�E��t�f�� ق��1�ѭiX���GkwT��Z7D����@�b��[Y�Vr=Aj�(?3N>ms��99`=S��t�j�Z���� 7�t9&:��a` �o�n��P�8TeMU%�M��|�˦�B�Z5E�SCbr�O��i�6.ydM�ט��**c���?ǃ��ё����M�8�P�d�:�w���>~��+�f{8������/$�����3GO�`�m>���/�!V�a�v5�AE�撯�XUl1m�-�=�Q���㏐}�y�"��7�W��3_6�v�'p����f��[l��<�D��5�D)b�`���- �����j�U@��Y�w�Co�+6�2�� o*PCm�n��z5�E�21\���&�y">���&n�_a֥�_zT�}�_��K� K�H� ��]*aB��N�F'g'҇G��!��������C>q�����U�miE��y�_�s�?$�t8ا*'hh9T��N'o�u���7���Q���6p�N��ɦ��ʉ�n�O��Yw��v�[���嚤�r{v28>��l�P�� ��) �[����}q� ' �|ָHl�n�K�ͦ��ޤ~��5o�Y�Mw��W$�T�RK��3�4D�*�y#�B�#rǙ��,����a2�;W�S������\�[�^霜�G��(�UBS ��9�y���?x��h�;Wh�cм�58�O>�����z+G�t@�͓�͛�� ��� _QRs�3 $*���"-�,�]Fx��Fh�o ̟KlʓdC�yo�B�g��t����D���$P�m�S�t�{/����9j�ł$|O���b_�C��r'"��{8�b���v2�~�t��������JvgL��F�= j�Γ���Q�����H(}֔�T���m�BV� �Y���\]ݚ���V$ZR�"ă�S蔸�֒��_�%�����}�4�.����xZ],�H�j�b������Ҹj�:�[`�ө/6�ޜc�\ �H��D�E�ERL �r5.K y��7 �I{�0�ѥ@`���>� 8�Nm�'� �o�'���m�;B�!Ys04S�]M�1�H�����3��EFP9��p�mn鞫n�j!p��4rdO%���/�7#$����R�>�lѹ����i���?�6!v��[�ʻL�~R-�eH`�n^B����(��.i�b�#���+�P<�e<�f���|�Fa$:7a�7q����C4�qcȃ����GA���ٓ��DQ1-c� �@��)��xw:t��ׂs�9G��y�Y�'w�=Itt���]j�y���激;CS�Y(5\�kK,�P�����žI��c ��A��"�N�HȄ��x^t�L�~՟n����:껄�%�v��qM_�U�9W3I��܌q!B�9n�[�O�_��K�5��7@��7��d�|9�d`[�i��\�V��V�<��g_���uߩn���Ƅ=Y�)����t~zi����c�J1��ٰ[��+-�oٵ�g�����EC�~ӓ��S��T���Y�4 )�T��P2H@P�������O����ZK�U7�V&�`.�pt��*��� ����Ľ�ܵ�^Ɏ�*��`�~23����83�?�3e�H:��~��KM�5�n�����KBNkހ���K[��k����Z3���S�4�8c�X!��8�3��w[7(3��AohYL�q� �FM6Bd ��3�V��9oO�Y/W�#?�O/W��;L� ҋ���>�)Q ���ǟ �� �S�rP���8�;cD��F� bD '�IJ��iLWz����(1�����v�;��;:^s�b�+��@g�@�4�T1e��f��+��ǣ�rf�d��"��e�nb����FB��I|}W6a&���_ �����D���#��W)�=4����K��=�lz�#V���G�ך�]����� p/�ػj��>���.��*G7�W�8 .=��B���yp|6�o�{���� LNa"����1��l�0د�+D�a�/8��0B�� C�&��+�<6�q����|�Mr%�G�$� �+���&��Rty�Y��6��x?2�jr����$��E�q�ox�H� g�|C���s���c<�1��.�;��|p��뮣Nssut��d°������z�����;����L>z������χ��1��֟{wo1����W[��6��۷o_��4���;|��wC�����B���.����������7w·��_������z��͍7o���*�^\۸{u+����6��Q�&� ���Ί%�Äy@��w���w �ۃͿ������zs�Ӎ���a���@���,[{ӛ���I��\+�x�l�`�-�N�6z<J=����@w���)8�i�����;w��=C�J�����}�p���%c���ߏ�v7��?�F'���/;���E���_������ ��ڼ�o^����k�G���H]۸��+IoT�)U�}w���F������߿��7��6[pZ�Ʊ&��o�_m���j�n�Wx�}��|hRh�j�����d��O�i�>+0�"H=�s�Z��'?����r�y�_�z���'�6��yl�^���*�*q��&�T�{UD5�.������`-����E�4惫"|Dy�~�+�R���9�����Cdˀ���f����)�H��o���M� �� ��tKT�Cj��V ��`~���<�ptx4��_�OSw ����� ��P�c�\�)!3��E�/�8J�nJv � d��Y�,��&���?�\��;Ɖٶ�������\����g�%$�i�o?�c�6��F'��n�s��5y�-���KN�F�q7EʗQ*L}��}��Z�I��{^^����!�[���}�#\g��L�"Ԣ�D�]�Z ��~�A&o�Ѿn�/�Tw�ab����xDq��~����1���0�ĀC�����/��o�0�� E��g2U�K/V �}��E[(��+3� fI~N��ĽP����px��O���:��<8��E�J]�p�°��o`� ;Ղ�26�"-��ip���~989���P�,3�� ~F�ߣIW2�C2��]����jF���u��irS(7 �h�C�����Uߏ��J�`!�s�����Ȫ�\x7���a�loC����K2�� $@�f6�y�G��Ub����Xu q��ђ�6�M���l�|CG�����w�����=��L��q��xy3�i������#=��8P�W8��M;��G8���=�l?O�K\�S�@w��S�tH,#h�K�e��M��U���"YKuvku��0�h;y�iq��u���s�rl�7�0�u����92� �]�/���G'Y-&o �̎FdG7 ySi���U�̭�§�=v>|b\�w� d\���z*`r~�F�wl�<�ފ"8�cF�G�%ip!$C�,Jj��Ћ� �F? h%�Ȱť���f�l�����O]��d8d��q��9v�S���Io'�I���3ۣg&^\ p� ����= ����.r!1/K���M����A�oS���^����o�`����4N�g�gp�@�ٮ�VR+[�k��g� S^Z[�����z"��Ny���)��v�]�b�d�u� Tm�"d�q�; � ��nc��������#��W�)��R�ڵke�k18�28ޔ�4;WzOm=̊긋�����Ս9�,�O7�Q@$��ڙx�E�3Tf�6�P��l�U�?�}])x�fƩ_��|��ާ�x�c?}��&��"��=�br���I�3n5��f=���}�Sw�O=V���^�$����?|(v�C(��3��7_��?A�q�l2M��h><����m,R��n�Q@zE���w�%� ��c������o[嵫��[���ZS�kz�kep�viP�F�4��i��텱\g#w�� ��� )�o�d< �6UXr��н���/��yQe� zyښTm9lm���5T�+����z��"�aKb��W��H ��(ڭ�/饦�)k��1B�� ���< �fƇR��^��ڲ-ڙ����f3S�ޓ篟~����g�<�������o=z��%h�n�*�7���HI�V3�۵�'-��@4�%(� �/5��s���i�C%#qkn^�l��[���Y�փ5�w��6��Ρ g�.N�j�~�i��[�R%�i+C3��@���z�����5� ��D�P�����<z��^@�D��G�K���?!���g&=�{>�2J�zf�?�k�_8G� N���В�ڹ�H\����N�1W~kt��l��h��NZ�_}�B.^���*F+� �p B~�~�x��'{�mANyE7 ��J�UW2�I!��[Ϊܪ��Su�l��G|&�S�x+f3�0��{"q�E}ě � %�x��H��D'���������=���#������ur%@L��k��WPpo�~k��g"�`ٷ�\-�i�VlL1�b�ʹYX�*�82A~�p,���?�̏��%|1��mh�`wh=�w�����?��b�2�r/Q,8�]�v���Ua���? rff����~�����x~����L+�EXNF��"��Hª��E�n�f�m� ���)�����x_�jww2�ON�!@�L��'s>O�K'��_i�Vg;V)� K��f9�q1�=�3��ۛ�k ��ͬ�c�ګ�p���i����S�랠F�\}��Y������D�����v��j�kR�nf=NC���O�����E�V���Y��Y�>���l%':dw|v|\��D�@Z�Db����O$1F�ʥ���8�}L~���a� ���+-�IS���|�� �P����CȠj�2�B��zk�0�! �}�U�a�N �~�Ly���+�y O�(<t} 8�bxL��6f��<��tlb_�K0�5��� �Hu���+'�1.�t��B e�j�k�e� ��!�8y�!nZV�ȼ�x<�>��r\-+*_��;O�c�|�}�9�����gl҈ �PQ�&IP�XC��>{)�4r�[�څ@�YZ֙]I}V���T(j}�KL8i�C閩M��z-��8 �x��0��$�4��hʽ�D'J��j��*�TVA.]��oI�4>�0!:��= D X��� ��l��$]��B`TBc@�R��BR)��Z0cɫ����@x���Db+M�����堮 ���/�KU�0W�LJ����M'|�w&�zpȏ�]�H'���?ݢ�u���@�;�3�/�f��°�a��\=�BR�I�w�63s�r�3��Gd��e��<��aK\�y�H��*���Ț�F��Y��"x(�[�c&S)�?����-Y��r��.����^�˳1�.ei�lj$H�϶��"��q����V4��d����d�P5Z-݅k6�쉐!�U(��9)�ٙ�)����/S�xɉ�O���M���i��Ƚ�<�\&�;<���(2+U8�椵��/�����y�R�]��<��wnk7�{,��]��V��V�0�o�9�w����A��|hx}Lvn �I�J ��E/�^���cD̓��R9�-<3�e��d���knw,�q!��l�A�D�n�$�2�5�� �����~�����P&AL����j��[��wA��>;W�j�xt�0Z��o���܍�Bn6���3��;�)����h�댕�+�m�mL���jV��*),��e�qs�c�}�9#8^��w��o�RÆ����ٯ"�$U���.�︎��>D !���5)�*0Xp��T{�۩)vQ����v���[���H�c�{�qЅTC�R�a� @#r~ANM��iF%�[8�//����������"�f'����c܁��$��ǧA-J�J煃$�BY�%Vf����#u���ҽ�zې�ۄ��g��D6�ņ:e�@�k��&R�JI���7�]�X��PMD_��cسx#n|X�`�m�:f���m���d�N�t�c6ŵ��l��>�����acϩ��` ��V��jV-K�#�LqO�4�����Ȅ�Nq˶�]#�������C��� �5�ݏ���͐�zHw�j��G�2�N�,<�_?�s,�t���B�pf�7��E��T�%� ��<|��1g�Z$I�h����A��<��c'��@�o���U��{ՋXB]�R��P�P^w%�sXO���/�F��m2n�@M!�ù�6;~/�J|Blcf�����Ϗ�uݱ�UL���Ӽ� ���B�N��~[8#-��ˉ�Ņ0��L��h�w6Y'9L� �ͩ�����ʶk��)@�_���E��^�I�C�k�ƍJ觝�R���&��ޒ�q���y�q�<YV���ծ %�D`%/$b�\Xnd����N�� ��0"-��CY�PE{��h1�|�R�qdT���v�h��1���{�� .c`\�lr6��)��no/��Xl�� 1�q�8}%]W�X#���NM��FK�ƶ��%�*,#��NرY@�����&�������R-]��;)��zWB���l�e"�i�: &��d���:8�)����!}9q fZ���mTӺ��`^���/_����C�R|�P�h%i��p�x�D����L=7G�kia�Ŷ�N�~�$��bC}�U�_1N7̉)��P�����?��[MG!r"��7MPX�%)���Z��e%J^rA������k1�V G8ѳ$���3q���>x�F.�H�!��� V��[��j����M7r'����H���iߨ�yZN�zq��g#�"��Y�*���a�{{������!�LIV�q�]���5H�*ma�9F�D�{��P����@�l�����_M'�(�B��ou%��H+ר�2��5~L�k��b���M�ĈW�3�e�U(�� Y?�,S��4�rj�X K7¶J9{?��H�d]k!�+�=tnpG�J�΅�w��>O�Q$lŤfW\��HČ��!��6i_Ov8U���f��R�R] �z���������(ͧ�HyJ9#�rh��h������;��]2�[`�D���� n���h��w�~�dG�T�u1<8�r5]!���B�= �F�o���l��/�"�aџ09Ť�R��!�G��Y����Xe(�-��f�����)�h6P۵��oZ���V�S)�~v�oܣ�T���p���!�34/{��x����c���_�I�*92�V�@M��-V��l[ܔ����@� �m��';I�PB����9�r�G+�;�ץ���5�1F��?uD��!DJ,���8QO��� �JfD��:�O�Z�i{�}!�����B3�W�]��h�a�:i��q�F��T�dV�@s�@��:��kW����9 %U��Dgkgk�j�=l^Z�d��S�9%���a����1�&������Ȓ�mvVHD�H�/�P�-��E���7�P��Ɵp��b�<-�� ��0p�U�����ua')'�C��r�����2�w�%�Q&�=�����m����#��h �̶ҝKВ�����cE��!�\9,��X8��%Ț�TP.�U2$��7+���mK1ς��ֲ^8�؋��0��1���e���y1� G̞9;��B�uF''0 au���30ʼ�`7��0����p�+�n.U�!�D��=�S�{�o����mj#G��WLW5{��`ll����ۄ $6�ۥ�fc<�ƛ���~��-��cL�j/T9�Q��֒ZRt�z��.}���U��U�i��q�(�?q������T�UN�2o9/3�����Y��2-~mï��V�� �mX�Q�=��4V��A�5I[�̐a�S"��JmK��������P����8�r��[sc��O�J�'�ܔ����Z��w�s?�r��8��1�c�ߓ�k�D�D~�y'�AT�/;J�k�9�PS�&���5q���HP&�$����Jƅe9�-�P��i�0c��Ճ��_k�{�ys�g�̲�w#�/(�>)�2k]� ;�TC��%ӈ #1�5��S����Kog,�}~bd��/�:���0�6�L������*��Jv�1�AEe�C:͢*Z�Em����ȞMG��ᬙ�����YІ~��ѰO���GnXr%�)��w#�Y��<�y�n6�W�9~��e= �J븵ܲ�rG�\.'E͆�6�p)� �V�߄_�q���A�5_ĭ���}=�ҿ��%��8v�tGHxն�Q�T�VƊk���S(+�X��(�~ET@�៎��i�}��=[��u5�8���E� �D��:|���zJ�HS4Ob����M�0F]���6x��3Q`�v���Y��=�+/����i�"�n��o���$�r����ܯ��� eM>#^H��{�u�R0�g�=���4���h�^GCB.����}���z@a�����u�0 ���W��߰� �l��0�e�T��O5vh�.��dQ�p����/�GFY�&���GǛ��Ŝ,�ޣ�'�px�<����r4���s�sPw������*�9 ]�K%�`����o�=-����)��#�{t�>���a�O#���BWa(�/�����N�$��I��� �p��r���mᱤW�Y�丶%�5����pϧIJr9?IE�Y�И�-ϗDS��S3��}���(=K�����hAg����q~_N���Qr�"�Y����(�(~>T�{S�b��S��@��f�"\,9y�����A�Y���\*rH���)~mڞ��wo��"��:X��}��3na�w��T���l��!t2�h��"W�S$S�mr9��NU�;�����hԦ6-�����<��d^Y�Ǐ��"n�p�FG����A���AZ�� �I�Å5,���V\# `1a�����">�W$--Ab�k����5�>��L�$�.�}$�'�Xfw�T�dӖ�W���G=HgC�=z3iq�d,ץ7�u��$As�k��_�{?���_ɧ��I9�Z���4�����b�|�|�� �Q��0�ԝ�#�|��ʈ����,���J��;��o��?m�,���4������q�T���Ѹ�r�,��K�:���]��Dv"�6�)S�����Ez��7}XcF�o}�S�����g���y�u]ɓ��J(��s\�c����Z?�`��t"Ml=ɅW�ljc_�(5�ׁ�F���MA��X5s{ّB��펒����[�������W�.�O[۸>�Ā�~�9����o,��d)�C���\��8�sԠ�eo�u,^=��G�g�V21݁�pI�=l���~O�m�3)ǟ>/�vCc�;�L������ =W������.� �ݗߦ3�� �&�����gS �|,�BV>�d�W����3��-0|� �x�9�/9����և'��1z�7���L��R����x�O�ΙPrI���h:Z�96>f.= �C��(�Jq�C���j�w� =�e�C56�ыx�;M~M��i%��[�U��+���Vc��l�'����V�˚YO|{}�����:���3��T�}&c0��u�_|ww'��#F2NF2N"�SiY���^˰ g?k �n���3�u{=�:��d��D}{-|�*��k�HL^��u�_|;��f[��V{�rt�eH�ڀ���ne*���v��1 v��zit�-�m�����v\���V��;k�:��k0�^����ߨK��byե�m��~�-��V�@sX?<h��z�m3KHE*�;Sϝ�f}W��V�{�0���VgO��6�Ip�`ϴ�z�v��ت��JW���TZ���!}Р���;���.��{P������k�H�jL�d��� f^z�l���}�SNw�g�V��5���OxE�0KV�-�Z��J�P_A��5�� �:�]ڦ���'H�h�%]����h�'^���1{�LPm�0�1y�6��w5W�"���{]+���s�\�W�td����LT,�&��� W?%�!gXbXZM���8s�oG3�ww�(K����=)t`��#�_C(- �'���Y1�B�/�D�^5h�����9璠qNue���w��!���\�k����_���ZT�9J�?,���Ō� d�J{%�3R���57] (����ࣨt/&�P��~~(>Q��q�<����u�W�����9Ɠ��_��K)S�0���$�aI�;�I�/�<�j��a4y��)q�v�>�]�g��5^��F7�����b��1��a�%ͳQ�GRu����=FG���Î1T9������!���m�g��e�q����/����,��f�\5zp�E6��'�TŰ0�=+n�l.6�h�ӧB��'��Eu���TMcɘ\�ѡxGG�k;"�k;"�k;:*+����B�ɵ�Ѯ��fV8��'3x~�=Ҏ�:�2�l��K���>0��Sl�y��Ⴑ|��w�C�`2�5������3��a�pB�O���� �8�˓q(���r�]�x�N^�i�� �� t �q�44C��䒾!J�꠷��6���%XO�l�T��N��sx(�.�R�^�`���uz��(\m0����tr�'��Rƹ@��W�#�'!$���(ϰ�1�gO�Vi��8�K����w?�q+b�!~$�����v���U��7'��w��`S�>���l!�����.�L�̥��R[��| ��'�c\��8^����Nۃ7���I��XC�8%�g����o��X���{<����6 �(������@���Y�1�1]¾��S<߲9恋���N{�a���2"�y�:듹89~��i2�8r�K��@�Zc�X�@k���5E ���X����6< F���}��l=��1�F�� vlF��]`�6�[Ҧ�F��b��=�O<L�˭����v(�n��BRϋ.6I.@^ �l�^(���W�-�����E�PhY��d���HdY��J,?�W,D� y�W�+�_(��YX)n��R�fQ��͒Jq���6�)�^L!���������:��J1���R���61��JVřA|m�t��F�^�il��De4�_T�4��$�AJaMG'1f��F���S�D��xGه¤�gu���� ���Fh�b�*^��YF��k(YB8�ixG�p���U��Y�]0Z��WG0� ��0�+�&v�S�z�BS~��'|��o}�FO��Հ��[1�NDzp`�Ḙa�9�g�b$G@�qXSE0�D(�w�� q�/Bʞ[�݅k�Q�d�+��K�\j�_��(ĉO�2;�=\���׳�5,!�X��ɫW�˧茰y��m��X���t1�����l�G�C����q1 ��/F��i{& ,��x��TC��7�,�l�0��V.j�/�.�aPoq��U8��=��+xh4�c��(�h�B��㠝P�X����8 ��}����E�W�eH�B�����"�~PD]��x��-J��S�x��_��J�b4-�P�^^��͝nݾ�7v~��H�7�PKc��Y�� PKSTLdist/summernote-bs4.min.jsܽ�v��.x������E�T�]�MQjKn�,Rn�lv/(���*(�`��s30o0�5O2���B��?{M{YDU�122"2Ny�k���y>)�*o���~���l]�ڃN������q�h=-��V����,��eQMFdz��LQ�ų��x4ȋi�ý��?�NfŠ�E�J��eR�3TI�W}��˓V��T�;w�Y1�OFE>L����r8�;y{��k6������OI��%�aߖֿsG�v�����>��0�,oW��� u����h�ڶ��8�Ч���]��;w��Y��C�zR^��S;A��ٸJ:;U�Ϊ�I+ﹶ:��g=�yZ�E�u��w��^����l4N��syA�M{�������w��z�W�I�ʻ��* �.� ��@�8�^%S3]u�G'�lǬ8���*�ס�U�㨬�ډ�WobܟN_��s����\k�Y�а_� �?8���K�VD(tUU�>m$�D�륭���8D�d"I4���3MؕQ�����.�Ȇ��A������h���<�4,&�*�f�;��l��J�ڮ��`�y`�'̺-�i܄[j�T'�Z���p�]v��:ͯ���Ip֠����cԛ�����xt�u�>d�a�(���h�;��?������Qvx�mzݹ3�Zp߹Ӟ�c'-��ae:IG�a��)�}��p�5 �Y�|8�j�� �5�O�ɽ�w;騱FU��y���h�<�kӔ��6��>�bҚ�㼗�O�t#1���IcWܨ8��O� �����E3���8w=��q�1i�'���9�hl�&�\�/� �����]"K��7ӊ���]�����嬺�UѰ�U��M7��x�]\��Q%CM��M�a�|�E��nz�����: �FU&�t��<�2���>f��d�I�{���M0�����^�FZ1��H뽌@76� P�S��$hC�-I���rZ���f&a�{�[����D�p��iW��餜]��/�����K�LJ�b�jf�j<�V\*G�-�Ԫ�Oϧ���""�*$��S/�T;UVu�dz��*IH��h�bܯr�e�=d��aE}ë���h��4���Gܬ8¤u6�Oz�%�������^rw=_�����Z�7ڹے�"Xd�"qf����6-df�8~w�Bчwu \�ar�q�� m�*Se֗�o!A!4;��:��ҥR�=8�I����j�/�b�Y��v �ɋdEI�������'uȫ�S����E�W�<��!�<ě�J��G��M�ni��F��.����uæ�E��A:u�����o�=�<@�Þkr�`�=`��z֛�����=�^̦g�?8�TeѢ��K��-d� ��DVG1�$�B��,���,��=���qc@��ڍ�� B�ؙ)��=|+�P���ҵ�7i�XB��?���-�:�w�w]�,�Y��iR~���ȭI$�\�,C�t� v)�T� ݑ|+�Oul����u3���{S����|������� rJ�Yr\b!�A����X���g�����?�B��av�p����/cD̻'��8w�@;�<���Dt0g%:�,��Y��az����gd�9��גF0|ȯ`�g�XD��2��if��{g����y0. *A��hz>��+�ƒȞ�4�`���jt�O���YH���q9���/�^��I���d ���߮.{[.�N�?�J ��(/�v-�wTpQ(kڟp_Q+�`j�)k���Ƀ��ڍ�w��"*5t�5����N����aq� s���fԑw�[���l#���)v����e�.x4!��B}㌆�m� �`�!��������2\a@r�P�� m�=�4�Ɔԥ��V��!�>X �I#�p�� HqO�ռb54� �B$�R�Y����e8�p�� ɲ�|:��DC�E�<�a%����WZy[A�x��b�ô`�i� ��Q���v�*Oծ�O�K ��BEj��(�+���8f�Ԝ�������Sw`��i4���F����JW�D�9��Vz����G�������M��˫kWx��]�FV�NR���yj�Wv��������}j���O� �;�#����A�`T��E��N�*�5�,��� ����J$`��^� �g>���^C�5��O����N��QUԀR�~9��єK:Lҵܱ��m��.��|y�})JйN��0�3��檕��S~�C�)�<��T�zs=�D��lL{*Qi&�kg�cR�e���(U��� ��E"��jljl��0��_�]ڇ���V�FX�;G�_�E ��١О�U4��}�-��۪l�c�s�h�E���=S��0�$��ȡaOC�**��B�ͼ��̡V�|Q�����R|��,��X]T' ;q 7G,�u:����ðL�ʂ���W�bm@��Q� �E��)�@3�,�� �zy�R�z�#�u?�P-�^�����P���:B�%����o�YۼNO��q×��t��O�h�=���7}q3�e� S\\�?��8�*!�MP?��k�O��:����x_���3.W�ު��̊�7��Q�&�{���֓Ģ=��y�Y��hܶ�W�a9e��-�Uy%��|�]���pe��P��?��s<�ӇѰ:�7_Ϊ -���|�[=��5�T8`/�VI;���m{�-[#=;@��pD���"���Q��oa�λ$�A���vB� /�/�2�%g��ʢLw:;VET{3�"ozK5�^��&��-*�D���<��ܩ�pȧ��.V�$�P��P�G��Ν�b{0��6@�����i^�砍�W��㴼��h<I���`mbRԖw��b�-+v⇛G�������6�����~X�;��� ��&ڢ�̓(��Ĩ|�gj��R[P�(#'X^�.y �>�PAT�Gl*�q�p����6A��h����~z1����}��L{3˲�E*�CXf@7Nv�vR:؛k��&yK��Cu�f �st���b��� 0��Ǽ=�t�F�JFs0͞�0Gݮi4��*Z�M�m�Y��Ng�L�"m�uIa�I>�a�p�o](_� ��Lʰ=��ʩ�����@���^_/����0�����G�'�է`lv�ת�+m� `3�Y.�< ����!�6O��Z�v����teg�8�fGP ��m�������� �b��9�R�6sh\.%iQ��Z��\��"HXt2Pml���4uu���u��#�p�������������S ���OvOq�I_������`���pڛV�7bC���i��v��o�^7��X�9��n�?��?��~�~s(��6j�F����}�>����r+�>�ʯ���7Df���5��i�ޓ�i��=t}�0}�[[���Z~��A�}1�&a����Ν'�h�o�}ȏ���~3n��֩&�.�PlZ�!t%��si� �ڼ�i�6���u�]��7�q��ؽS����皛^���(�N���g;qo�9t ~���������J���WW;^�?��k�Ҫ�������5}�{}u�t'y����Y� �O�C�]�g��$��W/�g"� Du'�{�#t1�p���O��>�AY� �G���pc��蛽&��dO������w��;�6��q�^��1���������Q�Ձ(�}�;���@~G���'����>Cυmg�����c���t�կ0�O�gt�=fO���P�c ��c���� ������c��^y>���Ŵ�b������V^���Qq ��vB-"���]./�)8:I�f��J������#�L ���jf�,�������C��s���=���N�l:�D��BzO�؏���S*�����{�mպ/e)s�W#H/�{�/Ns�lm͊�]=Y�WH3P>�V���u���/6�.(7�����f�m��4F�=)1��(u�QgGK�[oIq�0ɵ^����eg�Ӫ�RW��M߹�5?K�ؑ|������կ�^���ק����O�~}����K<�|���imm~��~�o�28����^�������������nj�#�⯽���' �?���gpS"��v=���x�`���]���su�w��/�/�zu�'��o��o�7����$�>�����.�G��M8�?כ;x|��ӕ���{���Oy��S�Ӕ��a���+� �/c�+�&lDb��G��ݼ(���D�{�ο�1]{�����)��۠#�'�5�pB�>������ 3Z���A�M��i�C�{Ң�қ$eWW�56}�b%�V{z��9^?�k/������� �cb� ��B*�����[�E�*@��,%��j�s qb���[��s��;�^v� �q��9�?�iӈ�T��A6� �~-Fs��r���+cJ�j�c����Z�rj��-y�lw|36Z��c8a��Q�M��I0x��V ٺI��;��T>��l��+��}���n���;>��3e�#[����}���8�8��HpA99�������(Id4��ߜ�}u%�}s�(��P/WL���l��"q�kD�n��9�4���к��d����-_�����C#)Up\���ŇN��U(~�`�𬭑�[1~2t!�'3U����V WL6^��̩Ž��, N�v�B��,�H��>�����N���5t2W�(�� e��hϤPesh��}V\��l<F���Z��#K017��I�{K}Z~Pn~�[+�o����0Y�K���E^�O�(B�Ø:�7�x �P�Gp�G�N��חe�Ou!�r�!~�~�lΠ+�3MG *��"�~d٬��v]��k�VL��n�Ԕ�BA$}7C|�#�4�05����'�XH��ZQ�D�a�|IK�(ў���Ï��3��x��=����e�Y�(�!�t�?k��Ϋ���o�4X�v�3��p�ڊ��E�jGGd��2Z�F���Lj]�5��X�lP���@f(K)d$ h�X$�hE!4�:�w�� 01T�ѷ���t�T�������,�((r8:��)@k[��*��ex]��)�W�a[vw-��3����`�͓Hv��@A��3<A-L� �Zm�Y��tÜ��Ծw�K�����i VJG/����G���{��&{���ɛW����������I~r���܄�I��>�� ����d���2�_�y�]�(���'��-\O��+{��a�);:�4�0�pj�z���bFE�AGSn���AQ�7��B\��#G��+N��L�'��Mry��+�O �L�DѧPzGc�:���A�-=+ O��?��=ճ=l���0l�7��I��dT,���9�X3��%�������?�j�'���'� ?�r��2��h���-�TbE������g9?��x{�W���C�3+���G8�a^+|���R^<����-��bRF~>�O��P���<���<!Z�=c窜���f`{]� ��&fFG��n�ԁDK2HS����װ�Ugq��� �4�}�nN��k��ʹ�Xw+�ׇVah��/�kC��F��!z.%p�vE�f�3�zCk�w! ��8; k�:�Σ*xq��߾s�R�p?|�Ɖ�_TY���;��}e��t�}��|��8�}P,}���_GS�x�?<�BN,�A�\WW<�*�6|hM����ҥX]���X���ڠ�k�q�!O~�8���LF��@�L �z2h:�V=J�.DK���mۢ|[k[:2�g z<��Pڒ��DP��`�6v Ժ��0�+���^`������(EB���Bb �*]��:R�;�a������yv�8��y�dx'N�~�N���#+(����%2���s6��m�M��n�3�Q�cPm��c�{�ǡr5N |٥���'�1r�ki�%y�͡y0��}6TOX�.U Ԩ��Q@o��cx%B�} u�^�ᨧ;�� ,�%��XUe}�L�&&��6��%Vת��'`��T�6�w�pr�@Z�Nh/</�y���m�B7�I��m��U ���j-��M�.��BB7 ��<�>:������{=��B�k$V���Q�T��P �T#�xAa�~6���h���+1?����9��M^��k#��xq���x/�]85�WC���`šg> �0�x}Q"�hNHУ�r��r>Y�cA�r@Ě�����#68��d�8)�=���τG/�l@]�=��&��z{�F���É�}�ħ8"��~� 0G�����ϸf��sq��]���n�yGalΓ�%��Ny�=D\���l@,4�0ۯ�/�= ,:ձ�æ�s� &綟�\�k�ט�+�P*=�Nq<B���9��PR�_�����b�ݘ�^���ӣ=ýa54PqBd#��5*�Iq�/ӗb3jx���,j'������~��00�6�����A��{;��/�흵��������/��LJ��ꨖ�['�0 �=c�QD�a��^kk@7��X,hs�Z�&#��"ӈw�����;�/�⩤�� �k�P8`ש�!e_ 5�V���9+�J���@BK��c!�q�Y0�\{ �:]�Kq��I�*��@r�NO�G#�]Lu�]=���OS�5$�˚әB�<���NN�� UI\�>����c�����MH[�4�n�j� j��a�z��s6S��=\]]�� v�ku��@�(N��$/6��'�p��c,R�<¿I [8�e�3���Y�'G����I�tB���iѾݒI&�{1y��rKW�T/$R�Z���.�`����e ���1�ձ�>�ɷ������![ǁ� ��y���'y�t�`z�L1=��z�R H�j/Ή�[|����k?�~��.�;3��s����1̚?[�m^ˁȾ���%t��=cZg��� �7���)k�g�uo4�b���h���Ώ��ٺ�)�]�����*`y�Cא<�cK��B�� 8�B���!R�e�_����cxϒ�~1��E����|J���L ���/�{��0W� ]�2x�� "�� ��.Pv� ��Zo�<�ZK���)�m� �@&��/`�{�\�٥�I�ʧD_��e����s�d K��[;G��6�/g��<m�����S������i�1��Ӌ�~�6ʿ�u0�1;�����;ח3�0ʷ�P�e Uzp�����G������Ԫ��7���l}8�l-8����}m�R�x�:-w58�<+��yxxAwcf�P�%�W|��K����*IaxS~�=�������(���~C�̱�^9���O�2��-2��l��+�����}C�|�*���s�9y��4[XF�ɜM@Fb��ԥ\h�A� ��]�P3|��f��rr�Shd�3TU\�j��ۋn) �[YBU%�}��t�=������k<}㞾�ӷ��[<}瞾��"n�rV�4L��Ă"�����J�k4P��1����D� ���9\�H[��^�)��2'���4P:�/βK�3��Vޢ�YE�F`������u_�E0�]m�;���;}��D_���'����g����1,�6��%<���7�|`��9�۠-����.:�~��'�xm���_� ���d���H��{1,~�2�*9�I��w5�y-����A�[ bti���:.�c�[Y���J�.VJ"r�(`�琢�%W��Y��^;�-)��v��ZnQ[aUk)����f�%���3�c���lQN� ʙ��v�ڽ��$J�| *���q8?�ʘ@��������� %�T��[��T\���X�_��~D$��^�uaG��^ڒʫ�\��}�� ��BvE��s�$���g�?��0���e��>sk+Fr�؏J���` �I`�CU��!)QICo,�����`6��M��Y�*,(��G���Pz��B�)��w�7[�)��o�F��i�M��)��՟�D�� �7 7�A�o."o����\\�/��8)fqs��z�x�G��#��=Ԛ�� E ��9��)�zN B�s���'2'�Rn�pǢ��L��!�u��ӓ�g��[4���<y�o�M'c�� ��0t��g�k�W��xC�ݽ�`��{�}��0���>y�����S}������O�d�|�>��A��ӷ����O�<��S<��>~����������7���V���{?�V��}���o�o���ٷ_��wٷ����o����o�Ke�}�>ɾ�!}��������I��m�<��w���~������oӿf���=������������[2�G��OO��[?�2U�z����}����]�c$V_F����Hz���:��x�G �9�Pȉ�<�S"�=��p*�Z�2+�}�����-���e�^���O����=����7�5Q�/j(�YU�1A���eS��l��)�!A �yf�TΪ�.�cU>p�i��K�%�5���T��h0� ~�=��L�k:��1.��I1���UF���{�ao�x%B��6��B�4蘢����n��Xݶ� ���n̤3�_@�����``�F�CL���Ͳ��EgP�".��t�ye�U�U�+������{]��/�_ �a]:��b�QS�*���;@�y� 7z�0��XPd��c���iCh ��fdP��-5\�,� �3��AJU���ûм��T7H�)>�Df(����()<��E{������A�h���m�ʝ�gZ���]j��2��L)�rVmΜ��T<و��z�)�ͱ�� �Z��v��6���X��e��l¢���>#H.ڰp;�j}k��zD��oC 5��9�v�̘������HD�X�͖�_�ĵy^���^���e`�b�h��ii��H���L�:��*�K����:�.�����t�8%���|��̻��~ �ҟ�� ����T��1�;�@���h�$z��B?�+��8}��2��JWI2X(c��iR��|ɑ��R'���z�ٺfk�c�-4�)hH;Oq�#l!GtqF>��\�U�F�=dv$SKr���V��h�*y���Z(GihY��m;㴡%K�3?�xD���v1�`��2�=r�S������,aSE�p��z���I�`��8�J8;L[�ZL���-X��\�D�?+��� ?+\����!5[�v�,��lC.J�;��'*�'`����.b�����\=���#�bj&(L��솱4H�!�7B���P;?!����Ws%孜"��h�VKj��WX^^��%�txtg��,7��?������4$X�43B�W���k�Bt���0({ ��"-Ɠon�b�\@��'���l�I;�A�%����Ol�H�,���Ω����ټ��\v�c����]Y̞�m�!� ��57#�V�2j8�h�s�T��/�P���`|�"�Q�xЊ����sƣ+��W�������]X_�)���1�OuJ��~�`:W%�M���l��6��JR���.v0��Ν������1VI���|T����`4%�8��83 [�xD]:�L�K8�_su`��8x�8İ�}hB�b$���( X^�j "�>Tr�!#ږ�V�e��1m���l�5�yp1#��ۮ*R�Y����r8�8 ( n`�=Z��Y ��c� �� Dm����*���m�~��Tb1�Bou`�*��e4;K�o�9���d�Mkn�q��"�{�����$����u�`�F|7e�Is����LqM#�]}q���t��͐��]8 :�B�xIg�6@��L�ۃ5W���� C�7�YCSx�bZ���0"�xD�i�&��!��(Z�d��z�o?Z��ҿi��d) ��Eƣ�䈶��r��z�n5+��4N@h܆���I@�����e^S��[����z�L��躪�o2p�i� h��Fjõ3l#�H�CI�=c�ш9tJ��=yd�J,"�|���1�3�+:Ә8 ������I�7ؼn�H�h�X��@��7������l�?t?@�C%@K?8�'b��nrd�lZl � nN!����c~��<5�a�V��B �,2r�w/��ဣ��`v�+f�ڝ�5O)6�!�K%��t���T'��^��1�_�;;>�����D�a/±�x�r�ЩP��u�/UY?C��v��Ϗ�q���T@�ત'!n��7�Q9Eƥ���'�#�RH:�sg��� B��omY@�Gم�^R��B�ѳ�6�;Pr��DEd��i�轝\ X-��W:g�K�L,g�k��Z$^�!{�s�2A�fDmw�1)�d+�](�J�����K ����`�M�8���@E_ Q]�H�$�!����f�\b�!Ν����֠��^Ɣ�Tq:ϒ��BVJ�'���E�FfƄ&��"�J<� �m^P�/Mbm�A����lKQWQ� �����}gN�HD�?���mZ�% *h){J�{�7����zS���(�O�I��۱���V�e���?E���]�Y�>�x��W�kGdCc�a�UF�7U�q �D]U�J ��V�j��g��Uo�,G]B��ǹ�����`�q#����y�Hb�0��n�ͤ.Acx��S��T���l4p��d����Z�e��b�+���W,.�&��-m�r�t5��bb��HvF�����.T��d�+2Y��б�p�(�H3�97 C4L�v��2��ZC�ẘ� F���xJ�lY��!Bs��9� ��ly3�X"���zx�C3��D^��}�;<h��8������j^a�S?�YB��A�qMEh��xH �Vƽ)�p+AE _z���E30��>Ex�l� k �����8�Kʺ��5��ŵ@h�� h8� zL�g�d��=���� �PRde��6q�C�h�E@^2��Y�@)w·TZ��d�� �/�0���=H{�`������(v�7�ZEP� �!�O$��z�A4Wo��)uֽ��4vG���k<{��L�����{�(R��d�����aY�4���9�� �DvZ,����t� sEXX�|1���tX��hXl� 6�5m��}�媍��&Yˎg~r&�Hʙq׆:��NR�0'�q�ٱ�aK,�ʭ���L���D�P}������H�Bl7���G����ʨ{R����A����ɶfE1xS��҃�ݤB���&�p�>Ԛ�3�8��Ted]�RH��bF8v�<Ɵ�r@�-W$7�9 �FH��~��*v�w�ٓyZ�������gw�G9��E��3��0TJ�Õc/���>r#53��+�`�Y�I�KS_ƶ"��os��.!d�Aun��z��b��t �h��/6��6�$�P�nl�`sk���q���ej����"�Xe8:a�O8����ӧ�v��B��s4�X$$2m�+*��?F��;8]ZJ���ݽ�}?/��11J�`�����EI�-S�`�9� ����0�$,.�5��;�����>8U7J0�Cɢ�qb�h��$<�n��KG_�XN� �K��-8�t��O�y8�"�O#7�J;G��Y{u�>݂ѣ� ����NW�KS��Y�-N��v� ��a�5x�)P�#� �tH�*Н�8�6�Bg�(�JJHH%�Lk���)��AQ�(�1S�0 ���bbbB�yu�!m�����p:�T��*=7���Ϫ� C*��E)�I�H��v�c�Xj|Mb��\z#��N�Ǯ�����T�� �V�1lm��4�!^2�tO�x>� �yJ�̈=� @(�#wS�{kh:(���9�`���}�D�����C�/r+���he�$V�@1��k�A���Jp��?�X�����[�)�E�� �A���`�@�9'5�0|O��qc+�XK�Ύ���I�6�T�Ȃ� �2h�5.�1�����Д���b.o�Ck�a�5��LA�'.:G�A��|�H�Fř���E}��7T<Q���N���������')Ǯ$myU<c���� �^��u�~�0�O`����"C��j������_E͓#��؎�I�p�*��_�!�R3B�0`��S���LJ�C�_�����'��#/$�/D�h|Ӱ�mZ1Sϗ�ș�]0�=���.Qn�o:װ�)��?�>�Cޡahr���Đ�ߕ��j-��AƜ{�w� >ա�}0�#�o:/W�?���2:����Az��`P� �� ՑġM���͂�y��#�|=G�9PCwԡ��"c(��o�h�xG���^���,�Q��*`��K��,2��"� ��z>�a��`A%�tQOQr`&>i5����"��͡.G�05^��1��EX%ۡgN��2��~�[�|2�"8�⩉~���'p���>e�f�= �{��`��;��}D9�e�K`�H^�qSpx�0S�7Z�q�B��Pz��˔E��9��|?����_���~�B�� ��%���! "�C�������'a��8��W�p��ev�_�!;�QB�kbn�@�P(�q���bB6���Ȍ�]�6P6�GU�@y�r ݂�d7�_jٚ$ P֪x�>e�=�EM�)a��/H �0�p�uQB*�Q4ԉ@� zq�Z�,*�� V'F�X���"y�������yA�H?�(7��S:ҁ=m��)�fʲK d�P�f�ښ-5X/k!��5�֎ι��Qi���z�X�7��1��8��z'������]�aGr\4�p��у"��a�P_~*]-�C�)��d��5�K�����棁�����jyQ&(6��c:uL�ˬ�(%x>�7��� �2��h 8�DD�����{��3�8uD����z�?Xz�˦�Q`�k*ی������P{Ґ�Oooj"/U:>r|�[ ��e�y�i�t�@�N��[��"�2�&aDu{pbC�H3�!�����Hm�D�(���`�P��J�UV������~��T��1���sd��k�0X��ӕ��uוN��(�p�r�� }^D4u|$������ z��b��r�yf1�T�ھ����RV�� y�NatT�G�߬V�Y�W! �� �7Ku�f[k�=�7�t"���f�`�t�5@�Q$;oFzx?Or`����f�1�w�H1Z��2x�I!1�Z�b��۩�Ll��b;[�f��)�熻�C�� ��R(�)���.���s\��"Eג�d��4�����% (������P�h ��B�h׆�cipL�(�L�n~�fG�$�����r�!�x�A~ -Mf��P른\$Nj�{��{�^�L�K�.�1�+I���"Q~#9j'� ��P2�V�e�AO����K!�Y��5�3��5~�{!'j���/�/SM(�CM�4��Fս��ߠ�+��@ډJK�80��G���'���xԙ<��[�s�����^Jg���z�t��,���m�a�8/��ld�4��`w� ��+s��䠐m<��[����=l��-�v�w}�=l�a����Oh n�%8��xDFd��Gt��#:yp�}bGtދ _��t0�J�v|�;��J��� j�8��`V�z���@� �ne(�d�dtŝ;��ow �r �/����[/�f60\�ǜL`O.�'"��7���p6�4�Lݐ�e�K!����m�;q�o����l��3��ZG�=`.�`��sc��>�7�D�-{��݃�H�=4�� ���)Hb��+�b~f)o1�E4�r-|>R��{��g�-�i�>=��a�w॥�N��gEB�(UG�!l��*r���#=鍑Mag� ��ހ?�y��'rS�ک1����$�wzx���7|>�#7�aP�g�ڼ�C���w�~ߩ�\\L����%�Md�c����S�D���}ײ"���J�+߁8��-��PuF�[ �D���nx�K� �)O�8H&Ր7�W��}�8�VgK��ʬ�pӍ@N*� �.�~I5��ǣqX����n��pM"nvgBA\Qp����gb-�y�Ðx Bd\�к�՛]�[;�m�rU����:�!�>d��~��;����*^lN�1�l�Ai��0r|OK�nk����4�K��n�G]A� {����Ԡ�-� v�R�e��e��zʘ�O�.ϐIg�I���,��ҷ�v� ��pO���My��ṃ�)J� ����=e<���){�h�Ʊ\n�l���wqRG� =���4e?��m.:j�p^�1�TD�U��F+L_��"H�P��؎葜.m��Ƚo�&F\@0C�q[� ���{n�����h�����Ê.V2e�h�# ��0��� 8:J��-J��l3��G��B����s����*\@��ls!����qqm2�W��,�8LևL������ox�M5�|�k�R��`� � �Ĕ��~d���o�Up�l��y�ч�YEg9g����j�-+�x�Fe�um'hs � �u���1�=3�<g^y��)a������rY8̑nX�$!U�P���3� �by�2�M`���}���=f�R���рZ^u��X�Pd M6��� �ʱ����S�@����mN�����v��j۹}�4�K��[i��f�ߞڭԇ�2=�N[����[���VJ$|IP�߾v�a���a �"K��jS��)� <z�~)Z8���O1z��Ȅi��n=�z��U�#��y/I��^Y�1w��x���}�- ۅ��0 y}J "J��@��)��E���n\Yw֓�]�(���.����j�_�j|�-ϴb�|kQ�C;jĴ��hsE�����dzD�6<C���B2 ^fv[y�R!�+b�KW��$n}�dmz�?ҥC�~�-�3�<�25���9f3���Yo��i0��IsK9��� u"K�,�����Y�Ht;���� ���Yǵ�j �H���yg�����g�^�/l�N�ʷF�1� ��^�g�ؤ�Z��c60��}�*�V�Rl4��i k�n��+����t6�����q*�o��Ib���5-&LdV��������4���7yK�&';�]��˙�J�p��Քs;��(�Y�X�cx��ļ���SW�P�1��[�_�V��p�A�v���s���c�mi�v�-�5S�!��;u�l#5)O��rf���8�<6��{ O�HM&3E�ƣ�֖�X��6u�J'�����A� Y�3V����>���R�}�}��G�nP�/%���Z,8n/��=^�ʕ!��3��#�2�ʼn|�t�����2ně�K�ձ�.:���8��mJ�~�;6��W�!��۸`�NϊzlW�z�K�2F�2TN��|��B&U=��_��ל��l^��'�~��IZ��Ҷ�T�8%K��?G�C~4�вR��}��q�V�m^E�bm �b�c)��$�rc0A��s��v¬����4�h�����*̂>W�/W���j��� �����]\�f������^��&/h*(qSc����2��#eC|������g�/�j���a垫�?-��P�z��u�k*��I���5�G?x�"u�O�c{����9r��s��'se���D��I3�g�J��L|�'�x�I9ՏU<�:%�+�JXS����8��y�K��<���6���Yu����E ��}]�4 �'\Db_�����5������ťX�J�Kg�w#���œ(���E���.Z �K�-�3%� \��H)O�Ѵ�>�ы�lU8���у�wr����,�S0��'���m'���k�Je� ��l�İ[��Z2o�[��9fqÊ'�-kr��v�uC��Gf���#bv�֣���#�b�m �T�6�b��Wj�njGAB��%���I���Q� I�J�:@��СF�0��YF��8�y��td�K����uV�-.�� [GĴò�� �%#��m$hN��sn�����U�6AE{��h� |�]��S4�0�`;/����m�z�Qw��I��_�20<p�f�{��!�U� 4�,<���Kca����%��e�Ř��-#H�(�x���MSM�Rv�> g��p��U8�/ V}������/�v����,�&�h��\�.78,Cv^�Ơ4y��-ڃ�l1�G3K� ?���8�f����I��=� I�Xдb J�Ş�i��iM��U��z���ƿ���͍�7�G�%;���/��v�a��B�\�uVUٽ{`��J ��<��z�)S�D&1����H�k��A�R�\̦gm��c"����L�Su����+�p\CH,�tӆHX Aco����b�:�� 1�Xp�Է���@��7���O�U����I-BƮ'gG��ׄ%6��@A����I�g���VRJk�����z"��4��"�΄ �p�Ɖ���`0�'�k�A��.ő`I+4�F�VH�����kLJJ��d���6w/��t���v!\6���2NXY���9�/eF�5�N �m�6��n7'�a#���p�v�J�Cq��*s9A�$��D �<8��V�0���P"ż����Ny�� 6<��(����6��V��YH����*����Ͷ��s�ػ(�u�r����\1s��%Wj�=!��7�͍�Ļ%��mH5�˪��%I@`K3B"�a�Q��p�Fx����!�mmn�!_O�'lԒ�YkV��fT��ߘ���� X0�v����X��c��y�0��w�t�t�r�����!^C�9.��>�%\g(CVgn�C����$��j�wj�U~���=g�q�S���%��~*�e�xb���.��U��5�"y�4I\�ұ���u��xa��s��0v��J�\͂;C�-�j������JM-�*���)�Y��Z�oP<nb�9KѬ��|��۲�o�W�k����\�����>��WȞ�^���ّ2���UBr(' Dq���A�v��p�����8�@}�mJ|��A�ZN<��j�k�z �������!o5���nV��&/����8F�Zh�t4n�K�3�OCY3G[_iRp,�]m���k��jd���kG�*>�|/ `۹�WooT,moT,h�ֳ+ �Pw Vb����+?y���RA�k�i^�tH�|M/S���w�l�/����?�s��J��q��=�I)9�{��o@�j2�p+��.�f����$����ُ�T�����*9� +���q�@�(�D�'K� sX#�z�T1��5���X�����w9Qd$1 Gb[t7���0uvɂ�H��A4ng�D@F�2��@��?��r�>�털��o�O�17�x]��"�{ن�ʝ�i[��q�-3~A3�c� e�t��ӌ�L�QO����о�w����el�a4f�y�jX)�֫������kK�S=<��B� �S�� "�Ȼ����{��Ud���|NJb��J\�ٛ+x�;��O�1�4\K�\����7l5]J�����b����gnC��s�.H>0�72GqT�Md���X"��'^���5eRQQ$�����&�TЌ�4�C;��z�7MBOf2/�*�ĨW��jÑ����6�rЏo��m������_�̫��,s�4�g�� �p6�W�U#r�4�$ ��\k1ѡ��?8X6�� V�e�.��Q��C(d�O���q)��7+cW+�).e��� �Ώ�nm;�bt�!K��E�'��|��}�����Q=��rٺ+���WK��F*w���Z1�����-�Rd�9`���fѷ�B`�5�1��g`¨AK�,1�*?8 ���M�cip���̝��y� ���9 ���IWok��CD�L��H�����fPsyM�P��M���0�|p��t���<��ҙ��|dg�}���JR� �`;�8�V�Gi��\�C�P��Ӛa���a�@���g@6�O^<(-�v��.�+�$dH��v5J�l;��1r�[-�t�l`�G9�|��z������O�2��{bg���NI�ҞS�#���'��� ��)�&c�<M���T.0<�;�(���[�yz��?<@��o=/��YV� �}uݾ��b���Τ��� ������b�F3�������!a8��1��&�t�D�3�3��'ŕ���zD6cu��9:��F�����d�B1)V� ���3�5���0���E��2����zo�L ����fAo hj�A�NA�/���[&�.Q=�#h����?ܝRf{��9G7�f`$-�Q@ ڋ�+u<�^pD�%h�j�g,��Y6j�0�5ʰ� ��|w�@��*�3��c�qf�t�<�����rp�7�)��$d�a��^rQt�&A�V�M�o��"#��Pm�U{r���d'y��C��0�������Jl(�NF=P�JĦJ�݆���U�p�I�?�����V����x[�Y�X?����0�Nt� �h|M�Ś@��׃����>h(1��d��Ag�I � �yIM�0!L���;>��ɛW�������\^�ETy�@.{-|@�E��r���S*��m��YcrpK�$�E���ek���1�Iu�qHu�g(2二�8q�75��#�:����f�����C���݅���J;���F����F���nD*k�E��D�R�ݙ����f ,��R��f��G�߳f]Ӷ��zx%�L�(��}�@"G/&F�C �Ƹ+��:�D���/����=�)=cXG�X<�mIn�0��u��y�q��@҅{�ѥ�� ��i��H�WC���<T�C�i�Ic#`7���jÅ$�� ��E�[� �\DNh�>ݫ�őF��_�Jx@"D&�&G�&~D&�O�&֤j^�a�ך� FdS� ��B�b����(m����GZC2��<7����b�S��ۖi��*R�@��S s3kJ4�-$M�3�YՁ���j���aG�=F�e4� �� ]�\�f�*���((��bV�m ��@{ n�1r����5� �5�̦�y���lZ�-���p)_�Obo���S�����o:,�g�Ir����k;�����O�<,�q����s��b~XI�.3���نGrC{�Qݹ�A+ �M�7Y���g5��ӽ��&2+��U%�`��t>H�C��;����vY#!�¦|��?5/+�NU�o�Մ�|%���!�Aj���\���� ;Yħ��0�� ��W�Iy�o�1�û�=�%}O�T������n����y>��p��CAd�`��ȅmQw�_ ��,uq��2K0ޞ���!y��b�S��v'��D(>o���%1��,*�֡�A�&�b��*Ӈ,�T0|Y��������2uKa��� ^�n&�H\��K�Xƥ~t��]�@���$�}?�?��3g�{��0��N�R��V9E�����y�l;t7U�� ���; �S�7�[Ӹ�`5a`����̗����Dx�hpؕ��"��n���@pRI�������������Ċ�f��m�XjL3.c~�7�":t0��Ԃ��jL�f$��M9uR�e�+T�r��j��F��#������8tf�v �^^ȢS�����eA��Z-o;D(�bdwf@K\OF��S�<��s �;T��']b`�p���2F�Gs��JNp�t$�o�8�i�D�d�F\|S�����)9@s�=��y���Hx�|=�F���L�<���\R�;��h.���*6P�C庨�*V0If,��˻�kC�_�}ۯ�i`��ԅ�ԣ�� �n���W�r����Qvp߾CC�� �[#�a�R�K���1#�6��?#lz�ň�hG�ܟ]\��{>�aR�2��B�:�Rp�q��z��#_7�����R�����4ѬM$��.�)�! j���2*c^j#?�#����X<�T<�3_�Ԩ����]�YW����'"���$d�a?A�awsg7Ⱥ\3�Y۲(�<�����q؎�(��QU��E�3��&��g���9���]�o�G`[ ���E��0B~��3�=EkE�VU��ޗ�=�+ۈa�ڲ���m�H� �� ��DT��(�"t^Pt�߷�{~a'ou�n�x�f��zU� v� �A�3e<U��;N�̄�y�7���QR�N�j?�@*�.Ղ���h�W�q�2-'"���O�]��4`ڝ�>EnF�� ��ԫ����5�GH�U�˞%��B:'3Ћ� T�v��uK�w~� ,*�괫ꖠ����JG�;��N� H�� �]i�p���m1\r�h�mn`}#f;�k�6#���� `<gpXՑ�t��G����X��b��R�o$z<3�+W� �"�����}���<ykqPw�7#�E��?��'�Ƌ�)�6@��J F���KA�@ءL�nd�E�)%��7H �`D��$<�g����f��_Y�ޠd@�j6aÉ+P.��5ĥ�k!�t(b~Y>y�9= �87��9ȿM�ᖖK��eY�WnBx��'�`7str67�r����k������8D�z�?��h�=F� |�P6�����~c�/6" ��#���������]xi(�?��Q���G$m(��Oxt���U5�/�Մ�GT�`�p&f_AI ?chLKEw�n8.��A�$<�F����̠�^����%�'�A?������;*TFM��d���Q�dv�˅C<^�i3�?�~��;����$L;*c���A��~Q��i��F�����md��Ѿ<�Q�+#x[*��WV��x%��i���|��1=��#�g���e�7}�,MW�is-�l�S����0>�-�p�b#��;�� �<GW]�є�G�$a�!ٷPl G���a�z``8�,����:� ����[j�eP�"���P��`���m'܉ͽ�X�Aj+Y��;+~�x�G����fim9G�5 ��][����Q�.�?��kj�o_@(,�o`�� d ��o��Be�O���b1|:xd�9?�8�l׳��[�1V�Z�(�=�3�k��q�A1�h/t��7*,�o;.O�i��������b�w�,0X��aI+��J!\���|#�j����ۈ�ۄ�l0c�71b̙0�ٸ�fCC) !�Xl���i�mda�g��8��@����5�ϭ9]������D&j�5�넘�=�(7�L#Q�:�b��t�d���Vgc�kkZ��d6��Ċ�J�E��|��x�3*�T����r�� u��Rq�e����*#����Gsh��w�h�R�nnRc[�B-��IzI��vA����<['U�ɽ�\ˀ� 8�5��#�*P�����&oBG�@ޤ�1�����?N�f�eԿ��xcо��w+B��-��w�e�K�� ���e�n-����V� :葷n��<�?��4�-fWk("4|���ɂ���Oa�v���Џ��F�?����2�A����0����Q���$\�p�$��#��^3Gq*5��;L���P�.( \�`����Gs���"��,�}zf_�<צJi��%(����ܑ�22�F���m.Ru��w?X�~���hWº!�ɱ�ᄊ!c0{u�c� ���ı��֓VyѨ; ����b=ɐS|��(U�Mۚ`KI�HȞ@$�i�T���K�W�)w.��$Ώ%����F�&�� pЊ�vW�ݢ�3�n+3�m��z�~mߔ���QU��ru���G����~��ow��սQ��EB"vp]�0��v �%��4��E�M�֔R"��#fA��'4%)�0dLW�E�Ϭv�� մ��k<)5�� .:�3�tY=s)a���NDUC�ÃF���q*�5bo�7���ch�=0�-��W�?2�2��|�h��\�'\t˳�~�b�4֑>�Q�$0%����H+�R�.@i�AWsS��C�H��o--IMR���zw� �.�;�Ⴁt�n��j��|јg�wLS�� �5JM{m%P]6�_�w���OG�; ��HM{�(|��s?��f@�hV����~�:[DI���g�)l�1N�(��E�q؍>�3���B.�.J���Y�ȥP�ۅN�*\���]#������5'�������&�i�`ƃ\O1�Z���U�?B�q����V����|��B`w�a��f���<<�C�-��_��]MRT��z �:�p+&���^ذr�yF&�I��u��h7@���3Pp�98��l *N�{���3u0 �_ˇ�Hs��#��u�P��"(��L(��� �8^�<%��-0=�!�Y+oE���������o �c�d�vKm%�J��?��6�^j>��?�o��D挫I ��O�y�嗨�y7\���'?<z���ӓT8?�y�����#tHaU"]"s.�����(���]��@b0?5ҡ�ހYU�U�tKaڮ�{�H5Ct�t�/�I���ā: <����J[���!h�+�~���毌W{V�@�{χDJ�� F�@,L8�z�5E�@�~$��>'�V�|��CA��'����K�ezE�H�@��։-0�T���;��Hd��~Ӕc�����;�i���^�$x9SY��x��gc�aؠ���0���:���8���,����щbD�Zr�RN?%P�D�?�Q~�es3�������Y90e����8k"��������M�G� ��@]4"����YQz�|���F(�_v��q �t�#�{���͊��`�O�<:g�ڳJBmK�{�q��R�J�Z�����iZ�*\���/�>�܋��9s!���7�fP̷5����g2^gZF3bЕ�Yg�m��TƼsמ2uMrwݼZ����"4��Bn�PP~kA���,/d,x [��u*� !� ������ ӂJ锈#�D���p P{�aL���WDPN�S�/y�,D�j���M�G��尷WE�|\� ֔���*��6�ᅰ"����H���n� �`�F�d�/�V�k�_�ɔDT��q�En����/�+EAv�A�f_.��@�x��܆%���˺H� *�� ���V���W�o�i�"�/FXg!���� PТ�p�o͐0]| ,l�B�� "��c�c�J{(��L\�f���͐q��Q�VV���o�M��yZ>ထ���dcHͳ�SُBNW���q�Ug��ѻ�:�?=�a�P��X�h�T5��VD6�'*����j�Z@Jj-���>����2�U`�;[1_��j8,0�Ոkp����nZ ��"��_;���� �9��٫�̋NV�h�W�szCzM�Ky���E�a.��E����)��uQ���ߍ���N�����h��i ��J�� ��&����'g)��1G$om�T+m���>����"�qj�uClF ���'976\�逇�=G ]�r��Q&/fz��1<C�y��jgF �����%�-��4A{���~ 1(k�۞~�����#hW��M;�9a��:��kf2���� �$cZ�X��%����>�S;� ��0W8�,YY6}���-k�:Y�IKN !��亩��5�f� �h�Ko�j]��(�,0�K#Ȇ E\�x/�͐� �,c؈'��\ѻ-R�7����E�n�ӻt7�d��/ʩӽ&m��E�k.�&�Y��@t�3$�OQ]#��)D�bh��&��#���$��Q�J�qѪzn� J�&`O����Xy��/��6��]�Lj���Xs��yC,<�m�"���?�'���!}���J��'z�Aʘm6x�Z������ܽ��$�ڋg}m�*�?Zň]��y�v��q��:�1ق�[�{�y����I\V,���3: E �;�TY��Ҹ`�p�}�p�-�3c��0��f����"RФ�ə��g5�i��GŬUu�(���2��7�L-�3���N� �I�K���]p�pp�PJFK�'cF��U��X�:�%�:� ����1�sg��yn$(�G;��"җ!���>_P2��)�2�S� �:�LOq��J���*-Zn�[��Os��C�K��2�D�σ�QH�m�O�*��~�Kvd����s�\EP��1���Qj��v]�惺:�DwO�d�=�\�[nlaU �_��A`J,�����ϙ~T?����*�[Z� [�K�MV���s�,�ŕRb�{ыN��R>�Y����vjR�b�� /�Y�����7�4x�T(��u�\<m�!�m�c�cB�/��� ��Р���H;�=S�|�d�<�2�t>�4!F }�|�2�3���K�\ n̔��=c -���~�Y�����3g��}�|)��������փa0�V� �n�2��)��"��}Kb�*�M�oU]���ߪ��<X��]Z_q�ZET_o�Z=G�ە2� �OrR��Ts r�]�ʥV?.B�PS7��%d�.���C�\v8M��8@��A�ڔ����t��G�]|��̄���QiV�||���1��4D��c_y1�ҵ�-�}R;���ru^ �/G�"�����U�ho#����FG&��2ϲ�Ԉf�w��l_F./a�ڈ"N�YG���pU�q?8'��/����mH���)9� q�H�Xɲ�qK2N6����c���o�C�J�fE��s(��4�S21F�í��֖������r��oPa�H3Лd�����~] �^�?R%%�x=���M�KOJ�)�0+.(� ˱� ����}T�f�`3��W�7$g8��x5�%�p�=�p�阍�1&����� �<��N|�0s�V�(���Ǎ�d��v�+q|zQ�j�z�A`թ�G�X���V�!o���jӐ��5������S� #��/�\K�l2�f��M�с����73�A{^���뾐�z��_�ya96:�jB]yXM���3mTY�����twn��h����Ֆڗ�O ���Ffl|� XO�WZa�,<� v�����iK�z��b��LL���D�n���X-}���ʪK�ٗO��,�?6ON����ʪ�;�����G��5����-���P�%�97�����/�I��X� ��� .�nBb��Zx�� �ַack����4NȊaUD���&�#�X.�Bo�er�V��oku����5�oW������f���3�w���i�����e�G���s����F�ԩ���O�k��^m@��EZ�O��V�t�iI��Ya��[���ٜ��LL��d�1��=��̩M�f�5{�t%+b� k6�<��;�̹��SS���/���g�L��Ք¡��c�q��n�;��1�H���8���@��r��jp�C�\�/���K��4�B��6s�W�E��R����Qu���m�8��XT?G`���`�Hv�����(2��gR�V��!��"�����#>���ܩ>ʑ�p�T���M��D��f�W�W�5[(����Y<]�mg�j�f�XYT[��~�dwy��ҹޞ��1�[2Xw�����T7.�,:��բ��ƌi�H�*,e-���7M=�9�[NQ�b��%����S��Ɠ�����C/P�u� m:���� �Ee�x0�.��;������#d;cV6 �tv&��M� �e�9ӡ����!ˠe��#�{r��2Y��N����� ��n� �?2�#%�!��ݞݹ�6���%�⭿�|�3�R�u�Y��V��^ȉ�Rs���p+<�aH��m�7�i� ������<� 1.3<1��p�=;hT] �����*$�w%���?� I�=������A��94<R����-�UM�fCe�%�n�� @�cb7���f�˸%��В���_�[B�4�G�.� ��KT��k�ڋ"�Fی>���Ű�T�/�+�8� �.��:.���(�_�i����t��{���~�;y��L{/կt�$�1����A�w����01���G��ME�]�H�x���o�Ѯ��%� �0� vLd �]�Q����J.�����$�v��k�J��V���;P��S��ϞZ��&�2S��Y���<ƜG�a&���x�8/8��cWfY&XX�m\yoy:]��2��f��hU��(�!R!��`M�Ox�&���H����-�'B�6��@w����_�> 9f4�n�����]Y���ȂCW���+5�� �C;=Io(��ő�}9�6AQ`ٖ$�� ���M�h�?w��!�- �T����,��ꋿ��e�2^S�4*��߯�wГ��h�.��m}��8[`���O�6�3�jn�Ad��{:�p+E)�E���ï��<>g�=0�߹��ꮟ-��mol�^׆��d�u��H.b`�m�Ѐd������ZN��^�r{ij{���@�.�1>�$��Ӣ�a�8���Op���¹M{��f���)`D����CBx�.h1A��zR�qbޗ�T\ ��6��B���﮹@%����H<B��E;Ѩ]����v��`eT�T��Ă�)5���& �Q�os�-c2�6ݣ����I߮����*�Z���M{��2�Yv2KqQ ��!�[�8_<`�W&��'�La�0�20�X:��ԉ!�h���*-[��"���d���'�`��5�АZ,�u�D�^���th�7��i�o9�p��W���/���a�]���m6|��Ƈ ����]X�� t%��_#&.)��(;M�p{fq����X�A�oh��$���6Փڂ���ƣ�h�ϻyE���\-���2%��Fw�( 8�����t���^nL6p[��ђ�����&?Qg[eh.�\Zg�#��Hc�MS-�ٕ�Q$���_~�Umhȷ�t��Ƃ���Q�g�V�*�(u{���u3�0 �!-����x��+@@���� �R c���XOӽ���^�ho���14�hdF�ͧsV�|�������1P���yUcܵ�L�s��"O~K�g���y���� �L,���A�pB��)��������!.���F�il$�_�9*�<j̀�X*1�`GC$���>+a�fSs� F����n�P��o02�BS�g�5~0���(�[J�k��X��L���;��0�Y 2N�����UQK����tK�$��1�8�}% $&Ȝ��,��.+��<��d��5��G�f�r7MF� s1��61{<7�_�)}�|�{a'Ipys�{s$���;J%lv99��!`�%SPj<�biH��+6��Æ�;�B���_V�{V��?����Ue��m:S�<��]����ƹ�>;G �l���J,>�NIN�� \u&�t�R�E*}�[x���:�QQ�s\5���ҍ�����(�4�� ���6���y��.�R�}P5��'8:�=�.!�9 EoĪɎ(/vx,�\�3Kڴg'P��cݞ0�)���;���:3-O���A��\_r�C�j�j�G�T���oP���(Q�Qr�T�wc�*�]:��'��5����)d��"���.��9t��H�� "�g`*d��Po���>X=���!�RZ/"��P�gح���P�a��BgF�j3���E���7g���w��3B��¯}2�t���p�A}'�k�D �@d]�b�IZ@O��X�%Y^C$R���5ZA.��s���o{���6�俊���@0�D��'� Hf��cl%hb[�e��B>�?�~U�R�,�����=;L@�Q]]���M�3�*����7f����~0���w�7�nW�kƌy��:1��q����@��K=b�NC"r ��f�{A!��F���5F��*C��}�! �]L�� ��緀�?B�Gn ��`��Tw]p1��E~�tE�T>����b>�G�T���U��)�;��\�AO�Rj�Q?����("g+`T�dx ���\���S �Ā��̟���o*p��gԆ����CwX�'dr�{1�������������Wв!��iFR��][(��l����k���,�m�9$>�Xi���e�U��Z��+��?(�D�X�0���$9�\A�s�T&�M�fN��͆(�⒥,���c���-�"O�E��Q ���Э��C`4��Xz�{MȔ;/��vz:�'<X�00�È `Z�5H�L��2�$d7�0���)&aq�TU�[H��̈ZD��!��Gփw'�n�F�zr��[�qh{�H'o.�"�TdkcXK�?�z�A%��%�\��Y���_*Y�i4�]�)4� #\dc�CM��p��L���E�x5B�o ���J�5HA���8}���50i3YG��V�-hU�vU�h)��A�ꆏ2�.�WT�1�TN�1?YXx/�i�� o�{z�XUQ��Q�7f*�d�L�hq�Zw���c���k�^AK�L��LCq?�g�� /�T)�#?�2���:y��Y�C���=�{���w�}�-x��v�9y�L��z�����E��'��__O� ��V�&�g;J����,��=4rA��ݧ{�ar<l�1���=�B�%2&Y�dB�eG���=(�L�/ �7�(�+RRw�=6�<|�F�m��G���m�n��j��T����9&%5J�Wx\���wp4 3�uH���J�ݎ��@�[�TzcF�a����������`$M�y����_7Eh�fӂ�7����י�/Mc9ғ����M�H>�=^}����('q[����,TP2,?�δC��EP2��(�N5^�<<'�5�C)�P�4+d�1�_�~��`���"H�W���U��O�5��r ����cFƕ����2w��=�ʙ��'�V��#��,�.P v��W�""���2"B���)�)V"�o�_)J@�������)�`���4A�)z�6�!3oDy��C�0�u�4րd߅7�yJ4D�*aߌ�Q�3�>�SW�L���81�unrb���t�D�k����y),_�2Лt#�(��Ĉ"��������m�"+�k��B\A�;�� �|}�MC��`��T]{JrO�˸t�D��,ˆ,�%�4�G�_�-�N7| �L ��wr�e32�t8k��KNJ,+T`,�Ad�tD�3�i9wGS�)��L����3�ތcmZ#m4�ťE@ygW0���{(���Pl�����&�˯e'����Bx�y*r6&�0��s�����)�sL�����b�_<fZ-��?���� g´�C�AgD��f�0�'��ڍ��k�K����Wt�����w�0����~��t��!�RoVw�"P��W ߊ��e-fΙ�a.�������TP� ,����� ���uB�C Ӎ�)�Ş�ǝ� �3?WT�c ���r�m:!�>�C����jy�T���`�F�������E : �*Jp[��(!�������bJ��es��+'�\"�+� ���\���-1��/ _ڣ�ș�?f6B� ����������Ϗj��;��It�p)�x��;Z@��wu�q��l�h�l�>�������_��^��_fQ�hnv��zM�/���z�;|�vؚ�������?�?��C��>��� b<�|^�x��S��x��ѐC<�y����ܟ9���no��z+�^��@O����&��������,?��;|���g�J�:��!qvm���Q �S,�z��\��B�y�y��]�$jTlOT��Ij��c�����3����_G3��s٦�t5��G�~�hC�<Λ��6W�� V.{+g�\��B,|.��7(�G'=V�J��^�7w���k.F({�^�p��6m�{�}�$S��`�a�H��M��@*'p4>�裷 �h��mA��F�����H��T��U$*��!�F��v�ݑm.,d ,]�;1�<���~d}�|ئ��;:��Z6Q�j���>� �8 K��8�Ϩ6�!�x,� ��t^���1�r��4F$6�n>�u��S��$ʵ>�t^V��a �����V=y#��ͻ+��Ť�M�G�<` �ZɆ�z�GvH�0�BP6�-�:\*�M�D�.�6�o��W����s����s�+�f b���f;����gv=��6.��c���Oq�]d�u��k�,�!�?�eg��؝ݡ�̘��>}��+\0r:�u�s���^�7xL�E_��ܙ_^m�pB��9�L0�NsH�/úH��oW`J�/8��s�Z���yH4�~&@>�3]�q� �~ԅ�V�9�5vToIY��х���6N�$���qB��Y���)�̒� \�����pF=I��h�2��ڭ-du���"���67D���3T�EV)7]����ԕ���lKPk�!� �]u��V�4�,Q|��b�T �EB�����}_G�)h9ܯ��mҲ�o�\��c�5n�JZ���Ԏ�3~XW.�ܮm��EC��b�a��HC�����0���d�E�D0��B�8��0�a�4��)��N��\�ٴ\�< r+#%Sk�LK��6�ȧ�P�Z�7�ܞP��0j�"`��=�-"�1R�ܪ��G{��"e��`l�{I�Յ���gc�'��v;68F���X͌H�[�7Q����wǟ#q�P�D�{�v�!��m ��v[� �����[l��0�K)��<�/�����۳�� o�M�eDp�t�>�r��M�>�9�=�>����]��}<�xJ̢>vNP��3�!tGX�XE��p;I}��u\6q�>��-H��!�$�q�\��1��C�/�g� tғTɳ�r��y�rJzb=�J�yW�<�rU8z����+X�%FaH��V��I>7�� �oo-�=ipF�G=t�R=}ׄ���:��l�U�u;�pO�&O �(�น�MZ�p�r�ܻ-�c��e" V��r�,vŷ��W9[dc\jܻw��: v�wQ����^��o��0|r��I�G��x�8���0�U�a`�\h���2O���=W^���-�[,�n��k�)�llʊ���h�*A0;��J�l�tZrQof�魿�|�Kjr,,A�7��(Zyѫ!G%��J���B�>�u�gݩ���MW���L\JL7�����4�P�;�)�G�N�5����[h�f]^����O���L>g��9��,��Y��-�4^<0`{j����]�F�ґ j��W����#��'���ۡ毼��Rf�H\�,�DG9�s,eR���[.k��1A�����nޓWy؇=V�v�KM�I߁�K���X��VK~<�C? �ph{i���]2훦��W9�KR�$t�+5�e�@<iPL�j:#���U85U� ��t��@Vm^,X_����9(�!�"��[v���^C��+ s��G|U5x��J������dfvaɇP�������yS�l��d+S�g1uy''�U@HG�y�A�,[�Ќg�Y[���5fd�M\����0�Cr���p>V�0�-"�W�29o�a&h� WF<;o=���̄巚S�0fc|�D(�N{-�!+ڇ�T�Qh�#� 4w�T����ZY�$�ԛl`Vt�i[L��Zr����jٌ��)�5F4|�AW6�4��V�"37�3�=�^ ��H��i|82� �1�]:�Q��ɋ����*�cn��應ac'�������PJ%���?'Z��ry"h!�I�~X9���(9$��!�m�.0X�B��e<p�2)U����`#�!(y~����0���6!U\1����`2�l�,*��~�1l�\�a���-z��@֤q;g$;Vx�a�����U�����Jkn���e�c�X��Q�0�4j ۧ ��Ad8�W�=C-�;�����t�a:��klJ�4��mcA�v�'�u@�ѵý�� `O�(�M�� N%R�#�_��Q���~���~f���dZ�����v�b�4��Y��1��g'�=D.��ԇ�3,�S�m`�k�?��ܱy��&�7�әC��Jվ����� �-0eWue|��v�\�����L �>\���}H���d�����PR3[W��^�4Ld���#�@B��v����G։bT�n"�`�d�Gp�P�' �H��2 4�$U�Ν�d�"���F�H���T]Oҋ���&8���6����D�,\o�z���lA�~r�l�A� ��Ooh�)��j�ؤ��H8��]Q��b��gz ]<��%��](J�d�8QS/B�[[V t���.$��ڙ��Q�"Vh&粀i� ��%�<��)(��|C�!�U�z!nr ���G�T��X*D��L�?��8�w&�oF�m9���:����5[ �W4rg�'�.�c�,��B������������dב�-/�N�bG�j��=�Sg���iq��゚cs�&�j �N ��a�0:^}>�?b�_1��O}m�Cs�^^^���@?S>/P $��g�'�lխ(`g�5���vMk����l�z]��H�̐�p&��U�/�wy�����G �# 3� ��س���1y�i��:�� � C3��#sk@%7���*���mЕ��Jܕo����w���GCDq�m��*<����x~u����L��f�M��+�W s���|ƲH�[��kRa�Y�<��6��M�!n��)�5��Q�=nťv2�f�p����mp /�Fnr&�e?�-�!EM��&n=<�;�6k��z���[݉pG���%(�Vg#�Ã�ٸ��\���F�N��ɘ,6�z��Q�sh_��A�#�$�1[:����5��F��N���'�XgV�s)�u�,1Z>&��ԉ���Z|�J�I���Z��*���e���p�F5l��m4 �C{�K�BENK��BY,P����� �\���K���� ���U3��>�fg�7�.�v:��o�L��*g6:�5��j�Ӛ��c �a���Q^H�Ѽ��!`h��m�p�̆� C������S���uFe>�ɰ�b �L���~��r�H�.�}��Қ"X��Z�)K�G����5U�j�Г#��4�w���Ot ��xB"��=0��5��gh��rH�)E �!�7��K1�xK^)�)�Uɻ��<��%ګAK��5|��� )��!s���4��� ��Άy�qowO}O�d�Y���KxD�2�%���X�P��9��᳙� V4R�V�����Q�9�� ��=^������Apa�� S!���K��Ӣʉ)���k<g�m@ E��m��q�t��~@�F> ����&2�@�!�K�'���5X�G.��4��в��;E�Pq"&��2���p�^�[�l�`l�K�,�)�s�mȐ&�aw��*��L�R��3��*�n0�oF����y��)�M��r�%���S�Hg�4�S�R�\�5T�s�1��������2PP���I�q~�v�^�rT5���j�5�0-��o���pp�����Ө�a��K��Wd�Q8�����J������F�!���QU�t�;<Aܾ���vT%���c��<�%���9t�tq�3�eT5(6�Oz�(|!dt��[a�o���*��"�����r2�}U���4�FU�♷zm�.N:�LwVhv�(y�B��G�?p����>C�]���xdl4&I��j��ګ�+�AV�d#Kf��$�`F$냤Aڇ��`% ,Sp pp���l��>H%��g"�q{4⓸j����g�|��o���H�<�2wT��v�ᅬK��������~���d��7Ļ��Jv�D�>ȃ��yy �� J���%T:�;�^r��ٍ*��Z2ѣYV抅!�d[�����0�36^�yy-W��J���>� ��gT˞��G@#�Z��7�0_�9@G!|���XT��4�gN�։�e���9V�$r���l�Lڇ!*ˀ��/���o�M AH#.ɬl`e�l� ��`��˔%:�w�@�����^���ix`�.�Z�E��Oc!�g[��bee�Xz~�S^�lN�X��%�Z��z�_�8��d/���C8�G���`�h��/Dܮ�iew_���8V��o0$=����w\Nt���$x1nǝV�)��x#&8h�&=��S6Uy�B��h�i���k\v�!r��[�G�k���ԙ�ħe�Hu����2�,�O���ӣ~X�nc������N�?|j��G���-��f�Mj}b*��'ԑ4������췛͝5����U��^�in�Scg{gG��_��*�%mg �;�ǝ5����h�>1�i[�W7��w7�/?j4���D>�Xjk۶h笹�����&�e�qek{M�֖7ln3wuks�����ږ������/�<6v�<�_+�\Z�}cu�K��V6������P��������iG�|m������`uy�0qwk�ъ�-?Z�Z���+�$s>X�_��� L�-�N��hŴ����H�y��T�^z�`I �,�u���u���:��#�#��_����i����c��#�[8"�8�l�Sn��V7��S3���� Yd��0%CL�j��)Z��=�s��^q?�?)�֟2�e�m���vx o�=�6N��"e�ȡ��7q7b�~m �;>T�{���ة�����L��h@]`i7Nۧ��y�գ{� �N+{z���h�Q�T۫l �b��݁�4�[)��aN"�0a ����xȻ���6�5���\�n�)��&��Eګn�;�xz:@?�o��m�Q/c���]�q�!�_�u���A��H���݄�]ek�r.��l�W�Ms � �JWc��9���������V���m<��~��5Z��/��� ��Gv[q����w:�@��*ޚp��E��;� R�F}����.�3���@�+�M?O�ҀY��͒�5L��� �Q�Ɲ>�6�p҇� ����1��o��hD�����qo�F\T���k�ɥ�2~Gl�d�(}��X�Ep h�த�P(����<��f��*�"q�v�N<%�&��]�j��>w�+��IJËas�&'�&�s�� ��Ж3��a���Dz�b�дվJ�@IvJ�v`��|ާKy�(H�,�LP�o%�e ^ 쑔�R�� n��vx!�_B�t��Q����/�FDOXy��q�ln�{���?{�<�C��4)��F�s��ঽ7R�H(����E7���)6��,mu����g(��3`f6_��@�@���/`��g�� ���Ii[�γ�P6_��_��&��o���5��t���%��r�r���R/v�[�1ҝ��>Κx���3'��Py&z��*PKbN����Ȩg�xʐ���'s_���<�G�M^ɓW��y27�-��'s�K���u�����#����̯�'ݮL��_�K���mb�KF0�آ��x�� 0�}�d���U.�,�^��2p�2K�5˻X�bSa���*�B*�JUӋp��E0��"�jjH5���ZQ�^�(R �_�"�/Z s ��G&�KBP�?�s&r��}d-�"��R�����&��&�6Y��S���6t m�����t�"��-�P��|�J��<� �-&J�'�j�l6�b�d��"e2� H����-���m^f.�'�9Y C� j��t��Ϣ$b�0E<��z��I6�ɒ� ���y���A�&p yt��K�-Nd7]S���MW��8R��h ��j�v3� L����Yz}��aw�[�'CDM) ��oN��Ǡtqq� 5<! �}PKn&�C?^;vs�䠊�O��fk rT&�eY1�'�~��(7Ӧ�@Ƹ9z>��@�{ˡ)�4-�V�2Pn|���M��|00e%�d�{@ߺߐ���SZ��D���^�è���e��PYn^�(��t(�7�Lqy��@��n�*��4� PKCE�t�[�PKFTLdist/summernote-lite.js�{{���>���O���kI%m��m�؍|Z{��^[n�� %Qc�THʇu����0��r�vWu�1`0��`\���55�N�G�f1>:���7��7����x9�7���0�v�`�����+�����|:[���r�y{v�n>>8\6�\���f�5N����N����U�Φ�x��,�15G�w�Ψٟ�F�w��x�����d���(�|�`���wG��h`��.G�Y�6�~�����W���#���'���x6m����pr����w���wǣ�~3z{<�/͍7��l�����6�}4�;W.0��쏧��^�'G՟�~<�G��?����z��\��S#�5c0<�*��p/���7�����ml|����xq� -�t�ZZ��<Dk������h�_�����o�O�3��]��'�eo� �EJx�\gp�Λ�#v��Fs壏��v'������ ����P�h8ur|��=O����fv�Av����p��&�m�eP���BP�\DŽ|�YAX �_U�WLF�B|������l9�L@8�Fn`�����H<�ui:�����Ơ������q2)xl�}8b�yQ���.�&E���І��6v��Ѩ�����mBTU�B?�ν�rت:��## �W���u�̛�r9�\��f����L �>��8�ƥ��:g�~o�U�rՍL\_��o�"$���g���c���h��Poz�����@�*���w���Lɪ�fA�0��_J���6����C*��JuA��O������e_�� ՜�;�MbRzE�++��DeɃ��1�މc>Z�̧�4����e����Χ<� %�^t��|$a�Ϥk;�j�3p�v���τ���uыk/���OM�w=|^}Y�9bv)T�8/����~�q�%��� �zQa��t�5S���R7�}*��K*�(���k:zs��,���;��ܞ�&������'�T�G��"�UFL�x83qf!����\���?\�9����r�����.��J��'���lWK����g�!���ݓE��x2�Q��3[.gG�T��e�\iTʛ�2�a�Rm�g�q�)������n�^�qQt�Î�oV��f��p>���x�<E��ҎB_^U7s�_~��1���,Znv��5Фf���������pz2���{� ����ٛۦdB�1u��I���~/v8���1um����`�QP�W���-,�'�e���6:�0�N����Y @g�A�ZX���~�hk�k��d4|=�'X-�ʡs1�%�74��M�݊�D^*%��&0�;�&H��,�?kX4U��E��`?�rS ��ٙ���s��mc(˒�F<�*�{ �q�z�ԣ2=��/FKjQ� '��� �1�Di�_��<� %��J��n~���5+��ؔL�߳�kR�5�Q�IQ���A2�Xhl�7�v��V�qC�V/�%f��4���R۳rY��I)����o�{0OS�`�JR�K��?�E�i5����`��A�*�"�Z8��UU�Y���],�J=ϑ��c���7VA���M��h�S������+�'ͦϽ�z$m�K{qRSU�@RK���E� ��?@�ȸ_�*� L����q��&�H������?N�T���(3����s����9���X���U�G�ٺ]g��\����'�. x�B��&*� ��/[2K!%8 �Kٶ�I����`�u�7{3=�&;u 7��[S�yr�m}��5��U˕4:Wʙ��.�m��2������LAxI�#�_�#j�6�Y/tV��tAF��C]�d�;�v��̓�����Q9;+p�R���1-�R�=5w�;;�a+Yז��X��d���$�ڜ�F6Zz�� �ў 1�T����, ��O/���{�fG�[i��rk�FgS��~oGM�:_C��ӧf����ѽ�l��_�4�4 z��Цi��2�r�W�o6�4L#2�B�Q���̕X�̆�O������^���֍�tTE�N�0)�@.���Y�2���S� ��x�c�e�$�����X+{N$_J8 �#��ZJ�6�M�v>�\��}DO�.�]w�i;�V������- ���b���@��IB���:�l��,�_dz�N �FW���+����[�����"�"S�׳����9mR�e�.p������%�'Է\��!l�{�d�mߞ���"�.6pיP `͍��:�@�Ƭ�&`�6C�� �Au� P%|<[��� 9���b9h�\Hh?C��*��R�pg1�`Z: ]�2U���b�>� O-�M__2:ע2�h�'� ��U�fǪ1����(���究E5|�.e*�m1;��Tv�A�r+�wg+�.F�aӏ��F��`�*r#m> ��1�T��sl'�� �p���cGlW��Z��`/6��dt�fd�h<=����� >��0дM�o[ z�^lX�D`vfo/b�j<�<B�x��ZP<?�mg�++��'��D�`��k� �3�u/���ɢ��/d=�.��e�R-��9�^M��N�B�q�xǼ�U�m��p,��b�?���ҵ� ��,F�W"��*����̐Z���C|�w�&N�pg4�q�]Q���4�0�y���p���,�͟bӇcd8���}�%�]���Qa�WH�ߥ�-�]�7j|�;��g�N�� h���c��0,�q>7.��\l��\=C����7�Q���'�K�̴�8�dr� �%�O�b�(�dj��*�� [�+���4���.-�&6�d��**�F��C�;�F;���~3�� �Uߪ��L����M>sּ�!Ma'Sɖ�'�m��ƥ�%+x�F�r�S�M�way���Yw̝�A7�R��� v��Ws&�w`Yr��NOy&�dup L�]J��d�b���S�vB��ŕ8_''�`�VIe5��`�I��u'2Z�+�Q(��e= lN౷��<I�!$S���x.�̈́ S���bs8�߸�/�ɦv�"�ʔƏ�^䳖�#QA�m����aZ��IB���Y�6: Y��� ��hRL��s^z��a�h��!ƨ8��f=GWZ�0}o6ղ�(�X֒Ra2-3uM�60�e�7���`\l�$D��'&��ay9�ip�UKڜ���݅��i� ���BOF�C���h�Zݞz�i=� ]ظ�(?����!}�>�_а�@��.�_�q$N��܆���{��ύ�[��u[�p� ���7 �s�)z��|i����b��%�Ҵ8����T��C���V�Վ���2;D�ijf �1ea|^ۦZRUL�7Cf���e��G�)�0iN���6��ʫ]ZZ��5�+���?�'P����Γ��P��fu��B�:1_R�yg����2�b�XS쫄a1��2�L� �x���tr�z���v���,T��LB�� X�?S&��?K0� @��Lk��?� a#bx0ޱO�0U��j�&��i$SE/r����U,��d|�}�6�E�g��xq�eu�Ϩ�+�3V|��8���tW�������c�9�V�Ƞ���|��v��T�俾{r��ww��,w�j���A��6���L{����/�dt���;\b\΅d��7�!�����Q�8������p���$�=&L�Z~S��m�!v��ӇK����� E T'ӐsVB��K��2컿���ϱя�K=��M}��/r5�l���NL��� w��Ӟ�@���@�N���)���� [Q�)6jZa��R@���F�=���f���_���]��k �@�$ڶ��6EvuZ�+��ܿvWF�@��v�^o�.���m��#���r�8��U�]���a ��K��C{�4 vi�3�Pm5un��$�%�����-�_��b����o6�ң�_RED��THr7}�jj���y��7_FD�쬢n�:.��B��;HC�����f�͜U����q��7�c���Tgv��4��k�w�.5-O_M�X�S]���)����1N�ϗ���)����^�YJ���k��UaʿK1�V�)6� :[�2����ś�0.��G��%�%���RJ�S���j\��Qu_=�3"���ĭ�҉�I�uG�ڔ��l�3�8��U�`\fm��w �w��Ufǟ!�\�)�*�M6�E�z�ASM /�>f~���Z�'�%��gq�B���VB���Ԗ���^ ��Lq6��3�\��\S����f�����-,���� �`���Q��M�,=%MJ��Q��=�iu/@��.� �B3���.4����>HmFYd��amVt�����Uۊϲ�D�\Z�� �@F� �m`#{p|�8>)��_�K���+wn͋.��.��X�c� #�+=���$��uq���l�-ƙP {C����v}1q�C$_�]�e�\Z�8�휱���N��;�갭��ep8��VgE�hf���nkϑ��M�5&G(0�d?K�f���+갯�j�2� q��u���%wK�ee��Ue�)[�zR�><M��Y�����$7<�9� ��-:��!8�)�pؾOU���>Ȯ����T�ݦ�P�Gҟ��t?���;YK#�Z.T�2��^R���r{�]�t�ZnL�S��)7�̃�d�����s�WZ��Be��%��6�?�߈2��z_,��v��ʆ� �"��.����ZAa����^]U1�:��2bR NG�G�SX�t��N��uo��,.��q�����#�-�6 �@V:� �� 6�\>��ǮEBʬ#��4O��Z>:W��c�aVӦLUŴ����Nn�5T��!:���Ԣ�6�� )�v������d�Mp���b���@ �����K��D�t"�8����]��[�n�6M�+�V.yH}���p6�}S��/� a+�Z_Qk}E)��a"O�S����)���'O�}o6?.K�J�}%�*�ߞ����V�#���%W�?[��MH=����nf��jt��}�Y�zO ���^r��$cNUP��ɔg����D��F��n�!§��Ӳ�8i�{��k/pXG��s�o\{��d��M����6�w�;B��!tD}*!V�߹���pPQ| �L�}r��1���h.gbG�b����Pa��9dBԂ��|h�ɮڽy�""�j��p۔��/��g�e�$��-pu������"I��5/8V5�i|5�&\.�:Z�[����bF:%{2�p+fls�-,���(��-D�/Ɏ�e5�_��ӭt�ݸu�z:]+8�p=�0����ъ�� ��)�MCF�E��ߧ#:�Faݜ �S��K��;*���[����$���~���=ûY�N-S�����搴ٴ7Nf�G�ʉ3;��7�ٜ�!�M��T�۔�6�|6�-% "">��!��Þ��|��@��Xl�:`M(�1CE.8�^���)i>ԍ���D�,�v9t�iY��p���eeV�b)���?��U�T�CQ�y4��$9�v��q��Ԁ<�F��ך�[I��gmE���>�$]~��-e��cT�:��qZ�J]L�\m�nٟ!�ZC>�Y���-PV�i����=¾l�K�l�qP7<���%6�F�u�I�5t��@�@}�L��[�m{�k�R�z_ʑ��KV�KX*pq1����`5_.�p�c�J��DX��¸s�X�"�`AQ ��BB�8�����M#�6�c^$FN�yv��}2ͺ�&I�Wl:��"���Ʋ�x>�y�w����Ł}M���aQi����[��:�>.+��6��X�mX��T/j�;u��W���t]*�)����GSׄ�~aU>��bs1������hs<-J;�$� "� ���#>ųI��۹�"�>�x��b;s���wwG�Kl��.6r�W�߸�jq�l����s~��"�>n�>=0�ݺ?���>ą�_�bF�*8됕��fC6 R�:tZG=WY�t'�G��s�`)0��د5����#g�_�*��i�[#�E��L�+�6@Yz���:���Y�����j^�|]P͢Y�H��9b�5��8�l�;xƣV">��/P��l��ږk��hR4$$���!m[ �1��<�V��#0��-�8#5ڻI���`�h��xo�*]�kSg�Z`g���b�8�"�^���@��Bt���\�Y�o�(�gǜK:�jL�-Q/���B�Լ��1P��8��^jk3� .+6ٶH�P�F���i-�!�Y���}\�2��F�,CrV�M�6V<v���o��M�J?k\&���s�<G���Ϋ����S��b�|�vteщ��ΰ4��Fc�X_�҃� -��|3�ǘ%=Z�\C:� f�2��]n��^c�F��B[�ﮪ�{�jʦo"Q�!h�t�o#+���� �pU.�Ň'6��MK�d*ˇ��^3'��Z&�u$���ἀd�m��@��H���O��_<�?6�-<z_���&�<����/��N�@�^��"Ʋǩ�����-�j!M%�] ���v�����?�W`Z��4=]]s��]��9��yᗶ9�.�Ȣ�jo�;o1��I|��s=C�|���v�L��Y3g�g qK�� ��sێ�ְ�^���j�!Q�W�ެ��RZz�8d�~&S�D�?w����Lt�$���M�I-7���]-���ɢ�bo{n��\α��k��\P����'aA�t�e�`��W�5`���y�^���[ w�d��P* ��'2��6�y��/�:ͤ8��6�1[relI���$�F�-0p��j���fG�3]�H��)û��kSrhp.����>^Sv2Wh�N�����+�gOŪ9��m74���19����~;t��(��7{ə��DSaUM�5��8����Ռ��(.�3&��_����RÈ�tti�Q�gj|Ty8������+j�#����u�Z4�?��<'�1�O�ta�r��a��W�B)�?����W�ûj�2��gۺ�(�YZ�̿%.��]�P�EԳO7`E�^�p�W�Lb�[���-��K:�c�O6 �Nx�y���x�&�*Ya¯2�<��^��v�pxy�:��� ���臋�����Q �;ISi �@B2AB+^nģ� ���0O��>67�{��W�X߾W�����w��UE�"D��(3�!���e��V���fXލ�]�ɳ�%�[�J�_��Y�I<�*e��;i�I��Vg�8y0ݟE�!}�G3��&ۥFNfV@���j]MFq� i��__���h������.�̥1IE��U6㻢'�p��U���븧CJ8y#�(/�HZ�M7�?C@P��}���A�$�;��Op{0^q�� ��ry�x���{�+�!�O�)���o��Q^�����C�k��q� ��~`��G�ɻ �w��-�>8� ��]Þ�,v��c>����`pmf�J_5�/9a<ޓ�I11Vr_��ؽ(�Ξ r����B�9��< � Fo�w2��� ���p����� ��'�9�^��� ���Cy��'w�7���k��N���l�ŏ hq8<=���?�7��{{<��eP���><9ڙ���MI]�F��vк��>�����_ ���F����q1 ��n��lRJJ��Tb��&D6��)�� �#�bU�����щ��QNQ�kMh<e �-E�*q1�E�ރ���/� 뀗65ϟ>�rUu�ԃ�U0���0���`�ܬ�%���wV!�<���5��GT��.D�F��hcڎG5���N�Ov`�G�g�g��o�x`R_n�@�}=��H �_�lt���g�N%�iԡ����djşˏ��(Ђ���ʡ0�}$�PT�U�v<W�ʬ�Y��p�$�����dOT�4�?U��T�{��!��F'���Qs�{�b��5��ٛ�x�Q��ޞ�R�I!o��՛!q�,�Io�=���$J8WN���tX'����?��7��VT~�~᭮�5g�� $��` N~b�"W���:��)����";�5"KĬݶ���=�сz^�c-?����O�[5�X��m,����k�y_"Ěku�'9�:�Ӝ�i��Y���<�}^�>��c�?q�%�O��9,0���o��UC�P�d�3�v�G��}�SѾc6�D>-��|U`X!�^�G�Vv��MgK�c�&!d�MZU-X n�z���y4W�ȏ*��נ�o���<P)f�B�g�C�iB�5j��`������/�!a�uu�+�۲�5^ş� �|�g?Sy�<����Og~�ԭth�F��{�6��v>�Uч3j!���x �+p9�(ط�Z J^:�@2��N�bΙ/w�c)���k�?���̆�=NP\?�,���ЊdN�`;q?@2+���R�ӃK?u��[�uRtg�c���F�o�N�;�&P�χh4�~��Ľ/:٧�d��*�*�C�a��&��������Ė�#��xKav�����h�N����3�c#rLn?Q��=�U\� �r(�c����8C�w7,-�V��)��D��ͥ���jU����m<{7EKd��a�H�n�f���]y=�-��iR=���4/Jq-�,`�*�n`��4�=伇B�z!}��&D�U� ��6[v�� ����`���M���:ﰔN<g*���c�oc'�s^�>�±�P�p�>�i���{�5 {�����V��3��M'�K�������敗���k��~��������-d1�E(DMb���X�9M�\���nn��3>�ť\���c6��Q�k�^���j��E�l'���h�d�ȖqRd��=�{�������[���>}VդQ�l�z.�)fl�B�wal��G�D ���������1��#y�O��F�㶠�홞�q'��ўxmG�s�i�����N6�>��X��,�Ly#�nP��Ӆg��w v�>jl;�=��Ӄ�H��[�����6Ŝ0`�;Ӥ"$�ݝ%��#��vm����x�y�S����z���=;��>��~�RB|!\�M#��+>/]���^�\~(�����3fY,�`�#�p�4g�ڽv:i7��'WyDU��^0����㞱?^�̀�fv��p��7�~�6K�`}�*.�X�JDrx����sY�rB�T��ž�`�P�̀6��;"�'�[�cA�t�z|���)UO��_?{pW��O�sx���+�k�Ӎ �θ�7����y����|�,�r��<o��M�۽�_^�W��0�-�r�A<V�1���03������K�E�+u[[��2�h��z����?�|���u��ߖ��v�a�/��W��+���#�X�~=�w.\P�� �*�/��8�u�3[Jߌv��*��A[0�w߽ь��O,��w��s�%�ʔ*��c�h�Ž�xR ��6|=ڻ�|o�� &I�C6a�qW�M3�&���~_ �D�^�}�@�RF�c��%���z3�U��!A�w$���q�.���Ħ �s�_r*�FGn��ͨ���ZN�[�yE�����`�䂨��X ������4�Z�u�Hd�ی�_���/�>"�Z�� �� ���_���y�]ʜ�&G��ޕ�:tROe��?�f�y��=�b�*�9_�U�Q`۔���d�r��0��v�|٣�[Uo!����D��)�dg��w�vA-:ࠑ��of�WC�N�^6�c���8>��j���ղ��8!nПN�x� �'��X���l68�\�lg���-m!����f��dħnU��a�ޝ�_��K�B��2�~@6m��:�$�JS Q�3��5��+�����`4}m���tco^K`Z�g&�V��=���`�Z@q��>���7��������(�+�J�F� �d;�Fz�%66#���=Fh@�Zn6�v���Ј^��^�+e�8-yڽ{�%�3��+��pSx��O��D�����g��1������DH[]�6&���2����̳�>na,�,$mU���@�oa�hc��d4g̖�Y7EE�?(��&��\�kg����0��8���c����~�)�Oo?���k.$CXc�$��Q��7�� \��x�gs�gX V"�7o�;Dbe�m�A&���Ա`��rg�:�������[�K�j��bKl����>�!/�F?~��y��e�P�e�O{�^��mU�k_8����E��U��k5�U��Ǟp $���ì��W�2c=#|a���ɻ��e��<�ށ,Pô���5S3~vKG�[�'TJ���w����1bX1�����g;?\n��0��U���E�ZꥵZu��K��������fL|Hw_�d�g��͓� |\�w�$o�V�ۗ�#AK=�1�)֪Q��g ��,O�h̐�GA�0ߍ�Ȱʉ����ù/PJd�X����� 8������|�<X,Nl��S�����[3�Ԏ��p�~x��Ľ"ئZ~�8�J���o���u�F�)�bqFs�B�(މX�M'ĺ|YZ���3@��!���u}���s��/��R�?l%�mK���A���� �Tz�-Spq{v[՟"��ox���Ҹ��݁��7���uV� ��:A�'�ГN��+ʴ�<�9;~�`ĝ��^1�*2��Cjc��rZĎ0���t�%���c�e�`�ð�,*��)�'����RN_r9���J�!\�!i������~ ��#&�����K�v6]�!�z�o/���N�����&\�4%_���m`�`!`x/�z����3FTm�n��ܬ �a������+��e5�94��g��6��+ѯ��7{7��p�r� �;�6~u���B#����:8J��!LZ�f2���1���j=��. t�x4��ّ2�tvp���A� M���!��*B����&^8Ϗq~`��x���5BE��*l@���#DJa��&�^�I�:eD� �q�aADp���=�_v'�;l�B3�^gB�݃�ƍb8��|K9�<�ǪM����B�P��J���ވ�yW3+�:��Z��B�!�ѡ��%��N��`u%$���Chv!��n(�<����ӌ]��c����Y���)�si�Q\h5�9�G�f8�b4���`ٙ`z��4H�#y!UC��B� K��o�6>��[���I�w(EaF��Q��3�Ɣ"�g ����q��G�^`:����%�%V����W�G3gZ�_��͇����~c�b�<�iN�N�4O3�4Ԛ�&N�� ��`9�q��i���4���e���4M�պ�RKQ88�h�#.�T�5��p3�4�`��|>|ǁ�2���}мr�������!$ix�.��X��P��jY|M�ڈ�hz�W�6�k]T�?4'nV���'D����i6Etfn��؊NVS6��T朚D���aL�>�SC~q��g��-8�,�r-"R'Q�·��:_&��I��x�-F$Z������/�x��F�#?˷F8��b+���DU �a"��j�%�sMY>q��>�e�]����f����Z�I�d�c�{9M�@������$�R���"��4\����Ak�-��)�~~���+�Z|}dX6�݀R���������t��"�c��%X�x�X8.��帗��g�h�\�m��c�&��d�1�y-8O��T��8�K�f�C�H���{�q�ę"�`�-�WT��O��}��aJW&:N1*��G�\{'fٰld��E;�Й́ݺ?� ��e��C{3�ԸdB'/V#vy�Q*��3 k!���7>F��ܼBW7�������KyS8��'�V��M��{CF�?Y$�@T���.9?�d���0 �i��Q��=�,��������~A1���g�'4�9����.(�!�+5/�� �pa<"� b�d��H��(A�@2:��V��� �m��܂��u3ާ���K0*�>��e-�C.ɼ(/�k�ӲK��J��g��1s���V�i����ݼ!!�2�l�P*H������H�DjȜ�_�'.�_� Ae��}����Q '��,�}�:�l�p���X�c<�x쭗�NH"�=�U�t`c~�9��Q�� �^x*�M��i=���.�L�����8���Xݗ�.�B���SKS��A��T�0�i,��RŚ1Z�$]1� �|Re�y�u�t!M�V�Mݫ����xg��\j�в�Ťe�d�<�,�,�2H��.@;�B!0b��mC./�˞�:%70�v�(�@_���w� Z1�FTˢ������Tf6�os�=uO�J�3?(�����و��:����(c_���K_���T���W��V��S��������_�v��Aj;j:�t��'��?�V3�5�+8�_�ƶ2�oP�?����&>�Q5�*E�i��i�Ț�������'�M�[[���������mo������#Ī�ڧ�����w��û�D�����%�.N&��û�����Y��O��=}��%���G�u5�R/�o�����q�aܟ9 |3,�sC��7ì?�H~3l�so�����k��3��������;9>� ��Q"���D�������u�?��?��ky�G�����[�������^��J�t�<{���>���Y�N����?�eg|r͋�|�'�xy���5JXGd �l4?� � HdX�"Y��tE�����J��`�R� M�ߨ)�2���`�`�_�6u����(�x��P袄��-_("���7HcN��rS6�_w����,��Y::!//��l}Z�I^'+��I_��V�?���+��b����O��Et���y��'�7p��I�t�ރ*/�+���.����$⢱Y%/bS���v�L�[���u�����z��;�9�����kJF"��~ϥ;�����w�<��}��X����h?D�#M��t5�&��U�B�Z�{��G�XCJL�+p�AV��y�/ɸ��1ɺ���G��U� pi6�6�ƺ��ԦuM� �1~�#��|l5��Z�8�x��ĭ(�+5� �g��$���G�W�'X��z�x����V��� ��b��y���\��;wmrj�ưnkS$mg-���s��W���WU����M�C��J^�kЍP"�<K�c��mU���|�|��+�aV��2F������8������YՔm���O;ɽ�~�_�bs�������Gwt�������H�����v�!��G�#�� �|��[ �E���|:���.�&W�\��4�˅~am0�_Y�ì�V���׳�ަ��j����p�o����_��O����n}}����z�����=y�m�'��+$NTS��� "��Zeu)�Nփ>@�p�.2a�k<j����W�{�w�����W�6�i�<��8�h5�&��C��* ��7���'?���4�ŵ�{y�V�� �hX��s!�5�* ^�*�=yz��P��^�.��ُ+�Z]`��Í����X��A�U��5|�ݵ��{�bx� �;[�[exCM�<:x5#���ܸ��������C�%ƌ����^�Y��ە�I:��\� ��bIo%tUߒ�����g;������O+��awM9����;?�m����ϼXAƭ��o��?�?Ɗ�����,�/�rx Wf�T.�����5�ũ�d�RG1X-y�E��1qa���R��E��Z��,�V-,�v5V�n"\Ѥ[��<�v%�is�S�\mg�b���#:Y)[+'x��@u%�&�a�Y��r��'C�2a��Yap,D�2�d���0��N���d� f���2��lf�r�c�W�=6݇�q�8?�ٱ�T0�P�vzXiɕ��������h��7;g���FQ�ދ�lΠl�� �@���3�اq�����b'�����DI�͂��q4�n��D���u�����_?ԍ������;��6˃P���ҳ���5�_�d��tgq�*[��^�&a�8n��E;����N���XB��MBh���.�U�mAt�㐔 睾ܙ�l/Z�E%Z�P����M����\�����,�V�Ӷvz�MD�EU-�l�{:�:ID����pr2J��Y�\bV��w�J˟V0·�����Fsr��0DT�#зfI#]�:�į�Kr��sdb���J.�)�X����d�X4�$�%[�e�L�q,�!�Oq�A%ؓ��Z`+s����M�ӗW�o^�;��é}��3Ӥ�A��H���8�Z9�A��MDE�����[:2c��1n��ܖ��MjR�e@NA�ʕ��%�a�EuBƶ��VO��C�dž֜�ԹZK��=l��gL�n���P�9�;�lJ��md"Y1a�!�u �e�E���U�4������,��µ�+"'����:����0�;�6�%!L:t_���W�Gt�l���&\9�#l�Ư�f���o#go�4/Y�3f]��t�Eє�X"g%D����~�9���&�\�g!qa2E�n�21�t����Yq8y)�Vمa�Qu��a�S�V��$�͈�����MSU4��̎��J�&��l �c�0@t ^]$�U��-3a s�(7���N�Ev����z@�iq��I�- W2�ܰ�ߢ���z��h\1�8��[�op;f�|ë'�`ˤ��V�\D��j-ES��ҩ�ݲ֦�7Gn}� dX����}Oш��S��8���z��������+�9���q<(q�J���$I7�o8qê�X�eL^�/��' �cR<}��\`0{h� -#���R+��I ���O�C���T1�)�a�z?p�k��\�x��4<B��g�V��`9:�.���)�ݺ#����<콓��`25M&&�4]R�� ��r�Is��.:DD��,`��"�88]�@�i�ڟ~3����-�Q�P-�83�oI��-���cj�@��30�lJ&]�1p�� �پ�\{ ���� 4.���Æ4���B��|�=���0op#�ٌ�G�.���v�E�L�Bx3�Q�&,V6neRf�O���� a�=m}1 C� �ܐCPd�"�G{n��o��J4�Y�],'ftS *0�"��,ճ���]X�i�|�*K��ʜ�����!J����F�c�I��85/zGU� ~' ��`2�dE�>-ﻸ���Zc��* �J�}-6�S?8�E��C����c��ӱ ���� �A"� ��*���f�h�{��d����XbZ��E�S�ȊB�B����� ��q�/��{��wrk=rO��ŋ��x.q�S1BW���^�#5������� ���m�F�:�Y�p���)A8'�d��h�YL@�$k�Ԏ�-Z���K��#����氹�8�(��K��G(�����5\nE:�J�.������pl�O�W�-����p&�!��y���%��_�.��cm����%��^add�Aʜ_�3���? s�f��#�M�o�U2��2 �St�v��� 55zM�j �� �6�8 � �֨�ĉS���dE�,�0#e��6�1*� G�3QiE�R���J��D�gKΕbL����[�+x+���Z&��_�I�N�#p��6TbL~.\Ъ�#�"�-\ц$[�tM���R���N-n�@v��?�.�c1/��F2��IS1t����i�r'F1�����F�u�,�/˞#Dp}ʈ�V�!��|�����&#�P�!|�$Z�@�&q��ll��q97t�M�z�� �_"�R�mBT�X�UWG�Z���뫸��&E��_V�B`H���KFL�@OR�Z�"�Y��bzB�f ƃ��,� �>tK�� ��#+�(�#�3��.N[�H��I�M)�`U+՟+�+���Ů���j7D��`�c���%\�L_aޗjV�[]g��z�Z�dǾ�R�i�W�E�fٽ�����VTЊ�R�b3��sxq=���o��%���|�_��'���Tw�!���K)�x����22%��q��4G��#�̍\���e�<sablb�B�V֧��I�1ѝ�{�Iiż��}�\�p�Z)O�ϱS{N��^�P���!�����K"3%'v!��q�').ZzX2UY25���>�6��X�]UP�s+�DB�߇]e���J��]���S�c��#�H�O�B�<aǞ�'dziRȈ��J�GuI�m;�YR8���\N kp�e���Y��U�'�s������gt�+��k��7أ�֬-�r�U�M�r�@��-�{ۙ���ڵFX�%"������p�FQ3N�Z��X&������p��7����t����LNKI���%QJ�c�߶�nM�+�����g�,���S ;g�����"�� �d��a��jF1�)dG-=��ؽ���qz��>q���$� i�AfJ��^�6�lв<��ܢ�Ā�}�.Cw0F��#l�y�B�\�u�.��'�C5X@�0�2V1�bz�2.�T'�~6��>X�,��˕g``Iej�/tpE�{a�h��9�A�2)��"+��j�������+/��@[�c�|y��b�҉a��ϊ��6��$#�~ϰ$��x�9�k!k�+�FI���e��m�h���6Ne^IA�b i��-8�`O���I{.bکM�h�m��e������N�p���h�|ƻ��N� 6�l�Z�N�X`_�vAM�rK�Z�2��l����r���+����Z Z���X"���]ܲ,cH����,8�[�x��|!�Du1�(®�)��ǘ��+�̮�_q>���;i{�;W��0΄B₍|��^�źZ��%ء���4y��j0����� �9�j=ƴ���,�"fw_��L��T�v�q�i�m�5%����3K�E�:��i�A[��dtB )��,���×�,j��;��m\V�2> $�������f�%���?Ju�{�Ә����#+�䇉�dy�-M�v��~$�߄����'�ٓ�"?���ND.���vn2�]�*.ɁX��R��hV*v�4��`3R��˻B�&pJ��`C���Zb&GV� *���z��җ������G�(�Ǚ��J��|4���:7�gI��%ĸ���mODҷ�X{R/�ۋ3=�*��Z�W� ����3�O�:S!�..�<�- r�[Z���5d�� ���RM�Gd]8��ep�cW��*����Q@�U���/�h)O�+O�<r��4&��a�-_��2�/��Y���i=��\]j/�0Vi.X�S{a��hb /үl�~��T �&S¹j�մJP�#���aKvڕ���X�� ]I�xS��S ��������zJ`���t�4r��OJ� ~�fW|I�D3r�ьܹP�<�$KЧ���<�� �vd<�ʈ|X���{�����������P�in}�"] Hw�>��ؙ��Jj�A����KW���s��؍�`���cM�����Q��ie?���G�M����F^�No��zdM���)�ZR��{����Χ��-��Ł�xeD�,*�R�. �����$D�|S[*2�d��ت(�Z&��̿X!˳X7'�ݞ� ��{�I���8�J#�=����ըw�,T��"�9W��[Ae���N�+e�Lxn5�V3B�� .�:���d3�';��B+4S��q�3���k��UB����S�ǚPJ����������t`�/-��u>{�W�q�gL�g�����*<�H�5υ���K��3���"��rd��A:c�,Cn�����Z�A�r����G;�>Mh1��}E�Xwkkht�cyp} O�ܔ�oA�Z{1����P`�"�]=&�Y�n)ھ�_�[O�ʝ1�T�������%2������^�:~�S�"�N_V���E���S���$Հw3�Zg&����0]�/���S�V����P�*�W^|;�v�� n&���Tw�%VjC��F�� �����\���X�w�´�����S��e9�����4��h8urN����2њ���ŋ����Fo��@p���W���v���6^��淋�m�1q�2on\9Pֱ|�Z$V;�xF�h��=�=�gX��4�Hd�cG�)�C��`*�w�{���^����B�Aӫ�V܇&UW;GD|������ ���"��|/��}a��7�\2Nj��˰Xg���N8��>g��6��3U.�O;�;U\�I���:��F0����%��C��%X�߃�z� �W��Xq���^��� )V���!�vv}@H_�l��`/���^�>#K6��I���n�+@��x*J��>itFz0�FN|qK6M�0���$>�K�����а˅g8��s��E�r0���Nb����E��fS�cDBy�ѻ������T��'ç�t��m< 2;z�Yj�T#��4(��� �r�������c{q�����a�رa˗�n"n���Cj�<�{���u)Y�EFƻ�f#\�V�֖��O��Xtz4������G3} �?D摢e�:�!r�/��0�����J! t'qȦ��.DW`�ؐu�]�Pxmr��(x���Y[Rn)z���N כ���^İK��"��(�w^�Pa��.���Ez��i!�L�"����f&��4[�R���sB�d��il(�oJ��)%�~{�]��,��9:�1#:b�SWU \�K���ޅ��p�r�L�O#�������٢Usi�-�|�A�u(�f����Sy�$����6D��_O���U���_)?:1$&8<��)������\D[��=\��K�{8fɇc/u�iw�[���a��Ωn(\��(�����!�wC<�Ϻ!�e���3��}pt����P\F���1�ma̰kÊt�P�&A@�'r�DKyw Q�)����2}q]\�U�BS5�6A�2p�ma��x�ѡʍ^��)�v��~X�s���x?4���S§C8�'ܧ(�X�C���NSX�04���Ԝơ���O!_lJ���^L��]�*���j���7�DD���x"+J�!�A><�Os����Z�P��w\S�}����?�+W�*4�O��5�����>���C��d�aY���P�PQL篜~'�k���[a�{v���S��{��W˄�zp1�4�vd�g�Wa�'^;ZZ����;tbA㭞�T��) <��in�����2�Ka�+��Qc ��7lߋ;"!G�ײ�$�K\�n[����?�V\�xq�xL��gȇ��҆9�CS��3�_��%�u]�kJ{�%|��_ �#蝰8��P�y٠�8�),C�Hi�\�!i�y�t8����Qij�[S��h�����;�������Ra\��x���v��\T�C s�Y�h�7�w��l ���h�y��2��q��������O?�ÿ}�}�b��7���[ ��D�LĨ�$F����W[��#� �v0|�',�u�K�,·d�l�*�ޭ�m;��J�:�Ƭl#gDy'�*�?&��R��ր�2W�� y(fd�m�y�E,xDFJ�m�E���e�AK Bj��s�2%�T(+ܧٞ�V���<]V]~��E�'b�=�zx������;L�j�K�`9X�n�ңm!E�U,_��r��V�VrJ�F��J�$ l�H�ɜ���F������ﲹpA%2A��T�Lj�I��Pេ����T��8U���p�m�Y6���Ҷ��Az��)���rqY--§���8�]���u'g(���o��w���|T��"��&x�I��p�0��G�gz5�+$6���ę��b;�<Ғ��E�ЅS���yR�%N+@��<�K��a^ܜ���gv_%v��{'GG�#>@e>��o��ԧ�ͽ��o҉�0��[�jf�㱻��%O��I���vo��R22w\�IN4O;��K%�0 բ K�)�� �XjBxp��NɎ8��`��]��se�f4B0��H$��Nա5q^�Q:K�w�^��Ǵ���e/n��]̢\��<�uOT�6�d�S4�$�xk�$6*C�)�7aA_'�m��-b�>����=�st��Щu YEM�w-*��955c6A!n#7��M�p��V����dXWn.B��2T�A�W��hP9�亳������5�l��=���h���?��Օ�3�\��h�>9{#��ej��ƨw�����R��DQiUOI���S�ɮ,Jq.�;F?�`%�S�+e�:up��;�1X2NưȆ�+���a���l�z����_ƅ4�S�a�=V�Ӗ0-�lAL���!�>����\��!�p�L�΄8bo�d��X L�|��b�1�\�d���N��C��%H%��|hFD���i�FDF��J�����~�,�<d��7����$ ��X���E��b�w4sX�/NjZ�X��<\4�:za�'X4 �ThR,���~��|Ko�5. �N��=v�V����HP�F�� 7��u��n�?�2m]�ԑ��p z�]51���Y�*�&w���b}��eEŚٮZ�VW������ÊJ�ծR�"VW��d"X�`bXQ%��JU����p9~=��p�a�HHP�u��80ϖ3�88�E�1�� }��OoK��N��g�EAA���Ow}��Ť��$9��X��HR�g�i����VU}���5�)H�&��<vL���2�Tϐ�� ωO�ȳU��qmT�#+�g�b���e1��Dp>z���>�Q�3��j��=����6�1H�.�����(`��bU���yƬl��K� y���҂XM���>���C��E�YI��2�j����� ��hwٜC���nf�L%��V�Պ��>�K���滠��9�n�z���I9A<�Is�1S��=H�܉Һy��V���&�z�q�>e1�V5���_.ԡ�RhRvN�1�-���d.��װ=,����'���+�=k � �<��S�}o"���b`��" R��r��1������TT ��܅ �5����j���Vn�H-��M�[2cm���7����4�,�����53����r�ynOg��d�?\�v��$l�i���/��Q�p��=���<�҉/���]"^v1�j�.�)�ޑPW�i�x��#w�0BK�ix�,SEr��"*7�cE�?���:�%\F��6{5%H#f�sLH�d'�J��Z��Jh��H���y�����}4�B6��ֱ8��9Y�t��Y�6�:��b�c��{r��y$S��X�!!|��+$��#��R�Pm UhW[�Z��T����Ë1؝�*x�3�0�`�s�о୫*������-��)�r0�7�4{����F���[t{��u%6�a�k(Y�[Al_b�D�H'�$�TT�W��B���rӉ�l��1B�`�T��I�9��`� uq�D��p|� �R����Y%s_���\��8#;R%�Rf5I�X�����Rj�����,��~�� ��69��X[��ҧĿ�A%�t�*�����[��-y�g���J�t�o���r�1D��TFe���'��?����X��E^ҕ�uތ6A\��-W.� �{��{%gF��A��0�wlX��"�)��lo)~EӺ� �4���;�a�ɮ���xË�g+�/�[�i���)�-�jXɈ(�Q���\���1�>�(�G��)�l�-l�, P�^�h�����5�q&�]X�foN Ú��I!�LN1��&�*�R��Щ4V�ؒ�2%�[N�V1m�8C�}Q�;�ى�Lc��8�C(;���LY���j�t1Ūb�vZ8��i�Q��yI>�NiB���J0�ꩆU��+�,��2\��=%hߜL�?�tQ,N��ep"��Q��e���LiYĴ�Z-Y�@����`���U��y��XQ��S�5z��o����M>`��ZOy���p-�=,��|`��~�m�3���A��kKi�RpYS��b��V�(�� �n�b��L�D���ΐu�����<<H����A�/%1ChB�JHoAnM^�˶�8+9gJUS�s�)��f:Y��TxtG+w��Je�����j��Īr�LΪ^���x���3U�N��j{�:B?��4�ܚ:�H��b�d#�7z�a�������¹A$�:�����>(�>k���FSc�Eg��k5o.�J�rꁁ�!�D�1�f:e�gI�ÖnQ��NW���}D�Y��-;�ʇ��4��DvE�����.�W �V��X��n)�حI*$���e+���V�Qk�L�rj�aO�E�W���1�ab�f�Mw���� �o�����> }�z���`9��Q��x�x�@ ������#������ �4J�lG��+���rP}�b9� =�V-��V$Vxr����fVuj�'`V)v9�䠁�`�����Z��k�� F\�� Ұb��H&E~պ��6f��C��/ەx[��稘�L� �ϱ��8@��I�xe�eAZ-�#��+Bw�ty#^�>AVɿ�L[� ��B�/�R�z�풪�_a��V�7#)��W2�\d����.�Z����������=<�<�O1�!�Gmo�3Z�N���0K�$?V��mR;�._��(�ϼʩ�t�3��C|�tA�H;�ĕl� CƠ6�ܴ+WCƙ�Wݛv�������l�@�����!���9���ʨJ�#�vep�|�-�D���6?K~�AW�o��Ei"<���km��1�6'��5�u/l76C�ar$��f�6�o�_$c�m ��$� �nƃ�u�t��n��DF���2��)x=� N?A+m<Jf���{ډw����Rz�)7���4<+'7�4��p��(���`6�Ɔ��_.�zyǞ�� 9̤D�㝵|T��@i�I�=3�I���S�!5`\iR��؟��v��}��L ��'\��x)���hh�<�����"՜��L�T�+h��c�j/;�!3Sr�Y�}T�{%ύ>˛��W��jR��-�7�h2yF ,j�.��2F;�1���Π��<�_�֑a��R{���5��\4��,̭i�eΐE����-����/$e���$�=��X�կ�����?i�c��eWC�� t2��Yp<��kx�4i�.B��I*v�*����@�o*f�,� ���W&��ݡ�6��L�%��1��Pt�^�j��z2�,�$��1!%N;�q�}� v{��*6Y���y�(��<9R%<�Z��Zڡ=��w��p�:I�E�r�qH�Qco4pv6�l�<B��rʄ+�� ^�;2�%E��g��Ơ\]Fe�*��dY>�戨��qqy ��m%��Ss^�E�kI�s)7�l�7��!��2�f�0�cv�x�^����h|.Ś�RxB� �5�q��Ȧ�l��mkU��!ޘ�ro���W����@.�3� 1�����'%}�k$���΄;���_.Y��L����<���@jqɳ��e*�~hi�v*6DDҍ mݘ��j�oY�ڞ]���@1RcS��� (��V��Z�;��1/%4��Pk�dz� 6n�;t-��8��`������ ����}8r)o���� �M�CCT��P}���+��o@�S9b�b����� ����5��0��Hٖc�®��,kv�ly�T�XHG��>�c������j����0ؚN���������M�{*]硍���Ye���X�d��?�7�zD���"=��U�>�a��g��9W�;�λ�Q��(GX(G;ؚ�^��M�ÅUe�A���w��mZ�مY,��I�p4������r솗�XAQy8� �����n+������Y(nA���\�ATg���AɉP}Ȍt�'p�Ե��|U_j��ZS�����{�,�yoi{�0�8���w5t�m��9]>E�wT���z�X�Sхq����8O�e>���\D��C���}�Ӂz^������C2q�&���҂�y���|3�v����[����t���z��9��@:~A��Ɵ2�� �N�p�<�~�ʛ7oo>��W��^�u��a�M6?�ܞi� '�R����D��a$g��#�*�5i3�*��e���HR��̆�Z5���䈶*=���7�:��PL�1^��Zu�Yl���>�:t�~.�!66����#��͋��T��B3�`y�Yg��Cv���W?��4V{�E@8G���S�[gM��5�Np<z��e�7���5h*�K��ǣd(�����0%��QK"�'f`Q�����pia{][��W2�X���L*"�t��$��nĖ}��lm���2 j&A��0�������<�\�D�L������{��]�cz6�'�(L�dw:�;�k�HMɵ$������p��K��g��� D��=�����`�,ٺ�>��N�2�).G�.,�f�� '"��7#,զ=��El�x�=c��4�����a��wH�Ě�R�Γ!���2��},�w '�"�anZ�PTHX��}��b{�0�)�� ��p�|�5DQ�.�O��Y��a�AA�<��3�,�?��:�Pr,a�����u�y �n]U(�`�ɝ�I�;t��jS�-h%֏|�REt��⤒<!&A�)Y�4��mp<��1l������)�Fe����}5�*�:Qz��v�ٙ��}����rle�gg#�D�E�P ��7����ƣE���sPᐁ���2<c���i-��D�&�`�s�ʕd��,�z+�j���ʍ:��@^L|�j��0�h&P �GDq��XUE���I��阦 �*\����zX9;�fG�]����э��\�wG�E0����5��)�9�رk(B���� (����ܦ,d��Q��s��Zo=��!F,���N��SE�:��Y�{ΪsS�H� 蔦��㲶�k[�� s�>T�1����[��]'�������9����uZ�k�.w��c��P����'VHΧ�����2_�`q'�Gű5��=���%8E��`$�@��(�˳���V�hR��|����8#�Z�g^ٟa6�ݘ���'�����%;��/����[��Ϡ��uR��L�:�Gf��PD��2!j���?�q����=<<�%�<��gLa���ͤ\印������ q}`z�2�?�/�ð����<���8Ӓs�Ev�&�\1\���ty�/�c�N��0�ܷ���)Ar��)څG���>�-g��l��m2�T/���" �?}H�v�V6�'���d'����Q��UB0�m��3����K f>� S��p"�Q�F�Z);�ý���[��y����7u�p4��^���/�L�����'� �sn�K���~h�^,. �R*B�} p>�_�y����|��;�f3�~�Ga�mf��V缂� ���U3�����g�P�Dj�(�V���0�tP��C�"�Z�h��\(���P^���zQj�1�����R��\���|�b�t��<�y��lΛ��F:� �V�ɧ��b�b)�� 8����S:�7�@�F �c�R 0�ARH����p}�Mq�<O�-=�B��x� ��Z��\���f�{�_�D��x�Xm�A�4X�����i)���SO3��e�O�5v�9�S��t�ah��zb��t��7����m�B�&�:��0NG�����e�/�-|������Ҡ�l�}Q���YN�t�;���ʒIػ��v`�YW^�Vm2cP�3����H�~�<��3��Ơ���P��T9V�F��y8��]�&� ���,`"/>���!�"\,Ǹ�tgԜ,F{�2D�[�L��A�mX8�F�42�зK}�n�A��@GO�zsC�Dr��/�O�/��t �V�|�7�J6��|��` ^_�bo^П��݀5�A8% �[�xen�4J�t1&��+Z�JY��;��� �$ ~w� n8�1�ɻ/�y���C���2�%�d6?�ˁm�OFPv�Ż���e(����S�˄D��ic�d���i�܅�s���%J\#cm4�PT�1��L�"�QH��ɜ�pQ��&�G�(�Pڨp��鰪��>S�X9����WԱo��9R��f���?o̰��v`�qZde�-�CD����~��o�Zնg�,�+_706�����A��"�:C�&U����0$fbxYew�OG��>��%tqi��6�R�OЂ1\����g�9TG(���l��=�U3�l��1��!b4��&��Hg(U�}N�j�L}����g�d�����x �Q`AP8��0�χ��o���qY��3��Y3� Č@��L�A�ЌcF��W.,m��m��]Uj:�#^��۵vƓ��N�1����_6�� �������0*�7\EGM�>�Y�z[�[l"��%�G�[�����%�/�8�o��&R�r��\dV�bKDŽ�D�b]u�uF�N�ʁ�A ?ຢ���������w�P�{�p�;��߄ˢ��2���17�H�ĠW�k��.����!"1#�2"����6�9ά�1f ��O��I��Q��;Qi�I`:7���Ŭ��sewm��8r`��F���'����.����7yq0�]����&o�פ�hS���<�<H�س#X,���9U�&6�� v5������醸�\�aփ V)lϿt�J�,.iC��n#���]R��k�̀�CSh���8�Œ�����!�%�������BV���.�hA ��q�зEm��D���f��,�}��VQR� ���jN���~�$�\���<�!�J]5j� zIa%U Q��5����|�'����b� {~��I�����9��D~����Г�w�P��ZD&b>���Y s�-kƵ�t���&k/@!��w�#:�~&�����s�Yh�%���|���u19(y����Jt�'?��p��52r�V%��&�Q�̲#Lml�gҌ�FLq놆B�n�#��J�Me�ěgX^�p�����g��f�Q�T�:^v�]iF�F�����NJ���.�[��)�i \W�U�Q��S W�$k��Ʉ�lo~3����Ļ��V���p���r�_�?��p�Ǟ\]�*I�[��m�����M�|���{r2��pd#ӲX��P#�>^E�Nl�Dv</�Y��"րD�-L��{��#ZBN��)�f@)Y-V$�e�V����}�/7�u��$7���B��̀�WX��f9ʲ�y�p�Ύ��ػ�-Ҟ��ㇼKI�DFծ=θz浚�� WM\_�!w>�w/M����`�=H�D�#v��.z-�kxu79�y����Gw�&д x"�nY�,��z�K=�!mS�:����ْ�d���لG���q+^p��xM�[�s3]���zs���?\�z���W?o���}w����O�������w7.���Klw�O_��d�)[��ܙN�<�2j��`����9�k5���T�����eN��i6E�W���8� b�}��>�����N*ȟg�cq���Q���S��pRG�<SpY���i�䄳Ԅ]�W�%��998<�E��V$��>[?��)yv�/b2�Q�;!�i�}Y�x�B�L�{��D��0�*=C9� � ��#oҾ�@]���b�۶��i��R��0�[��1:����E��x�;�56ι�㿛Xf����3&.~<�n�+mVB���so����TMY�h-�ӫ�J�{��Mܫk��H��Q\m��'$��I�)�?n��گ�"ȟ$�)����� ,nؤ��F����3�NG�G�����=�)��S� L� �~9���&dp���[�/]3W�R�9��.� pႭk:C���������WSv�];.މG�:e���H�i�8����P8�oak^v����"�]�6ɛX�R1��Z5Z>��u9�XG� ����}0 ��!Z����� �hzp�ei�����/~u��DB`���*�����$@�,%́�Q�y^�#`�d9ھ�.�N"r �,�J�vv''{#nu�~eb�$CT�'��&�z'l�+�����O�=h�U{�>�����Z����=�Ih��4s��Ԩ�;q,k�ֱB Dž�"��������)��*��:4)�SS w%�)�y��|Y�\��z&{����<鄁S��n�*,�d���T�^�6<� �����m,ſh�hJ;-�!B�r�*2�`�^�a���d@����$��u��� :qp// ����Ast4��A�B�}�A���G,��Uc�{���6�X�&����ɟ0����H�R��+��/�=��m��҉�( �����Cn�>Gh;�,f�e䩼��'L�����e�b�����*K��7)b�G�QgK�4h8���\�J/,1�����p����U�Z�/�U��i�:�\��-�e�ye�4�-"������w����Kb�+!ƻ�rƘU�b/q4��e�^���?$�M����.T���$�b�) �P�0�0b�ݴ�v)�m/��_V�ZK����=@UK�%aH�o�^wWq��L���d�� �]I'�ݝ;����d� YV��'Jqǁ��<��f5�9V�xw]��ibܶi�"iv h��e�j�tm>D�n}�QKs@<�dG�H8^��ӭg�>T+�o1���T�n_��Mmx�X��������^�++�!o�k#d��L� �KD$�,D��y�KW9�2�'@����Ñ'V�g��'�/�-�fԮ�6��1b��T�j��\�#���{����?70�;>��y2�y��r6������r�d� �-�+�&���H1Ga%q�)���X[|���t�#T�ƅ�JfǸK���Q��cd��C3��_c Ƌ��]Qmϸ�Np֓�� �q�S1Ts�|ﺨ(��C�P�<$qOJ;��k�_c-p6��.%$�C�KU�L�9���`���1� �*�� ��WAV����C�o�nW��Ԥ:�욾9�^�q���!??D���~_�V��TFH(�p��}��D<��j|�d�G��p��W�KRZ.w���̀����D\�r�V�=c���n?�����b؝����c�PP4e�a7T1@uόq3i;mgc;ݙi>��ܜ8op�ܟG9Or��������TW��_�̵�P(" �B!�J:E�`��n��FoZd<�?��bp�m��`?��A0�L!�*NT�9�) B��}��Y�F��O��wK����D�a����m���$�:���$�[�Y�Yy����!���D��%��� S���"X~����\�YE+�ӂ�%^ xvO� ��*�p<���ܐ�m��i+�s����9ٲ]4;> �oj]��46��V(,'�|~'��L�\h�/�1�FH���=���c�@��L K�ĊxR�YҙX��+���WsE�,?i����+�ZNn�ﰆTiL�ˍ �����7Stf��)���ҧ}��f!�ؑl�cC���z����_H�mE�wDW`O�Z�yl@��_:;a뇇(�vp�+��Ήڹ>�Q���?�|HttX�����Y���i�;B/;�L�=�����q��1�R�4�PR|�c��k�8�����<�b���g�7�{��Z$�j�/:�[% R�Bl`�&�3����掋�חM�Sl}���{ gDlsvW�E����*���%o.�4���C���m�&8��D�r@�X�;#��nT`���Uh�>.�A��0n(8b�<��6����F� Z��t��5%�9g�9"�n)�� ���36�E�F��w�'7�5��h��4A���@n�r`m�Z6���9kr634�'p�2�����)��ǩl�3�� ��(������M���y�'m)r;G��7=�02B�g�,C27� n�#Ogl&�v�Z`聒� I"Z5�|8�p�UH�P�PA� ��F����zP�P�l�<�ɝ)��Nӽ� � )?f��n8$�#A�%�E��I��5����!|8��<3Vr����C�����:��*!+����4:���+k��H��<�����n��)@,�*��MVz%P �5k���\����cn��b�}|�~��;�~98P5��&� 9ZL�<RP�K��G�gu��7�1�1A3��PBK��)S�&��� �H�c�J�:�Z.��/��Ĺ�o�PH��J>7���qP��Of�]���+PG ��X�EH����� �Q�kP��|���g�\xRO��>6�ί���K���;�㝀�⭦��A���F�d���Ộ��ʭl� [�l;<@B����0�0���U+��i2���>��8�C����Xk���<�x�� �$����d�f8u� �CT*OΎ?�-��t:�?�U$�kaϰ�P���qX�~��`�[�����ؼ'����O�Оt�QJ��Û�7�%�o�H�����K��3̈��Ay������ h`�N{"�u��uㅨV�$��^���������\�"����t��q^�O�Ly��"i�fptn@�e?2��3=�{�wL���+�������F���8@$,ry���9�8�pd�)�Dʴٗ�c���Þ{2~7�l"��Kf�����wl¨>D`�Æ���H�6�K��^�1��D���vF����S�b�GTRj��@��� L�0=���B#��}Ґ������<��,�����tmT�T�5�vL>��B,��ˢ����Vy?P�N)�֧��Xe1/�W��4� ��y��} ��d�C�Nh�#M�w����YX��%2�Bqv,����^DB�>�Ϡ�w�!���_ _[f�g���&>�D�)�<�<9�VES>g77@�к�����rCT#���h|]���U��_�,���g"�����W�B^z�o����w�Z�ZP桱�{��D^"b�"�{��Ѝ�J��v � e\b1�@��D=�~�( ���m��m)���rڪvkd��#�*���F�����c-��o��~�/������pw�?ڍb�u�UQ� H^~j��i-�Q�Of����e��*�-2,�/V�Z���*�ba���3m���b�y����"�l�Qi�O���B�t�F��(P�{׃Cɼ])$+��A��@D%Up}��'�3�n��s�u�v�o�'I�@�L_l��f|�̯i��N8 ���?��47��(��4 �ڏ���rJTS{^V�&7Y�dH"�<xn|{`�Դp�ĮAGTP�-�0�z-*i�h�1��'�"�s;�+6����r�z,�(��Z�TL $~E�*�(���|�V��Xy����R��^$@<��ɑ$. ~�&�-*� lY��K��ŀ����%��g#"�`{M��)�z�x� �<pbc!ʄL��=b���(Wt�*��� ��KI/����$tA+(Q��L�Ɏ�P�\o(2��X���@]��"2�5���\f�)����ϵg����",��A#~� _ҺIę�c�T��l�J�����I��^(x��z�Bz��y�>B�φz�k�4r8(�fȿb��� t ,n"��)2ue��ڵ�"ǥ�H�>��k���a ~{�K�Et�$����44K�q,V�8e��j�����b`5c8�^2�����}��" *F�V+��P��w+2���$��<����6���ם�9|�4F�.V;�H���m�=�[���5�(�il0������U����ј��M��G�B�FH<�U0�(�9 +����*7?CN�� ��̴*g�|�[���S�..3���2�9�9����� �:�+SS*�Qϫtp�t� 1��o��I�Ye���� ����a�o�X�� �^F=�)CD�U���'(!� ��Li֧�z(��j?�eA�b�G-�ٝ�L����}~���P���Euq�s������&I��,�l�e��'T �Ŗ�f��f 9<T#L��O=�<Bka���r�M��C� ��X�U?�r�R���h����}�Y��9�D��>���"�38Ȗ���b9�t��AS�]���ǡt1zKJ����GĪ�'�2���lg6Aw_@�7q�� %��'���mng����{�u�O��Et���#[rLىf�b��a�I����M�.���CFѧnk}��) 0Ƌ��x��4pZ��ɽ������lݺ[ øM��\�H��as1�Bw�+?�&�/7�3����o�wg�E���t]�,ѷ�γ��}Գ����m��h��n�c6�-�@3_�D�E?��G"e�Q�Ϭ1P鰋t.�Esj�y�����̉Z����A2n9�:���w�PnǼ��Ѻ�]x!��l�(v��m\�$�����"�N!�W����N0ڑ �n"�-]��U� �<�$��"a2P|�����3b;o�&��R������x���,d��Z}�:)Py�4�YC��r������B�nԍ?"r��*�d��(���K��/��5GHf<��`�j�nW��,̥�4�YL�~O7��t�ڍ�����Oe���6�KM�eQ��PX�\� 9�˅QR|e�Pn����UX����s㼹�&��ۣ҉ �__���'���*���.nx�JU�P�MYm)D4���;�1�Q�q��D�s������K9�k���8��@��e]�J�k���.������T&�葎k��P`��l2���+<0��~�_/Β��G�ѻ���� p8�B7g8̒��X0��\�9aW�hͤH�Qȶ�S��k��Ӳ�z|�w����h?�.Q�`���-���H�h���CNy3vA����#�O�G8��"XkS���Jh�P��J5���J|�-�B�J{��c4����|d�f�.��K>B�n�GV���D�x�Ȉ��]B!�͏���2��9G "�tlrR���]p�.dyH�p���l|��3�!ڢ�!����ԵiG���N*�ĜH֡F�� qI�a�~_2!�� Ȏ���8mѝ!v��ɽ�a�:b��azы`�ڇ�c [��p��g�N����Ive'��Vh��d�|��r�D��A�^oVB$�V�,~]I�Y�_N��,ҁ����C��9L�~��h���V�����MJ�/�m���}�/��Ka�"h�0��ۉ[lT�^b�B�h>q}%�`.s�����%�i5Q��B�J�D��X D!,�/>����t|�Bz�2�Ql��U�)�����Re��*k�.�A#�ңC�@����E��|-�`�j|�40u�'`U�E��wqm譐o<㱓q���{���>G �����D�&%��/��^����-T�:zN�g�b5��.����� n��9m���'�C�w��[+ˍ�O)�m��M;�i��QJΐ��=;����y3�� \6Q{���3�-ĩ%"}[n�DY���J��5��UN��ք�I{�7�4�H҅x�f�j�L�̢�r��"�~�@5��!Ş�>��#\�-��=�|@5���\��$����jB� X5Ar�Oc�A�V��<3 ���3���/tc����4����<3 �%� �#���( ���p�<�'�//1)�U3˥���D�6]�,<?�A�6D>�����i�ޮb�j�@FRSyʰ�kv8��A�\���+���*�9���v�L�V�*3�ZƔ=�}��U2q�*(�����c@z�a�R�fp�F����hd�����?�T�^�83��%^�~��B����qG��POD L�v���&8V5����<9��x�S���b�gCcўM��l�b��t�<P�'��"/N^��#�JSW���s�'6�r/�G��1J�K�g�ϕ3�C��3jND/��m�O�.�8%���h��3qRN���D&u���&�D�^��6K�'�s ��k�=.c�ꖯ$*��� ��X��QN�#L}��;�7lyמ#5}\�R��`E���y�^�O�d�ٰa�⨤G�q��6<B3�5ESQÜ��j������V])�ԅ����x�����yXk�;�0�ny��C9�E:�=���n�ǐ�h$�" a�� ��2���rC��@/ י�m<�OA��&Vi6%�����(�U� 2x�]҇U��#�T���,�?T��չF�����:I$��18l��-�oF>[�GD�j����]U�Iφ'�K��B:���QP�h)kV���y#�C�1��d o����bVa}=�9�5�X�1����?@q�ҕ�Xv˩�� 0sZ S��K|����p���r�U���I��p�ij����,{�硡����;K.F�:5���2:���\W4?�!U�e8;fSN���3^�g@>�!��]�3s���5�f����G��+չ>��EFWD��G�:.6�RDG}�1xk�lW�R+>Fs�鄝����SMW�-��5�����}꘦^�or���[���_be��ͦ�ُ71 0(1�<5Z��|Z�\��+���Y��L���_]y��u��0�C�h�FZPaP��lګ+wjF�ЏP_��e�z�f���B�PkY���8��j�|Va�5�[�چ�Nۀ2эF6FF��,��͆�H�����*M���[����>�E�gA%mo�^�gZh]G1uG�5�=ob99g �$s�� ����<�b17Gx���/oF(N�T��I[���\p�}*�&��������k�O�N�5y��o��"�h�]�K#�M㣦G��4���J��ق� $;z�^H7l����w�x��.'�S�҅I�b �T7�4�,?t�����_Ui �L�Kк�%.R��0�rB���������Ҋ�m���Q)���ROL,BL�(j�����e��G�.?t��R���-e��$��tm_��2N�1!�hb}�b�X��?<����~��^����l�� 4����>��\��ŗ`�*��R;��K��Jd��@c�- �������-nM��TG����3wDKK3>�]��] �O���6�ۢV �{R�C�'�P��3�_ -��WÃ(������3�eO�k��\|�WD��AR"�����,!�u�p�F��k3bKH|~|0@��W/�wS��l8�����ã�������*ħKTƵڕ�|�De���0.Q�k�����3�,��nbQX��_� �+�4��j�6�Y��@31n �/���nB�K��9��idDJz� eأ�d�_Г���gP� ���Z�>@rno8�N����0���i�5��զ>�i��!v(P��֣e�ZVF'Zv*� c}+��"��s���P�8��o�� /\�Ƅ��rxp(�Nq��dtJ�w�g;�G��x�3��n���M�p��9�4��P��"m��Qn�`I�a �{g����xҍl'mH�HB1��=� � I�x�/�v�X}P�8���y���L|ꮴ�n��l��&'�O� ҼEBF�����j�I?�b��7�=㪣��#� �E��D_[����N�ZɌ�P��L G'�,�6M�N�ꕃ� ��,O��/�y�N�B u*�!�}'����u�c}p<:����{��������/��1�-T�' �=}��<���BБ:��s��'��7�#r�2��4���Ԩ�h]+DYtf2~{�В#!K�Ӕ3��Ko�t��h�V�M5 WT�H1��gmI�L5� �Ƃ] LH����pp�y�PSаp�V�#�.�Im%\h]\�yX�E�F.ФAX��xΔc�K�g� 0��-�g|��q8|��ʷz��P�p����R��qP�]�H��'nR��e&��`.=�6�Z �A�"K�j���i;��U9��I7;���o���sn,��t*��B�!v�s$�1�T[���%`�'>�,C|���NްA���S�ܑ(ӓ8j ���IO��!vUgx�Sw+1�K�a���y�9Lޜ���J�8��������ř$K�=����_�=��j�9k�&V����2�;º���G���lp ���Vd��9�%Z$<��H� �H���EjL�(��fᜒ�um,���7!�ٌjЈ�NX�8��䡘hB�b�*��p� Iw��;��V��¬�A\gK��k�vN����YZҒ,<��֩�~�+��2�B�9���n�y ��h�z��l����UZ���K��CQ.� �"vTlY�ŀI@�W׆Ŧ�U��}��V����\�=��[)��LH����{!U� o�y��mYg�;���N�|���o�$��M���ו����.P��xd�T %��~�p� ��M�ԛ��KȖ/ȁ�K��� � �d3*Bu��u�6�e���EP�aѬ�s�@d�kp�Gg��Xu22��N-Bf��2|S��A����Oqc�'�NNϜ܂�T�X �z�Єf<,C���A��L,j�Q��4��`"c�-t��d3�� k�VL7�(4~�׳B��țnѸ��i�NO��ֿȎ�x��?�Lw�Ǹ��H0;����to�?@ʥ$�D���Ɵ���`����������խ�W�6��n���po�"���N�����*��KaE ����0�IV��*�4u�n��������3u��[p��dw���H��Q<+R�?���?��7Q��.97My)sM?����� ?'_�3|��$l�J��nIC��Ҵ.�>@M�FD�u "i����e휹�h8�=�Y�V���0z�!<�M���[A̅�m��D�WkBV����%m����?y��e��oB}���A1#�/�J����a�����js�>�@��P����E�(P@3[����eV�mH��%�����5*`��������Gʿ�4�?�߇�NT�\��~�W���s��7c[ ����V�l#0v ��oݷ�.�Bk��V��𢟢�����;�i�_�y��\#F��Y1 g�,�z�X�RB�W�O� ݱ��خ�]�K�������q�QY��X%�����{a����N�[X�$�! M�\@)�� Da��<.�S��¶���8� �z��T��H�2��:�k�5G7��A½væ����Q�p?ܭΕ����(H�m��H�9DD%�84R�)� �n�UÙ�e��X��!ZL�Q���l#��� "S�Pٺ�_���u�6��9�n�.l�+b��p����r:�� ����.qײ��F�*�F�Js��F|s�@�9�kq��-×2����:�4HI��j �Jt��c�2�u�@f��*ڏr*�5U�!�T/��3�g���șd��������[�xt�C&g��f����ϑ���1n-?v����f��!P��@{�`'���Z�z9�g���u��.��3�H$-j:>y�H�%� ��h�X֖:6��)v�I�жkp/ ��}�e���<����0�s�g���1�M��n�7;4��>7o�j��?*˧Cq�am�BA�S.|�Q�@B]U&s�BJ����8e6�&Vb�/^�~����No_'2��AgC�����0#^jJj����J^�QE���w܅�7�?����e�9O9 ��S/X/�Y�.���/������x��l{���]YE�)� 3$��֊�^�c��O�J,7xX���c|Ң��J�`�a�k�Sb8Ӿ R�@jɦ�S'�)�`+ k�!�屍U�ւP��.�L�Oj�Z�G���b---��1Jl�������x��� �y�x0�Z�(?��yAޘ�s�X����X�XD��$ct�B c�#�A���bB��R-N�>e�I��/�����ܓ���(8�P��N���� W�z�ꔨ0�p�/ҥ���r���]���ri�4��5Γ7����x"C\F�h�ycF H����\��ҌBi���.3�t4���h��[Id�ʉyP����Ɇ�&�%Q���`Ŧ��T+c~��"��5���M�7jVj�x�^A-Ѱؑ��� ��Y��0����� �� ��A<���5�����*� �lXrp��&c�nH��']����"����\;[�&"#"f#��P��-�2ӧ�]�ip<ؕ+ Nw�.p�`��(��^��AX;�O^���m>���� ��lr <6fv��h����O���`^<z��e�u���C�$��h�ni����+<e�v��I�YخO-��[��]� ��e�QO�D������2Oq�>����d�<�G{��AB��WT�b�)p�Dž �Q�au�H������Y�^�6�?J0����w~�۵�F�qﱜB������z�z�z��<x�u*0&y�X��e4H/�� 3�C���o���5�U����i-���t[{��S���Oqw�m�K٢����=l&�L� �@���(C�,�f�NIQ�O�����Ëg�6\��+K��<x�`!���Rk�8�����` "Dfv\�1�&|��B��P#��½��B7)V�\Bu����E��[��6������4탻&;3koճݘN��3!���Ռa��� Q��6]��}:x;� ��?��3��g�@���w"m�c\�wt48���ܞ���v6�<�>�?�)�<AT�>Y�ÀP�!\� V�E�t濮Q�^�ր���C�ӯ��XF�yE��m�_���B ���+��g�q��� tM�&\W?�{��+��:���U�G���МFԡ�7��#��flP��RގW �S������5�>H�R�g���[Ug��g�@2��Z�O5�M��%�hR�A _��b����k|����k5t%���&}�z��Y�F�T�0&�;E�<ss�I-�d�,U�O�j�˿� '>up�=�))lX�GCKC�BFR�I�Ť蕖�������Y�]!c0[�-$��@�I`fXX�a��f��zc���s��)��@��<9>��,���~ޞ���83�Z��L�(Ā��f8<EpTB��F.����;&���=����&�e���H��=ڨ�FS�{x�ۢ��WD�J0���٦�0���͠V�\�żFX�C�0�y٩utWZ�X�Ɉ㉑��V�rŨ�aw��y���J��CB~��d-ͽ"��Wf�ښ���m�`ף����z��Z ���:��(�� bqї;�������^62=�X��?X�R{_��BK�&Z� x�.�I}Z �幆��̛?�$��OEP@�<+X��&.m����t���%��� � � ���\�O�qa����e�2�$<a`���:�>� U�Ӑ�X�� o�;��=!:G�L���A��yH���s�E���m�[F�Nv�IB_��u�<��q,e���f�h:4�i�����$�6ڽ��W���D\ρ�s=붣�J�=dRt ƈBԃ�k x ^��A )׳����4���2����$<�m'CXI��s.�Gӂ���`TH+��80�I"�G��t0;��N,� ٛR���+ָ���s�V�,�y�e�l������ �Wt����{z����5*�6����+�89yʖ� @}a ���N���N&H���C>ި�8sÍ�����C0xk�S��/[,&uR��%B���C����:~;�(�Xx@$ ��9Ő��lW䃂��Fܔ��c�QI,X=K����0���\l�&����l4�Z�N�J6���Q�o�@�M�C�٧ɳV*.e����M��U,�{VO�B�8 � �nkF�/-�նr�'-'��O6��q�wT$�1��"|�A�,��9���c'���y5LM���/��@�`[����v1�\(J���DUJ:Ҏ��S �%�T$WPpr6��Mi�� b���Q��<=�^�����ƃq�E����rȭmC{��(n�,�e������Cg�\ҍ�H1�0,������!<�JsQ����rFS��'��#(N�SU�� �Zv�=�ơw�/�l�O����6at��x����������a��6�Q�;��%���g�*N'�)�����x�N�S��u��u��N�NO|�Lw�OQ��S��l�������N^V6.����܉,���� �#�ZW���9㞂Ni�Sa~X�*T"�P��[��(} M�`�k7�Ly�I,� �Qa�d��w��,�$/� !�x�H�3,2 �-��,�ճ��&�.!Yv&�B:7'�� y�9����:�&�����_z��kA�D����KN��B�a�"��בT�Һ�4yG���w0�V�� R}yiא�8B!S�9�+�2Ia9�RI6E:�&���$���Ԯ�b�NU;CU�=�uN/�����a��?<�������w߾x�z�ѽ�M��iu-��˷����^۲���HW����ӭ�� VM�&�� "g��`��+�^����eJ���]iX`���mF#$L[��Fcd�9,gӜ�Pa��,7g[u�o�>�(���!o�F�.�+m��TNt#@7$�H�K�a�M�cY����}��F�`)Ⱦ3����߲R.[����[��H�p�ʕP�E�`}=���t�� �9y�_�h�$9���=��,HL3� O��^�Z:?G����*٩, �4oћW���g}���R��Vo��g �3�� 筀����Md���ܩu'tL��>��c�h�R����+�e���v51kP�&�6N�)�y�6N�J��7�����$.%�fR�j���S��/\i�^���TW�Nv��:�-�i2W�H�p�Ë���Z�wͦX�ɿ�*i�P�x���*6����&�\���(���&bN�\���d1L��F�χ &+�M�a��I��BR�,�3����o�_��1zG�-X`ؗ���X>�;@��sdeo��D2 ��hl6F��`0�h_��rG��R��K�p�������9����"�v�DͿ��PR��<�$苹ߕ���1A@`�!ˀ�@�m�wL�e�)���gT�@�Ҁ�g<�I���[��p;�ҏŭ�r�����nW�ȁ���jxA��.�̀���m��(�Pl�4��/�� ˨%6��M<��UL拼��5_�^��N��?��;�)HLw��>\��$�@0ĥmI�FN�/���,M�eA��w�T���P:N;�k�fNV�-�;0����dĹ �Vl���Gu�J�"Αۀ���b�]ր�̎uj���f4�#�(��q�8ש�\�&8��W��vfc�꼎G._/\�Y���aO���ty��R� 6�:�bDV��|���vu.f�gB�i��Ȅ�8�fpv����tg<���H��8';_n��%��m�X�v��'���$��@*�op L5���FW˘�7'gK�I`y%?���'n�̠ �����'�;;���S1�T��q��I�d|�u�� ?i!����ۈ�}x�P\ ���`t28���6$Y&�y�����AiՏ�f���4D�Հ�s T��(�a��&�`r d� 8DJ��9W������k������,$ ?^�ٷ.� g���Zڣ�hޒ��s�7�go�H���6��+Lk���t���E��?��2 ��ˏ�P�Ò�� ���m��{�kiP�s2�Gw�;I\�a���:|[� ��Q����� w��.� y�9�� ��m�G�^�K|�-!�|�O����-� v��\�y��P��7E��n��Zx�x8��Ѩu{-|�2�l���Wj2<E�c7��P �47��ׄ�M�����L�����?,Ut!dh5-�!,,&{�)Y����h9NaJ� ΐ}�C�yU�T��\eԹ��O�հ�!�EٶL*a����_�l<v���@;8O�/L�F4963Y0/Ə> ����J ��X�H^���I3U�H���!��d�t��N�Q��hId���?$%�t"�Lw4�5T���?�ǡ�TG����}8w�z]XIn������c�2{Q֍���\������[��%ЦK�Őd�"�ooq�jS�)'�U�Zo����)��yޔs�������6�A�X��$�e�#Tnt<�Z/�1Q�[�w�:�����gb��K�N։Rx��ն^��C���~� ���(9��<f(�ᤌ�J������ް���G9Ѵ�r��Ԫ5 qK �C�k�a�~��bӱdNT=�����6�w������*�q.v�<�/h{F�F���$2^����f5�ΐ����8����q:��ΚB\��Mq�kF�a_�+���� �I��Y�6�etU�`��,a.�*�`Ja@rE "]���U +�W ����4�N��Q� R��J#y]�QS0{]�0��&N&bͤ���R--�Ƨ��Zv2��<Zِ�fuuB@I��lA�E�Q[$�Z��:#�XN�Q�����t_&G)W,G}�\�sΠ8dv&�w�wLĎa�r��;�SN���{� mn��G��Q�d��B@Xg��r��6/Y�a����*Ұ� ΤE��&�N�6)[��X�|����8���%��+��|Zr�0�!�����0,��3pG���պ:��j~6~2~7D����q���7-�f.!ŋ�K��ӂ`LN��5�����$��m�@�v@=�CZ���Gv.��O˒��Nw��f�k_SW4�hjҹu�M��mY�V���`Q������HfE���0�>� +,�_?�<`^�$��RR_�]N�H�Ŭ1�Ea_�d��ɐ,��.�2ym;��dp0��(�y�h�?�����b�/��8�2�M_hp�.���g�ɰ�%��c�E2�D�݆��V���q���S��b�d��a�5~�O�ȧ_|���.���%���ο�D�uմ��+T���K���-�>�;���x��f/�E�����n�M?��C��Af�Hj���@\��S�����*�A�桷�ǻ{��X�8g�߂v���?���ǰ#��Ͷ!+�v=h�Tm���e+� ��&R�t�D��nGɊ�q��T�-��{�%G�M��bD�@�_K��ϓn�.B;2[y�N4i��`���O;Yb�6´��9 'ҁKȡK�J��]q4��g��[�&����@H��;!#\0�f�1�q��@"�#�)b��8���Ç��&��A���5L��&�=u���#�P��dQ�I�?${��ob� ���6/a��C��9�� �@�fOt�)0�@v^''/�,�"��"���SN�d��Y�b��@ �q �SC������B�w����Ҵb����2JO�#�F3��trs� ��&I�&�F��5� ��9TN�����r\�bn�溁P$�;��D%���kyzYW�9�%��D@:ys�3 ���#�� �B�흜����,�鄑�v.b��05�~8:'z���8�}> �%��zo �M�i2Y^g�:mZ�t��@�}�A7�{�cMNs�|� b&�E�Xb6���I�@m�gt�2D��J�Ј��ӈ�IC��an!N:��D[�fd�[�L�Ҕ"�!��ÿ,Ӛ#:�;�r&@���f��e�T�Тv�p0sR��m�ȲcD*@Ӕ}`�u���k/�,/������]3�*��"��s����E��8�]�3̶ xd���������ݻ��w���~��eՅ�fgS�-x���+�j]w] +h���$�t�Q� |+"�`�u��~�Z�ފZK��b�//tIKdt0i,�<5�!<�����@��ab���B*�˥�GZ�.��I"�%:kA��xY���HX�xJ瞔R�ּ����1��.g�s�n� ��qy��� �O�� ��T,� FtT���vqK�4�;��yD�u�1������ʼ�{%���Z���>N� H �/xlI�%�jSsI���e�̴4��k�䒂2�J�> xZ��AZI"z���NwL�e2C{[�_RBo@�k�tN@o���wm�/��&�{�,_�E��x�Mcqm�<"���0z1ü��N�j��@� �D6KP7�����xo1�}�Igf�%�-��U�eY'��z��;�FQ���,�U8s�'��N�D:q��>�rdg���a �OT�b�J�H�8��K�p!���9Ym�%=|��|�6H;�a��D�7�l2�y��#���S�]E Û��� ���3g4Fê��!�S㰻"���q��\q��@NIatq�H���������[�KD�H˚25��(Rb4M͵xӒA�?�A�� -ɌY���նJC�S��6��)f�xQ�s� ���=!QÉ�m�\ZW�/*��Ұ�h��}�`8%&Ⱥ���Zc�maW,ڣ����"#�6����$4�vc�W�ƭ�6�$@ �'�)�֠UK�fs��ϡ��Z�s�I��:s�T$�6ѱ���;n� $��-XMD�[!DY�P�I�&�t�g��p~"����[n6y�w��Y�*�6�1�ü<hY�wQ�,K�*��l[l���"PD_-x��b�\�{4Ff �g�t}/k(g�+Tϧv�l��$x��l�jA�1���#n�\�Q� [����HT5-��!��eo�Q�Z��ވx�²m]3�`Yx�:�;W������� �DI�o@����^ ��R�� �m��i �]���Y� 7~e�a�@�u� z����t4��V�D�Xgz�H����xH��^�Wu�P��Y�M��BK���k�j_ ��R�����ttf��aD�c?^m��[-���#\���L�Ǧ��&͊Z�ェ�#&�v?Nhӹ@Z7 aj�eU�<;���u����h�ô��鶀7����y�� ����������~���UV�Vta���/��O�k\�kw�����f�l�,��fy�EBs�z��V��FH�s�֕v�N�V!*�X�����zM2$ -��v����Ki}b��y��6��wBC�[!n?%Qg��a��i`9�c�\+4$ðsk�Wi0��VlCe"N~X�\�sG3�u� 蚼>���;�y�L��T�ʵ�T�OR7�ʝƈK�(7�z�r����d�(�`���h�Ӷn'�ׁ�9t�557P�X�9U�|jYjE�~H=[�l|Jv[����ҡ���%���e��z�Q�#�&,� fX�I�����o� ~�"���$�X��� ��t��dfY���p�n�N���s\X���QM�:�VX�~0P^�^���=:��AE!+,|'�`7��nv�R�)�ě�'�HXw�3����{zZ:k�@�j�(!VX�H)�� �#pV�(�Y�29�rG���h�[�(I��,��)_�0�SaƄ�ʜ]��"j�w�Zc?��L� La ��z����! 3Y �������et*�.3q�{&�M���ӓ��v���Y�_�'CG���+%$�u�J`���U%b��l�y�K�qJ�ЪJƌ�t�^M�$���+W⩆�Z�P�?w��e}���Hc}p��5�a��tc�!p1M^%�#�.N M^�n�2���]fOENb��Zo���R���Ύf/v�r56%f��66�m�s>���7��ۺ�����ڶ�7���z��W��^m��ؾ��c��0��{���ַ��n�n�ݻw���ۿ�vuc���!8� � 쥳��J����3M�S�h�#�$���a�gz�|X��9�Q�F��t���Ӥ,�$X~��!�>����[�͊��S�&Y� ���ZK�?�#�z�'\���B����� ���F���R��R�3��)��29��-��D5�)H��3�N���4���?X ����A.g�FN�8<�B%�Z�m��v�#�t���&X�hAˠ�݈魐y��ĵ�&u��&�u�=� S����k>��u�/kXt�*tIg�zl��-7+�$I,+MY�e$VګWe��yE� �@AsI�g+U2C�ܰa����K�|��sw�\H��y�i��,E�4���2�K.�=��0�8μtE�d"��fs�� <�?E�6p}�2\ml�S�L�_����n� ���0������1��Q�t�9 ���8�����%�I̐�/1c�nI6e�REP�/�3@5`�"q���}VJ��1��n>��������;�*u���%c,X�H.*k��mF�r�<�:7��*6���iF�B/�lHD��11�x/���]N��+P�]vq ����V[RPlo���v[����rl���}�S|��@eHyarWol �g��\u B:t*-H�2�s\� �� E.��$��9 ��tB�AsV���4S�P=ݔ�r�f.Csɺ�ɗu�꿫�����!�ph��?�tT6J:E�v��8���+��K����٧�>p��`��\�2���l��T@z����Ԕ���l�"���q��lT�(�Jڷ��s�-��V���'H��ᇧ�`��Gx���� K�d(�e�) v�kz<ؕ���n�9�9���l�'!V���v��%3�$<�)�J���*rķT���v"uZ��q�L��"��Q�|��SJ�<�F�5Dt,|����^w��}(���_0F���?|)���ۏ��b�T���?�xr��#�x���fB��<��ȓ_~��>[��?��#_r��������s���m�ǎ�L(ƞ�M~r�F�T3c�凯AnjR��>�G"��Y�HB�L����u��A_��s������D��K=k0�QJ�����oiq)I���z����ڢ�����9�X#}*�+�[e!{�Lh�I�=��l�|߿;����=�Y P�-�F��2dTL6�(��:X �D�x�����7��o�w�$zId���R䖢�}(d����ۣG&-�eGE��5��v�G8�u�;E"#�)MF�TA���d���vy`A�"y��0Ц�NO�%��b��&��z���y���. a0����ٽ�d�̽^vA/�Ar�E��1*3by�Y`ݚE�?F�n�/�ח��@�D~��c�E��ȴ��q�io�!hZL�W�� p��w�96D�/�^�u��*[VR��{��E��c� ���Q��G{�h ��h�������>#�5���}!��-_q�?�ҹ��W������)wl*���� ��+����x��!dR�H�)��������hv�*N���H��V�Eٙ�U�� y^YT�Q#A�:��� 4� ���:�����sEۤ��]�h��n���zǿ����E�7)Q���9t��6� �ARAղ�9���s���� ��-"ۙlW�d����b��cB��H��B�_zz�5`z'ޚ��Ѐ^��^Sr��)����P��-Y�� �R]��%�Bw�g=�S��,lV���ۻ�����q�VU��ayQ�G��iD'�~����,��5)7`gv��h�ح�Ml�ʇ�6�~�ys!e����ĸ��N����Xu�2h�3U��ORF��/�?:��? !�e�S�|�-L-� I��W�t��� �e�)Q�uc���}`>J�Hbd��b��N�nG�K�]+��Jo/4��2#G�Y+VhU�v��Q�*lQO@�EAS� ��O��8���Q��k�-�>�C�p�[�ݭ\V�����d�s�8�k�I�f=E"��J��'H�W���J��a�*_H������xc�U�^�;p����s����I�T9D���Ձ��p^�KN��������*����z�It�ep��<jU]� �NV��`9����(w�_��Qo�/��\!���׃�ˠ�[��ɥh$�}�q��Z�cY�y�� ^�u-P?�������G����G�D���\L�V�a�ִ:/8�x��k�1e�s�$6pA����a�>3B�.��9�Ӝ;8Ҳ��P�4X����I�$r#�l���}��_Ζ�`@�<=�]�g�␊\ux�xO ��f@zCy����*c$]�ȝzh����e�}z}��#�}4�u�CU9GRz�VJ{��w�e��<Lj� �a[�+��6�'.�Gt9)���9�q �һ2ƪ���w� ������s�Y�OX�Ǫ�ӳ)�m��bPQ������_j�Ff5��}���p���L�&��,r�����.`B�s�5����u��*^�@�6�;��6������ԇ'g�m� h�:b�d6�M�)�t@�{6��~��(m�U�5�7���lV�9Gg����7�\a;��nu^u�� W���A�� V�L���+P�\��^6��%��$���^�� ���P�8������p�(Q �T��IM�D糎5ܯ�4Z��)��y�c�? /�5�,hG�nu�拓uNhuò?�Ԭ\�vy/��Z�!�"��~2��W�cL������ֹ�����9��P���<�.fv!��i�_�>�0e��ov��8+�l_�ߕ�m��J��%���'K�T�bc�Dds%��G�� ȥ�*�����K�3{7��"��֡r�x��.�P�d����̅�nX�W8=�L��{:�31�R��s�Fm��o@Fϫ|YLn�ൈ�;�x��9���*+`ӆy�]��̷� �}�C*��f����y�� =�]4K��N�fD�0��L�t:8�uH4G�J����Vw],l�SUvȾ���$�j���\��6�F(h ��w��+�Ҏ g�έ��������pvEb�rU���Ƕk�콓�l!y���=�E�;)aэ E}�>W(҅������D[�WP�/�(���s� ՛?m���ʼnou)�~9�S��Z�L�L��-�qiA�Z��C�A��û��>L#��{�D�Q�Y�-K��v�������:���+^�J��Up���6��L�>���}�N�P���Fgfs/աh%ns9H�xP�'[���~�e�I����CLNpxҌ����d9l � @�ǭ�H�6F0��kc�@*-�����?8�����rd��y3.�7s Bf�Fuy�Ȱ�_<a��i����� ơ 4��߹s�o�<���d���͠F�����rYC�]�v�����zI���%���U� �] ��Z{��-��U�]훬N@��F���zW�Z�4�cy��gZV��Y7z�M�ɂۙFp�?���v��Y�p����a�6bE�W�L���3��@ �p�G>*.�B�)��CbMpQYR U�l?�F����*_֝c>�p/� �� �e��[̀�ǗL��jħB��ٔ72}4����H'q�2�rD��G��uc ����(�RGd�y�&��Ð`N^U$�aYJ�I���h^�w*��+G�ML���eF!�B�0���0���Xl�k=RȗD�l��s�~��#W!2������D���6�����_:TW!���b��K���j%�-�2�˒�� M�"c%.J���0@/� lJX����C�R%C����,^Q�YH������Y���@M�U��sV�P�+�� V�T*߬ 4fО� ̸��҇�����K��v5��37���-���%��!�v�ͷC�V�ߙKKm�D3JAvT$a�òh��3�sm���4R.�)�Q[���xvI��Pp�VIH����Ls؏0�� S��ᕯ+*�� �� �u�u&Xmmh6���n��x�]l�c_�N��.��4�AE�'<Z��W�?_�8���(�~��t^4b5,���(-�=�P�G}T�lx=aC�9R[ �e7H�~%J��S]`��x����Q:|�a&��V�~�ì�3�K��~��!3��h�D�$4��F�Ó)�X?E��p2wO���]X�;�v��в=�)�$��ٛ�oJgu��pK5|o�D�.�����n�ϣ��p四�����J���x]���-=�=ZI!�r��β��In��l��2��m�Mb˥ d7?v��Z �y�Ò3�������6(\ ��q˘ ,��K'��� X��}�x��m /�t a)[�L�K���2�y/�e��B�n@˷T.�S��o~����+a������-�X���/�S�{���}��������2�_��P���� �� ]Y���M��%�-�k����|�< @Ƒ�"�[\)���.|�~��fisIJپ�{ ��B��"�/E�G'g�%�w8����h��pk�1��G^��!9�4]�,�݇'uq+�e�o:�e��!,�oY�Y��齣e��Ì��#�d�o���� ��?����`*b\��C��y�q�G,ď����$�F�l<���ؽ�<m#���\~24�2 ��8�<ÏM\6Y!DM>qYeq��+W]q�G���'Vл=Ct��b�1���g�s�� M��,��̆H?� ��[zo"�����빛8~��%1��7�ϯ~���)����iG�����B�a�N}7F.�NQ]�ĥ�~}�a9@#*3_vbkz�ٷ�4u�̑�1����&c�\7E������7��ݱ����{FZ)��͒�.�*���&��oހ��ƍ�R7��&��*T+A<��f���g���(37/�(�$��(������h�R z����@R��\�-ү~s��3\�]i������h�|���m���� ��ZB��� s�A�v���XO9�ty�ꪴnW�8�)?:M��%�ճ �˥�ay�LV��/S/,)���x�����%� ���s���������8�9=\I��K���� 46c�j�=�w��F_��I�����R���c��/�(�s-{.��qS̻U�A;�N�G��6� ���E(h����"��k�㔭�X倈��}�������9> �/����_rm!/N��O����H?d�oŵ�����u��&@�=����p���d��� ���!�Wi]�A��Xf�S������5��)����k�f�z�K�f�����;c��9�Tҧq��#=������>]�Mk]�r,�K[o\�����cq|�K�.��$��ON����_���&�K z�� F�,�x�-�!�q?���� 9?�1x/�܀uy]ɭ��%,/[���Jԩ��\��6+�w�:q�l��F�f���L&�9���zLezE���-C��+b�n�/�����n�B_�7Tn^ ���!m�i+��5�d�����S�AO��!��|�=�X-��&�� �U��Գ���a7 X��z��%R���Uy�vd1XG�ش���J`-�7+^uϒD�YHy����#a��9�o���|m2%�������$�{��+I%��`�Hz�(�BV��M�e���{����_Ä�'�Ä[Df���{9�%�w�� !��O<w>��_φ��:[�v؞k۔�{�7]�t6tɿ��jߚ��(�.�a�8'ڰ����3Œ��U���og'r��T1/�{-� س.w�����A l#0"hyݥ.�2��-�)�G���Wר]�s�f��5l��m�v��9[O��`Y�g�ʀs���8�;8E�H���$��弸d@6����v|�j�R������6�?���z��\^z�KZ�5K�86��9�pnoc�U�Օm�� "F(�����n��R���p*�g�Ԃu��e-�W��P3�H֤H��I���SW��&ܔ����s\Ǟw��\��H�v]i֨&:�'Z�s��aktp�n�a�Tiǘ0�`��fcg�v<��H�>`�ǡ�� ����T� i�����f߲�Y�y�05�\�@Y��iNqEh��&͍^WN� �J�M���+@8U����Kʂ�<��Z��,.뀝o����k1�ݵ��0�.������0LE��)Z-�G�p��'�F��SB�H? f8 Q��l���U!`=Z�AVuApp7����T���~ڵAF�n�=,<�c�`r��`h��z��Y�͍I�|���F��M�+��l��a-� �{bn�����L����p��d.�+E�fT����p��3�U�08J8=?���������Ge=��w/��ٿ�~���OQ��?�~��U=�7�s��eoD�Of����_�%M�v��Ǩ*Z<!w�˒p��j��l7��;mg�|&��kfg-�y;���/�f��sU����*� O����(:�d}������.�:�a,��Ԧ��^`��t�&p���T�),c Nֱ�ή$�������)V������:����]��� HmH:�|%�|��k`'-k�����{x4�,���vNZ��#ArBH4ٽ�y:��w���^D��������7s,p B�އf���#�U'�z�4�*��]�m<6���)���iv�A<����ByOnj�v㙒�%���d���Z�1h�z��ӫ�8��E���$�Iǡ3�[J��9�`�a)t�![����(�'�M5�g�GF1���K�km9eS��$��/({/q_��������|�c��S�����'V��\i8i�9`ڷ����w�тs�:c�'Zfo�{��25��,w6������pBs�6*��N� ��<�|.9p��R/���ܳV*Z�}���c��Z�'E�����_�N���8��[]jM`㑋�G��������{���v��W��/�� ���)�qkB�4�-�N��MY{����P|[ۉR�9�V�ʾ{�f�A�q��VIT������}-{Џ|�(i�9AN���nb%*���wDS��i<F�[jY�u889��z�L�Q햌��I���/��v�1��G�ԉ�$�����[�z!�]7P���Q0{ G{s.0 �`�7�Ľ��b}!���x�B��C�QT`j�pcvG�&c�u�)C����^r+(C\�P_�_����u̓��w��w8��W(oE~�3�%�[uj�0���|�p����%�H7����^�L��u}�d(c�N��F�����vS졣�ʣ,oX��1���X+�C��-9e��K!'���)V���E����p��qqaε�����Ng��h��"{-�oCc�ģ��+�0�qF��R2��������n$5H�C�Њ� H_G���u�V��X3H���06�8I].+~+�h���4�G��ؘ��I0� #�e��y�=�*<�*����uW&� 2���i�M'oh�F~Q�v��Nc����Q�8�̝� �C����"7��� �4Yj%�����z�,�a\Vd��dx���߬9��o4��]�4�f��H�N;:SG;Ҙ�ln��~@��m�a�Į�i�[b��bz�)��dl� ���G�����ʦA$��[+�RI�Z��� �0J�_��y��s�'An���!�v�МQ:d�e��ѐ�6/�'��y�z�� sU�^��Wˉam�1(�f�V��*)����zVBy�P�_�P��L�o�UA�b4���h ���XX+��D�D�D�sz��%��,X��O4���_�X�̈́|���a��c�?����$U;��d9W��xO|��g��R%��E'vm��":�%��1��հ'E9&aF!_�[R�Ъ��2{�$'�)��s��g�.���Te��C��Do��Z�=�6}�n ����[R���f!9�h��J�q�O���8�p����u ���z=�n���r�h�3<�D�w^]I��+�\�/Q��tؤ�lw�>�R�ֹr{CJs%7!��G'�g3�� `�rF�C��`Mz��gO����.Y�J�q�^����"gfA\���u:�?#L� q���lvzkcci��~-�d6P��ޱ��g���/Z��k1r�� �B�q;�k��G{����Ex�9���a���N�O�����Q�FY���A�䎵�|7|�'q����Z��6.*cj��Œ���;�2&�Ɗ)�g�62 5=7�1���K�Z=���� / G9�fod��#�1�+�W��^_]A@��h��J��m�����]�wP��ŝA9�[c�^m��\nX��͕�;�<������A�h��Q8���IKL�LхQ,r&��J �U�iɇx���DL,�͟+�&Č�t�7)���ڔ�q_3W�NƳ1�O)�(E�VV��Z��s�>F��C`b��7�A��K��UQ�ņ�>?"|���h�yL������:4@%� �qx h|��s���u��\�+Z�!�����#F��`8ADO8zk�Œ�֙F����.�l(��Ԩ�*�_}+��!�AE~{ d_����t��UO*�U���pH�#!/B��B����#� UU,-���%�B���{G�ɴ�=4+`3��B龴�wB��;Ap�'Jk)�7{���x4��Q�g�I��"�P �lD��=����2�4#Z !� �M,��#��@x�)h]�6���<b#�E)Q8���V*7Pjw�=v���Z0�Ѽ%6O�9�Kp��p|�\��XVd#ͼ���0��lC��o��B&�]a]�p�(N�Ъ�n0������;>� �7@�.�_V�GV�Aj�(Qr[�u�ܲ��4H�U(�TFx%FF^V�` kP@t�=�q� ��h9 h�J�L�Ԕ��'� %*Qe'������6;x��Y%���D��S���e�}p��>�VF�4'Y�J��Y7|RnW��b����<(q:�J���T��{� ��{5p�;7jV��1�>��I&1hS�c��T�IQ�X�����*��Æ�x�;� '���3�@��@�@��/a'6r�_ T6i���4�\�xR]:"3.E8"�6��U��Os ݆'oy����t������6�ERE�f�&�R_�pM�]��P�6��3��)��϶zȹ9�R��̣i\�u��aU���ԏ�� �RXp��"�[��4�v��\�9]&䟬.�N�a0J��)VX��K4'�X�l(�80���#���E'�����$���������@n{a�+M~/*��Z%�G8Yq���-gd�� U�E�>k��B�V�;��ѣ�.�\�6������j�O\J s�p����8O�Z�2ꢺX���'۪��H��(`�2GІ�'�����[�5r�P[��ګ��\+�E���Kq�M�=B;��]c����+�v��HJp)� ���^�| !6K����� �>^���0(���t�v��#�Q!_]� ���d�G�E�C���f�f���l��2���%̹�t���?@8q�7|^A�L"l�H4T��'�k [m����6P�E�3-�Q�7�W\��F�2��Ř�����:�<�.: �LT/K��~>������lE�\�e,�45����%J�����`h���1G�ǧ�y���Qp�X2ef��^bH���M|���� ��U����V�p��t��]��,B�_4e�e���K�sh4<�*M$����8��4S�7�vr�Ε�;��|s{c��/Ov��_�t�n�(x�n�L^\![�9&5�5 ˢ�ك�h� �R�����P�>ZcK��R�� H��g&�ɧm��6'��gj��U ]X�r�Ƒ.G�DG�0D� �w�������� ��u�TZ(R��tjHLN� �=I��%��I��S2QEe�����hp:�8:r��'�Nv�z(T2[�;���q?d�p�]X���T�����љ��p��6��G����0�x�� �ms��D,�*���6���({����>�a���ޭFʙ/�B;Gc���y�m3U�-��rK"�_��b��{|��Sʍ��\��* Iݬ�;�7�l���7�!�6�7X\���"h���}K|���8�EG7�/1�R�/=*۾�'#��"�*{�ns�JE�f����ٱ����h�c�5�r�30�%��OzG�b;qxZ��o���\/� 1��ʉZg����;z�;G�5F"?dTl�5�9��gqp�)~�r�����߿|��b�m�Vw�u�b�&)�ܞ��d/[1��)�$ B�@EB�>����q_��IC#�5.[�[�v��'���_�{����nxS�ݠ8��q=U�����= �7���E��|����q&%0�aG�t�L���"�w���;W�ƗW:�gG���J�o�Д����p�h���^�+�;����4�n �f�/�.���ґ>��q�xo��WK�Bű�y�W����L����ǯH�8�e�^8��������8�n�[j���YE�4ݬ�q})Q��@`&I���:]������y�q�� �Ɠ��e�2ߗ����܉�#�N�X�m�O���do�#&��k:;��S��uO����A���aT8�g>�,J�5�-�o�k���ŬBh�x_.:WW�柪z����T����:%n��d*�We���61�~� �fg����~O��E�Q�X��r�aCW�T�ws��t:��&ݛs���IW�a4/�H��U��eI!��3i&1�́v��Yg����]c�6-�đ� �GC�9$+b�f귫�4&I�'���l�v��T�~�ݟu�[����@ܡ-��S��.���� ����T��O'[tnod.~��9���M����V��.v��T�qX���PFi�.' ��GZ���B��� 3�r�kA),�Q��M��M\!B#�x� o�� 9�$6�Qн�y$�E���1QTL��؆rC1�<�E :�ߝ�1���\6A�Q�S�hV�ɝs���s2�}i��wy�p��/���c C Wr��K)7::��d�o��H�v�a�.�ğH����!2��0��0��_���%��e���.�lH�酽�@\їhk���LR4y7c�@�P|�������{�wMm�r� P�� c,ك&_�/ؖvZ /��)��4������WK�Eu�w�[D`���1aOmF .ac0���G�>�&��C�vp�R�~6v�S|���-�^V��Ԕ�ӵhh�oz|_�`������ ��F!e� �H ����=� C��3YkI]��&�� �a�$]���]e9���0������v�+�qZֿ�x��G'L��-*$���L���Ψ���R�h���[�!�r��ڃ7��r���E�Zn�0���L�+��f�K�1D��j�$�3� �w[7(3��AohYL�q0'�FM6Bd ��3����9oO�Y/W�#?�O/W��;L� ҋ���>�)Q ���� �� �S�rP����8�;eD��F� bD '�qJ��iLWz���(1�ds||c����c�;:^s�b�+��@g�@�4�T1e��f��K��ǣ�rj�d��"��ܔe�nb����FB��I|}W6a&���_ �����D?��v�諔��~ka�L�v6=�+H�#�+�ή^mr���X�]�]u�y�'�ED�����K� �Sr�h� ^�?:�5��W��&�0B��P��}�I֏�������]v!la��!e��ƥ����8��IRL>�&��3n����Oe���I)����,~I��u�Z5���l�����7<d���3q`Q�%w��9V�ȇq2�1���;��lp��뮣Nssut��x̰���{sv�s|����u&=N�u���Ã�ss�Ͻ���cgz�֫�Wkw�ݻw���M}�����!� G��_m���xJq�oo�;^p����;�[��/��Y[�^����Ǜ7?��ʫ���^��Ň� 8��k��s�`��b��� a����b����`���Ǎ�y����Z����nh�h�mj������v� ͤV���m�m6a��F�y=�N�as�;[�����j������/���B���B��k��ɒ1Zd�o�g;k��_��[���/{�$o���/�p�n��^��X��m��������5�#^m��^C�����7*ڔ*;;�E��k�ٿ�U�� ����L��_�-8-��X�y�7��6��}�q��+<���P�54)4~�zj�^�m���'�4b_@�����Ó����Z9�ٯX��R�œ���`� 6V/�RYpE���aj�]��*���~A���}� ��_mn�؏�U>�<U?�n�^�r� pE�P�}h�!��e�X�N3���V$V�7Z�M'�x������Q�!�x�!����^+�yK0����t�b8:8���~���;�?WV��O�T(��Z��̔����j� %n7%;�h ���B��ydi�z.��=��ٶ�����'S��i�)�<nHn�(��^��3F�H:#���I�n���|�F/9Hq�])_D�0��V�}�W+�'-�7�&�JI��C�_��e�p���2��P��v�j%\"�9y��AF����JT�LbP��� _�J����Y�K��&�rƨ꿿���%R���nxQ~~3W�ȤU(Ҝ�ޜ�T���N,�`X����Sl��W<�� '�%�9aCD0�BUW����!�?l�s�������*qt��5ò����*�Tf��̋��6��A�b2����kC���|�f&�mC|�&]��bɐw-��N���m�K��yL��4Ģ�eF,RW�9�F*���<ϱ�;�!L�"��wp���n�ݢ� %F��'�P{07�Y�YGL機 �V��F��cՁ�EFKr�xfp4�f(J��i0� ��2��I��^�*�Bn��1)���{�q��� �Y���\Gzġq"�p�p��v���s8���=�l/O�K\�S�@w��S�tH,#h�K�e��M��U���"YKuvku��0�h;y�iq�u���s�rl�7�0�u����92� X�/���G'Y-&o �̎FdG7 ySi����&$�[��O�WW{�|���H�@ȸ| �k�>T*��(�b�h���y��Ep�nj�K��B(H�Y��~?��H�~�JH�a�K�HI�J�f7q5z�2����pȶ�ញs�ҧj�{��N�%����'�G�L����j�]{N�]�Bb^�x����Op���ߦLI/⽴�����I����i�� O�<����Y��V6��f[�&c���6F��2!4:�X�������oR(y�,���6���ڪE�z�w�0��V'f�H4C��'�))��R�ڵ+e�k18�28Z��4;WzOm=̊긋�����Ս9�,�O7�Q@$��ڙx�E�3Tf�6�P��l�U�?�}])x�fƩ_��|��ާ�x�c?}��&��."��]�br���N�3n5���=���}�Sw�O=V���^�$����?|(v�C(��3{�����?A�q��3M�h6<����m,R��n�Q@zE��7;{��M�1r{���`��Vy�/�V��?W���Z\*�]��9 >!;�^��ST��p"��ȝ�j�5��B��#����M��t�p���p^T�h�^��&U[[��u Uy�J*�8������jؒ1?��@"RHje��v��Kz�i�z��Dgg��9�~~'O¢��T�����l�v&�& ���Խ��������Ͼ�������)�Y���⤜�!�����^�� ��]ʕ�'f�<������љ��b���j�Z�V�%��O{g��n�*ګƟs��g˙���7d-���Y��%P���{��0�z�����a�X�-����I��;�_��}�9�r2l�d�F��>m\xW�lEg�J[L48P3#�>�"R�F?ᵜ�a3 �b������# D��/~ ���MQo�L��c�2�(Y�zf����/�������$��s;��\�f�~��1V~:�*]��B�j|D'-֯�\"/��q5K�sC!Ƅ����������k[��BE� �v9�.e�[�B^3��e[+s &¨�'ӏ<�s=�-e��d43��<d;�ñ��&�tC�K���!�4 � ~.ꨤb�?M�rM�3�0�?��ub%@J�$En�k��Wp�r��w���<�9Ӿ��j�M�ba��WP����E�G�� r�۱�:G�X�1�-��`�yhM3[�C���"��ә�j��T��^�����Wt����f��9��1Gf��������հzU ��cY��[���",�����E_$aY������7���<��+�j�� ��u��u1�NGw�!A@��� 'c>��}N�����J�/�s�%�ÄY�9��դ�g.MloF��) v7c%H�oi��؛��.�S�j~� jĸ�Շ(�k��)�N��;9�_��j�ܹ霁��C�|�������m���&a��ɗ����`~��{l������l0H:�U��#-o"�F�F���=�Z������>z����nf� ���WZ�W1%��p�|u�e��؛߇a��e��-f��З�]�+���u��i�/0m�ye���T�v���an{LT3��B��؈}^��0�X��U?Ϫ�ȼP�,7 gk��U�m.�"��j�s�3�2�b��%N^`��UU�5^5��W��W����0���|�r�TX�����_��vOW�a��r�fy�E�u��E��P 8�|�Ć]�� �X �]^}f-G�KD#��:�ɞpR���-C�%�(�~@�-�-m��\����^�k9�OD��l���,�=����ۻ(o���)`<B �c?�C����5��VW��I ��6�'�O�R��!=ĤR��5PFȯ��b�@&xA �g��R�%*�k����2`4�|! ��u#TFH�ʷA9���n�d/5�餝��P@����Ԉ|���~xA���=�C�pd��xk̄o��Qb����fpA�� ��b����+&&8wӭ���x���B��pX�k^ R��R���ƶk(`9kQ>XE|˲�d*0n�c���ĕ��%Kw^��"ԉ�C����c � �1�.m�d+a|���"L����:��Ph(�")�3�-b�ݲ(�p��2�E�_� .o�FHhVfnHh��e*g���wp���Z�\=�@�Y�@�Ds:�6�rp��2IU8�Ƭ5�; =�?Y�e0_}�RHet�W�����v��G,톭���jf)UpR7�8�=j���Q��|�y}�켐'�2( �^}�*��a�P��B�m�h��]�K���� ?.D���T�tOR@��Q�\��X��3�\�>띤�J1��|Vs��xW��s�}s�Ye����Ѣ"��}�����\/vn3O���������EE�=�^ ~��8�ƀ�!u�P��*9��J���o�x� :a�D/w��7%(,�RÂ$�� �_9$^��'@�b��NP���''!�c+�@Ϊ �\�W�=Wm_�(SO��<u��������1y_�>�B��D�I��`���pBNM�i2FA��M������LQ�R�|�yg��K�F'����}a�oX��jբ�|��I�.�)�o�H6���H]%�!�p���sH@�ۄ��8x�:��:�XS�,��z���D�X��k3�ی)ۈՈ��haW�,Na� o�����^�(������Ф]� ��q:�a4ŵ���%9X0!�_ V�<��5�BR�9�<Yv<�Y���T 2�Cn�.��;`�:�p�v�w����.!�P5J�H\��H���a/{I7C���-��֏�a���M�߰υ��d��B��#�k�Ţ�u*�l�E>�S�2z-�$�n���E����<��}���iQ�}�U��{ًXl^���歪^W%�r��k�ec��Yd\5����n��Ҳ�'Ʀ��7}ƫA$��/�����*��?��q���ޏ�zҝ|n}�;"��c37�⤞3*Vz���:�q�*��4c�+�c�B�rmGO��X�����׳W|rw�иQ �[a?��� �Hi>?��n�6��D�q�l���]J����:^X� �ra�a^?�u �O��ivt|J3RQ�yJJ�+_V�T~6��*�s�4^�k/���|a����c2��q}o�J�`mϗ<_l�� 3�p�4J��r0M#�}���苴�u��e-#�D��{���9���&����8� UM�~4P U���N+��R!�x��o4N����y��� nf���]��RI_�눑V�ag�i�I}�>�K�X�O����nK��!�hdi��p�����|I��s�W%ͭ��V�Ҿ�0I`����Ǎ*3�����4�� x�x���ߒ[�MC�� �u�n��bOY�v�Мk�V�wAa��@�m�O���N����`�#rQէ�a�ux�`�R�DS�7%`U�f{7W\t7����z\��#<SC��BE�?�d_�#GC�<ӣ3¸H�i%�f6������x�%d�!ɲ<��k2`��,W�6���u&s������ �a.ˁ�����=b�6Gw��>:��c�T?^�0��&~4�4��\�;x�&�l5��n�6Z��xe�_��W0�!�G��i ֗JL���lX�a�U����e���1�lP�����:7���W�a�B���:O��clƤfU�rC&�2����c��%����)��)Θ��X%�,<����X��rY�`<��i$R!�#)���"�� ��W����7��w��o66J��K�H@#;�v��ޒ�kzW�[Q��FpT�u]݃�.V��q���xO¢j�+}�;'��ˮH'��C�'��1h;��Gu��q��I����rU���<�f��3;�H�X��ԇ�;h�F� ;B#ϩy?;�7^R}�w��_��̌�oZ��Z霑)$��}��"y�)`#s��^��ʚM������r6ꀬ��K��⟼�`���l���}��;�"�X��絗��:ưo%<uD�- ��X$�1�Db<�Oj6X.#B'_qM����L��3{G�=��ˆ�ݽ��|n�3t[_IC��7,Ĕ��ƪ�g>ڭ�)\����\!��9-@NBI��/��h�lJ79�6v/͖6���HlN�W�P�0��Ma!ad��c��ѡ%7j��I"�5D�C P8�* Ȓ��/�0�R2_�&Tt��'-�ȱ�<M�2f�n�V����e����\��� 3z��-(�ذa��m$�'q(��1��+�z����*��|�4�7�y?�T��ϐF�Ȣ (t�FH2$��*<v��%I��aN�,l���ҢZ~���]ig��w�f�2k������gNf�Q������i�c��#����X`5��6� &���p�+�OU�!x �^ɩ������ w:ި݃�K/�|��t�9��>�%�'�z;2�#������e�4��ˌ�e-s6+P\F�?C�_����6�W�tqs���ޡ1(mIƚ0��64v��ιWjUx�|��N^[_�YT+e;�q"�R��8�������A%'�\ik�����Nzn��Ӓ�!�!$iN;��X�2Hh�ȯaw6� �TG��(�K�W��4ye߮ɋ��B�bH��H�4�('��q�ܘuB�Q��w��wa����E��sLf�������O�Y���ڐS�b� $!68��t�j�^��W�j��}�����{͟d��tK�'��fJ��ֲ����K���[P�ؤ��fR�����&=8����v��L�Z��nX��K9�`XM���%grZ2�1<�cofj���s��� �c���+�IU�R���[v�N��S�FQ��Ǣ %� ?�������q��is��Z�b��6���Z��(�[,]A�Y0��Oe�R��܂C0��K���UWF�;F��q�5�:��j ��05�(����e��K��S<O����E�fm({u<!mN,F\��r��l���+��a��7��咐M����rI�o>���Pτ��t� ��yl�t�6��$>6�M����|�����69�# .�E��'��� ��*�}��"�q?��A���*�~j�CpV�(f�� 7�b�>�`���qt���I�ݎ�/����&���_���+�2G}N`�ƣ�� K�t�ca]�D�%���&��l:��[��k6��S�8qX��J�hB��W�[�~8��ߟR�a%��(H���5ñ;�SȋC�����~Z�8���#�ȩm/�Enq�1I��0|w��e���}2�ٿń��<I�u|�@�rQF!��@��ey;��űK��L0m]aN�W/����=�N�i$1��R}�@��̼%p��r��~�,>��Ë��r��C�w�&��ו�M�n]X[���K�QƗ��Y8�N�&�=���j@���G�F��(2�����<�T�e�?�r�BmZ�Qa���%��sX^ ��=�{��(�5��\@������l�%8c����Gr����&ة�����l�>�N}�Cp�$���F1�6C�H��Ч:J c/ ���.���T]�(��+B�'�m�Y�%�r����ƻ�-v�+�S ��J��L����5�c������t���uc�VO#�Q_��O��\%&/'�b1y{�$e�"QW���zծ�~��<�+$_E�T�->h??���oƻ��/�,ҐG��;B&�� �"N�����7ϝ��_���]]��T��x�������C�)�^��������u͙��~���B��A�!��J��EW?8�/q��M_����k�|�eP��$ �9 �u�q�*�#&�\Y��� �Ջb˧���+-�Қve�Hhes2St$2�6��i!p�O���pa{0��=�X�~���I&k��al�+9|0�r0� 0O��I�E�V*qֿ��-y�D��u��!�7��ޖ�;�ۺ:Q���!��vl퍱s��hÞ���U��)��+�N���]���T�1�տ������R�rp�5dQS����_���ǛJb,g���G��.���)��ߖ��$�c����s��M�-\�E�|��Ȇ<oF\�P@_ ���}'+��C1�ij���֣���2mm�<�l�<>�������tz����?y���?}��O�|l)����b��{d��>}= )b&��L摐�Rv}���]C*�;;�������c����L�;���.^z���v�S�Ύ{d�����;{"ʏ��E�;�n�b(��nw��������M���.[��n�m�u`����d�n�Ի���E��v��\����M�G�צH�#����|[{��gZ���϶�ͭ=WY�dJaۙvno�l>1~��>�2���w�Z��-TF |�l{�H���]����g��z]�ؖ���|nP?�b���x���]���g�릲O�n��n��tS�u���`���f�>��������Xn �<��:�]�+T���?*�zt��1�4mu�F.���>.������,Ny��o/��������!�ö���)�:�NJ�˿�9�qY��w���㌚�����U����c�շ�j� G��aT���;0KQ���J[��P���?P����Fи��W|;���xM�eU�������j 6b�*�g���Iqll�c: ��T��]�����-��(�ӟ�+��Kpc$i��dz1�*�1��+�Z�G��'���6] �j���A��H��r6��S���m��l<���W��1[Idz�L����3�xR���G�=L�'�ŗ���{1t0e�iޢ3���uN�Z�w���1�=��ա�,�_c�֢��*�A�x�;oaX���K�G��8�KӵgWW�ʹo��Ryi�����m9Ds�r�0\�lͱ�>�z�'X��u4�� fT��3XY�O�4�Ye�{T] ).�������f>���,߷i�iP*���t(^�QxM��5Q��k����tTV�M� �&ƫl�Ѯߒ\������;��#�9�f�?�?�Y�}xF�0����D������h0���Ef[�4_���{��]u7�;��e��J C�x�vO��9r�$5�I�h�?���'t ��q��_�<�9!η��o���C*�?��.�j!|ys���U>sУ�P�\Sm��]�01uBҢa���}Q![����x"�o��ע�k~Ε��z��#m�{�b:��%�7����äO�������ꜝ��?昖��!�M�7�A���%������� �QJ�4�rL2�R-\�\����7�6֣��t��k��F�1���!C{�������+fQ�("U4��" ����z P�^ށ2�07�I��8h��+��{~��o�v�C�� �2<ĥ*�s>�9�["�ao��}>�Θ&F��bN^� ��d8j�hq���n�X��{�W0yX ���O3�f�p+�H��b�k� 16&��},����.k�-q� ��9�W�g�쿁 �+���z먻@m@;�h�?Uw�����4@�P\�RK�-R� �� XJk9�%���_Ng9�T��~�� 3>@a!��������R���J��*�[��n��R�ŊJ��)�=\M!�Z�i�@_��T[�`����oe�0��kV�3�x�ܴ�(V��/�2e�S"�M�LIY�q��r�`���RO��vID�����TΔ6.��39�G2�%��a�q\���%�2 �&'9X�Gr�N��:o���\ҟ�`���"�Y��8�yۧG����ހ���'���X�*�x#،�ݺ�I}�I /�1��c|&-��V�P�R8̩0�$Pp�`*Ù�Rֻ��� Xܲ�S��I 6��T#�g�H@1��$Pf�2-�� �b<zO�KL'��i���IXX�P��l�R���p6I�%)�3�>7���$�J^V�ܤ��f�="ڭ�Ǭ�ױr�h�ץ&��ދ�f,���gx�90i �x�!�?��f���H1��\���3��H�*ƯI)��3K��n�VM����&В��� $k|r~���,�~J��6�^��D�@��7nb�ߓ'� ��O�=\�oN��{Nq��\�i�ص_�?PK�l�| nTPKDTLdist/summernote.js��z[Ǒ6�{�*�4~�AI�3 m9�i"KI�{>F�A$a���h��{��[���@�v&��|���Շ�������>�����_^g�|t~1V�o��7���x��Ϊ{�ݹ�bg���|{kk�<?�&�Ű7��"���of�ӳEu���O6��qR=�NN{Ur\Mghb0�,f��%�Y)C��o��au2�o���\����UQ����A5 ����g�>�/��l����n}p���'���n}�=YN��tRuO�ӣ��Vu���7����ś����t1�-�ս{�������`ѩ~��ʲϧ�KP�s���h2<�TrP������l����p����Qm'�Z^a;6]3z��c�ҏx��am��6���ﺋ��Vz��w�;�:V�!z� ��W������/'��)F~�� ��x��:�?L /�m&���r00����>�����9h1 q+�yS��y�jyq����dz��V5����x|������������됐�?k%��_�|o�-�NZ��.f�Ŕ<��d�{���/�H]D�I�'��! �~2P�;���I�9�&�ݶ�%��4+ ����|\���sڑ���|�?�7�?>~��&S�_��q�o4�geC, �HB��V��^3Ӧ�X�ר�٩>��pF��ޅ�x/"�J>�mN'���U�Vm���9��z����}h��"��4�q�ӣ��ʛ�`'�F���X�d:{D�fbJV�mV�c�� ��wz���tqF�R�.�^��+h�WG@�6�� �����m���D�hveC-�OP���_\@_(�0f��r6Q�)��,�5�=u>�AU�(���K��L�y<��m�A΅�dg���L؟�.ϩ��,g�?UE�v�����9Bv.T���wf���n�q�%��� �:�A��t�5Ө��R��$4\/^b�Y�Ռ\���Me����CЌ�{i${:���ǣוL��n�h[Q�}2�n�.����֗q�s1�b���|���ݼ��1g k�f��_6Zw����ٰ<��ެf����M�D�-`m�u��7��3������L��L��G0��:���`�^V!�2Gӟn��F��s�8�1)��-��6����1a�b�B&Ym��f��E�����w��rq�\=�j��c�^�o��h!��e��=HM:�4���QU ^� ��Tg�à�Ƨ�hѧIw��������Q� �n� ��PKS#�(�l \����)�:|���e����8y��h���Z���%� Y:�� �E�~�v~��,ڤ�o���?f��ŵ(r��l�J���o�=� �xz9i��;�{�ML@Kg�1��`��`���*ɴ���ǧ� ,�0���fI��~,$�9DN���?^R7um��2:7r�59���$nW]���?�\���!Ӣ����h����z@̓V���p�v+R��eO+�-klYٖ�h=k]TSZпw�����s+L��k=����6��N�g"Бr������D�:���/�#S�}v��.D�����y�_�͆'�n��M��q���8����_� Y�0~��nj6}iX��H��)��ۚk�ÒL�m�'k,�e�S�urU`�y��1�'�3a�/�@q�g"0�!��a�i�|�@�LM�vR���s��VՙcR'�(��?8^�Ѧ1�B+[�����p�h�z��l� �#=� �b]�����$�菇�6�O���x:۴b1X���K+,v�.9|6�Dӷo��>L|�Kks[�~.%��b���.i�憯�)H�&��Q��r�p<ª�(jF jNl���1�D\!�>�.��g��>+��W��³?珲��_�XZ��܋B���GKaC�w���u�A8��|�d�y�~�����F~6�M3ᴦ��3_���>E�c�F�P�0����-��"e2���nUiD�Wp�� �(},X�8+�Y�����Tz.��� �8��?ݻ�y�+5%嗝�����ȫ`*��U��s���� i�6p1�^A�3��u�8 ������E�C�Px�Dm�+:^����+�_Z��SR�0�NO�3X"g���Y�[`� �t� �h ��<���]X��>ꏧ���4v�z�lt|<�B�?�c�Y�#T�X�^O9FJ���37=�Cɘܻ�y�J�D�5v��q*�qΒ^p��{Ӻ�K>b�)}ZΘ%�!Y0�8"a Ef���_\�*�3�3�٢KKTZ���)GF�;V�#�8�b�ݻ�@ˉ<�������-F���Y*��Wbr���?�^:�糘��b��}JQlfK]1�72˯����M�S�LgiN��Jϊ�W���-[д�F���]�̗�(4�����"�ʗO�U�5����j�k�ٟQ�EEd8�/�y.0�d�}����3�#�[�c3Rw=����#g5�3�e�Z�\��$�M &©;�l*��B-�h����,�z�e��!�r�/�]U_���xxĭ�NK*�N��;&_b ��-�t�/Fz�TC'͐I߲u�[S��u-�6� [���~Z�pG=��� ��B��2�h�2;R�R-�]Ѧc/�B��*��\��c���F8oC0!�Y���?�}�<d����E��<-�HX/�U���L.�� B\�w9h5ԉ�m1�+svo��]SYҼ�Z�>4�|��09ŋ�����KӓOv;��֜��֊{#�\��������*��u��v���"�*��:���E�SK�Jn[��zb����k%UK����Ta`��m�sP���۸r�z�N�ہ�D4<(dq㢦��@֬F`qV�?�N��*U �f�]�}I�,8�q$�k��Z>�u� W��W�l���t�2�� kO[/�zր�̠�hvM3�Xo�{�uf��q�4}'��m�.����&��.��/�qYm}�q�U��&CWW����2�k�G�Y�3ՍTC��T�"V�4�N��`� u�DIs֣��(�B��ϲ���C��3��6Lf�3x������M'���f��<\ݠ!�����x;�e��R�ʖ�������^�ڏ�*R~���K@�^ �n?�FP�M�VeEч:Ua�J�3f�ow�j9���cAV��j���\����H�̗�[��>Ph�Y �m��u����}�4�UC�V�J��dz�rc�cZ�� ֨�!�p��9���`�Yl�(�)�H�������G��L o7:2,�S#\�Z�Z�Y�Go�L�����z�dŴ�i��:���M��N�$lCpL̆�X�����ɓ�ɴX��F�����fp[���Vh:O�Y_�����:�S5��a�J�Kx3Dd!4��R��Z"�`��H����9�1p�Y�9�[�w�1���h:��1�n�}�dK�m}�T���ϰ��7�L��{�s�+��٣�FtX��]�9�e�*�����w������{+n;5�u� "9� ��n S�i����G�z!Y���Eݓ�LX��8a��M��V[�i����{���ԉ�᳧-m����L������ ���"*������հ���[�pq6=��#����v��^Z�P ��5:~�;X����?0�9"��{�J���o6��b�Q��a�����쥿�0�����e) Z��1؎���6�6?�8c�a�^�:�+��ǘ�F�$���D�WG�c�q/�'��9Dj�0\7�'�~��#�-�TO��%T-��5:��N�[��w��TmV���+�=��+���{h�7Z}e�������5�NYϖ�GÙga2�X�=��;+�_��g� � y%��"��t��i1]�� (�}���[R�@}[��N`�W�ͅ�Ӌh(�+V�?[*<Er�!��*z�aS�c�<ok����1��R�����;�Q�� � x�� �%�D%����f��!�@��Rd)�S�D�����<Q9g8p1>�^��֍fQ #yp)�br�JD��hB����J�~��(@a��x��O��C�8D��P�싪1�������b;��v�0����a$�g���2K�$0��8[��C�,�p�a��I�ћ_@+ `^�2��E2�` �ܛ/����½�5��m>��a���k����*��$��V���#�?��8��G2��|4Y��u�P��Ƿ���fG�� ��pe�¤�� V�ӎ&�9Djtk��\��:����ګ��T?�p������L�5�χ@���H � ��F��sw�E�\�3L�h����<�;7��P���T-���ǰ?yW%��W6lo@�=x<�~%��P �}��b��Q���L�T�aiXpY"@�i�?,�!����B��LLՄ�f�2�g��ہ�Ce&��8�f��F����k��a)F��X���!������I$Gj���Xx�Q�(ٺ�ɽ�^L:����Sdf4���w�ޘR� ��ފj�^���әw���4\��{ ����ь����o�|p� ݦ��&��'���G�@Ms���4��XY��u��,�`�D �/�OJ�4)�qm)Z�e�_�����]��NF��B#�0��h!6��o��O�s�y�y��q�'��h�*i�<�И��.�M~M����Y턝�٬�a�����Lx�E� R�E�%�B�ˢ�LO��h�]��x5f�9�YrΩ��h%���g���D�Az�q�K�j�8�5�`�D@._�*�.yZ�$�fṱF�C��ϟc-�⣐#?��(ʳ4l�Q���A�!,�c]�9�y�q ��*n5�ǵ,�+Ԑ��D��*X�<)�lw4� 5qLk����) ��~k��$ ��* kкo�o'����V�W�5� QM$ XvL��cL P?��`J�d��28��m��'���b��߹�o�g0r����f4_�D+�ܚ��y���CXN�s]q�qzNk��醩=,F��1��l�L�zɩ��fh�Q=�8�Nd�vR�����S���Qڂ��xi����>��v:�*0v�ɤ��&�w���mt/�L1c���ܗ#��4,�q�5� {(Uٌ�� L�8A)��©{��q��� �"�x�=�AQx�%M�K|�a�!��DU���蒽/qTmXu�0 ��ގ�?��Ac��eT\���W`M�s� ���r/��?����A%`O�y8�,vl��Jup��JL�:/arϪ�XB�`��"�4y�CHRG� 3�5� �Q�����7������y�P�D�zQ_�jt2��yMzn�s�)La��0�Z�"О��'H�Bc�B�H��۠�E$Y�ϜC��u������E��0����$�|��P��u�۴�$[�C��������Nf���S����0M�a�S��o24{u�����TH�sem0�ڢ�߆b��,��U �u�i:���F�:��l�9U�����52ZJ��J�A:�:��� �n���Z��{��A%:?��@;W���iq�N�Œ8,���\JI 5;۬X2����k����r��H L��k (���� ���u��0�;n���Mvܜq��U��[�,�y�����^p�㿺R���e�+`YAq�+?4��b��~�nX��Mf�Z��o.L������cj=j:u��Ǿ�_�c��<7�S��o����O�[g�o�Z�*:6*OSU��#�N���-�7����a�7ج����jk�b]9Y �[�`6y����� (@[�><t~D�W궃�yY����sW])����(��c�V���Q6�\b)�D?��v�<�A�ߟ̫o�yP[\8�<�� /%��,��L����x)���PDo�KU��(��9��am���|:^.�������#�.~ �EҒN�y����*�Z�M�s���?���VLӮL�!�f��8�}:����qG�nI?:l��>�o��ѓM�G' IX Q{w�$�3�L ��Q��}R��e�4NOLpa�l��4�&�ףSl�T=#9����Jl�ߟf��,�����0(E�G���our����!r�y��F�Zu�z��a�%�����4p��c����~������⸺�FQ'�ж��[��f�����7����[�{��w�Xtt���'-��_�@��v���X�}3B�9��7n\B�N/{9U)~�, Wq�aN@(��G0�^�t��v����/5�{����k��ap�˒�@~r�����n�?��1����I�A�Zg� xђ���O������EQuj������`���j���"�w.��4/]@���ykrpVu��,�B���\i҇���z�_Y~�r�K�"��J���Mڄ�]�H6��P�M��`���#��B_?�,���_���y�Cʜ��ϱ�����䥑��V>�K�����~�Jd6Y��%X�܊��DY'�p0]��P��`"��.��OU��a���D�M�'����C`G~ �VK��yK9hd��r:{��/Kr<�)��GJ�,�\}@ 3�#�w�6�d�&����M>=:y�zG{�s)�©�Mg��ޕ{>��o�S�*��8 cy��z1&�S ;@�6��(s�Fs}8ymƹF�ZK@ū.�@<�VU��L|mC^���<U��_��'%66#��b�#�N�| ���XJ�Ϝ�=�ӑ���X������Dqs�´��M����9�v��s��Ֆ���Յ1�a��8qo3�V�y� �x�:I[]g����e�����S8YR�9�Y� ӈ�C���d��ݚ�� R9�1�t�"2Jȷ�)��n�>p(_Cl��O0E����{�����in�h# Ӗl+^H`�i������9u��㚍�FӠ{�t��j�?����ݓ�����:]�ON�`i����]e�� _I�R��������EW?�XOQ�߉�^I��W�fqK�.u$�ABv���&Gr!�����9�]�r���qٌ�s��u�@���D����W�]8����B�#�����4\R)�1��*�y��`>� �E2G��HN�C���M����������P҅���{������k�BX��RQ-���Y �]+�`m����O�e�w �y�A�6Y+�@�ќ��YՕ��ß���H�K���k1�-�������$���=��]�!!�X�{t~ʠ+���V}��C`�_�]~�K��xs�������as�<��m8ۚ����' �������%�i�-2�a�o��~�ۓo���=揯�v�y����88x���v_�⒃���D5%��wa�r�)Zժf�����jx�d����;�������뻟�n�p�3�o~��[1�(ħ����Ma�����ݟ��� :zxg��_���� %[t���[��S��W��\Wn����#*B-��go�J=}�B���ٰ1�i18 ͟��K����(Ȋ�v�? X�]Q���N �'�3�(<���yD.�2��]Z �� �7`Kƌdz��@���t����t���KX���f�Z��O��jW78��ӟ����5�N��1�6mC�x�F�Cĩ(eV4���<~��3-V�q����ˋ���mCY�5��em��~؊+��̡;�.�\�V����9o4/�(7�BE$�rԵh���c'���y��7������C^��}N�r� 6��#F�r��\���f�tɜ��l<�v��\�2��\�qù6X?�#H�c���r�]��Z��A��r�(�E�Gİ��n�z�����ʾǮ;�� ��pdk�3�<�F�-�2���c������ߛ��\4Y�F/nsegp�~I0�f��'��qt�m��I���q�hl�8ϑ�G3^U��y�N��lE��A���O4�W4������3~79�_��F�'�������a�X�hz�D���՟"8 J�*�Vpw�l��(�*����|l�)���h�K6�d�;�S�? Q���M���WpI(` �sȖdZe��%�&�>��5a%���r�&���Ql�����oy j�wʬ���nF���5�Sqi��t�ڏ�/�lշ@�n_c�����K }�SJ����|�_��|���@�P�J>]�5���9y�D�;�� ���'n���R�㋋/�L_l]|y�����ڷ��6N���c쫴��s!��&�>o��]HE������-=5�l��|!�9@NJ�P[���T&$l1�J�JX;��7��;Z���2�?#ހ�e1M�E�39HCqo�ؔ�u X�id�t�ے���EY��W�C�[ M^�~�dx�b�uK>�9���6��S��� &H!+Vv�s?C�Ӓ%�;4�� ���HU��������c8�I���Q_���vJ㒍;��{� �������GI�I����g���D����mp�T#شۍ+��Sg�:�+n��h�UČ�s�����CJ�ۜd���4�]�G��<��l�+�Y���ɂ�P�MxM��,�0��-3A 3�(7l� �z�v��Ckg�@� Ҡn���[�k@���E�&��\;!����2�|����!N�,.�/��՜�Ӯ��� �V����JWvv�z�bDy��������e}Ǟ�tL�ҝ�X��b�<��ji���F�����6@bW�ά�ݑ<�ql8qê�,� /�t��ҺdZ&ū%U�#�q�k4�H�7r�VV�K�5z�s��X.MRE��{���8p�[ӟ�\�t�@���Y��u�{�������:e�Ҭ���1�k��aj����4�8Ӵq��&`�K�G����1���������r��l��9�|����$�) Ւ�3-���B���� ��:3�`]U�pҕI�0Z�p���kO3 Ȣ;�F�ױ�}y"��nR�d�ON�x+)a����SOs��k=�����������;X19/H%�Y,?nd�gtnI��f���UD �e4j�/�"�!��IJh���Gd^ ���H4�giu+ftQ�T ("�u�$�;�YX��+�W)e8PM��:װ��E���d��-:�N�}��y�7��R�;a�w-&$+���o����f��� Ѩ��� 2�S?:(�U� ��\��G��rG<8>�KբNN�5��&�+�!�����H���������g襦�ӂr�P�FB�聐�t�;�Ouٽϻ���;�- 'q ]�k�]<�q���R�dU%�7=9aL+������}>��x��{��!��v� `ܴҿr �=Y� 줶���c��`Mw��;�JݕZ�Z�P'yv����^��X ��#��Ⴁ�~@�@�V����ɽh�"e9c���_�RG�JFq�F~��#m⃕�%��Na$d�@J��`0H��? s�f��#���?f�D�#��WjẄt� aإ�ƨ RM�0����hs��`�i�:H���k���H�{]Z�|�b�����Mmr���8�g�Ҋ�%;#5�5�� ,�-9W��M�DQ%3�\b+x��1ܭf>ĥ��r\�ǎѝ���iCE��� m4b/���mH�K۴{Q,�<_��U��xw���� wz��y!47�M�၇p��M��81��e%c��YX�7^�#�a�A$F$�/�4��`&6&� �CE���$���6��#��>p�u97���Z�zޗ��/!CA�7Qfc�F[-}k��o�B�Z�ʆx���@Q�qY�q�!�:Bs]$��9�+�]�ks0."�n)U8�aX��n��IY�;�|�u�[�t�6#��)ee,i�d�BVC�v��ƿ+Ƣ�Ե��KL(���=jAF~F=��_�Ÿ��}�f�N���V�zq\�hu7�8�%#gH�b,J5��}��ώv��V(�r��?���?qT�l�.��{��65�5�处�}mg7�ٻ�r'��N!��I���]���##!��!�~�Nr�<�j�u��ve0v�{#5+�S�t�$̗��=�IiŬ���\����+�Qd^`�#$#g�\/��C(��&��\�y��a����e���qI6�3#6f��jYe�B2����'�U#W-�����!A��\e��r%�M.%bv�)�1Q� �5 l�P&�T���4�d��Jp��tI�M+��r �Z���zRY�3C\�ru�<d0Q�ҋ�H0�§}��rq��u���z֒ /�j��=�F�,���M�+���KHv38]cͥWs�V[�����B]c��$\%��p��4�+j�gF�P�,�r��H)���{���1Y��� ��-��Zi'Q[٬��05�sr*riQ�\l�B<��ev�r >��Rm2�wS����;�;���7\��O���?i�EҒ�x�Ī�m{Ʉ�#�9�����$��*���GR����'����B��Ë�乔���XE0���+-�P��K���s��r#�Xb����<��V8S��n�N宼����-�'�G��� Y ����<Q.b3?�%E�"�?��V��I�R��3,H�<^[�\�BF�N���V�مJ��'o�@˷o�q*�h�\e>��8�`/��D�����v�E<;��Fަ�Yz�R�>���E۸�*(Ϧ�}��QV�0���V�N�W`W�(z��``�D*�ԍ����w�a��ti?Wt[Za5:� P��Ba�4� x�@dH��D�,8�[�x��<�Dt1�(�������3|E�,^����w%��>wn@�a� ����`}Q�j �OI�**�i�b�5a��� �)�� dZ*�}V�!� �+ì9��"V�=o�l�`.�L�n5��Z$��69�tb�F�{+�%��kf�c�U'ļ�������q�m)r. p�)c�gx*�F��T4q��4���?�u$e��0Vjh<;�q(s���_B��\�u���l��6�l',�j�fD��'��]�%��uũT�6����9�}��(V����(%QKQ(��e���ɱ�"ʅ��,Ӧ/x[�)� ,.{�٘�+u1��-��P��s���ڡW����&�S�Hƶ&k��p��[.vRV��z�/k!�><'���u��3%X\��� r�[z����U��X��q0ñ���|_yU��x�<I};T��E�\���d��%G�K�.����.3`�">��0�1�g��US�x���Js�� �+ UE���_�����*��d巉�b3���2n�)l&��Jq�?aY���%Q�M�N)��Q���`u�X�S*�M�Igf���Or����"�bv�bB�#�n䎣yp�XyLQ��O�S�8�e�=9>�kt� 7s����v�N�����P�i�}�"]�;�aX��+���(QY1���c=-/\��-�Ĝ[�`�vP,& Z���v��}j�O?t��V�.t=�Mz����7ї^$5�Ȗ�aW���ZR��{�hص�>U�l@�G/D�+!�h��T�V�e���. v�%���!C+�%3 d����+ȶv��>��`s��{��d�^�! $�N����(�,���_�۾^�jJ��˂,s�ڸUT���ľ�W�úĭ��6f{2!;f?+g�6�X�u2;��f�O���a ���)��8����k��UL��A.°�%�����ɬɢ-��'ٖ/a �/p��k\H�#�G=c%�u��`��1�<�H�u� Foo�)���3�\�Uf9%���AN&�� /�!��k�,������g\�M���[�P��+jŶ�X��Xʃ�S�SӴ�O��jDҸ��6XaJ���U7<�v��}1~���яY�M�w|ں�����xg��)���[}Y�&�w��T:!��Nob�r�n�]���o��=�k�x6�����<�+`FA}(}�˭ÿN�:{��[�px?��[�/'3���K|�I.(�i��̜ƹ�Œo�d�i5�������e)OlةX/�xޟ�Z^���9��=�he+^��f6<�t�?��/���F��G�?ݸ�q��/�:��F���!�ˍ�S%맦�G"�Ì'�vq�3��2��F�;����4J�)�@n�Ŕ�M������ [��݁��@��M�����?���QzN$�����}S�+��"���x�\y�,�� ez�����'�~���^N�>�c��v8���H�9�|'������O�.¿�����3\+�C��sG�Ð��(TH��X �2mg7>��)7��Ƀ�cyM��Ȓ 9�;��� ���b�=�&Þ��w���mƒM������IĂ�Ţ?8�[��.�z��@}n=�[<�ZN��#T˧�|�8��T�M'L�D��<��Ã�h��X���Gç�|+֚��s��0��yq� ��6����ø9�U�2����M\`��Xc}d7>�α���x}����!-l��1�R�g۔,e�{���q%� �.`+V��FçS�4��@}.�AtE�{��Ɖ�Sd`)zFa�����Ӡ&��5㙵�|} Q�;�"���O]����z5�k��n�Lxmr��#(���o�Y[Sn(څ��k����&��7!v ~��E>7d��햻�l���� <��B�3��/E;�����l�.@�6V�a������L�)�t��yv�&����tƌ舁cN]}��p�.0Sh~�2;�����3�s<����Wʟ�-绳t�9ٞP���mA6ޡ�D��uy$����&D��_O���5���_)?:1�HL�R�4�Df�/O8KM~�vpMj'��).<g�����J�q���ǍS�ww��r����%^��x�K췗��%����}�����e���\�"�e���~2C~�N~aO��=m�x£�3�����r��,k�E�Gu�[q��1,��e���E/Un�X���Ҏ�P�z���/p�sP��`j���%�.�(J0��%S�P���e��S=�SsR���H?�{�+��sc`1��Z�����Z�V&!ʀC<�� ����ا9}�}�s�z�T�[.�� �ɏ� Ε+Q�4-O��o���õ>�&�����ú��ӡX����_9�a��Bs�)oؑ��p�O�.oI�_���A��w�ܺ4���RH<v��L�|wN�gy�L�����kn��j�21LN˔�W��]�L�۰=/�hm�������V^�ğ+,u��G<��?�3��seY����\����~��|[W��\f ]kK/-�"��0��H�F�R^2h>�0�E��y���E�&x>�Ѵ�]L�RT�W�1��E���Ƚ?�r,7/���ݢ5:���*���s��T�GXo���'<g�\��gJ��D~�r1�ћ�/�w��`��[����|�L��.Q�N�J���"tQ�����R��-�S���2�9=C��]6_������e����W��>�}�o}��SN���9�ԩS�;�����A�":>ћF�D�m\����UY(�'�Z�=�1Kz1~����� u�� XK�>��v�<R^����VH��TJ�ڊ=C|O*ŏZ��Y�b���!�u��ە%��}0���rQ�n+yp�<?���7%��7T �\�©��c�\�[y�q�LJ�4F��V�%5�)a *�:"�,����Μݔ ���t�y��y���R��+��9,�`�'�8��k<�ch�Q ����ҫX�Șҧ����Z�+~WR�V�ߍ��3}��U���2��%v�ef ��A� �C�+~� ��.���>JNKmWh���ty�<�����p�~�p���[�C��o�|~�Î������Y�Schu�U�h)�d<��B~��{�(�\��r��Ӈ#X},x;dU�{�Wf�R+��:���_�\�l��=�x�W���t��Z%�r&O&�'oL���H�Q%c�*\+��R.�d�Y=�ZB���r���he��' ��Z�p<�%���,�ˈLS�oʞO�|^kQח�,8��N������{���%�r.� 7 %r1!P+=� �%1�����W{�q�\(�: KĬ 7g E�՝gx��_�ғ(�>�Q�)ڗO|�2��]A8�u��w7�ݭ�}��>��}��>��}��>��>���\�@���_N�3�/���-���\�V�B�x f�E�՛:�9��O � � �H����<�}����GCr+�/5�!p�<�SG!dt�8�B�V��F#�W-��J��Q��-�3�� '�WT�HK�g ��)��"mR�#�x4e�S��km���r�-G�w�I��^�E��� |�Z���u�R��GkY�Sٯ�Gk��orc����U�ǯC&p��>���0r�Tطú�<L?~XD��I��Ŝ3[�Z��9Y�y��hڟs���us �s�Y<d�rR���ȋiQHfE��Rj�qxTߑ����$�5j�qp�S��C�>�M��Y�f��w�Ͳy+�T���ãܐJXa��FSN��!�+��S���ϭ�N?V1A��éY#C�N����k�4F��ꀖ��$N�f.�ìH����X���Ptu�K�w{Y.Zd�������j6�*��k�U������M���L=�����=��D:N��V��ˋR\[\���c{a�4�=��&���+Virl��Wm6�մٲ��M0l�f<���r�x�n:ﰖN<ת�RM�aE8a�$jjJ��b�VKU8����ww��QGC�>�s=x(WW�����S��r�u���z�u��v�u3����_��rl���@���|L3n:�h:רϵ��Q<=�aF�$����R�Ҍve ���`p���� �zk-Q�"�Z�����s[������>z�d�i�www<�ۯ�4�;���}>:�����>�8����'��%�Ϗ��ovvӶ�?c+�#��J��G�z�H��'���?�k =}�'綫O�)��߁��RZ�<}�2?�w+�b�_��ޓ�x,������=#�� �3���Z���G����7�Y�a���7��3�7��3{-�ߔ�ϼ�&�=�7���O c|�;�?���w��⬏7 ���oE�4����:�w���߽���7�g~x+O��8p|��x���-?�����?���d���c$�����t��G��w���{��ˠ��w���189{d6dđ�����Pg4����w��b��(D��<�� ���3x�YY��~'��i�Z����E��W�X�d��M '�#<��R��dy0�ehȋl`�������1X� Ț3G�* ���L�zI攝,7eC��3D۳D&۳T:"�w�?�D[ȶ���p��O����$�ߐ�d�n��mO�mϢ�y/:�x)?��z���Ÿ�29��P����f∛Ff�XL��� ��b��u��,j�2��\$�d&�ƛ�I}uxs��G W�`:�,Ɠ�;<|��K��r�ꍔ�87I��T���楔� ����Q�Vsi�w�!�����Ǔ�h0�Χ'��v����h��[�����O>�ÿ���z��g����'�IX�������M r� s9f����Cv^��<�� ��T�X}�=y����7ڑ�D��������P��"�U���M��3d�I��U�P��vfwxd`v����z &�,S�Ydg�� �eq��j�،&K;�|�GI��Q����n\�7�3�jb�IC��ͻpsb���O�V<�S{䏠V�z)HR5;j�Q��Uy��mF`��N��))��al(ȣ�k1�!\���tq@�|����R��Bﲻ�O<d��^�q����TQ��Pw���R<k�;&pJ"5���f���Yfv��QE.J����%Bp�\��y(܃���e5��BO|x`��U#@����h��?�ᢔf;��* �K�<�Hr����"'���G�}}���ǿrS��Y 3���try�%���dх�~ȧY���|���[��m��l�9��R*���J� Y��Ak-��t����K��&���봉38���Q�YM��<�w�x����4������G#�KI�<pI�>i��۶i`/Ha����ˮ�L�jB�U�b�����8�N�V���\��y`7��+oFr����z�4P)��l�����eZj>��v�$ȓ�ߙ��U�I���m��$'k�I�'��IhT��S"Ԁ+rJ�EząJ�t��G�ȱ�sp�A�S�>`^:�[ڨ�M��'(��M�c͉���沦�.YצI��_�bp�g��-�.��נx�E��@��sr�YA�n ���7g��w��Q�'�m%�WR�k�Q�۵�elY1ɨݡ�4����.h�Ѥr�H��"�U��$3ݧp�]��+ٹ,�"��u}���+ae}[�J3w�2XNdX&�{I�0J��-F �I�FY�74���Q�Q���0�Nr�����2���![3T}�����'H/�<@ˁ�����(�I�=è���^�D�6�]��y,��TRѪpC�C|�U���r�:W�#�/:�>�$tox@�]���Sc��|��������˲<Vz�5�d �T����.� �zYt��,o��?��ɚ���%�q�g��Xl<0(��C�=*�H�E hBc\�7��mq�֟B��k�:R� aE��j6�hjx��5ڗ�U(+��f�zLf5�8>��YBX�(��M�i��M��& aE�̲&UucT���4lW<W�)Y]�)����b�xs1�Ū���A�b8y��w�<�f���I��Ȭ�×�\N�bR��%9��Xŋs��τi��i x�VU])E���� ��,�y"l���JìS=C|�O'<G>ɯg�N�N���1���X9��pYp/����\��S��6 |��"�]ݾk�2�?����+X�˥3�0gk7�N�1G�z+9���Ҍiٯ�רw�Ѥ�����uaJ����_����E <���ӧ@(0C�P���n_���nV�Ì�؎Ү �U_��>�Kx �滠��y/ݤ�2 7x����g����M�RO��N���t,��)���X�8k���VI�n�P�R��J�IM[�]��ZU����^�� ��F���=k �m��E��*���@~l!���r�H�O&�)��KK��@�1z�ey�B.���H�j*���<��7m�ǮY@fl�C�Z�^� �d��G��7[��L���\w�7�f�(\(�������9�2���ҍ��I:�J�PR�,�ȗ��PDw��CQ�G%�e��w$�;Cx��#w��ur������3V�����t��nK(��� � |����(W�6{5�s�Z瘐��N�e��/�R�+!���&�K�����ĸ��XC�YӀ��u�(|МlC�Ƭ ��-xK��͚:z�� �y$S��RCn���W��Z2�5�M'z�͖���h��eWI"��8�� ��-D/��24_@jk��L�[����p3C���/A$4�f��D�b�Kb��(�!��QC͂^� b�y�RJ2�;CEuOq�gF#�dpu�iWv���{�FT����9��`MA���n1vq��^+�%�ܝT2�e�1�*ʍȊ3�#5�-e6�� %R�n]�[J�ܲy�B���r��f%��69��X{��,Sd�+,�3��O|-����|m�4x��w������Ջ�*�tg�O!��HA^r��îQ���=�y.o��W_������4)c�b�:�2�#��e/`��d�ZWP�필��%��k�"�6����a�ɮ�J h�E��A�د��i���)�-ĚX�Db�1`Q'���2}l��3#x̧�H�.�x�(��E�U/g4���S�8#Ib,ß���e�R1uTX5�SL��I�j�VA#��U:�Sl�˗�2%�[N��0m�8�UTE���� ��m0�r@?�`vb%��2����Ś�Z8�Śi�����D�Wt��A�J� ��_�Н�tWb���ۧ��d�w\��6�Wjt*�wvpUz^VX|�]-��~��E\9�hY���1��/�����"=��z\٭�O����Jo���p��VM��D9���|��=��^?S(FE߅���4�Oe(]�-�!f%㚎][�~�Z5r� 1RM��`�w2�*�#!�?�3d�?�/9����88�JM����[�[G��e�P���?����Sؽ�x��5T����Lĵ��F��j�KĦr�ΪQ��Ay�'adjI�z��Vӣ塡� �ƭm�&�Œ�;���4ډc��Y[��n�6s���Ah����,�P$}�l�Iy�t�0.:��^�ys�UJ�2��j�A�������)C?s�/[r�E�8]�kzv���?��X�|��C`��{S��$"K�5������ƣ!�0cj�"[�Rq>��Tp��)Ƿ6��Y�5H�rjiq�]+5��&v�F�tg����*Fo`�P-��z?��x�}��7֠�`y� Z!S�*y!C �����>FF!�r� H �� �$�q�c��0F(+ļ��`���G�XN`{w���++����A�ـU�Z�0��MRh`/��z3�������Rs!nԖ ұb��P&F~e� K\�ɍ_����e�rt�S��ˉ Py8�`XJ� � ���#/H�ep�`��]�.�j>���n��M��`��D��(��f!A�%U-�$mt>Q3�Gx%Q��U�#S�ýV�r6@w�yq�iN���k������Mx�\Tf���J�«�#P�孉\ fr��\}�T���g^���t�3�7nxi�Xz�J���� +����@M:�i�ur� �L֫n�]�d�)��d-�(H�_T:<D��t�*e�2��4�$^��Π�*���'y��Hۤ�B���J��[�&�e\�}a�)(����iau�vc743~J�����%�!�X}��p�o�K�-&�<�d/����;c,�`�����~�:����lm��w��X)��>Nb�� >:�X�I�v�1#�\���ScW��<G��(����/��skrL� '�;[��<��Ó�O�)v��99�.3�R=�n���Ӽ]���lX}q����3^�W��-Z)4����hE~f��Y(R�%��`ڤ�]A�L0��^��F��4:Z�L��2fGSyT��購11�Wp�&���1m��d�5>X4�Q����bM;�!v��Π���Q��Ȱ� `��$1���;�HA���$̽i �e n����@8�x()ӗ�X��������W�����?i�c��e�C�� �\�Sͅ�q�̯���I���^őڅ�� h��bf��=y�� xe�����6��&��˵�tz(�X_*l�Pkz<��.��8��1&%L;�q�}��8v.�.�2y�~s� �})9R"9<�Z��ڡ9� 2 ��$�����-��q���|y�,K]?���M,�e{N������2���g��F�\]Fe�*�HdY�rsD�G�qvy"��m%daT����oF$�uN�s)7�l����!�T8�e�1�cv�9r����`�)H]�^���z%#���ڴ��$� ���1�f0\����/���;��A��a�g�|> �U���\t&�A�į�,#j�KE ?�Cd"�"uvɳ��y*�kh��*4DDҍ mݘ I���#�����Ʈ��)��euE�u�5J�R����Uy.$�s�x� �k���)\������i����ف�7cD�8t�����~�,�t�N�2�16�Z�*�;`) 'D���h0�4 d�n�`���$Uz^�a�ظP�fY�p�es�[�2�9�v�i\P��p���lI���¡� �M+E�[E�W I�&Ͻ����e��'��z�X�d�?��&zD���"=��U� �a�����9�?�Ҧ�E>�3��Q��(X����l��@I&�5�e�Հ��鈮�M�:������8 �&0?�-�O,�Jl�x�Ƈ���83�i覢^=\�Qa�Xjr�ZW�aD%�̿�~�����)�1di�z�ԹWT _m,5W�`m)�U��ţz���=mn\��5t�<{7Y��\w��pr�^3��Ta�_0�ɵl��hc`�8��/6g��er:P���^S�������"��f[ �q�[��2l-�����6�������trLsg=�N��Q ���=�g�)S*� "��!˟-�[[�����Oz�����^�| �m�ywWӆ�7���\,��2���;���8r��X�,�qQIJ^��܍$�*�Ǎ�\Ux�ryN[�����W2S�I1�+V_�N>�c ~�X��碠�����rv���s�Y���T����~֙3~���%"��O#�S�Z�����y����N�n�-ݭ�$;���_ 2�'���>&4��8$�ldb�'�)��K-��O��.�խ��S�-�5��z%�ΙȬ�?�(]+ N���эв��7�2Z�L�zEf���`��4m]�D�L��@C7���д�GL��� ��#���NC��>�eg��MI�����1�p��K���6� ����+��?���66�Y�u�}Q��eF(J��i��$8� ����N:8 �%4����ѢY�]#�Ӭ�g���"@;�n���5I�z2�$'BIHhT�]��v:�i�?�,'�"��ܴ����`\�����bG6�WΗ��5DQ��O�9V�R���0�Z*�Y��g6X���OZ�J�%�R.íE�:X��/IS��U�f�<+�f�a�z��c<�-I����c�8�T `�C2�$(6%K��"Q�;�;wG��ak�ܷ��X��Q�E?{��0kA�^��g ��a���6�6p�E0�������r������E 3\[D�e<ZT�;5"x�NB��O}7�f�h�+��U�$�Ne����[1&P���_��� �w�@0�mM��=2D���R��(����I)ɵx:���k�� ��n=����9R{��}*~4t3��.M��x|9�3�^�9�زk(L���� (r��]�O�C�l�9?~n��^�H0BI�Mm���6�%�j�6;Kw߳��ARo�����ۢ\S��H�6Y|-3W�C��E�q�}_|��8��C�ϔ�?i�s��vWտMo��n��n�����vGa�|����g��Y?�X�7������� 2>V�`Q��֣��.�Z_�g����r$��PD�Y���^�l�!�&�1l�W���Tt)���f���{7�5�;��Xwp^{�8�9�^��븦�� ���� -��� oe���xǹ_�σ�|�sgNg�J4��CX�����U��@s.����]� ���+C��.dl4G����鿘�ř�6N�`h���ŰZ��5�g�8�b�N���K��`L_q�C��3�,̩� ^�ŋ� �njW���:ޔ�Y�S+���fi��#����a��U�b����x�V�@ ��f�cZ���#��]ԫ�N���qh����TF�kE���goD�S�=l6��y<��ԌŻ���r�؊9W��� ֳŇ���z���<4�}m >�o�d������p�Yo�)�EON����C�6���B{i-��^���`� x}}��h�:�ϻ%��C�x&g�<x#@ތ?�b�./E�b1�v��qig%yF�1ls<��M~�2�N�C���h�':� 0����S:�7�@�D2�C�\ e<9I!)�R0�\n��Op�Gc�SD�\��(�-��40�[ <���0��7���*&:���=�U"۟�y~9-y�5s�L�z��v)]"�F��v�|ZڮZe1��X���N�J�M�&M�}�7�D��#q�r�tY��n�!�I�X��-�A;٨Ƣ\!���g9���Nh.>|(K"a_�z�ہ�f]yeZm�9��ِO˨~T�ɇޙvf2 ���s���DV�Ʊ254��Gxn�cv�TDx^��ȇ{x��&�P�#\Pz�w��x�[Q���*�+����p4�4�똈p:���7��V��g�)0����ܐ1��a����e�V�І�~YT�������I�e�5.��KsӐ&9�c�S��C�W⮨]Ȅ�{E�\)�v�=��- Î�m���.xLp��sP�z���a��H��LgW9�q�! ��n�^e�i&�Gm/���"�W���H6Y�)w8��������佄�kd� �5�j����LZM�3 �E�>�|��|Ci���p5I�U�����������"kI�� \I���m���*����f�̓�o�aM��`�q����({<��֯s�U����|oU�^��2���|������3 �E�u$��M�����C@�����e������u�V�ZB��K�$ڼ��b�����x�6$�Cs,��;��^#���jf�I��߈Q-�+��7��F��^�����m���_��ٛ���d���)���q�����8!g��l�Ǖ~'�7�=�uј�V=�@����`7��q̨<=�ʅ��ޛMQ�k�JMg~��Rq���h<Z��9�p���N�ހc���l�FE���輪�j'�U��F&���A��lz��� X�Ï���%�/�$z�yYt6�����"�f�>�� �4�;�:�ʁ� �q]��ͷ!j�Y����;h�i8���o e�V\����Q \b�+��W�Q~���ဘ��b�-��|3�l�Y�V�~ګM���������;Qi��a��8�}��-p�a����@�(9�~�@0�:韏�o����9.��w�7y�W��]��"}��Q_�&�M�w��2Ӑ�H�'���Ą��V�< "7�F�I� ?A�C g�|��o�Kܪ�İ#`*�6nj.^���%m��S�m�h�B�����L 3�@�h n�]�bIDEG �L��"�=:�¨{!k��5.�h� ���()�m��"b�<�.[M���0�b:&��|;�+�:%�Mj�l�G.�JF�d��:h� zM!%U1A��Շ�ٮ~����~���r�����Lk����=�;[���2��$����7~��d������r�N����?a��h�$�=�0z���PH4��:��d��3[�/k�<�d�G��W� �n�h��F�� ��z+��� �8�Q������ȩ[�t�ȣ:�eGX(��c�aT�ţܺ�ᆐ��o��2��p�,�w] 0 ����?S;jF�� L��P_�~�'#�1jV�2�e�~8��'X5=�@�#���8�\ۈ��$Q�>O&�&&I&Td��lo~��tePܗx�J�s�7EUk=�/�0t��~�c��$�U�R�W7��=::Kٚ��<!o��d�y�HF�e�◁B��xF$\:��'�x��OE�ƻ�a�(�0j�Y�g?��ZCN����f@�I-V$�e�Wћ,��;VP���(E]�/7����$5���Bi�I����f1�r�eE�b�<�-�qt3Z�930ʟ��I�Q�k�3��y��n�`�U��W'�`e���n�8^q{�G�,�!��Eh����4E�w�٥10 ����$\� �ڭ箴��!mS�:�nd���/�L������Mx|!�G��W(���:��j2ׅ�vu�O�}����oVu���ho��_�<y�b�ц�G�lw�UK�,�?I3�E&tg:%���Q��O��[�cݎ!M���<�S�)_"�@�W��B�~_4������z.' ��k�1_�}����6r9i#^� ����J.i��봄]�W���Y��]գ���V$]�=[?��)yv�+�7�Q�;!�i�}Y�x�B�L��$�"�z��� �����]���Hr���ۆ�/nPW�X�6���p��T����Y������u>�cYQc�����eO�m��p6e��K�ĕ6�G��;Ւ8�"���P�h��;�J�ϸ�ۄ��ӱE��D���s?ӄ�r= <e>��MTS�\�=��JX^�_�����>���F�P-g�y#�{�`���N�1qKTx�彼Wt!�������;�b��iy��c�t�H�d]3Z,/@ʻ�cB ���A9�����V8z�A0��`�FjMs���}2B�Ⱦ��y���'[��ve�$ol-Jżj�h������s�.��'G��.`dX�C���v�?�ȧ�E׃��0K�wmܒ��eؽ�v��s�X�J�Pm|O"�$��\�p�c`D ���q9ڼ�.�N"p2�,�J�v��LԙV�� ep� &��0�5M��F4�\W,�����v;��<"�xSZ�dp��UXq�(4�_Z4S�%�Q)��;q$k�Ʊ���)�-i!Hγ ٬�U�Z�1LN]5�YJtS��@��e5�q1�Z��ྊ�ф'� 850��Y��L��jr�W��ӓ� ����YI>��_�P4����K�r���Ή͕�-� +~˝Nz#����%�N�������lG�D��ݗ��������v1�h������',.�s�?a2[��F���z�/�/�=��m��҉�(`zd���ܜ}��v�Y�L��Sy!�'L�z"�����9� �Pe.��&E,�\7�li�c�a�tF��{���gZ��vq��.�6Y�q�k�?Wq�� �}�bVn@/-Ȼ(ۧY�hh�����vֱ�1�ę�`��1fS��K�R�2ssT�G''OIrc�h41���jD�&�s�1L�pC�nZ���ȶ�W��/�T�o���?@U�b��!u�ajx�m� �<�S/�>����J<Y�>�y`��28Lv��eE�}"�h��hV3ޘ����u�O���M�Q�;Ěg�,��vM��@4��� L�xJΎ��P&��~����<P��y/���B�Rt�Z�njce��T�M��}�"WV�m%@�L���zVO,q�}HH���r����[�R� �u��Ñ'6�*f����$�Bk�A�ZۆbZ]FL�K��6>̅(9� ���'�&n��(0@Jw|��b9��V��t�ev�rcc�i䜝���w� P�9 R� �m�@NJ�����ҡD�P 2+�-rg�xA�T%�b}H�8)�YWԋ@�5b44���`�%v*g#�ZgCNJ����u�P$;E�@�< qOJ;��k��b-p=��!eI �S�K�n�S�����-�ZdxU�y�Yӛ k�[|�!�_�n�+��mj��X�m���-r������e�w3����h���(�Q����"��xb���b�L�q���6i�#2M����Dz�7P�ާ�5�^����u��+{WvK��Y�3�����}��g�)�#�LT3���V�ps�4��(( B��}���u�F��:��9�4�-�R�Bg�m�����/L&nof��x�B_ef%�%���� DE�M )�4�h���g3��w������S���dl3�z;��<�:�S�_֚O�9�F7=������q9��rR*��x��d΅֫�ER$�Hi�5C���=�c�/ӆ%��c�=���ҙTgU%V���o�+�e���m�na�Z_�[��kH�Ƭ1"ߘ(��d���3s�M�}�t��>E��6�Ɏ[r�@S0���~�*i��d��V):�#�ۄ�2�c�ғ����9����ɹ*%�Ήn� ��Ha4���Sπ������%ߐ_� P�l��.5v��G�L�=���#�Ql����.�&dp��J7v�gԍޏ�'[��g��w��xg/�Z$�jV?t�\% �� &60t�c�R��ϼG`zw\"�f6�O��7�%߮.����݂o*�q��Tat�.yuD��i-�c��A���/"�*8�j�y�ػ����߬BC�qAej��d�t����}(;<^�ѩ����5��s$�9� m+�z@����lҬ��]:�� l ���&(E���>�lZ��zs��b:eh�[p�2�Q���e�/�l�3��)�?(���`T�f�y:�k]�I[���x:x���4��B9[���:����� ~�ә��١��z��[�$�FM"N2\�D26�$�s�6�h�RrR �ɓmr�_r�p�~��t�J����o�c7� r�uQB�hR��nL����(Pr�+9DY�!D��� `�k�&���n�4�r�J���hi$�U|��ZA��d� *k�CM��u;Ns�NB���2���|�����jާ�M� �RZL�<VP�K����L],��ҘĘ��\1��2�4y����ē�*i���j%ϖ_ �$��i(�H�эz��r�����'�� ���s�Q#$~��M� �qX��_�AE_��KE�;k�̓{B�-�a�A ~�t%�8:�S=<X�j��D ��n$N�M� /s��]Z�j����p��Kl���$�W����d`!�}l1-p.�\u��0�9�p�i`�;��R=�d�f8�� .�h�<�,�ߡ-��T�w�m��Z�3�:���%��tܫ^�knW�zONl��=���&�'�"J�zx�!��&����,��8|�p}��n'(��X�y�;�����l�gb�R�ܲ��*u�� �\`�V�.�������\aj~��Ա�W�+S�\G�(���-h��2�ʮaN=��@�}�VP���{7f�tW�������#N��)H�q#��^���+�Ne_��cK�=�tz9�=@�֗����8�0ޱ ����6T,ش�kÞܳ��<��!��)1`gt�F��]����r�5 T�� � �̃A�pz�����5d�bft=2 ���[f�fh��L+�f؎)�!U�oE+���Ve?P"N)֧�Xe�^1��jT.�T ���d�Cs� ��J�B�R}5S!E,iq����by.������"����� ��C�� ,�����"����6��X�����X͙�nn�b����VGCT#DAƢ�4�%�и�U��?�,���g"������e�ȽԷ�7C�]�:���7��'P+ H�%F(�~�� ����q��p�R&�'3��K���%�UQx�ϲ+��y����j{8d`x^"��#A3ȞA2�˨^!kΞ�y��я�d$m~1�NF���\w[5�������F� S�&��_6Z��R�"��bŨU�X�S,,��t�1�:�4����!3?o��M0GK�=2/�k|��5�H%��w"8�,ە�Y��؝��a�\!�(��Θ���p��p��oq�������V�L�>`6ni��4x@'������`5���c�ՙDj���h�:65�ǫ�����M�E^x17�IȪXr@2���Q �뀦��C'u :��r��B%F =3�Q�pm�b��пX.S�2��J.���*�(�����V��8�)�`�V�U�`�#�Ep�q��a��b�U�-+q�?�zX(��NБC8�lD8����=Ԕ|��-�`C;��}N�bL D��i4s�G�q<*�.E4���h~#ikIMB��� Ey�$��Ȅ��zC��}�R$�(�����a�� �M���Ӟ�o# <y��h���� F� �_Һqؙ�c�T��LX����r�K��/�� �@��W��Ez_�. \ۃX�pq%��l��W�ax��+]�;�N�7u������Б�}q$?F�R�Y��#\��ɥ�H ?ih�Y&1�o�P����D}����kFv�q�sp�Q�Z9�.jk�݊�wb��kݸl���X��j�W�5�NnL��Z�"�c�up�Ve��6���ijЇ����j��?�ը �_���yjw6�>��0��y����=�a%]�sR��ߩ�\C�,L���U�y�qr��ef��V�1G5�)h��8�LLM)o�E���1 ��c*ؔ�_���g��9�`1��jDȇ�V�������k{�z�����1��'(!� ��Ln�T�jVwu�W��>wԒ�ùά�݇«��ޕܪ�-�1�7���.J<%M��P?4I*�f�eX��?�j-��r�M�*k(�a��r��#��p�ꊍ�Z��s�KW,q�M�Ҭ�j���@�<au�B�(���hW�g��9�� �%3�A>}�t��A�8����?ʡt1yK�`���GĪ)�'�2���<Z���}p��@�p@yH<E���q[ۙ��e{OnXWLx�fH.�_�9�z�Sv�٥o`e���[7�z��2�>w[����D������\��$���ݓSܑ^%t�ͼ�)��$��b�� ��Q�_C�L��p���r���¼��'f]�f�h���_���}�����m�Q�}�����X����|�ɖ�̶C��T�F� o��J�]�s��/�S���=��P�ʜ���]�� ��Yg�:��M�#Z��/����Ŗ<�ƥN~s"�}/R�)���r�x������?e�m�� �䆨J��'1 S�b�ՠ�@4��N��e�4�n�J�D,t�TVf!�������I�*�ef �/�&>�*��F�?��ڶt�C5;Y6p�J� �R�!�ˠsM )�Ƕy�M^m��ۭvo�҃l��:X�}G7��U����rY�-��W��%^j�_���kcW2_�O{� B҅d_Y!�7ق�c�����9o.�I�uc{T:Q!���h|�,�ʘr:��DQ�>�Zo�hcp!������'c(4��q��DzOc���o��R���+�#�퀗��f;���ß�x�u����k�#�k��P`��l6�p f��|�/����O�"�P؞�$"�Y��D:���;Ă����hJ<�,rAN)"M�fR��(ܶ�S��k�^ ��l}=~�p�v�lt�w��F0O�V�`CX�x�X��'����]��C��|:���{�Ŷ�#]���h�%��s�3�dE�%Ҏek$9��h@$���D����<�y���y��$����{� �l'��X�ꮮ��������p��E�֦ O� �:����j�#����%>Z�����h��ճm���5��]m�|�,�ݑ�[l�!��2@�����B�oaYe��s�@>�TA8�� BN��0��Х, N��ӛON�v's�B[�;D����6�h��P�I����Qry:A���$�R��dB�M��sĎ�4�7�PG�[� L/zlQ�h~B�`K�������~q{k>ͮ�dW��P�,��~Qn�H�9�@���J��w���ů+ �p��x�r�f�@� PR�a����F�,���E�(lR�i�o��N�K}��] �A`�����I�b�2��c�r�@c��+�sɘ+E�u/�,�O���fҜP�& e�@PX a�}���!��.��{ҳ�I�b���kM9T��UǗ*+�TY�u� ��r'��� /,R4�k �V�S�����?��O���kCo�|����c��ݫ��9�H���7툐%"5�(�ǐ~����Go��/��s=�뉀�t���=��q�v�i{7���=A� ���"X�Xn/~J�0l�nڱOC?�Rr�</�� ��oϛɾPU�ಉ�C�Ȗ4�Al!N�(���j�&�bwU��P���r�D�&M�s��ɤ�WD��.�k/�Tf�f��Ӱ-1���)o)���t�a��n��1�r�Ɍ��� 9`f.V�T�� ��|"� �*u�QX�]�u�|�[S�>���8��Q��(1�phP9�GxFI�g���;\�⾼ĤXPW�,�^R�.d��t �H�(��a��*����{��}�IM�)�f���Lf MrI�V�`���h���q3��Q���XDjS�<��rV���C��4��K�鑇�fH�����"�|���f�SV>�R�z����(s�8xy��3He��5�C=)0=�{ء/ۛ�X��S�!vs|���O���I[� �E{6a�]��z���@9��蓼8ym^�X+M]�v��ٞ�˽D2��( /-��>W�.uc�Ϩ9!�Pn{��#]bqJ�!b��~Ug⤜�Y%�L��M؉�Am"��O$H�Z���n��[���\�ë6tbu�G9��0���\ް�\����qyJ�>_�� {d>Yf��fÆ������6<Bs�5ESQÜ��j������V])�ԅ���x�����ǰ�Dw�a6����0rV�$tp{��5�qݜ�!a�HNE@�.s��e��� �(���^@&�31�x���`M��lJX 2���P���d��U���T�G����Yt���s��bU-t�Ht�cp���/["�(�|�ȏ��ժ�WK���o�� O��a�4���QP�h)kV���y#�C�1��d o����bVas3�9�5�X�1����?@q�ҕ�Xv˩�� 0sZ S��K|��x<�2C)D��/CU��s�ob\F=��.%x@*˞�qh��|��)9��ǒ�ѭN����hl8� ��eE�|Ύٔf�茗��O�`al���*0n;Y�%(�ªr�Ju�/~s���<���� ��Qqޚ ە�TĊ���z:aw�78C�D�U`�#�D��};�@�p�:��W�@�f��.j�X�7���~���Ǜ�����15Z��|Z�\��+�L�|�)�Bt5�����6)!`R�<����� ~�gٴW=V�Ԍ�� ����ˈ��Z���ֲ� q"B����2k>з�� ���e����V��c76F ����Vir ����,oV� ,38*i{�<p8+�B�:��;��i�y��9��Hx&����N�-�h���C+ss�������f��$N%h��u@J̅� ѧ�iҫ/���\p����_�'}��}�Z$M�ˁ}i��i|��ݑ�V� X��}[��dG�6��mtAV�.<�v���r�U�0M]@�!�ꆚ�����P��~��*M!�I~iZW��eAjT�TNh���P�>C�庴b;A��#jT�e�D��K���6�hqw@�i"�Ѳ��]"�����`KY��I9�1]�`���uL��0�X��$��������@��;9<�asF�ct�CD�O�a�u����kX H��g�% ��c%2�j�1���A�_�ꍁ����G�#�BR��;������.��ϧ��J�mQ+��Ԏ=)�!�w(na���/���B��A~Nl��Ur�����k�����,9���D��1T�YBn�0 ᢍ��fĖ���xo��^�)�Ny�p1�u��ǧ������*ħ+TƵڕ�|�Be���0�P�k��� ��3�,��nbQX��_� �+�2�oqLz�w�s�� pVh%�L�[���+�k���� `� ф�ޭH�x2� zrp���!յR+?H�M�����x���.���\�HN_��'8�s8���7�z��xB���D��N% a�o�T�t���V���� �y8�������#�Ƀ�S�ƴ7������n���e*�L��ۻ��>c8eE{�a��#\��-�V*�����0��w{��ԜL���� II(�����!]�")��o�خ���_�#8/�n��O���������t��l� �[$dD���f��@(ƿ���3�:���=ba��ZTZJ��!�� ��̈ �)���D�Eڦ ��Y�rp�u`��)�Ø��7�� ]���Ne3Ĵ��91P�.lNF��!TW^u��4ß�=b��E]>F�� �D����߶Q:R�Q�q㷋��}L�P�s�Ɠ���k�(��lB�o�Zr$dI~�r�s�m��� �*��&��C)f�Ŭ- ����f[��X���� �Qq�n�?j ��xd���1ɠ����5Ok�h���4��ϙrL|��l��7�E��O�}�?�OY���&&T'\,��gl��ozT�yo� Rd�K����s��#'�K�G����j�|h����Z�pjڎ:�deU·(f�����(��7����u؊p�䯃PeH��� �G����� ��O(���~4��7l�d���T1w$�����~;@��d�]�^���Z:�|ء�pN���N]��C%xa���f��Y�EZ��L�%�xNOgeh��zO�{�ڪCA��Ç��ǡ�u)������kty�Q�w��"�%#E!!��|q��d � x;��,1x����+�Y�Y8��x]�f)�MH}6�4"|=��(N�9?M�Z��\e��Q!��.P�b'�� �[�u=��l�ܙb������y1KKZ��GS�:5�Os��]�Z6�s��m2OA�m�BOЕ 6tU�J�ay{�S(�E��!WĎ��!#kW�0 �b��ڰ�P����/��j��>��k����q+W� I��/�J[�M:�ss[֙��G;y@Ƥ�/�����J�ަv�� ���WH�q(�/\<�yB*��w�N�}J�ϦE��P�%d����%G���o��1ٌ�P��f��bY�px�aeX4+�=���5�8��3�|�:�nx�!�P^�)�w���=�E�g�1�F��3'��8$�@C�&4��Ч4>����B�>ʞ�_Ldl�E����G>�d�Ԋ�F���O�zV��y�-TR \4�ٸ;�`��츈7���W�������#��槷PW��H�����⓰���l�m����k���O_��~��jk��lo���,»!��t�}.��R��Vd��O�>+��d�h�rK�Q���s��5S�Ss&�N�s�{���si�?�gE����P�g�q�& 4�%禙��P%>�[z�A�{��SqD�;&aSV����tK�r�h(?��������D�� ��e휹�h8�;�Y�ָ��0z�!<�M��[A̅�m��D�WkBV뎎�ג���X���c|�2R��7��e��� �����T��J�� X[}���yn�zi�Dhz�](��-�][Q�2+�6�EH����0P�C{\_�g�#��_�؟@^'�_��v?���+@@Ĺ�C���-���B�a+B���j���[ K�X��5�P���!�Jx�O�vÎK�����o�_�y��B#F��Y1 g�,�z�X�RB�W�O� ݱ��خ�]�K�������q�QY��X%�����{a����N�[X�$�! ���RA��)6n�Oy\R�� 1��ö�/q*D���T7!�De)u��������0 �G� ��X�F��p�:W~��7W�"� ����"M-����H #�hd7���V �gY�*V�{��3�t28ۈ~/���8�E�o�Wf�z�� :!vN�[1�劘G��3�#m�f�γ2H�;:�Kܵ�;�Q�ʴ����B!���=�~N��G�/Ed����=x�N- R=�Zê�����{],�Y������ sM�b��ԋ��Y�f"r&Y�C����p8}��;]����#59�$��x�[�O�"��,���Kv"�.�U���>�p>9<� �^�Ak���&sH�DҢ��'�4^ڠh���em�c�7�a'�� m�����g^&����c�t��p�`��`�?$�Ib|ގ��G�R����X�v�Ge�t$�3��R(xʅ�:*JH�K��d�XH�^~}��'��&��J��w��A�+�2�p�����B�8��l�u�0>f�KMI�R�QSɋ>�����#�������_�|����6i '�8�`���:k�ԅ�">�!W;ϐm�C1W�+�h���3��a��ӳZ��KuL�a����T����w�OZ2_)L9| {Jg�D�>�Z�����ɴ�4�J�Z7C�oylc�A��N���� �'�g- �hv���v��%�dT,�Ah�2���ՆޢF<�E-]���"� o���P,�h�l,^����B�1:O����� �r1!�R���B�2���}� }�^q�ION�t� �Z(`@'�o`gÕ�����:%*�&��t�.���De�鐡\Z(��nf���� �$a9����3Za�X�Q�dGj�+�4�P��$��L! j0�>��V��rb����s����w�$j�����Y�je,n�SD�F�I�F �Z���)�;6�!00�@�����mDPm$���Y��C$���*� �lXrp�ϧ�nH��']����2����\;[�&"#"f#��P��m�2���=�ip2ؓ+ N��.p�`��(��^��AX;�O^��������I����@xl���| ԗϿZv��y�ɣ�u8�u*_���{ܢ黭��c�rc���ډ $�Kda�<�n�J8�w��Q4˗MF=%��F�7���<ő��zo����en| �^Q�N�=k��}&0F���-#!w3�nd9z �x�(�L�e�K�?���o7:[�'�'r �z������a��Y���M��{֩ ���bqX���T �t����Yo���e3�טVm#�2V,�Q��3j��m�OQ���?��鶕.ud�^Nj ����|2�)��;������:%EA>]�~y�^<�w��u��D}��/.%5qYi�{�YP��ݸ�A��̎��>�҄/�S��9jĐU��� ^�&Ū�K��~:�H�3}kv�FY�T��c�0���}pW�dgf�z���� {�&D�ּ�1,��<!��¦+���o�Ң����x&�,���N�m\w�������ј;����Ɯ��'��7偣�'��[��"�s`�6���*�h���5��+�0��x�������1��(�����ٙX�!C��#y���;�{��iل��q�yYZ��j�x8�VZЈ:����4b�^Ҍ �E]���*Asj�����m��}�ޥl�%��8�ΰ�?��d ���=�j��,��v[(/���*ak�SO���ZCW��]a�Ǿ�����8m}Ø��!����!'�4���dT�?q��/�~6�������LIa��v8�X �2� PO"/&E��l&�NF0Y�W���� �ٚo!�7ZM3��2 ˆ7C`��[�^�P�H���l����=g���l���dƙ�4вvf�G!l���S7@� ^.k��;��o�c���( �lNi�]V/p�TZ�㠍o4�����-��H~E�Ѩ�:Q��Wf��a<4�ԊT��,j��.:t#����PGGq�e�u�͐�8�i^Pl%(W�O�x���J��C���G���^����+3@mM_�މ�N��Q_O�b=�X-�PMS�O�IS ������Rc ��R/��J,��v�,}��/||��D�o�p�ͤ>-��\CK\�-L�X��"( U�,��G�6�N�ƝC$p v��C<�dC�p<���e\8�V�P����'���5�A�t�!C����1o�;~�=!:G�̜�Hp ��C2�ߜ,blt28l3�B��l�WN���?�0��R��`V�fC�6OQyBL2j�]��J�kQ]W���@�u�QW��r��BƈBԃ���/A�����Y�IL�`L�UP|\o���!���Y�9��#�i��CTɚ��J9:�l���j?̏�'���${S �p���~{�ي�E��[/�,(vٳƢ'��)D������{z����5*�6�d\�����S��N�i�v���p:E:�7�1�FY�� 7Z�j4�n����:dtx�b�x0٨��~X�.��9����ӑ�?��D��S�,��vE.��w�0:����Ȩ~�Jb���Y��mm�1_%6�b�6��g}e���zHv:V��|X��r|�roF �>�H��Rqq(�e�/l�t�b�ܳz�ҿ�Q�l�u[3 e鮶�3=�h5�fz�N�yG���� \> �g#3j|�:��ܓ��Dx��1��a�����?�Al��WrC�^�(�Ri:1E����#g�T�"B�3����Dj}SZ�i����o�#O����2E8�}0E��`�n�k<��{ �rk��^m� �2�p�'~���Й=�tc�&R�,�{r��$3w���JsQ����rF3��'��#(N�SU�� �Zv�=�ơw�/�l��L�����<}�;XO"Y#x�_��+� �m�$w�oK2X=[�U�N�SR��S?2�(��p3����t ����"�0���e��Lɧ��$�9ף�)2R�k���4l\�myc�Y^�#�9(G0��Vo�s�C�)-{*���]��C�j0��<��O���`��f�O�6��Pa8*̔�6��Q����eC�!d�}K>�0O �"Z�R_=�m���e`�r�!�ssR�ڐ���c_Y���a"Ȫ�Y���\α�!K���X��$�_�($�(�Iu+��H��qtY��f�`be��"���v �#�0ßS�r-���s+�4`S��h:���KܙL�j�/V!�T��3Te��]����!�XF�k�`����o^���ǯ���ų��{�D�0D��Z"hZ]$�����x�mY@H������^�O���HT���a��������<�슻W�c�C��m��~6F<g��bl�� �b����x�ٴ`:T�%9�-�V]����)J��v�~�ѭ��J�i3��� I6���Ēqs��X�`6}_$�Q4�F ��L�.:����˖q�V��4ܹr%�k5X__AVy:�\��<�/P�u��@K��F���� ��І�he�d#���P^�RI��T���h����+��>}PB�lh���{ϳ � ��by ��V��N�&2D}Z� E��5p�MYJ��ps��!Ԯ&f j��D�� =�8����P����8� �|Yb�ĥ��L�P-�6�c���+��SՊ�*��N_Tg�7M*i.}x1}Z����P �WW% ��^�FV3q~j���E͍R �?��D�I�˓��,�i��h��!���e{�B��$��~!)qe�|fz �7��/������,0�K~}O,�l��? x�9��OvPK"�|}41��v@0\�/s�x��� p)�≥S8MCT�� �Ŝ�qi�` �@;�����w F()�sT�������^������X 0��e@r �6b�;��2���m�3* |j� R��3�$]���A�A����E�@���o��a�T[O5� �^Bf���܌��}G$6m�̗|�e��ޒ���&���*&�E^�{ښ/}/��m'w|��b�r� $f{��J.�'�� ��Ҷ� H�?��'��@��Dz �@�;v*SMj(g��5qX3'+Жs���_�u�b2��O+�jv�:P�h��m��G�n�.k�^f�:��\n3��sd���[��LV.a�B�+xy;� Ju^�#����ҬMl�'`�h�<UG)I�ie1"+�b1�c�vu!f�gB�i��Ȅ�8�fpv�����d0�����;qN�'�D���k��u�T#]�rH%� N��&B���z���li8 ,��Ǘ���m�D�Ò�9��|g�=|ׁtr*Ƙj�4.p��6�k��d�OZl��6"��2�B}d�=���0�ӆ$�$p2�^q��=�#�����]yܒ��H�pqN�J��%6��� ,�\�pp���t�U�?|��A�+��"Cx�m�'IÏ��p��K��f����(1���-�\����(��$�� �� ��d*�F��l`>�NNq����e�t�a�a����m��{�kiP�s2�Gw�;I\�a���:|[Բ�``�ؓ��w��.� y�9�� ��6�#��'>Ȗ��a�ǧ{{���Uw��f(~�"CL��i-�y2��`w\�jԺ���Hev���+5�"s�ˉ�~c��J��M�kB����P&Q�JG��*��2��������ь�ds��Z�S�Rv�3d��z^U*�u4WYu.��Sd5,eHjQ�-�J� ������Dn6�9����ӻM��LL���OC�$�l�RC�'��:�z��c�L��R�;v�=2�t9�So�,Z����CaP�H'r�tG�|����5Ǣ�?�ǡ�TG����}8w�{]XIn������c�2{Q֍���\�����[��%ЦK�Őd�"�oop�jS�)'�U�Zo����)��yޔs�������6�A�X��$�e�#Tnt<�Z�#z��-һJ����c�31X�%W'� �D)<�x�j[/���AY?J�I�l�X��Fc�0��1.0,��AG��p`v�AGvo�WG�PN4�}�q<��GMC�R�y�Z�DX����t,�U�%.ap�����},�,��b�?�/h{F�F���$2^����f5�ΐ������hs�l��8�rgM !��ߌf���5���/ޕ�S��ĬBa�2�*sW��l�0�OV0�0 �"��U�H�*���+J��E�wgH�(V�D���.J��)��.���g'�f�L�B��VV �SQ ~<k�3��:Zِ�fuuB@I��lA�E�Q[$�Z��:#�XN�Q������@&G)W,G}�\�sΡ8dv����wL�N`�r��;�SN���{� mn��G��Q�d��B@Xg��j��6/Y㜡7OàH�*&8���K�:�#�l��b�14�F�gาƖ@⮄��i�a��6�Cg��t~�����W��#������!b�gXh��=�#��hY�0:#�R�(�� ��0-��O[^s� `-^?L�э�F�da�C�08�@�ՉI`~d��<���,�:o����X�Ѝϩ+�k4-��i6�>�e�[9.˃EaR@�r�_#y�q�~X��d��+��dG|�d��y���JI�`�����3cS��#�3��2��U�eZ&��m��#����2��#�~��T\���!��^���� ν��<��l4��e�q" �H��H�א�� ��;I�z��S���[��&o����?�BV����\�n�_P"��jZ�*]��%�A��iǝuuo�������"NK\`ʌ@7�f��{�P�t�*�ڭ�,�-D�F!s�1q��cP8�y�����29Ιzŷ�������A�!숫f�m�J�]Z�n0E��9�t� &�D����&݆��e��Q��m� q�z�~�>n�Q?A�vġ�|$�ג"A����Ў�V�M��&�*X�pD��N�X��0��rȉŅt�r�ү��|WM�t��Y�?F�ְ�C$sx�8ЇR��N���d�k�8��w��05N~'��ᤥI�x��&z �6���hO�7x��(��0YTg���F��D�����KXi�"`�gk;����o �&������p�%_D�X�Q|� �5���8��C̱t(�!��~j(wV����U����z}S�VlA����\F�i�{d�h�[ޓNnξ���$�����ו�F��03��ɾ����Z�kV�-�\7�d��`�������y #O/�1Ǹ�6�H'o�{�A��_r=A\������^���N�h�" S�s�g���s�ǣ�Y�ب�V p�Ԛ&��u��Ӧ��KW� ���Gt��8��4�g� f"Zԉ%擨�\�$�6yF�,cA�{���M?��4D����kI�5nF����T/M)"RP�8��2�9�C��(�ad��l>i�PfJe-jWQ3'��&�,k1F�4M��_�@�����"M_���/��5����,"�;W/�_��3���?C�lۀG��|����{_~��{<�����~����p��l��V_v�Z�뮫a ���;��oE�,�n�v��T�[Qk�U���.i��&�噧&"��}�\�x�´:LL��Z�CHE u��HK��7I$�Dgm�=K��xY���HX�xJ�K��k^��OpҘ�n�3�9H��f ҃㸼uUk�'㧼d���!K��~�n(�@�<M���{�k�r9A&(~"�2��hl�$5�]K�2x�����Ia��-��TmjAc!i?w~7��c����B�E��\RP�~A �GO�9H+ID�ѷ��i�L���rz2\{��sz;4|7�k��&/4�8U��i�w<����6M�T�#��a^Ga�j5��q �L"��%��~�K�V������33ȃ��*����c�Rx[ւB��^�^�uԉ�*���G����t�d1�k}����d�}�@��U�b�J�H�8��K�p!���9Ymn$=|��|�6H;�a��D�7�l2�y��#� �S�]E Û��G ���3g4Fê��!�S㰻"���q��\q��@NIatq�H��������[�KD�H˚25��(Rb4K͵xӒA�?�A�� -ɌY���նJC�S��6��)f�U��� �6��k�?����a�{�,��Uw��J��4�#A�{:N� �n*����g[�����Ejc���H� d.��}2 M�ݘ��q�Ǭ�1���� o��5h�R��ܤ�shs���V�sR08��� �Mtl�h�[��I��pKVQ��Q#Tb��I0���� ���a�'����M���ieV㇊C� uL��0/ZV�]5�Ri�ʯ���[�g���W=�XL�+���'�L��q���rֹB��Ў���V�m[-�5�q~��u"�B6a����"��&��A�6d�c��m3�]7c��TX�mj�,�Sgs���_p���#��" � H��^�᥀���Mq� ��Ȝ�ż`Y��r�W��T_w��gN�Y[OWAC�l�O�M�w�-�i��$L�; �e~]�ժ�����Bhi�Y�oM]��K�x[ɟ\��`��5���,�=�Hv�ǫͣ�z����!t��b1:���TtդYQ��~\��x�¤��� m:��H�&!L�����gG}��.p� ���V2����w�2OП��J�G8�<-���x�\euiE���,@�!��z펼x�]�ڬ�M��E<��,o�Hh.U�>�*q�iznں��Щ�*De룂��\ڼ?@�I��E\ڎ�"?~)�O,�>�?Oq�&���Nbr+���$ �,r�#��: ,�!vl��`��d6cn��* �pڊm�L���[��~.�h&��Q]���b�8{g5���Aݛ ^�6�j"�I��T��q)�f�@ϽU����%L�~�t���D�:�<������+�!���O-K�����gk�MN�n�:��Sr@:�qõ�`7���\o5*s��d��� }= Q�,�;t�C�0Ψ�%9���,W�Mg�'�e�WO� �1� 0tp�qa]"�F5��Zaa��@exz#l�n��������@���ŷHm�o�wr���<6g 83|au��t�n���(QB�&�.�R�G�.,Q/��er��Nq�b�:�Q����YF�S��Qާ ��5�9��OEԒ�$��~�#<F��\A 2��@"������q?��q����4��t,�P�u��{�1�ozv�g��d�e �;�����?:z�(@�^)!Yo��T;��`�*Cf#ͫ^�S�VU2f����j*&)�6�_�O5L՚����;W.��D�냓·��I�+���ဋi��*q�pRh�Rt���L��1{*rc��zcU�2��`pv<�w4���)1?���nS��C�$�$�������l�m����k���O_��~��jk���Op?�|r���\�ܹ������o߾��o���խ������a��U$T�>��i��|@i� !���?ӣ��ʤ�1��Z6*M�#�W�&e�$��+��/ ���G�ݢmVl��Z6���%��Z!�A����p]�sab�^6+�W�����H �6Ji�h�������/�8� A���L:M`��IJ~�`%d�FV�h����9U��t �Xjy����;Ď����v�`a��-��w#��B�S��Ev�@��@d�LPH���^o�$��E�l`љ��%�u� �[�ܬ�$�?R�4em��Xi�^�i&�!����%���T��rÆ�Zo�B/�~��ˇ���r!5�恦��g)Z�1 �E]r���1�q�+&it(6���2M��("����j``c�e��Tn��\vLH����g��X煞�Yo�b�s�Q�5u�!��m,�Mb�t|�KwK�)��*ʀ�i����;�=O�R�l����w��fΎ��,�q0V����/c��$@rQY���l3�C�չ9�ױ1\�@O3�z�OdC"�����{�n7�r*T�X���[�+���ڊ�b{��<��"?��c�D���Cp��*C���zc+�=K��kҡSi�@ʕ�ޘ��!^X)r)�&)/�i��b ����䤙 ���L�K4sZH֕L���U�]�g'�'��C�L�q���Q�) ����t�_^!D]j6�e�\�> ���s��:�)�/��s��ҫO\V���'g#I���g�BGuPҾﯞ#�oU��F��|8E"�?�?��<�S=W�oX�&C�m�Ni��]ӓ���X��u�ΉΉFH��`�`? ��`�t���/��$�iO�`w�_ ��PA��#��ҤUw��b%��gƵ�'�o����S�R�� 4�� �c�+��DU����>����c4>}�ɣ����8H-HU�_��_�{� ^���c��P� 3O`*���G/�|x��ւϟ���/����SG\��9�l�6�cW�k&O�&?9��S�� V���� 75)}z��#�x�Ո�M$!K���TϺhh�&�jjvo��Q@"���5ި%��j��ѷ���$y_R��^=a�`f{VmQ�hh�xٜe��>��ܭ���=�P&4rɤ�HrS6��oގy�*�}Oj�TEo�EwЬ�� 4�b��A77��6{r����Gý�w�$zId���R�V��(d����ۧG&-�eGE��5��� NF8�u�;C"#�)MGTA���d<��\{<� �z���_h��]���@��Kw��m�� i�<_�Y�0�����t:P�^/���� 9�������,�n�"� k7������j O"��H�1 �"�ldZ� ��4-��+q��w��k�"�E/Φ�Z�-+� ��=A��"TԱ� ���Q��G{�h���h�������>#�5���}!��-_q�?�ҹ��W������)wl*����,#W=֡��C6ȤF��ASH����Y����LU�V#Z��2G�$�˲3Q�2C��F� ,u04?T�h�:xu&6)Q{状I�û�ъ��F�$+��i�9B��oR��)�s�%mA2�ä��e�s,����By�Z�[�sE�3ٮ���t/!��ΣDŽǑ ��.���-,k��N�5[��nQ��<�f��-� R��-��ơ[�T����r�H���a�8z�yϧ��Yج�Cn��*R�"��[U!n��E}O&�E�� /�o�C��r֤܀ �ّ�1b�7��Q+zۜ�A8����+O�;o ~����(,e�g��M9<���|�_t$M�EBB�b�"��[4�Z�A�.�1^�t�bS��ˊS2�:���� .��|������7��2)~��ݎ��^�V��k��^h.5eF�t#�V�Ъ��"|u��Uآ��*����#D��$[qNm�!�2��Z�}���)�3��[��d!���Ɉ�Pq*�ԓ��z�D���P;O�� �̏ŕ=�v]�(� ![9�5���� w�����lKs����r������5��.�"� M[+-�U,����������VsyԪ��S�s��Cy�r���H�<����^��B�N^,\�.��n'����u�Ik�eq.+xֵL@��7�3Xt���?}�ks1AZ���Z�����闯Q.Ĕݏ͒�bp�c�U��ݺ4V��Os��H���J@��`�c�k�}�$�f��=.�r�<b���Z<k�T��1�yx<%`��� �!g�K������t�"w�-��v��7�㶏�ѼU�LI�Z)�bޡ��+� � b7�mmw��\�:����!��R�o��%�J�F������!*^H�:3O|t/pg)>a���O�fH�PJ�AEE�m:��'~����s�wo�?�'��M~7Y�/��]����k*�u��:^�@�6�;���'[';��g�m� h�:b�d6�M��t@�{6��~��(mnT�5�7��K�l�9Gg����7�\a;��nu^u�� W���A��-V�H���+P�\��^6��%��&���^�� ���P�8������p�(Q �T��IM�D磎5ܯ�4Z��)��E�C�? /�5�,hG�nu�拓uNhuò?�Ԭܔvy/��Z�!�"��~2��W�cL�{����ֹ�����9��P���<�.fv!��i�_�>�0e��ov��8+�l_�ߕ�m��J��%���'K�T�bc�Dds%�]D�� ȥ�*�����K�3{���"��֡r�x��.�P�d����̅�nX�W8=�L��{�b��/��q�����7 ��U��&7��ZDߝc<���Ł^�h �� p߆y�]��,�� �}�@*��f����y��҈ =�]4K��N�fD�0��L�t:8�uH�@�J����VwS,l�SUvȾ���$�j�.�\��6�F(h ��w��+�Ҏ g�����������h~Eb�rU���Ƕk����|)y���=�E^8)aэ-E}�>W(҅������D[�WP�/�(���c� ՛?o���ʼno})�~9�S��Z�L�L�t������U-I�!ݠ����l��e�\"ʨ�,�%^�8����]L�x�F��K��j���*�[� f^&��� W�>m'f�ͿZV�3����P���$Q� (t��-v�x��*���c��!&'8<iF�L�p�6�}���VY�q#K�y^�~ ��Ire �j�����LY92�ټ���!3i��<]f��/�0@ش�Z�i� �P�M��ܹ��7a���P�N��fP�rKd`�wh��!��w{Ǔ�p�M��^a�Kwq�:�Ԏ.��^����\�*z �ٮ�MV' �u#�b�k=��_-���:@�3-+�s���D����d��L#�џ��z��,O�V�v�Q���+K�V���p h��#�y�Ŕ��!�&��,���i6�oC#_���*_՝c>�p/� �� �e��[o�ǗL��zħB��ٌ72}4����H'q�2�rD��G��uc �����(�RGd�y���ӣ�`N^U$�aYJ�I���hQ�w*��+G�����)�� �B\�4�a��#`�����^�z��/�<�2=�2G�Cd�K�#p/�8km��2I�t��C���!��D�J$[�e�%3m��E�J\�L+-`�^)�:���� �.J��J�Log'Y�����½�']c�\;K��z���w���� W^����*T�Yh��=]�q7���́s�6=�jWgn���[���xK$C ��|�o�����3�V�8�f��.�Hº�e���G>��d�i�\�S���`���@1�����;��a��O����+_WT��A"����V�L�:���lr'Z�9��"��JǾ$��-\,Ti�����x�2/�&��qt kQ���h�jX 0)QZ"{.!�ȏ�����f�s��."��n��J�D᧺�`����N3�t��L�í���Y�gX�إ��cCfD��2�,�Ih�#�N����<E��p�pO���]ؔ;���в=�)�$��ٛ�nJgu��p+5|o�D�/��xuxK����n ����λ�MU�Dڈm�.UQ햞���n9�@g�U�$�@X6�YY��ͦ�������@�����\$���<� Hwx�2&K��r�҉c6EbC֠0�`�!� h[«�%]CX�V!z� �x��m�.�����-��`�[�'��J�d�� aj�"���K�T��tb�� ��-���� 4�l����jCW֮�kSkuEr��}��9߮NC�q䲈�WJ�r���_#�Y�\��R�/�^����h�H�K���l�"����R�/�Z�1nm�cQ����p�E���J�%�˒��!pR��_����a]F^z�¢�u�����;^u;�� ��0"AA^@���hߐ��#?��� �"ƵY1P=�|��Nq�B�ؚ�M�HBl��'�،ݟ,�6ҋ ��'C�. (���3�3���e�B��3�UWzQ��6q�e�hx|zzb ���3D�ay^!F��AӋ~�?��a���>�2���l��3��x���&�j������7�[C������7ݝ��98��v� �M�*�v�����b��5L\��ק�4�2�i'��w�}){@3���`��ڻ<m2��uS��jY�X�@Z�!q���k(�n��g��Ү�,9�rp��m2m�� 8,n�� uS�j�)�B��#�n��?~�� �2s��HR�����A�.��7���$���e�2!��7��?��ݵ����>(�{���P ����� ^^���%D�0�,��nW �K`����J����K�vE+�Ü��T^�P=��\�N�w�d��2������w++�\��i����#}��u�o��!���Z"��^�}�נ��U��+x�/l�k��o~��.u�\>6���b�>ײ�R�l7ż]w�S�lL�?2���u�5.BA�&X�q�^��l����*D���'o�&�W<ůo�(����_:Y�%�6�������+ �����C6��\�I��8,]�/l����� Z�Y�]L+J���z���*�U�:Y�+�/o+X��#ݿ�N�&k&����kV[{}��;Aڞ�K%}�?;�c���!O��K{�����.7�R�����e+P���� ���R)�K?1��DZ^m��(�.a���'ڬadȂ�g����S�ώܐ������ X��ѕ�j\]���:�D�J�!�ͥ�[i��|��w�F�k�o�Ȕ�a"�ә���T�W��+�2���"F~�!��:�J�X�v,�~C��0�~�*�v����"8\cI�AiI�<���2:��C�Ղ|m��X�X��I=��v��+@���o�lpQ"�+�^�hG��q�M�ډ��2���`��U�,I����h|:Y�#���6�}��&S��/���I�h��h��T�)<Ƌ���)d��[ۤY&����:�P�5LH{�9L�E�aF�����^~H�r������I��_��l8}�Cg;��sm�rz��}�&� �C��8=�ڷ�F�J�˻�E��-Ή6���.i6��A�b2w�c�G��X��)�et�%?{6�!�s�w0H�mF-����U����W ���s����s�٬ն��תMc��n�9g� �!�����,\pN�!=X�tǹ�H "��ʘd����H�&{X�ՎO�@mXJy�����ަ��t�V��z��KO{I��Q��ʁcÍ����w��_u_]ٱ"�a��o*�jv��\*� ��FI-XP�i[��}�� 5�dM�4�M��؋;u5��o�M� Q��|@<�Ep�yg����:�D0�a�%�f�j�sy��:�=q�F�o�gH�v� c���Ql6vo&���d��yJ�y�� 9���ܐ[�*�k�-K����� SCʕ��O��'Q�,ާ����i�!]����5^|��@U1TB~�@YЕGB���e��M�_�t-���6T�х�!#V����#E���h�����h~�cJ�駓a��Eh��I<�Yг��dUWWw��-M%p�|�]d�h�y���:&*&���vyѯW ���ܘT�7�h$��d�B��0�V�ւ!�P�'�q�&�[�x��{9{���A�RQ�mFU�������;�[[�����3K�z� [\�|T�c�~��b/�����_?|��7�5����1H��#�-{#R2�����,iRG��<FU)�� �#\��ۖW[菩��8���#4;��������;��]�Ui��D� 0�T�<�̾98@������˧_����u�����)�'R�:z�Iz4�<M��SX���c/ �]I(�q_��V��ap<�X1�:b�|�ϻ[�w2s8�:�ڐth�J�5����NZւ VK��x6,0YG#����,G�䄐6h�w��t0?�� Gǽ�V�]g+ � .�o�X��Z���z7G��N���i8U �{4�xl4�S&c���ڃxd����S�����3%QK|�U�T��m��c�\�Dk)�W�qT�%�I>:ӎCg ����v�J�C�B�c >WQNO��j��O��b�C�T5��rʦ��������}�{�7R�wrx������1��ɸ���'V��\i8i�9`ڷ���շ�тs�:c�'Zf�w��25��,w6������pJs�6*��N� ��<�|.9p��R/���ܳV*Z�}���c��Z�'E���1��_�M���8��[]jM`㑋�G�����h��\Ax;�˫I�'�T�h��5��m��C��Ս���D��c(��D)�_�oe�=N3� �G8 �g��*S�T \~�ྖ������4̜ ��؏Z�c%*��wDS��i�F�[jY�u4cc���H��vK��d��!���g��@��ў@u�"���<���}��^Hp� �m���}�^��ޜL�:�� 1q��@�X_Ȣc5�d��uU���ܘ��Q��6p�fʐ �!��� �W/����}y��h�]D���� f�J�[��0�L���D�(���o۠X�c[���F�ͷZ�K�)v����e�3é���Hվ��n7�:*�<��E�N`��N���=D�ܒS��r���b�!�m^�+q�w;��\;~�9�y��l>���:�!���P�24���H<��R sg��*%��h(Ȑh��o�FR���:��ș`��u���zZ'~j5��5�$�zc��������Z+AC^zDO�I9����0�\V�,ȞW߇����`KHXwer� �����_t�6h�enw��4�y���+��s?X8�ܙ��:���QܸUP�Y�R�(Ye�fp�ԓd��x�2 ���c����fͱ��}���0��a7��D�u�љ:���4�`s#�_���n{'sg$vN+�L�{N�,$cCO�F�=bl��\^�6�"!��Z ��J"�J�Q��r��ŝk? r{$��)����!��/�a�� �h�{��ݏ�7�GЋ2W%�E1�K{Iix���6�Bj�j%H�R���x�lֳ�S�J�*8�5f�}� �'���G�?\��Z�T$j&&:4��cu,Q�g��o�x��?U�*�n&�K]�g��p8F����LR�s�MVsu�N��g�|&}>+U��\tb��I�+�]��3�\ {R�cf�u��ߒ��V5���$9�O�P,��>ow���*۱��'z��Ԋ�Sv��'��_��wm4�aE�W��c�x����Y�C�ŝlj8�כ�w#���ǃ��&���J*/�_]�� |�����&�d���ٖʵΕ�[R��+� ѽ=��� ��&�M.��w�2ƚ�X�%Ξ�#p���]�ڕN�F��U�?*EΦ̂�6X-�t"F� $"�Ε��������T�Z�}�l�o�c9�)� w�_*��7b�"�օ,�v'�*�2k��a+�0���sۜ�N��7�÷���X��IV� Hr��O�_�~'.�\�X���EeLB���X� �x�QƄ���X1%�L�FF�&��f2�5�}�U��S����W��C�(g�썌<u!~z0�p���Jv��+H;�_]�a� ��_�U�������3(�xk�ݯ�ߘ� �5���z��G�SPY`�>(-80 4�>i����)��"�E�ă�>@I���6-�o�ԃ��ſ�s%"߄�����&ŵxX��9"h����d>����?�����?�V}c��Lj�E�B��Ƣ?�U�t�* ��p�T���G�O���2�ic{��OsQ7�Q���[�;� �ï_>|�a~�ᕋvE�7����}Ĉ���� Go��X�0�:��⢓ua��ő e���\���/łv4���!��o/�����c�_�N���I��j�ix$�%@�`V�ps��!s�� �����;��Y�ف�{�x8�u��fl��Y(ݧ�N�f�/�A��Z�����l:9͆F�ET�p��2�B"Q&tO!�����5͈H�p�h�q��â8^d ZWǾ �,6�؈uQJTN,��y����v���x��(f�Ld4o��fΝ�"1���+��eE6�,�!J #��6$r���*d� ��օ�b<�V���Y��%����{���wQ��?� R�G���Z��e@�X��A��B�2(12��kX����+�G������������tKM)8}���P�UvR�z2��l���7��U��YM�M<�Q0K�-�`�ݾ��2���9�*T25̺��p�JDsL����A��L�,�*��K)��ޫ��Qð�,�-��Ӱ&�Ġ��M�S��E�c�����fj���'���Π3ZUK���&����șK~�P٤�b��rm�AHu�̸���d#WgP>́(t�� ����� �'g{Gmċ��&��Mf��&��š0�m�g SV��m�(�+r8��Y��G��6�|����y7�_1\�����E�X~����br���t���F�:AL��(�ӧXam" /ќ�]`���`��M�����J�2~�V�����:,>��[��텩�4����cj���d�-[w��� v|@6�U!�M���j uJX��3�F�G��r=��v8��>kp))� �Dkwdr�<�k�ʨ��b�Z"�l��f"u����q�Az���c�px�.o��t�UCmݖk�V�s��iNpG,�16���4�w�UL��SN,[���m�^"!(��\R$|,"{�%��,u�����^��AqUf�7��э ��P��>&{�<�/ ���45�}�f�����`/a�Ŧ��ă����� reaF��B��>�\S`�z�'V����."��h�h��b����E�5�HW��9�.�|ܞ/\���i�Iw�Qe�zY�h����C>�x����V��5[�RJ�Q���^��K� ��za�zs4{xr:����NN7��%Sf�A����D\�`��ħoO �;[ŭ�Q�ie��Z�MQ�e��"��ES^6j��8�F�S��D2�OH���OO3q{`'w�\y�KK����_�r�;;�<��v�E��t�f�� ق��1�ѭiX���GkwT��Z7D����@�b��[Y�Vr=Aj�(?3N>ms��99`=S��t�j�Z���� 7�t9&:��a` �o�n��P�8TeMU%�M��|�˦�B�Z5E�SCbr�O��i�6.ydM�ט��**c���?ǃ��ё����M�8�P�d�:�w���>~��+�f{8������/$�����3GO�`�m>���/�!V�a�v5�AE�撯�XUl1m�-�=�Q���㏐}�y�"��7�W��3_6�v�'p����f��[l��<�D��5�D)b�`���- �����j�U@��Y�w�Co�+6�2�� o*PCm�n��z5�E�21\���&�y">���&n�_a֥�_zT�}�_��K� K�H� ��]*aB��N�F'g'҇G��!��������C>q�����U�miE��y�_�s�?$�t8ا*'hh9T��N'o�u���7���Q���6p�N��ɦ��ʉ�n�O��Yw��v�[���嚤�r{v28>��l�P�� ��) �[����}q� ' �|ָHl�n�K�ͦ��ޤ~��5o�Y�Mw��W$�T�RK��3�4D�*�y#�B�#rǙ��,����a2�;W�S������\�[�^霜�G��(�UBS ��9�y���?x��h�;Wh�cм�58�O>�����z+G�t@�͓�͛�� ��� _QRs�3 $*���"-�,�]Fx��Fh�o ̟KlʓdC�yo�B�g��t����D���$P�m�S�t�{/����9j�ł$|O���b_�C��r'"��{8�b���v2�~�t��������JvgL��F�= j�Γ���Q�����H(}֔�T���m�BV� �Y���\]ݚ���V$ZR�"ă�S蔸�֒��_�%�����}�4�.����xZ],�H�j�b������Ҹj�:�[`�ө/6�ޜc�\ �H��D�E�ERL �r5.K y��7 �I{�0�ѥ@`���>� 8�Nm�'� �o�'���m�;B�!Ys04S�]M�1�H�����3��EFP9��p�mn鞫n�j!p��4rdO%���/�7#$����R�>�lѹ����i���?�6!v��[�ʻL�~R-�eH`�n^B����(��.i�b�#���+�P<�e<�f���|�Fa$:7a�7q����C4�qcȃ����GA���ٓ��DQ1-c� �@��)��xw:t��ׂs�9G��y�Y�'w�=Itt���]j�y���激;CS�Y(5\�kK,�P�����žI��c ��A��"�N�HȄ��x^t�L�~՟n����:껄�%�v��qM_�U�9W3I��܌q!B�9n�[�O�_��K�5��7@��7��d�|9�d`[�i��\�V��V�<��g_���uߩn���Ƅ=Y�)����t~zi����c�J1��ٰ[��+-�oٵ�g�����EC�~ӓ��S��T���Y�4 )�T��P2H@P�������O����ZK�U7�V&�`.�pt��*��� ����Ľ�ܵ�^Ɏ�*��`�~23����83�?�3e�H:��~��KM�5�n�����KBNkހ���K[��k����Z3���S�4�8c�X!��8�3��w[7(3��AohYL�q� �FM6Bd ��3�V��9oO�Y/W�#?�O/W��;L� ҋ���>�)Q ���ǟ �� �S�rP���8�;cD��F� bD '�IJ��iLWz����(1�����v�;��;:^s�b�+��@g�@�4�T1e��f��+��ǣ�rf�d��"��e�nb����FB��I|}W6a&���_ �����D���#��W)�=4����K��=�lz�#V���G�ך�]����� p/�ػj��>���.��*G7�W�8 .=��B���yp|6�o�{���� LNa"����1��l�0د�+D�a�/8��0B�� C�&��+�<6�q����|�Mr%�G�$� �+���&��Rty�Y��6��x?2�jr����$��E�q�ox�H� g�|C���s���c<�1��.�;��|p��뮣Nssut��d°������z�����;����L>z������χ��1��֟{wo1����W[��6��۷o_��4���;|��wC�����B���.����������7w·��_������z��͍7o���*�^\۸{u+����6��Q�&� ���Ί%�Äy@��w���w �ۃͿ������zs�Ӎ���a���@���,[{ӛ���I��\+�x�l�`�-�N�6z<J=����@w���)8�i�����;w��=C�J�����}�p���%c���ߏ�v7��?�F'���/;���E���_������ ��ڼ�o^����k�G���H]۸��+IoT�)U�}w���F������߿��7��6[pZ�Ʊ&��o�_m���j�n�Wx�}��|hRh�j�����d��O�i�>+0�"H=�s�Z��'?����r�y�_�z���'�6��yl�^���*�*q��&�T�{UD5�.������`-����E�4惫"|Dy�~�+�R���9�����Cdˀ���f����)�H��o���M� �� ��tKT�Cj��V ��`~���<�ptx4��_�OSw ����� ��P�c�\�)!3��E�/�8J�nJv � d��Y�,��&���?�\��;Ɖٶ�������\����g�%$�i�o?�c�6��F'��n�s��5y�-���KN�F�q7EʗQ*L}��}��Z�I��{^^����!�[���}�#\g��L�"Ԣ�D�]�Z ��~�A&o�Ѿn�/�Tw�ab����xDq��~����1���0�ĀC�����/��o�0�� E��g2U�K/V �}��E[(��+3� fI~N��ĽP����px��O���:��<8��E�J]�p�°��o`� ;Ղ�26�"-��ip���~989���P�,3�� ~F�ߣIW2�C2��]����jF���u��irS(7 �h�C�����Uߏ��J�`!�s�����Ȫ�\x7���a�loC����K2�� $@�f6�y�G��Ub����Xu q��ђ�6�M���l�|CG�����w�����=��L��q��xy3�i������#=��8P�W8��M;��G8���=�l?O�K\�S�@w��S�tH,#h�K�e��M��U���"YKuvku��0�h;y�iq��u���s�rl�7�0�u����92� �]�/���G'Y-&o �̎FdG7 ySi���U�̭�§�=v>|b\�w� d\���z*`r~�F�wl�<�ފ"8�cF�G�%ip!$C�,Jj��Ћ� �F? h%�Ȱť���f�l�����O]��d8d��q��9v�S���Io'�I���3ۣg&^\ p� ����= ����.r!1/K���M����A�oS���^����o�`����4N�g�gp�@�ٮ�VR+[�k��g� S^Z[�����z"��Ny���)��v�]�b�d�u� Tm�"d�q�; � ��nc��������#��W�)��R�ڵke�k18�28ޔ�4;WzOm=̊긋�����Ս9�,�O7�Q@$��ڙx�E�3Tf�6�P��l�U�?�}])x�fƩ_��|��ާ�x�c?}��&��"��=�br���I�3n5��f=���}�Sw�O=V���^�$����?|(v�C(��3��7_��?A�q�l2M��h><����m,R��n�Q@zE���w�%� ��c������o[嵫��[���ZS�kz�kep�viP�F�4��i��텱\g#w�� ��� )�o�d< �6UXr��н���/��yQe� zyښTm9lm���5T�+����z��"�aKb��W��H ��(ڭ�/饦�)k��1B�� ���< �fƇR��^��ڲ-ڙ����f3S�ޓ篟~����g�<�������o=z��%h�n�*�7���HI�V3�۵�'-��@4�%(� �/5��s���i�C%#qkn^�l��[���Y�փ5�w��6��Ρ g�.N�j�~�i��[�R%�i+C3��@���z�����5� ��D�P�����<z��^@�D��G�K���?!���g&=�{>�2J�zf�?�k�_8G� N���В�ڹ�H\����N�1W~kt��l��h��NZ�_}�B.^���*F+� �p B~�~�x��'{�mANyE7 ��J�UW2�I!��[Ϊܪ��Su�l��G|&�S�x+f3�0��{"q�E}ě � %�x��H��D'���������=���#������ur%@L��k��WPpo�~k��g"�`ٷ�\-�i�VlL1�b�ʹYX�*�82A~�p,���?�̏��%|1��mh�`wh=�w�����?��b�2�r/Q,8�]�v���Ua���? rff����~�����x~����L+�EXNF��"��Hª��E�n�f�m� ���)�����x_�jww2�ON�!@�L��'s>O�K'��_i�Vg;V)� K��f9�q1�=�3��ۛ�k ��ͬ�c�ګ�p���i����S�랠F�\}��Y������D�����v��j�kR�nf=NC���O�����E�V���Y��Y�>���l%':dw|v|\��D�@Z�Db����O$1F�ʥ���8�}L~���a� ���+-�IS���|�� �P����CȠj�2�B��zk�0�! �}�U�a�N �~�Ly���+�y O�(<t} 8�bxL��6f��<��tlb_�K0�5��� �Hu���+'�1.�t��B e�j�k�e� ��!�8y�!nZV�ȼ�x<�>��r\-+*_��;O�c�|�}�9�����gl҈ �PQ�&IP�XC��>{)�4r�[�څ@�YZ֙]I}V���T(j}�KL8i�C閩M��z-��8 �x��0��$�4��hʽ�D'J��j��*�TVA.]��oI�4>�0!:��= D X��� ��l��$]��B`TBc@�R��BR)��Z0cɫ����@x���Db+M�����堮 ���/�KU�0W�LJ����M'|�w&�zpȏ�]�H'���?ݢ�u���@�;�3�/�f��°�a��\=�BR�I�w�63s�r�3��Gd��e��<��aK\�y�H��*���Ț�F��Y��"x(�[�c&S)�?����-Y��r��.����^�˳1�.ei�lj$H�϶��"��q����V4��d����d�P5Z-݅k6�쉐!�U(��9)�ٙ�)����/S�xɉ�O���M���i��Ƚ�<�\&�;<���(2+U8�椵��/�����y�R�]��<��wnk7�{,��]��V��V�0�o�9�w����A��|hx}Lvn �I�J ��E/�^���cD̓��R9�-<3�e��d���knw,�q!��l�A�D�n�$�2�5�� �����~�����P&AL����j��[��wA��>;W�j�xt�0Z��o���܍�Bn6���3��;�)����h�댕�+�m�mL���jV��*),��e�qs�c�}�9#8^��w��o�RÆ����ٯ"�$U���.�︎��>D !���5)�*0Xp��T{�۩)vQ����v���[���H�c�{�qЅTC�R�a� @#r~ANM��iF%�[8�//����������"�f'����c܁��$��ǧA-J�J煃$�BY�%Vf����#u���ҽ�zې�ۄ��g��D6�ņ:e�@�k��&R�JI���7�]�X��PMD_��cسx#n|X�`�m�:f���m���d�N�t�c6ŵ��l��>�����acϩ��` ��V��jV-K�#�LqO�4�����Ȅ�Nq˶�]#�������C��� �5�ݏ���͐�zHw�j��G�2�N�,<�_?�s,�t���B�pf�7��E��T�%� ��<|��1g�Z$I�h����A��<��c'��@�o���U��{ՋXB]�R��P�P^w%�sXO���/�F��m2n�@M!�ù�6;~/�J|Blcf�����Ϗ�uݱ�UL���Ӽ� ���B�N��~[8#-��ˉ�Ņ0��L��h�w6Y'9L� �ͩ�����ʶk��)@�_���E��^�I�C�k�ƍJ觝�R���&��ޒ�q���y�q�<YV���ծ %�D`%/$b�\Xnd����N�� ��0"-��CY�PE{��h1�|�R�qdT���v�h��1���{�� .c`\�lr6��)��no/��Xl�� 1�q�8}%]W�X#���NM��FK�ƶ��%�*,#��NرY@�����&�������R-]��;)��zWB���l�e"�i�: &��d���:8�)����!}9q fZ���mTӺ��`^���/_����C�R|�P�h%i��p�x�D����L=7G�kia�Ŷ�N�~�$��bC}�U�_1N7̉)��P�����?��[MG!r"��7MPX�%)���Z��e%J^rA������k1�V G8ѳ$���3q���>x�F.�H�!��� V��[��j����M7r'����H���iߨ�yZN�zq��g#�"��Y�*���a�{{������!�LIV�q�]���5H�*ma�9F�D�{��P����@�l�����_M'�(�B��ou%��H+ר�2��5~L�k��b���M�ĈW�3�e�U(�� Y?�,S��4�rj�X K7¶J9{?��H�d]k!�+�=tnpG�J�΅�w��>O�Q$lŤfW\��HČ��!��6i_Ov8U���f��R�R] �z���������(ͧ�HyJ9#�rh��h������;��]2�[`�D���� n���h��w�~�dG�T�u1<8�r5]!���B�= �F�o���l��/�"�aџ09Ť�R��!�G��Y����Xe(�-��f�����)�h6P۵��oZ���V�S)�~v�oܣ�T���p���!�34/{��x����c���_�I�*92�V�@M��-V��l[ܔ����@� �m��';I�PB����9�r�G+�;�ץ���5�1F��?uD��!DJ,���8QO��� �JfD��:�O�Z�i{�}!�����B3�W�]��h�a�:i��q�F��T�dV�@s�@��:��kW����9 %U��Dgkgk�j�=l^Z�d��S�9%���a����1�&������Ȓ�mvVHD�H�/�P�-��E���7�P��Ɵp��b�<-�� ��0p�U�����ua')'�C��r�����2�w�%�Q&�=�����m����#��h �̶ҝKВ�����cE��!�\9,��X8��%Ț�TP.�U2$��7+���mK1ς��ֲ^8�؋��0��1���e���y1� G̞9;��B�uF''0 au���30ʼ�`7��0����p�+�n.U�!�D��=�S�{�o��s���.����9��kZ�>�%㧤�z;*��\[�)��i�7��2��ޮ����ϯX���Ŏeɒm�-�+���JK���Y^ۛ�Z�d]������P\�ZYN�k(\��p�6$���n�#�L����+������q�a����`���*�U���W@aM�ք�3d�C�H|ͳR�R柰��g��3��Ek�l+N���V��X���æ���$��R6�=��]w�N~F�A���4�j��[T+� �*��c� ���Ɏ�q�D�0��VE���+�vM\����8���#��qaY�]�/�fZ'��x�h������3�pa���)�,�����G�T�6k]� ;�TC��%ӈ #1�5�wS����J��XV����^�_�u�o=�a� l�����Z���.U����**��iU�J,hs��E�|:���g�T�%��f�̂6�V��}6͟≯aɕ��L<�g�a�f�fxs4灺��^�� ����P+���j�N��s�T�`5~L�p¥�k�ZS~��w�1�|��Rv��+�J��K������=!�T� F�S�[k>� ~���0c�����+���t�O��k����d��9�1f`JZ�"Lt=��Gٖ�O�2i��ILs�a�`���è���C�X{& î�}6�r��s�9_�0tm]@����%n1I��]�a))���>���!�/�Yѽ�:d)ɳʞ�FV��f�٬�!�2����}���z@~�����u?�25��6��_�^�]��~���@���;4���I��L8�x'\���#�,R�YxX�����bNVc�IԕA�?r�v�M1����9�9�;���?�iH�8�JAI"ؠ��h���eO�t��p�/�S>�Pwtq�0˦JOl�+ ?ʗ��?�]���U�G��D7Y�v���AA�E���XR��+���<�=E��B�xC�8r�&ܳiԅ�\�OR�k?4�ó}��eј!��y.�|�E���%���� Ā[4��3@���8{(&|O�$�(��Y���~sn���=gѩ]1@ȩ~T�ʜf�\����,9y�����J���E�TT"�f���i;&n܃5r����˔���-l�p��*({4[ G{����p����)����6��a����h���e\4jS��� ��_cFs2���ӧ��"��p�FG��9��A���A\�� �I�Å5,����\# `9a�����"�*��� 1ԵNR���͚dg��i9�,I����}���,��ٝ%6Ĵe�&*e��l(�GOb&-�]�����$h�`¡| �U� ��~���k�4�>)FZ�wt�gw�`�|\�����$�"V"�0�V���|�qN�R�ESU�1��#��-�B��-��5T��a�_�|"�ݐ�~]͌;-&�r@�� �� Q!�N�%�@��CD��!e�9�^����H��k̠�m�w ���L�s:�eWr�(�ʃk���X���pk��,���H[O'r����ġ/[���K ��&e9gS�)$V��^.I!��v'Q����[�������W�ΧO[۸>�Ā�~�9����o,���R�c� Y����_�Q�����ֱxm�\�{�D�uZ��pt>�c�7�b���%Vflʘ��o]~�{(�M,w��>QD�֓���8���P�c�i�ԋ���8ؚcr���٧������xs`�Ï�Gl+�L;_���Qt�/�G�#��x��wL(���ȇ��v4��\�̱%Hy��1�j��� �R>5����� �O�0�����4�5����oX���ξ�c;����Y�8�S�I�;i7m�]��'�^����[}�)���1�9N����9A�1�q2�qY�J����u[�U8{iS�u��^G�i���*�)&�& ��m�[��n�Eb�6����v�mi�;�C��q�"uhb8j&��Tl �Z�N31 v��zi$�������vGͤ��,�����|��V���g�%��z���4��W]Z��6�B��n%G���QÐn�m�YB*RaݙzN��}i�;I�a|�ǭ�@��7�Ip���z�v��ت�J��«TZI�ؐ>j�_�h��?��Lf���5S�5�n2[�\�,Nz�l�9��C�#G�ofsy8`����'<�kI�����e����l�Z�5����������@1��G,U���h�Eޮ��){�\Pm�e y16��'��2��]�^d��3.#���t����J&*�(V琫�b��>g#�i�Y�L���\y���G�"�q�@ ���c$��k $��\�����!4��OdB�T�6�a1�m]pb�F�=~��d��dR\���2d��iQ]d(�B��v�.�s�^*�9��+�t���/G�57 ho��$��t�.'w�l�~~̿P� ���i��Y[�X�+j�t 5��Id�s|X�/�O���BcH����(]��x���x�8�<قM �f���X�g�;l�H���&B`���c��wI�?ʣ�H�.Y��>`t4k�� C�r�jL]���)�ۦ��pU�r�'P��'x���E!�6���cY�Zd��b�IUs��~~;es�I}D��>�Z��8vT,��6��j�J��ڞ�{: ��8X��^�^��QY�u����t�,�v�X<��� �f��� �������R�g ���Q�)��'~/�������H0�[����ވ��`��i^��|<���O2�V`J�cj(,��b�-�p�L^�i��q�� t L8�44C�A�!��w4�1�V�%�W3,no���*�V�ST<��JW(1��ox��i�:�t��O���^:9ʓ�U)���+h���� �bt�,�9,��Ӆՠ�uN�������]"~$�V���v�`t���۳��;�Yb��D BF�O��M��d�8�x3}���f���S�s����1��Co����w���-���B*6��$Ή���?��M� Pxׁ�x��F�t"�ͳ��<��[ȿ��C��͋�;�[*�c�1?� �y�7L.Q��!#b�Ǩ�9�˳ӷ.��K��#'�$��,�5v���VB�bZ��H<p�b6������h�x�1�m6 F� �@p����!�K̽6�zG�ԡ��N�Ԗ+e�_G�����r���"��%���]H�y��6������9�&�ex�Բ� -��̲��,��V��F���h� ���q���"�+�m�U��.��]R)n��R�v9ܷ�)Dz���RёWrt&�V1��S�=W�%fW�|ɪ83������`�H��|�"�]3���&&��c3H)��脡"�\�~�(X�$�^��ވw�}(L�q����7���M�-�x��f �o�d��d[���#����� ,?�`�*���`& ^n�a�VNM��"B��'�2���hO�����0�,A\[1��Dzp�`��8�cاg�B$O@� qXS0�(�w���q�/@�����k��I�d�+���\jx�_���ljO�2ۗ=���#�7��5,>�X��ɫW�˦K茰y��չ��X���t�����l��}�� �q>���/D��x�i�A���x���E}��7�,�=�l�0^��\��_@�_"z���0���p��g{a����hV�(�8����W��vB�b��U�(�wZ�\yR�+��{_�d+�PI��,���\��W/ۢ�ܟ9⇇6q��͛�H��@�2�z����Qӽ�Z�}�PK5�ި�J PKSTLdist/summernote.min.jsܽ�v��.x�̿��I�T �J �(�%�&���6�U�dZ`& $4��u����{���E�1�� ��>���"2s��cGĎi��Jgw~z�O˪�;���7�;�����Zg{2,;O��3,ǝ�>ɧ�QU���p^W� �x�י����?��c�h^��*�u��Γ��N���Y^u�gմ�ݹ���q~T��8Y�O��|�o��i��y1ͻ�?�5ϧ��^/Klþ-���O�[���o+`Yޭ����]v�b�ڶ�5�8��g���Y�;w��p��C�zZ���S7A���Nz[u�����i'��z�g=�yZ�e��O��w�A���褘��y9��:#�f��|N&��ѻAy9����iUWa��� sՠ����z�ő>��1+�<���y�u��'��$*���5��g���Ӝm��>7ڱE�lh<��z>���%X+"���)V�֒U"�啭����8D�d"I4���3MؕQ����w�>�Ț��F� ��Ӥ��h���>�4,&�j�fݲ?���d��*�ڮ��`�yd�'̺]=Ӹ �Ԯ�^���ó3�P���e�_v�ף��A;7 G1X�����x��q�>d�a� ��~1۞N����^Pg� �?�4=w�}�;w�Ӂ�e�;�J�i�vy�b��w����1n��r��D�#���@��ٰ�'ɽ�w{i�Z��*l��ڇ)�4� kv�?\�7�N��(��δ���|L>�������k��׆�|�CA���c�w��F�xx8�]O(sX}L:�i1\;�*&@Oa:ϵ���N�!C�`|a�ڙ\����}P��y�uV�lM��!N���⬚��/]\=��Ű���û��Nga%����wϱ�C �鲚@�!)� 9�ӿ��'v@��|2H�H+���^ �i���8�ߡH�6?�41?��� P+��t�t�03��@��~�'.�hNd�:�ú\;�V���)=�XL�������bĤ��\+G��r-����Ng�-��,�����ؼNR����N��E�������dX�h���j��ڈ���f�b�Y7���Ia�'���Hxw�^��1�L�A�_I��j��p<� �����j�+�A�u�#%��H�"�h5y������!�Фx�\��e.��JeOY�y"�d��F:��z��U���vt����N_���xw��[�Ma�"�P�;�'��Z�ͨ�Tӵ��$� u{@�n�!]� �����R*͌�Y>(6��U���E��F:s�˃t��o&�<B��kr�`�9b��z>�������9��g'�89�U١,;H�!��\�,��A;�?�Q&�(ǐ�0��n:O�b_��-d�y��[�Y\YAa;1�<��oe���X���&D����A��A��Cx7�q���r���zM� W����#)$�K�9(�W���>%��8�pɡB=[�{�dҌ+m��4�8�f�x�!���^��[�VX�SP���&��$�x�I1㰒 '3� !�Iu,\1Fļ4C� ���l�������u2�5�ۢ$���(C�`�ml�j-I� Pyȯ`�W��hRq��bvZP��$tr��h9A,8��ީ��|��0�tz��~�̟hb�N9�F�h�$}Q��ʇ����/�^��Q��t ���߮.{�ZF�╒�|V��:�oQrQ��p�}a�p�M-9mc-cѳspcU���n�R�PD���]�1���� ~�]� ,J`��8���lFyO�u���7���J�V�o��"y�y�|v����1� T�<�O����x��"��1\���g���b�lӑr�x���J�*�[��Ј+*h=���FE�Kq8�GpE���_��П1eA�<H�ǀV��M�TB�����25G��H�qi'�l���P6��]�a�N�$Sm�9F������D4��V��N��G�v��$��9��� rP�Y�[�&38A�]S;�uv�Ɲ�Jʲ�� {v� ��3���e��9�g�f���i�*&[|������\+�gB�����J�MB��D+s.��|H#ҽ��i |��%����Q]6�R�~Q�T��%'�J�O�6hk��}~u�C)�P�V�cၻ'8�,T�J�2g��?�6P�kT���z�F٘�T��I�Έz�[W��w�a#���'�"��rS� ��&zQ��O��۩���lE>�o�u�w��eZb&����BE���'�J���{V�ֳ�"�`����G�q8����u�84�y(�T��cL(H��F�94ʘ/��тB9�X��є�Eq���d).���L��)Xg�z�i�t������@� H�}" �ӥh�� ���h꿂e�B�69��Ҷ�`�cD���5�Q��,.�>�&y:7u��V����w�e[de�2=��/��,��/P�ڱ@X�쾸a�7+`�gg�O�"N'I�����ӵ�QC� �*�EŢ|_�k�3.W�ީ����V�g�(t���w�I�i'�U��YNd��q�_u��Ht�v�������l�?٫+����q_���>��p�8�״Lz�� o�$��hSွ�J?$��/7푳�8 ��б��@�E����Ae�LK?�UG�^���vB�( O�Ϡc�?�-�},����*���y�[*w�3� 6�>o@�q4���G�Q��N�375�v� A�Fgl�x8aWw��I>���:�-�����>m��r>���ŅE�i:kc�����;h���_?�t_>F_��4U�mEv�"��~]��5���mDYU�F�K=Sˠ�Zۀ�jO9��rp�CY�!�"��>bSA->�ُ�aTΎ�ef��g�}�}���ȴ7�,k�B[�et�ta^�$k'�����*k��4j:T����D�Y=(7+�*��i�˻E�g�W`+�(C�,{�s���� �h�6��afM�:��6�3��4��'�`��x�e�P�U�|�:�~4���Z)���I3samcsu�|Pm��I��Kg��/fON��O��삯� � A�f2���? ����"ֶO��Z��v��ݏ�tUo�ܷ�:P ��m�`���e��Ͻt�f+?�NA�B�Y�@�syh�혬��e�� ��E'��6�aJS� _�O��1vz���qF�М.��v�fP��4��a,�n�8���{������"dY�+p���7bz~����t���o�^?���X�9����l8��?N�a�}+"��.j�F����}��__���|#���˯���7Df���%����ޓ�q��=t}�0}<XY���Z}��@�}Q�`?�[y|�Γ~����>�X�w���~���O�� (6�&��z��4 i]�_��5M۽��*��o�~0 �{��h4��.47;�G�Q����ۉ{ϡ'h�#,e]�G'T�uέ �����b�q�E^�~U����Ngͯ�닋�[��W/vN�Sl�|��}�2dt|؝��<_�����/zч$���e~8`�ͧ3������}��D�{��BC��^��E��������;w�A9tT}�8�o�O���iv���n���]Qku ~G�wN@ s�<������T/�y&��χP;aۙ�d۩z���`AO\��+Lܳ��m�O���(+���B��؟=���,̢8'{��Xg�S���u^�r�-��ô ֝�).A��M�ԃ��?��Y5G�^#b��a�P�3Y���}�{T�t�A�¶�%�����p�nrj�����Z���^�^Ȧ�O����{��~��O �|_�ZȷӶ�*4�����̥?^�^��Y?��fX���ʊ��z����f��{b�,٣���`W�}2Pn.Iw���^u�a��t<Rb6z Q�أ Ύ��wޒ�Xa8�k�:'j;���8��'.���/}���s�k~��{0�b�����ћ�_����ůO���7�/�\�����ޫ�x~���!����8���_y�� e�ݺ���g����ůϟ�����?\�fOX�_o���7O@�������C�'>�m?z�O�����6>:H�#J��#V������_�_���O�������o0vK�I�}~���� \����p<n6�����7j�ol���W;?���=L�OSff��>..t6��%�Y���Y��z�w���#��;���t���Vr�<��m��<8�>L|�8�y�`\'����y#f������Jf��� ���E���I�..�+l�� ��5��t��s�()~vW^�A�P�;J� @$�b�p�ՅT��s3\\H��)(��T�$GYJz��f���x+�wj�)x�*�w�X�@㬭O4~�Ӧ�V��lnA �Z��x �`WƲ ��u~�[��n�Ԋ=`[�$���f8l�v�C�*�Q͎M��I�?��V ٺI��[��T>���h ���+������n��;>��b�#[8�.s�]��6��8�8��Hp�8:©�9���(Id4��ߜ�}q!�}s�(�����+����{�`N�8�"�R7�c�� �q]v�ki]ZF2n��چ�vmw҈�:ȡ��*8��|f�q�7��<++���V��]���LUp*-�������51s�p/m�K����s1(�=G��[%��jyj����t �̕ Jo�C�f?�3)T��l}��~�8�Q"~��V7��L� 9 �nR��zsZ~Pn~�7�ߎ���a��� )\k��ҟQ>��!5�mn���8{ _eP�G�mG�N��חU�Ku!�r�!~�~�lΠ+�3MO *��"�~d٬��v]��k�QL��{n�Ԕ�BA$}�C|: �4&05�tW6��'�XH��TZS�D�a�|IK�(ѝ���Ï�����x��=����e�Y�(�"�t�?k��.���o�4X�n=0��p�����E�zKGd��/Z�D���ň]� ��D�^P��pOf(K)d$ h�X$�hE!4�:�w�� 01T�ѷ���?�@{*`H�f�z�K� ���� hmXW���+Q>��*3l��.E0{&��ޓ��m�yɮ_((�}�'��)^�{��Fc\�<����\܈���)��;N�d�U���zp������v�n��^��x���o??{���7�:�e~�%�!7ae�*�O����wFgEX��ï�t�. z��A��'������c���[ �Q�k95Q��zkp��'Ъ�q�e�d�2�9�\@�n9�_��?d?��|�˃�^~�H��gb$�>U��%�ݻ�A�-=+!O��?��Ѥ����x���p6�[��S�$��O2*��*x�ʜ��VŒeE��pq��{b5�~QÓ��;9t��������K*!Y���|�38U�~�>�!��_qc�Ϭ�/���]8^�q���Ky�H>�Ϸ��V�I���?q�C�g�����O�H���9̞�sUNO�O3��>̆]o 3��� ���F �@�%�)�V�@��KX�ꓸ�Y�I#�W���&i�\x�u��ys`�6 ?�"�6�!l$|�0��bQ�hWtl6;�7�&�wgbˉ���֫��4���a��x�<���;w(E��'n���e���߹C��W�I�٧Z�G��C����>�����c�� rb�^ຸ�U���C+j�ϯ ]�Յ���,�o�ڸ�/G��W���X�d�oKĒ4�'���i=���"��?{�ܶ-ʷ�����#Sx6�dz{� � J��Fhc�@m ���<O���v�p�١ �#$�8!�m+�V� ��H��n1��DY����$?(pF/�!L�3���t~�%YAa�/��]�g-��ɖ(n�o�0<u���� ��j�~'�c�s<��ap��>���e>*&t�(.�ɗ�#4�� ���P=a!{��A-��z��3ĥ���o�٫>�t�N��<��J������dlb �nf�^bu��is�fJu]�&_���?���Ӫ\��v�*t����b�@W��*���36 �ԅ��n@F�y2}t�CU�7�L{]#�R����R�/@B�V6�S����e�ټ���Q����`a��Z�W�7y=��I�dF���?ğ��v�cL_ �B/mĂ�r�RV�9t�b|��ک!��/�ბ�Aq�:�a-D����`��>b��HV��BZrt[?Q����e� ��l`��[_o]�7�\>ݟ���I|�#��g�s�(�� �x�Ka6k;g9���Fn�q��A�<9���)O���p�5� M�F�xf���%B�G�e�:c{�T�c.����3�+v��3c0`EJ��)�gC�;� �3ǝJ�+����R[l>�Sc�+�|xz�g`�7"ʅ*N�l$~�F%z)N�U�RlF@ �s8�C�E�:��(�ݏ��߅3�?�=�ro��尻������/��?�?�������#�_�p�D&��r`2j�h7���ke�����m.�C��dD�Qd��a�j��z}+���/;���q� ��2����+�F?��11'�� �ZHh ��B�`,9��;�q��V�Ky..t<�C\��H�V���hą��)���\�]�i��Cȡ���RbYs:� `�g_���Q��*��T���ýap��μ�:���!����~n�jе j=�a�r��s6���=\\����v�k���H@�(���$/���&�p��C,R�<¿I [8�e�3���Y�'G����I�t�z���оݑI&�{1y��rGW1�T/$R�Z���.�a���d ���1��!\(�3�>�QA�-��{��/b��q�g�y:��I^#���0SLO�v��TR�~�ڋs��쇧Cx��|��2���L%�Gt��a�����r ���|x �}�ߘ���,�<� $�|�:��|�)�X�Qͷ����aI�=[1%�KӰ�9��,Os���x�;���S�+���!�X�:�eHl�|>��,��3�@^th��@��g�A},N�R`W�,|!�;\��2O�R��ۤQ PFy0���SLX��y��9X�U��Ml�(���2��5��sUe�'�+�} |~��/��),��o�F��������W:��O��"66)���X�O/*�q�(�n�ð&�\���Z�\_Ω��(��_P@��%T���W=. ?e �SWDo��^�pl�:pp�O���"M��s\mjpyV�'�g������L��K���g�'U��>�}(k�=#.�Cg�G��Q>�>d���h'D���N5���O����2��l��+����}C�|Hƃ��s�9y��4[XF�ɜLAFb����9�Af����P3|D�f��jz��Ohd�3TU\�j��ۋn) �YBU%�}6�t�=������k<}㞾�ӷ��[<}瞾��ճ�|^VS4L��Ă"�[�|x�?�5��8'���sx�A�@A{�.F$��]y/��9�����M��@곓��L�����|^ӿ�?����3�kݗ�'ű]m�;���;}��D_���'oqD����p�V�������> �Cz �6h��o|�4����_q��5| q���z .=Yb����:x&i�^���J�e�'�]M�d^��5铀~���#���_�7?���ṱ,_Ar%�+%�B0�SHQ��+U���l/ �Ė���Y�~a-����tU��H�v� ��r��t�b�O��C9 $(g��k��k�F��(=���Tޡr���*cm��o�o�glnLwx�v�7�h|RQ�2��72X�V�b�~�'�-��{aK4�i>ziK*�R�r�rd ڏ���+�ΐ$I���E�Y7H�����.{��[[1�;�~T���S�O�;����e I�Jzc�O�t��F�)]n���щ�*,)��G���Pz�����ޝ��g��k��q��=P7�ܧ���V m��P__4�%��8��)R}qpS���`�8��ſ#U���xdxn?����?�)a�PT�H �Ùq�r�� �=79�~"s�.�&w,J���p��Z��==�y���CC��ޓ7�V�t2�.ݰ�Hr����r � O`H}���LX;O��S���'/�P��u�����>~��ޓ����O~�˾�c��u����gz���ǯ~~�}���|�b=��{��Ⱦ���g����o7��M��}��6��k��.����c���}��w����'�w?�ϲ?~��9��7�O��M�g�.}�}?�;�:}�}�m����ҿg���#�a=�}���4�aC�p���^v�T�*_��_���� pb��gt8 ���O꾃[��r�!�����S8%R��J �rj4M ����W�,m����<MPƀ�A�.��zJ!ٓ:��z]5���͟UE�8([6%�Ʃ�����^�g�H��� >V���f��^2G���$H��)��#���쿦S���2͟�c�[�`^e$�^% ���G��{D��u�GtLQgt}���k"�n�Ö�Q߃p7&��Ϡ^A��� 0�?f��Y�Ce�l�t�9����6G�Y^�i5g5� ��`$��^W�����8@X���É�v�Ԥ�Jw�� ���k��R{\,(� �T�1i�ʴ14�A]32(�n�-5\�,��3���A�U���ûм��T7ȃ)>�Df(����()<�E{������A�h���M�ʝ�gZ���]��3��L)�rVmΜ��L<و��z�)�ͱ�� �Z��n��6���X��a���¢���>#H.۰p;�j}k��z�NՆ�2!��m�H(i�1�+7��HD�X�͖�_�ĵy^��^��-$.�a�h��Yeӕ��I���j���+Z�^��%G�^a�y�?�[]~� :u[�W[Q���F��VP�E�O�V��b�?i+���ӘK�Z"k�\m4`�����_~�>Af�t�y��$��,�1PC�4jn��HCS����N��l]�5���x�� 4����������8#���q��Y����2;��%��3h��[�]��E�� ����,[Ͷ�q�Ғ%�W��8�xD���v1�`��U�{�T�mj!�/Y6¦��:�,�=�����q%�pv��ĵ�XAM%Z�v#��1v��V��~V�����Cj�p�YV�؆\�U�>�O(T4O���̳}�nEo���z@!��G��LP���� ci� C�o��2�50 �v~Bxwq!�J�[9E���<����Sk\����f(9Ƨã;�}g��5����tX ��!�*���@�H�jG_C��l�A�!�Hi1�|{K��,Y?�|�b�M���s-��G��`x�`�E�e�\�pN-�h���Ϧ������N����bv�X8�"�gI���)��Q��D3�����8~ �*���[H�-��"ǃV\\��3]�p@��8������:� d���p�x�3:�ӹ*��h�-�f��(�g(I��H�g��j�8��;w��g��r�X%łC��!TP���w/�є8�_?�̀lQ�.�t��i�pR���̭q��q�a�Є�H��Q��65Dnz��|CF��(���� � b��rk��+8��8bF��]U""�<�����p�q@P��{���$� �7�8��2��h��!0U�����f5��b��ޚ��3T4{�h����挾����1��i��W����r/fl��f7����ݔ&-� S�2�5Q��w� ĭF���m�D����Y�K:���*��`�����B��to*�1���Ӳ�5� �#zNC5P% q�X`�D�"';�3}��ŕ�ͺt%KqP�U�(2�'G���Wt�sw�YA$�qB�6T�M�f.(=-���#4�qS�*U�@'�x'��d�tE�UE.x��c�O�O@3�4�(���a�D�J���F̡SZ�/��#�Wb9)���EȎ!p�_љ��IhPC�ׯ�����u�D�F+���b�R$�f|t�� d����ʮ*Z��Y<�.w�#f�b�Wps �L�G��3��q���Mj`�d�����{n�����_1���|�yJ�� 9_*чh��>@�:��5�ň������W��\L%�x�Eŋ�C�N�����B�&аC��P|~���П��H��W%=�qk~}���2.e�4%> �Bҩ�;s�?ON�|k�*<�.����L:��M��܁���-&z("GL;E�����h�龊�9�]�db9#W4X� �"�٣�S� 2�#j�I9$[��B�Ur�(l�H^jФmC�h���v��@E_ Q]�H��$�!����f�\b�!Ν�Ħ�֠��^Ɣ�Tq:ϒ��BVJ�'���e� 3c�ABW%�R �6/���&�6��D�J�t�%�����qG���QN��3' $"�[@�6-O���=%��ɛfjil�)�TD��hx� ۱���V�U���&E����Y�>�x��W�kGdCc�a�UF��U�q �D]U�Jg ��n2.�B/�P��$Y���Rˏsy#]a���F� �ٙ�x��ra�/��I]�:"�𦠧0éB3���h��7`�.������N���%7c��߰�x�x[Ct����5�Uqq�Ă͑l�����.T��d�+2Y��б�p�(�H3�97 C4L�v��2�R�!�;f�lE�@�;��9[&@��BH�Мsz�0H12[^��%��H((A�^�Ќ� ��in_����Nn�@�/�W���Bu�P|�i��GC���B#R���`�k#�JPQ�ף����sH^5r��,nE8+|*��N Ē���tC�1Fq-��Ny��|�<�^#{"��Gߕ������m����Ƌ ��d�ӳV�R�o��L�!Ȣ�A�^8a J_{���N�7�ݣ7Plao��ʠ#@��iK4w�z�A�Wo��)uֽ��4vG���x�!��;Mz�E�Д�П�V4,K��3��]7c����C���<@�b�._Ka��,��]X�.�t ���C��vM�gnd��0� ��edz89}$�̸C-��Ӕ�Ɇ}iv�l�˱rk�2��6�?)0�)T�}Ea�,�1�?�ۍE-��%�r�n ���*��<�bP�rzx��Y�G�T����z7��{���$�����d�?UYYW�����'�ɧ���|K�� hNR�߁���;n�d���c<�|�ٝ�QNszQ{�A*<5���p���E�?u��H�L�� 9�~V`��ԗ��@���<�KYqP]2��M�O1�E:�p�qO�[��? ZP(x��n ����C�8���2�du��bc�2���'����ӧ�v��B��s4�X$$2]�+j��?F��;8�[J��bڝ�]?/��11J�`������I�-S�{S�9�J����0�$,�5��;�����>8U7J0�}ɢ�vd�h��$<ڮ��KG_�X��5�K^�u_�t����99�"�O#7�J;��Y {u�>݀ѣ� ����NW�K3��Y�-N��v� ���^�5x�)P�#� �tH�*Н�8�6�Bg�(�JJHH%�L+���)��AQ��� S�0 ��gbbbB�Eu�>m�����p:�T��*=7���Ϫ� C*��E)�M�L��v[�cfXj|Mb��\z#��N�'����l��T�{� �V� lm��4�!^��tO�x1� �yF�̈=� @(�#wS�{�4����v��v�>e"V[��ա���xc�2�+`�VܵΠt����%8��P,�|�P�����"�i�e��JS�1h ɜ��ܳ��A ��&y��DoK�f�M�X�kd�� �2hn4.�1�W�㋡)����ż�5_�����|��` �=q?8Z�5�ER\3�(Δ�F/��5ĸ}�≊��Xvz''؍eL���>I9v%i˫�98�9�f�M@X�B�n�����xC�72��t{k�Χ�Of�B(j�t�Q;�.1���8��_jFhlz*TV�PwH��K�!5S���ps�e�����<��b�I+��`�R�9ӽ3�'��W�%��M�v4�R���c>���!W�(m@ �my�֢e~�d̹'q���S�:r������r��� -�3�lAn�wo %�� RI��[��,xu#o[a$���>�j�:�{[fl�W��B ���p����֣n��7�ܶ��wI#X�E��]d8AitV��Af88T"I�%f�V[��9 ���r S����K]�U�wz��H({�����'�*�c^(����?�x ���#PFj����'������G��ܭzl� ��3n 3}�e�*tK �� �LYLp�#z�#��.�k���p�-��66��a��"�0DAd�`h�4ז��$�sG?���Q<�W��n�K9dG?JHqM����<�A��1N�Ѩ1@L����q���f\v� (�CPΠ�[����K-[�D�ZէL�gᷨ�4�"��4������.JHB�5JGA1L\�NrVЋ�P��fqP�Y�:1z@�6��C\�A��~���D�YM!�En�ё�h� T� 7S�EXR [��5��6l��zyX�$����qt�=& �J;$��#�Ţ�(��H��f3�^F� �v ��q� �� �G��R�C}��t�\�jQЦ̂�#�1/M�DW,ɇ�K�[��V�B2l���e���8���1��.�Zw���y����(�2��h 8�DD�����{��3�8uD����z�?Xz�˦�"0�5�m�L�SDz�=iLҧ�7u���*�8>���T��2�< �L:U �k'�I�-�q�Ps�0��=8 �!y��O�K�l���O�cd�C(q%M�j+c��]a��r�SB�d��؊��9�w�5x����JB¦�J/�GTb�C9GC�>/#�:>�XI��G�=�sY1�Y��<��m��F ��J��h)�ȎU��S�0:*ˣ�o� +�,����h�ۥ:g�m4˞�Z:��I��n�cz��uɎěB/��I,4M�!��?&�/�e��y0)�'�dChT(+�����-��Uxa����~n��=ĩ���.��P�2_K.J��9*8ǵ��!�Pt-�MF-�I3����/�X����Qx�,ŋ9!���m�j1��D�������np�I��a����f҈W����d�(K ��^��%A�dp~���e���$�2�3��D�@*�7���vZϑph%3.h]��N�����:=c@8\�W�r���Ay�A��1ф�8��H��ldP�ki� �"�d�������ӯ|�� �}��G��� @�U:G<� ��Z�E!�dp�kA�+�7LWkA�ª)�������e#��g�SUm_�S}.�l��=��Y��q���hs��lY��`����q����P~r@+p.���#2pX2"�9��`DG�у��#;��A�j���aP:���)�0T��oP�a���֣�������������w�آ����9$��T��rlb���p�s2e�=�4����P ���,2}dtC.�������q�o����l��3�W��$P;�\� J/�Ų���H1��A"w�N 9�ЈG��6X�g� ��Up�,a���X@�.����#���Lq`iLyv��!���aV~^ZJ���Z~V$D��Ru�ö}��"7�L>ң���&�8=��s���H�z$7Ů[���H2�����}��C�0�p�5p|���+!�?4 �'������4yJ�Q���qA�;]>���4ND���-+����������r� Ug����`I����G ��p�dR�y3�{!�y���猃m}r�wzA�uA�c��I�Xa�e�� ���~�x4K�W\��b�I���L(�+ Nq ��L�%7�"}/�@���:g�z�O}k/�M]�JPٟS\�1��l}3�O2�o�`v?�\ŋ� 8�3��=�l9^tF��i��M`-�ܴ�fp��C��͑�+����x��4�%<��+>����6RO�����2��=5ɾQ��Wu�6��>AB��I�<��)7<w�>Ei����W֜#e/M�$�ˍ���!���.N�`8a�mr�4M����v�ˎZC�Wa�8�vU�Q� ӗ���0��r��z$�K!;r�[��̐x�V�H=��^����i���""(������L9�H")�{<�x��N���C��+ی��谐}:���9z�� �%�\H5=2r\\�L���6�9���1ӫ�b����rS�1���a(�n���$1��!![��h�8��� �0c;��,"�\V����@ =�te���ި,���m� 1���R�9&u�f�����+σ�6%����P|B.�9� "�$��*�C��~r��W�\,W�z٣ �X�z���^J��#pA��^xk�̠Ɇӵ<!T9�vaw��y ���]���)c#C����6xz�n]\m�����~�V�a+�،�3���Rf�iK��pq+ o�� _�߂�oǀ]wؤ}�!@XàȕUn�)���F�}�-z�����MAd´at�~3~e��y|đ�G�|�$rn����;Dg��>�\��{ H�1�O�``CD�\#H_8��h�Z�:��+���j2�k崼��u4�^�KU�o"��V�|��Z�Ў1-�5�\QA�2E(*.�.�w��gh6vWHF���n���Z*ĀqE�� �5��>���Y��t�.��nK��!ϡL �6�D�����nd>{=��@E�aw�ܕ�H_�:��u�o��D��,[$����YE�Rp��ZP���X$JH����~��Vw�֓X/w��`/� �[+�G�|D/�cl�}ݴ�c�0��}�*y%���h�+�5r��2 ��F��c^�5�l3��'��B�Tn��u��r��KZL�Ȭ?�;>f���;^�i�×��[o���MNv�3����f�7څ��ŭ�����F �"�b.Ó�%�M�g�z�R�zL�U'ت��:��*5�s؆���p;mK7i���X;u �r��A��SW0�6Ґ��z.g6�Z����c�U�Sx�Ej2�)(�� X[��c}�Աc*���G`��&d��D�?���j!g��6����.4�9<��ݠ�PJ�c�Xp�^;��C�+c�%�g���Ghe��x�nm�C��-�3d܈7+���c�'�\v`wgqʣ�"�r��wlFïpC&��q�����G�خs���� d �>3d��8��"|��L�z1��5�9Q9ټ��O8�nC��� �m��qJ�T}'~�"��h�e���[�����)��ۼ��������R�I���`�"(����݄Yё��i�М)���U�}� _.��I-����e[y��R���c�u ���M^�TP��"��%�Ee�j���-m��j�;p��y��"�!{������B��K�-�[41����&�K"�2��I/|��)>���i���UρK8��=AI�(��Qf|�,Q�����`�<)��Q��G^�wEP �c��x���=�yi�gU���Y:@<+�N1�P�����c>��k�F���k��@�k1��!�^]������~:8��`��KA� }�l�n�~�x�wq!���E+�p���q����kz�)��3���'4z��� �.`;-��˽�f���1_ q<X�n�*p����T��@-϶�@�5�l��+�͡ rP4�,nX�ā?�eM��n@��i��,T[�vD�n�zT��}q$_�� ĝ �`ٶV���1���Q��i�I�ΤS�iQ#�@R�R��P�2t���<L?l��-�6�l�3Y�R�@�+o�U�KG�+��-�#bڂa�X�#��m$hN��sn�����U�6AE{��h� |�]��S4�2�`;_=k5���j��h8���#���f`x��L�,@:�]C�*�hJYx*E/ė��Lq-f�WR�c.G,�� ]o�X�K8�<&'Wh��>�4��/e�r�VnY� G�%�jn������%�����+:0� :�50�Mː����1(M�g�F�� ,[���R]��"2���l3P�:�0�'�>!I�"�V��A��ܑ=͑�7��5��ٽ_���1\���������Z���d������=^����N�,�w�X\ ė��]�Ѡ;cʖ(�$)��?�=�C ����k��L$X�Yw�.��p��k �E�n� +��6�`��b`�s�P�R'��!"�u �N��Vs!0�&�8���JS�A3�E����h����Ħ��(h1�>��ܻ��JJi �0u|^ROd���&�YdҹPA�Q��8�r��-�Zt�%�Eq$��A� ��k�Uģ0�+�-+����.4ٵp�ۻ�a:G��K�.ۅ��H'�,B�ݞׯdF�5�M �m66��n7'�a#��|�v�J�Cq��*s9A�$��D �<8��V�0���P"ż��ǼNԊ^�b�\H�L�b�z�,�~�`H�����f�MN9f�]��:v�g��5�A.���Al��+���Y�k���D����6���e�D�Ӓ\�hK3B"�a�Qݫ���bs��1�m���!_M�'lԒs߆�YkV���(��f�'~�1����&�q�pw@�s�%��0�m:� ݣ\D�%{z��m��%�O{ �ʐՙ[��D�=+#�:�Z��Zz��p��x���z�}�d�� j�6���>�����5�A�v �H,�Eװ����r�c)^�\6;��E��R�W��l˪�����d8ݤ��tO�����r-�7(7q�9KѬ��f��e]�"߬�)ʪJs=��.r���_!{�zU?�v߬dGʼ�l^ɡ���q~�;4Fy�r�M8x�n��&��1�)�zj5�XR4�ײ�<aa1y�C�̀�K{�Y�nXL_`sq����l�hܼ��g���f���Ҥ��X���<�O�7���%�Ў�U|��^��sW��^Q^�^Q.i�ֳ+ �Pw Vb-����>y���RA�k�i^�tH�|M/S�����l�/����t8�s��J��q��=�I)9�y��o@�z:�p+N��.�f��Iq�}���=H*�IA�Kl�������8_ z�]"�q�ٯ��h5A��bk�)4"�#�2��]EILÑ��rC���.Y��4� ���,��h�@�7��1�G��Vκ����~�-��0����X�a/�W��c=�C�pb7�teƼ8г\�2}�z�iƈ@�`��'L��Sh��; �1�)���:��h� �~5�6R��u ���k7�"8�z0xp%�NAt� D@�w Ά�fa��xB����B5��t�7W�2w��hci��B�ٙ��o�j��<��LC�l;��Ƹ?̝�]��|`�ld��0Λ�\K��DR�N�JK�hʤ��<H�e5<~��M����i@��d�Po����d^ȖQ/*���5�#-��m���b��}]_K�b�W=�Y�&fi� Ί�@F�&lد(�F��i�I�߅�b�C�p�l����˘]��6[/�P�8|�v�9<��R@'oVƮV�S\��;-(���.�vH��>C� �\O�#�&���'v��z�K�uW&����l�;�T���Aǵba[�1Z:�Ȱ���c �6�oÅ���/bD���Q���y-Xb� T(~p@���X����/�;!�Q�T-�S R�!�����ل�Ꙟ��f�5.JI�͠8���ꅛH�aD��(�+�X�.yP�ә��|dg�TC���JR� �`7�8���Gi��\�C�P��Ӛa���a�@���'@6�O^<(-�v����+�$dH��v5J`��:��!r�[-�l�l`�G9���E�PV�'y�'�E)���y�x�U��t�H+���݄|x y'r � �X(OS�#�$�O�NU�Y�qk Y OO���5����WgYQ'T���u�b��mkl?:�b�����Zkg� �<� B�qw1V_C�p�dc��/LR鐉�gRgD�O�+g� �l����8�� F���q��*�b0R�|6�&�ϐN�tj�{�8�>��mL�$:�k�A2�|���v��4����;�����o�d�D��Y�ւ�x{F����8]��F����dF(h/�4�{�ƀ#\���;ƒ�ɑe�v C[����w����R_0��9FNG`FAgȃ��.��/G�2OMBAf��[��%E� l�h%����,2��q զZu '��gO���*��,_b쯁�ĆJ�Ta�e@Ё�Dl�D_�mhߑLQw�N�������g&�2��.����ʈ�I��݄Yu�CU�G�kz.�6@*��_��A�@Ɉ1U$�l:�HNR�I���Kj�)`�]d���O���g�������,��Sr�k��,R���PwXSa�lSM��K��[j�@bNZ�?��Z�q�Zc�TDZ��P�{�"Cn�x��>ZpS�p�=h�x�Oia�/�_{;d��Q�]x�˭����6��]4�,�w#RYK.Jl$�-�����v�.�7�H`��єb�7[�@<rF��5�B������+!e�@����8z11����4�]����$Rusy�%D� �H���:Z��AcKr�������D�7�� D ]�7����t����|�0�R���g�7�p��PqZk���M�����~��B�������-�d."'�J�����H�Dw:�� ��ɳ���ďȄ���ԚT��?L�Zs<��lj�A5[�WlUrE��2��H�`H�B���N�(*9e���m���x1�"5 ���=�207�D��B�d9�U�a���1i)v��ctZFӟPM��ε�h���Yhэ���+-fޖ�H�G��v#wڛ_\s@� \��lZ�'�]0��rОn��E~?�$��!\>��8x���R~�$�ᡎ��É�3�g��p:�a�؏�G���&��Kʶp�A���&<:��@�;��Ν5Zi�m�1�B�L�=�����%�7��X�ݮ*�#g(���A��Kv���O�εW52+l ���S����T�vYMx�W������+���e�� ±c�E|*����P�|5�Vg��9���:"��K�~M�M�v:K������=DVfaH\�u'��H@��Q�a��,s�۳T8d"��Ͻ]�c [�n�d�8b��-� ��$: �EE�:�6h��^\5ĩ��!B=_�i�m/姡�GݒDX�����I���#��-�q�_>b�(]k|��8�q��-Il��Pz�,y�[���Zj��*�h��/��u{�m��*0�@9��sD�zx�&� tKc��&��2��R�wq��� �]�S�_����NB*���A�� ,g�-* (i>�"���F���ӌ˘��=���5��7k5&d� \�ަ�:)q�2�T�r���Q�x5Gj91R����q�� ��Z�:�E�NK7��˒����������ݙ-q=S|�#~L9s����PuƞXt��%�{.����i��+9�������ᴦQ5��_yp�M�3R��+����f'��v �z.�H-��� x<#g��Dw��\�%�Ul�.��uQ;�U�`��X���w�׆b�*�6_�@o ��R�G��%�@�篹�`��?���}��0���VJ���Z��cFm6� F������hG�ܝ����}:�bR�kq! J�J)���A�~��đ�x�^�y)m{���v��_�h�&�������� 5���h�1/���Б�e�P,�}*G���/`j��.�Qٮ鬯G���U�LW�����ɰ���d]���]YrY�����8lGF���*|�ݢ��y_��B����sS��]���#���cv ��"KY!?NÙ����"]�kd | �K���mİom��G�6]�a��cuU!*i C� :/(���[�=�����G7K<aE�Wz�*M�Є� ��2�*{��Jf�ˊ��X��(�+ nG'{x��O!i�jA���Zt��+�8�{�US�ڊ�S`��f�����O��Q,"��$��� �t ��x���gI|�����b'U�]�y��@��坟�2� �:�%hl6����(��SmRzc�Bo4^8��v��.9G��� 7��3��ȵژ���gvZ0��38��IF:Qţ�<��,Ʊh;Ū�!f~#��A^�zl�)���t��[�������-�%�y =Y�6^$O9��4T1�]�t� �ʄ�F��[���bPR�p�� Ft�L�c�p*~ng�^��e�-JdQ��36���{݀@\�.�2K�"��ן��a�s�ޚ��Ѵ>ni���\�E}�f!�'�/p� v3G'gs�!'������|xL�l �C�����c�]�e��~�:�<�76�b#��}R��5䀿� սN���KC���m?"!hK\~£��6��1~�&>���k�31� Jb�H�y�#@cZ*���p�qa�$�A5��D�D`��Z�e(.=� �����uR��QY�2j��+v�Y;P�Hf��\8��+5m����o^�b�XB�c��iG�c�T�� 7(p��/�t4��������్L��"��'0*~eoKE���J5��r�m]ۚ��^6����t���?�÷���8m�����w ��Ƈ�%�UlDvG�!���㪋Q̘yD�A6�}��V�q���E;0�b�{Kj��9Q!�}�0�%ʠE;���'��`���m'܉���A+ٜ�;+~�|�I�MS��v5G�5 ���X����Q�.�?��kj�o_@(,�oa�� d ��o��Be�O��k�b1|:xd�9=�8�l߳��[�1V�Z�(�=m2�K��q�A1?�/t��7*,�o;���i��������b�w�,0X��aI+��J!\���|+�j����ۈ�ۄ�l1c�71b,�0�ٸ�fMC) !ܰ���1�}�����fOpSqQ� x�U��k�[s��ϻ*�#�LԠ[j ��� 1O{8%Pnl�F��u0�傟�&ɖ�ѭ�Z�kk����llK�3� �`�8�zG�gT4��!057#��2��hӥ&�Vˌ���%TFJ��Ǐ�А�� J��4��*�ƶ��ZP�-�� 0�"�m�y����{���gkp�m7+>l�GvU�t�y3RCބ�v��I�c~QS ~.�VÜ˨��Ơ})|��V���[l����c���A����Z6p��HL6�Gަ P[�L��*҈3T� �]�����*'�>;=��ڙo�~��2��>ܯ�3�,$�°3^芫>�G;^�pN������,z�ũ���1�j �CY���(p�J^"�9n0���, ��}��\�*}�a`o�p��sG���h�c�9K�ig�`]p���] �&'��*��1���ݏ�ZW4�?�"�*ZM:]�E��$�6Zw��$CN��T�4Elk�i\I:�@B�r qM���B�����\B���L��sQ�%q~�(i5�61=��V��J�ŝ�8v[�An�G=��k���?��:�������\];X�_�?|��K������ߗ ��M!�L��%D�А�D� ��61gX[J��g���1%��Д�T�1]��I?��-�"�T��g\@��Ԩ�+����ҫ�K �ŷt"�B4����S8(��{����CCPl�ξj������~�[ȭ�<�[��;�S����!�r%�)�d���0DZq=`��v J[���z�hBF����x�hiIj�ڧ���;O`pQ��%p��Sw�5W&���<��c�½��Qj�k+�겙�Ҿ����}��8��Q��EjۋF����Y�7BF��[�?p���(��"Jj>?kMac�q�G�n�-Zֈ�nD�Q��?�O��p!uQdFκF.�0��.=p:U�r����Z�夕�0]y\sb_�Pй�++���>f<�TS����� �G��;�vV�ފ�����\��7�u�,ڽ�|�et��p�7���ºI?� � ��k6��x�B���Gc�s=p�l��-� `��nNc1/"A��s�W�~���k�\iN;�x��*�Z�^� ��$�+��$#�h�"��G;�>k����4�>[⭁t,`�L�n��d^I������Kͧ���M=�Ȝq5I��|{�)4����5o��|��ǽGo�w~z�� ��7��4�v�)�J�Kd.���u�R%�1Q���� $�S#:� �%Q\�N��특TsD�J������H[0O쩣�#��면5|Q���2�h�G�?h��x�g%$��|L���`�-��o�oPS� �GJ�s�l��'�>�4�a|m`~�$�Y�7Qԏ��h���a��ڏ��|��D�-�M�16<�Z�㱟(�N+�N���3�u/o��i�6�� j��O���#�Hęؿ�UY����N�k��H9��@)��F��.������{4bRf�-��iZᬱ�D���.B37e9֔^�z.,uш\CtC�gE�� �g|+P�����q�#�{���͊��`�O�<:g�ڳJBmK�{�u��R�J�Z���{��YZ5.^m� `�u��DМ�|�s��X3��Z��P�S�3�3-�1�JC��3�Z�T*c�kO��&��j^��M:w�c!�j((���{��Z�2������2Q��Ņ�HO ��`�T�iA�tJ�L"haE��=�0�PD�+�(��)�<Z"��K5B��'�E(b9�m�U�#�嚀i�5�ab� yD�5qx!l @�!��_�=����]0!�Њ���� `ui�k8����95�ȭ?��}a�h+�a:h��W�Kk9P-,��aIs���*�E,���C��f��x+�u�pK����7m�4�f��# ���o[�PТ�p�o�0]| ,l7��7�SD@��ǔ�� `�J���}n����E��rS�����D�����S�L6���>k=��(��fw{"�z���?�x��'`��'��*0��픪F�o�Q����)*r3@-!%��n��>����2����w�b��P�pX`�7#��U>����F@0����|�"��x��Кc)���ͼ�d��{�9�1��D�T���^�k�^;)��N�宋 �w�n���v����&���S���P�l��p0)��-�?9K����9"yk�Zi[E���p�D�YE�3P[sg��b;Rpen|b�sc������x��q��/'e�r����Ã1T��)�qf�kI�XQr�"9H�D�'Qx�Y������������=�����i'� �_!��=�ڙ���y .ɘn�K,�{���pi�iWSd�78�\��l�6+;�[�<u�*���B��uSkUk������ִզ�U#X`*�F� � �P�^��!�ALYưOrU��w3Z�Fof��E7���Z�w�n�Jc_�S�{M�n�����\�M�H�� &gH�(���F��c�x��L=M��G���N �)(�ʕ��U��N��M������)�q���=Wb��w6� ��c���5Q���o�1�j���h����Q�(��$)c�EX� ��@b��&r�FGp@,��j/�I�QH�Z�4���z� 4��=��5uBk��y���0�B�?�����X���gt�@�wT��H{�q��=�� ��3Z��g(�p�a���z5�E��I'��3 HU�j� �я�Y���P��=e��o|� Z�g(to����:1�Dͻ�k;4'��<����ROƌ>Pɫ�+�A�lt�K<u8�A =�sg��yn$(ߋ-�X���J��/('Ռ�ک_d�?���q�F���*-Zn�[���s�NB�K��U.������6Z�r�HU:����8��+�[9����,��$�Y��|9�2�uu���$��{�y�n������r \S�*� �<���G��ɋ�`��Ⅵ��5�D�d��@/z\>�ˢ_\)%& ���T�-�ÂU�ko�e+ne���ʫ7��d{R�~�Dv�Ρέm*��:M.�����ӱ�1�ɗL� 儫��A'�uӑv>{6�6&3���y>c���1�p݄)����ʘ�3�/as%�1S�!�)�t&��g�*b�Ϝ����K�e��_?�~�����xWHp˕9U�x�7����[�V�lB_}x�����V��|���*ۥ��7�h����oVϑ��v��r�b�����1՜��y��r���dh���2hN��8����a:IG��p��6%���8���Al�BUf�e��!�}�+L>�\�|Mh�����4D��c��b�kS[J��v8����y5x����ߖ��W5���<�v��o��d<W-�F4˿7^��y��6��(��u�iQ܌��g��Y;�9$��YnM"`G�@�Hɡ�=Fj�J����q�55eck'�D��S�oTi^6�9��EOc?%c�<��|�l�(Q�=II�o�� *,ciz�,�Q\�\دk��G���䜬&������� qJ(�ÊJ�n�r�A���>�R�N0�K�+��3��x|3�%�p쥽�p�阍,0&���� �<��N|�0�n:Q,x�ˏ[��������0]��ӋJnv�� n:�����x"���4�m_���4��gM�$�:7��Xd����kɉMfy���":yz��f2�9��f7]� ����茫 u�a5!�ϴUe5D>���Ip�1"��G�o�Ծ<|�w�l�fd��G\���}�L��0��Զt�y�ҷ�%�ػf��S6�0����k�U;VK߷�b�r�%����'�F�N��''}�nrZ妓;�'���G��5����-���� K.'�n�-�M_x�\u��A��\�݆�pc���[� �o���:�����i�,�ê���[�%M��G(�\4���W�EZ ���� 7�o��}{��=N�>ov�o?c~������7Z��̇��~�1��$u�c��[g��.��x��@�Ҋ���[MKj�`� ��r^F϶��Ĥ)O��nѓ1J�Ϝ�Tl��[��HW�٢�|ar��3�Vr�7����_��q�œ���dɒi?��R8�x>��9Nbqݭy�?�!Fi���(�R�ۼ��$���\���s�f�g��n6�)k�j����%��%��pO��Vq(�D��~��'�/��8�lB]�Qd��Ϥĭ��C�E���/��z���k�s��(G�+�*%>o���~Oo5jr�Y��B�QN���5��v��vkv��E����ϝ�6��r���:jL����o�B�79ՍK&��A-n��~�1c���U�d-����M=�9�[NQ�b��%����S��Ɠ�����C/P�u� ]:안�,p�ޢ�Y>(6����>E����Θ�MCǧ��)��dS:Ȅoa�th�q}���2(�DG��4,���du�W8y��3bh�7z0�qx��7�J��쎔d���ws~�\�;K�d������<J ���K[{!'~J�q�3ǭ�H�!�ζUޤ��6<�#v6�W�t�ĸ��Ĝv�M��Qu%���㣺��Sܕ���@*$%��;.Z�������H���R�lV5��-�͗��y7����li���/�|�VKK�cВ�l a�HY��AB3�0�,j��j�E$��.*�}8�5(��a��_�Wpy�����u\b$�QV��%9�0+�����W�y�_��w� C� ^�_�TI~k������ab4Sg��㛊»���-�5>�� ����]UaK��a0��@��N�p�1��\�3��!FI:�]����-����9t�ַK�Ə�=��LMFe�6���)�9 �yL8��}�L��I�:/8��cWfY&XX�M\yoy:]��2��v��hU��(�!R!��`M�Ox�&���H����-�'B�6� �@w����_�> 9f4�n�����]Y��%�ȂCW���+5��5�C;=I�)��ő�}U�;�(�lK�ܿ����{�ɟ�Y ���A*ӿ�M�KIo�����2s�)i�B����;�����t���{�#=��p���y� ~���[t�����N#�JQ 9C��a���;wF��Y}`oL�w��gö=f�k���~6�x�5Rh�E� �����QRP��;����]n/Mm��h���5����|Z�4L�Z� �x��]8�iO5��3����rHob�-&��P�� N̻r���+���ݶ;n�'/�o.P�wt{�*��~b��N4j���o�Fe>XU*5�15��xJ�ք6�aK�\g�s�Uh�Wgc�;�v���:���Q�^%����M{��b&`��d����C��8q�x�įL"EO���z`e`�t��CH���B���6���I bg�5����n*��Wu�6���ucb�[*��U>�D�ɰ��M��6>d�s�Ô����.,�H��Oկ�Re��&q�=�8DUډT�p"�7��0����u��� �j����R� y7#�����K������S&�đ��#�ag"����p ��W���n��9��lN�7y����8�*C+q)�u�9�pI�4V[7��])E�Jc��\_7��|�m�K�`,��<%�{���T%�noڃ�ڸn&&��"��02�O��aH?6��B CCa��z_6�Ib��Wq٫�m\�9��} �̨��t��<�O�7=���"cC~ !�9�j������7t.��R��o)�,`xT � ט�6����P~1�NhBU2ew�P8�>S��6��1t݈9����39GE^��P�K%�`�ĕ3�g�#��ljN=��W�V�����5F��ij�,��&��|�rK y�Pq�X�it��1b��V�7KAƉ?(ʳy��k<Nw�M�p\�þ�W�@b��Y-A��8N��#hO�Y�Oq$��lP�Ɉ^�e.&��&f��&`�+=���s�Os/l% .oNxo�$q7zG���.'���#2��d�@�^�! )�q�Z�XSy\�U����r�ʗ���cC���L���@gj���k6x��87�g���L�A�_���)� p6����_ �HŢ/�9xvs_�"*�y�����a��W�Qt;:�e���=�!� <��ӣ�8�9�م?�C*��� ��4G��G�%�>� ��X�2��x�X6��1f"��i�N���=ĺ=a�'R4D�wb�;".�ufZ�� 6�>�6��䮇<�z�t���J5Iޢ6�Q��:����,�:UL�t�3xOt�?����S��EJq�] i r��ǑnSD���0T�.����2�`�0[,o�Kh��P�}ɞa�&�>C�U�J��+J�E��e�ʃߜ�މ�M�l!�������ñ���y5���Yt-̊u�i =)�bm(�dmx�H�Z:�h�\>���9��!��vw�B�7�X�F���..���b�=�Nn���w��,���(s2��@ Q.�I $�3��[ �ؖc�0���u��O��_U��-�<�{����~TW���]3f��lՉ�~��ۧ��Z06^�ۨt�K؍5#� i}x40�-�10�W2��[� )�bZtOT<����/8rkx S����rC��dD(��Ӥ�(�p��/�o�X?��z����L�ݙ 4G�p��zʠ�RS�r�e,d@9[���O%�K�}W�bX��j@&L=d�t�/~S�C8�?�6$��_����>!�s܋��G�,��\<T5�]��� E��H3�Jn���BIƷ�`3�X��d]�MDgo��1� �)��J�x<o/���G��_��Ep���@�'��2�a�� �'�� r���2o"�0seo6D�8�,e��܈SeOn!�x��,b$��h����n]��i���CX�kB��y�-���a<�"���FQ�r�Aj�d�e�y�( !���Ʌ�וN�L1 ˈç���B*�gF���"�a�T?��;!vc4�֓{��t�ؚ�C�SF:ysA��"[�t��X ���K*q�,��Z��̝�R�bL���JL��T�"j�^�[�f���.(Zǫ��x�h�@���V��A �H<_��f���ЀI��:��mA+�����GK�4�W7|�Av�`���1���p"v��Ț��{yL4m�x;�ӣ�Ū��t���0S1&�d�G�s��m��U_� Zzf��f���<ÿLxQ�J)��1�aEw���.��Zą��qo�{���C�m�Kt}�S��#d>�+�����/"t<�~��zZm��ϰZ5�=�QҤ4vf �*��>=���`+x��-�ҍ(��0�r�&2,;"�e�A�'`�|Qؾ�F�_�Z�����!��;5Jo+��>jTTn+v�W5�$�ș0)�Q���;�����I�i�C�͞VZ�v4������3" #6�'�D7��h�@�6�#ix���x�<��)B{7����G&���Ƚ�|}i�ˑ���D�m��D�q�����'E9���M%f���a�i_�p���.���F9ub��R��9��J��¤Y!��i��O��4�,�q@�mL���%}"����匐S0}�$]32�df�Ɵ��%��V���=q��P71�f��Hv�"P�s�ͼ��LW�t�G�O�H��P�P�J�P T\���N��$� *M����i�y� ����B���� �$�.�y�S�!T �f��R� '����Ԡ`R��ĉ)�s�c(�.�%�X�=����Ka�*��ޤ1F�'F�(��]��5�5n#���AX��]{�� ���)��+�ob�������c�Pʐ{�\ƥ&��p�XfY6d�,)�y=r�znYw��K��eR���c-��i�k��Y�_:VdY�Bc)"#�#�aL˹;�ZNa�d�,ޜ �fk�� hC���,.-B�;�b�q}��Ba6��bs�7�px��7�_~-;9����³�S��1���p^��H��G�PL1�cfl��s���1�j��� � �G`i8���:#rn6�0x�� >�`G�W�n$�^�\�>���}��>�� =X�S�� ���E�kF@��Fy�z��S�RD��V�E,k1s�$�pэ%M��d����L`)��Ǘ��0�W�w���J�n,N�-����8��V0���(����k�@5�|��lӑi �|��Ee@W�[���7%$?H����.J�i�VQ���MD �%$�����S�gx,���_91��9_)���B%�o� ��}�(P���E�,�1��)���f7�~~~~T�'� �N���Ky�����E�����3�;gkGg�6w�l}vvf��r~��^�2�*G�s�?-(�kz`?x)�� ��3��S���?6�_��n���,��o���v�����y��9N��3�}?GC�� vD�v|sp�37{�q�Q��ꭼzm�=��^f"Z/O�'�������?�ߟ�+9�L���� �EC��G5L�GL�L��;ryGq��mnv����IP�=Q��'�U��Qt�gj2�δbGm-l����e�r�YԔ-�w��� �8o��\m�7X�쭜�r�Ny��L>hޠ�w��X�*���{u���㦮���{I��"ڴ��ѓL]$�'l �-�Q"�CD6 �������ނ�$����źEWW��j�"�jS �W��T<���1�Z۵�wG�Q�����ti����\`{g��� �a��f����j�D%��� �0'0 ,9�c�?��h8��p&l�y=�����Y����к�|�}�S*N�(��7n�yY!��)���K{X�|�`37��� �7��� $ k%���!eÜ A�l�p��p�t,7���b�ؾ�_ѷ..�;υ�6�0�<z�����.���lDP�����۸̗���>řw�9��R����h~�ؗ�qfcwv��2c|V��I�hp�L���,��{���1^�}Q�rgf|y k��� �*�T�3��:�!Q��"��۾]�)����{�ejQ��!�@��e�\�t��6T�Q�[Q�t���Q�%dŦ?D"�&&�81��삛�� -�2fՏ��D2KPD�p������$�'�Mˠ�j����նʋ����8���P�Y��t��&;SW*/T��u,A�����w��Za��D�-z� [PQ$x` �3��CR3�}M����0p�2�I��� p��I*=h�KS;2�d�a\�HHs���q� �*�����" �*��O�NoDX��q���y���d�{Ä�����B��pc;�sIg�r�f�$ȭ��L��2-���H"�Ck$�pop{B%[è5��)���V��T�H�r��A�Q/����₱��%�V�j:���_� D���������b53"1wl��D�>�_#HP���ĭB�e���I�8~�58$��m�70�v�vpl����/y����|�d>:�o�J��'�ed7��E��� ��7����,���@"+�w�����)1���9AsG�,��a��b~��$���q�ĉ�Tb{� ��N$����Džs!�|H�P?վ�� T7�IOR%�2���3l�m�)�i��d+U�]��d�U��5�o�b�`��L�!��Z��F$��2�7@��u8����m��J��-\z���o�W5���=U�\<� ����fn6ih!�A�1s���Y����X�'�n0�i���j�^�l��q�q��u��(X�y�E��f�zm�q3���q'=�����@k�n��L Vq�a�=r�y ��<���\y [���n�4�1��qn�P��)+F^o(ۣ����xX�ӣ*]r�ap�Mh�E��Ѧ����}.������Ңh�E��� *aP����d�Y�u�bvn|7]}���2q)1���J;�Ӹo@��L��i:1���jn�m�uy ?~�bV?�\G�2�L��{�|�TcTf�#����x���9���v��BG2�� c\E���J̞�f� n�����bH�=#q}���ϱ<�I��"o����g�I��+#� xO^�a2�X��.5a&}^.�c��[-�]0�!L�`!���V `:y�U!�)���F���1 ��J @p����' ��UMgU6� �f�*3V��Ȫ�+���+���?��?�UD�x�N���k�R~�a��������^IXz�1�3Q���.,�J���w�;o��-Ҟlej�lB �.��İ �H>/<6��EbK��,4k�Z��ƌ첉�;���|H�ќ�� �E��*_&����;��^�ʈg�g�������Vaj�l�o�%B�i��6dE��� 7 mu$�C��n���V�YY+k�D0�z� ̊.9m� 0^K2U�S-c�(�=��� w���]�T��~[���,/̬;�|z�$�#����ȸ6d�ۿ�@�v�F-ܟ&/�����y�&���0ڇFv�OC)�8P���h�����9���l&��a�tko�L�R���2�L�`e�F���ˤT�ZӃ��Q���eB.d�¨ʆBTq���G3�ɰ�9�@���Y�ưqpE�1H� ��!cY��휑�X�Շ��o��W%2~3.+����ח�9b-&G���Ө5l���:��^�r��h@�{��W�,l���c��)]��!ĶA���m>����F����j(�=�W��7���8�HM�`~��&G���y.����J38�i�wX�o�ً�$�g ����0����PFΰ�Oa������2Hs��mpN.�hnX�hNg=�+U��f/{���]Օ�Y\V�?�ys���.#0�(�pQ2J�����d�����PR3[W��^�4Ld���#�@B��v����G։bT�n"�`�d�Gp�P�' �H��2 4�$U�Ν�d�"���F�H���T]Oҋ���&8���6����D�,\o�z���lA�~r�l�A� ��Ooh�)��j�ؤ��H8��]Q��b��gz ]<��%��](J�d�8QS/B�[[V t���.$��ڙ��Q�"Vh&粀i� ��%�<��)(��|C�!�U�z!nr ���G�T��X*D��L�?��8�w&�oF�m9���:����5[ �W4rg�'�.�c�,��B������������dב�-/�N�bG�j��=�Sg���iq��゚cs�&�j �N ��a�0:^}>�?b�_1��O}m�Cs�^^^���@?S>/P $��g�'�lխ(`g�5���vMk����l�z]��H�̐�p&��U�/�wy�����G ��$��`�З��;O3�&��M���@�vT��<�[*��GfV1��o����V�|���P^�����<"�m�V���G��Ӽ߀�f�8�7m�?_�R��|��3�E�x��-^� C���A����Em��q�/N��i̍��q(.���9�5k��%��?n�Kx��0r�3�-��l�=1(j�P�'0q��Y�ٶY;<���Xt��N�;J��/A�:3��D�Ƶ\傧��5z�p�xO�d��ճ����;@�ڎ��� ��9���O���U$0 f��t�hM?��:���K!�e����1�[� F�N���{T�L��lԒ��T�,��@(��d��s7��`[Un�h���K]"�*rZ�Og�b��%t�0V(� �e]�u��Q�T�� ���y7;��u��!OԐ�dZ�T9�щ�� t� qNkF�R�F0�)̇�NGy!�F��S��������M,3�'9,�'Z0x���OI�����?&�B�%�3�[7��7�-"��T0���Kk�`�jjh1�,��]h�"�T-��BOV��R�`ޥK>�%�v� !��S���,Ot�������!��)���̋/8�4�-y�t��Wm$�(�h�-e������*�|R��R�\���7,o;���m��=1�i<�afysl/�ʄ��_kb�B�������ff7X�THYZ �خǣ�~F��67��x�>0���Cܟ���׃DL�H@��S�.�kN�*'��jHZl�%Iw�:ĵ�7�%�(���6sL������</i̞`R��`U�pC��x�C˒6�mCʼn��s���S"��x�n�n���.ѳ�_���Q�!C�H�ݍ�����2�KRΜR��<��H���c����7�>�%���O�#�M�XN�cJ-rQH�tP���Pd�R��V/�h@Aj'T�q���Iz��Q�pV��Y���l��B��9b8�I�v�O�*�.M�_�F�,��÷�*݂�SD�A�h�OGUӅ��q��zZ�Q������F�� ����i��m��A��ҫ�Dk !�s@5� #}�-'�U���A���fǐ+����è*fצ�4��ϼ���xh�vq���`Ҹ�B��`Dɻ4��>b���3��px����}8>�#c�1IB�U�<�^�X!�R$Y2��&9��3"Y$ z?��>�+Q`��k��SmNf�%�A*�=9Ϩ8�ۣ���U#��kM.>���|x�D��qu�����o� /d]B̅<H�4�&/�c�h${}�!�T�K'�A� ��K��VP�5,��A�q��Ceot�nT�}��В�Ͳ2W,�%��p�v��ذ���k�"'�WZ��� M��>�Z�|@��>�ղ���x��-��Y����8 �@�MŢB���<s2հN\.s�ϱ &���}`3�e�>QȲ�(�|��p�|kma�@qIfe+(kd��P���_�,�->(S�B�"|���! ��XS}C��(���_K���_+����Vq�r�_��C�C��G���`�4� ��!nW�[����/��a +p[�7�E����;�: x~�g����N���f���N��u@'�)���F��m4��h��]{��G��S���f$~q0uf.�i�#�B�������+K����2��V���i�6v������k���&�C�h��d����a��ʴ�E� u$��|by}b���5��fsgM{��fc�u�Ww�������ّ�4�W{���|I�Y��qg�#c�&Z�OLe�փ��M.����ˏ |Gs7��'��ڶ-�9k�mn�n1��~�y\��^��������]���F���ci��m��2��;����2�s�X]�Ҳ���M>�l�m=�~/?z���.�l�0_[���*l=X]^$L���~��iˏֶ���� :��Ň�t���kk����#Z1-�m-?�v�0���=X�C;�u���r]�d�����H%�V��f#p��u�S2�l�T��e]p|��8���ku��>��xy�;ѐE6a,k0�ժ��B'%�~��Q�+���E��opu"��)�)!��Y����m�����o�\*Rvq*GipWj#v��P����CE�W ~�N=E��W��gb���B��H��q�>��&�㮞�KI�sZ���y�DtE��� `�^ek�{� ���JGsa� S@gU��C^?f��Q��.� ��u�O��6�O%�^uc^;���q�}*N|oo�z��ݯ�R 9��긭��tz^<���&,�*[�s�_��m�k���b���]Ήt~^cGvv��e�go�V�}��m����0_�M H�p4>�ۊ+-�ָ�9j�W�ք��t(҅�AO��6�cu�7v!_Ï`�\!��y����Z�l�d�aڍ8���b7��ٷ��>\�pU^@얌 �8?#5(#���w{�5�z�8�^L.e��ې)b�'�FI<ܧ9��<CP�w�����m�%G�6��Tiو�"0mtB"��6 ���W���X �L�^$�|�49�7�`۾Vׅ�I�� �[���>��+V�֩�Uz�fb�S��SMm拰/�X�Da@:c�7`�*+e�(K�R`��ȗ*Mp(��� ��}�����~1�;. =am�7�c��~����N����y�` RXӤ4' ���n�x���H�"��~D��G=�~�F��������/�/6����R��yh�m�V��?�>�_������3YٓҶ�}�g+�k����s�Xo��ovא���o ���&�=�ʽR8vK��il��HwP��8k��Ϝ\�4��"�@��9��#��e<�Q(CF�R��}i���d�6y%O^q����ж�j��.�sH�YzT��^��2� ����bC|�.�dw�=�ū.��f`�*.���Z$L�l��R�e�W@lV�`��Rx�r�5�,��,�j`u�M�U� �ț ��+TM/©��TS�P��E ��"�jjD�z��H)�~��`1�h�́�J�4/ AU�(Ιȝ7W����yM�2XʹE�6Y�fE��`�����ǭ��[i�'LD������lɇ�D�3U l���V�o1Q��<U�f��%�5t!��VƁOM�m�}n�2��8�`��JQ����]%��)� ����M��M�LH<���ː�P��e0�Sȣ^r� oq"�隂 Z��n��M���L_I ��W㶛aO`bW7��q���\�="� HI�G~s���?�����P��Q �Zr3��z��氛�$Upj�]7[S��b=/�J�>�;o7��6 �2����!���[M hqh����r�ܵ��h�D惁)+�%C�J���$ ���^&R�*|>��^.����r�D��C����`���e*�v[V!������oPKOƔ��U�PKTTLdist/summernote-bs4.css��r�6�Wt�t�\CU۲�I�N�i��y��^o"A�I0|Xv4���+�zٗz:����b�����q���+�) �QVDOc���c�F,,�,y0��Q���" �u�E�ok].�yS���������{��<<?�������d�{���y���h�=�{�Hx��$�����w`�B�����|/dyZ�tC�e�}t��uW���_�)�%���?u,�+/Ȓ��8b�LC�.�>� �I�5���qrݩ�@�a��9O�|�,�t�ޣd��<�gc��qo�����+R�"����)�=@�S�\��y������䊧y����x��I�p�(�H|vDv���,e7L�wkYH$�{�S-��pL�y���"���u<�~�dQ����<��\��F2M��q�� ��e� ��;O+&P����`����3o�we��г<vY�mD�9bg���ɢ�� _(2n{.<�c�H߮E��r��B'呸�a�)��b�� �S��9(�k��~ay��<�q�s�Z'q�Y���4�� ��v� B˴$p�"���S��ā�h�#l��L��]�x^�<˖y��6���`)s�[�}*@/-��< <�����@VL37 ��jlC\$<m���)xܦܤ�����2 jhc�@k��Â�l;Q�K٤W���v��Ł!E����V�Us�G��Q�� >��S�A�x�JS�c0�)��o�w }ڄV[M�F�t��s��紮��}N�"X���gQ֦����� X� ��@������>������ߣpM�H���I�n��ϤpT��ڇR0���7M�Ja�&7|,����ĬS`���S@�O�`TkMMᨢ�M�~>��Q�4}:��j����*fd�| G5�i� ��'� ( �L#PH��k1��i��j'� fLAa�v���*'¶+�*g[B P=%1 ��j�Q(<�����R�m�0��nֈi(4U`3ơpTw�1��ih�!�����R�5b$ Fu�3Qx��$�2#�a���r���2�Ny���N�oz�H>C�]C�i&�"���=��~�7�����������>�L���A�{��}"��{~��)+�5.��g��*8�� )|�JH$g�5�(��C��e٠��ńM�t�D� |�������l�0klSv����ʇ��E�ic��W������D��$���<~��6�L�b �Y�u~(X�`$��X:�����z_,r�F#��E���Tz�q�]"��=v���1����U���,�N�侘����"A'Kwm�4[+TQ�r<����j`�,$��b�"�The�N8{K���L�@�~�ۅ�Y�S�:<�ڣ#��?�k�4@�����.xi햁���~5!�P�;y.�q�4H*u}��P<|)b抇��E�?̠��@�'��*^'J���Z�6&Jm{U�|���0ϱ2���������6UNU%ݩ��g�i5�h�����F�OS.-7 �m[�~�P��<�-$�,X�<�=�-���U�� JD�C5z�j�T!�a��)W7ei�6-T�r���<)�jbY���5Qu�@��I�J%B��(�~�xpv2��[=8���,�.�` K��n�c%��J%x{ʾ���}gl�;���+�/���o�g;6D�x��F�}���JI�6�h$����9�Æ��JV�.;����� b_TH���Y��n`f����s�N�!u�-�c����^����N������F����������C�c|�ßVwm,��dI o�t�Q�,'k�VAIt�u�kݶx�{�Y r�" �_W���$ܻ����VժQZ���Ƈ5�!Tm�Xc���0�Av"��έ�Xσ�H���?1r(-����a�z��|)}�=Sӥ�-u����-�r;Sʙ��3���R*�NL�G�]�栜�2����m�5���A�Z�������״K���E���p� �Q�6#KID��uW�[2��صS��*�f��,Q@ .�2:�BB�kd� ��L�̢�8�� ɂl���~ �X1�ߘ]7�cxi���@��B��&��E��U�K~ ��)�V�B��t`���H�a��;�c�I;H;<P5���`V��%uj�J�d���H˄Tr���G�#�X�(&gpS�@�v�ӽ�j��*�K��ӇBϝ��Br�"�.���ֱ�Z�uխ>���,�G:�ೲn�������г�9s��j��$E�բ�U3���JT'���c�e�������6�g0�����ǿ�Y�^<��������3��9~{1{������?<�����?����/^��>��ſ}��x���?����mϻ�x>{��Dz�{9��]�kě��x��ŏ%��e���k���7��/�Q�~��+by�/_x��?x���X���wO�\�g���2z����L���/?��+�sq>}�x[���<��A'��N�}ព�e�Z;_PWR��l8T}�jM� M�N��~��?����o��ܥ�,_�p��]�~9M� w�۳r�`S�S~�ՌO�.n�;"�`� �K͒�сR^�`f��Ô�计�F�����%1J&ނ��P�0�d�%oA��P�0�dO%'�!.�x��`��<Q��cؚ\�f�n�f��:���.��:^�غ�IF�>B�kkD�J^ >�ZS���1CQسIUS8�k��m��B�����,��� �h�(����2�+!Sy9y����:�V��cQ�ļK�G��pRQ"��c����en,�x~���m"UǕ\�:�:�ǏF �kyR� ��;4|�ħ�Ƿ���'�w.1(��Gw��R'ʭ�Ή;g��Dm�Y���Z�N��;f��.�������*X�~�W�Q�*�p(�PW���x�o� 4r�?*]yo�i��V �*/[�%0֍!:�Z��J�k�R��X7��Q!cH���)��X�R����S�Q|���:���y���<�7Ӱ�w��,�!6��v�v�C��$Е��@��@�+�-��zu��/� ��rw��MBZ�5����r�؉���i�iت�Mr�O�B|�K���a0�m�3U�N��5���'c�mec�%j[�vN��2h�P2��-"1Ck_���=N9���+��-��Z�W� ��,�kt���>d鸐�V�(˝���L�~����B��DZ�:�b�o�ױ���ea|�5�K��������^�]�p�By^�u���?���Ĵd>��SF1*}��k�zMw����ļ�S�"�j���i��q�������Z"EW����N���N��JT^���q�Lgf|\o�WF \u�JF�X�j�N��<�BxGZ5����m��e���~�9��� {&m����&�:Lz����-6aM�ꊶ�k�oT�N����wS˫�;\b�\�ݤ�����'�����6.��xȆAKyE��LB�έ$'�]�|*�v-[�>����jM*�<dIW!�Z�l����M\�i��~�७�|�AJi��Y�턧M]����j��\gR�y�]��>��������M���������m����&����� �[5��C��[5j�U0���Xu��!`ZD x�Q��u�nOLX���/�$~g���@����} �hۈ��C��� K�7�݅o��P^���LT1�vL��J��-~������e�G���1��@��m�Q �Uc�h���=��ک�&���PK�~�FEPKTTLdist/summernote-lite.css�= s�6�Eϙ�KZSՇ-�Ҵ�N����&ͽ^_�EBk�TI����.� �$HQ��w�����b��/,���4)��������Q�]�E���8�ˎ����,I����[]� ݔg�l��O��_ �A_���)�'������\������d|~G�����|�'�XFwG�zK��xz$��"�ҍH���8zv�@�m�\v �D���؊� dE���������2�4�~�-,I��Ͼ<�9zwa�ob�~%q�o������[��ox���=�=�>@�YT̽[���`�Q�u��(���I�q��"���B��_DiR��HB@�C�E�`��Or� *��Q�� �Jf�(c1�7¿V�:��]���̿�a���7��H��Zd�g���J���߶y-��c�l�n�V����*e�)�,���(b��m���:O#6�v�4U{��ϽU�G�"�CGs�g�5I���[d�p�Bqʅ/Ns�jOCw3H��-EA{j��b/��ƅUd�3.�Ds [f�څ'*@���kG�ڿr��E�������d�;����(w�v6�bǰM�̵�߷4lG]-`���:�/�<F}Y�8�m9`s0k�?����oA.��"��E����K��"�h�b�1�.�ۍ���<n�o����u���ܢ�F��}��Ki��(z\����!E����v�U�G���Gup�#8���}�;�-+́O�ܧp�S�m�9�M[���v��cΚ�4���yL�"��A���-�#lƁ���@��㠂�Z>��-���p���>��s g>�r�,���LƇr0.��7m��a�$�|,悌�̬s`.��s@.O�`\jm�Ḡ2���|Z>��qɴ}:��bY�������Kf��3��Op@.�<F�\4+1��i��K'� vL�a�tVc˅a��są�)�p9e1 ��Q8<��j��a���b�E7��4���p8.����Cs �ch1�1��jL�a��Z1�늙8<`Cّ˸�`i�z��8�fO�Ayv_�w^}�C�B��-sy�vw9[?nvk?���٠7� ���p���1�!�p��cI�)A�,����� <NBϢ�H�0���P蜃��6��u�Ks,��J1_�����ʕ���RJfE�� 1U��Q�{"F�C�E��6�M�G���R!7b�L�(.z*�96�$@�����v0h?�lB$�1R?s��el�}��á ز��u�n�����c[���۰���!͍E���a�GR {�{�tS�j�{�}�QBt�ۍ��!�͏�l�_�v@�x��2�� ���ݢ��`� �D�]��T�[v�}Ύ��iHf{�w��NX��}̬���{\�eڰ�lg j�C�H�2'�vq6��Ҙ�f>�|��uS�c�?�>g<���J,���vAV=�e�m�o2�6��n�s��U�i��R��r�.C�*�k{D�bY8�����[�z��E��(�\:nGk��k E� V $��~m����lѬb���yZ��b�?�l��a����O�������J�/��W�YF"sQ��^���K�U-7��� +����W9clb�:�6�/%r��mJUM���;ۂR\Xm��b)��Z�&�<��⊥&�^��]8n���N@����*S�����'�s�zU�c������;soŘ ����J�_NN��;��2�\��,�6V�6��6�+��-���ҟ�'v J�3�m��OU�t;�q����)��AU��ʘ� �Hv:�V��QX�f��/U��KeWw�:҃�a^�c�l��/x�%\b/�Qq�keȱ � �%� �-��I fg�@�2�V7���hf�t� I�yl���+R�J�~,�KP�w�~1����7G���Oέ3X)� K*�̵�A�?�j4غ3�[�ps��W��`�dH�U�[���/�-�w%cN���w�6�k1��S1�����Y��IHXc�@�t+}�mg�1�4B���C�ov����O0yfo��h����q��њ�li�<��H�����_�0;�+! �Zsͬ�B(�d{@�>�����cW#!�d$ze���e���u�q����@��@yއ���s#9�����v�����;m)w6��ȕ��sn�솸L^y�y %�B��:�$��NJ�䜉�虉��J�(�0���Z b�� �S����rAM�����Gv��h<��R�@ix���w\x��O�'��A������Pg �螯}�x<�ӽ�J��|���*A��B��t4 j��4�����,������Qv"M`�̳����tx�7 �Z�}f����IE ���yO���z�-����s�69.�`�ҋti��kF�S�j�H>���5U��d��e+&j�Ǐ5L��` ���R��b�s���:,��T�\���Ԁ��VX �Ӈc�C�E�S�TUV�gC#�'UZ�c&F2,�`.}�_J�t�2W�o�Af<�cR�5{f�e�t$��!i�f3=��Ӄ��@��Nʜ��(��0��I�����0;�ϋȥ��qN�ƪ���w�8�9Nr��[_��bGC�٤����(�in�V�JAZl�o����&*���K��J��Q ��]��/�r�@^Y���G(�.��&��@D%|} �>B�AA$-��~d�����S�mZ=��"h2':��!� J�%�� ;�sVεMgE^I~Uf���W��Qi掠X9~אַ�o��:�m�ǷN�h���\V�oڞ9�G嶩0�~��T���S�\�T�����<6�>P�[ v=p��[&,X�ׄ�2i�M����*�њT��>�S#����W�+�m�+�(�~\��S��I�i���>HX�����BC��S@���j,�u���`�-C��S#���7�<��tV��aB���Y�\[E?m=�>$�h4�<�m��̎1�f3Y�$��H�%�\�44rF��#�YA�����4�����3�p�:wLkk�z7whӬ![�c(�Y�gm�mx��}) �#���ì�%;v{��ts��6�)+w�ꐪE�&�f�=is�);8�F�'jb���.9Vsk�n�4��Y�(k�E��6i3o��� ?�[u_3�CT�a�0n-R��:nf�� 3��Z�hi��nR8�,7Z@Hn���ij'yiLr��j�M��V��;�d[��ɩ°nLL|��L]F�,�.I��4K���a `���9��z�K�E%� ��p�[�`Y�O�bz�&����U� ל��ڈ���Yr.��̿� �B6'�5��l�� �p_'�����T�Bm>Qc�a5���z��u`On�u����"�7�G��w �b�H!��x�0�z�ʄa`+d8X�W~%�$wё����Y��,��鸞�S �D�~�F�ڐ��P��:���F;�ށyS�:��et�v���t�Lѩ$QVo��g��|ր>���D���0��V�T:�jF�0|0#Cg�Kj�h�d�*w&MKs��$ �kI'X���$~�nA=��-��]{���s<��_��"��/��~���_w5 "N����PG�1n(I+��?�ھI��N?H��i��R����B�Q-�I�3�x���h4"+��E���5Q��X� w�J zy�G�]�p���V�Xn��� �� ���3D��B�9��7iV���}� �b^�j�ekp �Z�7w�4y^��6��QCf��R�fY:T�ׄN�3BT� ��N�a?��e�:�2m��5�7��n�4��Xo�{}]���N�{}(��G��۾0ۿ�.���2\\C�B�#�L��&QiAQ��M�ަO� �}51�`:��'J�i�d8�U"X�j_=\P2���r�g x��̟�c�X�߲��O���~rr�+�:n:|i 3��)�z�zzX� }�w{�+Kp���~t���al�$Ѣ�Cc�[H?���~#�/.���̀<dֺ�|�)�� ˩yȔN�2(�.������D��5��$ H�I���� C���E��� ���`��t2cz��E�j<Sݥ���fK��29S�ȇNg���\R�[NL�G7*|jʙ �}��k���?�k��qc`�[uM�z���"���[â�b�@�:iv���hJ]4���`R�:e�NUT����m�6y�w���tWHS�(�3��N�.��i�R�F3M=^�᭞>�̒�NR}��'��j{�j�7��/�ʃg�İ�5�-�5��6ȝ)o�G�L�FP��ó�_��;a TbC���I�c��09��C��/�;,���.��C�ιM(�ǔ��Z���w^�ܪo���)T �64{�da7|)j��'�{�Y�t���!q��05.X~�쯡_�3��Mrݹ��G�����շW���?�.��ߞ�Ŀ�^\����o��ˋ��_�������o'����D\��/~� �.��Ƿ���o~X��o�q�M�v^^�������w����-�C����7/���{x����?��Z����D,���7������~���^������?�\�����̶�^���78��2������}��T�kW�g)ן!.�FXZTk�U�����prs��������=���~�������CX�-Yo5t�Jg�!�6|��|�6|��|'m�t��N�����M�����d�-Tb��5@ ��L���{e8�\]���ܠ����D�r�%)���.Ε7B[���lM���T�i8��?a�Y�X�����J���h {�q���Ag� �w�(������K|�6�R��E��G(>9�˓����>�(L�A�̾s���S ��`�����(CD���t�(�6��>G"+�呶L�e�������r������Z��+gdz�xl��b�a�*��"�n�)`��~g���Ȭ��J��1�uLxb ���^������n�\�H>��2y�}iB�U��� ڪ��r��B�P,WH࣪���o��<��Fv�l'W�5��+gx�2��>����S>=z� ���(W$���L�!%� �i��ҽ�,ѕ~�3���1I���(oUH�Ql/�@�>t� �ɯ������"��; *�`��Oޗ+�����à�Y��_˯���.���~����@G��v!M�"���9��o'.�*�o{�c7����������:��w�}Ʋ�2٬_O�ݢ�*&0]�c/-��C��uP+��%�|�K\3ϗ{��%�b��CJ�TH�끠�s%b��|�[���$�O'u�)���k^��88�=���"��0<�oQe�S=&�A��#Z��e�N��%��x�{1�/��ؕ��?P�TRd�)X��$��g�8��h,���N�1.���4��ZoqeH��!����Xܦ#���y\{�-����HcW���qӳE�x��.���Gk�_k{��|�$�}�:�Q��]�j�$5 ���G[_��Pʷ�2ܰ_M� MͦU�A|��|�O��Z{"zۣͪJlYw�� Y���s� �(g�%>D4rA�#�D>p���;���UcJ͏~����C7�$���\���3O~oAe팑�~����;bY���:1բ,�zIS�_�ȐdY���i�������0;55v ��Դ�NA���|�Gn�>@���%�?oS����`0��U��ͧ�OԌƔMY�`��㤙$����P���9��s;�^���9�P�#�O!�v媒�A�)�'�T��>���EG4����C���NFg�����y��`� �$�PKR^s�#kPKTTLdist/summernote.css��r�6�Wt�t�\CU۲�I��M�4i�쵽�D�b�`���h��$V�r�x2����b����w(����W��BD�㣬X,x˜M�@��F|�t���ɒ��<7���it���5�]#�r��+�������OG'g�<`g�'���q����G&[0�<7G:!��?�)x2�q~��[8X�0܁� 5·c���i�K���ݏX���� �����?�SK��>:�8FW�Ȓ�ݎE��{�H�Wj��$����t�=�{(>q@0��'ޒO��=*@��2��x6fq.X$XƃI�or/�LY.d\MU�S���,a���0��5Os����x�A�I�pvUx�ɓ��:���f0��٭e��x>�5O��������E���u<�a�dY����<��\��E2M���E�G��2��Ɲ��� �H�He�WN ��̛�ϻvMe8�,�."���؛��dQJʅ/�w=���1hd��"_F^��N|���va�)��b�s S�p�9(�����x�fN��ϟs�9I�E�@&S8�<�D�b�/"ǴD�y��V��p�v4�Б��p&��-c</S�e˼����Yy�����>���Y��+��SY�\ +�����%��� O[��l �)7e}��u����,�Z��p`�1�N�R6�õ���� �80�hq?[|� �j�>��a��?j�A�p�3(��oYi |��>�8�m�N�O��z�)܈��n��At�Y���՞��i_k�T�,�ڴ9�a�w��BA��q�P��Q����>���{��)8�p�#) �m����_�P F����S),�䆏��T���u L���` HU����j��)UT�) �OˇS0���O�pT->�S�\X>��Q�l}=��Ib H5�����Z�@A�vZ1�ډq�SPX���1��ʉ���9����PTOILB���b O5v=f��Ti1���5b M؎q(��f�C��CZ�@nHuw=&��T}���Q�u�L�*0����eXi0D.�U"3�"�G��_�ܸ�f�����54�f2*r>��a�s3�zSLPY:XX��|�ɔ�W3�t��aNd�|�ߎ��':�r�]��[�,c3^�j�!��t )Â��,�!�p�6�,��������������;?���w���f�m�.��!q�P�� _`��7m�=�B�!� b@����Z���d�VcQ�o<�&��V,b1+�.�$�=�W�� �/#�~/����iШಁE�y5U�j��j��Dй��&t1��|i���H�}J�(t�t׆���B/�s(��x��6�B+v(�I�V���1����z˔A�����n�p8+�k[��Y{t�(�G�����������R���" ��S��r1�I��/xɇ/d�|�p!c��9�3(vzP��U^���D�}����D�m���� 3�+����o�l� m��T]ҝJx.>�N�)�Ġte@�5�~�re�Q�m�� �(���qm!���ee�� ���Yn�4�ڜ�E"���;XW� ��O��)K+G�i��x����<��I�W�2}������:UN V)�O��ǃ��ܘ��A-7d�wkYB>���u���E�߮4Q����*�'��wƅ��M@J��R�b�,��}vcS��8��h��R;]�"IlíA28;�S?l9� �d��C�c����08���B���Z�v3K��p� �3v�;�mQ�gu�Ώ���R�N�p�|e��4���@�G`��H&�r�~��c���KZxxgb�2d9Y�X� J���_��a��j�����\$��5� ��t�V��A5��3>�A��R����.�y �Q���tn��DF*���Ci��X��׳Fw�K�k홚.�h��i.'~�f��A�R�<��u\<�RI�rb��8��6�Ĕ�.^n�h����"j vĶ��]�}=.�}>��M0�ƶYYJ"����7����G��,gA֭�/:� "ȕ�l�#Q|���s�C�-�Ld��\@ǁ�[!V��~cB���=�J�l�퍓�K�f4�U�w�3~U#o,�a7a1� �(8ֹe�X�.�%�H��=��;�c��&�� x�jB:���1�>Um������g+-SVP�՚�3g�;��L ������+��W�U�Z�5�>�x>+�-$!m*2�.�?�Jv�V��)�Շ�:�*����{�Y��D lo�[DU�shX�Μ9Dџo��dE���2E3���ZX'���c�U�ٗ�����:�g0������^/{ϟ���{�����>=~���\�^��T>�^�'��x����ه�~��������8v��o�F/.^�4��7�q�x�./�;�^!�������/� ���^�z��� ���2z��U��������E�~��3byڋ._���?x �?��Y�ˋ�O�\���~��r�����2-.?=�0ʯq��e��۫7ūœ'_>����+����T�c�o��X�+��ZW�������������Wj>��,_~{��m�}��:�T�g*�2������h^�l/vD��ڕv��%7DZ���U��Se�����S��|p8a�z��� ��;>>�0L��� ��;>=�0L=��Ƙy�yH�c���|�"�e}r9�E��x�D;_5)� �w������b����f��!Խ��z�h�'P��w��.v(wΩ� �u�z�-��h�S�"�rh�і tG9�u7V)��4����� �D����YVLAY�&x�&'�&r��]���}������<t�M���ۺ^gX�����2��c-�j�`��qņ��uq�Nb����/��h��Ϭ�J/���֊�`�K%r�;��w�]��b����L;fYVz�?�0u���@\��i�E���:�u߫�~�|�%�s������K&�� ��^F�c����뽽ĸ�7%y3Q��Ev9 #u��0�T�����<͐��;G�oŗE:�谎؇��d}�p�dW�Ө�W�D&�"�2���.���[��.��HV{�c��Y;�#�=xc�{�%�m�Fw9J����3�3�+�O�Uc�;`�������.݆fڅÎ�-�UY�:yоَj�Ǝ-;����|���kAƁ5ZӠgC�=�����Aq[wC�h��oR��������*7���-��,��*Ӆ� )i���lꑙx�T)^6��u�D�U��c�!&���|U`�:[��1��@�.�� ����,�~^*��Tn���U�Ζ̋n4��?ݶo�L�)!N��>�)2���Y��V��)����۬HRtei�i��1+�����;1�Ƭ7��at��_X�t��]E����w8��"��u0<Qo����P�"�X���}=�h�{0i8d��(��09�kÏ�o���5o��UD�f���8�?��� o9=L}T�>�$H��\�����C6z�+:eHg2�M��8�,��S��e�r��W�|Tk���!Kʸ��JT��o�2N�.�[/����ъH{ ��Ȓ�&<c���"}Wd�A��!����.����:P_��Q����p״�i�F ;O���/2�P����)0z״��8�� �#"�����r�'6�nT�V�����@���Q=�hYT��ͩ���o ��6^'�.�i ����ݘ�1���e_-��o��_�(�@�/���#h��R�}Z�͌�?�^�;�Zr�>�ԯo�PK�P�W=MEPK�MLdist/font/summernote.eot�Zyx[Օ���mzڬ�I�$k�%lj�E�d��I ���$��$n�a[Ihh �l 0-Pf]��e:�6L;-0��Ғ-�����e�M��8$��<I����{�=��s~�>}�`�pc��/�Iv�@��Ԋ�*yVS���r�y��[fʎ�l���(>E6���8�Ř�]��Fԍ��0�`��6Sl�Ɛoç�e�{�}\o��l�ؕ���[�|�ٻzK�g���FϽ��cIӧE���_74:0�<j����ԡ-� 楥�٦Q/n��(��k�yu��e�l�U�G��՛���cI�~�M(O'H�ȧ6�No��c�#�8�[FƇ�|�mې��6�v�o�����h���1c1�@/L�OM����NԂǫ��a~�<�ꚵ���3GE;/=��ex��{���Y!�V����t�<ƲC��f�'���%Z%v-Ӭ"�1Ye�!x~��=LB� ڀ������]3�Bx�F�� �ֳ+ߦ�;�p�0x�/���i�J0^���b$�J�,�R�O�0k+?W~��Y��?�+ä�C�|�~�-f����w�ϳ��?g�X��h1T>�����Lar���_˿���~��Y���B�8wQ&��">ȿ݉���T.{ ��"��D��Jܪ� f���wkͰf볜m�~���������/���T�"�ް9mߴ� jbV�^���X� �!_ �_S�JV��\�ܫ:ե��=f��~DskWjO:.v��x�uN8qq��,$��e�C[ �>J�u�c����,Y��M���b�?���ׅ�AM��ys�L�kx�ߺa��_�R��`q"}@�[}:�>=�%%��RRO����l~�V�k�O��v�u�k+�<ω��2����>ȁ'B]I]¯1F�`@q�"�{�3/����2��/&meY�jSN�y��+�}ͶN=��VU�?T�cy���3�ݱ�s��c�?d>xF��<kv���#��Yw`2o.�`=�L�2��B/7�[e�C�mUdY�vl.��<����V�yDa�5��9ϖV+=eV��͛�c��-�e�p�Oib��,��V�Y���I���]������g`(�I��:B��pʝ��n�PWgz.5��rr .; ������KA�U K)�PS�#*,I�R��x����|�<�Q��Yq8����=�&��7�U[̟���|��:8�|���f��v+��(�� �X_u��� TgN�C ���� r� �96�l�Ve�q.��Q��ߐt�y�࣒�y��`� �]TE��t��3�?���<��M��/2�HRB�(d���+��LN�/�ڹ�%W^�d箞�{w�꽛�\�sɽ���b�Kv^�sW��W��ey��Q�K`K X�I= 7��:1���dWg�#�#�)y���ES��?r�}���R�&�ɳ3܆�=P>L��0����u�����5*cʼn.9i?�S9����ژ��3�w��$XJd%�`���|��3mt0���s�wfI1�@ke��˖^����P�`��O���1]��Ր��B%_��\�ѽ�1�@�dmZZ�[�Ecn"�=��pe[�1(���F)B~��|��[P����{�SVHhk��5" �L>�ے�$I�]�(ND�g���;���� ��]��BA����<W(Fr���5㶈��P�j���1c,HC���g/qϑ����A��\��98�@0����hZ����m"-�j�"�e~[t\�x\����,m����Lf�59h���;p,\��g�;��u���Jz�Gʒd��B�,�ޣ! i=vI���'���E)*y�OЁ�����d��y��%-�x5 �o�BVO�I��P�E�^!JGi=����1�T�v�;w���Co�k����td�������'?��'-}� �}�J�vCA��u�!�8����O� ��] �w]��� �o�� �k��& ل;��<w�>�E�� ݾ%l����i�*d�B������3��^13wϿ�ё��?Ґ��/l�|����n+��́rˇ�������z�Wu=c�� ��@p����(�����d��P�Ѩ�x��Z��Ү�V��lW����]r�T���/�W��VJ�[���ݠ�h��veT�E�����ټe�?�[*a�@ �'��c<���a�=���,�$����7+��^!�纔��F�_���/g@�/������H6���_�/Zy�aO�3���e]�^�ʪ J6��M����=���+�,�U��-�eY�r���Q~�,�)c�f�Y�-�?(q�//[&�A(K�*�g+�c ����27��t��Sf� �-5���3����Xq�9�����Vq]~��P��w�~�θ$Uw]�1�lM�k>_gu�Rg���x#t��P~��qx�,�Pd�ntu�9?�,'�g[%G�;���}���w���%kdi�)[V��9�sh�y}w��ɩ�]�_ނ����A�����mf��J���m|��OV��HV�jH�E� �L�Pܙe��FF��� �FPFJ1�<a�n�n���fѩYm����w��n��1��H�����d�f��jP4����ېN��/�֚�ӽ5w��Sl��ݒ�D��'�[�h�����kAWc��y�t�˟""Qq�` ��>P����h�l5y��7H��\�7� �S�,��.��@�� /�J�\�̍m%r,.x,;��2�D1��9�G��Z�(t�~�4�y�ۚ��P>)��ja]�X{h¡��k�W�HD�(Tu'����Uh���Oa�������$1*�+`�sgU�Z��cO%�=VX2d�Sy������'&v���~4� Ɯ��T!��0���囄58�{8����BJ�+�+�s���<�P_�o��7"}3�����W����իig_̷"gD��h_d����%oR�K.�X�t��a_� �BH�=uC���>H�`�]�\�f���l/=�~��g�鶽睇U�V�����7[��ӲB�-C�F�R���M��� @6V�\:�j��!z\W��D�1������eۤX#�����]�c��I�Cvy�jM�pm,���P����|h�J.C��N�xz;7���s:h�#�o�?�7�w/�=`���6�z��8�gD���,��<�I;�C��,j+0����2�W{����1Ҩ5�,�9x������/ �@�U�~�[͒(�]Ui���b�뛢Ѧ�n�j���+Is;���5Ϸ���m��N�m^����G�ae�y4�9��©p8��(�d��X��1"�qy���y�G:��q+��Y�Qd���^�=V�����ŞLwߠ�2B~Y�H�I����>����YC�W��/m��F|�3�o���o�����j�ev�p.�Ἀ�7Y��܂�z�\GL�?��9�I������]�C��γ���f5�֚�)��I��[Zjj$oG��)⭭S�y+���CL?{k�FI�J��9�"GC#@��R���{��q���Tt˱8}���i]Tq��)�W>��Ӏ�j.Q9 ���8p��1+�r[��&�)e�zkmp�T�U�7�y�����W@_�(�y���%�����>�.[p���=�JfDRU�~+!(gJ�-��[|�U~�.���w��'O�ؼ����`�F�-������HU@�q D�<�,�g��[ǃ�9�(˖)���RȖ�!K�8Q*�}�78 ���:��U�i�ۑ�J[©���}�ف?R�5-���|��f�S0z��Z@62i_����~V�(�B��/������h4����C�x4�{�`�����b�<3�� �hK�z{ٮ��G�G1�FB��H0��O=�i+��?.?&�[X;����,\�6\�z��1bև��^N��V�T:l�,Lw��)4x�ʜi�c J~��J�Ǫ�x*ـ����̼��q|��]sV�;�|(�u�H��f�Igr�� `����]����3kUuH���.l���sInAW�dMgo�h֝��ޚ���碧5��BQ)~�c�9�Dn�Ce�)���8�W* �pk�_v�H�~1}J<�8�jG��X����%o8�Y�r�Lv�W�Z�s�o�t �y���|�W(t J���r��_�d�c�ʅ�|q� . �֏�J��!��w�u�m9�浗G"��pi`������+��D9���~w� &��}{����@���m���xy��0�<\ �����������a�A�h�k3�9B�XX؝. _���<�sۭ�w����MVH�̷��U��zpfT������� �<D��`$�I�ϓ(.;���7�4t�R �i�n��k��-<Bቂ�6�9]vxbO�A\�h�������Z�^{_�f��s�nB�ك���Bń=���#h��zk�� �5�=��Vm�>���\F��g�١�Π��fӍ�Ǩ-w��JW�]{E4�\��K�����:�Ђ����q����onӡ6ƴ�+�`���+���g��w��c�.�ob��ܻ�O�U��R{R�u�h�e{��f{�ө͛wM�gĺ�<���k`�v����~(_2�n�0`�0�H���eu�V�Z���?���� ���9>C� ��BS��S���SU�|!J�j�i�hS�Fw��:��:L��Ao��t!n��@�@�AI��� ���4'�.4�����:i��fh�'pi�����S��r���[ ��Oz������0nw�쵰�b�T��&��:�*�8����V��!z��gMl�v|��*+���0�/f~n[qW(�E6�Ӌ1�s�9m��6{�ו�ߓKe ��_���q�����2?�H��oz04�P��ٮT攎���Yl��E�+����6�8eE��z %��ĚB�@nΙ]�z]mΖ�K�}�����e�#���:��.Y�M.'��_�$��8�o�i�o2h�k�B��� [bC����W�ӭU�K�����*ƛ=f�?�F�A�ıO#�4�i��˺��G�j��//\��lw)�x�;�@h~�����\�`I�muUZ����6X�U���Ui g�Ui�HQ�aKY�B���Z.`�T�����6"�<Z�%�`�Ui��(���֧J���ɱ��"��K��K#x۾�z�>m�'����;�W� �$N�q��x�m��������c���'7ٶ��1�iϵt�t����I� p�1��XU��K���g�����>�� .��滄�>��jR�J�3�H�k-�(�중����I��j�K>�S�t b�UKu�Yuk3Fq�&%(I ��JQ#�)CM4�����G-��\j�vꠜs`dx�X�Pql�8Y���G�U��tijzx�eZ%7R�0S1^�������%��LN�om�)���:v| ��w\�a�qE� ��O��L�Ur��EY/ L��C���Z'�7��ʨ���TQ__����l��4N 7�O-r�8:��('������a}���1�!qdxl�4:�qxH-��Z�6�6;�'�'��G��������21<4]�,�(���c�,��o�xYe4��Dqhx`� L�+y���ᚚ��\��49^ڸ�>U����֎٣c�4{������c��m�eSђ�4��^��&�yQ5�*���W�2��8n��=�^���t��t��7�PK��D��z#PK�MLdist/font/summernote.ttf�Zyxŕ�����g�H3�9�sȲ5:F��%�`��mIۊu!il�60B�1ᲁM���Ɂ; ��&f�M�%�r�gI ɗ/ ��oz�W=#[Ɛ�����WGW�z��{��#Ƙ�]�,�+V�����{��Gi��[;�6}���"��� N2���0&�����3 �e�YfP/n���T�k�yu��e�l�U�G��5�K�\�I�(��f���}�Om��.���C�1䷎N�3��[�#?96�}��f�D}7���ݟ��b�b�����9kO�y���W3>7�7?���u�E�1���^|���f��[+��!��ʪ��;B�2�rC����'���%�%Ev-��E�M2˖��Y" ��2 �+i#JN�=�c��p�$�{���x��q�v�[�V'�!���^ F�˳|`�*FR����,U����~�cm�g+/�3+��7pe�Ty�����%�Py��N�9vq��AT~-�*�P9Zy�)L��X�k����/�1��xZ��.�D��S��ou�/�U*n��H>>>�}������-�H�k�5�+�v�k�ٟ)@�i�B� ˄���u���M��M̉���H�����JX�)=�5�=�C]�N�OYc�+�Gm.ە�'��ﳿ�:&;�:Ug����-��!ֺ�QEd�xD��.z�"�d�Xx�ċUd��G��?v�yo6�ս�o۸���z)��,�8�ާ��>�Э�쒒]I)�%�}�K_6�B����'�G;�:�Օw���D�_��BW�ދ0�����&�N�((.R�L/u$zϰ����;�c�vQ��m��]g�[��W-��-��QU�SU>�7���� �7���+9g|>���w4��3F7�4����۟u;&��R6P@��(��,�� s�Ev��6E�����"*�ӊ* �$�[֛s��|휕�\i�ғFq%]�ټA;W���_�;��&g�)r��y@? j5����]t�8��y��/�a�v����*���t7ޟ���J�F7uuf�S�܀i '�B�c�P��1G�}��[��� v5����),y��{J�K=<y�-��p�b�+7$),���( o��9���9x�PeE� N<��裹<|���J��?��C'1L�Wg�d9�����.�}�t�n�l�;����Xx��ev��7�]p����q: �X-�}H5џ4�q]�ˬ�Obv.��_ӯ�1��PQӋY%�w���ʣ ���˻w-�w�W"ٵ����ݻ�W�Zzϒ+�Xr��]W���{�սw��`B��R�R#yRȍ��Ṇ+&��Y��HgJn�q��aҔ��\r�dSS)�&��s3܆��_9Bk�����wͱ������cʼn.��~x�4�Qc��ja����?��`-(��T���: ]�Ό�UĨZV�#ߙ#E�1X����==˗]���t](s(|�'~W���e�A5�%�P�Wp;wt/I�ɕ��H��+���OdlO�����<�\��E����OSq ��hz�B�� m��#Ұ ��k�,=M�$�Պ�@d�r��J� ��y��إ�)��~!�B��s�b�&�_\3��,e�&0I��3Ƃԕ�[�}��9x�B^{d_��-������Ȋ�V'g$���Hu6�"ed�X|B�tB����.k�z�� %sԚ���W���^ݻ�@�`JC%��kʒd�$Y:�׆4d�J�4>i>�,JQ���x�,ʞ�!���斶`W�@$0�m^Y-�%a B��{�(E�u3��ƜS�r �Q��ƃ�q��}jϞ�����8�����0�y&��a*s�M��n��M|q,����#NE���'�@��N$� ��/Ah�~$AA8��B!^M�w�y��h�p�}S�BW18���*f�B���[�EM iY�{�/ٻz�4~t�6�۳_����3ۋ@s������s;�b��^�U[�Xi<�/���9�|)*:7 /��%xa4�.]+�n�)nE���tڮ�V���P��გU��U���/�W��RJ��Vgsu�r�;�1Q�7���Fd�֭��_����T�����1�eģ�|�C��2=��W�״ߜ�����Rj� ��G�_��_V�v�aQ�,Ii��_��8��"gXUwȚ����UA�,��$ ��廫sW��Y�t![�2��=��c���LS���<W�P�_^�\��P�-S>��U��MA��/'d�~e�rŧ��A._f|G�g.�s�-�,�ȳt=�0���Ru]~�QW�6OԻF�P�_���.��}�����z=����u7��!,T�~|+K��0��]E�'�I��VA�S���.ro.~G�ݤG�֜�ue]���jj:���w��6���˛ѿZ9P9$ГX�ͬ��b��(p:�m�d��dU��ƌK��`�$ŝ9Q��'5�]�N�7�2rP�^�� 3v�UpcFv6�N�i㥗�~��H�|�Ġ�T�/�ѹɔ�*{ՠh��Q��[�N[�/�5��=��6W��S,S�ݒ ���O�r��!/���s�]����N��DŮ��%�_�+"J��I���E�_'��s�(4�O���>�H��c�����*�]rQ26���\�0����Kt#=Ȱ��,�j��Q(���L��o��~��I�!`��-���a7H�5�x5��<�D��"AUs`;i�<�Z�V:��˽�ߊP1(?"F�E,yVKwl�Ƣ���K�lu(����]:�������X��Ęs�*#���T��r��'|g�u��>�{�bH u�5ONA����/�F�?bD�ܖ1��֚�Y�f �ꏞ�/��V��포3�� *]r�%\KX���z�"C1Ti�'?[��{�����/|6o1��v���b�_��3 t����*}���E_���-��'B��К�A40��`�b��E��ږKCW�����v�HO�ӱ�u�u>(�&���k��.7v���&���]�I4��u��+���3B��\��U\�B���a��4vn8�)""*���,vЂ���ߤ��o����x~!mZ���q�ψ8-yI(�1�v֏R�X�f`��u-�3d�G;0v�gP��9*p�� %?�%_@��ԫX�N�,eQv9����Ś74E�MQ�j�8�W����r��2�k�� �&8�q��O��܊+0�m3^�͛�7� �S?pفHv8>�צ#B=��}����Н��" ��E�q���CaMo��\��v�iN=�ŋO*�P� �L�e�ZZ�&S�bYs�7�s��Bs�g�{�uM��T+/��si�E���"�����'�;b0���o�!w⌍�Y����v��Խ�/g��:�3%ϼD}���㑼���^�i<�1�쭵%���܄���QJ�+����<�Qz>[����q�`Q��&��� 3PS��|t_g ���D�(�;9 �E���P�mQ�اT��̵��SmOT ��7s��P}�c�L�S���� vw(@|XM6�G�kF������VBPΖ�[?�7�Rk�Z�N���~�O��n�y��'V��>��[���Y�1�����@�dz�9� ��N@!rBQ�/W�)8*�e�-�C���p�\|� o��X�� wPVe�)n{�&m ������uf�Ha״���}&_� N��AM�j.Yo�f|�*n*~�Y%�d��b��khN�B�?D��@�A��� ģ!ͭ�l>{���ߞHP�E["��KVi���c[$h�Cz!���2S.{���ʣB��E�#��|�q�!��I�E����d�8Ew�铙�1��0�Τ��3sn$��@��.����Us!�T��a!e��y`/��ƕ��=w�P0���xU�4��櫡��Mѻ�1�kԩ� 4��_�X�]�\���IOg_Ro�+�^�WU�s����PT��e_pN.�_bEYp�uu8��ԢJB�#��藝R�_̜O��vݭZQ�+��'ca�g��� ��U����C���]�4�$��P���z���y�|�,v�]��/�B����1Q �ܤ��v����-oܴ��H�5��U.��a�!W8z�D�(|���y#�Dӷok��h۳�-p�~ O�V���ѱ�u���9�"6�-|m�4GH������w�`�yn� 8�S���BVx�B���� )��v� �R/Ό����� B�AX��3��m@R�s$���n��7����<��MX}a[�n+�Px�诋�N+<��� n�;h�%���G��G�q[���������߈s�����J k�o������\]�ְ۬�Z� q[=o�e$�����Z8YiM�~���'�|źuWD#Ρ��p�<4T����-l��Ό��f�Mk��6 jc�Vy 0}�����T�.qLޥ�M��g���ڝ>�ڛ:th/��ǒ�(��D?5�S�Nmٲ�X����Q��_���$��C�bH�a��]p;�c��E���u(]�_�z������LgVkt�kO�t���|S��S���SU�x>J��h�hQ�Gw��:��:Lo�!o6�t!n��@�@�NI��� ���'�.4~���Z:i�]Fh�;pi�t��C��r���W ��Oz����W�.W��3���P�M"Au8T�q� ����ȕ���ǚ���"�&�UN�3�a_�ܶ�PƋ,8�bv�s���mvR�) �;���K����t�;R�����H��4=�z��\W*{J�MKu�(6q\�p��U\c ��p�b�r"�M������;��wfW�A�D����R�s��;Z�\�G���|g��)k]�u)��A�\�K参D�����/-�K� s���D�aSlHV�����>XU���t��5�7�O�8�IA@s�����N�����5�Ƕ�E럖�N�mw �~���旋=�]��f��V_����m���P�9 �Q��p6�n�ƉE����n�4!z[j��M�h[��^m#��#5Zb �l��Y�p���4+�1���gl�.�����'f@_��Mh4�ф]P�T���ќ?�Т��;�ŷ ���q��x�m�݆�/�+&�gVLLm*%:rm���q�iϷt�t����Guz��͉L�����#p��_��ե�鑉�D[[{��� %�O~>�_��.���ܤh� 8g����Z2�Q*Y�Fvr�'�n�|�i�F���)���(�f��� JP�Y#锢4e(KM4����^@-��\j�vcptd�x�pi|�4Uˌ�o@�Y��tyzfd�e�jn��q�b�<Û٫S#�6�H&������2<25<Zj�0�m��އ�6����ʓ63?�28:���ͳ�Vqhbt�4<8U�qoo���R���Jã�%qxbC�:<1�2���qj��qb�d�S����%�458]�7�h��S��yd�GGƷHc��F�mc��r�������Ԇ�Ti����<YU&G�g�S%�V>��!tlRC�щm6^V�;=YEg�S���J����i8�g�F��f6OM�7m�N�����F&glǍ�>]���������h�>S�>Ӳ�d�~��l-CwS�$��p����+m�P�0� �=�^���t�{�t�o�PKSԫA��"PK�MLdist/font/summernote.woffe{Sp(<�mm�ݵm۶m۶m۶m۶�k����缝L�d֧d��-���DE唕�x��� �x���;�DE���8�,4�6�EE�e������ ^�s9%:F@�\���t�l��F��|�����&���?��� gK�l���O���1�( ����;��?n���E�6�� ��`�,��6&�l������a���vN���/����ܳ������mz���[N�( �~+~3Ӈ����L�`�7�3o.l����?"J?@�<�<����_���~v�d��P�h�>\I�8c3===C�#c@�B�i��]�}�Q�/8�S�0)P��<"t��bb,��QD갹0%èK�B�gD]��9��`6� ��I����P>Pw>i���7�)��q.pjq����H���!�� �����g��Cż!���U8ӖPS����r�Q�)r�`����UЊ4���i���9�6{-��{����:�AŴ^ט�7�X�����o<|�q�HX�/F�ܷ��n��l\T0z���m(�;>ǚ� V��2��C�Ȇ&B_sXK��>n��2QD���?}}S}L0Q0�z��o40P��`��������/��hk��pP.����)@пV��{�TC�;��{|��UF~s�t%� � �AP�<�#�e�� !E<U��@�#���#�����,�"2QJ��.:�~�or���o_��润w������������i̷���b�Yx5�� "jAQ��j���Ln14�C�It\T�v %� �HF�A>Q�;AU*�X�B�V�!�NQQue�U�f#�,�� �F���+:�}�3�L��E�����F����i|��F8'��Fʘ�j��U������D��jzI~����,�.���.��K5�jV�J|jn�[���p7�'%�Q���)�A#���q��<�?�sy-ߛ����p���<��a�n�[,G�����0)=p �N�a�c������b�2�����`p6:�+%�U���a�q�+#��u�`@�NV7L��H������0[� �G��Jf���q:����a'p; ��>�+�����]��h�)��<��ia 0R@4��Ý���X�,.�s�=>&�k??��4�<���z�P�<&���>�)q�v���{Af�As唌#pb89ܼ�ŷQ�ĉ��|�q�1������,vf ea�A/-/1/���s&�{��M�k�~m�\V=�|�|�e�e�E4�(<+��MG�1�M�M�����p�MM��V\�NJV�-��w�j��V˭湖�M�M8���a�k���ġ��K�<�/^�t�e�v�܄)���暇���-�CK܊$�6Ӟ�Q?��ۤט����K�K@�(p\�˂Bեg�-�{�1Z�<�N�:2�6?W�<T7�>_�@=�XI�>��VG��]�"(��>�'�����|�{��y�T����c_�89C��T���f��jDs -&�),NvԵN����Ax� �% &�e�M�P�(R�D��>eS��L��.�5���B���a�V.��o� fЦrRU��_��;3(��ȧ��~��>�T��B�"MNz�4�i�!�Bf�wAQ}i<�@����Jr�jD��/�]/Q$�$P���|N�@��DƳ�û������R~�����t�]"57G+�����e����ɭ��ɭ��r���u��G_��vA�ߍIu�����[�ﺂ�$�a�~���p��Ϝs��1�M� F��!��T��!kޚ�k�x��̮��)�j��X��� (�C�fr��@fv��>xAx�4q�>���dP�1~�8�Â���9��:�Rʃt)�C�y��s��R�2���>&h ��(����ʿ��^�`�k����<���f�N#�?F1겡ꪵ|��ɷ�l�(|���+��+��ɂN5��L���S����f���L^�ޘ�C��]#�[�-��s�>��<;CxG'�+#�\-�tz"JU}-v�Z<�H�ْ!S.>'���b�Z��2� ����Hg�l��j+ۀ�g�aT3�6�9`!\���5�(�V� q�����(���%����Z�x�`@�k]�SxzZ\⮘xhiY)�:0���`V��2�>3U�2v��/#sO֔O�Fٍ��^���Ͼ��':��v�B�'����3z��T���B8���k�jb��Z�$�+���|�3��zCYI˷��ω�,(s�pD���8���R�$e�=:�H|#�~x����#�d��F�g1Q^Vs�g��x�OZu��2)�9�y8- m���W�L@��Ik�6����AJa�0���>mB�",���IN<�0���-�xי���q�����6)�Q��4}�kg�֣�t�ؤ�kK�x����2�6�����V��ϫ-~�u��L��[6�A�"'��@�;k2U���u�"�"]Q�����7��������c&�\*3�؏�Iᦃ�/�M;]Ƽ#g� ���� �+�a7��k�ﱓ�@/�]'�zHQ=�$��7���TT�f2�O��\_Ŭ��؆���]��瑝�M'v��]�꠳�g\�f������%�zy� �z�V�_et��5$x������l��&����$�:@�/�EM���"��&�9�;]���"���Q�E�h�lr�o��S�F��_���o~�ɡb=��H����R DF�D���|� �����b�@��Y}� �)��4t�~�v���>���"8�A��Vj*#G��g�U ���G�6j��`����c5Q�̰�徉s���$����+�\��lú�F�I��-̖��[$kq.=ݺ��|��d�;*"�]!�=槾�uR�u��^�b`�������_x��_gAn��0t�\�`��D�Џ]Q��=��*�/7dG�Q�|��#4�3yI$�}�?��~I�\R�ϟ��k~�U��罀�\Q�5C&w�2�uzc��j�c�S��Hg��2��V�75����F��x�&��az"H��*9~��j' K�q��= -��he||Br c҂����º�.�Y`��#��K�u��g��t���4t��C���={�K�ϟ3���G?�.*:>�oZ����TL�[��I��}�2�Dt}=(0@�GZ��L�i0��U$�YG͔���`�{EYw���ҫ�r�@���Ψ���ؗ2��n`by!vt"D=D����J ��f�ٖ �]��L�JѢ��]��0��;�O�f��^���QS���ajI�ѿ8:�����Ձ�؛&|0g�ȟ����-��\�%'N��&�n��z�RT�el� ���/���Y@���%Tun�3��\�Itn��z�K^�������Wѭ%���S)�m YV��u���u��Û�Y����z^X<m���g�*���;6�Y�*�ٍ"}@z��+����Uq�%_����r�9�=��A>����^v��,���q�)�����9��e/��d�E��j>n�"�&��p7��YdB����W�:�מ�K�N >]�Rs|p{ىq��v�l��PL�u&嗔?n����6��y�E�[Qt�Vy^�D�$q�{}�,k~�;�.���A�hj��;E�y����c뀯��!�ne�~���NΒ<��UT�� ���-o$� OëF�(!�$��(�V�"9��8lG{lfw�a��.u��bֈ5�#M2�fV�D%���SR��4CX �ċ7C�U�+��G�Y�t���h<�CM�*����6E���%C��j�nx���o�8���s�}mW;���&F��xicˈ��X#.���`��t�a��:�H ��Ȱ}�x �����b��dI䇑@��$5����l�ঙ���d*|�㍎17_�`�o�jz�<��[]4)7�9�����G)��p�FE�����v'�Ϛ[4��&��@�Sb�)�7�p�.�1���sNl�I��eK��y�p����|�䣔�qY�2%���ge�$|IC}�cѶ����"C��6U��<��C��"V|�:K ��q �G��/Y��*#6��Q&�a��B��0��f����;kJDba�����{N��&Ǽ��K��(E��q������_ſtV�`��w!�/���QYm�Á��w�tl���b��G���?\� �ME��s��Y��J��F�$ J�O*tG�4a�0�Y���b���'��vJ]��;���z%%> �Tɉ��Z��=1'��A�����&V[�6M�7��$�N-]����4�9��@)8_"���ʚ]�\�RK\�T�ou���3_w�����ಒ��t�i6n�G�.2ĕP+��6*r�F%�x:�U�䕯�+�+��Vc�5~�k�o�B�$@Z91��E��@z���-ܟ�'�3��&{����u��"����أm~�EBϬ�:s^��$�A_�)�t�D�0���!�QF�DO����O����ʔ-�J�!G�^���LVKH�:�)�`�ɻ� sT�'�<�ڹZ�.���W���<Sҽ��`t�K�����KP��O���0@��\6�?��dw����/1�v�{SB[s�QO��w���:J?���E\��%�gM��+���ȭvT>�^��y+kM=��(��-D��"d^���/�#�[x��Ik!D�䨗�<Uo���@0t�êr�?�����`������W����9� u�TcU`����O�d��#��5$&�^�ѿ�0zp� C����6�� �]X�.t�5W\���$w��*�k���u�e�R��1^��q�R�g<1����Z��f1p���\���G�h7vg�\u{��m0�Y���[m�!4S<��P��s�C��D;�g���eͻ��/U�H8Gt���߱�X8��U�� ��g��c�U*��� �BHt�/��KS�<A�^���7�3�I�>�F�U������Ȳ�@�w�ѧ���I�x��yݗ��8�z�[�7A.m筢>U�Q�p��v.m�4���B�ZE�He֢Ny��M�4��OA�BU� ��f��J�R� :�Use��%:�ؐ�":^e���%M�[N2O�����^�Vѷ�b�=��x��yk!�X����`T&.�<Ԉؤ*x%T��i�K�[Q��� @�2V9N�#�Et�]���<qd�������=�+ʿ�]b��e\;������˩�n��#yS�]����I4#�D�TX��V�a��P/��᮰����DXG,JF6��nW�|���[��p���TR���8�y�+�� *��ދ�R�I=�q/�⇊�xo�A`��J��6Ƅ�^�Ņ��>�qO�o��ϨN���U��Co�!M���T�]���Јz��5�\\�幰_yD R��V��8R�#�2�3�>��E�pKD�P�I�ZfT�BFWCq��f��b/˃��qZB���Ung[�S���p)};��L�xd��o�XX��)U_8��%�V�et�}�I��DKX��}I��1��MԎ;����җ(+/ц���ʙ)�-�もE�4�n�ƭT���}�>�R=AR�L5ڡ-AB��Qd7�t�/� �xA�̳�|����}s.���h=����d#N|���i�+6����?.��I��ELZ ��7"$�NƗPb.�TNM �%���Q1R�&!�$7p$���ĤWڤI�ݽ,Α�2��L(NkPބՊE�HbA���ed蔉�v3��������HH.�x�����1 5�P�-v�p�qw�8ic��q`ʧ��(�'�k}>��L�\����;>� ��ɇ���(x����C��O�Ұ����x��F��V{l�*s����W j��kIͺd���:R\ԇqyƇ�R��3���Bیݚ g�����{N�t�<n��JW��r⯰~�v�N�q�I���4�=㸵� �2�e�Y��z�� �*�Cd7��.Ъգ��v���_���CkI�hD}�ųzܫ�zƁ8����!�����ytaq�,\b�,|ϸ$��+i-?r��k"|s��&��[�,�~Y�G7� ��?� �� Y��.A� �BC�h�����c��$�� ?p�8j��&;B�dΑ�=rGmD��ޚ�*��+AC΅E1�#�@�K�%p[�p�S�k��)zގ�-�I�0�,}O��n���N�\M���"o)�#آc�'F���G� �S>�X����ף�������ll)�<l��-K'�`I�n�V��&sS�|�$瞎9N�̣v?~�2偲��oY7�� ��ϫm0��!�Є�wh6F!�,�0s�`mK.��wҊmd1�m.S�<�������9�fF���2wı��H�WꜢ&oKP��l�k�� O"m0}��&JnZu��ª�[`^C�)c����Z�G��ɛg�8����uW~ �"��~D������JZL@�P��5���x�6���p���'��*;D�l�J��N�Q�zT�ja�m�N��gf�R�T�B̂�� ~���q�P*�-პzQ����cj��.���ܿ��EF��m�4+����9f5��ҳ��B}�3�]76���SݺC�p.�gN�C�0[���~��� 'R�E�|�`��GP-l���8]�g�D�M� ���v�ه#�9��8U�a���ۧi*H_��%0����]'�fS8�$�xP=��ގ.(S��(b 553�l3�N�2����Qnj?�&�,:b.��o��̬�U,)>I�TZ ��>���d�ù`%=hR1<SD��Y������Uf�A\<J�� �Vl�8���g�t��}�������yE ϯ2��m���>V��_Nưm��jҚصD&�J�p\ӐA>�3��v�hsc8�w�S��u���w\cJ�ΰ���1g�-���Ӈ%S������[zS��h��D��_��9�Ⱥ����[��u�ZH�a>*�;O�F� �}A��;��n�$�mR�H�E��]#^�g���?��F�EK-`/6���Ͽ�A%��F�{��@f����� T� 2/ϸn��Og|�#�;B�Sv$l���Q7F~�s]�)�S��k�a���e�(����!j�9A��� �8,;�X�ں3hKFNE���;�{���?07%uHD@�WNW�n�c����n�ǝ�m�sAĽ�~Q�^�X��k�NC��z�nе)��/ ��I��s�w��ߣ6wK��Ӊz"�1zľ�=�C�{��ݭY��Dl ��7�ǐ��a�/qw#a�s\�O���odv����n\_Ez��_��|"�[t�Q�D}5�%Sÿ.}�J"0qz��v�9ބ��;���.,k-�Ʈ�z(&+L�a���ƂFM�S#<�'�+K8ݼ�;�:��،���M�R�M������3I,�s�Z;�:Wf��?��T|if��Vd;��0���o+]Nf;�Fv����:'����Rvԍ�Ӓ�4+��8����t\��TJ��?1#P��\�B�E��4�'��+�6Tp`�N^'��^�7�����K�j���I��u�D1T/����8�VD�4����L���n�ˤ��?�Ez"(}̉^+n*<��o�𮭰�<���F�?Z[^����eɼ���yy `x�)0����������/o�~ ��gb�a�z��Y^�Z��{�sc�z��A�;�<O=�{���`���d֧;l�1��|D*�l69��*_�ZUF6�2���S^�(��� �(�i. �1?;��c��d�ʷ���2��l:��n��d�^�7<�9:�sX9n���N�}R��GG��a�2�1.fZ&��; ph������}<a�Th�.SR�OL�%}��� SPcG�M�rO��`�8���'�O�c�N����E?p�>�L��]��Y���U��AM)�?��Ys���z�軉������S���5#�u�}j\��܆�|p=c����X84������D�RUz�5ؖj3� ~ �?�Q�4�P_�>�'�$�\0�߁�w*�5!�M@H�[�+��r4�X�A��3<и<j��ˬɫ,�za�Qx~ 5�V6; O�y�}e��rB����,�IWǘ�hJg6��I��2��vE�~4�w���㑒�p�l��pU3�gvi�-���ΡK|x��n����\����*x���PDsҭ{�:2x-�t8N���Z��=�\��1Vi�>sR[�*�O-#�#ߦv���Vz�<@'3� ��\vR�+���ܱ���� ꤖ�#��g��ʋ$e����ۑ��I�Q�颜}L�0$6TM�zÞakG7Č�`��b[�;Q������lK9�=����X�w���i0<; �MZWt�r=nMh=k�<?���?�x Q�B�-Q|�)�N�p0��A���P���N(��ZVB� �� ���;����r�v��r]�H��E�|B0�@Ӏ8(M���A���d�����C!����u��zo�Y)�d�]sSc�_G����P���<���īEr�G��?sZ���*8�Pn�F!V�jw�@��7(k�N�]����Ӟ9�g{)��� �<���%�1��ʬ�|s����a���N�5�B���.G���Pt�2��H���.��Ţ9�8�`@hQ${�¶�KJܯ�%(�؞� �#ӈ"i"��o��㤘'�!/�����؏���Z�w��*W�06���� LՏ�ӓS�n��&����{�^�d�@������%��!��87�;�xj��t��M����ӏ�܋��p݄ࢃ�[���+�{�ĞamV/G�*�p�6ォ`6���K��?j}�2x�i�P��H���1Ұ���c���R<���ep���S��X��w\Mt0M���2�.T"��:秸B�jB�X��|�H<���U"I��"��v���rڼ���pK�+2�d��4/um�h)Yl����O~�V�XYj��9�Z�ӎ�k�V��v����Y�^�b�m�з�"/Qe]�aY�� � Y���Y���%�xɈ[����G�[-� ̶D�燤_�!�^r� �g��-����:���3��_��IOV���a���5��+5+��`���n��˶��ګU2μ�\��N�_���)�x���y�ׅ�E��E����� ���;�5�,XW`�3���η�{J�,@���[%�qI밒c~��]�XW�st��h���*�0M�'�ym���E�y@����̣aw����nGA�&����Z�����];°���4]��6��E���$�r��a�3�g���P1<�ˡ���}/���gָ�T �����[� ��{���u|]��II��A�б��'�CT9yB166�Ya�t^Ii�W-e++r��ȭb���HNZyB�/Fӣ�8��E c� ~~�dE�T��>E!y�.L� iqx�Ί��F�W�xXK {:������C8e�c�_Uܶ��dl���O��P�ψ��w= ����L�4��^=��\�B��ڝ�8�!���k>%�.��$_��x<�u� ��T���'�zR0�H`[)z�j�S����1���#a�)|;B�K�JL%�4Ra��kɽU��l)��<Sú7����xz<RRLJ�>x,�|��:��?����G��#s�8�g�v2UHB3Y|�-.A�q�0ī�b��6��0��|鹭�}�Բ�����1 ��Mv�`?�{|��f��^?Ʒ�����Wٞod�@���.It*M�Gۍ,���P�֑��ͳ�XK�5˝��uE�m�:\l�^ߞ:Ƕ�̱��qHW�J�� 8���J@����||K8e��9֯T��e..�ڻ�5��M_t�LQ��D$���\MD�o5��,�hŦBS���/2��l�PEw��m�R�`S�J��#]m($��v��V��vTY�`�{M�S�ʝ)-��$+_n�-�Tp+7& ���W��R��)ن8 ]��&t�`^���:��Ȑ�O,�l#���o�Wy�V��w�vn#�)�:�����}�mO�*�q����cO�4�}E���A�gy��}8�/k�|�0Lg׀y�?��`L_Wd�+.�����1�nU��ʚH!ʖ7=m�:Xz��m�מ˽�v�<f?��[�L�s�7�y*�'��+��0$�1��C���;�#��������HU8�A�2�`�ПH@j�8 �ǃAt�\B�*0��QU^|s�9G�º��t2?��3Ez�z�#����er!m���O��T�k�s,���6�m�=��<��(�Z<�$ʷY��CVIm����ܭi^9���g��K�iZ���g:��G�_Ճ,4�T˓-�X�a݊�z��p�Oq��th�u���4�M�F5���8V�OCyV�� _ԝ��7�frop�Jz��\���&G;A�&��+�8k� [ 8Tq%�/��r��"�g�┼Y��nG"\�}A>� B>�`�W`-��ةoxa�N&�v�3/N�� P{84;ćz�����q�ZW'F�:���V��+�K�zM�\�7��[���³�%�9�qȍ�_��_�NǸ�x��$��3C�H�G$�Ԓ���Ki�p���dHty9��n�}p�٪���NbK��9����"Jn�Y2ǫ;�-fA�N��b��Ƕ����T�~�NA'g&/���C���nvO�*V�8)�ޭ�,{*)�$z�9�����w��WB� 8[tL����#��o�����l�-9�>���!�k-5����g�C)ޑc�����>k��~���Vq[;RQ�s���ں�;CXy�d�B�DГ�)�^S�E�ńf��^�_P��b�.�4ᬌ+��y#���ĩQ�����D��n�J{`�'T�ѡ=�d4=���9�\��逸��ㅪ�s�E�p�����Q�͑;���_�$��E\k�c��9#�W��ǧQM-�%nH]m)��J���t�=����������Z����*S?��*����/XÈ���{�4�C̰����x�}� ���(��7���Q�u��DҘ]sy�ƨ�����H+���gS�@<����dQ����1�����e�=Ez� �g5g���̆��E�DM�����ws=G���=�Dȥp��]-�ɸ�QƷ��lB�Z���G�;r�"����"W@�3���{V����A�D� �L�k�\BS�v����-�n�c���e���=⫝̸��� �YH��{�!��]<�8�X ��?�B�~��(����aV�)�~9f�Kk:�������~4h��'����B��i��d�d�m6�S4w�9qJ@�ܨePn�h���j��c��,3#��#r�@�a�j.�օ3)�,�4��B��,OW a�l���}Z�Ʌ�r�!��Y� ��� b�fǣ3�� _y�\O��<I;9�}W߆�=�H��Q�<� A8�ZҖ��eTb'�3l�TNv��Ƣ���]�:��ޤ���-����yfF�f[6�3���9yݒx�!.A�0�����ل��@�O�k\�0��c���%LR���o:^�X��2"�����|G��Hj7\�H]��3/��`�'��Cȗ��Ъ��G��^�T��T��)���b����1"�+h#/_��[XL�]L9}�M�[������j�9b�kf7d�֧�d�L��}f��!��> ���g�>!��O��z{�U��y��iA"2J������� n���w�D6#�C�Ӈ2?�)`'�����u�Ę�u�rg����aqŊ]���#�0U���ù31˪�P���r��5ʎn�6�Eyl"��7���Ax�$�:���R(eʂ|�A�i/��1����l���whٴ�-�:1Q��{�:��b<��N� -:`�Y��6f�G����QRyc.�ojUp�i�v��9Nh��-�]���V�g�mt�����^ĕw/,|G��é<u1]+ވ��Ӯ�]�2M�:���ND���$����v��c�G;l?�Fi��4��`�å=I��IX� ���{T�ȻΤġ�g��)�-s�*�� ��\g��d�e����\�pL�_��b�w�'B�hM���v>.�tz$�IC�k�P�fYҧh�B!��g��E(v����2wl�lZ�S n0������q���)ѳp�n�"#�$����!���N�9�`��/�'ԩ;Nb� ��ʹ����߸�J�RƛR T���o{�*z�rVU�B���n�+͒��Ƃ K���)|�P#�#,�.�j.��l��Kp|�Zk^N�,6=���ط��UL{�h�_���hx �|�!���/��nHF��<�az:�����#>�7&4`�Qv"tL�>�'tb�e-Ɉ[�_�2 �N�z��@�:G���K��QX�>����J���٤Q�<Im5���@_�v��wѭ�9�Q���BsV��&��7�?(�\�ɰ?��O̐��v@/|1�� ֒��ߥ-w6�GoNA%f/�W�}��n�[���@����귴�R��(��{5�=Ax�c�R���3+F)K�@xH��{���yP�)��j��XN�/om�8GI����2=�A���}��[J� ̒�Q9�( ���)���?yGKb�"~�����M��}kk|��3�X\�q��æ��({���@�MZH9�}S��P�yF$:ڐ���+B�Y\��M�>�2��F�H{0�Mx��j]�@�&�0�fv���/��v��{X*�ˍ2���r1;b�9坍 ��z�*z'�(�54�t�M�ss��k�푘CKOY�kB[&7�+/U�n�) Wh!œ��ϓ�^�<),o����q�y&�iX�Buan�o�۳z���4��`��M< ���+���� �z��t�q 5m�\:6!o_�SF�O_O�e����ٸ��d�d;� ؇gc�s���Iϙ�y�r�f�����[z�r�na"O�xP9�����dL�������6�C}莻!}���%<�3r���b4�y�U�́��ni����S�֧1d%���$_l�n�a����x�`�&U��_ϕ~0�ёt�v���C�ޙw�ab�Ľ�tdG��D��_p�n ~ni�2}��z�-x��+0F���)N��B3��_�j�9@����sN��90W�:h��D!�-Y=6u5��䶋�#h(����ҌX�"|^5Ǡ�O�d�/0B<sں���$�:>�٣b ���(8�f��m:��t�[u�r��[H���WY����M}>+��a�&n�%�}{��ƻ�}�K�9Q����_��(PY��) 3�֒�D�E�����2څ�25V�X���]Ó�:��Qr�ֳ�I4l>K-b�,�&��y~�"_�����jS��-E��|M�v;o}I�{���:[�s���i=Z+�^��U��[�$ ^d,~�* ��2D/���"�(���Z�N9�����9�Ol��3�v����>i��`ȶ��(�z' ����'a�ܱ�������pU"�Ҟ��ӆغ��ξNW��N���&//��āw�D��>R�}�Uq`ܻ�!Mk�Zh& e+��ۄԄ! ������J��8���7l���Q7������\Kr�bU�֙{�e?�=# ?m-�-��`(�6T���l�tE+7�5�;S�ޒ�pU���8�&�|��|-��Y!�ٵ��÷�豁�%T����Z���㩕�B�ǟ��0�&C���Z&��QRt����o<��sI!��w��*T>��آ��@�n(����x��M#�5�7d�U�8�7�_C�s�-�An�SR76.�0��)T#�4h/ܣ��s�q��1��=k�~�"���m�{�hK�i.SON�Ψ������%���2#T?��N@��� ��������@F��q��-Q{��8w�����q��d�N��֘�v�%��Ո��|���Ȗ�b���F1��c6͂g=S�~x9}QR_���Oh}�1jE\�j����C1s֫8M��_�<�S;'r<��<U�:��VQ��[B��5LMU�yT��=�N��cΠ�F�y־�T��)��D�+1t"ck+"�v����vQ����@���W���'�åɻ��7N9�l���!���� b����;K�`ֺ�W���7v�N����0�q�>�S�g�H<�<J�Ć�ƴ�ާȿP퇟��4�]�Q��<�,%g��7<����O���\�'@��<s\am#�����2���+�GYU���,D�y�*��{�z$�ܞ�i��LQk��NHf�ˏ��U&�-=�ǫ�똃S`rls��bgJ"۟��+�y�v%D�+ L�(�UR�Q�x��A���,L d��y��U�{�%]w��k'%u����U�ئ�ت���aI�g�D�s^�"��ZB�4:���+8��R�x7� �H�eV!Ύ����%��h�M���{������Z�{�1JN��V ��*��g''ݤB�|ؾ���rf�����-e�dr=#�R�wz��c�����%fɳ�e�&�P f�o�}��R � ��BѸ����=�Ed<^��`mJ_ԏ���H������rmp�7%��g%������#�U{Oe��Nn�z*藭���ݓ�i�ڎ�\ AmTn?�g��Gn�}EI�B��н1�n-�:�o+OCu��f$}�"�@����zu�d6 ��boc/�R�B�BJ(�mN����8�4&:F;f0�!֚��&R�y�G�I�[�߿_�:0�'����Ђe���q�CC�U�7؟�C�̓�psW���1��5y��K�Dʗ����"s�\0�U�� F���� S�܁TSM��D랸EL��s��1�����#��j_Ҧ@G���!��<�0����Q�����_�Q��9y�k���H�������HScE�#��w��*G��A!.�J��c[8�π��:і�#F,EI[JN�xn�a�2�{��sm���x��ʚp(T��x�m�D����/���!~�Z-7c��mÅ*�g��o7�+���J��;�i�s���}���X��5 w��5��z��KK�y݉���N`�M*GLz�q5Ϲ�jpX�F*6E+ξ�1��_�<���Q��QC�}}}PC�� ��|��� A��_�߾��o?J`�r��� ����~��ߣ߹_:&�ノ��_�y���3�t���:3���_80W��ߵ��w?t�ib��ѨVݖz�.����/UC�S��?PK�`Ƽ7=L=PK+ ML1dist/plugin/databasic/summernote-ext-databasic.js�Y[w�6~ϯ@�ڒ�Zt�=yqm�l��^���>��&!�1E�$����7��r��l��E�>�����2M��k�����@���Ԫ6�y�J����;�j�T��i�Y����c�x���[y���Q����f���z�;��*o�in6f��ƔC�3\��x�.��렻��� �J�q�3b�?��2BS_���}��KSꃧf�1����ӭ��_�v�ס�t�y��#HK,ۓ�\�����ea9����\e~&Y�����W:e�v�kU5�7��a��]c�V���eީ���,lˆ�8�g��l?���vcڵV�i�%�n�aU5r�4������J���Q���k�5Iw��^b�]W=]�0-yS�u9��J�R�� �e=��g��0���fcKrT����xo��.g�Ū3C�wp�������Qmt3��ZY(��k�b=S�1i�d%�>'�x��K�T���5P{��$1�kl���{�5��U{�H�pIV5��uU\zӹ�gͥ��/�u�&#�Y�6W�,P2��n�Y�����&��g�ol]VV�ڐ[��g�F�W�J��?ZT�b����=|����-ҟ�5E�b��">����h�I42��j��4lN��#u�}��K�k��qH�<��'��~m��qCZy�{*����E^/�R'���|��wt�����<���W+2�v���K �F"�3��V�T69 �J�+�.��E��J_9T��9�H�b�<s�c���$��3����L��:�]���u��S*k�Mg)�1TxΝD���>߾:}u�6���BG�e@QW}��H�6�pA������7CU���.kԇ��g}љ����U�4��=����%��$�uU��D$�F�N�2l�ڃp�Qw�J(̕/��P\w1�R�4�FF��ٟ5OLy�~�MKS(�6;��\��X�7f��ؾ������ҧX ��C Pm�����;I�_�+2trT�约��jmuo�I�(9:�MNWM;X��t�P�fA�î{�0����=���x'dC|9��U�c�լ;�<�Ӟ���6 �-����A�D����K�o�搈�Q!���3 ��q�#�c+[�;���7�ǂj+�Ń=��s,�-d�CE�kNf��]��,o[`��& �Q����y!��3��T\�_B�C�L){�O����1g?��-N��Z�i� Yvl��r�Xd$4�k Z�%����?*Xh�)�L¸�Ov�"eGOY��/uH �� �~x_uϜ�/v�)��p& 'cH.�;.)�b� �4��ֺA�4U��K����.E���~��W�D�N����|�3C��+��ۍ2]�]�=79���W.��B�"��huGO �A1��W�)��t�"gV�~87�}}1ϊ����|��3:�պY�u,����PG' _�wf���655|���1I�>�;}E%���[$s��ym�����Z/�!��,-��Y������Ǧ�~p �������J[�i�8{ԏ��RWL�b|ѽǂD�-�8$��QA�����1N���.�l�/�k�!PrNv���Rl���n��O�*�G�u�ɝ�uF�}�{:`R�nf��|�������FD$����!�O�0�eա�7�(�o: ڔ� �5���qeR�q�4-ҹC�!���B� ˭�.���i@�w�s����ۊ��ml����fk���� �Si�,����������@LG���pG@�:���&��2@���� �8ߒ1�� 7j�V�Q���y�\���\V��j�p��㈳�t���wrt@YB�by�!S1Q$(�Q�@�NA�Q>������ �cU*��Q��qO&sG_�"e2��2�w99/�]=1Y�K�&�"��d�$[�,��L���P�fy����:*��1G�1���)O��G|�T�����'C�M�&NF:�v�]��"�Ա)T-@�\#h*!��;9� g��#3�p4eWa��N@� 5��{����6� r=rމ�%������|�iɫ����J���漪��w{�]9�� � ��&��k� _"~����`˼����r|���F�#����s\%vb+��� ;�K�u��>�J�, �÷p� ��$mH���C^�M����>���D�4��IDT�Iǜ: ���O9���_��0sv2�U�ͧy�_jUȱ���H4��$�Ic��5�)o[��͕k9�e�1E�3�xv���P.���4�f�n�m�5�UMO��H�1M_?�;r�� �M�9_��\%���Q�E�$x��s���=;�u�Cv�S�BL���B���m�����P[������6͍M���0��qE���.,���"��Wn�j~B<r�UY"��o�f5˥8�rv��X�~����#-Q�� �-��ܽ��I�U����қ�PYq��m)C��H8��6|�a�8��0�)�:�x�Vq_�uh��<�j�u١:���!s�9(��'��^0,@�ԻQ\�ޅ�]�藫�X�݃{#3]��%�߿��ߤ[��(z����Ɯ9�̄�_[W�)���n�~��53(,�p�$V+M=����u�Y*9���Z���4���� ��('�;�Ɩ~�W݈FȌ�J���PK=��e� ) PK+ ML)dist/plugin/hello/summernote-ext-hello.js�VM��6��n$/��{�e��M�d/EQ`iqdq�"�����~Ir�5����3o�yr��vB��a��洄�W�k�K�c86B!\��T4P�S�����������/Ӄ�u<f�\k��+x�{a`��?�N�,t�+*�z�w��a@s*�YA����H���=`���?��8;��Vs\���N��އ�����K�a��X��?��ۏF-u�e�q�\��X=��{����e�W�H�^�/*n���^(��1q.�Z�R����&E���t�(�(��ߩ�t'>�EeQ� ��Ee���p�JEV�i�u ��}����a�g��r����∡%�c��#1 $�H`T @p�0v�Rd.̀E���]+���7:�P�v4��� $��(�C�l*��r�Ԥ�� s��� �µp?�*~�O%|iʵ� �3�9�~ʕ��6�;]1m�%��m���%X1:%�H8�'a,���� Ν���⍀Z2k�/F��[�ȋ�w�WH���KK'z���͞�Rԏ3Z�H}E�H��BY�Vˠ[�$~��[��|��|B uЏ���V��y u�Z�#! AQ;�+�I�\e�d6�,V����3��_U�!�#$-7FwY.��1U'3�@�Ra����v��|0�`T �.�?��T��$x�ҥ!H ;��s�n����8 J8����<��oH��o��"9sNY3))!k��Fg �5���rҖ����z��:��ɪ�ޗ�����I���@s������]��z3���v���[�U�(h�'�x� ���Q<���H_���������b9�I8���K����Ѩ� ��D��z�lBX\_ooe�C6��㛰�d����nzmI%Z�s�Q=8�0���o7��S ���}u,�����曋N{c��t��ǽу��� /ƽ=/��3�]�uY����ĝ7c�O�h�g���i�8Zg��i��0UJ4�[�2�b8����x��X��?�YŴ�v��%�T�AʼsԺ_o�ބ��˿PK�֙�� PK+ ML7dist/plugin/specialchars/summernote-ext-specialchars.js�Zyo�6����-�9���bw'�4N�ls��XA��83j$qBI>������5��;24�.���$ˮ��B��Rf�6;��B���R/d)r�,j%n�c�X����(��<�@b.���/���%���^��X���UF�F��t}Q��λR�` <z�n���N����]��K��FqA�����o*k���:�h�6L��:W��uU��o,�T<�>v�QI�eg��@Z�{����r�j�99+�\������ⰿ�L�����k���V�y2K�����u��M٭��ٵ�b�lTV�2[K��DO$�u��E!N��*��I�.��>4����t�/�L��P�lZ�ݵ��N���7�: �3��� ~�������q:%a߾>����%���//�ww���O~<�߇��g?=��SO^�<9>w�yB�\�ǯ��}����O^�t���mb��gGv�����U��u�U5p�pT�x���+�ne9�d�z� ���.��Pe��V��-��C=�Vߨ��y8�7;�ޟ�b$���~b�u��n)��0b��չ_�{w�U��.�q�A���@Xo.�6�ҍJ ���#�r+��<�<L!@�ʳo�ͷ1&f�9T�u��T��xV�3L�o_�"��]�+72��KX��w�f۵s$�M�{��q����1n�J5n��ENr���� ��҂��e�v��2��5j�a��g˼?d�a5����?b�EWz��UY�Q��F�*�oc�Q'��aX6�M3 �D�qXP`�y�.X���ʯ��B��FI��t&K�l.�Ki��:7b�M���#��φ��d�����L?�Ѻ-��V��}C��P�ݫj�����.[49>CF��)�¡n����⦪����b��d`]�׀��DQ�p���1�9A�H��u=:�1l�ʨ�����@�0�G��0��:��?8A�-<E˗!�li��~�)�8L(�E$C�#{Y�"��2S���0,���J`�&������Cz�Y�-�p�`��i�BV���(��JU:�/���u�h�B[7�B�v�F�:��S/�p�n�1?,DVʦy��R��[�Ű߈�Se�"��W�Y�h�.�bs ��i�����W���pA��&m�,��M���r'E Ε.��o� ����A�7��$���')Ճ��=T�@O�z0���v*�]|��{���w&٩K+��E!IP���ד6��m֒���%�C;�8gZA)�u��0?(��]7�$�#��9Ne�?&�'s�D��k��h�9�@�Z�<��b�W�pgG���n��8�;J�Y�d����ds� ��^?B"]�ȕf$�؟���麭��*"�l���uٶ2m�P�?H��ީ,;�Vu�o��ေ�5�(ljي�ʠb�n���AP�m@y�8�y% �{�X�[��nΣx��I� pL�FQ�����5dj���l�ř(�ݬ5�z�G�y��� q�?�2�AR����f�^��sGS��];�{��y�7��v�2�^%6���hqB+~�P�:�)}K�72�P�T_�U�A�6Xr�u(]`ƆL8~�V�إUЙ��쓶6����n#p6�[�]�#[���&�d�ݝ�)�z�<=y����}P}8�w�3��I�bҍ#7��3UT���e���������':��:��?�=��Nq��P:��T����4]���N�'� � �F��cT�(Z/ IX~?��ui E�P�Q�*q������A��k�2{ ��2��ؼ��4��S�h6�~x�o��sm*dR����}�d.ŹWh�\�o&��t�g��!Y:�!�(��pN��(]�% �t���5Q`�Ǟ)���C�C|O'�J��.|�C�mtU4��M\�'����-9�.$���H-��A+���3�v��y3`],lK���z#���c�h���-p��rO��ScP�C|���W���w�N߾��Mw>nDw=nd�x������! A���ȓC� �6�p�y�\��|n�����y�Zh���uI4�����c�W���<�X���<��2T��wep8U7���9|���L��-#���⊚�.�f�^h�x r��jٙ���� /���+nj�m�rw%���w2�9"�_x!�uJǺ�(����z1wUؗ 2}����ý�� t�� �>q�����54G��4��* ���jdL?�7|�j��I�Hmu�!UY���"��@��gu�� %s��c�d�X��p�� ���n�+p�^�3�r֘���X|2�3`j����:�KK���%t�Q�!(�Pv��WH� ���W�"�i�1�]3�~`��=��:��S��Fr#�:3�eua:�1����;e]��ƈ��B"�2���l�����Π��7R�f,�H�7��%G��Zg[���C�7a�#Í~c�ma�6�L5��:S�}���d=~�@�q\��ؙŔ���ҡ��)�m����Έ���n�8ʷQ�r��-N����"YF���aO�j�S -*Do��#������Ж�Н�d��Y��rOe{g �2I�`ܦ�z6��8�R_]q����c�H�/g�,[u�U�k"�,jty��\m݄E\�Zc{��.�v�k;)�}x{��)^�e���8�ƭ�.P���1<9�RB��菱R�d�1��.ٕ�n2�B��K���q��XS����'��㏁��K���$7�팲��>��I����[�9�p.���ela�7�X���a3Ӵ��Nˎ���R�;c��*���2Gy����:�>��C���iw詸�C涍��lD0�����g�������L�6�"��>ł��12�Ɓ4�J����OF����at!��d,��B�Y�$XP�%<�i�]�~��\��R�-ٱ~7%&�:N�=�-ڽ�9G�=*��?��Q�6���S[�����x�е�nop�X'0�2�W6�@;�, ��; ���t8�-F��0�/m��8/�g�������&��I<C�I&�����j f/���)�E�Sȉ��o�=�\W\=/Q�\�#/�_K�wK%��i���唘f�����2(��k�G�������#O!�U([�i��csNOAE���ާ�_dG�y��ZK�'�mm�m�6���@�&/��PK�.G���(PK+ ML2dist/plugin/databasic/summernote-ext-databasic.cssU���0C��+���K��� ]D�Tm������~�\�E�S�O���I��� 3]�h6�z�p�v��*�T܄�&��J#�sj|)��ܼ w(jȺ��v,�M� 1RI��4�����b;g��6�����q "]�>��1�������q��ذ�Y�fh���h^� PKme���PK+ MLdist/lang/summernote-ar-AR.js�X�NG��S�E$�D�r�"��*��V�z3����wv7�T\@�P����c!��ȓ̾M�fמ�� ��;�ϳc�$�Ǟ�?�0vwR��E��;%A T(c1��5a��p��t��8{e�)ø��XM��Ǭ�o�E��_*`k�y1��:��}��mg/ B�^(��D�������+K~�Ϙ>L��i7�rpm��Щ�����vc�Z_8АF"�* �b孊��d�j����O��ip(k%���� �� �k}�H���P=x�n20�K�Ү����4:ӧ�N%��FnH/�-@�]�]�BE_A�EA�FBe���m�c6�D�����F4�G��ߝ��,���Dp���W8��� �\��Α,�y�U,�x�|�o|ӗ<^M�� l������t5�� zw��A�O� �����Dm�UIi☬�9}�n?f@n��>��x љ/��S�xİ_i'A-�^��9E�A� �I���;jA�C��oG���E����f��Om"����d�c��0�ȭ-�4L�O��ء��/���狈(� ��@8����^��r!�ϭZ�!�����2���q��G�ầ?Y�P�N��Ʌ ��\N+%���LD��I嵼�ǧ�c)�_y !�l���t�9�wϱ��\��U����P������C�CN>�Q��P��_e���������/�a���E���$��0�0�W��P�q�~E��� ��:�r6g7 s���LD�ˊ̍1�ۑbt�9�E����)�qoM�\55�FAY��p1|"�~�\+�a�8��]J%*��0��H�㒁b^��ҷP�P14{�����\����n4��k�ӻc!��A�F�U��"jF�Y-&P]�I2չˋ��CԷ]`C�� &�EɈi�.��w��"`�Z"g`�P2W�o�!�bF�e�����(^/�;[@낿�E� ��s������{����Q�N���Kӱ���ɴb�n�3l�]Բ�t�!��9�G�#a\�Ñ��.��H�#656U��E1jJ�mI(��¦ ӎ����l �W#�h�[DX(;T� "��'gf��P����0� ұ� ��ax�3%�q�.�'(�ѧ���צ^@���v���x�g�$�"�#e7M�t�3(��a1e�I16�S�;�F��4�|(J�a|)"��÷�ٜ��E��xS�s�g����$��&_v�LY� ��R�-rcF}+�h`�|��Ih& � ��;���j����AXr�R���O�C~����F�x���~����H�+E���=L,laN�o�P[�ҽ@z�h��M0hڨ-U\O@зn�FSl���2v�O���}���r�h�]� x{a�z)��6/����[*`���K���VΕ��'�lK�S��D��on,@g��t�9zf�x)���"}[Ulz�g4.��H����Z~�� �& ��"bq[0�G1zo�����h�U�~�NIL�?]I���0�t�'�e3nn��tA����(�^��e�����R]�z�) �e*;��( �|-�yI鬪�P�3����q���ˀ3���P[�F���cM� ��v���Rڸy���%tH"X���/X�?2j�����TY�,�d���?�m�ad�'���eYQ5�X4��(�Hx�y"�i㳒�0��o���x��=c�R���-n���x�wF{����$U�hܒ��rڇ��ug����-i�A,���%�k+M�̾��>�W_����9dLюce���zܗ�I�5"Z�/[�:���X� =�_?��-�\aߊ��^��FQ����xPX�,?��Y�^b3��陕��s�y��7�9ز���`�Ƅ�pO�i���1���������/PK�hy�jPK+ MLdist/lang/summernote-bg-BG.js�X]oE}�W�C��R�6�C�ae�[lgҾ����4�����)q���b`�@HXPģcll���soUOWO�Gr��>�֭�q�eq' t<uaZ|��fԽT�ݩ3IE��:U3������v����i]w�B�t�VOB�uؽ.Z���~~�?��1~^�.B���2:��1�͏�49���2a+�=`��<?([�uB% ���yQ<䅰�X���π� ��ʿ!���a®��e�k�^<f���%� �U:0:�H�w0j�](;"�S���� ����;D�䣣�a =T���= 眉>eCƺ�� 9I�^D�Ei:6���B�>�(�.(��&>����°�w^'��Vv�n����9>�I��mɨF������ɏ�w�6��2��������I�*���Z�˪WZoc�G�����b�"+e��D$�T2���^�8K��m�~ '��'���u(O|�&9T+�R�*h�����6���ԯ`�y�6Ȣv,r��7z5�u�:=y����%J�Ee8ݞ�x�\[���ͬAٝ�b�x��T�!��MF��F��|<`�B�Io�B�NEN����ۈ�_��'�{A��Ȫ-���уA�x6��1�2�!"Խ�Ř'��띕e+������&��5*�w�#��OP<��y8ѕ��6A?�%-}��(�AWi��ֿ郧��/�:��7A`T�K\�b\����'���&��"7���ֲ�����+����odtQ, K7��ԍ(�_ϦCK��m�g9��K$G�xF��D�Ϲn��'���T��B�d����I?%�y�O��kz!H��܄��/�,ݵ�@��t2N�r�ӭ�*^��WqWo���Pn /c��D����CuҦ�� ���M<R�Խ sw�c���5:���ޘk���v��Bҳg�E��B��D�鹎�ס�dut�E��� X��0�]�6�c�*��S��X��j�֬?J썆� ��c����@x1� 8��%5fr)�J��Л���`���(xQ#�!�G^�a� o+�Pw�?�0�����1fh����� .��4@)7��@\��'!.��+�W|��I��>bvb�G\�����j$)H� Xkb�6����P�XbtD��9��Z��$ș�\V{u��Dg��*��(q��=��Ä��O�����X�yXbޠѡ6�ꮺ(�}�X��|ߵ�#��IC�Nn�sk��%Mۘ�(����٧���hڷ�;g]5ɸeO��Aq�ޫk����W`����F�;�MX���Y��ؗV-xZ�^�v��q��A�I�g���wPL��ۘ���Z��FWh��l��,A�q�,�����/pt��Z�F���O��!x��צǶ�q"���̪q'�m��Y���g��sC%�'H�r�)C9��Y-3�����enD�&nbt}i�{�j�N�zڲ�`��z2�����X��D�t /�d�M�ɠ� \��f��3"�|d�;A6s 2/j�uB�0��K����^h@��M$�4����o%�O�����,���tH>����� ^��ƨ�Ͻ�./�$���d�`ն�Qgr��a��q6�I�����$gޠ��:q�YŠe��풹p����S���U��B h��o��t�D(��Eɸ�9�����~ �)�x�+�b����YA� $��R!�VDp3���MH���M �6���^5ѵ�J���)eO$6CHh+1,o�f�R9Mk�:��ߝ�3I�PK�g�y�+�L�gB�>�DR�lm��)��2�X�>N��!@�|�n�n�aLʍ �I�-�&2��a�Q֗��HK�_+�WPΓ��rj��{�i%��#�� �7Zw�Ak�_��/�Op^r;���GÖ��rNYh,e��S�'K��s��f){휲�|_�lZı�S\��p%�q���>C_</�yt!���Ϡm��*~�]�M�D.k�ɥ�O�C��m+�ڰOX~����2��@��f�������Ks�b~qnen~��ʪ�{�C��X�E*�pE0Z���}���oܟ����L�M��7PK��E/m�PK+ MLdist/lang/summernote-ca-ES.js�XKo9�ϯ�!@�@�@���a�m$����5��MI�٤�&��A��{��`��W�����VW��YH"�_U���>XD[��C��wB<9R�A����Q�Zy�:2�.��s!�R���x�.�X8��sg�7��TK��,��k���4���$�F��h+卶 �Wq�e0FF[%=g^E��j�6�R�<�Rz��}�c��MV2�6_�� +k�t��3M�Z��wq���tt�&Λ��5��5��R��C\+�X�1�g�}�ۻ��J��iK�r ��U^�(��2,��m�<]���^�t��̳h=JU�V��ͥR�t���k܃�(��f��ȀN��\{��(}Pd�]Aъ:dW_'ùZds���F�S������� ;��v��w�,!/]�K'�sĘ�mVr���|���Z���Y�/����}=p�h��o����JM:n9^H_���{���\3@���]��ʓ<�QӨeTQD+[� 'bTț��:�v�D ��縷����ā�6ʨ2�yW�i�p���Nٕj��4B�{FW�{]�Dt�ܺ���z��D�m�S�����=Ģ�T��h(�d8b��'}�0=Oaީ����-)���Z�BF��^��o��x�+�x8����W�0���\�k�i��6�����.p�#\��oL��;���^?�8�s�T|Dx;��b������8�o>\8J�p!����蝈\��:y�=���^�2H�-u��G�" �S�7P�Ι;����f�ﰽ�r��u�8B*��0� gX;��D�er�����쥺�Q��݁��9�MeS�,�7"�C��� � z��LF�ӧ����;�g�;�*�ݝ��f*ʨ�+��ѡ��&�ty�Jgbm�A���)���Ww����yPt3���֟faC�,��c��0�� Q�+j�0&e�B���Q��qh��P��FqJ�]i���L:7����h]p0�wqlʭWi��z�l�58#���s������_��/���~�������& �{%F�<>��s:�۠]�*5;���P�^�֔�VʐR�?G�9�ho��8� �hhp��� /]�n�"���5l��(���z^��p��d��7��`�]�����P��p@�_�70»�l�� E����z�|RO��MK&+�ؐӸ1��Jh�H�t�T�k���^^�xm�m��)��fj�����x����z�~�R�3!J*���9hcШ�FR� ,�o3�WL� �2��H�����4*z�97�v�P��uJ��R�,j��%���=��'�P�%EU����1����u�"5L�iA�%y��z)��) ��? r���`��W��h��UN�9�A*����]e���z�O�#e�����)*�x��"�h�[H�xۙb�� x�#Љj(�(��������}z����SX�@��u�b��۳m3��8��@����]�h"-�H�[�FTzn�Q��1�g�b0P��C���� Dq��]kz3u�&� ��L���O~�Rـ�J0��%:5�@���:4M�f٭�ֻ~�*�9��ѡ���y9k���� bV��X�0̤q�;���mR(��\>���BVx݂��@QD�io5(�P��YA� ���Y1�m��4_T���֙��g�d {~K���ļ�)Z��%�PG��ļa�_=��wU����� �i�-��ܖN#�}�4��i^��i�9�Ҹ�*�_��ƶ�����ۓ�ΣM�S3eZ0ɉ�ݕ�*�SR�f�J\b��g=��v19�n�5��N���Շ�ɻ��+& ���|,�2���d�,�Djg���/��������!���PKnQ��QjPK+ MLdist/lang/summernote-cs-CZ.js�X�nܶ�)� � ��E��p� lĵ����5��$�HE�%�S� ���eA]'���%���Ӻ�zt��~�0{�JE6�j��>���=�Z��GO�*υQڊ'���c��X���\��O��Z���P�5f��j�1x����2���2���{k�����X>ױ5�/b�I� V����R�J{+Y��T澥D��W�ϛU����zg���L���j�����������tI] �f����vGﻭ�9_G�kw���ЬWK�y�SU �z���c��M%��Z�j���m��y�圐Z�:����NJ+(�w��?���K�퉘S��9�lm���CM۔{���1�T�>:D�3n��r˽� /�TS=P]��k� vq�Ԡ,zX%U*�R6[{[�.����ї�� _�� C^�n�z�(]�E~�Y�FN�C�f�X�6l��{�K!Ed���I�(�� RT�*��CV�vr9=i� jۈ\���`η��M�H'g��`���4گ�V\тg��OR���8�KF�6��ݩx&��8�zK�A9�({��լ �cv��B���cUZ�0<�q��?h"3�D�4�j�9����j�݄�9�����|��J;� �ju�M�Y�q�.݅�?k���>L�B�[��$����j��] ߋ;�S���l��ѱ��P��&$V�?��Ϝ.�:V���T��NNJD�ɲ�) k�����nT��V�xX��?[�S}s6�v�����ۋ�A}'���C��=DM�lن@��U����`�x8�r�c!6~�keE�*�����!�u��pie+����k��v�F���땩F�� �� �,x�T���{��Q�K�. �-6�_8�z��;�T��d��EZ����Y/�˟���E/��_��U/5ʄLK���g�R��6p��n�d���`ڥ�~��qw��O �h���6]C%B��W������ ��B!����y�]\�HǢN����Q�w]���#G�KO�F^���:K����Ͷ4S�%�#�p�[X.�WQt����Dku�F�p��(�9}�/ wنvv�� ���q[�L�B�n��n��%#(89�l�T=���v�}��f����o�܅<��� ߑ.+�ǃ��ac�;RR�%� ��l�J��&B�[)�l�;��M�}Vܯ��M��B�=��1�� ��Q�1;�j�L��Qp_Z����[Tn-Jb~��0Vd~�"�K�k�4 o[Ԫހx���ZC땅� ������='�;ȆL��?Ә�y=ЋuT��-�!�HQ�������}����;�x�0��^���xܠX4a.�W��&�I�#�Q�s�_���S��(�EK�2_����')\˸{P�ǎ��A��Q�G��{Y�Эh�<�z��x����ɒ�o5��]3������8q��p��NuІ�� vcA�u�U(��:$Q����e׃NНHa�)ض71j[~��Yӹv��>5�iI��5|�0�F�!�a�1tC|Oǎ��Ua��0�<)M���օ"~J���3^��~����}�}�;z�0[�y���>{��?������J��⁺�D��|��?�t������USMGx�-�,\N+)�NKa �v�Z�LO�ÔK�x�>pCJ��N g�¨�$�emд{�$>��[�3V�wz.���K�v'��b@� z�@\�?9>8a����d����sҼ�)x�<f�E�$Z ��]8����~�~�ݏ�0���PK)�z�PK+ MLdist/lang/summernote-da-DK.js�X�n�8��Wp�J�6@���b�:�8H�������-ZfD��r���_�7t��sIɢ��M��{��,k�p��'���_{r$�8�Ӄ'GU]�j�đ�:{��%)vr��m��-�v݊��Q�[���4y ��t\���k[�uD�u*��Z�xEߕ�".�,��D��w�J�E���� v$��TD��=ͭ\:�)ct�\��5u����(�T��ZXY���^��U^`���KX������(��3�r�o� U��q�]�3Y�@��ƅa#y'��J] K�����;6@�����V ��VfRs�"��Z�t��P���\s���|����Ke��K2�Zhro����=h]�wA��ˏ��Z�RLŖ�E��[6�%˹���v$-���z(��P��٪.�K�a�}�ZrW�^L���F/�LgBG�R˳3�ͱ��sf��y{il�����Ԛ���*Y��Hb%�X�Sk�S�D�^e �ٲ'��_dQ{�4��W���o��Z��4�eb(� It�<ubO䯑��%'6�̮&͊¬�]�|�i��P��Z�����l$�D�����sr�-"� ��%��^������[����L=���)���0�8C>����);Ahm>��L =,K^�r s�����'Xd\���I{T�J�� ~�^�8t��9�U���;�Ҩŕy'tp�xm!9� �GA,Q��:v�)�>ӗ�O�Ss���I�7���W��sJ�� �F2��^��4����y���4e��2N���N(��EA���FF5��@��B3��6���,�!pW10 ��'H`$,�Ā m5(�pZ_�� �xY!_;G z������%�}]�M���F2�W����}se�?5FF�ⳗ����^+[=���+{I[���^Ĵ�}�˘��O{�^�i�cڛ>���JV�ݹ���"�}�T�ܙ��tdH$�^�A\������S���=�A��=�D��"��>E�m�m)^��k)(�ƳϮ����J�6ey���;`��/�ߨ�]*h��i[��&�:��a�߲!�r "�;(,��'�>,�-:�O0:����������N��V�m��F�Q��Nm)��F�%�+�]r�+!��}��G�x̘�E�a��4���Yf�Y�����b��,���u�HF%\D�̪�E���H��ݧ�%�A0�\��s�ڔ.�Z<��ΫPMܢ_�v�� ��jL7p.���@\�q�P��!�;E Ϩ��K�ܿa��B�+���؞�����R���y�^rbr�����\l�T���X�)�j�$��Omz�)���&x��u�I&�0W��V�)^9����q��&(<���3( E���h~��DVЫ���Rܿ�� 1wx�u���p���렻�!��F�8z�C�0D�;'�ސ��n*��V8U ��j�I����o\��w�~h��6}Jo�IU|qsն�4b��,S��Z�o"�k�14�=�� x�RN�?���0�.j<V5f�]�F ;q���S��|��4Z�?�N��N�,��x����=��04Ƨ�����.2��}�H�x�Hޗ������#y��}�H�x�iy�<��M��c��_��8�Q���F�d 0K����8�\�� ᖘ����-�� 7����T�z�6c7q���±�H<�p3��ޫR,`���{���������'ǣ��4:Jxn����ͦA"[@$z���A��;��;�헻Ã�ϵ�|�PKD��{PK@TLdist/lang/summernote-de-DE.js�X�r7��)pp�HU���{p[�~"�%9!i�V�p��A��@���l�^�:����3�6�!�n4�_7tPx�;i�C���={!~wB/��h|]��/��� g,[�ON���'c�Ѯ�bln��=�΄s�s���IǕ̱���F�&��*�����qVȼ:�Jp�����|���+!� nd7B*���}%u�k2?�++�m���K�*k|Yt�m^���GN4~��V�h����Rc~�t�s-�Ar�xS���"kC�����y �J¸��ly!���n�%��� ���C9� v=�J���Rj����-��s��`.x�^��U�[���EAW�s��7 �P��KQ�[�R/���A/d9�L�{���r���MȎ�8�!A�&��T|%&�2�Ro«Z��h^ K��"챴Ȩ�)��{[\�g���K�\gz�6�"u5�����n�\X�F �9�JAw�>H�`�t���oX%����0�`�'֬XHflLl��;��>CE4��Y�6��;�NH�}���.kt�1M�h����2#�Sk ��^5�y�S}�h&��[ o���'��Ȋ��R���֮1 �M��@uɽSP�r!LZP�B��Ɇa��ւ��G�\�x�(�q��h���,�������xξ�Z���Ѝ��s\�T߮�43��X�ÝӁA�o��;�^���s:�^��:�dbO��BRU���9��✙٬�̑^��-'N�� �2� �m�����Z�}�za�`�B���fZxd�@|��}QP����9Uw�v!��9�8�|�����y̰�=�A�V\��'*|*8<����qlT˅�WN0�q�}�;Zl�6��^�B(1����=�kp)@�"��{!M`�6Dlkh� ��Gv�P��V�ט�.�a���^4�Ӹo�Kj���*ɖ<�6�,Εɗ��N��.�Zr���s�L�V�|�ߎ� �^��Wci���c��T��X�v���X�6�}7���Ii%��ﵱ����|�&r�:��:�r(V���[�+�(��Ri� L�m���Qj������}+%�����c|3)`�HW���f��T�bv4o�['��w�#�־d�¶�Ȧ��1�-����ᄚ �{Þ��Jqn���8�0{�f?�7�8Y'~�� '�Dn��>(�x�K̻`�3n���&d���l��Q��|Yb��4�K:JI�P12R���N�c��\7����l���f�^@������)R豁>��JD��" r�M�nl=x���\�Շ�[��;��z�y�k��J�LC|� ()0���vF4��%Y�A4,���O�<����%�V�����������=�Y7�|���e���>�n�,2�/]���vJ֯��g�C��Esv���rS~r����� ������7�:�}C ="Ia*Ps�I�B{H�㓲G��]N�=t���<{���V�Q㥒�1ޫ��8��M�q""��q�&J��q�x�����(8L 6�ңPz vH�]`̛�]��D"��)Kt�m��(A�@Q�SlN#��%���N�?E�gwso�qضh��ɓ�E���U��E9OJ���!�[�y��Y��fP�3�����0���G�˧�.�P��ꉺ���������(��'�L������x��{��4V1�ηs��c|�(�8�%Ie�O$W�|�#�)~�s�E�.y"��E������S��S��?B�U pLe�ޱ٬D7�p��>XΦ��ON'7�����)�+�\7�bxM�pO#�]|�o�}�;���������~ÿ�PK�A{�B�PK+ MLdist/lang/summernote-el-GR.js�Y�O�~�_1�$�����`�X%��I�<�v���\LHe��8��D^,K��TU%Z۔�1��̿����3��E��3���;���$hƞ�.�;��q.M��b��.MDI���@�j�w�����q��O��[�G�Y�A<��8��o�r��${���'i�q��?/v}������M�.=,�O�� }/P$�w��e�i/������oWD6}�$���r!̞g?X���[l��F�s�,=-�(�g_U��C�d��o,9QzK*n�:YlS�/paϲ�j_��G����_@��A�~ɂ(�p@�����a2�{1�%���đ<���0{wdLhu�Aw��y%�^�P�ے���O��c����&�O���f/�����)�p�2�dyI����ȿJ�0V��?\M��k7�Qb�K�����?����b��A�-����="���/l_hS���~��]�v+nQ��Yͺ��x���� d�[N�����uDt/���*����E��E��29�Բ(�k'����$YO�yUC�E+�t2�n��]��z�Van�F��0;,��ı���g?[�Z�� ?��̞���Fq[l��U3���]�W���l��Re����1�̞;�;���R�(��J�Ŝf�Aw�P��F���K)#�gt�i/,���ٓBfy�7��eC2�_��X�B��%�i�Iֵtߢѡ��.���mTgf�=:�g�|A_�.�ϑ��Apׅm;g�C����g���gfB�.e0Z(@��f�����m/�� K� �s���mmM�uW��/��_����)�)%�,߱�!m�'۔�Xfқ� [g��B��k)m�>�H��Bb݀k0_��&?���ɲ$�X7�T��ƾ��\2�.;�:J�G���(vC�sٹ�ٳ�&�pt�~)�8v�9��*�cZ�1����j����yS듭��e��g�~C���%'�<?�����/5��t��Z"+��E�jۄ-��6��6fU�h�%o�m��(+̙x$CAkc�"62���P�?�{�p��M� ����rB���'�Q���;2K�EA�'�¢��us�o @${�U�C��kV�iᶌ�CKJ� �ѫ2َQ��[Wl���n_�Ms���Ms���Ms���Ms����P�}/��R��&�+�̠�M$�'H�i�Ј�`���Y��TZ\�<�D�1i���x�e��i+�/0FN�X0|�P}X�U��T"�E�a�d�˧�[ꡧdH��K��0ҙ��|f(.]8#t���X�$��(�$��-œ �'1��!�~���� �wN�U�q>���r7�_����xv!���C���}d��L�rd�T1��s�ҳ�|�D�� ��Nǐ]��c���fd �z��gJO�I�,K;ڴ�+���>X�L����"�N��a��P(oQ�, K�� �^����ǡD���Z�z2$�rK �T<W����9���Tz�G�=�P�m�^�7��M��#�!��gV��(Ө<T!r��X7��:�� �ϸ����\Rf6���koѦ�#��/�I6ǚh��O�t�>��`є ��~@VW��E;I���e������mĊg����r�ģ)�.ѷ�dK7���Y`�}�Ƣ�:�a�Y�HФ��X ��Z}��c�� ����W%'B�\]`�Q�4�Z7Yk`�Ow�V^;���i��_9��c�Z��.1��/����4���)��x�d��Z��xm|�HF��o�D�.��Z# ����֥�*H�an�jx%��io�Ʃ�}x����V���2|Y4J�9ҙ�Y5Ǥ*(k�;���N~;�f,��}R�{��)�_u�^fo�q��6����o^~�$^I���� �=W�iٯ�5LV#��)"�2���]�òr��/ �!�w���j!������a�*��\&�d�6a܄��#�|���>@?����+/1��1UA�����iz�b�Qq2�C9g쾃��=P���+�G�F���E+�"��k��>�J�_��(T(�q�J�T���E+�i'�4�4�Ⱦ�4\6�(��nV8����j��x�u�s}�8��������s�#[�w��e�ˎ�^� ��(��A�Fe�Z^ a� �8F�>�Q�*>�&��j�O+�Ǎ��Lݛ�q��'g'����>�tEra[h�=�v��ad\�G����r1Г���V�[$�=�G����ط_%*\��PK�l� �PK+ MLdist/lang/summernote-es-ES.js�X�r�8��S�*�UYW�=Li��]��ȚL�"! 10 ጳ��[����撪ы��i6E�<>X"���t� 6o��O�~�ɑ��Q�8xrT��TFi�O�\�L��]eo�G!V�6��Kg�7"�Pk��=���'�s�������-�7�*H����[Y8f�%=d��x��F' %VA�F1͍�� ��ML�$�����feI��֍�ת�x�(,d����u�uEK\��:�[�Ò�,�(�ϴ�B�r�G��.�6[_���R��L�i��^d��iY����ӶN��)�r�j,}���\�T�F��+E�n'weeT�ӟ�N�Y���KT�`[I���.��I��X'�3�����2K��Ǡ�/x��-4W�jƶU/\Dօx�g&�7�RsG$�;_�7vx�S|R�j0����σ�D��M(�Vj�t��\�|��n�U��v,���:������{ �";�k+,�hжNȏa{ǂ+���1��2M�hDNg��keT�{Wk�j2�7yBH�jj&Wı�7�f���]�!�] �]n�BD(7���v3��D�"�* `�as��#�-xJ�/��]z��W���4Ό.5�~�#��5$���k�۔7�P�7e�"{����-g�^�}�4��j�[w��B��{ Έ��#[��V�T���\X��z*ޣ�}X<`24r�e�T�4o��~ ���p'&26�Ϟ�a�wOzL!�ְ�;b�!j�>�I�^��������"b���ꥋ=����̵��)cԍ$ђ<Y�R��^�O�j[�O�>Yz���ƾ���np�Ht�n�����}���4�yeQ�ݧ�2an��CXc�1֔�=@�I���[����Qݩ3����΄�f�����k1��hVlY��aޤ-��B���f]��u(�f�<�ӹA��܃�x~� :�3��4����� �l��U�MW�yi\~�1��@0���w��V�5��tۻc_<c��L�^0�.x�/�����L�z� ���Og��S}�p;��QM����Z�*��w͌�e(���0p��R�Bx)�r~K/x�sW��o�y�C��fX�և�^f�ۯ튗̅Ӕ9W'�&��G���C:&1� (��%'^JGٽ����m�|i�*�6��0^��O��s��ݺ����S&����4tG ��E��S�Q�������L�r��U��1_���]f �bk�(mh�? x�j���{i��s�M@4Uu�����.�p~��f�$�� dǍ�Xc�4y�A��������\4*7C����A�hj�T�Q)^Ӏ�Kz��?R7�+ㅌV�������/\@�4#ۑH��$�ا��U������ �(Y��Deiz_v-�kbٳ��r��V�5S��X����3��;W��7�uۜ�����{fAF�X�@�ѵӎn�\m����.E����-p�݀���t�]3��"gDx\��L����J�0�e�!RA��c�;Xg0����t�v� e�?y�>�UI� ��f��"�~�8:�H����i�Ё���N�L�OA�h{��B�&���A����p���~D��ي.� 5�Ne�����!�+���x��/y����g�9���z��'<Yk��Q+Ά:���Zq��Y�zԊ���V�y6�N��<Ezȍ�*�%�B�ji�G�'2<O7QI�(V�o���&'��6Is�vL�fv])\��tC�������d>�.f�ٕ�]]Φ��3��ׇ�~*�*�/b ����xI��P"_���_��×Ã��7PK\R��U�PK+ MLdist/lang/summernote-es-EU.js�XK��8�ϯ�!���ly2'�����ݻ�^h�,q$�Z�Lw<�߯H٢,{�� Y_U��f.6^gN}��R���Ϯ�ё�/�]�~�%����Z��y�1����ɻn)��hׯ�X�:'&s�+9y��r�V3��:�x����&��Fm�����$-�N�F� G��TQ��9Yk���'� �r��W�1�����ZgUE���%@��[�n3�V��'�[ߐM�U�Q;>�%-4ykq��>?������������#��,(P�Z:���%Z-����5��Ig�uW�N���U~��V�p|��dsu��K�����ۜ4�0V��ݜ6|�ٮ��HjQ�jx�[t~���G���}6!|>BHCZU�v�G��m ��p�q�.y�NtǸkeu=,��Q��o�Z*�n'�u����x� r+�;v�-Y��;5^C��%=`0M`�ƚF��ƊR8�TS�>X���jj��[���B�ȑ~�+���e�Oq�5 �D�z�4�x�z̈���[�_�pN������*�4�-m�w6�"|�p�D���PZ��/��(��C�I�ۘ�gB�-�JW�V"o�uT�0�OÀk�s4�d�����➍5�ܲ�.�c�ʯ��ڒ��ŝn�D%� ʍ�A��d��_�n�ʊ+�%�����H��+(^p���%�rR?C�C`�̍j�Z��ݢ"6��Y?Z����d�ӟ���J��2�J�{�+��T��Y�\sz�v�6&+���2��a���7�sa̓��Nb/��SN�G�y=D]���}�L�ZԨ�#ؾ�%8Du�s�q6\�I�O���zjT6����F�*�ʽ��(�v;���}:nk��1�v����ɡ�I���d�<���A'�M��ͰV�/�~q%P����Ap�/A{y�� �Wgh�A{}���7ghoA{�Ҏ�S��!�{{m�?m�S_��"�D!ׄ�㎩�4F{��� r�G�p��C�e��e�5Ƴ�Ll�4�_%ܬ�g�Je�Wā� T��q�5M��CV�d�`3n��M��|4m�1�*%�ٟBJ�1+ !�b��Ga��a�95i��c燑?<&� �� Cͱ����{#Xb��b�Y�A��b ��@�|��Mk�UX̓���8NPe��J�A�?O�����W�)C%�Zr���<����:s*I�h�T4ڠ�2�=m��P �A�=1��4.�`� ���V9�hiv�CC��7�M˶�C�$�܌>���)]�� =����Aɐ�ԬRGr�>��H�M�Q��2V�ɍ���4����Cg\�C�����b�ikJ��&� ���m���0��� W��a6��I��g����� ]�����PJ�}�HN�ODfX�2<E�)w|/����x���z��o��c�=抃g�/3]�9�q�ѡ�����uo U���^�����t�=6Ԣ�P~��\��7��63Gb��) ���#�3 ���[�㈫�B#�����/���E�H;qȟ�.��qJ��2Ĝ�g�kt��*���I�e��-�w�{�U`��L�Gi�/�&�$�;ޗO�}y���y_��}�D��'x�<��� O�}���(�=L�_��JX?Z ˔���Q�6�z�3-�+���0.��ecќ����7�Wx:& ���:S�[x�P��A#lO�_g�wӹ���.��b�h��r>wx��e�(2�D����4(��^����ˋ?�ῷ~�PK������PK+ MLdist/lang/summernote-fa-IR.js�X�n����+ja�%��q��$�ĶZN�fWw�"Y�"iY ���i��M˂m=ي߰�w�����*��K5Yu�Pw.��K|�ݘ�}#č�2Q�p��B���2�N�B ��M�/Do$�]]�=(^��(�߄�`�@���,;�Nz7����|����{�G�i~�v�h�L�G �=�E�>��x����?g��7�� d���dg�^v���0�oH�(<��=�fٟ�n~ .�,��#�;�!��c�w�81��J&F�� �}��8�� ��?%a��?U�!�7��uZ����Ӷ:Wa�W�U�P�A@�+��z� �z+�1�~+cmqް]m�+�F���Qd���G�Qd�P+������,��w�<G�"������|�C�4�&Q��H�h���T�c3 �L�Ԉ}��}̎��[t}n��� �!@fE��m�)E ��,2��i#�≜�uM�Niҧ��X`�Xܒo�5̽�Q�4D�''���6�г��C��R��(CR/�`�:0n�<¹���1|~N��`��� ,=6D�6b��c(/ydt��T8e(�� rd) �NPf�1�5�oI�K?L-��K�܊����e"[��h���P/=��F�����مa� �2]�.�w�s5H�G��=.{�~���y],�lN#��C&�n���&q���]��*�`����O*m�����D�;�=5��r��?u���M�*M?^V�8�c#Ûba������*/�b3�����˚{���e��T9��j�1>� ^��J{1���HBC�<����a����x�m28����Zt�}��I S�������AE} ��Ag䞦��TE�яj�g?�-��p�)��m^����-y�1B�9q�:��0����ѣ��r.��u��8p!�8 ����wf��� �z%j@�MԒ��L Oi���++2�!q&8Tt�=�QVE�16�z� k6�%J�sMP/j[��c�DCuǝ�5J;��d�i�b�N� �?�הl�N7��� ���/)�3��_S�|�r�Ԗqd/Г[�@w:#a��g�8���w�w��ݻ�ݻ|�^{�߽��1]�� �Lm�4���vRJ+�̂��Qp2{��F����#���S�U ��[�4�.��AF��0�)SW�C��% :ٻ����z�+ _�Ή/�Ϧ�u^[��D�6r�1�6[�2�wAS8"���d�hd�5 :'��n��IkZA�qXb�}p��o��SF jDL�Vv����f5��֙��4N��]�W������������kEX�h�(���=� ����#ά����$�6�`#K����Mc�Hos��Ado?�{ �t^D�������,12���BkH%/A��U�ф�e��@D�;�m�R�JRL�ʚ-J�����p��ݩ�L�.��� ��}��j<�&�RP�(�hT�`���;��`ULP�c��ہ�⡡5�Gڄ2I�h��_q l[R�[.��]Q���1�W��~�o~!���KC8���:��IX�����ڦ�?�g�����\}���sm�I��|�0R�&'��B�:BP�~U,����t�0�ѐ)�C��u�~�~HL�%9�4*֟��} ��J��_��t��}�Q�ے�6PC��.�qQ�)�]*7�;���5Dм�tQ�ht)�S���1��� �-{%��/��Sbm5�"���%��N���Y�$��>�`C�ǸU�SP_�;�Ǯ�����١)� ��:���牢����)��Q��6�UM$;�<-M�YJU"�@�^�R�2��*�sO� �\�íܺ/�Xp���I�G�^A{皴|�*i�^���_%�k��ᬤ�M��V.�Vp�� e����%}���v��颶��@��:����_��u�6���� 惺~R=)�?3': ��� V��a"�*� �#Ec���piuqM,�,�/.m<\�Ӹ�t��C�G�%�.��Y��W��j��o^��=�*���PK�jM�PK+ MLdist/lang/summernote-fi-FI.js�X�n9��S��m 1��C�0�:1lX�=���{�ԔDw7��;� o�g�Ћ�W얺Z�`�C�d}U,�_}��f�5'/N�_� ��L}��'/�|�*� ꬔf�2ɅȖ���U�� ��&t#!��?�l���������A�z�ut^��d��ʕ�(�Ge� ������f}���mEm���+��^��N6���ݶ�KY��k���&l6u��>8]��v6���Y��������/��i��'��c�Èc��Ha��A������ :�6x�b��â�W��k��"*E_��j�,i�XI �j÷�@.e��.�R� �G�.(:�U���z9�.K+�X-S��=�@��UUI�-EN�C��H�cx wcSz|��'d�¯e�&�2�2pJÏ��`k&ܹvȨ�Q�u��Fj ^k�0u�m�ka4b������r��7��g%�n��m {U�E�p��Х��� ^��Un=����J~�UL�i�[_���D�����9K�9P�B)����d��zkP��"R� 8U���]��8'��+m$�m?���sey���70��X����"MY���$��l+�6�;�;��Β���8���Y���⛮����������^�OH��K�*�� E<l�ǻ[ތۍ�� `��+�V����rM��K�������}]� 7��&������ z�c}��P�Z�+s���Mnas21�ʃ.tQD#�5G�s��]<ډl&c����y>���y�i�<�> I��ߪl�hQs�Q�l �L-l+b[�lOW�,^s`�J��}�U�<cf �j��Y��5��Hq�k�{��j�#�y!S h�����@y��fM a]%�@��yi�P�閏%ns�J։䮭�5����xͬ��0�.x�o����L�>0��A@JP*nv�h��mO�dq�2h� p�F���ߡo"p�t���nk"��zkUR�o��0�Knt`Y�R�F��?-l�~IQ�]ξ�_Rl��v��Z�9Y���6�&�kYײW�m��/���4����`^�7�i�r������ͤG�<�,`(���#�e�U������%1�1$\7*x]����������9���M�o�H������X�u4�{��P ��,a��$^��4g�x4�mk����j^�Y8�1/<��<��Q�2���$APK�,��^�K��sد���.��9��wh#�y]ﶈ*g�Ei=��4��d�BtA\�6+ c�':}��-���B3�+�!�{���N�����n� ӆ��ײ���wb���7�yְ���ᅔ�@o.���xe�K���U^�����=���Qg����(dŃ�����>��X#�� B���H��k7��Ռ�8��������c���M��Ʋ9VR:ǣ���-PE�'��b+�f-�<1����/���c�J�=��|l���ڀa��3�Z�u?T!A�w,)�n�u��֢�NK���m����":bq�6�e��I�*�?*��p�)�I�|�����m�o��WB �3e���Z��)_��]�~�-�Xr��o������}�L]ޚ�u�=S�w/{���� �^��3u?�X5Yx����=G���. z�0P}+�$,����eiWg`�GR��W�A4�A�X#��C����ױ��mB܇i�<�x�I��j���d�zޛΦw�ϯFcq~9���g�'S�~��&�ӛ[L�b�(1x�M���?O����ӓ�?�r|� PK^#��FPK+ MLdist/lang/summernote-fr-FR.js�X�r���S���HU^W�#�'��"%���h'��8��0�,0�-o���E�Ѿ_,_cf8=3tj�EݍF��_7x��6���G���o?��R+[=zbY*o]��i7�Ӿ��x��^�_�X;[�߄X9S��_��c�l��Z�c��>�ۋ�P�h��}����g��Q�c��z-s兑��A eq�/���қ-���mM67��ZY�����(Q(Q9x�EB����������gB�����K傴5�6��~��#�+y��#�8}��K�� ���_����_v��A���aw��h�H�Lʫ��O�1���덶�pk�ܙ4k�-T�Ke�aaw�q�g�՟��A�g'��q��Pk�w֤��nd̷܍$�h3��t=|�r�d�/Ѕ���AN��RG@#l�j^���k H@�R�MR�k�sE�Y��r˕EJ{���D=�5�����b�l1s�����3�ӱ� bct@��� �E�T���6�\�\~h�U�ܺ���Wa~�4H�N��Br�]y�� Лo��Nk�o��L��_t���H2C����"����&:Q��HQ��+�o~��)�T��Řw^�x��� ���L��Ƚo"�.����.d5<s�Zڸ��.4� C��:^NN�T��a��t�O�q������?_�m�����xp�]:bzJ=�o��䞠`8�sN�=]���� ��e�L��n{ h$z!"�t�^�E�\�7:TF�Ad�p��k���,R��� W){nߩ�p�a�}���s*"J�⭢^�Vv�{��'��+b�>*�� ٭eQ,��٪��쓋��T�����?*��b��Z���T"7V�;�);'w�� ��$(�Y��քaep'D��$�︱B ��R�7,B�KaJ���X���1�?�<�>Q�آ��b!�[ ��0��BvM̽ ~�Co��-���o~����;�CU����sB��`��>��RW�)S�>�/?��������|�_>��/��/'�@��}H�u,���6t��+�ѱ��%F W�c�* ��2����0�9I)��+�����K�A�Պ�7k+��-�������J��zYar�����N���:-0/�7��6R�P«ڣ�2�A"��,nh����adM8yRljs|���NAJl�{�IU~���k�ƿ�OD��LP� ��+:�n��^�P昶U���:?2�ɛ��t �W&b���sp�d~���li���� �gA�n�A]��� HY��ƌU� ���~�-����"F[E�_(t�8 9�ᨵ�f D� �)�D SO��?u���[���9�\���ƅ4�)���hD�u����C��xr�)y���,V{�?��1�r��/\ �)a>�%� v���o��t4���Rev�dBj�`����e �_uu��&�r�Ӧ���z��t����xYJ.��%���П��h���'��H�O��1Y���^���e^�Jkqhd�{y(�ֆOg�|�v��Q_�\���v(��$V��n�� tH�|ww���\j��[^�Ʉ��M�xY+K�CzJ��LZF'�� �+�d����P5}��6���5C�d�9�����}�D����9!֬m:t́�C%v�MJ�8Ѕ���P]��|��oJ#;&A,�b�9H]s7VΞ�1H-�j�j>�d��g��'�����x~�./h��`�'�������x����l?/[���N0(�)��������FK�6Oк>��~��G�������x�آL��X��9�3��)$N�M�b� ^��E���L=C�r�hƞ�r6�-f���_����j����?��O p����/�� � c���˾��(|�ߎ����ѧ�1A���PKp��^PK+ MLdist/lang/summernote-gl-ES.js�X�r�6��)p���3�=���*�Om'���=B$$!��N^�7?���zՋ�[������K�~��]����A;��t_��D����:([�==�bY*o]P�F��A��-�O�I��yb�l�> 1s�x#�s��:��R�?<��4��җ�m���V�:�3���e�on�� ~��Ⅺ�6N*��p��b }�� �K�$ibeI�Co�Y�/TXzK�ǺʻJTq�|�{��&���;b�Af;�+?��\� ����ӷ�a���V��/��R^����'�N���W�<�ƐY�Х�.��"4z�\��k����{|�[Q� �G �����Iъ�����q2��9�l�-D��KT������n�H���FY��J�x�Tv��R���Q�Q�;_�7�:��w�j���"��;�GíH"��Xά���F��y���@ε]D��^.p���A�{��kX߮pQ���K\�1� �V��g����ذ0p���ñw�6�"z��Q� ��*!���/]�8b���m� �r}��|���w*)�d�T�p���:d��'G�R�#�t�仑ѥ�@��p^/@ ��ԅr<�٧�(L�D8��N�B~]�����n�R�� ̰V�/쨕wt������i��� 9����u ȅ��8B<ޜ9*�p-�q�g(*/4�V��yc ;��?jMk-�D��7�z5�2~��NnRHOݑ�VF�0M!��(�tU[�i�h�BP,uIo�;�s+eO칺�]��]A�`F�Ҧ�����*#{� rF`��E6]��O]Ycw5��7( �ݕ���T�~U�֢A�蹋:��F�;K�k+#�!��X(�`�R<(Ҍ��m��a]���C+ y��%�y�^��f,�H�����p�uv�"���4�T�I���Qf��_"FP���J5u��Q�O��3`�뻀�.�1a���^0�Nx�/9�#�������|ߺ5�vj}�NA�9��WVv��}�r�Թ���KeV?���s�p�� ��t�F"6��s!w��Ԋ"��"�=���C)����൵���I~}Ĝߙ�&S%9S} ��5�/s.ҽ�o�C �*�6��CCH9i�ia� z�R)ﺢ�S��h�S��#}�9j�KARw�:�+: L�M@G��dS��g�L�o�3�_,0�Z������ܙ����a"�܉I�V��Z���*'"{�z�&��@]E��1�K��ܲDCcPsM$Vɔ9��s`�:����w�?��L9A�;��P�x��eGjRiz��CZG�LƜ%�vEGa���&��@?��G��aR�ɦ*�-��"4��7uC�N�B�r�Wh��U�]u�o]����W�&��͎�S���u�����^�S�왟�z%���P�I����q��f�����VJ2X"�h���E5C������W���^wsT�ڬ�n�f� N����b:�%n�هY�eM���pm�ڽ\��!���]�E����!�_�Z4��f���t�Bi۶F=��'�FK ����n�M�cG6̓���s��,vhz��u;Iv�L���ߜ��@�D�g���YYh���P����KX�~��m-��G�̌mX�?�§��ay�8�{Z�����ey�8��Z�������v3u��Qľ�/��ħR�:Zf��4nq��qEl���ર.lv��Q�<����R����>2���T�^m�V*�C�".��:ƃ�t4M�h�~4<�L����C�K���)G�c�V�0��@� ��������Y��PK���I58PK+ MLdist/lang/summernote-he-IL.js�X�N�H��S�E%��"��\t��PZ�mI����fbOۓۥt�;@! M�"�^ȯ�ߙ��TZ��s�s������M|�<�e�=b���țy<�a(T$1�?��9��ں�"d�'��|b�+�s�q6���٭3�柟�w�z��~l���*�#A��lIJ���Q��B������Xv�gW��Y�����`wP���Po@�ˊ�8Q��HJ���D�C�*���� N��^��}�8 �����S���>��)�*�b��v �!�IN�mih@�>�(�G�PZ��γ�c��Aa-��J�ZF3�U�v��?G8�w��C��>��M�J��T �\X�{��ɺ�im�!�ߐ�[h���ֱ�w+�c��Q��4Ebo,b<�C�!)�(Z���u\�W��f��� ��ɖ���R������Bx���Ȼ�B�qcl2�!��Ʊ��)9�l���&� �-�����(�����K��c�o_��Gn;Yl!�臩�i��}eVXbE��JI��]!�y�9U: Ϡ�1���=���@q�?1�%J*��G���6r�� i�V��X]�l;k�m��퀝�����`��*n�$��k3˴�v������kQ����[F4n��T��e����6���Ӕ��<[��:�@�-XBr�L ��i3���{����e?|�}S�gG:4?[�,��h-�Cl��G��"Q��C�c�ۢ��S�6���.e}i�|���#=�m��mȭ�� �%�cJn1N� �o"Њ�.=WQ-�%�@��0b�dVTC�0�@O� '_F�'�4�Ā��J�٬ �K�� �K[M �Q�)N��6����}X��4K�SK�n ��S�,�FSƑ�����"۷�O���w�;�Ħ=�ҞڴgU�3��P�-ش�U�s��X�-6��q�P;��BQЭ����(�T)N� �R>�Yj��4,\� ��!��ʶh�\d_�b�C#�!":�B�T�c�+=�:'��� ��o��ϐ�+*>�hV��Z��>���LO�t��#R���1�6�a��R�1l��dU���B��|*�1Lt�}���!�9ȼO����*H3�H�2u� m����Q�!�W��VV�]j�c7�P�ĸ��>3,���rw���8��}.�&�Ls����:z�x�{�����?,@,�NC# Nq��S��`��B�t*_�xnI�D���i��*�H�`�c|tc�NQ�J�|�e�5���\@ ��\C�>���s�rt�g{{�&�"Uȓď�$mr�a�ئٸ����Q�M��*��=�>8i3M<�!<�6���%�қ��⿋��oLoB��M=DM�(����l\*/���r�4��ȓ�y�o�d X���1y�Y6wP 5t�?����P�8[@����K��C[$���.�=��6��e��8�~�;o �,5ѕj�QYnr)AS� bj�A��y����N���ޏ����s�T�{�zL)������h��>���yW4�u�Cb��~�I3d�'m� �k�*k\yKl��=��6�a�vSE��MR�� ��XӍ�=](扩5��1�B�4�81^�P�`<��&�μa�g�� n���dgw��(����k�J��y������U�@�E{_M��`~�+0l�� 9y C�� LŲ2�}�<z�1���ֱ��Y<�Ra(�'�C�����2�%P4�+j��je�!: � �*De�i�y�Z[Zg�ե��V��F�:�y�@�ЯX�Hd.D�g�:�T7��ݙ��������P��?PK�e �P�PK+ MLdist/lang/summernote-hr-HR.js�X�r7��)p��*�j�#��LY%�e[!)m��^���f1�b��y��A��������t�h4�:Z���٣'����xr�>���GON�P�[W�#��i�1Z�^NF���g�n%�ܙ��ݸ\��ZZ7z �韮������-��+o�UIt�~Q=��(��g��jm�V��%ӳRz��=�;]i+T�b+��V�Yh�U�F�+��rE�x����*̫��6���\G(�g���cSF�Bf������a��K��b�%�hj�Z�Jy2�v.38���:S�~�v��R�)*�]k��1���U��=�)�-����Z�Q7�˭�k\�Zmy<DԤ��=,WU��#ꃋ��F�D���5wA����8�# �)-_���qc�O,�Q�U(�Vj�Z�oO:�6�50Z1D����Ry��mC{M�m�^��ޕ�9�E�Ἐ!7��J���ڨ 𫝜+��މ\��� ����t"x���}�����~�~뽣���)S N?a����r����5{U s�oS� Z��K�i��|2c�s�xf4�=̒H��vmwj')�#�a�琝s;���ؓ���,��Sq����bqe�Z.�,��sD��{G�Vh�6�xp4T,��|ZG��f�� l#ոx�g�\�b��tֈ��;�Ui��4S���Y��(w�\reQ������T��~P���6w�t���*��n� ht;����S^v�o�:� /�|����)���\xw/$��% �F�hE��Ӻ�;Ӕ+e΄� �6������+̕�m8�9r�VdS.v�i�>��K9�(�nxk���\u�+�{Gm�ؐ����U��wwCM�^�A%,)-���q��5�1�:?~�ܻ�˙��3 ?� m[<����9����/8�eG�����_u�W]�H��:���M����@<�:ć�I{��pWR��vX)C��q���3t����A)K\�6Ndh��-����a��jE!v�Cfa"ڐ��/%Z��%��8�I���B�+��F�����H�zm ��@hf��/�� ������AK�$�����;&�?� ����~|ps�9���Co Ѩ�u��x��2k�c���ڛ+ ��N��:�a��,1+Z�8�@��N�(�̝(�З��D�V����F�{�]�z�=z�J������Y��j!�I�$�P�<F�u� ţ����Z5;D'��C��u�q[�;sf\E��2�}ơs�|!�Z�% iA)�Vb�_'��m�<�A�mm d��r�!em=M�/:��M$r ���z��;�SV��+�L(+.KYݹk��q�_� /���颣��>�U"G�[�*�u���h��+�����P�"t���@�7H)� ����o���o$0���rxi�Gp���Pi=��(�ttO�{O�N�GJ�Y2� ��J��|`tS'�ŷʩ4 �G����R5R���"�Mp�Zl,Y߄�#�ER�S�ܶm���fn�Ĕ�oO�)qÓ��Լ���5�iJ=����p�O�H�S�� �}��������$4^�o j�E#�7���� d����{t#0<������tǂ��}�HY>������K+��|�ieO)��V��#e_q_�h��ϐ��"/=��n��8����8�c� Z�= M�+�A�1,�r��Ż�I��7�cϠ������Re�q���=�hz�v|uv-Ɨg�����d�N���dv|`�i�(2�D?�so�i웟����||��)(���?PK�[�YPK+ MLdist/lang/summernote-hu-HU.js�X;s�8�W p�*���|���'�%�W#��B���ps (yf����M�@��U\��� gzȱWd�u�����k����'��_�x��t��~U�%Xm�+��=O"��9{�n�B��v��Q�k�6w�h��4w6�C��_��$?|V�j��U���f9i�/��D��$�زY.�e%\�ͪ�&hy6A����x����,I�!��/����#V����5u6AT�7ԡ��*����ᄍ�z�!V+��+-J���5ϧ�Ny)3�Ѓ�fћ�n�D�K�о��Z4�-F2�� <�� � G��&�)T"lYn�u&�x�5���ﵴ��v� ���X�.`L�gr��;z�X*�����Inj�x|k�1�6�&rW�\�<uD�ע�`��ܢ�aa�G]O�2�2'#��V[}l�d�C�Vf���g`�����D:Q�+�72�|�o7���tN#Dj���"߉� ��%�2V� q�֔��� �O��T�B�M�T�Z���w)�Ǽ�=~�2�1��sL���ZC~2`�1�g�g̵%�zu!���-��L�����<˵$)�������S0<�ڍ���LO��u��QL�� C9�W�٢��g�]�v��5t��g������ć�C�i\������rO��/ ���(�QԻ��b���3LXGg?� #� ��z(I�����O;p�l i�s�l���̂�ѵ9Ϋ��s��%dStU��k���. K0�%���i1�ڋ-��;���s�n����܆3�<����>2V����!�nm�v#�n�1���)�����S�TXs��qʹ �CP^��zudT�: �U�Z(L�X�:C`)(� �~��u@�11H����p�&�:آ�-10�#~m�Up��U��*n��g�Kc��fo7�Vt�Q�g��[�,(�n�LR��ƶ��X�9t���k�x&O{ S�{�x� ��'<g���^p�KFx� ����*����ekm,�_�.�()d*A8��נ��P�Ղ�673J'�L@�yG�l#9����@#�:��lY=��n��nr �#c��Lb=�r���l����<m�ڥ@M)R�vR_�Tͷ���^°�C5U�~[I��Yg��T������f��ffZW.Sʣ.6��a���HUtm�2�JIRA�S������}m0�⸥C��L��`M��Y�th1�3F1+��g���B�bJt�ʎ��]o��j���=Th��bs t�yU-��D{��Z�@���c�� O�㪉�.��gm�n�J�?��Vq���n��(SQR9��zIm8�Q%��E:��A�п���M3���e�|��������ؐ���HLMR���(����~]�� q��V��9]���E��A� 9`m�(��w�~8#F������п�b�ߴW����Q�F�aq!�udo W�?�(D4��L6�b�|d�bGa�%��`�[ͳ���7FNµ3g���^͕�l��6yP�@�C��D���Wv�#t�~�%��3����1��`�= �R7��a�wE�*���$�����_��k��P�z��j6dk˃W�(WN���f4K-�����T;�T��]:��;������ډ�w;�]~� ���V�=Q�ȶ�Wi�>{�F��t����{����cy/�1�|#�:�W�a|ŭ|�GE��G��Z ���/��[�aw��ƞ�\*��c��%��3�~�K�,A� 1��� F��X�י��%���� WR�DjȔ}i���hB���%nlG�w'G���������j�L~�F,�� Q$(�������?��O�;��k�s��?PK��y�rhPK+ MLdist/lang/summernote-id-ID.js�WKs�6��W����<�Czrd�vc'�$�ә^ "�q�N�{�(q)�S�`�o�}�hL�5Gώ�?� ��D}��G�N�ж���I#M�<҅�t��y�vX ��Ə+!6�)ފl�6�ɞCf��^6:�V;mJF �P��F���t�� +��%���uUK#J�(�R���E��t�?�0��- ����R��yd��;]+_9� ��u�sz����_�'�j����c�ߤ�}�'�e�a��,�[YCN�6`��a´镋��^w��z�x�f<�S&p�&̕l�#�����A �k��+2����S�6V��%���KQÿLH�/�$�4�">��.�?YH3B��W�SKK�B���[1l0���a3����B�1R��y��C���CN���+���5B�F��cDG�NI� �M�l��p�o�@X'�HC&�W�����nT��nt��_�0�Q��<�[�E�!r�R�ݦ��A8@_8g��3���J�'�9�h˛A#Fr����"W���E�u��F���s��u�,ύa#��참�M i�#��s������#S������Gذ�\��[e��`qmz/K'���q�xk�� �r����z�}Px��F��R~MaU ���X��gtUhJ��0�������2�w%_xU�x�XƇOa��E}�6�����rޅZ�B�O�'��T����^n(K���b�x��E��g�LgE!�}���. �N5Q� ������P���&�F4(c3خv1��@\�����S�H3&T�6R�aSn�� af� 9jʷ�uj�<+d���0辇=���Sc�1�v�Aَ)�il^�0 ��>x�M\�Ŋ����`��,���&�z�/9�#���N��0��{��h�`�CZǶr�L.sYM�8!�֢�Ϥڎ2}"�R ��4~�-[�f�J�o`}4����Þ����"ӊ��������M��e� ���`ˌc�/�l����h��D���B��o��,q@�D���dz�ٲg=h��B���8��0x�6ԑ�k:E��w���q��d ?QĮ����eg&Q��y]b�34L$ �4��p���nh���O����$vz�w� u��3������)b ����R��24�z��M�_���,Dz��G����"��w�W���}Lw�`dJP������#�! -���� �I=��>8�%c �h-lZ�m�jW,U��5m2������#�肾a��~f����!�TE�,�*�k2tp��b���!X,a��z�+%�{4����` e�&���@Q�I(��?���"���}++9�N���sM��5B�[s��4rL��\iL'��s��Pg� ��#�%�v6�v�T�����B��CR��S���� : 1�mYb��A�f�\S�9��̌g(�$��eU<.�0=��8q�B��ۘ��Ĵ@�+�����z�\)����Gw�D�c~|�]�x�,�Xp�/���'�l�}�D^>d�x_?���!;��'��Qe�扼o��R^�'�eh�J�8 Gfez(�k�����V�7�jJ�y�D,[�^=�O��`�;�������S9�F�M�d;[�],��n���ly�X_,WL|z���e,VI��!�/���������}�5(���PK^�>��PK+ MLdist/lang/summernote-it-IT.js�X�R7��)tpj��P16��f�@�xwq*U�hg��2i�0�x��K^,_K3;��`F��[�V���"��K�w^ﲿ_1�z_��BW;��]�ka��b_q�܋���|>+�7K�F�n��ܨ�=+f�yäfK˝ޛb��s%�U��M� �VI-60g �(�'�T�[�N����Lq�dk�=�����b���4X �\A�b�����c��*9�k^�"���K%9;ŭ3q�[y-�ʚ�\m�sk���0w��k:y�~�r�Z��Y�yO��Zh��`�q�V��Zs˚/�@��X?��0g&[j',)wNҕ�=���A�ӠT��d�J���f����Y�Zs�;���s��x}p���p!��B0�2'��s�Lp�N�ϱ�b����Џ¹�ٺ� s�\ȭ�ZL�)9����YC�N��������ۨ�*�s�%ٵ��!mc-�2De��a3aI��=H��B߾�fy�?�7���Ge3$�L�J��Ԛ�T*�H�R *X�%;6e K�>P��=M�!Q��b���[�k yÀ���0�~�[�d���E�G�iEmn�((en$�9��֓���8� �nd%LW ��B�N�~!�5���Rb�d_b��[�m�#1� ��r `mq+$Oz���L�������h,ޞ#3�{��v��P`�~vwE^��] I��m�?r���2�FR����>NT����B��=�pԙ9�n���Q���o�'@f-�(n���2��;Z[����q��C�80k�%����9�}g��P��JNvI^Us;�'�U��qZP� �4iP�en���QMz$Q�[�5SH�X�3�~�aC膫#�� �21��i�n:��}clD3�l�H�L5�#-�(ؒ9�FՋE~ ����B1��W��P{�x�Ly�=����J:�-���cJ�˜o���D�b؛��~���v�9�]G��;�aN?��G;(C$�ΨA��k։�4LS�� ��W�� f��͚�GPdّ=�4 �o���D8�Y����;�ʕ�u�<KS�)��H��n T2����jk�`݅3bq���|�t��RI�&z��!G��3!$�Q�v�Y <��J�h�RBd�|�t\�b8���˷�\P�]�Oʓ;|s^b`TnS�4��[*��� � �JyYJ"�")������5D+��y0��ݱ�V ���Pcz�r��s[���a��I)jj�"C��x��T��&B�h�|�ڴ�:"<��m���zne�/Н�Z�)&�R�d��s���q���)g%C�ێ��i�h�^BV�hƛ�цlj�%�\�&�GZ��EH��tӔS)�Y����{��7��b�)%t�)R~�l�Ce�;<�h]�-�<�0W�+�+�Y�y88]e~R �E�����P��\@� �*~dZ�|KSᑶh�biɹ�|ۡ�z���!θtC�{Cf��#�R��^����5�I��M���NIs�\�G����m�)w= �-F����I(͕-������-d(q�03�%ƉM�C�F�t��S*[\M��4Ձ�J���Z��Rb���C��8�c�x�a��|���+��"6G�v�k�5wx�;�H%���$����d�Y��=x!o�� ����-O�y[����7o�Zޣ��J�t�Q�?q5 ����� C=h6�����4�K��r%▘���.@gic�<��Ƣ�w���!XGZ#J��+nL$�����Z�)�Z������d|>�`��d4��L��%ҏ�y�5�M�DVB$*��͡�T>��__=��|����PK"�ɬ6PK+ MLdist/lang/summernote-ja-JP.js}X[SI~�W̃e����ۃ>���������I�IF&�ٞ��bfTಥ���z��-u��l3 y�/�9ݓL'�,���s�O�k:r��qju���~ߧi���e�Xَ�ݶ[,fQ�t����tMK]Կ��\�x�Դ��x�iijf�k�p�y�q7�B���M#����Χ� ŵ����E���5S}w_!fL�3 p��s��B+#_� r�����Q �^�`J��3F�S`���-p��v�{w�`�i;Ì�����a ��R1�<K��{7�7���r�n����OYKn��w>���"ʰl��,�R��^���A�)�4SY����B0��9�<� �wu��y�# 5gR�$9T�[ _\�ރV�P�"���3T��$�>[��[Qd��D�(z:�0.�k�F+��`�1L�[Q#���t��kl�b��E0\)�,���YC�ܻ-��˗�-�y�p�%��V�7ǽG��ܻ�$���(��hI�Q��@�)@��$�b�x�0� �Hz�c��`-�U���e�� �a�{?�-r4t���'��� �\�Oӭ0�-{ah�{3�/7�!=�{��?��)�Kh�0,O�$��y��Q���36��,�j�D�pf�+jaаFA�$b6���PP��DpɻF��&\Za.1�Z�Rǯ�qӤK��(��Y�8mَ�gz�K����b���=�v&�9�'������7���[����#YC��wk�7��9�#�߰K�>���N��>v��p��7c���u�:C�~1�,�=��e����=�-�@H%��iL��� 8� l�`�D����ѱ���lVctL�q�@}OLq�:*��fT5����5ݢ���)�zzTp���%&� ����<�"��-�Jèi��a��� ᱽ�_y�&|�* �6#j�U�3�l�hJ�{��II9Q �t�^�Z��&͌��Bw�p�uMe� և� �WV(���΄���zT�!�����a�rX�9�R�bW8�R��<�Tʱ�aM�v Ķu-� -��V��nma�����S�ν�1���%LM* �D+�`�A�Fc:�N�`^x'�M�u_+w��,�d�>^7����ʇ�5K:�C���y���lbOV]����%�+��W�ٚ��-� ��!�U"���:2�%�����pe3�t��B�6 �E�v�&����F9,�����*������V`��}�� Tv˯��i�>������\�zf4���M�n0[���YB$4��m8L�l0�<Gmb����r�8#m�[O�Yh �%��Y��t �2��$�d(s2.@cS��(r����)�!�1��頶P��b�Ű����;�a���Ի{���t1��O��#���7�U6��7egi�-��e2�Ѓ ����<x,���ӓp[���L����)N�6 ��e,�L��|�o0z�*w��>�MT�8E���D��*��%\�a�͝OK�*FoW<`���$�pX��M�`NȾp�[܇B<]}��\ჺ���ڨ���c)�:5�p>D>���rHWl��rrL�7l�SM�P��HW�&T�9Bw��ז?��N�#���mRP*��T����C��ƌ�:$ձ���LJuNq������8�7���݊��B��B�A&x�ڣ ����!_�)�U�v�Q"��L�ɺa����n��<����u[��s}3��3�4�y�9!/B �X@��濻~�8�AS�Y��7�_R<ЃЁ�=��О�Â~xO�A?�'���ݓ~LЏ%�2�`�����k�0��<�wN�}Y�� ݤ�nȿc�w��Z��x eP �ă�8��A����Ǭ�r���*�.������Ă��S��N����z�z�FN + Aο�gX�ڰ��e@$�w��S(� �^�<��jg���.a��?PK�����PK+ MLdist/lang/summernote-ko-KR.js�X_o�F��*'R�/y�O4�@���ЪR_��{w&���� i����$(ႂti�JQr�!�/t��Y��uLB��g~3;;;����-�wN���!��0��3�81��Ä�}6lS�<���S���ƹ���w����s����]6�@i�g�Զ����ȕ�|S��5~�Lؖ��<����,ڌ %;+�<!�����>�/��Ӑf�+`� �;����t��껝���^Pe�+ ��$�5"w7a!M� )�^�4���5���A��&|ܔ�emM�c���62����N��x�rhPx"��"�!�m� �1��1��V"?<���j� ����N�<�-�5÷M��vw?��]��q��*|�Gsz�H�%�S��������D��õmmy��Hί� �;��~�*T"%�zCn�Y_��z�yZec�R.�z�ru� ��w?��ݦ�5�t3�И% �2�^�������)��Bk����$V��`gl6-_���л��.vH��I��.�Q�U���vwoO6��i�-�m�h�ZG�<��4�*�Gk�õV��(���͊�%��K��<Դ��$�Um5�ޱ�@�nD��cD!%�$���/ �1�r"��)2�8� B9= ���K0��V�'ƽ��ZSpa�-���k��\L�<� F���l��9M��[�h��I�1 ����brI�+d�V�x��`2(�!��0�^���O˂:C�D�̏���T�he�@��s��"{H�O�n���|� ܌(�{��i�z�Ѐ4�|�C��,�j�t�Z@����)�����h�+zq��a� ~C@�i���+�Ol�W�5�4(��r�s�<�e�K�ا,�/b$%;��iFMs�O�/Dqw�4��ӄ���� ���Y���z��"��%6T�,)�"��Mf�m����>C�45���Rn�X0�"Q��� �n�~�w�o�jP)�9��<&�瘐T͘*F�^'��hĂ͋S0��ѮB܂U5@US��y�L/�S�_k���) ^9��O��3)��N?�����>��GS�hΏ��ީ+�Hy��`| 7;г�l��{!������ЗB�W�$d�0[��qM�� 7���?�����m�ޫ��V[�S����Tr)?Ä�Ŵ�R�q�VaHJ�� 8�pi3?!�7Λ�?t�gjo��D$w�֒/�s|��!H��4�Q���G;yTj����[��[%�\��Sm�9��g��R��6`� 7&� ���V��$r���r����pXB^�hq�#��P��#_VG t�\0�d������[����l�?y4�P�ܮbMT1�ҳ lD@�BjCk�;�j���� ~1��y �b�^bR�@�uxז-���:.�����6�K\8�-���Q��\�0�m;T]�b��5e���hLB;��M^�(b2��J����*���_��d ^rU%���aFT�N�nuLp� )-u�!�s��#~��z>�&ǡ��m݀J��� : *���+ܘ~S�Ь�& �`>��IT�Х��f����8��Kg ��hO�ߥr^*�D�@�1�˺`y��j`�O�c�"po.���b�*V 4*]��Ռ�`U ;����u?���fғơ[��$/�a��*�mL7<��u�Rq����%�_��?�.)���Xvl(qE��� @��ǘG�� |�`�%�d��D�������=�/�.�:�.�i�˞>��>���c���K"{������ȎSV����cʎ꾊��2\�oPԞl�z�"f���x-�`Q����iL�� x�q����/��\@OO�'�C�K��h����Л��B"TN�WeE�b.3d�Fo�\h`�~�Rwr�@��ɝ?�D��w��;8p�z����PK|��F� PK+ MLdist/lang/summernote-lt-LT.js�XMo9�ϯ�Y�����9d���^;�ƒ�X`/�����&{�!�f�c�{�u}`s�{N��Wd���vf�C�&_��U��>Zx5wR��G��?�1��� �=zb}Y ��O ����>c���r:xU2��ʵ_��t��b�17��].��v���?�x!�ؿ��n֝=�2a �D�������`��cM�_�R'�WB.W0g�Z�m?[�}��s2�A���ȅӬ�k�I%ˎ1���2�/Wd�03e]�����s#+:�4�;�+=��qs�=H��Z�m2H����-��+��浐�-���ΡRYaȦ�0���f��~IBf��o|Q���PܲhDs8csƋ0_��W\�$�;��{�~������NR����]��z����b��t��@�U}��bw����K�{�i���ĕ�ģ�}C9���j͋�/��#w�L�#i����͍t��t�˙⒂[�/a5wr��ᇊk�k� �N!���s��3a���ȥݛe��*A���ʥ`ڰ)J=5@b��]���������g,��S/�O��;�����o�u/�D^�)A�ck*� ��Oɩބ,mS{}u�x��d��^S��q���w*@�������\�L��\6�%�ma��G�W�y(Qv� �E�����hRo�r�������c((�� P����1;�%l�j�w�n�s�s|S[b�߃w^��ٷ�{�(*`:Y�U-?F��)�D&�ޯDƗ&>:d�T�J[|C�i�s��.��@]�ܦ)�6�3�@��ӕP�ꝸ��T���ꡓ��� ��F'z!r|F��ƨ^\ ��71�gٕ��b� ��}�8}�P?�"�Q�f��E�tQs#����`��!��\^��L� �����,Q�]����ú�i�D� ġ����U?mV���14 =��rD� �;�u�n����B���V0��� =���"a�pi&W�=/�ީ��S`����~fO�WϺ{�ҽ�ݽ��ދ�ދt碌w������ށ�8{� �!��}*���[f��ȫ��)ZyLz�ʬ�^���U�̕((�c���,���f!�?H��@/U�&�n[��L����<���d9 �a�0��C;*�6hx����>Y���K�Uj��.C��dz�~��7D�3!�B��}0*A(����Csbjp#��� X�R�����o�\#gَk��;:7N��aB�RwmCdy�'�!��2\;�/�i�Jj�{b>��~M2t�����s���c{H3l�P��ES�&h��'GY��;��;�m�s�_j�� _v�S� ��.���g��Xp_DH��@귟�Kѭ�� 4���m�m�F�y��7��FYT_��慶�M��%�R��%-�R��ɋ�S�<<��@�}���e����Ơ�EutfzJPnIxp���[�/�5�Bl��1�d�~�wz�+)�+{٣�� ��qS�xc0���ڵ�M2@�i�\�����m�dYr�%��A��H):]���I�u�%����$0���E�кR��mQG��B�K}t��Jt��Rq.��@B#<�,�]��rb=���T�w5�XN����0�4��߄�˴AR_�c�\7 ����z�,�7F��H�.ʽ�m�@�n�=��������0��so����{S�j)$A���H %�< �V4���ͿM�2�lޞ{4f���㣶���\�Z��eӱhP�>�l:65�/(��U���eӱ��}�@ٗi�b6���+�(��z���$��d:����'� �$4���pdq�O��em0��I|ѡ��b��=��0`�Ǭ�����s��L��d�zt>�d����p4}}5I��� �L��M�F6�J4-<c�^��?�������G/���PK*�Cv��PK+ MLdist/lang/summernote-lt-LV.js�X�r���S UNQ�r��m��R�d�T��Z��V��HB3L�#���A�}?�k�z�G�_C�ɡ���|�h4��Y4E���=���A�g/ԯA�r���F9c�zQK3�օ�7;�4z�? 1�&����ں|+F�*�d�=��OY������ _��T��Fa�B���18�!]�J:��ۧ�T��kd�\�&�MJ��it�=}-��q�Cl�nF6��1��}p�Ra�l�/�V��U�N���8Ο����t�he���6HQkU����>/��9�n��a~1���k�#�NՍV�!�;�)�]�c]w�kㅾo�/n� u"�PW����tA�����s�.(�|y�����p�f�����V��)�5ә���d�ZN�s���\��ce�B���RdQLS�������F4�Ɵm��v4�5�rR:Y�fj�&/�jt!f����f]�;9��l���)��r�5.w[��W(��*6Dl�D?r�)P�ub�f@�jU�cg�c]+O��I{�%h������_u�*��d�n�b���-�w�Y �ch_�E�=�KU�u�fct���R|�<ckN5���rt�}�+�0�uz��$?�?it�Key�/F�h�)K�ϴ��-� z`�u��t� �Y�(N�/&�:K�]��l�ĩz������� �N6��|w��?ӵ_�����0uM����b[��^r���S4��^��Ԕ������a�Bnb��okyL��/x��o����%Y�B��wN =�]z�/�*sj���/ڔ����낸�9$j;�. rJ ��I�b4�Ӹ�w�,/��x�l\���[!�Y�Q�Vu6�GM�yuh��HUaA�F��l�p��]p`�j؆3!��"˘�b��j�l��&"�$/��@��=5+�h�p�����*荪�����f'0�mQ�7�����.<P�D��m�_.~��v>[����w�rk�%_|����/��Z|���⛭�77�v�����X H�\�.�D�2h!p��lKD���B���8v�S^rfhР(ep�)n��BU�g��AaK"�Óɇ3Qѕl���vpV��i}P�2��g�:m���72T�C�y ��Q�8��!�����a�^P�z�C� dz�L 8P��u\G�8��4���Z�m!;����Y-��+C�T4l�wPcS ;��t3�Jf�T���ɽ��n�02� ;0�I�qYٞC �n���q�7�*L6�� �*������9��v�ٴ���f2�#����~ۑ~a]("־\���z%�Go����'�kj{7��Vj�B�f�Da`�����4ܝ2 K�I7�ʧU�o(�H����������2���l��Q���:�^��AsPI��[D^6SJ���A�f&X�,�|6.��zdXY�Y1�� �X�:�Z�&\�e����2���B�;��JI3�=/���6T��6/� �-��@7EX��������s(�A�m�`�{U�O��}&�{B�d�o�Cl�ns���GGYE��Y�GaOA|�B�&VL�V��^�ho��zf}�\v(���w�b?V��×K�mP$���G\��3TLxb5ÚU���"�c-��O��d���SrW����-�_Ri���&}��u�*G�@���� ���_4@�A�Q�{����eO���-y�쇢8�P/H]�y����S��X��� �zA괾o�pG�¾/�� �9��x�@����Q^��LZ���9u��Ѥt�%Ə�>��F-N���IY����l2�n��>��xŭ^F�E{��Yg@�{�f8�V0�pA����7^��.�������r|8ywyż���,W铁��E�(}�[W�%�����?���w�sT���PK�N�SPK+ MLdist/lang/summernote-mn-MN.js�X�n���)�il���r{�Q��&Q���L��4��Twc�� 2��X�&H��$R����LX,�<C��B�NU���n{����:��?_��Kb)�t������ O,,̊eeك 7u��m���Mu���*�:?-�xN���T���IER�*�C/�]��B����;w[7�G!�*N�'!H� �2/�'3j]�P�/H�0��ο̶�??e�Y�K�$�`�d�D2^�'��x�qtB�i���x�쌷@���MFҗA��ZG�́����؋�i?ଃ���d����l^@� �'<�^[��m��ͨ��Nu�"ӾVY����&�*�'�7V�W8l�| Z�+> "�"�[�b��2��2%�8������:�����ԒN���!i�N����r�:�y/���g.]n�}�y:�6`\�̥���*/]�]���ߙ�#_���c����P�2/�7�8g�ϔpW�$�+�bӌp$���.��6;��=��|�F�� 䢢��u� �[���Ȥ���f�ٜ�l���֏��J��E-���YԎ�����*��Q�}��n����ݦT������i���5CAi�hX���5�{�����b�Z �07���f�P �Q��NzK��Vʄ|�D��Ѧ@�������O��"�QeV�R^A��?!��(/��&����������{�A�B�Z�d��;�@�_\`�k��ǹ�)���� U������l4���/o�B� q���OL���+� ����Pw�Ǖ�[6��$���%%��%;|���)�S�S�r֖�o�H*���p;NR���肘Cү�Q4��*I?$��J6�pF l*[�{Fw;հ �8ٸ�X�� .F#x�\{�t�B ������dzk�WDV6m2�#jΎ=����oѺ�j��G����I�ؾ%H���v|W��6�}�Jg��V�3r�M �Z��f��צVV�<_��Sć����j�f��M�Z� ���q��W2�jTmz�Rͪ0�!D�Qa�"�Ti�ӂѡ���З!t��ПRI�11��i�;�J��Q��h8��>Sz�,/��;�� ��i| ~��t�#�$]�� _pS}GRl��R�*1`��C�Y�C�G9��s;�iW��M���Mtf;zh*�LT�D�ݦ0�#d��^��r�пR߽�y��w9��_��^����Q �$EW*��J�S��%I��=>=7^���7/�!T�p��2�(�����B�̢.�p��1Q�R�A�>��ip�!*�Z�8��|�0�����w��ų���4�3��7�-�m��i�ы�R_ҍ��|��{�G���ȍZ���Do[�~�*t���#̧��XPY�(tp�æ/�ޠ'�>Gl;�P����� KҠk��?��<,Xј�V�D@K!R�XKR���3��%�A�8�RlJ ��t�H�l����.r��a���pC�-��\�A�Q�'������Zwpq��8A��V �-����͔Hd��Y� �* ��������^�lO� c��Uv��,�^ZY�����Sp_鴓���[���A���E�$�� Ub�/�?u���$�pK��K� �9�LP��^E�B�}86�={��Ꮔ����=�IAWϢ+:�ݳ�N!�KnF�+Hmt��e��� �na:��O�+1���Z��C���b�>��f����_��2Z����r���P�h��[&"�KzI `E^�3�Z�tߧ��P�. ��ӂ^�ÒL�g_�;�9�{�RR��&�M�˖�t�ԤN��������rW�4�4��514o(�wEBl�pj�o�z1�.'���� u��Db� Z۸O$��%M�&�˛�X8 �e��RL�� �w|�p�q�ؠ���I��ML��N'��5Ť(��Р$��vd�ʀ���A9OL�}�哓#,��}+��=�^��MΝ�J�>6͏wt�3g�:��9��3�r���y�����ǂ��y9�,x����Cς��y�s_�l��;�o����P����a��B��2]T�/T���E�Ĵ�o��u�6����40K�?���|��Sm���N��A��E1��A�U�Me�@�C��+�Ӿ�Q��{yDZ9p|9{uĔ�p�1>O�����_gR��PK�L��IPK+ MLdist/lang/summernote-nb-NO.js�X�r�8��ZP� R�s�,�BBH�& 醩������˒G�;4S,���cs�d��6aA[��>tu_���+/�>xx�y���#���<<rm]��G���Q�3����˫�U�dlm�V�-��_��L��$��s%W�~�Z'7 �չ�Jj�G�vފ*�����h�5��J]$�RȢ��L�[Q~���EBּ&���ʵ��&�A���/�i����BkS�[�ڥ[Yِ�y���pm��n�b���V('��K_{wɚ�}tދ�k�F�� ,�3�5[�!�pPz�*Evj�o�(�2��\�{l���Znq=��`�c�Z�gbMƞ��g^*��ܜx(�n�����>��Kb��L丒7��PlQ,�i��u��ic,��Q��������(o����L���*A�t���S˙���X)�c��4`�a!2��l�4Md:��ʟYS�I%�*���ذ ��e��<��������7��� �WB��G sk�Y!h��%+j�����ۏZce!5'��s�$��&I��}"B�+�.T�hJ�*=�4�K""$0������\~�i�R<b�d-�h,.估�~�N>�� . ��R���á�ܡ�u6���gku��O�����o1���Z�S�ŷ�qN��:/*�^���\n���f�h�*�X�:*XШY#*�{�Q�}�/��R�����.�ޢHm��N���tpK��-��L��<�1w��d�yά�c���k��= ���ubTW��2��5N�N=����+�!����p�S$�dY� T��Q���z� ^�8�D����x�$shݸ)���9�{����݉A �m��R�U�w���9z�&��wf���'@^m�E�A�'����4�=Ӟ���c��bL{��^�i/'�U�y����V�:�u�+O�4��e��г�s��w~�PmI/�"���7���8� !4���]���N+8y#E����F���l8�� ���L�fv��OoѴ�M���䕰�*ِ��|����|�b�m���^�1L�e�"-%�T��`�L;rM��2U������.6�� R�˭��pU`P�Ho�6!v�P�E$�mu�WU�RӼ�������*v�8��C����Ѡ~�����_��a�+��u��N��Q���i�J�X�V�@aFC��9��$l �_�����Q7<o-L��.8�Je�Y;��7ga��h3�/��x����B*`jW�]�u�~,/7������e�� k����1�#g��^�I��Q��O)>� 3v�1��S��|� ���5��x*CE Pt�_A�H(C*�Eu��Gb�шQ�xx�alG�O��m@�GCvx� ���=zn ��)W��� ބ�O��*u�^8U��g���u��Pnzh,>?���cC-�)�*r�/��1n>��c�~@SJ�]O �"5<�]Ŏ���5� OW�I�U,���S{�˙�*��q��/bnQ��I�?���0����θ����\3Lȇ��(��d�w���D�u���ɛN=��{�I�➼����'���W1��1~ ��M�".=�0#�Y�$^�wũ��G(�w�4�/�a�E´x"ȍE�'�C��b�§ڇ��# 3�D�k� �f�F>����oN.�g���d��f� >����vf�(�� ��Ni�����=�zxp���ă�PKw �?PK+ MLdist/lang/summernote-nl-NL.js�XMs�6��W��3�g�yHWNjO;�dw:�D�HH ������ $���:��X�����Z�ye�ыc��OB�8��L~��i�����N�4��0/��蟯.'�P��5� ��:� &��'/a�����*�xںF�*�jMNN+C�����;��$�L�t��{����V�`JRE��LfT�.�-<%&���%yO����� ��ٶ(:�֕R�7�ɜ���|���o�+��Q�Q��m_8k��I�Џ]�T%��,b�:��t�$ҹ2EbQ����~V(sg�4~����j �՚rU�X:�|�x.� @��= ��J�P�y��G������V��Ke6�h��jmk�����ʆ4���� Ҕ�����$���$p7U��ú�!jQ���Hű����Cl\_��(A�N|��H]6��jQ*r��#�,��Nx;T�uP�♳��"����KC�2������ ��fI��&O4*�]Um�ϻ��I� �����YN�����ҋ�D�uś٥��F�l:A9��G�vw��Y� e$������t�r��}���-O$N��Ӕ��'m���u��\�����D�,���џ�]�Kz)nUE��S8Y�gȹ�/��Yؕ~��6ȫL�ÅK<��;|�"Z�(>A�` �����#%�\�3��Z�(.�1[M�х��{KzC�s���B�?��5Q��抶(��-|\C�����B �#7 ��K��=�F�d!��2�gv{��2�4υ�[!y<B�F:,a��%���VG�cPfu[�A�#؎���L�9i� {>�U��+K�`��������BF�*q��@�S���E��� sX�?vt�;YQ��^YWI��R�l�w����7U �9�y*,_�l�*A����u*|�oR��(|� �E�T�> ߏ��U�q�����:�N�]��x�zık�S�Q�`�jk&����4�?�2W(�hBPN0�+��JrU��;E�Q��F�7"��m-Q������K���@�۶��.���v(ϸ�h�6�@p)i�"?Dg�4�ȷ昹o 2� ���/w �3z��X��W+���B�?�.>��mg��l�uɲ+2��07��Rf�� L�bi�04��� f���W=y'j�~�׳�#i�dk��&����Ȝ{�t�'�9�<�d����Ø5�u>k�ö�q \��2���(�^Q��/Ӷah4��A��|b����v�����-�/̟�c`{��3�l��m�V�ۼ#8�����9���y�[l0�Sw}��L:��K�K�������l�F�#ycs�_j�/A/��(4U5��& ����(l�"9���𑬂�z�0G����'���˯Gu�1�[���{�=x���X�k,�Cg�)ޕh���\�wƙ��EJM�d�A�C��ѓ�P�w�@OOB�ɶC2���]���J�%�+,lQ�\�K�Ϡ��|�� ՁV,L#�H�l��cy��4k3��_����g��� �;\l�yV�����]��I��90J����{�U�u>N�w��Wϳ\��Q��3u�fcu�<S7�Iv�o����.;�w��M;���g�Oc�ea�(�ZMl'R�@� ��$�>8SR���a�Js� �����'r�:��?����ʖ��j� ���k!�_x���_�FE���A� �}��'����bz~:;�.>��ɞ�8o$<�żSL�&�w����?������[K��PKe���PK@TLdist/lang/summernote-pl-PL.js�X�r7��+�p��*�*~ȋ�bJC�#�5�BQ�J*�$�F=h�;�7��� )�W����s�&ݤ���$q�}��>u4�u��G����a�щ�� �=:��V'N��Ǟ�XR���\%߷?��_�M�ʾgɍ��z*��"y��t\�ԓ��J ��΄UR�r+6��T nA���ͯPn�L�jB��*���K�<2B�4��)n�ǔ�Y�����/�����i�ZY��+��W���.���>�>J�ɖ�Y�ۤuԻ��d���Ӵ�?,�ɞ�RW=��� �{��?"�����U�P?R��6(f��'�}������A���5��A���X�L�Č�1L�F,#ݞ<n�����7�G���F�f��Dɩ�cCqE1��Z;�y�knr������!~$-���!p������ى.���նWdGkn��Z�G23���z �T�H-���d����2W;;-���_獴VB�Խ��x%���{�B��5�������E�ކ����t��B�f�!��T���P|��2�����A!'��ڒ��2D0�_�ސ¼%���p ���s�9 �n���[� �[{��!R�ϯ��wf5� ��FCZi ɷ�G?�zRO�c�/YC?.5��,�s�Ᶎ��0����PValWH���:�x8-�@�n@j��w��LRv��V���ԡ�L̹�J�WL(kQ=Y��|@$9��q�W��l�s�.J� ՄFuXm*��wd�f;c�=�)���oDs/uf�v ��5L�fU0�S`ǧT:��ɄO����Y66��4��Y���6���Ȏ���Pކ- �L�G��j�#�R��������^�L(؆K�# �"1�B[G �\���V���H��S�0*�Z���oHw-ї���恘�=Hn�YS�Ҳ�D�ʤ��k�* �V��w/}1}m�H�� �o�|��C��IL{ڧ=�i��g1�y��<���i�1�E��b�3JV���l��E}�=� D��)k��A(��!L��hZ�{JLI��f!���&��a��\#�&�ؼ�+�)����L���Bn��1ۼ7{*K��gy�I��[t��弔�[��e��M�/��e��E��#��h�Ԁ�Q*A� �5�/� ǐb�8�Cm>X��F/�nCa{3˲���Q���J:g�q�i�d���9� 2R���Z��������"���+F�)O�9F\M3ф^f;n�4oŎv`Bvx� oL�6���E_![#1�p�/#�lFKt�1}F�9����Z��h ���E��X��u^ڞQ����n�r�?��&� U����/�����0��s@�n�),��_�;��e������0�C=���٪�/t�Ai�c ���Ŋ�zn2�r�/\�Z�{+du�$��m2b���D��κI6�0w��8��)�����:�� *����( E��b���;�%���Lb��q�s2D`�O$a��P�>���vv���>��#v��}�0���'��X ��n����p*U{�<��I������E��X_���5q����qs��EԈ�ab�s%خG�߃=]�l��6�=������ݴ�T��.��j�ǥ�_e��L��'���;~�9�ڿ80^��vz�n���X}�v��a���<��>} o<�$-���̖��y� g�{�@�x��x ��W!�.��a��_��5��t_��Z�D��L̹���O�-b��'��9��V�@,���O��/f�oT�p~c4u߽�Ub�� Q�k�U|��]�]����l4y9����;�7xvXY ��DXwJ��w����_�yw|���v��PKA��cQPK+ MLdist/lang/summernote-pt-BR.js�XMo�6��W�@6���!=�خmح�k7/z�J�]��P�c��i�C�z��c�3�d�VN��"��p8�yf�U�e���=��~#ģu��������.�#�qZ�h·�/�W�P���a �t�z%�s��:��1��:H�K,���|�h+卶 �q����8�4Jz,.T�� �8Qɴ�b�l�^o`Q13!zI���A��i�cX�%�� ��zC{�[��e[zݐz�����66�3�݈c�'�R��n� :?}��k��n��_�(N�f�m�'�N�C{�D9«�Gc�X�ҵ�-�]z1wucT�G���"'Ҭ&"�2R��LŽ�~���o�ok��������L���cDE#qeG퇨|%�v���|���~�=w)�η�;�ᙺv#�pv�4|%��]�\{����]��&�K+5���w7����`4b���u���iי�� J�Zv7��Tn���\�� q�]���yq��f�VU�c��cmTK���A I�"�r���C�e����uL�9�_���.AA�u�c""�M�n� GO��yqF |O@ ��@��3i�Z[I*�t��n�]�J9�`�D�n�'V���p����O���.l��;�y�?l��;��ӥ���e\�����я�)����8D�ݾvD��E�Uܟ�����t���t���h;��w�A)��G�����ޥ;�mc�-�.�O����윷D�4��^��"��F]K�+�({j���j[���=[��:%�u�R��T5qI�KJ�'�8yI�����U�pg�k�JS���`�F Y".'����좗R���3� �Kg��r�}Y���{d*"������nnJ�d;���ـ1�Ix�%�M��AvN�/�� R� �4�6拏(�R�gY����郭,�+�>Dt-8���� �M����J���� .����� �<eO��3��/<g����/�d/'�1� ��O��u�E)JW�Zz�WP���]����$j�.���d��F�����q-F�&G)KVS3P���AW�J]kEa��Z���-��j�1�|0Z��k8!�,@ �/@��}�*�,�ᵂ7($���6��I�U��-�,e����K���#*_=L:As��Rӵ�� �i���#�yEd�C�ҩ�ܽ $!�!^�n���y0���v��-baKY^���Zju���M^<,�t�K��*�ΗÈoݪ�V�-��h���t��9�i �B�d4#JF�)�w�ԂOB\��Q��h6hf*'�*�/�k�kǪ܌��uL���kB�A/Q����,��E�M�����OC�r%�Ն�̋ �� 7y����Sѷ��`ⰜӃ����ȱ��x�ݽ#�M�"P��]�OHo'���k$�ãf^Hʑ�.�_�Hb¢�0�b�n�nGU��''ɡ���=��<?������[������5Z����d���ɩG��N��u�OWnG � �g������sD��//��4��������G"��ȉ'h,?��j�s ��֢zc�����!�&����}��I�B�ݫ�K!�L4c�D����n�ȏȯ�W)�)ܓ��!�g�w�:��E�rM�x���"'O�] 0������n���=@�7#�����^��{�9���r/ ���%��]{��F����~��u��̩�D8�Ҹ��#��_N4�C�)"��G1�� �\�L$*K1��l��m�f�R������G��ٙ��������m����"�ȃ���^!\KD�@�~�����������[|�PK�$�PK+ MLdist/lang/summernote-pt-PT.js�X�n�8��S�@6�1��C���m۰v��ng��^�R��X;i'Y�]v��9�i�_l�"%����8�������6�ͽ��ѓc����zrB�=��ѓ�.4 ��z:�u[>�t������*{�/���֏+�ֶ.ި�-��x�=����x]��K�� _�ڂ\mZy��t!yMځ���ޑS�yS[U訟���LY��lV��4C�8iuÊ�a���3��+gCY�.��Vta���lY<�L�Bp���a%1�++_�F��8A�o��L�K�Vz����!Ѵ96�?�S�U"u�zꚏE�i��p�ک�m�5�]TB_�z3A_�ׅ�Y����G �iT$ɛ��V�+ڰ��κO�\�ő"h�_dB�G�C�[���q��UzK˱�����o���!�FXZ�VUh֭6��^���!v�,��@N��"/ȱ֙s��B���S[��՟��c����Sg� ��S+$�vTS�ϝm�MM��;�sR�E{�Ia;�4��N�6��iBd\�`�N;jY�C���3�,E��Wq"��cO�q��� � ^Ny�R�x~!�:S�V��w�gv�Lw� +����>�EH��+��B��k�;�Mrn�HG�Y\��*Q�*�l�eU����6����L�?-Hg�K����!���r�V6(�o��䔨s0{�i�!4OL�M�w��#�ڞy(����p��G;��#W��t�Z�c�&G�g�6���k ���G�;�<Y�j���uvK�e���n���C�l�e���i�VuK�����5���~�x���*��ba�g�x��P��+�� �oT'#zD�}���}�cQ��C��X��P �P�1]I`A5léO��(�LhbFjR��qc��D/L�U!�GO}'hТU��6�� ��;����b�ma�V��o?L �[����%s��oaJ��30�v����X=���B^H�KAx) ��$���wԦ��ѣ����[��qѨF;�9�V��C ��F�<,sv�bOME5�w�1�7X�T�Z��2�2r[Н!�������y棉vnX(W[�N�1�f�^��o@l����2�&�D!C=�rdz�� �(>+JW��f�o����"��8�0m�9iT̹Q,���y���z����J��G�8bm��i!kJ���Z��k�ߖ�N[��s�H�7�ă��;�v���y5��ꎼ�*��h�F|�Wkڲ�G:mt��@���Vs������U���jL�y��S^���ym;��9�x�9܉έk���-}c)�К���!�7):Ct�_y��4��#c[�L%��� ���)oG_d�#�R����}�ƽ��e1:��A�P�|E�Ƅ�E�B9C �,�?�"9�"4��?��d�%y���R� H��.Qi=��D�8B�����ȱ�=�r�y�n���xv��|bt�����\}��e+O��~r4ՠ��0`c)�!��tr��)0����m��0�ʖ%���.�yqu��]�Q\}C����Ke]a`̓������pag��X�a3�c����6A*���Ϭ�_8��g�{�ݥ<������d'<��>$��;����#y�h2�|$��^�W����������R4]<���P˹��s�rL^�wȩѵ-O��i�_uŏ�D�4� �lZ�X?��������L5p�e�fńIc��٬k�^��v�|6��]���l1���K� ����(W�Ī�W��� ��4*������o�G�0r_�?PK�#t=�PK+ MLdist/lang/summernote-ro-RO.js�XKoܺ��_�E9@��H�tl#F��wfr�.9g��D���)���^tq�v�?���wHIs$M{���<x���&��kk�=��I�G��W�8zt܄�R�X��Ki�O���X��^��Bl��7!ֶ,^���?����I�=��,u�v�R��f0�rXT�_�5��`?/�t�������A����NE5������"=����֕��L�@FV$�\V��J�Kp�a���;g�v��n�V�M�tM�.L�sũC�\�}���Fn�F&N��it0�AZ�}�L�+��\�Z2-d��ɘHm�2xP�3�D�C�S$�<�%�/T��C���mU����e�9�?��)� a �yE��?��9�oJ+��ڐ�3�:������r�\��������sI��ȋ��f'k��x�����Wba=�Ƹ�v�@�+��A�]��Fj�j��J��n��1�S��V�Z��Q8�%�װ ����<*@!<�VH�3 ��u$�Y�ף`��AK��dT�*U�ϝ��u���J��6b���N�a�J~�U���$��&e����~Lv朥Hai0�Er�w`����������E؞S��!�}�g���u�!�ǻ�1�ލ.���.d����/��7�q����?P�#���5GN9�� ��VOįH]K?/��b�8E�Tݣ�ApON�����ޣ�L�!� � �����}}aPg(��� #�@\�S�ԥ�fE�+q#>BR� �A�ӥ$�D�7�3 ��:���{nMr�\5^�2ܞ�V�¼U��Ma?B�j��X���C�Sʠ����; /�T��k��\+�U�(��l��qVȰ�؏ٲ ��Y��Ve�j/z/�mٕЖynQW��ф��`ZMUB}�ˤq'0@'�y�%�Ў �3���C)؛�P�Y�%����C"�&\;�M��-�殩�u��\�6��{�܃�9&n�:�+�����N@�Ҿ���=�y��=뗟q��~���~�G��_NP�ƣT�-�u���.�Ia��d1� z���}ek*01;U�Mg����o0l`R�`���S�~����P7ZQ�-�CO�TK�?'kb�c���*6�F6�3�ΓD�G� � ����xR>dD�%=�xB+.Fh7� �V���qg�uB��a���D:��� m�"�t�:���~�l�7R�*�^ �<�2���yh� �e��RBM�i�a�kI?L4��G�<ۀ�J-� @�i�;�-q�Em$�Q7ڠ�H�2��ZN�P�����}�ukԀ�yp�\C��h2^H� ��6TB�cOa[d����l�I/�%�bHog@�r��w�?`���\(lp���Tc)pP�ɿ�[:� �S"�L�.���@Y*�W]�⚈;Q 9 )C$Y�-����Ĺ�rSHJ$���l��uO|�C��y�Y!�]������xC�4 Lo�Y��DOn�t�t����Ω� :M6�xNi{#�4�` <��6�=���/47�w7��C���D蹝z�X��Aq�8L3-~�$����u�y.����Q�#¹�B�B@��ky��aW��]j�?��A&�m0$��<u��.�Q]��q�$�vCރȒ;)͢iP_�5��{w;��᫇�q��T����Y��?}(1}����C����?(1�:�%��VG���/��R|��'�E(1�>h����r�.e���A���Uڝ�fD�u�ՙJ-(�q��A}����:���Z�Pi���r{!��l>[�櫳řX^��/f�g�&�S� ~a��9� �n���e��/���ӗ�G~ ���PKE�w�O�PK+ MLdist/lang/summernote-ru-RU.js�Y[o�~�_�BDcK, �@���ٰ�I����L�{�'}��FH�f1+[A���zYB�ʣ�1��_�G��:�ӧ{�c��lf������㱅�kF����e�=�����;{>��]x~�λ��>'�-�ğ��i\;Zւ�E�7˚���U��<O��j�6�M���t=y�8�#�?'�]�I�g�j��>Hv����k��u<���k�� h�Vӕ����쀤/�W ��+}��@�d�J��n���S:�iw�}#y��C�C��ȑ�g� �����\��.�gQE����J�'4�nχ����[8魜�ޒ���N��>0�{*(8�&;pٷ'�8߈�?%�ɻd�,e7d������mp0 ���Y_���/TA�@z{;y 7�$,��UÚ@���f��yx���j0���C�S���� ÐO�����К��/�X��� RY��r]�0�\ߎ�ՂX'"=���aJ���hl�D�f�:��H�a���I_儙Ȏ�Z|��ڗ�Z���<�0� ;vO�,!����ˠ߾j13�[��#��{;ݬrO:J�6��i�*�\'��{�#�4��t��+��r涚L[������[��)�Fϙ�$��� 8����Y�ǧ]+�{"�f� �*W5���߽�*��XK�Y�Cx�����e]�k��lV�?Hz`�HK�bP��8�oa7����~N�$�c�Y���G�#ygf�����ߕx���a�u�N��lI���.r�@�F��:-�`�=R��yh䈼�v�E��a� ,J�)C,#�����I��^�S���1�'?����9�NW���×[^����V�~���٠����6����l4�p�MpI��^.��7�U�ɰpG"�ǎ�0����D#��N�s�%�G�z|n#~�l���ͮT�(�Mb���o!�f��w�B���{�Yĸ�\1d3��&�~a�Hv�������كF�o��Jr�Q�t�՚��]��J�{�~R��`�PB���f��r��� �o�uޯ-쓾���:n�����XmVZ [�,��m��'��e(`Ts� �A���}�s:2C'p���Į�H�X���C�q�R2���tc0 ��V��R9_��O�<�'�=������ �y�o.�9��Mڟ����J)��]�T���da{�1��N�=�Is���Is���Is���I3QO3a�\���2�i� #`k����p�M���Pݲp0���}�gl�n�(Et�����K u�+�ڃ�,�����ߕ�h�nJ;(l)�@�� 6����()��L㞶 �2�U�z6���a)�d<��C7!A�;}h��QKq�c� ��؊��W�#�p;`y `��ƌ��_��f�4�-��tS3`�e���?��8�4�6q���>��/�TCS�ŒWwnjǞ�UF4���:��&� c���������]iEXE[�n�K�}��#>��#p��5�w̻�u3�*����6�OO&������d����Q`{!r(WV��N�gMW���PEse�2u}�Ǵ��� vl�J\�B�����Z�cW���q�+VZnu3�����Q3��""�3p��^���dɩ��cC����Z�NK �A7��kG��){��CdU +#;�J!�劆��#�ߋ�B�Q`P���3[~3�"쳺��BP��6Ym%>�ؿUK�G�(��^�q���5�(���-r��-ULӠZD��{���p %-��J�j��*�rN�q9VAâ����k��~ Ih8Z ��b�E3�9,�ƚ����;?�^��j��˺�g`��I�!Y%��)A_�}��'Ixbǰ����� ��py'�qyWR�t��qb�m�P���z���.�s����62��T-\��U.gR��(I�t�\����W.�Wn"����Eٵa�r��⻓O^Әɴ^LN� '���m*�F������O:��n���a��M?b�����q��U�UWم�FV���c���(��nSy�:�\�ot"�Ȯm'�n m9VȚ�&������Ƅ�u{܄ }�ԅ�~�2�O)��Z��K��in9��˧�inE�̉S�4��\�Sʼb�H����wlw&v���5�A2�ڝ5쳂Lټs��خ�>��랈e�`b�ˇ�>������t5�N��� �L�Š�n�٠�� -��Ia4�!�aO5��d�[*��7foߘ�umښ��6smr��̬q��7�9�r�l�j�V"1���pp��>���?�?>�� ��PK�*�uH �PK+ MLdist/lang/summernote-sk-SK.js�X�n9��S�@6�5��C����1lر=���s��)�i6��&�X������as�= �\d��|��V���s��ů�d�ꫢwf^'N��d���cO��G't��d��y.�6N�)��O�<c�2��d�263ڵ#ƦF�o�`��>����Z���+�`�����%��N�URL_����6��I�%��<-�]�jy�_v��_+ֿ�ylp!�|�} ��_�o3ά�i�#k�!3������b�lgߥ����Y7߱!_!6�#Wt�+q�53%�]o�vΧ�K2�s�*j�U���'^�,�)u)l8�2�_�����҇^):�K��-[6��U�#�f5�,%]េ��:Awr�o��Nj�|@a�w�bF�̥(]����}�P�Q}{da��<3!h�+���,5�2�r�12`�c�a� :}� �E���j���,|>�\�Kk{�6��^ �Q�H-�� K�"���q��ȿu��5EP��,D3�M����R(��Ck�C�D ����r���}jl�G���Wq����T���� �� !�H�[r���>['#��͒�0 ,�3R6VΥ�d�l'�R��� TW4�S�3��f|�HGN?��Nd�=M�G4U aϒ�w~4~��)���0�18֥�s����t��3���0�d~�w<P$6��C5���n��-�6�:c��}o���"�!Y)�0�:���ȲP�|��+��z���d��|t��ֿ3�y��i<�A(5�T[���1��)�>�g�R��.�9͒�i2$CBmǀ�SJ��K�`0�S�/����\�O���OSf�5�4�Q��*�AMi�E ��9�@�Q>�L��z���"bzS��7����,2�Y���V�u8p���@�C�]�o�6tBUq���B}�=���PQ@q��T`�g��ꕾ��Se��g�^��t�ۤC�E�Ǔ���Hi��%{˟���E+�_��U+�_���=g(Y:$}�P����s���ߣX"QVf�ynqw�B?#�S�ڎqSYtZE��0�I"�3�~t'BhL�B����I�Ĥ)H�v4yw�2r���GŲ�@��0Rk&��x�"�a�r���� Ӕ�Ns������(��ZU�k�"��Г� ��=GOH�-K� �_:9�Y�L���ă�Zغ� �V�Ϝ���l��4&�܄�>� �a��<��hQ55/��� ��i'=f�� �n�i�%���υ�b��+�ԍF�R 7� �8��?+��:��ܭa �B̸W1�D��mAτ�H+ƺ�C��f#��z�8^���++3�]{-Q�$*yϗ�t�T�AAܡ[��S9�^�?Mǯ�G��g[�Ԥ3� ���$���c���O�UN�.T�|�,>���G��ZY�c qcs�_Q2�L��Ly�u��G���P�2��E֪��#�= Ia,�၈tD͈���a���}5���B7�>���k5:�VՈVKJC<<ј��5AP�o�A���s��55Њ�����zJ�I|�Vqs�ԢST)R���-��F1*_��+��mi���S�>�?�����M�%�a�r�]�؟4�C�K�YHa�yR.� �Y"�? J�m�����Yw炡�ލ��pG�g�(�k��ԍ;�A��⑺q���|�n��4���w?���G꾎}UE�^$+�Ո�� �Kί'������X9�\���5)���N!g�D��,�Ƣ|��I|�k2�D�� �k�RC�O�e!PS�;����x�� ��G�����8Z�z������+�,�I�<7�%�������>��|��{��?PK�v��Z�PK+ MLdist/lang/summernote-sl-SI.js�X�n���Wp@6�1��"�r�6��I��� �]�(�I]�ñ�D~dV��)vK]Rˈ����S�EMK�ƻ����ߔzqB�r�ы���2 �tb�����J�r����Y*5��hWJM�M?�ޗ@��d��)�5 v�=ܓ�+]J�Gؾ���}(��̉%��ý���Ě���[�2� Rܜ�l�zC���Re��*�-љj�F��Jz^��b|9���{�M��I��b=�y!;&����M@�5��!>J^(QQ��؏��L�g��4�� ��������ЕQ9�� �C���Z`�ǟ&�Zy뼪;:��N��2I�$�Z�ԡ �4� �^��u�sj�.4�C�b˂����Dа��3����}�1�>Zoe�H��zEC���A;����#"�oⰅ��}�x^f� ;���%�c��" zv�W}N!j�g�,%�����"j��b�(�)-�� �����R��zB�.j�V�8�W�����,�:l��5�Ł�4�S��â�{Bߟ�2�뮇�[_Eä�@���#�)2U�n��`f�`L��I�ʤ�eZ5�� o{"}`�����w�r?�"�R�aT)2jd��2 e�o�迾�z�nLF��=:{��`w_=�n�����,�;�DM��m�רW�<@sF��5�[�Qj8{�>��؟�|e���Pa�SM(��(�p�H�"w����K�-�\�+�n�N�)�te���pֶNh�����W��t�oO'�ѧi���U���(5�#�h�Q�v���eJ�-3�,�[��f���K`J���3�/�� 1�v�V��qc�jD/t�5G���ڏ�9k�~��_pK�yq��톀n�g2"V���(=��K���1<Hg�bA��Sy{�WQb,����[�kI���H�ۖ�V�ߵ�w�������b\AJ�>-�H��o.�N�#:��2!T`T+q�#�_q!�Q3'������h��J�v��5Y�/y�p�6�)4GF���u>�:PK�;]i�W��� bʣf�jgn�e����2��ǟz7a �pUx�?��Ă�'dž�qyzd�9#.^p��cQb��r������ݿd#���-��H��gb�uS�@-ԡ��0�1�op�'2��r�����|Z�*Ӆ̈)�0M��(n�9.��(�Jl�,y9�_�0��ʣq�*̍{h4ե��4�jM�� *N��`h��74n���<��L"�M�Ϲj���� ܃>�����K�8��F���q)}���'����'e/�����u� ���c~�o�Ģ�vu�����5�j��x��07�a�Z��i���3����bN��Ю2$c*��CVD�������P�)�D���!��G#3��P:>!U���~@��z���0�-tK�w�z-���U����3S�Sb]`S,x��B�3�L��^��*���5�Ip6�X����o����qs��N�-f� ��v-� m�Zbp]�=m���b���˺�+̱I��mr���������1�L�9��A[q��_/�_/�t����=�R�����w��y�����~&��Qz �g��9f����r���{&���6���^������9,-������ �#��o�3�1e��C�2��j��7����Zy[?�����.��Xܻ���|�������n�C>�/N�~:<�? G���M��t5�%�"ю�:ܞ!*�����ۏ�ş%�;|�PK�պ��PK+ ML#dist/lang/summernote-sr-RS-Latin.js�X�r�8��)p��k��2'G�ˮ8�ǒ=5S{�HH�\��cm弧<ļK��k����"�u����"ؼ��<?�}&��#��Q�8x~T��TFi�/"]������f�ڥg�~%�ܙ�Ȯ]���^Z�����O7��ԏ�o��Q�-�7ڪĺ ߿�kn�� ޮ��Zԍ6n����Y)�\A��N��J��^1��%�q�ř,�ydĺ�z���wa�"M��}3���:���C��7�*�b���%%��߿���D��~��9L�r ]L뿴�M�^s����'�nKՐw@�<�j�x�!��tG�P��,�$i��_��~ �7*�G��^s��8�\�E�j+���7:�jE�M{a�[Q������x���ˍř�z%+u�(�(���|'� �|�M�G0����G�V��[��c����>�U��ъ! /�to��ө��M��;nS���`O��DἘ!1��Z�7gޕgڨ�+���e��]s�������|�ҎX�_Px0�{��;���P_r���#�<��@���\�W%��.��"�y�DB����s�](�Ӣ�@�4���ڮ!�Nm�X#��1��:���H���\FN.�����0W/ĝ.���Ņ���|!NJ��[��`X�Ñm�Wж����3�FJ�-�)ؖ�u�fHV��Y��6���;�ue�#l��u�x�BQ�[�L>���V5BƫftW){a?��ߴ-��e��͊ �۸��0���s���v#�!� �xY7��d���(�wBҚ)�PJt(�rC�ę�V(w&�5k�S����!NWX(�`�)��Q�; T���!�� � �^9k���=�+�{K]Š�"���u�8tw��M�]�F��,���q��?U� �:���u�+���K��K#7�^����j@z�I��ל�f@z�I��1'��ގ�jt� �{��<�<���9�u*��Lj��03�Z�@�-�UT'��!_��}���@����%�Wk'rD�R����c��hE!w�E�aX��gW��� �Mo�̮`�D����l�}�I��`�B�'�5��7y/�/�*Z[8@4�CJ�*&��frj̳!?Mr0.�z]��7w�HҾ?�y��z_`��̨�*0c`����}���S���2_/19ZAރOTn+4��Ah��h"ek\K�J�2��U3��W�����`Ў�y�������E�n(��}T��4y�wS�G�q� 6�!E#aH<�77����y��͙�lm���]: ��+2�S;Y�zp'������IS�F�f��`�y�p�Ɂ��ˏ��=u���Bz�s�)�D�\��wW�Js�\� o��v��u#?X G�[��Z4+%<��T"yQ�P�"��?����Ptv8�ݿ�Lz�Ô||��ͅv���s�G��Gsy|����=x����1W,S��E�GJ�%��}'���ti�u-�J��4U���t�ac��!�^c�J����k@�hM�0s�%F�]cBw�]]�Jmk��mU#��Γ��T��<x*Cb�b�c���E,�?eX�l��'�� UP�#�D���S�j��5.ow�5����p�/�&8桖��y�H�������g����y�P��?��O=��'��J�t�'o�@��X�9Sx�0/�#�TK�,Gh�4ů�ľH�q�D,;���O��`�Ɵ}����S(��D�Kl$��T��g�&?�Φ�&'�br~rs2�}���z�#�Ԏ�m1ME��Gx���}�+��z�˳������7PK��cPK+ MLdist/lang/summernote-sr-RS.js�XMo�F��W�H�#�?�sR$V������pzf���&iYY�G֛c,���H�<�%X�Zڿ@��}U�6���hf�|U]]U���yd�N.-��$ĥ%u?SI��R�DZ2���R$��e~/D'5�lw;7ݣ�d��=�o�N�8+����M�s1)N���eL`��LFa@�g��a�8)��y�W& U+:�P�TDJ�*�����ʼn(�����cQ~G��x3�T8��N�SqR>����Џ��8����ɒu�T��8����if�]���·#�:.��i�{Ӽ�&���귯,+�!�O>&�����{�k��N�����X!Cv���W^�o�$U�}��<v^���g�Q)�YϣȮ��u#���ؐрH��|�����>nA�̥ɔ�q}u�G"-�-5pv��X���MO�3|�ʁW�HV$���Bۜ��� z����Ϯt$�j[S�^���M��%2n54H�f�gQ;�<�%2$G;}ӡY�����C�nR�7��<zI�J�*����,x��+ a=faX�f�Xpf m����*RA�nt�F*�8�6�o����� ������L���9Kwm�nG� ��7���1�R�%"�@)De�� g����G $QA�$�b}�]�d��a�Jm�a�H�{���n�{a_iS��$�N�2��V��+i�Ù�����o�{��6��.���TS��h��P��.���Xi�J𰙤�_k���5� 1�( ��/��z�ZjJ��ӵy�<w-pBcS�I��=T�����Qq�͖!�w�Z��#�O��r�j��>�/�/y�x特$:�JC)~J�)��f���c�l&_����I_��4/� �hs���s�A4�&�K�w6�2�#��=��r�o��ON����{+=��+��0zOHz�,���T��U�=7Q�:r�K�@Gy��D܂Ut��7F>��"�w��?2E�yj���o�dM���F��}�r��P�k~~���� ��~��0m�#���p���/6�g���gAa#�D�E:�[��p�Q��O��}�����#oxt�� �o)��]�W�!���k��|�y��>byb�Gܘ��ъW���Y�hN��Z�@Q�6����3��>/�pO�]����v}Nfvo�11Ycꑊ8p��~@�~��3@#��M���e��L��RCtV�L&�7`fO2�}u/T�T(-P7����Z6���F��r�n����7��Y~�M�k�����CJ��g�Z�rpZ4��Iy�:W��}��]uI$��F� ��x����Ăl|��g�8O�������,0��t�h���n�`�>�h���j#j�E�VP�pzG�'X�A#���ۓ�c�d�;�!�ӏ0*����z%&��� ��-bp%�a@fd�"%*��N�5��KU�sQ,:~�x��l��5ʧ�<�<�%���=�`����H�,�!U{����n(:��~� �q"����|��D:e�⪫��֯k�,�!M�;g � �5%m�e��%��I�t�)|���v��pgc�64�u�Ljcז�i5�S��fR�Uʛ�3��j���/�x]H)�*�8)���-��dW��ck坊|p�A��㢨ǪS'.�ٚ0w�R����d��M�c��=[; s�n��(���W�'n�.��+ �LH��\�}i{%Q��sGg:����ӡ6�q9PK4��R��a���Vqˑ��юި���� ܮu��<[A-��v��2��� I5� �ys�*�[(�$���C���\P�� �r�m���re�%���m+��i$� 1��n��4T�Hb�k� �����$�:� ��N���םwc�2E��.�8--��[�ƕ���Kn'{���~��q��.(�����a%�|AY�e�do\P���+�M8���<m�"=��P�a��e:X��2��%��=��[la\�m�D.k���O�C���(�3~Oeƛ�H�~�պ�6�� ��Ic�ӽskuseK�n�l����m�{9CK�[ѵE��i8�O'���?����7_����PK~jP;PK+ MLdist/lang/summernote-sv-SE.js�XMr�6�Xd����.�EǑ�ȍ�$��Ng��H�� ,@�q:Y� 9Az�\@�JE��"��<�?xo�贖F�=�g���أC�:�{t蚲V�Z*����X�V��'ɫ�����u���ܨ�KNE�@b��5W2�mc�\E+�΄UR,^ѻ�mSAR%���c�C�-y-��yZ �/a�����u-k^���H!�iY��A�,D���ɗ@�ڔC;\3w��i�n�#��`~��~��9��6V�"i��e�/Y�(:��}����*ޔ�NX��L/L�ټ�l����F)@�\�p����s��ս� ��:`'�-���m&2����c���łl�������6i�m���ߏ�4>B�t.4���C�D�7��W�%�@#iT,|�f˦�k.�}��-i�����+Bd��gt�caI�1�۠�bKGbfM�e*�C��fH�H�J���5�T�?�k��|��F��e������~�}��ħT �È���sz�j��eiV����zw�X�K�IȻ�u�+� �GKH�P��"��ڹ�E�,�h�ͧ�0�����!���e�O�̚�8`e)=4>ΐ<��<`���Cu� ��c`)����Q&���,����hǻ�Pt�z�[���D&}%�)�#�Q83��U��bs%j�Αٽ�N���B�eW�s� �2�5g^!�D����J�3})n��:37��VU�K&��[�,�?|5���s���9-q6�S#5<�&��h��(˘57���Z(o�Q榏�V:�F5�f �o�T��_�@T؆�#�kA�Eb� m�jP�`������Z"�;O���9����6�H�~W����)R>����q.ΕI���Xa(��^����b��I3GfO"�˧�iL�џ����yL��_����`�J���y�������EM�8o��˦���Y��~SQ� _ E~��ؙttLBh�R{w�r�"5�XIA�4�]�?^�l(�8��f�nO1�=�n��榩��T*.C�n�-$E��ow-S���F��~���;.�6w��@��\P���`���#�p�ޭ �`� �]^��f�=��x��A{JEۯ��E��R�D���nW�Y�E�uR[�$��B��Ƕ8Q����0/a��1� ��A�Ԉ�8m�"ʼX�Fj��`��#t�� Bɡx�i�Λu÷X.LY���g|�(LaKo���;��F�����_e9�DE���枬��� ���e&mJ�|�]rl �����{,+ni{'�� |<Ҹ�J��M��J�9�z�ѺA=A��\�)���)��4x3�k�B�<E ����F��+�YA�;b� d���a�G3���e�C��!; W��% ѽKZ��#���q3:1�p�|`t[*��o�Sub���q %-����uE(S��}��`}պJ�|�� ?���ڴ�s�b��<W�m[�o0�c�.4���? x� O�߅b�0����RĶI�WC%�8�|�)CH>�yb-���U�'����w8���C�~�>H?y�,��ny�>�7<����y��d�������}�@�x���| ���W! �?cT�jҠ�C�%�fȰ�,�D^��DZ����7�4œ����°x"ȍE#��'�C���j�.�|*~����gʁ$W��f���#'�'���s6M�F���4R��d����i��R�DB��*����~���/�{�ao�PK6�ERyPK+ MLdist/lang/summernote-ta-IN.js�Y�o�D��W̡�&R����B�*�-I B�2���5�=��nP� (Hp@ʁ^z(�a�^�_�?��{ol���Ͷ=l��~�c�k�2���.����Q���0Y�v�J^��q�-̕Dg��]�^��ݾ�{Ͽ*5�YѼ)շI��ͦ�ͦ�g����'��.C������z6��;��1���ٓ���"�83L�m%�i�=�>o3 �3�>;;�Mk�P��ģ1����g�?a�R��d�M�!�#ө���l���;��?��?fg�y�s^���cg�ј5�"�����RZ��<��b+िiO-?��ĸ|��lۃ�^a�P����3�Ǽ�,0�7�e�A=���zC M>ز_��!��n��Ɖa���ev��=c����3a�!��-��� ��������� �°��!3�rI��K� #�:e�y���3L�.v�P�'#x[�b x�O�� d����ޜ��� ��3��B��9��?!5�f����zbv-埤2�����%[O��|�*K،���2/`��q��3K\Q ���e�z�l����%U!rz�M`�2N�>����R��{X��nM��g���/� k��4�w�M�Ɖə��2z*TI^ ���)>�9l �IQ} 2!Տ�d�{UY�Q�a�)�U��щ��aJ�ɽ㜭R�c��8_e-���:!�h���`Qg N ��@�� �U���3�I��^���Q�i�y�?���826��~��~F���x@��b��8;�q'�-6U�AC����"�����g�,)�o�̉�d�#��}f��o.�O��X���e;�=r:��n#ɏ>�4�(����1�MC�wxp�w /�-e�D �.������'0+G^��-0y���q>I�Qt��@��^%�+�o/;1�vv�~g�=d�0�"�y�2��H���R2��!��Oliyډ_�����D���� XGѮ=��KznD�r�Piz�P}`6����{�j�&�7�&e��ݺCV�� > #��6��6�taȲ@�B[�U�� ��-�vJ�wc���q픖J�^���{Ѫ�5��t���Q;~�@hQ����B�ģ#A��~b_�8/0Љ�C�&HT]m*lC�fE�Tx��N+_e�@�/uB=QW���]ɮ/$���XHv#$����fHvk!٭N��8/PA����u���8F=��{=�=����V`��<嘆��-�&��㐄0���j�!�c2�$b��"2���%�G���#�)���%� �0�齩�k's�������6F��pز�_A��2uဘK-�����Q��4���aq�*�Z�����=�a�c���T��\D9 5h�2r��;#����/ʼ��҄`����+��T���G`gh?lJ?�=�K��T���"�Z_%�cP��9���p��丂p#�/Y���j��!� !3�y�u��Y�U�����E������B��bE6�0)��9ֈ��� �Jz�y�f�ˤ���a�[?GI'�uŠ��&����U_��z����.&���u�F0l�椻֥�(�lIJϹ��ݐ�xϜ�`�/�XNuV"����[SZQ�+̜1�Z����)P�' �`���H@�E�Mp���#r�zVx�DF w��������&r\��f���ur��C�5�*�F%:/0>�� 0=�'&���H1�P�@��2���!��.�a�J���%�KņJtt�� i�ԥn��5��.��)Ĵ�[��w������J8� ���Q��nr;�H�9,$�1���~�����*J��]B���j��B�v4J��E�Kh��ݗ�e��O(ߗI�}i� '�A�Ϊ:��j�)�6��P�QC�Ĵ9���U�0�y/WB�t���z�(�`�C�B�uu5Y���y�����=�{}E�p��xo�����y�I�⽵"��W��-\�|��w��n���Kڐ��} �L�۱N�� :�!1������� ,[�A���T�Z�Etz�-�"���n%�G@�SGG>1��&��ro����������gw/И�E!�ԞHT�Dw�eL���c����������PKXq�d� PK+ MLdist/lang/summernote-th-TH.js�Y[���~ϯ���E}Y?��v��.���]�A��P�Hb��C��Ma�v��և<8 �i� 0� @�B���~�/��$�5K}�̹�w��,����6��_S�ܖ���x�qn+ɢH�ؤz+���y�]�^:y��Z>*52q�<)50�����E�S�?/����"��w�?Aꅁ�B�Q�?��E�u�?�,j�f�}�<-�}1{D�g�f�GB��gY�[��E�M�ϊ��bv���k�5��w� E�'��|��@�3ښ4A%�@+�~� � �؋��W�-Imp�Ӊ5�x��7���=l1��o������v�|-lI������=�>��L9+�"�� �ټ[�5��1����,��� |����1�m���,����:��׳0�}�`$�@uTVS�|�bV���.,�g�G����BJm��ua��|'�l�]�-1� _ܖ£�x���=f��'U�ʴ1����?�����owJf(�g�;Gd\_p��a�R�g,�xS}d���=�ǫ�\�3n7�8^ �=ϣ��,�^@I*��K����FO1���*i_[W�� sA�p��ʎ0�� �7��9����B_Zۙ)o����*.ke��0ѡ����D׃P'�3)���y�{�߿��+:��Q�j��{˭�4+�v������j�#��_k$tKg��:��e����ѡ�#�5Dm� ���:�A�8��ml0b���Q~��3��`��d�ŕ2GK@#M���/:� =�4:ߔm 7a�q��%ԳB��7��Ma��2�R�l�g�~6���_�H���p'�7�^t^����e�M#?8������I�ى&z%B�а{�5<N�*�� ��@�P���j3k���zohGb�����+i�à�����}���o��dzg\�+�}���هI�K��Q`�yf'�"���<��%W��Y�*��{� ����}V�Y0f��m}�n�)�G�5�a�d��A{`;��t���:��z��X�W-̚�DD�����1��p��9U=wP�![[���F횰l��M�E� �;�� e"�C�6�g�j�L���ح��m��]@*�N�& �&d�O �Pit���EGW���3P. 8�̪T�4� K�\�ȿ;H�����O��anĝc �S�R����qr�5���_�R$��b�E���sIb./�\���Řm���s��0HRp��,6���ϴUNe���2q��qs��`�T�����J����������c6�9�J5�l�#�0e�aӿ�1Gنc���+�fpFܓ��7C};�L=Dyh��z�qQ<�O=Lo֛�e� �XD��l�K�.,7Y:���f�mՓ�¡�\�"T�]����+ܬ,�P����Q��P%�����;C�,�c[c����gI�\�����@{Cn`X���I����a�_Uk�V�zC�1�bWx@��>E��ӝ,6v�^�?��矌�����ʯkg,�A�ˤ�5A�Wj�8A�Uu�p�;Q�� ���r�D�����WH1r �tދق��j�xm�.��KE�Ta��#/�9�=&(��O8 ݬ&cS?��&�� ��6�B�q��i�C��R��H���yi�c.�&����� � � �P��MT[�B��_lM!��� gh�,B����Z�9��y�s��!������(���:�C�9o2�s��͊7q��û�HT�Vݸ�6���>u�҉V�����ȋ� :C��(�R�aH*��r�VН �Ty|�x����ίA��.�.!�����K]t�Ƭ�h-w���XW;$�����w�.Y�&�J9����q,�+���*�kK�<�VX�K�t�U!��w��nnU3�!���w�l�h쑆;�n�*'��LٔI� ן�M�����l����Lܞ_*��P͓��Wкނgܿ�\>Jy �W�qS��ySn�p����(�R�⚲r�핲�֔�q%{yMY9)W��k�� ������+WM����-�GY�IOIahI���/"�tS�x�o�K���1>�!֕��K��ec15�I|Qp�.����A�,�L�n�×%��n2�>@�����r��݃�C���s��ۿvt,���s�[T�N���Fux���_����;��g��?PK�Wq��PK+ MLdist/lang/summernote-tr-TR.js�X�r�8�W`�*�Uw���^Lٱ��$Ӳ&S�$B"B�Ѐ���T~#��ֲ��MV�I��9�D�TeK��\�7�7v��J]�=�g����g�w+�d��A��\�B[q�x1y����۠�����X����P��ֻ�j�X�4���+9�d�}�"�+a�,��ʮ��O9�JF���@>��+IR!')L��q�6[~�J�)�Z�ω���?��XVZ#3aS��$h���.�n��t�rd䔎���N�ؖ�M�� �����;ౙ��Wy���e2� ),�Ã^_�2� �R��^=6�=/�R@�3d�U82��k���|� �o�+(�?�t0c���c�8K�+��M�V�oa�j�מ �3�,�*Ax#�2�S�ה=�qO�L�%��7�rA�ǧ�Y~yZ�.�/�ANEz�\�j��|Xp��psЎ�'�lޘ��O����]C�^8�g��˯��LƵ�=�h CPй��^�Y��J��Ⱦ4:)�(�v�K����9���y�]H�7<C:��%^�J�u2�Ҹ2FSlUc�i�#NQ��!�����)W�ƈ\?�c<L2��V����]`�U;%� �㒩�ޓ :�?��E6/c�2lS\�*��j[�65��3��{�n(���2����(-��?gHC5{��+3uhdn��藰���{�b��Ȃ�K��v�pE�`{ՉDR��LK�_�h��I2З��*>�«��z���D.2&[�\Y�2���ؑz*���[��_�H�G����PU�`|�g�O���kGUz��I��χ!�]� ެC�����[q���~�U�Q�����f{L���x�0��d��xC&���\WL/O��0��JQ��69t�-���8��ڊ��5]^=�]P���5� ��pDd���a��6t�H>��s��z�Ɔ�B�j;��ңXrK�c�q,9�%'��4��ƒ�Xr�IE%K�&P��ڠ1���L"���J2��F�u97�^U������G�T(r�=7�q����Q@<�9jx<0F:RP�]�ܲ�tW�)�A��bw�_.z�G�#gigA�c�4��r&���G�w0�)lģ��p���wI�e�$�vǭ��WZ9��u�K�2mW���iX��t$�wh�F��k���<�l��X�Z�!e��3�&����L�mu� ,� j@,�X"�-b<�c*��o��� �K���)��f��1�ԕ�ۋ1w�@�)im�� �g���Rۅe��9(�^\?��y�U�ϴMd�H�z� ��8h��&���b@�O�.p��&�����pWhYqal�����c�M�D�\�߅�my0��1�w[����V�SK�6��[{��pe�4�ElS\��N�!�4!(3��ı�0�3�B��b#�R�@ar[�^[\���f[0�'[�(���H�[FzH����H���*�{%i�� ��r�NHѥp7��ӆ�!�0�T��hw6�e�Yu�Hǧ/mXe}�چ�]Ce���6�_1��˺;nӠ�cC!�����s�f먐��\�[L3"�:庉�߅��mͽ�V5R��}�UE��S�I�2�O�-�F��~F��--���&�.�Z`����]������5�%?S<-,�k8>0^~�o�Yv�^z�+��N�G�<ڕ�x'�cP�Jy�� (Ov�<݉����R��DyʳR����=w��Ը�;ܧ|h�ۍ<�[ۥ�JO05?�B|��g~]*]������=�S��6�s�IC�d�¼�F/� 2�χS9#��"�_�j�����J���oW�۫~D~���s��C�Fc��k��O����?}���f��PKT�E}h�PK+ MLdist/lang/summernote-uk-UA.js�X[o��~�_1Y�\��8��$�Q�&�K�}����5�Qy��-�v6��X1�X7mQ���Yʼn��@��~�)�����|��̴b��Ɵ�2����RW��H�͙+�a���7����=�ߕ��[��\���^�j?*ޔ��yKՒ�d�|J_%Gɻd����d����A���F��6���t?��~$��~S��k"y A��)Ĝ��CrR��X�>$�� �K�*ݥG�!}�ҧX��ӽt_h�h��j�O�����0Pđ����A�;]�翹 �-�wKG����I;�.29��a#p{��6�#}�{E���p�JqO�O�E?��3<�wl�?�Q�k���ݐ��Q��Aɐ��. Lph�}y��&a��:�do�!;����¶�����c�z4f���&]�m��Z��)ҧ���d�~�e��� "� r�LṶ yZ�q�U��=��(%�>�0Ϧ��r���A�c<��a�D� Y�m�����=s��W�5p�Y�Bv��^3T?\��&-����QRb'o�:��d�%7@5�{%�ϰ�C2�T�щ�u�q9����b��]�s��$g�I�t�h��� nN{��pYl�kJ|��/� *ѽ��s��P]�s��Xmn���C��Ft70ݻ��CN��$���1��&��C�y�vc�[���]Q-�RT �S� C�[aQ�aCk�y^0��bsmu��P�k�3y����lŚ�m��C��e?k���mj#�#[�r���2�?�����5�X�9��Ma�q���L��YPHg�l⍸���ݮ6���⇑���d��P�T�Ρ�V<[qz�U�}��O���i�=�-���Q��%�馛!� ��߄�#����=�١@��v�toN�?o��l�M�Q�RI�"%.� �@^(�f�{@�q�9���W�����\�i�I��꧘��)G�g����B�=%H�D#r�iE8��� y���d��l���ź-��fSf[9�.�c�~�=�2���{�j�xYG!���⮯<� Y�<ʭ# �ڃmp�m`R��2!_���j�� 6�?r썊�:���c$�[�1C�#x�~�_I>F=�H��rH��Z�O���홰�GIp��2+Dr��{����#+�����l==�C��靫�B�B}�s�T]�4צ�\�4ק�\�47��ܐ4�i$���47+���0���}��������=�©覨N��S�Rp,0H��\���`z�%C:���@$��&D�Z��[�*P�P����8D�ԙ0�a����3����v�=����`��&��Mb�p�܄����B�����Se��p���ȑ|<��1�����b�c"� -tN��%��j��@L�6�B��A�\�l@�����>�iz��C���s���8kQ����8��w�l"�f���z�>��4���T�&д2���]N\7��i_l�kl�/9�@�Ds����Nc����s3����Y 0�Z�7�t�3 ?D6e&��b:ܰ%u�Q�=`�7�xF�.X? �p2�6;��Yj��\��؛N$�fJ7 ;&�1��h��a�j�3\�n< ��l��N� �� ���2�����&�:Q�m�>>2pYY�B%(��iYp���_B��I�~9�����4M#�"�붭�.�:u1`"���aw���C~�C��^*e��pwͶ�9n�J��)qU��z��� E4�x�PE�<'�0�t���/0���!��@B1MH���o�a�ú���wE����7C�}��� �o� ��R��t=Sp���\��d����p������ш�'�V��j�rw�cqNj��\b�sZF�sI�B%���Y%�y��O�� �aô�8��'EC�4��ݳs�W6Tx��H���&�pjj�!�W_Y 5F�X��Y@1��r���:���c<��⚒��"xc�3�Nu�R��[�z9Y�ɝ�^�$��k�K��y2�qI^9g����g�{�7��l6-�N�;\ ;�Z�i��A�K�A�Ex����]�3�y��mbZ�S�b]�U�D.��G����`�Ε��ɗ�����h0G�m��~�4��m�� �+M)����;K+��jiyqmqi��ں�eo�h3|֭ͤDՀH40�N�w���G������̷��:��PK��X ��PK@TLdist/lang/summernote-uz-UZ.js�W[oG~�W��)E��ǢT� �ڷ�zl/Y︳�Ѐ"%!(yi*J����"�/�&��aֿ��9���:��a�s�ܾ�c�4�@Ecg�Ń3B�='�Od�;{.N;�#��s��&�\�Zz����֦�B4U������1%j� �3��o�k�� /|����a��-�|�9O���aIyl�����U���OG����Җ��e�-ѥ$�O6}a؇�8��U>[u�hˠՆ�5�4ޙ�`C���9�|��p�Q���7��ĉfe��*m��εl������}��c_]6�+�[����e� b�-���]��W��]}�|p�݄]Nxk�K^��a]��ׂ,�?/�}P3��/��D���3l��y��m����V�>L�a����SUi�R��*\��&&?�HPҐ��d+d��2^�z3�t" &O����\��=��շ�ώu��*��"h ��>�� eq�w[�Q����<�����R��m�+o)�j8�'n�����y�BS�6���g�F�*��P)��Q�vکG^@E,�xf[Z�֪4��~��m�<jh�u��vUj���0�d\�6{M�Ie�4;^6�������cJ?�֪3�2�K^̐<K$@��'R���� 6��TS����B_ nߺ�&u<ֲ��VD[� l�6�ݠ!�ۤ���� )!�8pL�� ��x���� ����.ĝSG�Ua��YԔ��oT:���*�HE�E�q-����΄�4�}�h�{�:���1 AAL�7s�9!���9㨒�Ҩ�:����0U�fz�m�>�PJ��`�Ψ+A� �9*�:jj֧��Ь��ʄ[�g��Z���TWFע���A�P���߸K�N�!������*���E��5�U)��G ��*v�J��f!AW�a;ZGk1��8�+��?���1�v�k'E]7{���vW=T��w)�: ���w-լ��7�}����F f�:E�w%.TI����J���ȥJ�K��d�Ȥ+r�R��R�A��/�j����U;4*�,�`�S�ْc��{�o I�[���7Z]ե�/�Җ!Wq)'�u7�&�;RF�c���S�6"er��;n��!����1�k��<!I�%���u=�"�u���r�-id�:��-;U�4$m�5���t���WV�0M;n�A��[��co �=�i .�/�-ɛ�'���[���ۓyơ���@&'*��s*{w�8 �̋��zR�aد Ll���W�*����#�D�%�e��l�K",�"��l�)h��g[X�#^�^0���v٦�%��բ�����=�Z�-g���X&3��q��p�ij���m[r���옑�r�I��!+��\pD������vL�V:�S�Q4��-f��(9j3LEƿm����G����B<�tS�*f_��b�ԇ���/I��E���3�z�z�v[j��6x���V�[�T��&���. ��K;�`\��W6�ԍqh�s9G��r�Yf���h3�c�BHُ�m�o�A�J���"����H`��zN%�nn�q���9?���;7S���_PKP��U6PK+ MLdist/lang/summernote-vi-VN.js�X�o�6����!�l 5��!=��6b;�g�m�^8Gb-�ZJ��.r(��CQ49�P,�&�aw�kdw�K=��1��~��F���:@f���#�{�ޣ�f� K��ڕu��w��!�BEkW6�*˄Q�)W�U;�Xp,�{t�n��ʹ*�cS�F�Y��؛���,��u�?Y�T�n� Nd�����JE¤R >Z����_��_� S� .�߲7��`@��J������Y��k���h�I�Z�,L�W�FEi�(��8�,R1��êi��f�wo>�C,G>F~A�����˞�����5�t�`��'ο8�oA� a���)o{ݭ��]{��ws;<�an+nJAο��+�R��=1� '�~-�1|�JS��#ga�M\<\����@�<�炃�^��"�8Ԕ1�lc�f��;�ō�A�t07^EM�*�*.�3�zK�*�1����CD�ǻ�ah� �!��5��"�T�����s��m�sf#δa�HX�T��]���2�#$�7����?�<p�ˬ�ȱ˱}'a3����w��� �C!� O�2万�{�̈L�>��\K�I�~�3X�c �g|#ф����Iu���H�7�Vq�;1����hZݐ��>�դ����̄�/���*J�]e�ȝ�}Mt�?gP8������&��5�;Պ�t0o�R��GD+�"����3��%�h��e���z��ϊM�9q$%�k�B�s�vՁ8��T�>�:�����u�Y���2Kګ!-���aw�F.�>��(:�'[S�=[QČ>a�ƞ}��H�-jJ�>j�ӆ���KAXXKO ���H�� ��M,Y�-�Y��ͺ����C���� M\��S�t�����FܣȢ��Զm�B̩���4���+T~��<�T\���B�����l�#?,�5��\�Μ\'�u_r�$7|�M���%�$��%�Hrkp�T%�h�Ji�{kk�\�UɎ�Y�A�E���[�Bd�m��߉W�=�Q�t�{{&"%�N�b��Ų>ϽMf��h�P�s��#����B��X J�OD�<�z�r�cx���;�'Ft�%�[XWe$�Q�q��Yhc%wz�g�9X�n�Z�C������+���eju^��9Ym��Ǖ��ԝ��Zp�0�3��( �����<<���)�"��~�4�z�z�J�U�;J��آZ̟��Q�r���>��h�i�43��V"��g9}�*����R�~t06�h�Q �:t`�hS�4:�2*uh��2�+�a�G�/=Ra��M��R�����u���Gn���$���Gf��gio�H�U����w�,r�~O��Y��ov�� �܅�\8~�^?���ʡF�u��a�C I� �ߢ���D��2�"ϠLe����(�-��/P�F����)�Eɸ}�1[|m�.�Pn<�Q�mht)�{�N�'j�����Fx�)X>0�!*���DLO�ؿ�AYfj���� �}@����V(=�Z$����a[��P�Ha��M��V1*c�����*يVS�: ����3��ae����R��!�'�]K���J�e��'�Q�J"�[��᳠���x��-�]{��.���;��K���+�F��%u��սqI]�Wiuo^R��jZ��K�O�{뒺�|?�,����ņ����6��P� fhƣzklK��xe℔����&��\����O�C��տ�JY3�<k�V��"!l@��jO���n������hr�p�ý��x��fc�"�cdr���+v�'�|���;O��>�����PK��:1PK+ MLdist/lang/summernote-zh-CN.js�X[OG~ϯ؇T����C�DM�4���������;�B*$���%�� ����CJ�ՆS�z�_��욝������s�s�3�6nK�Z�P��v�]��$]�D�%�.v�f&��� ԩ�Z���%)�0�e�V�U��X3�o��j�i��T�=�t�R�O1dU��Z,9��@DU4��c:5�88$�*� ��;/�V�J���FJ* .D��O��G�3L'�hqE7�2��4�f*�S%P4��1=N�,SNY�IA�nf�3-l�g�v#^ƛ�P2r �,�^d\B��:jL�fMG�9`�i�m�O��zMUL���Z8�'��˗.}!8�d5@u��k��@,־�+]����ec%�W�J���Йu��zw�0���1�0�rZX�v�B=-g� f���V3;7$Z����sUdI֊N���&+,XMmp���Vp�7Ϫ�T "��٥�!nM�wc=^�����2-��Y.�{�J<$L�a�8�#ō^�3���t��g�⟴�Uߛ�WE?2�%cr�r��d�p����V�*�؇\U��"q��+K�w�t��D���ς�Ix�x��Gt%'0 ��,��C��P�b��Mfn{C�q_I ,�G��k��`�3mԹL�5�V���OH�{�:M�`f��+h�W���n�d���f�ԯ醜"r�Cꁌ��.�!��MÌ���t{�h��W�����M͓��,�!>J(�:�E�h.�5 ݆q��gUy`��Q�|y9&�� �+ �"�_��F�W�-��n-n5�X��7��sZͅ�o�1V���=��u��m9�ģ�17�� ��QIf�C����h�b�{Ūװ(�U3�I*���ٴ�iZ&� ���{�N �<���\�X0�ơ��G!�4T�)?��>�m6�Z��n���"Vi78.���_V��o�_1�G~4aسˬ�h,�=˻\��M��HJ_f�J���tY�_��WD�U�~U�_���Dz�O���}��P$TE7�f��&P�|�@�:�I'h�i�d�eUP�F*(݃!�^И��B����Gqe���� �G�3/��ֲ2�"gaC�##V�o�YM0 �'��6���5��>~%�\=���t�⳪`һ���S{&��A�o�c�����Ba���J�u��^��a����M#��1� ��>���y��<1�W�h9��r|$˝���'��M�$I�:���A�AdM�(���\�Z��ud�b>;�O�� ��zQR6U�8\�+�P�iL�� ?MF�t�Yu�U����o;K�Q��{1�Ȇ�h)J��CK�̟L��z�V4�d\P Ͻ����ݐێ���oB=�"�7h��Y]��E��4;QkJ�����w���V�P)�������BpG�t��HLh��𧗅�y�ӫ����n[���8�J�������Q��9"?S��{$P�ͷ�$�7�]�'@�fޟޗ]�m�}7�b������m����cW��x��4kuyZ�ws��w ���+�Ǧ�g��'���ق�$���KP���s ���d�lW�a� ��}��u��w�����������>���E�π[�{YũN藣����zk�澽�b��wHBL`>���|���]�Y�i�{��,@�ݹ����}݃��ᛃC©��x>�߁Ґ�Q��J���9�����_]oo�w�Dd>�PK�&c���PK+ MLdist/lang/summernote-zh-TW.js�X_S�ϧ�SUĊ�<qA�r�,+Uy���ݝ8;��gF����JB!�H*W�DĐ�j@�DAE�a.=��-rN��N�F|pg����>s�t�W ܢo3��X?��G�;N��k�;��*�.��q�t�RO�q����e�l�JH��~�FH�9�YbD�V�'��0��پ��EЄ͵nM�Z�;�KA)^-G{?i��CM����xu3� �4u��� �7�7�'w4�kV����ux>��P��YP�����p�S/(xEn����~#l�j���F��^�Q�����u#��4v�,�c��E ���47��Q��~����z��|�8������o�s�'>��c͈��NI��w��L�Su�99�+9���i �|_�>��e͟�L$�1K���|���^j�/n� ^Ŭ� ����$�<���D�����G͝� �����Ղk���l3ZƸ��ӵ%^��74����~�Qʥӝ9�i�F3��� ��l��A�8�I 8�g"��0N���4�uh�?�Y���P��^��{�h�pA|��a��7v5��I�qas����P�,�ku|���q�s&K��_̊�W���j�����<�^<?�5%�Uv�=| ��V���h�B��E�^����kC*�m� �H*�/�����O��d7R��M�3t����dz{d�|�����L����9@�d�h�5ߟ�t5XcV����js��M�BLNO-�2�k���>�����c�,�xm��|[+Z�TH;V��9��l�������N��f�x%n6�r��f+3�"�n݂V��6-k�MT Y�l����C��:r)���ݨa�$� AE�U�8кr��Yi8�ϊ��k��@}�W��-x˴�Y7`J�!5 ��˕ Tc�,w�/wq>��ϟ�n"0��/�S��;ܯ�o������0��c,G�[b�.64LM����{у���r�0�⍛�ƫ���'u��L~J����u�`&��g2��\`��t�`.�P�r��g���p��m�b�"Z]O�1g5,�.��`|��'b�f��� ����m��=/��Pd�jSYK����D8��� ��58�d�фF������/�#���P��-}jB'�������j|�����E��c���rzY=�x�]�.�8$��8C�tʶ�):F�֊�7���ϴ]W�L���bS??��2��\<H����>�X%`u�b~�[�s� ��q\_ ��������/*C9��nmiT���LKf�H��;�Nj���U�� �H�2N��'��^��\�]t��%����yM�c�<�U�m�5rgjS^ �zc��͚f��w�fd��X�T!t��M�78��`�(n����v�E��o��zSB�YC�ȋi���Ā �f���s7\\ b.�/��_��1=�C�j���M:��N������(tx�@�&�K�A[^��0I}b���m[g��R�R�y����)�vDyt��'ct��,u�S�I�psa�E'��c75��������K�ò��P�U��S:���^(ވR$��<P�ͥt&�ô@�+�J:�����x�$�a%�#�I�1ڿ��2a.)� ��S�l������hbPӘ�H��m�v\�)���=Q����u��]$p����+�艣���� �����H�����O)���� #����BR�#r��R�4 �k�ә�v��?Q�-�x�M����,�F�$��q���7O�e�a�f��!P��G�ֺf���M#��b�F��ȵ�!�%6&/�'ãCC�S�&&5/ꮋK��^2�,�"��w�������>�����3�PK� s`�PK-ETLc��Y�� ��dist/summernote-bs4.jsPK-STLCE�t�[� ����dist/summernote-bs4.min.jsPK-FTL�l�| nT ��ѐdist/summernote-lite.jsPK-DTL5�ި�J ����dist/summernote.jsPK-STLOƔ��U� ��dist/summernote.min.jsPK-TTL�~�FE ���.dist/summernote-bs4.cssPK-TTLR^s�#k ��:>dist/summernote-lite.cssPK-TTL�P�W=ME ��Vdist/summernote.cssPK-�ML��D��z# ���edist/font/summernote.eotPK-�MLSԫA��" ���|dist/font/summernote.ttfPK-�ML�`Ƽ7=L= ����dist/font/summernote.woffPK-+ ML=��e� ) 1 ��dist/plugin/databasic/summernote-ext-databasic.jsPK-+ ML�֙�� ) ���dist/plugin/hello/summernote-ext-hello.jsPK-+ ML�.G���(7 ����dist/plugin/specialchars/summernote-ext-specialchars.jsPK-+ MLme���2 큗�dist/plugin/databasic/summernote-ext-databasic.cssPK-+ ML�hy�j ����dist/lang/summernote-ar-AR.jsPK-+ ML��E/m� ����dist/lang/summernote-bg-BG.jsPK-+ MLnQ��Qj ��Y�dist/lang/summernote-ca-ES.jsPK-+ ML)�z� ���dist/lang/summernote-cs-CZ.jsPK-+ MLD��{ ��Ydist/lang/summernote-da-DK.jsPK-@TL�A{�B� ���dist/lang/summernote-de-DE.jsPK-+ ML�l� � ��8dist/lang/summernote-el-GR.jsPK-+ ML\R��U� ���&dist/lang/summernote-es-ES.jsPK-+ ML������ ��>.dist/lang/summernote-es-EU.jsPK-+ ML�jM� ��x5dist/lang/summernote-fa-IR.jsPK-+ ML^#��F ���=dist/lang/summernote-fi-FI.jsPK-+ MLp��^ �� Edist/lang/summernote-fr-FR.jsPK-+ ML���I58 ��Mdist/lang/summernote-gl-ES.jsPK-+ ML�e �P� ���Tdist/lang/summernote-he-IL.jsPK-+ ML�[�Y ��"\dist/lang/summernote-hr-HR.jsPK-+ ML��y�rh ��{cdist/lang/summernote-hu-HU.jsPK-+ ML^�>�� ��8kdist/lang/summernote-id-ID.jsPK-+ ML"�ɬ6 ��Lrdist/lang/summernote-it-IT.jsPK-+ ML����� ���ydist/lang/summernote-ja-JP.jsPK-+ ML|��F� ���dist/lang/summernote-ko-KR.jsPK-+ ML*�Cv�� ����dist/lang/summernote-lt-LT.jsPK-+ ML�N�S ����dist/lang/summernote-lt-LV.jsPK-+ ML�L��I ��ݙdist/lang/summernote-mn-MN.jsPK-+ MLw �? ����dist/lang/summernote-nb-NO.jsPK-+ MLe��� ���dist/lang/summernote-nl-NL.jsPK-@TLA��cQ ��%�dist/lang/summernote-pl-PL.jsPK-+ ML�$� ����dist/lang/summernote-pt-BR.jsPK-+ ML�#t=� ��0�dist/lang/summernote-pt-PT.jsPK-+ MLE�w�O� ����dist/lang/summernote-ro-RO.jsPK-+ ML�*�uH � ��#�dist/lang/summernote-ru-RU.jsPK-+ ML�v��Z� ����dist/lang/summernote-sk-SK.jsPK-+ ML�պ�� ��[�dist/lang/summernote-sl-SI.jsPK-+ ML��c# ����dist/lang/summernote-sr-RS-Latin.jsPK-+ ML~jP; ��4�dist/lang/summernote-sr-RS.jsPK-+ ML6�ERy ���dist/lang/summernote-sv-SE.jsPK-+ MLXq�d� ���dist/lang/summernote-ta-IN.jsPK-+ ML�Wq�� ���dist/lang/summernote-th-TH.jsPK-+ MLT�E}h� �� dist/lang/summernote-tr-TR.jsPK-+ ML��X �� ���dist/lang/summernote-uk-UA.jsPK-@TLP��U6 ���!dist/lang/summernote-uz-UZ.jsPK-+ ML��:1 ��V(dist/lang/summernote-vi-VN.jsPK-+ ML�&c��� ���/dist/lang/summernote-zh-CN.jsPK-+ ML� s`� ��7dist/lang/summernote-zh-TW.jsPK::�>PKf[�\��=h�h�dist/summernote.js.mapnu�[���{"version":3,"file":"summernote.js","sources":["../src/js/base/renderer.js","../src/js/bs3/ui.js","../src/js/base/core/func.js","../src/js/base/core/lists.js","../src/js/base/core/env.js","../src/js/base/core/dom.js","../src/js/base/summernote-en-US.js","../src/js/base/core/key.js","../src/js/base/core/range.js","../src/js/base/core/async.js","../src/js/base/editing/History.js","../src/js/base/editing/Style.js","../src/js/base/editing/Bullet.js","../src/js/base/editing/Typing.js","../src/js/base/editing/Table.js","../src/js/base/module/Editor.js","../src/js/base/module/Clipboard.js","../src/js/base/module/Dropzone.js","../src/js/base/module/Codeview.js","../src/js/base/module/Statusbar.js","../src/js/base/module/Fullscreen.js","../src/js/base/module/Handle.js","../src/js/base/module/AutoLink.js","../src/js/base/module/AutoSync.js","../src/js/base/module/Placeholder.js","../src/js/base/module/Buttons.js","../src/js/base/module/Toolbar.js","../src/js/base/module/LinkDialog.js","../src/js/base/module/LinkPopover.js","../src/js/base/module/ImageDialog.js","../src/js/base/module/ImagePopover.js","../src/js/base/module/TablePopover.js","../src/js/base/module/VideoDialog.js","../src/js/base/module/HelpDialog.js","../src/js/base/module/AirPopover.js","../src/js/base/module/HintPopover.js","../src/js/base/Context.js","../src/js/summernote.js","../src/js/bs3/settings.js"],"sourcesContent":["import $ from 'jquery';\n\nclass Renderer {\n constructor(markup, children, options, callback) {\n this.markup = markup;\n this.children = children;\n this.options = options;\n this.callback = callback;\n }\n\n render($parent) {\n const $node = $(this.markup);\n\n if (this.options && this.options.contents) {\n $node.html(this.options.contents);\n }\n\n if (this.options && this.options.className) {\n $node.addClass(this.options.className);\n }\n\n if (this.options && this.options.data) {\n $.each(this.options.data, (k, v) => {\n $node.attr('data-' + k, v);\n });\n }\n\n if (this.options && this.options.click) {\n $node.on('click', this.options.click);\n }\n\n if (this.children) {\n const $container = $node.find('.note-children-container');\n this.children.forEach((child) => {\n child.render($container.length ? $container : $node);\n });\n }\n\n if (this.callback) {\n this.callback($node, this.options);\n }\n\n if (this.options && this.options.callback) {\n this.options.callback($node);\n }\n\n if ($parent) {\n $parent.append($node);\n }\n\n return $node;\n }\n}\n\nexport default {\n create: (markup, callback) => {\n return () => {\n const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0];\n let children = $.isArray(arguments[0]) ? arguments[0] : [];\n if (options && options.children) {\n children = options.children;\n }\n return new Renderer(markup, children, options, callback);\n };\n }\n};\n","import $ from 'jquery';\nimport renderer from '../base/renderer';\n\nconst editor = renderer.create('<div class=\"note-editor note-frame panel\"/>');\nconst toolbar = renderer.create('<div class=\"note-toolbar-wrapper panel-default\"><div class=\"note-toolbar panel-heading\" role=\"toolbar\"></div></div>');\nconst editingArea = renderer.create('<div class=\"note-editing-area\"/>');\nconst codable = renderer.create('<textarea class=\"note-codable\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst editable = renderer.create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst statusbar = renderer.create([\n '<output class=\"note-status-output\" aria-live=\"polite\"/>',\n '<div class=\"note-statusbar\" role=\"status\">',\n ' <div class=\"note-resizebar\" role=\"seperator\" aria-orientation=\"horizontal\" aria-label=\"Resize\">',\n ' <div class=\"note-icon-bar\"/>',\n ' <div class=\"note-icon-bar\"/>',\n ' <div class=\"note-icon-bar\"/>',\n ' </div>',\n '</div>'\n].join(''));\n\nconst airEditor = renderer.create('<div class=\"note-editor\"/>');\nconst airEditable = renderer.create([\n ' <output class=\"note-status-output\" aria-live=\"polite\"/>',\n '<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>'\n].join(''));\n\nconst buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\">');\n\nconst dropdown = renderer.create('<ul class=\"dropdown-menu\" role=\"list\">', function($node, options) {\n const markup = $.isArray(options.items) ? options.items.map(function(item) {\n const value = (typeof item === 'string') ? item : (item.value || '');\n const content = options.template ? options.template(item) : item;\n const option = (typeof item === 'object') ? item.option : undefined;\n\n const dataValue = 'data-value=\"' + value + '\"';\n const dataOption = (option !== undefined) ? ' data-option=\"' + option + '\"' : '';\n return '<li role=\"listitem\" aria-label=\"' + item + '\"><a href=\"#\" ' + (dataValue + dataOption) + '>' + content + '</a></li>';\n }).join('') : options.items;\n\n $node.html(markup).attr({'aria-label': options.title});\n});\n\nconst dropdownButtonContents = function(contents, options) {\n return contents + ' ' + icon(options.icons.caret, 'span');\n};\n\nconst dropdownCheck = renderer.create('<ul class=\"dropdown-menu note-check\" role=\"list\">', function($node, options) {\n const markup = $.isArray(options.items) ? options.items.map(function(item) {\n const value = (typeof item === 'string') ? item : (item.value || '');\n const content = options.template ? options.template(item) : item;\n return '<li role=\"listitem\" aria-label=\"' + item + '\"><a href=\"#\" data-value=\"' + value + '\">' + icon(options.checkClassName) + ' ' + content + '</a></li>';\n }).join('') : options.items;\n $node.html(markup).attr({'aria-label': options.title});\n});\n\nconst palette = renderer.create('<div class=\"note-color-palette\"/>', function($node, options) {\n const contents = [];\n for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n const eventName = options.eventName;\n const colors = options.colors[row];\n const colorsName = options.colorsName[row];\n const buttons = [];\n for (let col = 0, colSize = colors.length; col < colSize; col++) {\n const color = colors[col];\n const colorName = colorsName[col];\n buttons.push([\n '<button type=\"button\" class=\"note-color-btn\"',\n 'style=\"background-color:', color, '\" ',\n 'data-event=\"', eventName, '\" ',\n 'data-value=\"', color, '\" ',\n 'title=\"', colorName, '\" ',\n 'aria-label=\"', colorName, '\" ',\n 'data-toggle=\"button\" tabindex=\"-1\"></button>'\n ].join(''));\n }\n contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n }\n $node.html(contents.join(''));\n\n if (options.tooltip) {\n $node.find('.note-color-btn').tooltip({\n container: options.container,\n trigger: 'hover',\n placement: 'bottom'\n });\n }\n});\n\nconst dialog = renderer.create('<div class=\"modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function($node, options) {\n if (options.fade) {\n $node.addClass('fade');\n }\n $node.attr({\n 'aria-label': options.title\n });\n $node.html([\n '<div class=\"modal-dialog\">',\n ' <div class=\"modal-content\">',\n (options.title\n ? ' <div class=\"modal-header\">' +\n ' <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">×</button>' +\n ' <h4 class=\"modal-title\">' + options.title + '</h4>' +\n ' </div>' : ''\n ),\n ' <div class=\"modal-body\">' + options.body + '</div>',\n (options.footer\n ? ' <div class=\"modal-footer\">' + options.footer + '</div>' : ''\n ),\n ' </div>',\n '</div>'\n ].join(''));\n});\n\nconst popover = renderer.create([\n '<div class=\"note-popover popover in\">',\n ' <div class=\"arrow\"/>',\n ' <div class=\"popover-content note-children-container\"/>',\n '</div>'\n].join(''), function($node, options) {\n const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n $node.addClass(direction);\n\n if (options.hideArrow) {\n $node.find('.arrow').hide();\n }\n});\n\nconst checkbox = renderer.create('<div class=\"checkbox\"></div>', function($node, options) {\n $node.html([\n ' <label' + (options.id ? ' for=\"' + options.id + '\"' : '') + '>',\n ' <input role=\"checkbox\" type=\"checkbox\"' + (options.id ? ' id=\"' + options.id + '\"' : ''),\n (options.checked ? ' checked' : ''),\n ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>',\n (options.text ? options.text : ''),\n '</label>'\n ].join(''));\n});\n\nconst icon = function(iconClassName, tagName) {\n tagName = tagName || 'i';\n return '<' + tagName + ' class=\"' + iconClassName + '\"/>';\n};\nconst ui = {\n editor: editor,\n toolbar: toolbar,\n editingArea: editingArea,\n codable: codable,\n editable: editable,\n statusbar: statusbar,\n airEditor: airEditor,\n airEditable: airEditable,\n buttonGroup: buttonGroup,\n dropdown: dropdown,\n dropdownButtonContents: dropdownButtonContents,\n dropdownCheck: dropdownCheck,\n palette: palette,\n dialog: dialog,\n popover: popover,\n checkbox: checkbox,\n icon: icon,\n options: {},\n\n button: function($node, options) {\n return renderer.create('<button type=\"button\" class=\"note-btn btn btn-default btn-sm\" role=\"button\" tabindex=\"-1\">', function($node, options) {\n if (options && options.tooltip) {\n $node.attr({\n title: options.tooltip,\n 'aria-label': options.tooltip\n }).tooltip({\n container: options.container,\n trigger: 'hover',\n placement: 'bottom'\n });\n }\n })($node, options);\n },\n\n toggleBtn: function($btn, isEnable) {\n $btn.toggleClass('disabled', !isEnable);\n $btn.attr('disabled', !isEnable);\n },\n\n toggleBtnActive: function($btn, isActive) {\n $btn.toggleClass('active', isActive);\n },\n\n onDialogShown: function($dialog, handler) {\n $dialog.one('shown.bs.modal', handler);\n },\n\n onDialogHidden: function($dialog, handler) {\n $dialog.one('hidden.bs.modal', handler);\n },\n\n showDialog: function($dialog) {\n $dialog.modal('show');\n },\n\n hideDialog: function($dialog) {\n $dialog.modal('hide');\n },\n\n createLayout: function($note, options) {\n const $editor = (options.airMode ? ui.airEditor([\n ui.editingArea([\n ui.airEditable()\n ])\n ]) : ui.editor([\n ui.toolbar(),\n ui.editingArea([\n ui.codable(),\n ui.editable()\n ]),\n ui.statusbar()\n ])).render();\n\n $editor.insertAfter($note);\n\n return {\n note: $note,\n editor: $editor,\n toolbar: $editor.find('.note-toolbar'),\n editingArea: $editor.find('.note-editing-area'),\n editable: $editor.find('.note-editable'),\n codable: $editor.find('.note-codable'),\n statusbar: $editor.find('.note-statusbar')\n };\n },\n\n removeLayout: function($note, layoutInfo) {\n $note.html(layoutInfo.editable.html());\n layoutInfo.editor.remove();\n $note.show();\n }\n};\n\nexport default ui;\n","/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n return function(itemB) {\n return itemA === itemB;\n };\n}\n\nfunction eq2(itemA, itemB) {\n return itemA === itemB;\n}\n\nfunction peq2(propName) {\n return function(itemA, itemB) {\n return itemA[propName] === itemB[propName];\n };\n}\n\nfunction ok() {\n return true;\n}\n\nfunction fail() {\n return false;\n}\n\nfunction not(f) {\n return () => {\n return !f.apply(f, arguments);\n };\n}\n\nfunction and(fA, fB) {\n return function(item) {\n return fA(item) && fB(item);\n };\n}\n\nfunction self(a) {\n return a;\n}\n\nfunction invoke(obj, method) {\n return () => {\n return obj[method].apply(obj, arguments);\n };\n}\n\nlet idCounter = 0;\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n const id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n const $document = $(document);\n return {\n top: rect.top + $document.scrollTop(),\n left: rect.left + $document.scrollLeft(),\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n const inverted = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n inverted[obj[key]] = key;\n }\n }\n return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n prefix = prefix || '';\n return prefix + namespace.split('.').map(function(name) {\n return name.substring(0, 1).toUpperCase() + name.substring(1);\n }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n let timeout;\n return () => {\n const context = this;\n const args = arguments;\n const later = () => {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n };\n const callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\n\nexport default {\n eq,\n eq2,\n peq2,\n ok,\n fail,\n self,\n not,\n and,\n invoke,\n uniqueId,\n rect2bnd,\n invertObject,\n namespaceToCamel,\n debounce\n};\n","import $ from 'jquery';\nimport func from './func';\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n for (let idx = 0, len = array.length; idx < len; idx++) {\n const item = array[idx];\n if (pred(item)) {\n return item;\n }\n }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction all(array, pred) {\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (!pred(array[idx])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * returns index of item\n */\nfunction indexOf(array, item) {\n return $.inArray(item, array);\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n return indexOf(array, item) !== -1;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n fn = fn || func.self;\n return array.reduce(function(memo, v) {\n return memo + fn(v);\n }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n const result = [];\n const length = collection.length;\n let idx = -1;\n while (++idx < length) {\n result[idx] = collection[idx];\n }\n return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n if (!array.length) { return []; }\n const aTail = tail(array);\n return aTail.reduce(function(memo, v) {\n const aLast = last(memo);\n if (fn(last(aLast), v)) {\n aLast[aLast.length] = v;\n } else {\n memo[memo.length] = [v];\n }\n return memo;\n }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n const aResult = [];\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (array[idx]) { aResult.push(array[idx]); }\n }\n return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n const results = [];\n\n for (let idx = 0, len = array.length; idx < len; idx++) {\n if (!contains(results, array[idx])) {\n results.push(array[idx]);\n }\n }\n\n return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n const idx = indexOf(array, item);\n if (idx === -1) { return null; }\n\n return array[idx + 1];\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n const idx = indexOf(array, item);\n if (idx === -1) { return null; }\n\n return array[idx - 1];\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\nexport default {\n head,\n last,\n initial,\n tail,\n prev,\n next,\n find,\n contains,\n all,\n sum,\n from,\n isEmpty,\n clusterBy,\n compact,\n unique\n};\n","import $ from 'jquery';\nconst isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nfunction isFontInstalled(fontName) {\n const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n const $tester = $('<div>').css({\n position: 'absolute',\n left: '-9999px',\n top: '-9999px',\n fontSize: '200px'\n }).text('mmmmmmmmmwwwwwww').appendTo(document.body);\n\n const originalWidth = $tester.css('fontFamily', testFontName).width();\n const width = $tester.css('fontFamily', fontName + ',' + testFontName).width();\n\n $tester.remove();\n\n return originalWidth !== width;\n}\n\nconst userAgent = navigator.userAgent;\nconst isMSIE = /MSIE|Trident/i.test(userAgent);\nlet browserVersion;\nif (isMSIE) {\n let matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n if (matches) {\n browserVersion = parseFloat(matches[1]);\n }\n matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n if (matches) {\n browserVersion = parseFloat(matches[1]);\n }\n}\n\nconst isEdge = /Edge\\/\\d+/.test(userAgent);\n\nlet hasCodeMirror = !!window.CodeMirror;\nif (!hasCodeMirror && isSupportAmd) {\n // Webpack\n if (typeof __webpack_require__ === 'function') { // eslint-disable-line\n try {\n // If CodeMirror can't be resolved, `require.resolve` will throw an\n // exception and `hasCodeMirror` won't be set to `true`.\n require.resolve('codemirror');\n hasCodeMirror = true;\n } catch (e) {\n // do nothing\n }\n } else if (typeof require !== 'undefined') {\n // Browserify\n if (typeof require.resolve !== 'undefined') {\n try {\n // If CodeMirror can't be resolved, `require.resolve` will throw an\n // exception and `hasCodeMirror` won't be set to `true`.\n require.resolve('codemirror');\n hasCodeMirror = true;\n } catch (e) {\n // do nothing\n }\n // Almond/Require\n } else if (typeof require.specified !== 'undefined') {\n hasCodeMirror = require.specified('codemirror');\n }\n }\n}\n\nconst isSupportTouch =\n (('ontouchstart' in window) ||\n (navigator.MaxTouchPoints > 0) ||\n (navigator.msMaxTouchPoints > 0));\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nconst inputEventName = (isMSIE || isEdge) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\nexport default {\n isMac: navigator.appVersion.indexOf('Mac') > -1,\n isMSIE,\n isEdge,\n isFF: !isEdge && /firefox/i.test(userAgent),\n isPhantom: /PhantomJS/i.test(userAgent),\n isWebkit: !isEdge && /webkit/i.test(userAgent),\n isChrome: !isEdge && /chrome/i.test(userAgent),\n isSafari: !isEdge && /safari/i.test(userAgent),\n browserVersion,\n jqueryVersion: parseFloat($.fn.jquery),\n isSupportAmd,\n isSupportTouch,\n hasCodeMirror,\n isFontInstalled,\n isW3CRangeSupport: !!document.createRange,\n inputEventName\n};\n","import $ from 'jquery';\nimport func from './func';\nimport lists from './lists';\nimport env from './env';\n\nconst NBSP_CHAR = String.fromCharCode(160);\nconst ZERO_WIDTH_NBSP_CHAR = '\\ufeff';\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n return node && $(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n return node && $(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n nodeName = nodeName.toUpperCase();\n return function(node) {\n return node && node.nodeName.toUpperCase() === nodeName;\n };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n if (isEditable(node)) {\n return false;\n }\n\n // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nconst isPre = makePredByNodeName('PRE');\n\nconst isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n return isPara(node) && !isLi(node);\n}\n\nconst isTable = makePredByNodeName('TABLE');\n\nconst isData = makePredByNodeName('DATA');\n\nfunction isInline(node) {\n return !isBodyContainer(node) &&\n !isList(node) &&\n !isHr(node) &&\n !isPara(node) &&\n !isTable(node) &&\n !isBlockquote(node) &&\n !isData(node);\n}\n\nfunction isList(node) {\n return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nconst isHr = makePredByNodeName('HR');\n\nfunction isCell(node) {\n return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nconst isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n return isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nconst isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n return isInline(node) && !!ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n return isInline(node) && !ancestor(node, isPara);\n}\n\nconst isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n return nodeA.nextSibling === nodeB ||\n nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n pred = pred || func.ok;\n\n const siblings = [];\n if (node.previousSibling && pred(node.previousSibling)) {\n siblings.push(node.previousSibling);\n }\n siblings.push(node);\n if (node.nextSibling && pred(node.nextSibling)) {\n siblings.push(node.nextSibling);\n }\n return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with \n * - [workaround] IE11 and other browser works with bogus br\n */\nconst blankHTML = env.isMSIE && env.browserVersion < 11 ? ' ' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n if (isText(node)) {\n return node.nodeValue.length;\n }\n\n if (node) {\n return node.childNodes.length;\n }\n\n return 0;\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEmpty(node) {\n const len = nodeLength(node);\n\n if (len === 0) {\n return true;\n } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n // ex) <p><br></p>, <span><br></span>\n return true;\n } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n // ex) <p></p>, <span></span>\n return true;\n }\n\n return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n if (!isVoid(node) && !nodeLength(node)) {\n node.innerHTML = blankHTML;\n }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n while (node) {\n if (pred(node)) { return node; }\n if (isEditable(node)) { break; }\n\n node = node.parentNode;\n }\n return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n node = node.parentNode;\n\n while (node) {\n if (nodeLength(node) !== 1) { break; }\n if (pred(node)) { return node; }\n if (isEditable(node)) { break; }\n\n node = node.parentNode;\n }\n return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n pred = pred || func.fail;\n\n const ancestors = [];\n ancestor(node, function(el) {\n if (!isEditable(el)) {\n ancestors.push(el);\n }\n\n return pred(el);\n });\n return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n const ancestors = listAncestor(node);\n return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n const ancestors = listAncestor(nodeA);\n for (let n = nodeB; n; n = n.parentNode) {\n if ($.inArray(n, ancestors) > -1) { return n; }\n }\n return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n pred = pred || func.fail;\n\n const nodes = [];\n while (node) {\n if (pred(node)) { break; }\n nodes.push(node);\n node = node.previousSibling;\n }\n return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n pred = pred || func.fail;\n\n const nodes = [];\n while (node) {\n if (pred(node)) { break; }\n nodes.push(node);\n node = node.nextSibling;\n }\n return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n const descendants = [];\n pred = pred || func.ok;\n\n // start DFS(depth first search) with node\n (function fnWalk(current) {\n if (node !== current && pred(current)) {\n descendants.push(current);\n }\n for (let idx = 0, len = current.childNodes.length; idx < len; idx++) {\n fnWalk(current.childNodes[idx]);\n }\n })(node);\n\n return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n const parent = node.parentNode;\n const wrapper = $('<' + wrapperName + '>')[0];\n\n parent.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n const next = preceding.nextSibling;\n let parent = preceding.parentNode;\n if (next) {\n parent.insertBefore(node, next);\n } else {\n parent.appendChild(node);\n }\n return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild) {\n $.each(aChild, function(idx, child) {\n node.appendChild(child);\n });\n return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n while (node && node !== ancestor) {\n if (position(node) !== 0) {\n return false;\n }\n node = node.parentNode;\n }\n\n return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n if (!ancestor) {\n return false;\n }\n while (node && node !== ancestor) {\n if (position(node) !== nodeLength(node.parentNode) - 1) {\n return false;\n }\n node = node.parentNode;\n }\n\n return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n let offset = 0;\n while ((node = node.previousSibling)) {\n offset += 1;\n }\n return offset;\n}\n\nfunction hasChildren(node) {\n return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n let node;\n let offset;\n\n if (point.offset === 0) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node);\n } else if (hasChildren(point.node)) {\n node = point.node.childNodes[point.offset - 1];\n offset = nodeLength(node);\n } else {\n node = point.node;\n offset = isSkipInnerOffset ? 0 : point.offset - 1;\n }\n\n return {\n node: node,\n offset: offset\n };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n let node, offset;\n\n if (nodeLength(point.node) === point.offset) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node) + 1;\n } else if (hasChildren(point.node)) {\n node = point.node.childNodes[point.offset];\n offset = 0;\n } else {\n node = point.node;\n offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n }\n\n return {\n node: node,\n offset: offset\n };\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {\n return true;\n }\n\n const leftNode = point.node.childNodes[point.offset - 1];\n const rightNode = point.node.childNodes[point.offset];\n if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n return true;\n }\n\n return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n while (point) {\n if (pred(point)) {\n return point;\n }\n\n point = prevPoint(point);\n }\n\n return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n while (point) {\n if (pred(point)) {\n return point;\n }\n\n point = nextPoint(point);\n }\n\n return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n if (!isText(point.node)) {\n return false;\n }\n\n const ch = point.node.nodeValue.charAt(point.offset - 1);\n return ch && (ch !== ' ' && ch !== NBSP_CHAR);\n}\n\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n let point = startPoint;\n\n while (point) {\n handler(point);\n\n if (isSamePoint(point, endPoint)) {\n break;\n }\n\n const isSkipOffset = isSkipInnerOffset &&\n startPoint.node !== point.node &&\n endPoint.node !== point.node;\n point = nextPoint(point, isSkipOffset);\n }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n const ancestors = listAncestor(node, func.eq(ancestor));\n return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n let current = ancestor;\n for (let i = 0, len = offsets.length; i < len; i++) {\n if (current.childNodes.length <= offsets[i]) {\n current = current.childNodes[current.childNodes.length - 1];\n } else {\n current = current.childNodes[offsets[i]];\n }\n }\n return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n const isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n\n // edge case\n if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n if (isLeftEdgePoint(point)) {\n return point.node;\n } else if (isRightEdgePoint(point)) {\n return point.node.nextSibling;\n }\n }\n\n // split #text\n if (isText(point.node)) {\n return point.node.splitText(point.offset);\n } else {\n const childNode = point.node.childNodes[point.offset];\n const clone = insertAfter(point.node.cloneNode(false), point.node);\n appendChildNodes(clone, listNext(childNode));\n\n if (!isSkipPaddingBlankHTML) {\n paddingBlankHTML(point.node);\n paddingBlankHTML(clone);\n }\n\n return clone;\n }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n // ex) [#text, <span>, <p>]\n const ancestors = listAncestor(point.node, func.eq(root));\n\n if (!ancestors.length) {\n return null;\n } else if (ancestors.length === 1) {\n return splitNode(point, options);\n }\n\n return ancestors.reduce(function(node, parent) {\n if (node === point.node) {\n node = splitNode(point, options);\n }\n\n return splitNode({\n node: parent,\n offset: node ? position(node) : nodeLength(parent)\n }, options);\n });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n // find splitRoot, container\n // - inline: splitRoot is a child of paragraph\n // - block: splitRoot is a child of bodyContainer\n const pred = isInline ? isPara : isBodyContainer;\n const ancestors = listAncestor(point.node, pred);\n const topAncestor = lists.last(ancestors) || point.node;\n\n let splitRoot, container;\n if (pred(topAncestor)) {\n splitRoot = ancestors[ancestors.length - 2];\n container = topAncestor;\n } else {\n splitRoot = topAncestor;\n container = splitRoot.parentNode;\n }\n\n // if splitRoot is exists, split with splitTree\n let pivot = splitRoot && splitTree(splitRoot, point, {\n isSkipPaddingBlankHTML: isInline,\n isNotSplitEdgePoint: isInline\n });\n\n // if container is point.node, find pivot with point.offset\n if (!pivot && container === point.node) {\n pivot = point.node.childNodes[point.offset];\n }\n\n return {\n rightNode: pivot,\n container: container\n };\n}\n\nfunction create(nodeName) {\n return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n if (!node || !node.parentNode) { return; }\n if (node.removeNode) { return node.removeNode(isRemoveChild); }\n\n const parent = node.parentNode;\n if (!isRemoveChild) {\n const nodes = [];\n for (let i = 0, len = node.childNodes.length; i < len; i++) {\n nodes.push(node.childNodes[i]);\n }\n\n for (let i = 0, len = nodes.length; i < len; i++) {\n parent.insertBefore(nodes[i], node);\n }\n }\n\n parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n while (node) {\n if (isEditable(node) || !pred(node)) {\n break;\n }\n\n const parent = node.parentNode;\n remove(node);\n node = parent;\n }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n return node;\n }\n\n const newNode = create(nodeName);\n\n if (node.style.cssText) {\n newNode.style.cssText = node.style.cssText;\n }\n\n appendChildNodes(newNode, lists.from(node.childNodes));\n insertAfter(newNode, node);\n remove(node);\n\n return newNode;\n}\n\nconst isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n const val = isTextarea($node[0]) ? $node.val() : $node.html();\n if (stripLinebreaks) {\n return val.replace(/[\\n\\r]/g, '');\n }\n return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n let markup = value($node);\n\n if (isNewlineOnBlock) {\n const regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n markup = markup.replace(regexTag, function(match, endSlash, name) {\n name = name.toUpperCase();\n const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&\n !!endSlash;\n const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n\n return match + ((isEndOfInlineContainer || isBlockNode) ? '\\n' : '');\n });\n markup = $.trim(markup);\n }\n\n return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n const $placeholder = $(placeholder);\n const pos = $placeholder.offset();\n const height = $placeholder.outerHeight(true); // include margin\n\n return {\n left: pos.left,\n top: pos.top + height\n };\n}\n\nfunction attachEvents($node, events) {\n Object.keys(events).forEach(function(key) {\n $node.on(key, events[key]);\n });\n}\n\nfunction detachEvents($node, events) {\n Object.keys(events).forEach(function(key) {\n $node.off(key, events[key]);\n });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\nexport default {\n /** @property {String} NBSP_CHAR */\n NBSP_CHAR,\n /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n ZERO_WIDTH_NBSP_CHAR,\n /** @property {String} blank */\n blank: blankHTML,\n /** @property {String} emptyPara */\n emptyPara: `<p>${blankHTML}</p>`,\n makePredByNodeName,\n isEditable,\n isControlSizing,\n isText,\n isElement,\n isVoid,\n isPara,\n isPurePara,\n isHeading,\n isInline,\n isBlock: func.not(isInline),\n isBodyInline,\n isBody,\n isParaInline,\n isPre,\n isList,\n isTable,\n isData,\n isCell,\n isBlockquote,\n isBodyContainer,\n isAnchor,\n isDiv: makePredByNodeName('DIV'),\n isLi,\n isBR: makePredByNodeName('BR'),\n isSpan: makePredByNodeName('SPAN'),\n isB: makePredByNodeName('B'),\n isU: makePredByNodeName('U'),\n isS: makePredByNodeName('S'),\n isI: makePredByNodeName('I'),\n isImg: makePredByNodeName('IMG'),\n isTextarea,\n isEmpty,\n isEmptyAnchor: func.and(isAnchor, isEmpty),\n isClosestSibling,\n withClosestSiblings,\n nodeLength,\n isLeftEdgePoint,\n isRightEdgePoint,\n isEdgePoint,\n isLeftEdgeOf,\n isRightEdgeOf,\n isLeftEdgePointOf,\n isRightEdgePointOf,\n prevPoint,\n nextPoint,\n isSamePoint,\n isVisiblePoint,\n prevPointUntil,\n nextPointUntil,\n isCharPoint,\n walkPoint,\n ancestor,\n singleChildAncestor,\n listAncestor,\n lastAncestor,\n listNext,\n listPrev,\n listDescendant,\n commonAncestor,\n wrap,\n insertAfter,\n appendChildNodes,\n position,\n hasChildren,\n makeOffsetPath,\n fromOffsetPath,\n splitTree,\n splitPoint,\n create,\n createText,\n remove,\n removeWhile,\n replace,\n html,\n value,\n posFromPlaceholder,\n attachEvents,\n detachEvents,\n isCustomStyleTag\n};\n","import $ from 'jquery';\n\n$.summernote = $.summernote || {\n lang: {}\n};\n\n$.extend($.summernote.lang, {\n 'en-US': {\n font: {\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n clear: 'Remove Font Style',\n height: 'Line Height',\n name: 'Font Family',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript',\n size: 'Font Size'\n },\n image: {\n image: 'Picture',\n insert: 'Insert Image',\n resizeFull: 'Resize Full',\n resizeHalf: 'Resize Half',\n resizeQuarter: 'Resize Quarter',\n floatLeft: 'Float Left',\n floatRight: 'Float Right',\n floatNone: 'Float None',\n shapeRounded: 'Shape: Rounded',\n shapeCircle: 'Shape: Circle',\n shapeThumbnail: 'Shape: Thumbnail',\n shapeNone: 'Shape: None',\n dragImageHere: 'Drag image or text here',\n dropImage: 'Drop image or Text',\n selectFromFiles: 'Select from files',\n maximumFileSize: 'Maximum file size',\n maximumFileSizeError: 'Maximum file size exceeded.',\n url: 'Image URL',\n remove: 'Remove Image',\n original: 'Original'\n },\n video: {\n video: 'Video',\n videoLink: 'Video Link',\n insert: 'Insert Video',\n url: 'Video URL',\n providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)'\n },\n link: {\n link: 'Link',\n insert: 'Insert Link',\n unlink: 'Unlink',\n edit: 'Edit',\n textToDisplay: 'Text to display',\n url: 'To what URL should this link go?',\n openInNewWindow: 'Open in new window'\n },\n table: {\n table: 'Table',\n addRowAbove: 'Add row above',\n addRowBelow: 'Add row below',\n addColLeft: 'Add column left',\n addColRight: 'Add column right',\n delRow: 'Delete row',\n delCol: 'Delete column',\n delTable: 'Delete table'\n },\n hr: {\n insert: 'Insert Horizontal Rule'\n },\n style: {\n style: 'Style',\n p: 'Normal',\n blockquote: 'Quote',\n pre: 'Code',\n h1: 'Header 1',\n h2: 'Header 2',\n h3: 'Header 3',\n h4: 'Header 4',\n h5: 'Header 5',\n h6: 'Header 6'\n },\n lists: {\n unordered: 'Unordered list',\n ordered: 'Ordered list'\n },\n options: {\n help: 'Help',\n fullscreen: 'Full Screen',\n codeview: 'Code View'\n },\n paragraph: {\n paragraph: 'Paragraph',\n outdent: 'Outdent',\n indent: 'Indent',\n left: 'Align left',\n center: 'Align center',\n right: 'Align right',\n justify: 'Justify full'\n },\n color: {\n recent: 'Recent Color',\n more: 'More Color',\n background: 'Background Color',\n foreground: 'Foreground Color',\n transparent: 'Transparent',\n setTransparent: 'Set transparent',\n reset: 'Reset',\n resetToDefault: 'Reset to default'\n },\n shortcut: {\n shortcuts: 'Keyboard shortcuts',\n close: 'Close',\n textFormatting: 'Text formatting',\n action: 'Action',\n paragraphFormatting: 'Paragraph formatting',\n documentStyle: 'Document Style',\n extraKeys: 'Extra keys'\n },\n help: {\n 'insertParagraph': 'Insert Paragraph',\n 'undo': 'Undoes the last command',\n 'redo': 'Redoes the last command',\n 'tab': 'Tab',\n 'untab': 'Untab',\n 'bold': 'Set a bold style',\n 'italic': 'Set a italic style',\n 'underline': 'Set a underline style',\n 'strikethrough': 'Set a strikethrough style',\n 'removeFormat': 'Clean a style',\n 'justifyLeft': 'Set left align',\n 'justifyCenter': 'Set center align',\n 'justifyRight': 'Set right align',\n 'justifyFull': 'Set full align',\n 'insertUnorderedList': 'Toggle unordered list',\n 'insertOrderedList': 'Toggle ordered list',\n 'outdent': 'Outdent on current paragraph',\n 'indent': 'Indent on current paragraph',\n 'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n 'formatH1': 'Change current block\\'s format as H1',\n 'formatH2': 'Change current block\\'s format as H2',\n 'formatH3': 'Change current block\\'s format as H3',\n 'formatH4': 'Change current block\\'s format as H4',\n 'formatH5': 'Change current block\\'s format as H5',\n 'formatH6': 'Change current block\\'s format as H6',\n 'insertHorizontalRule': 'Insert horizontal rule',\n 'linkDialog.show': 'Show Link Dialog'\n },\n history: {\n undo: 'Undo',\n redo: 'Redo'\n },\n specialChar: {\n specialChar: 'SPECIAL CHARACTERS',\n select: 'Select Special characters'\n }\n }\n});\n","import lists from './lists';\nimport func from './func';\n\nconst KEY_MAP = {\n 'BACKSPACE': 8,\n 'TAB': 9,\n 'ENTER': 13,\n 'SPACE': 32,\n 'DELETE': 46,\n\n // Arrow\n 'LEFT': 37,\n 'UP': 38,\n 'RIGHT': 39,\n 'DOWN': 40,\n\n // Number: 0-9\n 'NUM0': 48,\n 'NUM1': 49,\n 'NUM2': 50,\n 'NUM3': 51,\n 'NUM4': 52,\n 'NUM5': 53,\n 'NUM6': 54,\n 'NUM7': 55,\n 'NUM8': 56,\n\n // Alphabet: a-z\n 'B': 66,\n 'E': 69,\n 'I': 73,\n 'J': 74,\n 'K': 75,\n 'L': 76,\n 'R': 82,\n 'S': 83,\n 'U': 85,\n 'V': 86,\n 'Y': 89,\n 'Z': 90,\n\n 'SLASH': 191,\n 'LEFTBRACKET': 219,\n 'BACKSLASH': 220,\n 'RIGHTBRACKET': 221\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\nexport default {\n /**\n * @method isEdit\n *\n * @param {Number} keyCode\n * @return {Boolean}\n */\n isEdit: (keyCode) => {\n return lists.contains([\n KEY_MAP.BACKSPACE,\n KEY_MAP.TAB,\n KEY_MAP.ENTER,\n KEY_MAP.SPACE,\n KEY_MAP.DELETE\n ], keyCode);\n },\n /**\n * @method isMove\n *\n * @param {Number} keyCode\n * @return {Boolean}\n */\n isMove: (keyCode) => {\n return lists.contains([\n KEY_MAP.LEFT,\n KEY_MAP.UP,\n KEY_MAP.RIGHT,\n KEY_MAP.DOWN\n ], keyCode);\n },\n /**\n * @property {Object} nameFromCode\n * @property {String} nameFromCode.8 \"BACKSPACE\"\n */\n nameFromCode: func.invertObject(KEY_MAP),\n code: KEY_MAP\n};\n","import $ from 'jquery';\nimport env from './env';\nimport func from './func';\nimport lists from './lists';\nimport dom from './dom';\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n let container = textRange.parentElement();\n let offset;\n\n const tester = document.body.createTextRange();\n let prevContainer;\n const childNodes = lists.from(container.childNodes);\n for (offset = 0; offset < childNodes.length; offset++) {\n if (dom.isText(childNodes[offset])) {\n continue;\n }\n tester.moveToElementText(childNodes[offset]);\n if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n break;\n }\n prevContainer = childNodes[offset];\n }\n\n if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n const textRangeStart = document.body.createTextRange();\n let curTextNode = null;\n textRangeStart.moveToElementText(prevContainer || container);\n textRangeStart.collapse(!prevContainer);\n curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n\n const pointTester = textRange.duplicate();\n pointTester.setEndPoint('StartToStart', textRangeStart);\n let textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n textCount -= curTextNode.nodeValue.length;\n curTextNode = curTextNode.nextSibling;\n }\n\n // [workaround] enforce IE to re-reference curTextNode, hack\n const dummy = curTextNode.nodeValue; // eslint-disable-line\n\n if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&\n textCount === curTextNode.nodeValue.length) {\n textCount -= curTextNode.nodeValue.length;\n curTextNode = curTextNode.nextSibling;\n }\n\n container = curTextNode;\n offset = textCount;\n }\n\n return {\n cont: container,\n offset: offset\n };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n const textRangeInfo = function(container, offset) {\n let node, isCollapseToStart;\n\n if (dom.isText(container)) {\n const prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n const prevContainer = lists.last(prevTextNodes).previousSibling;\n node = prevContainer || container.parentNode;\n offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n isCollapseToStart = !prevContainer;\n } else {\n node = container.childNodes[offset] || container;\n if (dom.isText(node)) {\n return textRangeInfo(node, 0);\n }\n\n offset = 0;\n isCollapseToStart = false;\n }\n\n return {\n node: node,\n collapseToStart: isCollapseToStart,\n offset: offset\n };\n };\n\n const textRange = document.body.createTextRange();\n const info = textRangeInfo(point.node, point.offset);\n\n textRange.moveToElementText(info.node);\n textRange.collapse(info.collapseToStart);\n textRange.moveStart('character', info.offset);\n return textRange;\n}\n\n/**\n * Wrapped Range\n *\n * @constructor\n * @param {Node} sc - start container\n * @param {Number} so - start offset\n * @param {Node} ec - end container\n * @param {Number} eo - end offset\n */\nclass WrappedRange {\n constructor(sc, so, ec, eo) {\n this.sc = sc;\n this.so = so;\n this.ec = ec;\n this.eo = eo;\n\n // isOnEditable: judge whether range is on editable or not\n this.isOnEditable = this.makeIsOn(dom.isEditable);\n // isOnList: judge whether range is on list node or not\n this.isOnList = this.makeIsOn(dom.isList);\n // isOnAnchor: judge whether range is on anchor node or not\n this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n // isOnCell: judge whether range is on cell node or not\n this.isOnCell = this.makeIsOn(dom.isCell);\n // isOnData: judge whether range is on data node or not\n this.isOnData = this.makeIsOn(dom.isData);\n }\n\n // nativeRange: get nativeRange from sc, so, ec, eo\n nativeRange() {\n if (env.isW3CRangeSupport) {\n const w3cRange = document.createRange();\n w3cRange.setStart(this.sc, this.so);\n w3cRange.setEnd(this.ec, this.eo);\n\n return w3cRange;\n } else {\n const textRange = pointToTextRange({\n node: this.sc,\n offset: this.so\n });\n\n textRange.setEndPoint('EndToEnd', pointToTextRange({\n node: this.ec,\n offset: this.eo\n }));\n\n return textRange;\n }\n }\n\n getPoints() {\n return {\n sc: this.sc,\n so: this.so,\n ec: this.ec,\n eo: this.eo\n };\n }\n\n getStartPoint() {\n return {\n node: this.sc,\n offset: this.so\n };\n }\n\n getEndPoint() {\n return {\n node: this.ec,\n offset: this.eo\n };\n }\n\n /**\n * select update visible range\n */\n select() {\n const nativeRng = this.nativeRange();\n if (env.isW3CRangeSupport) {\n const selection = document.getSelection();\n if (selection.rangeCount > 0) {\n selection.removeAllRanges();\n }\n selection.addRange(nativeRng);\n } else {\n nativeRng.select();\n }\n\n return this;\n }\n\n /**\n * Moves the scrollbar to start container(sc) of current range\n *\n * @return {WrappedRange}\n */\n scrollIntoView(container) {\n const height = $(container).height();\n if (container.scrollTop + height < this.sc.offsetTop) {\n container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n }\n\n return this;\n }\n\n /**\n * @return {WrappedRange}\n */\n normalize() {\n /**\n * @param {BoundaryPoint} point\n * @param {Boolean} isLeftToRight\n * @return {BoundaryPoint}\n */\n const getVisiblePoint = function(point, isLeftToRight) {\n if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) ||\n (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) ||\n (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) ||\n (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) {\n return point;\n }\n\n // point on block's edge\n const block = dom.ancestor(point.node, dom.isBlock);\n if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) ||\n ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) {\n // returns point already on visible point\n if (dom.isVisiblePoint(point)) {\n return point;\n }\n // reverse direction\n isLeftToRight = !isLeftToRight;\n }\n\n const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint)\n : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n return nextPoint || point;\n };\n\n const endPoint = getVisiblePoint(this.getEndPoint(), false);\n const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n\n return new WrappedRange(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n );\n }\n\n /**\n * returns matched nodes on range\n *\n * @param {Function} [pred] - predicate function\n * @param {Object} [options]\n * @param {Boolean} [options.includeAncestor]\n * @param {Boolean} [options.fullyContains]\n * @return {Node[]}\n */\n nodes(pred, options) {\n pred = pred || func.ok;\n\n const includeAncestor = options && options.includeAncestor;\n const fullyContains = options && options.fullyContains;\n\n // TODO compare points and sort\n const startPoint = this.getStartPoint();\n const endPoint = this.getEndPoint();\n\n const nodes = [];\n const leftEdgeNodes = [];\n\n dom.walkPoint(startPoint, endPoint, function(point) {\n if (dom.isEditable(point.node)) {\n return;\n }\n\n let node;\n if (fullyContains) {\n if (dom.isLeftEdgePoint(point)) {\n leftEdgeNodes.push(point.node);\n }\n if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n node = point.node;\n }\n } else if (includeAncestor) {\n node = dom.ancestor(point.node, pred);\n } else {\n node = point.node;\n }\n\n if (node && pred(node)) {\n nodes.push(node);\n }\n }, true);\n\n return lists.unique(nodes);\n }\n\n /**\n * returns commonAncestor of range\n * @return {Element} - commonAncestor\n */\n commonAncestor() {\n return dom.commonAncestor(this.sc, this.ec);\n }\n\n /**\n * returns expanded range by pred\n *\n * @param {Function} pred - predicate function\n * @return {WrappedRange}\n */\n expand(pred) {\n const startAncestor = dom.ancestor(this.sc, pred);\n const endAncestor = dom.ancestor(this.ec, pred);\n\n if (!startAncestor && !endAncestor) {\n return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n }\n\n const boundaryPoints = this.getPoints();\n\n if (startAncestor) {\n boundaryPoints.sc = startAncestor;\n boundaryPoints.so = 0;\n }\n\n if (endAncestor) {\n boundaryPoints.ec = endAncestor;\n boundaryPoints.eo = dom.nodeLength(endAncestor);\n }\n\n return new WrappedRange(\n boundaryPoints.sc,\n boundaryPoints.so,\n boundaryPoints.ec,\n boundaryPoints.eo\n );\n }\n\n /**\n * @param {Boolean} isCollapseToStart\n * @return {WrappedRange}\n */\n collapse(isCollapseToStart) {\n if (isCollapseToStart) {\n return new WrappedRange(this.sc, this.so, this.sc, this.so);\n } else {\n return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n }\n }\n\n /**\n * splitText on range\n */\n splitText() {\n const isSameContainer = this.sc === this.ec;\n const boundaryPoints = this.getPoints();\n\n if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n this.ec.splitText(this.eo);\n }\n\n if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n boundaryPoints.sc = this.sc.splitText(this.so);\n boundaryPoints.so = 0;\n\n if (isSameContainer) {\n boundaryPoints.ec = boundaryPoints.sc;\n boundaryPoints.eo = this.eo - this.so;\n }\n }\n\n return new WrappedRange(\n boundaryPoints.sc,\n boundaryPoints.so,\n boundaryPoints.ec,\n boundaryPoints.eo\n );\n }\n\n /**\n * delete contents on range\n * @return {WrappedRange}\n */\n deleteContents() {\n if (this.isCollapsed()) {\n return this;\n }\n\n const rng = this.splitText();\n const nodes = rng.nodes(null, {\n fullyContains: true\n });\n\n // find new cursor point\n const point = dom.prevPointUntil(rng.getStartPoint(), function(point) {\n return !lists.contains(nodes, point.node);\n });\n\n const emptyParents = [];\n $.each(nodes, function(idx, node) {\n // find empty parents\n const parent = node.parentNode;\n if (point.node !== parent && dom.nodeLength(parent) === 1) {\n emptyParents.push(parent);\n }\n dom.remove(node, false);\n });\n\n // remove empty parents\n $.each(emptyParents, function(idx, node) {\n dom.remove(node, false);\n });\n\n return new WrappedRange(\n point.node,\n point.offset,\n point.node,\n point.offset\n ).normalize();\n }\n\n /**\n * makeIsOn: return isOn(pred) function\n */\n makeIsOn(pred) {\n return function() {\n const ancestor = dom.ancestor(this.sc, pred);\n return !!ancestor && (ancestor === dom.ancestor(this.ec, pred));\n };\n }\n\n /**\n * @param {Function} pred\n * @return {Boolean}\n */\n isLeftEdgeOf(pred) {\n if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n return false;\n }\n\n const node = dom.ancestor(this.sc, pred);\n return node && dom.isLeftEdgeOf(this.sc, node);\n }\n\n /**\n * returns whether range was collapsed or not\n */\n isCollapsed() {\n return this.sc === this.ec && this.so === this.eo;\n }\n\n /**\n * wrap inline nodes which children of body with paragraph\n *\n * @return {WrappedRange}\n */\n wrapBodyInlineWithPara() {\n if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n this.sc.innerHTML = dom.emptyPara;\n return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n }\n\n /**\n * [workaround] firefox often create range on not visible point. so normalize here.\n * - firefox: |<p>text</p>|\n * - chrome: <p>|text|</p>\n */\n const rng = this.normalize();\n if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n return rng;\n }\n\n // find inline top ancestor\n let topAncestor;\n if (dom.isInline(rng.sc)) {\n const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n topAncestor = lists.last(ancestors);\n if (!dom.isInline(topAncestor)) {\n topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n }\n } else {\n topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n }\n\n // siblings not in paragraph\n let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n // wrap with paragraph\n if (inlineSiblings.length) {\n const para = dom.wrap(lists.head(inlineSiblings), 'p');\n dom.appendChildNodes(para, lists.tail(inlineSiblings));\n }\n\n return this.normalize();\n }\n\n /**\n * insert node at current cursor\n *\n * @param {Node} node\n * @return {Node}\n */\n insertNode(node) {\n const rng = this.wrapBodyInlineWithPara().deleteContents();\n const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n\n if (info.rightNode) {\n info.rightNode.parentNode.insertBefore(node, info.rightNode);\n } else {\n info.container.appendChild(node);\n }\n\n return node;\n }\n\n /**\n * insert html at current cursor\n */\n pasteHTML(markup) {\n const contentsContainer = $('<div></div>').html(markup)[0];\n const childNodes = lists.from(contentsContainer.childNodes);\n\n const rng = this.wrapBodyInlineWithPara().deleteContents();\n\n return childNodes.reverse().map(function(childNode) {\n return rng.insertNode(childNode);\n }).reverse();\n }\n\n /**\n * returns text in range\n *\n * @return {String}\n */\n toString() {\n const nativeRng = this.nativeRange();\n return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n }\n\n /**\n * returns range for word before cursor\n *\n * @param {Boolean} [findAfter] - find after cursor, default: false\n * @return {WrappedRange}\n */\n getWordRange(findAfter) {\n let endPoint = this.getEndPoint();\n\n if (!dom.isCharPoint(endPoint)) {\n return this;\n }\n\n const startPoint = dom.prevPointUntil(endPoint, function(point) {\n return !dom.isCharPoint(point);\n });\n\n if (findAfter) {\n endPoint = dom.nextPointUntil(endPoint, function(point) {\n return !dom.isCharPoint(point);\n });\n }\n\n return new WrappedRange(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n );\n }\n\n /**\n * create offsetPath bookmark\n *\n * @param {Node} editable\n */\n bookmark(editable) {\n return {\n s: {\n path: dom.makeOffsetPath(editable, this.sc),\n offset: this.so\n },\n e: {\n path: dom.makeOffsetPath(editable, this.ec),\n offset: this.eo\n }\n };\n }\n\n /**\n * create offsetPath bookmark base on paragraph\n *\n * @param {Node[]} paras\n */\n paraBookmark(paras) {\n return {\n s: {\n path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n offset: this.so\n },\n e: {\n path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n offset: this.eo\n }\n };\n }\n\n /**\n * getClientRects\n * @return {Rect[]}\n */\n getClientRects() {\n const nativeRng = this.nativeRange();\n return nativeRng.getClientRects();\n }\n}\n\n/**\n * Data structure\n * * BoundaryPoint: a point of dom tree\n * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\nexport default {\n /**\n * create Range Object From arguments or Browser Selection\n *\n * @param {Node} sc - start container\n * @param {Number} so - start offset\n * @param {Node} ec - end container\n * @param {Number} eo - end offset\n * @return {WrappedRange}\n */\n create: function(sc, so, ec, eo) {\n if (arguments.length === 4) {\n return new WrappedRange(sc, so, ec, eo);\n } else if (arguments.length === 2) { // collapsed\n ec = sc;\n eo = so;\n return new WrappedRange(sc, so, ec, eo);\n } else {\n let wrappedRange = this.createFromSelection();\n if (!wrappedRange && arguments.length === 1) {\n wrappedRange = this.createFromNode(arguments[0]);\n return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML);\n }\n return wrappedRange;\n }\n },\n\n createFromSelection: function() {\n let sc, so, ec, eo;\n if (env.isW3CRangeSupport) {\n const selection = document.getSelection();\n if (!selection || selection.rangeCount === 0) {\n return null;\n } else if (dom.isBody(selection.anchorNode)) {\n // Firefox: returns entire body as range on initialization.\n // We won't never need it.\n return null;\n }\n\n const nativeRng = selection.getRangeAt(0);\n sc = nativeRng.startContainer;\n so = nativeRng.startOffset;\n ec = nativeRng.endContainer;\n eo = nativeRng.endOffset;\n } else { // IE8: TextRange\n const textRange = document.selection.createRange();\n const textRangeEnd = textRange.duplicate();\n textRangeEnd.collapse(false);\n const textRangeStart = textRange;\n textRangeStart.collapse(true);\n\n let startPoint = textRangeToPoint(textRangeStart, true);\n let endPoint = textRangeToPoint(textRangeEnd, false);\n\n // same visible point case: range was collapsed.\n if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&\n dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&\n endPoint.node.nextSibling === startPoint.node) {\n startPoint = endPoint;\n }\n\n sc = startPoint.cont;\n so = startPoint.offset;\n ec = endPoint.cont;\n eo = endPoint.offset;\n }\n\n return new WrappedRange(sc, so, ec, eo);\n },\n\n /**\n * @method\n *\n * create WrappedRange from node\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNode: function(node) {\n let sc = node;\n let so = 0;\n let ec = node;\n let eo = dom.nodeLength(ec);\n\n // browsers can't target a picture or void node\n if (dom.isVoid(sc)) {\n so = dom.listPrev(sc).length - 1;\n sc = sc.parentNode;\n }\n if (dom.isBR(ec)) {\n eo = dom.listPrev(ec).length - 1;\n ec = ec.parentNode;\n } else if (dom.isVoid(ec)) {\n eo = dom.listPrev(ec).length;\n ec = ec.parentNode;\n }\n\n return this.create(sc, so, ec, eo);\n },\n\n /**\n * create WrappedRange from node after position\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNodeBefore: function(node) {\n return this.createFromNode(node).collapse(true);\n },\n\n /**\n * create WrappedRange from node after position\n *\n * @param {Node} node\n * @return {WrappedRange}\n */\n createFromNodeAfter: function(node) {\n return this.createFromNode(node).collapse();\n },\n\n /**\n * @method\n *\n * create WrappedRange from bookmark\n *\n * @param {Node} editable\n * @param {Object} bookmark\n * @return {WrappedRange}\n */\n createFromBookmark: function(editable, bookmark) {\n const sc = dom.fromOffsetPath(editable, bookmark.s.path);\n const so = bookmark.s.offset;\n const ec = dom.fromOffsetPath(editable, bookmark.e.path);\n const eo = bookmark.e.offset;\n return new WrappedRange(sc, so, ec, eo);\n },\n\n /**\n * @method\n *\n * create WrappedRange from paraBookmark\n *\n * @param {Object} bookmark\n * @param {Node[]} paras\n * @return {WrappedRange}\n */\n createFromParaBookmark: function(bookmark, paras) {\n const so = bookmark.s.offset;\n const eo = bookmark.e.offset;\n const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n\n return new WrappedRange(sc, so, ec, eo);\n }\n};\n","import $ from 'jquery';\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nexport function readFileAsDataURL(file) {\n return $.Deferred((deferred) => {\n $.extend(new FileReader(), {\n onload: (e) => {\n const dataURL = e.target.result;\n deferred.resolve(dataURL);\n },\n onerror: (err) => {\n deferred.reject(err);\n }\n }).readAsDataURL(file);\n }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nexport function createImage(url) {\n return $.Deferred((deferred) => {\n const $img = $('<img>');\n\n $img.one('load', () => {\n $img.off('error abort');\n deferred.resolve($img);\n }).one('error abort', () => {\n $img.off('load').detach();\n deferred.reject($img);\n }).css({\n display: 'none'\n }).appendTo(document.body).attr('src', url);\n }).promise();\n}\n","import range from '../core/range';\n\nexport default class History {\n constructor($editable) {\n this.stack = [];\n this.stackOffset = -1;\n this.$editable = $editable;\n this.editable = $editable[0];\n }\n\n makeSnapshot() {\n const rng = range.create(this.editable);\n const emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}};\n\n return {\n contents: this.$editable.html(),\n bookmark: (rng ? rng.bookmark(this.editable) : emptyBookmark)\n };\n }\n\n applySnapshot(snapshot) {\n if (snapshot.contents !== null) {\n this.$editable.html(snapshot.contents);\n }\n if (snapshot.bookmark !== null) {\n range.createFromBookmark(this.editable, snapshot.bookmark).select();\n }\n }\n\n /**\n * @method rewind\n * Rewinds the history stack back to the first snapshot taken.\n * Leaves the stack intact, so that \"Redo\" can still be used.\n */\n rewind() {\n // Create snap shot if not yet recorded\n if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n this.recordUndo();\n }\n\n // Return to the first available snapshot.\n this.stackOffset = 0;\n\n // Apply that snapshot.\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n\n /**\n * @method reset\n * Resets the history stack completely; reverting to an empty editor.\n */\n reset() {\n // Clear the stack.\n this.stack = [];\n\n // Restore stackOffset to its original value.\n this.stackOffset = -1;\n\n // Clear the editable area.\n this.$editable.html('');\n\n // Record our first snapshot (of nothing).\n this.recordUndo();\n }\n\n /**\n * undo\n */\n undo() {\n // Create snap shot if not yet recorded\n if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n this.recordUndo();\n }\n\n if (this.stackOffset > 0) {\n this.stackOffset--;\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n }\n\n /**\n * redo\n */\n redo() {\n if (this.stack.length - 1 > this.stackOffset) {\n this.stackOffset++;\n this.applySnapshot(this.stack[this.stackOffset]);\n }\n }\n\n /**\n * recorded undo\n */\n recordUndo() {\n this.stackOffset++;\n\n // Wash out stack after stackOffset\n if (this.stack.length > this.stackOffset) {\n this.stack = this.stack.slice(0, this.stackOffset);\n }\n\n // Create new snapshot and push it to the end\n this.stack.push(this.makeSnapshot());\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class Style {\n /**\n * @method jQueryCSS\n *\n * [workaround] for old jQuery\n * passing an array of style properties to .css()\n * will result in an object of property-value pairs.\n * (compability with version < 1.9)\n *\n * @private\n * @param {jQuery} $obj\n * @param {Array} propertyNames - An array of one or more CSS properties.\n * @return {Object}\n */\n jQueryCSS($obj, propertyNames) {\n if (env.jqueryVersion < 1.9) {\n const result = {};\n $.each(propertyNames, (idx, propertyName) => {\n result[propertyName] = $obj.css(propertyName);\n });\n return result;\n }\n return $obj.css(propertyNames);\n }\n\n /**\n * returns style object from node\n *\n * @param {jQuery} $node\n * @return {Object}\n */\n fromNode($node) {\n const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n const styleInfo = this.jQueryCSS($node, properties) || {};\n styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10);\n return styleInfo;\n }\n\n /**\n * paragraph level style\n *\n * @param {WrappedRange} rng\n * @param {Object} styleInfo\n */\n stylePara(rng, styleInfo) {\n $.each(rng.nodes(dom.isPara, {\n includeAncestor: true\n }), (idx, para) => {\n $(para).css(styleInfo);\n });\n }\n\n /**\n * insert and returns styleNodes on range.\n *\n * @param {WrappedRange} rng\n * @param {Object} [options] - options for styleNodes\n * @param {String} [options.nodeName] - default: `SPAN`\n * @param {Boolean} [options.expandClosestSibling] - default: `false`\n * @param {Boolean} [options.onlyPartialContains] - default: `false`\n * @return {Node[]}\n */\n styleNodes(rng, options) {\n rng = rng.splitText();\n\n const nodeName = (options && options.nodeName) || 'SPAN';\n const expandClosestSibling = !!(options && options.expandClosestSibling);\n const onlyPartialContains = !!(options && options.onlyPartialContains);\n\n if (rng.isCollapsed()) {\n return [rng.insertNode(dom.create(nodeName))];\n }\n\n let pred = dom.makePredByNodeName(nodeName);\n const nodes = rng.nodes(dom.isText, {\n fullyContains: true\n }).map((text) => {\n return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n });\n\n if (expandClosestSibling) {\n if (onlyPartialContains) {\n const nodesInRange = rng.nodes();\n // compose with partial contains predication\n pred = func.and(pred, (node) => {\n return lists.contains(nodesInRange, node);\n });\n }\n\n return nodes.map((node) => {\n const siblings = dom.withClosestSiblings(node, pred);\n const head = lists.head(siblings);\n const tails = lists.tail(siblings);\n $.each(tails, (idx, elem) => {\n dom.appendChildNodes(head, elem.childNodes);\n dom.remove(elem);\n });\n return lists.head(siblings);\n });\n } else {\n return nodes;\n }\n }\n\n /**\n * get current style on cursor\n *\n * @param {WrappedRange} rng\n * @return {Object} - object contains style properties.\n */\n current(rng) {\n const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n let styleInfo = this.fromNode($cont);\n\n // document.queryCommandState for toggle state\n // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n try {\n styleInfo = $.extend(styleInfo, {\n 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n 'font-family': document.queryCommandValue('fontname') || styleInfo['font-family']\n });\n } catch (e) {}\n\n // list-style-type to list-style(unordered, ordered)\n if (!rng.isOnList()) {\n styleInfo['list-style'] = 'none';\n } else {\n const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n const isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1;\n styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n }\n\n const para = dom.ancestor(rng.sc, dom.isPara);\n if (para && para.style['line-height']) {\n styleInfo['line-height'] = para.style.lineHeight;\n } else {\n const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n styleInfo['line-height'] = lineHeight.toFixed(1);\n }\n\n styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n styleInfo.range = rng;\n\n return styleInfo;\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport func from '../core/func';\nimport dom from '../core/dom';\nimport range from '../core/range';\n\nexport default class Bullet {\n /**\n * toggle ordered list\n */\n insertOrderedList(editable) {\n this.toggleList('OL', editable);\n }\n\n /**\n * toggle unordered list\n */\n insertUnorderedList(editable) {\n this.toggleList('UL', editable);\n }\n\n /**\n * indent\n */\n indent(editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n if (dom.isLi(head)) {\n this.wrapList(paras, head.parentNode.nodeName);\n } else {\n $.each(paras, (idx, para) => {\n $(para).css('marginLeft', (idx, val) => {\n return (parseInt(val, 10) || 0) + 25;\n });\n });\n }\n });\n\n rng.select();\n }\n\n /**\n * outdent\n */\n outdent(editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n if (dom.isLi(head)) {\n this.releaseList([paras]);\n } else {\n $.each(paras, (idx, para) => {\n $(para).css('marginLeft', (idx, val) => {\n val = (parseInt(val, 10) || 0);\n return val > 25 ? val - 25 : '';\n });\n });\n }\n });\n\n rng.select();\n }\n\n /**\n * toggle list\n *\n * @param {String} listName - OL or UL\n */\n toggleList(listName, editable) {\n const rng = range.create(editable).wrapBodyInlineWithPara();\n\n let paras = rng.nodes(dom.isPara, { includeAncestor: true });\n const bookmark = rng.paraBookmark(paras);\n const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n // paragraph to list\n if (lists.find(paras, dom.isPurePara)) {\n let wrappedParas = [];\n $.each(clustereds, (idx, paras) => {\n wrappedParas = wrappedParas.concat(this.wrapList(paras, listName));\n });\n paras = wrappedParas;\n // list to paragraph or change list style\n } else {\n const diffLists = rng.nodes(dom.isList, {\n includeAncestor: true\n }).filter((listNode) => {\n return !$.nodeName(listNode, listName);\n });\n\n if (diffLists.length) {\n $.each(diffLists, (idx, listNode) => {\n dom.replace(listNode, listName);\n });\n } else {\n paras = this.releaseList(clustereds, true);\n }\n }\n\n range.createFromParaBookmark(bookmark, paras).select();\n }\n\n /**\n * @param {Node[]} paras\n * @param {String} listName\n * @return {Node[]}\n */\n wrapList(paras, listName) {\n const head = lists.head(paras);\n const last = lists.last(paras);\n\n const prevList = dom.isList(head.previousSibling) && head.previousSibling;\n const nextList = dom.isList(last.nextSibling) && last.nextSibling;\n\n const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n // P to LI\n paras = paras.map((para) => {\n return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n });\n\n // append to list(<ul>, <ol>)\n dom.appendChildNodes(listNode, paras);\n\n if (nextList) {\n dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n dom.remove(nextList);\n }\n\n return paras;\n }\n\n /**\n * @method releaseList\n *\n * @param {Array[]} clustereds\n * @param {Boolean} isEscapseToBody\n * @return {Node[]}\n */\n releaseList(clustereds, isEscapseToBody) {\n let releasedParas = [];\n\n $.each(clustereds, (idx, paras) => {\n const head = lists.head(paras);\n const last = lists.last(paras);\n\n const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n const lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n node: last.parentNode,\n offset: dom.position(last) + 1\n }, {\n isSkipPaddingBlankHTML: true\n }) : null;\n\n const middleList = dom.splitTree(headList, {\n node: head.parentNode,\n offset: dom.position(head)\n }, {\n isSkipPaddingBlankHTML: true\n });\n\n paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi)\n : lists.from(middleList.childNodes).filter(dom.isLi);\n\n // LI to P\n if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n paras = paras.map((para) => {\n return dom.replace(para, 'P');\n });\n }\n\n $.each(lists.from(paras).reverse(), (idx, para) => {\n dom.insertAfter(para, headList);\n });\n\n // remove empty lists\n const rootLists = lists.compact([headList, middleList, lastList]);\n $.each(rootLists, (idx, rootList) => {\n const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n $.each(listNodes.reverse(), (idx, listNode) => {\n if (!dom.nodeLength(listNode)) {\n dom.remove(listNode, true);\n }\n });\n });\n\n releasedParas = releasedParas.concat(paras);\n });\n\n return releasedParas;\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport Bullet from '../editing/Bullet';\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nexport default class Typing {\n constructor() {\n // a Bullet instance to toggle lists off\n this.bullet = new Bullet();\n }\n\n /**\n * insert tab\n *\n * @param {WrappedRange} rng\n * @param {Number} tabsize\n */\n insertTab(rng, tabsize) {\n const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n rng = rng.deleteContents();\n rng.insertNode(tab, true);\n\n rng = range.create(tab, tabsize);\n rng.select();\n }\n\n /**\n * insert paragraph\n */\n insertParagraph(editable) {\n let rng = range.create(editable);\n\n // deleteContents on range.\n rng = rng.deleteContents();\n\n // Wrap range if it needs to be wrapped by paragraph\n rng = rng.wrapBodyInlineWithPara();\n\n // finding paragraph\n const splitRoot = dom.ancestor(rng.sc, dom.isPara);\n\n let nextPara;\n // on paragraph: split paragraph\n if (splitRoot) {\n // if it is an empty line with li\n if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) {\n // toogle UL/OL and escape\n this.bullet.toggleList(splitRoot.parentNode.nodeName);\n return;\n // if it is an empty line with para on blockquote\n } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) {\n // escape blockquote\n dom.insertAfter(splitRoot, splitRoot.parentNode);\n nextPara = splitRoot;\n // if new line has content (not a line break)\n } else {\n nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n\n $.each(emptyAnchors, (idx, anchor) => {\n dom.remove(anchor);\n });\n\n // replace empty heading, pre or custom-made styleTag with P tag\n if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n nextPara = dom.replace(nextPara, 'p');\n }\n }\n // no paragraph: insert empty paragraph\n } else {\n const next = rng.sc.childNodes[rng.so];\n nextPara = $(dom.emptyPara)[0];\n if (next) {\n rng.sc.insertBefore(nextPara, next);\n } else {\n rng.sc.appendChild(nextPara);\n }\n }\n\n range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport lists from '../core/lists';\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nconst TableResultAction = function(startPoint, where, action, domTable) {\n const _startPoint = { 'colPos': 0, 'rowPos': 0 };\n const _virtualTable = [];\n const _actionCellList = [];\n\n /// ///////////////////////////////////////////\n // Private functions\n /// ///////////////////////////////////////////\n\n /**\n * Set the startPoint of action.\n */\n function setStartPoint() {\n if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) {\n console.error('Impossible to identify start Cell point.', startPoint);\n return;\n }\n _startPoint.colPos = startPoint.cellIndex;\n if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n console.error('Impossible to identify start Row point.', startPoint);\n return;\n }\n _startPoint.rowPos = startPoint.parentElement.rowIndex;\n }\n\n /**\n * Define virtual table position info object.\n *\n * @param {int} rowIndex Index position in line of virtual table.\n * @param {int} cellIndex Index position in column of virtual table.\n * @param {object} baseRow Row affected by this position.\n * @param {object} baseCell Cell affected by this position.\n * @param {bool} isSpan Inform if it is an span cell/row.\n */\n function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n const objPosition = {\n 'baseRow': baseRow,\n 'baseCell': baseCell,\n 'isRowSpan': isRowSpan,\n 'isColSpan': isColSpan,\n 'isVirtual': isVirtualCell\n };\n if (!_virtualTable[rowIndex]) {\n _virtualTable[rowIndex] = [];\n }\n _virtualTable[rowIndex][cellIndex] = objPosition;\n }\n\n /**\n * Create action cell object.\n *\n * @param {object} virtualTableCellObj Object of specific position on virtual table.\n * @param {enum} resultAction Action to be applied in that item.\n */\n function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n return {\n 'baseCell': virtualTableCellObj.baseCell,\n 'action': resultAction,\n 'virtualTable': {\n 'rowIndex': virtualRowPosition,\n 'cellIndex': virtualColPosition\n }\n };\n }\n\n /**\n * Recover free index of row to append Cell.\n *\n * @param {int} rowIndex Index of row to find free space.\n * @param {int} cellIndex Index of cell to find free space in table.\n */\n function recoverCellIndex(rowIndex, cellIndex) {\n if (!_virtualTable[rowIndex]) {\n return cellIndex;\n }\n if (!_virtualTable[rowIndex][cellIndex]) {\n return cellIndex;\n }\n\n let newCellIndex = cellIndex;\n while (_virtualTable[rowIndex][newCellIndex]) {\n newCellIndex++;\n if (!_virtualTable[rowIndex][newCellIndex]) {\n return newCellIndex;\n }\n }\n }\n\n /**\n * Recover info about row and cell and add information to virtual table.\n *\n * @param {object} row Row to recover information.\n * @param {object} cell Cell to recover information.\n */\n function addCellInfoToVirtual(row, cell) {\n const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n const cellHasColspan = (cell.colSpan > 1);\n const cellHasRowspan = (cell.rowSpan > 1);\n const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos);\n setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n // Add span rows to virtual Table.\n const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n if (rowspanNumber > 1) {\n for (let rp = 1; rp < rowspanNumber; rp++) {\n const rowspanIndex = row.rowIndex + rp;\n adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n }\n }\n\n // Add span cols to virtual table.\n const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n if (colspanNumber > 1) {\n for (let cp = 1; cp < colspanNumber; cp++) {\n const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp));\n adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n }\n }\n }\n\n /**\n * Process validation and adjust of start point if needed\n *\n * @param {int} rowIndex\n * @param {int} cellIndex\n * @param {object} cell\n * @param {bool} isSelectedCell\n */\n function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n _startPoint.colPos++;\n }\n }\n\n /**\n * Create virtual table of cells with all cells, including span cells.\n */\n function createVirtualTable() {\n const rows = domTable.rows;\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const cells = rows[rowIndex].cells;\n for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n }\n }\n }\n\n /**\n * Get action to be applied on the cell.\n *\n * @param {object} cell virtual table cell to apply action\n */\n function getDeleteResultActionToCell(cell) {\n switch (where) {\n case TableResultAction.where.Column:\n if (cell.isColSpan) {\n return TableResultAction.resultAction.SubtractSpanCount;\n }\n break;\n case TableResultAction.where.Row:\n if (!cell.isVirtual && cell.isRowSpan) {\n return TableResultAction.resultAction.AddCell;\n } else if (cell.isRowSpan) {\n return TableResultAction.resultAction.SubtractSpanCount;\n }\n break;\n }\n return TableResultAction.resultAction.RemoveCell;\n }\n\n /**\n * Get action to be applied on the cell.\n *\n * @param {object} cell virtual table cell to apply action\n */\n function getAddResultActionToCell(cell) {\n switch (where) {\n case TableResultAction.where.Column:\n if (cell.isColSpan) {\n return TableResultAction.resultAction.SumSpanCount;\n } else if (cell.isRowSpan && cell.isVirtual) {\n return TableResultAction.resultAction.Ignore;\n }\n break;\n case TableResultAction.where.Row:\n if (cell.isRowSpan) {\n return TableResultAction.resultAction.SumSpanCount;\n } else if (cell.isColSpan && cell.isVirtual) {\n return TableResultAction.resultAction.Ignore;\n }\n break;\n }\n return TableResultAction.resultAction.AddCell;\n }\n\n function init() {\n setStartPoint();\n createVirtualTable();\n }\n\n /// ///////////////////////////////////////////\n // Public functions\n /// ///////////////////////////////////////////\n\n /**\n * Recover array os what to do in table.\n */\n this.getActionList = function() {\n const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1;\n const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1;\n\n let actualPosition = 0;\n let canContinue = true;\n while (canContinue) {\n const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition;\n const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition;\n const row = _virtualTable[rowPosition];\n if (!row) {\n canContinue = false;\n return _actionCellList;\n }\n const cell = row[colPosition];\n if (!cell) {\n canContinue = false;\n return _actionCellList;\n }\n\n // Define action to be applied in this cell\n let resultAction = TableResultAction.resultAction.Ignore;\n switch (action) {\n case TableResultAction.requestAction.Add:\n resultAction = getAddResultActionToCell(cell);\n break;\n case TableResultAction.requestAction.Delete:\n resultAction = getDeleteResultActionToCell(cell);\n break;\n }\n _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n actualPosition++;\n }\n\n return _actionCellList;\n };\n\n init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = { 'Row': 0, 'Column': 1 };\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = { 'Add': 0, 'Delete': 1 };\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 };\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nexport default class Table {\n /**\n * handle tab key\n *\n * @param {WrappedRange} rng\n * @param {Boolean} isShift\n */\n tab(rng, isShift) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const table = dom.ancestor(cell, dom.isTable);\n const cells = dom.listDescendant(table, dom.isCell);\n\n const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n if (nextCell) {\n range.create(nextCell, 0).select();\n }\n }\n\n /**\n * Add a new row\n *\n * @param {WrappedRange} rng\n * @param {String} position (top/bottom)\n * @return {Node}\n */\n addRow(rng, position) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n\n const currentTr = $(cell).closest('tr');\n const trAttributes = this.recoverAttributes(currentTr);\n const html = $('<tr' + trAttributes + '></tr>');\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let idCell = 0; idCell < actions.length; idCell++) {\n const currentCell = actions[idCell];\n const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n switch (currentCell.action) {\n case TableResultAction.resultAction.AddCell:\n html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n break;\n case TableResultAction.resultAction.SumSpanCount:\n if (position === 'top') {\n const baseCellTr = currentCell.baseCell.parent;\n const isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n if (isTopFromRowSpan) {\n const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n html.append(newTd);\n break;\n }\n }\n let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n rowspanNumber++;\n currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n break;\n }\n }\n\n if (position === 'top') {\n currentTr.before(html);\n } else {\n const cellHasRowspan = (cell.rowSpan > 1);\n if (cellHasRowspan) {\n const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html));\n return;\n }\n currentTr.after(html);\n }\n }\n\n /**\n * Add a new col\n *\n * @param {WrappedRange} rng\n * @param {String} position (left/right)\n * @return {Node}\n */\n addCol(rng, position) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const rowsGroup = $(row).siblings();\n rowsGroup.push(row);\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n TableResultAction.requestAction.Add, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n const currentCell = actions[actionIndex];\n const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n switch (currentCell.action) {\n case TableResultAction.resultAction.AddCell:\n if (position === 'right') {\n $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n } else {\n $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n }\n break;\n case TableResultAction.resultAction.SumSpanCount:\n if (position === 'right') {\n let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n colspanNumber++;\n currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n } else {\n $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n }\n break;\n }\n }\n }\n\n /*\n * Copy attributes from element.\n *\n * @param {object} Element to recover attributes.\n * @return {string} Copied string elements.\n */\n recoverAttributes(el) {\n let resultStr = '';\n\n if (!el) {\n return resultStr;\n }\n\n const attrList = el.attributes || [];\n\n for (let i = 0; i < attrList.length; i++) {\n if (attrList[i].name.toLowerCase() === 'id') {\n continue;\n }\n\n if (attrList[i].specified) {\n resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n }\n }\n\n return resultStr;\n }\n\n /**\n * Delete current row\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteRow(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const cellPos = row.children('td, th').index($(cell));\n const rowPos = row[0].rowIndex;\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n if (!actions[actionIndex]) {\n continue;\n }\n\n const baseCell = actions[actionIndex].baseCell;\n const virtualPosition = actions[actionIndex].virtualTable;\n const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1);\n let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0;\n switch (actions[actionIndex].action) {\n case TableResultAction.resultAction.Ignore:\n continue;\n case TableResultAction.resultAction.AddCell:\n const nextRow = row.next('tr')[0];\n if (!nextRow) { continue; }\n const cloneRow = row[0].cells[cellPos];\n if (hasRowspan) {\n if (rowspanNumber > 2) {\n rowspanNumber--;\n nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n nextRow.cells[cellPos].innerHTML = '';\n } else if (rowspanNumber === 2) {\n nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n nextRow.cells[cellPos].removeAttribute('rowSpan');\n nextRow.cells[cellPos].innerHTML = '';\n }\n }\n continue;\n case TableResultAction.resultAction.SubtractSpanCount:\n if (hasRowspan) {\n if (rowspanNumber > 2) {\n rowspanNumber--;\n baseCell.setAttribute('rowSpan', rowspanNumber);\n if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n } else if (rowspanNumber === 2) {\n baseCell.removeAttribute('rowSpan');\n if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n }\n }\n continue;\n case TableResultAction.resultAction.RemoveCell:\n // Do not need remove cell because row will be deleted.\n continue;\n }\n }\n row.remove();\n }\n\n /**\n * Delete current col\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteCol(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n const row = $(cell).closest('tr');\n const cellPos = row.children('td, th').index($(cell));\n\n const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n const actions = vTable.getActionList();\n\n for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n if (!actions[actionIndex]) {\n continue;\n }\n switch (actions[actionIndex].action) {\n case TableResultAction.resultAction.Ignore:\n continue;\n case TableResultAction.resultAction.SubtractSpanCount:\n const baseCell = actions[actionIndex].baseCell;\n const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1);\n if (hasColspan) {\n let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0;\n if (colspanNumber > 2) {\n colspanNumber--;\n baseCell.setAttribute('colSpan', colspanNumber);\n if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n } else if (colspanNumber === 2) {\n baseCell.removeAttribute('colSpan');\n if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n }\n }\n continue;\n case TableResultAction.resultAction.RemoveCell:\n dom.remove(actions[actionIndex].baseCell, true);\n continue;\n }\n }\n }\n\n /**\n * create empty table element\n *\n * @param {Number} rowCount\n * @param {Number} colCount\n * @return {Node}\n */\n createTable(colCount, rowCount, options) {\n const tds = [];\n let tdHTML;\n for (let idxCol = 0; idxCol < colCount; idxCol++) {\n tds.push('<td>' + dom.blank + '</td>');\n }\n tdHTML = tds.join('');\n\n const trs = [];\n let trHTML;\n for (let idxRow = 0; idxRow < rowCount; idxRow++) {\n trs.push('<tr>' + tdHTML + '</tr>');\n }\n trHTML = trs.join('');\n const $table = $('<table>' + trHTML + '</table>');\n if (options && options.tableClassName) {\n $table.addClass(options.tableClassName);\n }\n\n return $table[0];\n }\n\n /**\n * Delete current table\n *\n * @param {WrappedRange} rng\n * @return {Node}\n */\n deleteTable(rng) {\n const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n $(cell).closest('table').remove();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport { readFileAsDataURL, createImage } from '../core/async';\nimport History from '../editing/History';\nimport Style from '../editing/Style';\nimport Typing from '../editing/Typing';\nimport Table from '../editing/Table';\nimport Bullet from '../editing/Bullet';\n\nconst KEY_BOGUS = 'bogus';\n\n/**\n * @class Editor\n */\nexport default class Editor {\n constructor(context) {\n this.context = context;\n\n this.$note = context.layoutInfo.note;\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n this.editable = this.$editable[0];\n this.lastRange = null;\n\n this.style = new Style();\n this.table = new Table();\n this.typing = new Typing();\n this.bullet = new Bullet();\n this.history = new History(this.$editable);\n\n this.context.memo('help.undo', this.lang.help.undo);\n this.context.memo('help.redo', this.lang.help.redo);\n this.context.memo('help.tab', this.lang.help.tab);\n this.context.memo('help.untab', this.lang.help.untab);\n this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n this.context.memo('help.indent', this.lang.help.indent);\n this.context.memo('help.outdent', this.lang.help.outdent);\n this.context.memo('help.formatPara', this.lang.help.formatPara);\n this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n this.context.memo('help.fontName', this.lang.help.fontName);\n\n // native commands(with execCommand), generate function for execCommand\n const commands = [\n 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',\n 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',\n 'formatBlock', 'removeFormat', 'backColor'\n ];\n\n for (let idx = 0, len = commands.length; idx < len; idx++) {\n this[commands[idx]] = ((sCmd) => {\n return (value) => {\n this.beforeCommand();\n document.execCommand(sCmd, false, value);\n this.afterCommand(true);\n };\n })(commands[idx]);\n this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n }\n\n this.fontName = this.wrapCommand((value) => {\n return this.fontStyling('font-family', \"\\'\" + value + \"\\'\");\n });\n\n this.fontSize = this.wrapCommand((value) => {\n return this.fontStyling('font-size', value + 'px');\n });\n\n for (let idx = 1; idx <= 6; idx++) {\n this['formatH' + idx] = ((idx) => {\n return () => {\n this.formatBlock('H' + idx);\n };\n })(idx);\n this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]);\n };\n\n this.insertParagraph = this.wrapCommand(() => {\n this.typing.insertParagraph(this.editable);\n });\n\n this.insertOrderedList = this.wrapCommand(() => {\n this.bullet.insertOrderedList(this.editable);\n });\n\n this.insertUnorderedList = this.wrapCommand(() => {\n this.bullet.insertUnorderedList(this.editable);\n });\n\n this.indent = this.wrapCommand(() => {\n this.bullet.indent(this.editable);\n });\n\n this.outdent = this.wrapCommand(() => {\n this.bullet.outdent(this.editable);\n });\n\n /**\n * insertNode\n * insert node\n * @param {Node} node\n */\n this.insertNode = this.wrapCommand((node) => {\n if (this.isLimited($(node).text().length)) {\n return;\n }\n const rng = this.createRange();\n rng.insertNode(node);\n range.createFromNodeAfter(node).select();\n });\n\n /**\n * insert text\n * @param {String} text\n */\n this.insertText = this.wrapCommand((text) => {\n if (this.isLimited(text.length)) {\n return;\n }\n const rng = this.createRange();\n const textNode = rng.insertNode(dom.createText(text));\n range.create(textNode, dom.nodeLength(textNode)).select();\n });\n /**\n * paste HTML\n * @param {String} markup\n */\n this.pasteHTML = this.wrapCommand((markup) => {\n if (this.isLimited(markup.length)) {\n return;\n }\n const contents = this.createRange().pasteHTML(markup);\n range.createFromNodeAfter(lists.last(contents)).select();\n });\n\n /**\n * formatBlock\n *\n * @param {String} tagName\n */\n this.formatBlock = this.wrapCommand((tagName, $target) => {\n const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle;\n if (onApplyCustomStyle) {\n onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock);\n } else {\n this.onFormatBlock(tagName, $target);\n }\n });\n\n /**\n * insert horizontal rule\n */\n this.insertHorizontalRule = this.wrapCommand(() => {\n const hrNode = this.createRange().insertNode(dom.create('HR'));\n if (hrNode.nextSibling) {\n range.create(hrNode.nextSibling, 0).normalize().select();\n }\n });\n\n /**\n * lineHeight\n * @param {String} value\n */\n this.lineHeight = this.wrapCommand((value) => {\n this.style.stylePara(this.createRange(), {\n lineHeight: value\n });\n });\n\n /**\n * create link (command)\n *\n * @param {Object} linkInfo\n */\n this.createLink = this.wrapCommand((linkInfo) => {\n let linkUrl = linkInfo.url;\n const linkText = linkInfo.text;\n const isNewWindow = linkInfo.isNewWindow;\n let rng = linkInfo.range || this.createRange();\n const isTextChanged = rng.toString() !== linkText;\n\n // handle spaced urls from input\n if (typeof linkUrl === 'string') {\n linkUrl = linkUrl.trim();\n }\n\n if (this.options.onCreateLink) {\n linkUrl = this.options.onCreateLink(linkUrl);\n } else {\n // if url doesn't match an URL schema, set http:// as default\n linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?/.test(linkUrl)\n ? linkUrl : 'http://' + linkUrl;\n }\n\n let anchors = [];\n if (isTextChanged) {\n rng = rng.deleteContents();\n const anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]);\n anchors.push(anchor);\n } else {\n anchors = this.style.styleNodes(rng, {\n nodeName: 'A',\n expandClosestSibling: true,\n onlyPartialContains: true\n });\n }\n\n $.each(anchors, (idx, anchor) => {\n $(anchor).attr('href', linkUrl);\n if (isNewWindow) {\n $(anchor).attr('target', '_blank');\n } else {\n $(anchor).removeAttr('target');\n }\n });\n\n const startRange = range.createFromNodeBefore(lists.head(anchors));\n const startPoint = startRange.getStartPoint();\n const endRange = range.createFromNodeAfter(lists.last(anchors));\n const endPoint = endRange.getEndPoint();\n\n range.create(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n ).select();\n });\n\n /**\n * setting color\n *\n * @param {Object} sObjColor color code\n * @param {String} sObjColor.foreColor foreground color\n * @param {String} sObjColor.backColor background color\n */\n this.color = this.wrapCommand((colorInfo) => {\n const foreColor = colorInfo.foreColor;\n const backColor = colorInfo.backColor;\n\n if (foreColor) { document.execCommand('foreColor', false, foreColor); }\n if (backColor) { document.execCommand('backColor', false, backColor); }\n });\n\n /**\n * Set foreground color\n *\n * @param {String} colorCode foreground color code\n */\n this.foreColor = this.wrapCommand((colorInfo) => {\n document.execCommand('styleWithCSS', false, true);\n document.execCommand('foreColor', false, colorInfo);\n });\n\n /**\n * insert Table\n *\n * @param {String} dimension of table (ex : \"5x5\")\n */\n this.insertTable = this.wrapCommand((dim) => {\n const dimension = dim.split('x');\n\n const rng = this.createRange().deleteContents();\n rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options));\n });\n\n /**\n * remove media object and Figure Elements if media object is img with Figure.\n */\n this.removeMedia = this.wrapCommand(() => {\n let $target = $(this.restoreTarget()).parent();\n if ($target.parent('figure').length) {\n $target.parent('figure').remove();\n } else {\n $target = $(this.restoreTarget()).detach();\n }\n this.context.triggerEvent('media.delete', $target, this.$editable);\n });\n\n /**\n * float me\n *\n * @param {String} value\n */\n this.floatMe = this.wrapCommand((value) => {\n const $target = $(this.restoreTarget());\n $target.toggleClass('note-float-left', value === 'left');\n $target.toggleClass('note-float-right', value === 'right');\n $target.css('float', value);\n });\n\n /**\n * resize overlay element\n * @param {String} value\n */\n this.resize = this.wrapCommand((value) => {\n const $target = $(this.restoreTarget());\n $target.css({\n width: value * 100 + '%',\n height: ''\n });\n });\n }\n\n initialize() {\n // bind custom events\n this.$editable.on('keydown', (event) => {\n if (event.keyCode === key.code.ENTER) {\n this.context.triggerEvent('enter', event);\n }\n this.context.triggerEvent('keydown', event);\n\n if (!event.isDefaultPrevented()) {\n if (this.options.shortcuts) {\n this.handleKeyMap(event);\n } else {\n this.preventDefaultEditableShortCuts(event);\n }\n }\n if (this.isLimited(1, event)) {\n return false;\n }\n }).on('keyup', (event) => {\n this.context.triggerEvent('keyup', event);\n }).on('focus', (event) => {\n this.context.triggerEvent('focus', event);\n }).on('blur', (event) => {\n this.context.triggerEvent('blur', event);\n }).on('mousedown', (event) => {\n this.context.triggerEvent('mousedown', event);\n }).on('mouseup', (event) => {\n this.context.triggerEvent('mouseup', event);\n }).on('scroll', (event) => {\n this.context.triggerEvent('scroll', event);\n }).on('paste', (event) => {\n this.context.triggerEvent('paste', event);\n });\n\n // init content before set event\n this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n\n this.$editable.on(env.inputEventName, func.debounce(() => {\n this.context.triggerEvent('change', this.$editable.html());\n }, 100));\n\n this.$editor.on('focusin', (event) => {\n this.context.triggerEvent('focusin', event);\n }).on('focusout', (event) => {\n this.context.triggerEvent('focusout', event);\n });\n\n if (!this.options.airMode) {\n if (this.options.width) {\n this.$editor.outerWidth(this.options.width);\n }\n if (this.options.height) {\n this.$editable.outerHeight(this.options.height);\n }\n if (this.options.maxHeight) {\n this.$editable.css('max-height', this.options.maxHeight);\n }\n if (this.options.minHeight) {\n this.$editable.css('min-height', this.options.minHeight);\n }\n }\n\n this.history.recordUndo();\n }\n\n destroy() {\n this.$editable.off();\n }\n\n handleKeyMap(event) {\n const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n const keys = [];\n\n if (event.metaKey) { keys.push('CMD'); }\n if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }\n if (event.shiftKey) { keys.push('SHIFT'); }\n\n const keyName = key.nameFromCode[event.keyCode];\n if (keyName) {\n keys.push(keyName);\n }\n\n const eventName = keyMap[keys.join('+')];\n if (eventName) {\n if (this.context.invoke(eventName) !== false) {\n event.preventDefault();\n }\n } else if (key.isEdit(event.keyCode)) {\n this.afterCommand();\n }\n }\n\n preventDefaultEditableShortCuts(event) {\n // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n if ((event.ctrlKey || event.metaKey) &&\n lists.contains([66, 73, 85], event.keyCode)) {\n event.preventDefault();\n }\n }\n\n isLimited(pad, event) {\n pad = pad || 0;\n\n if (typeof event !== 'undefined') {\n if (key.isMove(event.keyCode) ||\n (event.ctrlKey || event.metaKey) ||\n lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n return false;\n }\n }\n\n if (this.options.maxTextLength > 0) {\n if ((this.$editable.text().length + pad) >= this.options.maxTextLength) {\n return true;\n }\n }\n return false;\n }\n /**\n * create range\n * @return {WrappedRange}\n */\n createRange() {\n this.focus();\n return range.create(this.editable);\n }\n\n /**\n * saveRange\n *\n * save current range\n *\n * @param {Boolean} [thenCollapse=false]\n */\n saveRange(thenCollapse) {\n this.lastRange = this.createRange();\n if (thenCollapse) {\n this.lastRange.collapse().select();\n }\n }\n\n /**\n * restoreRange\n *\n * restore lately range\n */\n restoreRange() {\n if (this.lastRange) {\n this.lastRange.select();\n this.focus();\n }\n }\n\n saveTarget(node) {\n this.$editable.data('target', node);\n }\n\n clearTarget() {\n this.$editable.removeData('target');\n }\n\n restoreTarget() {\n return this.$editable.data('target');\n }\n\n /**\n * currentStyle\n *\n * current style\n * @return {Object|Boolean} unfocus\n */\n currentStyle() {\n let rng = range.create();\n if (rng) {\n rng = rng.normalize();\n }\n return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n }\n\n /**\n * style from node\n *\n * @param {jQuery} $node\n * @return {Object}\n */\n styleFromNode($node) {\n return this.style.fromNode($node);\n }\n\n /**\n * undo\n */\n undo() {\n this.context.triggerEvent('before.command', this.$editable.html());\n this.history.undo();\n this.context.triggerEvent('change', this.$editable.html());\n }\n\n /**\n * redo\n */\n redo() {\n this.context.triggerEvent('before.command', this.$editable.html());\n this.history.redo();\n this.context.triggerEvent('change', this.$editable.html());\n }\n\n /**\n * before command\n */\n beforeCommand() {\n this.context.triggerEvent('before.command', this.$editable.html());\n // keep focus on editable before command execution\n this.focus();\n }\n\n /**\n * after command\n * @param {Boolean} isPreventTrigger\n */\n afterCommand(isPreventTrigger) {\n this.normalizeContent();\n this.history.recordUndo();\n if (!isPreventTrigger) {\n this.context.triggerEvent('change', this.$editable.html());\n }\n }\n\n /**\n * handle tab key\n */\n tab() {\n const rng = this.createRange();\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.table.tab(rng);\n } else {\n if (this.options.tabSize === 0) {\n return false;\n }\n\n if (!this.isLimited(this.options.tabSize)) {\n this.beforeCommand();\n this.typing.insertTab(rng, this.options.tabSize);\n this.afterCommand();\n }\n }\n }\n\n /**\n * handle shift+tab key\n */\n untab() {\n const rng = this.createRange();\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.table.tab(rng, true);\n } else {\n if (this.options.tabSize === 0) {\n return false;\n }\n }\n }\n\n /**\n * run given function between beforeCommand and afterCommand\n */\n wrapCommand(fn) {\n return () => {\n this.beforeCommand();\n fn.apply(this, arguments);\n this.afterCommand();\n };\n }\n\n /**\n * insert image\n *\n * @param {String} src\n * @param {String|Function} param\n * @return {Promise}\n */\n insertImage(src, param) {\n return createImage(src, param).then(($image) => {\n this.beforeCommand();\n\n if (typeof param === 'function') {\n param($image);\n } else {\n if (typeof param === 'string') {\n $image.attr('data-filename', param);\n }\n $image.css('width', Math.min(this.$editable.width(), $image.width()));\n }\n\n $image.show();\n range.create(this.editable).insertNode($image[0]);\n range.createFromNodeAfter($image[0]).select();\n this.afterCommand();\n }).fail((e) => {\n this.context.triggerEvent('image.upload.error', e);\n });\n }\n\n /**\n * insertImages\n * @param {File[]} files\n */\n insertImages(files) {\n $.each(files, (idx, file) => {\n const filename = file.name;\n if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) {\n this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError);\n } else {\n readFileAsDataURL(file).then((dataURL) => {\n return this.insertImage(dataURL, filename);\n }).fail(() => {\n this.context.triggerEvent('image.upload.error');\n });\n }\n });\n }\n\n /**\n * insertImagesOrCallback\n * @param {File[]} files\n */\n insertImagesOrCallback(files) {\n const callbacks = this.options.callbacks;\n\n // If onImageUpload this.options setted\n if (callbacks.onImageUpload) {\n this.context.triggerEvent('image.upload', files);\n // else insert Image as dataURL\n } else {\n this.insertImages(files);\n }\n }\n\n /**\n * return selected plain text\n * @return {String} text\n */\n getSelectedText() {\n let rng = this.createRange();\n\n // if range on anchor, expand range with anchor\n if (rng.isOnAnchor()) {\n rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n }\n\n return rng.toString();\n }\n\n onFormatBlock(tagName, $target) {\n // [workaround] for MSIE, IE need `<`\n tagName = env.isMSIE ? '<' + tagName + '>' : tagName;\n document.execCommand('FormatBlock', false, tagName);\n\n // support custom class\n if ($target && $target.length) {\n const className = $target[0].className || '';\n if (className) {\n const currentRange = this.createRange();\n\n const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName);\n $parent.addClass(className);\n }\n }\n }\n\n formatPara() {\n this.formatBlock('P');\n }\n\n fontStyling(target, value) {\n const rng = this.createRange();\n\n if (rng) {\n const spans = this.style.styleNodes(rng);\n $(spans).css(target, value);\n\n // [workaround] added styled bogus span for style\n // - also bogus character needed for cursor position\n if (rng.isCollapsed()) {\n const firstSpan = lists.head(spans);\n if (firstSpan && !dom.nodeLength(firstSpan)) {\n firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n range.createFromNodeAfter(firstSpan.firstChild).select();\n this.$editable.data(KEY_BOGUS, firstSpan);\n }\n }\n }\n }\n\n /**\n * unlink\n *\n * @type command\n */\n unlink() {\n let rng = this.createRange();\n if (rng.isOnAnchor()) {\n const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n rng = range.createFromNode(anchor);\n rng.select();\n\n this.beforeCommand();\n document.execCommand('unlink');\n this.afterCommand();\n }\n }\n\n /**\n * returns link info\n *\n * @return {Object}\n * @return {WrappedRange} return.range\n * @return {String} return.text\n * @return {Boolean} [return.isNewWindow=true]\n * @return {String} [return.url=\"\"]\n */\n getLinkInfo() {\n const rng = this.createRange().expand(dom.isAnchor);\n\n // Get the first anchor on range(for edit).\n const $anchor = $(lists.head(rng.nodes(dom.isAnchor)));\n const linkInfo = {\n range: rng,\n text: rng.toString(),\n url: $anchor.length ? $anchor.attr('href') : ''\n };\n\n // Define isNewWindow when anchor exists.\n if ($anchor.length) {\n linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n }\n\n return linkInfo;\n }\n\n addRow(position) {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.addRow(rng, position);\n this.afterCommand();\n }\n }\n\n addCol(position) {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.addCol(rng, position);\n this.afterCommand();\n }\n }\n\n deleteRow() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteRow(rng);\n this.afterCommand();\n }\n }\n\n deleteCol() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteCol(rng);\n this.afterCommand();\n }\n }\n\n deleteTable() {\n const rng = this.createRange(this.$editable);\n if (rng.isCollapsed() && rng.isOnCell()) {\n this.beforeCommand();\n this.table.deleteTable(rng);\n this.afterCommand();\n }\n }\n\n /**\n * @param {Position} pos\n * @param {jQuery} $target - target element\n * @param {Boolean} [bKeepRatio] - keep ratio\n */\n resizeTo(pos, $target, bKeepRatio) {\n let imageSize;\n if (bKeepRatio) {\n const newRatio = pos.y / pos.x;\n const ratio = $target.data('ratio');\n imageSize = {\n width: ratio > newRatio ? pos.x : pos.y / ratio,\n height: ratio > newRatio ? pos.x * ratio : pos.y\n };\n } else {\n imageSize = {\n width: pos.x,\n height: pos.y\n };\n }\n\n $target.css(imageSize);\n }\n\n /**\n * returns whether editable area has focus or not.\n */\n hasFocus() {\n return this.$editable.is(':focus');\n }\n\n /**\n * set focus\n */\n focus() {\n // [workaround] Screen will move when page is scolled in IE.\n // - do focus when not focused\n if (!this.hasFocus()) {\n this.$editable.focus();\n }\n }\n\n /**\n * returns whether contents is empty or not.\n * @return {Boolean}\n */\n isEmpty() {\n return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n }\n\n /**\n * Removes all contents and restores the editable instance to an _emptyPara_.\n */\n empty() {\n this.context.invoke('code', dom.emptyPara);\n }\n\n /**\n * normalize content\n */\n normalizeContent() {\n this.$editable[0].normalize();\n }\n}\n","import lists from '../core/lists';\n\nexport default class Clipboard {\n constructor(context) {\n this.context = context;\n this.$editable = context.layoutInfo.editable;\n }\n\n initialize() {\n this.$editable.on('paste', this.pasteByEvent.bind(this));\n }\n\n /**\n * paste by clipboard event\n *\n * @param {Event} event\n */\n pasteByEvent(event) {\n const clipboardData = event.originalEvent.clipboardData;\n if (clipboardData && clipboardData.items && clipboardData.items.length) {\n const item = lists.head(clipboardData.items);\n if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n }\n this.context.invoke('editor.afterCommand');\n }\n }\n}\n","import $ from 'jquery';\n\nexport default class Dropzone {\n constructor(context) {\n this.context = context;\n this.$eventListener = $(document);\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.lang = this.options.langInfo;\n this.documentEventHandlers = {};\n\n this.$dropzone = $([\n '<div class=\"note-dropzone\">',\n ' <div class=\"note-dropzone-message\"/>',\n '</div>'\n ].join('')).prependTo(this.$editor);\n }\n\n /**\n * attach Drag and Drop Events\n */\n initialize() {\n if (this.options.disableDragAndDrop) {\n // prevent default drop event\n this.documentEventHandlers.onDrop = (e) => {\n e.preventDefault();\n };\n // do not consider outside of dropzone\n this.$eventListener = this.$dropzone;\n this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n } else {\n this.attachDragAndDropEvent();\n }\n }\n\n /**\n * attach Drag and Drop Events\n */\n attachDragAndDropEvent() {\n let collection = $();\n const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n this.documentEventHandlers.onDragenter = (e) => {\n const isCodeview = this.context.invoke('codeview.isActivated');\n const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0;\n if (!isCodeview && !collection.length && hasEditorSize) {\n this.$editor.addClass('dragover');\n this.$dropzone.width(this.$editor.width());\n this.$dropzone.height(this.$editor.height());\n $dropzoneMessage.text(this.lang.image.dragImageHere);\n }\n collection = collection.add(e.target);\n };\n\n this.documentEventHandlers.onDragleave = (e) => {\n collection = collection.not(e.target);\n if (!collection.length) {\n this.$editor.removeClass('dragover');\n }\n };\n\n this.documentEventHandlers.onDrop = () => {\n collection = $();\n this.$editor.removeClass('dragover');\n };\n\n // show dropzone on dragenter when dragging a object to document\n // -but only if the editor is visible, i.e. has a positive width and height\n this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter)\n .on('dragleave', this.documentEventHandlers.onDragleave)\n .on('drop', this.documentEventHandlers.onDrop);\n\n // change dropzone's message on hover.\n this.$dropzone.on('dragenter', () => {\n this.$dropzone.addClass('hover');\n $dropzoneMessage.text(this.lang.image.dropImage);\n }).on('dragleave', () => {\n this.$dropzone.removeClass('hover');\n $dropzoneMessage.text(this.lang.image.dragImageHere);\n });\n\n // attach dropImage\n this.$dropzone.on('drop', (event) => {\n const dataTransfer = event.originalEvent.dataTransfer;\n\n // stop the browser from opening the dropped content\n event.preventDefault();\n\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n this.$editable.focus();\n this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n } else {\n $.each(dataTransfer.types, (idx, type) => {\n const content = dataTransfer.getData(type);\n\n if (type.toLowerCase().indexOf('text') > -1) {\n this.context.invoke('editor.pasteHTML', content);\n } else {\n $(content).each((idx, item) => {\n this.context.invoke('editor.insertNode', item);\n });\n }\n });\n }\n }).on('dragover', false); // prevent default dragover event\n }\n\n destroy() {\n Object.keys(this.documentEventHandlers).forEach((key) => {\n this.$eventListener.off(key.substr(2).toLowerCase(), this.documentEventHandlers[key]);\n });\n this.documentEventHandlers = {};\n }\n}\n","import env from '../core/env';\nimport dom from '../core/dom';\n\nlet CodeMirror;\nif (env.hasCodeMirror) {\n if (env.isSupportAmd) {\n require(['codemirror'], function(cm) {\n CodeMirror = cm;\n });\n } else {\n CodeMirror = window.CodeMirror;\n }\n}\n\n/**\n * @class Codeview\n */\nexport default class CodeView {\n constructor(context) {\n this.context = context;\n this.$editor = context.layoutInfo.editor;\n this.$editable = context.layoutInfo.editable;\n this.$codable = context.layoutInfo.codable;\n this.options = context.options;\n }\n\n sync() {\n const isCodeview = this.isActivated();\n if (isCodeview && env.hasCodeMirror) {\n this.$codable.data('cmEditor').save();\n }\n }\n\n /**\n * @return {Boolean}\n */\n isActivated() {\n return this.$editor.hasClass('codeview');\n }\n\n /**\n * toggle codeview\n */\n toggle() {\n if (this.isActivated()) {\n this.deactivate();\n } else {\n this.activate();\n }\n this.context.triggerEvent('codeview.toggled');\n }\n\n /**\n * activate code view\n */\n activate() {\n this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n this.$codable.height(this.$editable.height());\n\n this.context.invoke('toolbar.updateCodeview', true);\n this.$editor.addClass('codeview');\n this.$codable.focus();\n\n // activate CodeMirror as codable\n if (env.hasCodeMirror) {\n const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n // CodeMirror TernServer\n if (this.options.codemirror.tern) {\n const server = new CodeMirror.TernServer(this.options.codemirror.tern);\n cmEditor.ternServer = server;\n cmEditor.on('cursorActivity', (cm) => {\n server.updateArgHints(cm);\n });\n }\n\n cmEditor.on('blur', (event) => {\n this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n });\n\n // CodeMirror hasn't Padding.\n cmEditor.setSize(null, this.$editable.outerHeight());\n this.$codable.data('cmEditor', cmEditor);\n } else {\n this.$codable.on('blur', (event) => {\n this.context.triggerEvent('blur.codeview', this.$codable.val(), event);\n });\n }\n }\n\n /**\n * deactivate code view\n */\n deactivate() {\n // deactivate CodeMirror as codable\n if (env.hasCodeMirror) {\n const cmEditor = this.$codable.data('cmEditor');\n this.$codable.val(cmEditor.getValue());\n cmEditor.toTextArea();\n }\n\n const value = dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara;\n const isChange = this.$editable.html() !== value;\n\n this.$editable.html(value);\n this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n this.$editor.removeClass('codeview');\n\n if (isChange) {\n this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n }\n\n this.$editable.focus();\n\n this.context.invoke('toolbar.updateCodeview', false);\n }\n\n destroy() {\n if (this.isActivated()) {\n this.deactivate();\n }\n }\n}\n","import $ from 'jquery';\nconst EDITABLE_PADDING = 24;\n\nexport default class Statusbar {\n constructor(context) {\n this.$document = $(document);\n this.$statusbar = context.layoutInfo.statusbar;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n }\n\n initialize() {\n if (this.options.airMode || this.options.disableResizeEditor) {\n this.destroy();\n return;\n }\n\n this.$statusbar.on('mousedown', (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n const editableTop = this.$editable.offset().top - this.$document.scrollTop();\n const onMouseMove = (event) => {\n let height = event.clientY - (editableTop + EDITABLE_PADDING);\n\n height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height;\n height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height;\n\n this.$editable.height(height);\n };\n\n this.$document.on('mousemove', onMouseMove).one('mouseup', () => {\n this.$document.off('mousemove', onMouseMove);\n });\n });\n }\n\n destroy() {\n this.$statusbar.off();\n this.$statusbar.addClass('locked');\n }\n}\n","import $ from 'jquery';\n\nexport default class Fullscreen {\n constructor(context) {\n this.context = context;\n\n this.$editor = context.layoutInfo.editor;\n this.$toolbar = context.layoutInfo.toolbar;\n this.$editable = context.layoutInfo.editable;\n this.$codable = context.layoutInfo.codable;\n\n this.$window = $(window);\n this.$scrollbar = $('html, body');\n\n this.onResize = () => {\n this.resizeTo({\n h: this.$window.height() - this.$toolbar.outerHeight()\n });\n };\n }\n\n resizeTo(size) {\n this.$editable.css('height', size.h);\n this.$codable.css('height', size.h);\n if (this.$codable.data('cmeditor')) {\n this.$codable.data('cmeditor').setsize(null, size.h);\n }\n }\n\n /**\n * toggle fullscreen\n */\n toggle() {\n this.$editor.toggleClass('fullscreen');\n if (this.isFullscreen()) {\n this.$editable.data('orgHeight', this.$editable.css('height'));\n this.$window.on('resize', this.onResize).trigger('resize');\n this.$scrollbar.css('overflow', 'hidden');\n } else {\n this.$window.off('resize', this.onResize);\n this.resizeTo({ h: this.$editable.data('orgHeight') });\n this.$scrollbar.css('overflow', 'visible');\n }\n\n this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n }\n\n isFullscreen() {\n return this.$editor.hasClass('fullscreen');\n }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\n\nexport default class Handle {\n constructor(context) {\n this.context = context;\n this.$document = $(document);\n this.$editingArea = context.layoutInfo.editingArea;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n this.events = {\n 'summernote.mousedown': (we, e) => {\n if (this.update(e.target)) {\n e.preventDefault();\n }\n },\n 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => {\n this.update();\n },\n 'summernote.disable': () => {\n this.hide();\n },\n 'summernote.codeview.toggled': () => {\n this.update();\n }\n };\n }\n\n initialize() {\n this.$handle = $([\n '<div class=\"note-handle\">',\n '<div class=\"note-control-selection\">',\n '<div class=\"note-control-selection-bg\"></div>',\n '<div class=\"note-control-holder note-control-nw\"></div>',\n '<div class=\"note-control-holder note-control-ne\"></div>',\n '<div class=\"note-control-holder note-control-sw\"></div>',\n '<div class=\"',\n (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'),\n ' note-control-se\"></div>',\n (this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>'),\n '</div>',\n '</div>'\n ].join('')).prependTo(this.$editingArea);\n\n this.$handle.on('mousedown', (event) => {\n if (dom.isControlSizing(event.target)) {\n event.preventDefault();\n event.stopPropagation();\n\n const $target = this.$handle.find('.note-control-selection').data('target');\n const posStart = $target.offset();\n const scrollTop = this.$document.scrollTop();\n\n const onMouseMove = (event) => {\n this.context.invoke('editor.resizeTo', {\n x: event.clientX - posStart.left,\n y: event.clientY - (posStart.top - scrollTop)\n }, $target, !event.shiftKey);\n\n this.update($target[0]);\n };\n\n this.$document\n .on('mousemove', onMouseMove)\n .one('mouseup', (e) => {\n e.preventDefault();\n this.$document.off('mousemove', onMouseMove);\n this.context.invoke('editor.afterCommand');\n });\n\n if (!$target.data('ratio')) { // original ratio.\n $target.data('ratio', $target.height() / $target.width());\n }\n }\n });\n\n // Listen for scrolling on the handle overlay.\n this.$handle.on('wheel', (e) => {\n e.preventDefault();\n this.update();\n });\n }\n\n destroy() {\n this.$handle.remove();\n }\n\n update(target) {\n if (this.context.isDisabled()) {\n return false;\n }\n\n const isImage = dom.isImg(target);\n const $selection = this.$handle.find('.note-control-selection');\n\n this.context.invoke('imagePopover.update', target);\n\n if (isImage) {\n const $image = $(target);\n const position = $image.position();\n const pos = {\n left: position.left + parseInt($image.css('marginLeft'), 10),\n top: position.top + parseInt($image.css('marginTop'), 10)\n };\n\n // exclude margin\n const imageSize = {\n w: $image.outerWidth(false),\n h: $image.outerHeight(false)\n };\n\n $selection.css({\n display: 'block',\n left: pos.left,\n top: pos.top,\n width: imageSize.w,\n height: imageSize.h\n }).data('target', $image); // save current image element.\n\n const origImageObj = new Image();\n origImageObj.src = $image.attr('src');\n\n const sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n $selection.find('.note-control-selection-info').text(sizingText);\n this.context.invoke('editor.saveTarget', target);\n } else {\n this.hide();\n }\n\n return isImage;\n }\n\n /**\n * hide\n *\n * @param {jQuery} $handle\n */\n hide() {\n this.context.invoke('editor.clearTarget');\n this.$handle.children().hide();\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport key from '../core/key';\n\nconst defaultScheme = 'http://';\nconst linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/\\/]?|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nexport default class AutoLink {\n constructor(context) {\n this.context = context;\n this.events = {\n 'summernote.keyup': (we, e) => {\n if (!e.isDefaultPrevented()) {\n this.handleKeyup(e);\n }\n },\n 'summernote.keydown': (we, e) => {\n this.handleKeydown(e);\n }\n };\n }\n\n initialize() {\n this.lastWordRange = null;\n }\n\n destroy() {\n this.lastWordRange = null;\n }\n\n replace() {\n if (!this.lastWordRange) {\n return;\n }\n\n const keyword = this.lastWordRange.toString();\n const match = keyword.match(linkPattern);\n\n if (match && (match[1] || match[2])) {\n const link = match[1] ? keyword : defaultScheme + keyword;\n const node = $('<a />').html(keyword).attr('href', link)[0];\n\n this.lastWordRange.insertNode(node);\n this.lastWordRange = null;\n this.context.invoke('editor.focus');\n }\n }\n\n handleKeydown(e) {\n if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n const wordRange = this.context.invoke('editor.createRange').getWordRange();\n this.lastWordRange = wordRange;\n }\n }\n\n handleKeyup(e) {\n if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n this.replace();\n }\n }\n}\n","import dom from '../core/dom';\n\n/**\n * textarea auto sync.\n */\nexport default class AutoSync {\n constructor(context) {\n this.$note = context.layoutInfo.note;\n this.events = {\n 'summernote.change': () => {\n this.$note.val(context.invoke('code'));\n }\n };\n }\n\n shouldInitialize() {\n return dom.isTextarea(this.$note[0]);\n }\n}\n","import $ from 'jquery';\nexport default class Placeholder {\n constructor(context) {\n this.context = context;\n\n this.$editingArea = context.layoutInfo.editingArea;\n this.options = context.options;\n this.events = {\n 'summernote.init summernote.change': () => {\n this.update();\n },\n 'summernote.codeview.toggled': () => {\n this.update();\n }\n };\n }\n\n shouldInitialize() {\n return !!this.options.placeholder;\n }\n\n initialize() {\n this.$placeholder = $('<div class=\"note-placeholder\">');\n this.$placeholder.on('click', () => {\n this.context.invoke('focus');\n }).text(this.options.placeholder).prependTo(this.$editingArea);\n\n this.update();\n }\n\n destroy() {\n this.$placeholder.remove();\n }\n\n update() {\n const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n this.$placeholder.toggle(isShow);\n }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport env from '../core/env';\n\nexport default class Buttons {\n constructor(context) {\n this.ui = $.summernote.ui;\n this.context = context;\n this.$toolbar = context.layoutInfo.toolbar;\n this.options = context.options;\n this.lang = this.options.langInfo;\n this.invertedKeyMap = func.invertObject(\n this.options.keyMap[env.isMac ? 'mac' : 'pc']\n );\n }\n\n representShortcut(editorMethod) {\n let shortcut = this.invertedKeyMap[editorMethod];\n if (!this.options.shortcuts || !shortcut) {\n return '';\n }\n\n if (env.isMac) {\n shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n }\n\n shortcut = shortcut.replace('BACKSLASH', '\\\\')\n .replace('SLASH', '/')\n .replace('LEFTBRACKET', '[')\n .replace('RIGHTBRACKET', ']');\n\n return ' (' + shortcut + ')';\n }\n\n button(o) {\n if (!this.options.tooltip && o.tooltip) {\n delete o.tooltip;\n }\n o.container = this.options.container;\n return this.ui.button(o);\n }\n\n initialize() {\n this.addToolbarButtons();\n this.addImagePopoverButtons();\n this.addLinkPopoverButtons();\n this.addTablePopoverButtons();\n this.fontInstalledMap = {};\n }\n\n destroy() {\n delete this.fontInstalledMap;\n }\n\n isFontInstalled(name) {\n if (!this.fontInstalledMap.hasOwnProperty(name)) {\n this.fontInstalledMap[name] = env.isFontInstalled(name) ||\n lists.contains(this.options.fontNamesIgnoreCheck, name);\n }\n\n return this.fontInstalledMap[name];\n }\n\n isFontDeservedToAdd(name) {\n const genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n name = name.toLowerCase();\n\n return ((name !== '') && this.isFontInstalled(name) && ($.inArray(name, genericFamilies) === -1));\n }\n\n addToolbarButtons() {\n this.context.memo('button.style', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(\n this.ui.icon(this.options.icons.magic), this.options\n ),\n tooltip: this.lang.style.style,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n className: 'dropdown-style',\n items: this.options.styleTags,\n title: this.lang.style.style,\n template: (item) => {\n if (typeof item === 'string') {\n item = { tag: item, title: (this.lang.style.hasOwnProperty(item) ? this.lang.style[item] : item) };\n }\n\n const tag = item.tag;\n const title = item.title;\n const style = item.style ? ' style=\"' + item.style + '\" ' : '';\n const className = item.className ? ' class=\"' + item.className + '\"' : '';\n\n return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n },\n click: this.context.createInvokeHandler('editor.formatBlock')\n })\n ]).render();\n });\n\n for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n const item = this.options.styleTags[styleIdx];\n\n this.context.memo('button.style.' + item, () => {\n return this.button({\n className: 'note-btn-style-' + item,\n contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n tooltip: this.lang.style[item],\n click: this.context.createInvokeHandler('editor.formatBlock')\n }).render();\n });\n }\n\n this.context.memo('button.bold', () => {\n return this.button({\n className: 'note-btn-bold',\n contents: this.ui.icon(this.options.icons.bold),\n tooltip: this.lang.font.bold + this.representShortcut('bold'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.bold')\n }).render();\n });\n\n this.context.memo('button.italic', () => {\n return this.button({\n className: 'note-btn-italic',\n contents: this.ui.icon(this.options.icons.italic),\n tooltip: this.lang.font.italic + this.representShortcut('italic'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.italic')\n }).render();\n });\n\n this.context.memo('button.underline', () => {\n return this.button({\n className: 'note-btn-underline',\n contents: this.ui.icon(this.options.icons.underline),\n tooltip: this.lang.font.underline + this.representShortcut('underline'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.underline')\n }).render();\n });\n\n this.context.memo('button.clear', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.eraser),\n tooltip: this.lang.font.clear + this.representShortcut('removeFormat'),\n click: this.context.createInvokeHandler('editor.removeFormat')\n }).render();\n });\n\n this.context.memo('button.strikethrough', () => {\n return this.button({\n className: 'note-btn-strikethrough',\n contents: this.ui.icon(this.options.icons.strikethrough),\n tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'),\n click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough')\n }).render();\n });\n\n this.context.memo('button.superscript', () => {\n return this.button({\n className: 'note-btn-superscript',\n contents: this.ui.icon(this.options.icons.superscript),\n tooltip: this.lang.font.superscript,\n click: this.context.createInvokeHandlerAndUpdateState('editor.superscript')\n }).render();\n });\n\n this.context.memo('button.subscript', () => {\n return this.button({\n className: 'note-btn-subscript',\n contents: this.ui.icon(this.options.icons.subscript),\n tooltip: this.lang.font.subscript,\n click: this.context.createInvokeHandlerAndUpdateState('editor.subscript')\n }).render();\n });\n\n this.context.memo('button.fontname', () => {\n const styleInfo = this.context.invoke('editor.currentStyle');\n\n // Add 'default' fonts into the fontnames array if not exist\n $.each(styleInfo['font-family'].split(','), (idx, fontname) => {\n fontname = fontname.trim().replace(/['\"]+/g, '');\n if (this.isFontDeservedToAdd(fontname)) {\n if ($.inArray(fontname, this.options.fontNames) === -1) {\n this.options.fontNames.push(fontname);\n }\n }\n });\n\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(\n '<span class=\"note-current-fontname\"/>', this.options\n ),\n tooltip: this.lang.font.name,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n className: 'dropdown-fontname',\n checkClassName: this.options.icons.menuCheck,\n items: this.options.fontNames.filter(this.isFontInstalled.bind(this)),\n title: this.lang.font.name,\n template: (item) => {\n return '<span style=\"font-family: \\'' + item + '\\'\">' + item + '</span>';\n },\n click: this.context.createInvokeHandlerAndUpdateState('editor.fontName')\n })\n ]).render();\n });\n\n this.context.memo('button.fontsize', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"/>', this.options),\n tooltip: this.lang.font.size,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n className: 'dropdown-fontsize',\n checkClassName: this.options.icons.menuCheck,\n items: this.options.fontSizes,\n title: this.lang.font.size,\n click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize')\n })\n ]).render();\n });\n\n this.context.memo('button.color', () => {\n return this.ui.buttonGroup({\n className: 'note-color',\n children: [\n this.button({\n className: 'note-current-color-button',\n contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n tooltip: this.lang.color.recent,\n click: (e) => {\n const $button = $(e.currentTarget);\n this.context.invoke('editor.color', {\n backColor: $button.attr('data-backColor'),\n foreColor: $button.attr('data-foreColor')\n });\n },\n callback: ($button) => {\n const $recentColor = $button.find('.note-recent-color');\n $recentColor.css('background-color', '#FFFF00');\n $button.attr('data-backColor', '#FFFF00');\n }\n }),\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents('', this.options),\n tooltip: this.lang.color.more,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n items: [\n '<div class=\"note-palette\">',\n ' <div class=\"note-palette-title\">' + this.lang.color.background + '</div>',\n ' <div>',\n ' <button type=\"button\" class=\"note-color-reset btn btn-light\" data-event=\"backColor\" data-value=\"inherit\">',\n this.lang.color.transparent,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"backColor\"/>',\n '</div>',\n '<div class=\"note-palette\">',\n ' <div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>',\n ' <div>',\n ' <button type=\"button\" class=\"note-color-reset btn btn-light\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n this.lang.color.resetToDefault,\n ' </button>',\n ' </div>',\n ' <div class=\"note-holder\" data-event=\"foreColor\"/>',\n '</div>'\n ].join(''),\n callback: ($dropdown) => {\n $dropdown.find('.note-holder').each((idx, item) => {\n const $holder = $(item);\n $holder.append(this.ui.palette({\n colors: this.options.colors,\n colorsName: this.options.colorsName,\n eventName: $holder.data('event'),\n container: this.options.container,\n tooltip: this.options.tooltip\n }).render());\n });\n },\n click: (event) => {\n const $button = $(event.target);\n const eventName = $button.data('event');\n const value = $button.data('value');\n\n if (eventName && value) {\n const key = eventName === 'backColor' ? 'background-color' : 'color';\n const $color = $button.closest('.note-color').find('.note-recent-color');\n const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n $color.css(key, value);\n $currentButton.attr('data-' + eventName, value);\n this.context.invoke('editor.' + eventName, value);\n }\n }\n })\n ]\n }).render();\n });\n\n this.context.memo('button.ul', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.unorderedlist),\n tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'),\n click: this.context.createInvokeHandler('editor.insertUnorderedList')\n }).render();\n });\n\n this.context.memo('button.ol', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.orderedlist),\n tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'),\n click: this.context.createInvokeHandler('editor.insertOrderedList')\n }).render();\n });\n\n const justifyLeft = this.button({\n contents: this.ui.icon(this.options.icons.alignLeft),\n tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n click: this.context.createInvokeHandler('editor.justifyLeft')\n });\n\n const justifyCenter = this.button({\n contents: this.ui.icon(this.options.icons.alignCenter),\n tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n click: this.context.createInvokeHandler('editor.justifyCenter')\n });\n\n const justifyRight = this.button({\n contents: this.ui.icon(this.options.icons.alignRight),\n tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n click: this.context.createInvokeHandler('editor.justifyRight')\n });\n\n const justifyFull = this.button({\n contents: this.ui.icon(this.options.icons.alignJustify),\n tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n click: this.context.createInvokeHandler('editor.justifyFull')\n });\n\n const outdent = this.button({\n contents: this.ui.icon(this.options.icons.outdent),\n tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n click: this.context.createInvokeHandler('editor.outdent')\n });\n\n const indent = this.button({\n contents: this.ui.icon(this.options.icons.indent),\n tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n click: this.context.createInvokeHandler('editor.indent')\n });\n\n this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n this.context.memo('button.indent', func.invoke(indent, 'render'));\n\n this.context.memo('button.paragraph', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options),\n tooltip: this.lang.paragraph.paragraph,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown([\n this.ui.buttonGroup({\n className: 'note-align',\n children: [justifyLeft, justifyCenter, justifyRight, justifyFull]\n }),\n this.ui.buttonGroup({\n className: 'note-list',\n children: [outdent, indent]\n })\n ])\n ]).render();\n });\n\n this.context.memo('button.height', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options),\n tooltip: this.lang.font.height,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdownCheck({\n items: this.options.lineHeights,\n checkClassName: this.options.icons.menuCheck,\n className: 'dropdown-line-height',\n title: this.lang.font.height,\n click: this.context.createInvokeHandler('editor.lineHeight')\n })\n ]).render();\n });\n\n this.context.memo('button.table', () => {\n return this.ui.buttonGroup([\n this.button({\n className: 'dropdown-toggle',\n contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options),\n tooltip: this.lang.table.table,\n data: {\n toggle: 'dropdown'\n }\n }),\n this.ui.dropdown({\n title: this.lang.table.table,\n className: 'note-table',\n items: [\n '<div class=\"note-dimension-picker\">',\n ' <div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"/>',\n ' <div class=\"note-dimension-picker-highlighted\"/>',\n ' <div class=\"note-dimension-picker-unhighlighted\"/>',\n '</div>',\n '<div class=\"note-dimension-display\">1 x 1</div>'\n ].join('')\n })\n ], {\n callback: ($node) => {\n const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n $catcher.css({\n width: this.options.insertTableMaxSize.col + 'em',\n height: this.options.insertTableMaxSize.row + 'em'\n }).mousedown(this.context.createInvokeHandler('editor.insertTable'))\n .on('mousemove', this.tableMoveHandler.bind(this));\n }\n }).render();\n });\n\n this.context.memo('button.link', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.link),\n tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'),\n click: this.context.createInvokeHandler('linkDialog.show')\n }).render();\n });\n\n this.context.memo('button.picture', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.picture),\n tooltip: this.lang.image.image,\n click: this.context.createInvokeHandler('imageDialog.show')\n }).render();\n });\n\n this.context.memo('button.video', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.video),\n tooltip: this.lang.video.video,\n click: this.context.createInvokeHandler('videoDialog.show')\n }).render();\n });\n\n this.context.memo('button.hr', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.minus),\n tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'),\n click: this.context.createInvokeHandler('editor.insertHorizontalRule')\n }).render();\n });\n\n this.context.memo('button.fullscreen', () => {\n return this.button({\n className: 'btn-fullscreen',\n contents: this.ui.icon(this.options.icons.arrowsAlt),\n tooltip: this.lang.options.fullscreen,\n click: this.context.createInvokeHandler('fullscreen.toggle')\n }).render();\n });\n\n this.context.memo('button.codeview', () => {\n return this.button({\n className: 'btn-codeview',\n contents: this.ui.icon(this.options.icons.code),\n tooltip: this.lang.options.codeview,\n click: this.context.createInvokeHandler('codeview.toggle')\n }).render();\n });\n\n this.context.memo('button.redo', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.redo),\n tooltip: this.lang.history.redo + this.representShortcut('redo'),\n click: this.context.createInvokeHandler('editor.redo')\n }).render();\n });\n\n this.context.memo('button.undo', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.undo),\n tooltip: this.lang.history.undo + this.representShortcut('undo'),\n click: this.context.createInvokeHandler('editor.undo')\n }).render();\n });\n\n this.context.memo('button.help', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.question),\n tooltip: this.lang.options.help,\n click: this.context.createInvokeHandler('helpDialog.show')\n }).render();\n });\n }\n\n /**\n * image : [\n * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n * ['float', ['floatLeft', 'floatRight', 'floatNone' ]],\n * ['remove', ['removeMedia']]\n * ],\n */\n addImagePopoverButtons() {\n // Image Size Buttons\n this.context.memo('button.imageSize100', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">100%</span>',\n tooltip: this.lang.image.resizeFull,\n click: this.context.createInvokeHandler('editor.resize', '1')\n }).render();\n });\n this.context.memo('button.imageSize50', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">50%</span>',\n tooltip: this.lang.image.resizeHalf,\n click: this.context.createInvokeHandler('editor.resize', '0.5')\n }).render();\n });\n this.context.memo('button.imageSize25', () => {\n return this.button({\n contents: '<span class=\"note-fontsize-10\">25%</span>',\n tooltip: this.lang.image.resizeQuarter,\n click: this.context.createInvokeHandler('editor.resize', '0.25')\n }).render();\n });\n\n // Float Buttons\n this.context.memo('button.floatLeft', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignLeft),\n tooltip: this.lang.image.floatLeft,\n click: this.context.createInvokeHandler('editor.floatMe', 'left')\n }).render();\n });\n\n this.context.memo('button.floatRight', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignRight),\n tooltip: this.lang.image.floatRight,\n click: this.context.createInvokeHandler('editor.floatMe', 'right')\n }).render();\n });\n\n this.context.memo('button.floatNone', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.alignJustify),\n tooltip: this.lang.image.floatNone,\n click: this.context.createInvokeHandler('editor.floatMe', 'none')\n }).render();\n });\n\n // Remove Buttons\n this.context.memo('button.removeMedia', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.trash),\n tooltip: this.lang.image.remove,\n click: this.context.createInvokeHandler('editor.removeMedia')\n }).render();\n });\n }\n\n addLinkPopoverButtons() {\n this.context.memo('button.linkDialogShow', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.link),\n tooltip: this.lang.link.edit,\n click: this.context.createInvokeHandler('linkDialog.show')\n }).render();\n });\n\n this.context.memo('button.unlink', () => {\n return this.button({\n contents: this.ui.icon(this.options.icons.unlink),\n tooltip: this.lang.link.unlink,\n click: this.context.createInvokeHandler('editor.unlink')\n }).render();\n });\n }\n\n /**\n * table : [\n * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n * ],\n */\n addTablePopoverButtons() {\n this.context.memo('button.addRowUp', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowAbove),\n tooltip: this.lang.table.addRowAbove,\n click: this.context.createInvokeHandler('editor.addRow', 'top')\n }).render();\n });\n this.context.memo('button.addRowDown', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowBelow),\n tooltip: this.lang.table.addRowBelow,\n click: this.context.createInvokeHandler('editor.addRow', 'bottom')\n }).render();\n });\n this.context.memo('button.addColLeft', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colBefore),\n tooltip: this.lang.table.addColLeft,\n click: this.context.createInvokeHandler('editor.addCol', 'left')\n }).render();\n });\n this.context.memo('button.addColRight', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colAfter),\n tooltip: this.lang.table.addColRight,\n click: this.context.createInvokeHandler('editor.addCol', 'right')\n }).render();\n });\n this.context.memo('button.deleteRow', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.rowRemove),\n tooltip: this.lang.table.delRow,\n click: this.context.createInvokeHandler('editor.deleteRow')\n }).render();\n });\n this.context.memo('button.deleteCol', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.colRemove),\n tooltip: this.lang.table.delCol,\n click: this.context.createInvokeHandler('editor.deleteCol')\n }).render();\n });\n this.context.memo('button.deleteTable', () => {\n return this.button({\n className: 'btn-md',\n contents: this.ui.icon(this.options.icons.trash),\n tooltip: this.lang.table.delTable,\n click: this.context.createInvokeHandler('editor.deleteTable')\n }).render();\n });\n }\n\n build($container, groups) {\n for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n const group = groups[groupIdx];\n const groupName = $.isArray(group) ? group[0] : group;\n const buttons = $.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group];\n\n const $group = this.ui.buttonGroup({\n className: 'note-' + groupName\n }).render();\n\n for (let idx = 0, len = buttons.length; idx < len; idx++) {\n const btn = this.context.memo('button.' + buttons[idx]);\n if (btn) {\n $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n }\n }\n $group.appendTo($container);\n }\n }\n\n /**\n * @param {jQuery} [$container]\n */\n updateCurrentStyle($container) {\n const $cont = $container || this.$toolbar;\n\n const styleInfo = this.context.invoke('editor.currentStyle');\n this.updateBtnStates($cont, {\n '.note-btn-bold': () => {\n return styleInfo['font-bold'] === 'bold';\n },\n '.note-btn-italic': () => {\n return styleInfo['font-italic'] === 'italic';\n },\n '.note-btn-underline': () => {\n return styleInfo['font-underline'] === 'underline';\n },\n '.note-btn-subscript': () => {\n return styleInfo['font-subscript'] === 'subscript';\n },\n '.note-btn-superscript': () => {\n return styleInfo['font-superscript'] === 'superscript';\n },\n '.note-btn-strikethrough': () => {\n return styleInfo['font-strikethrough'] === 'strikethrough';\n }\n });\n\n if (styleInfo['font-family']) {\n const fontNames = styleInfo['font-family'].split(',').map((name) => {\n return name.replace(/[\\'\\\"]/g, '')\n .replace(/\\s+$/, '')\n .replace(/^\\s+/, '');\n });\n const fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n\n $cont.find('.dropdown-fontname a').each((idx, item) => {\n const $item = $(item);\n // always compare string to avoid creating another func.\n const isChecked = ($item.data('value') + '') === (fontName + '');\n $item.toggleClass('checked', isChecked);\n });\n $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n }\n\n if (styleInfo['font-size']) {\n const fontSize = styleInfo['font-size'];\n $cont.find('.dropdown-fontsize a').each((idx, item) => {\n const $item = $(item);\n // always compare with string to avoid creating another func.\n const isChecked = ($item.data('value') + '') === (fontSize + '');\n $item.toggleClass('checked', isChecked);\n });\n $cont.find('.note-current-fontsize').text(fontSize);\n }\n\n if (styleInfo['line-height']) {\n const lineHeight = styleInfo['line-height'];\n $cont.find('.dropdown-line-height li a').each((idx, item) => {\n // always compare with string to avoid creating another func.\n const isChecked = ($(item).data('value') + '') === (lineHeight + '');\n this.className = isChecked ? 'checked' : '';\n });\n }\n }\n\n updateBtnStates($container, infos) {\n $.each(infos, (selector, pred) => {\n this.ui.toggleBtnActive($container.find(selector), pred());\n });\n }\n\n tableMoveHandler(event) {\n const PX_PER_EM = 18;\n const $picker = $(event.target.parentNode); // target is mousecatcher\n const $dimensionDisplay = $picker.next();\n const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n let posOffset;\n // HTML5 with jQuery - e.offsetX is undefined in Firefox\n if (event.offsetX === undefined) {\n const posCatcher = $(event.target).offset();\n posOffset = {\n x: event.pageX - posCatcher.left,\n y: event.pageY - posCatcher.top\n };\n } else {\n posOffset = {\n x: event.offsetX,\n y: event.offsetY\n };\n }\n\n const dim = {\n c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n r: Math.ceil(posOffset.y / PX_PER_EM) || 1\n };\n\n $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n $catcher.data('value', dim.c + 'x' + dim.r);\n\n if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n $unhighlighted.css({ width: dim.c + 1 + 'em' });\n }\n\n if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n $unhighlighted.css({ height: dim.r + 1 + 'em' });\n }\n\n $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n }\n}\n","import $ from 'jquery';\nexport default class Toolbar {\n constructor(context) {\n this.context = context;\n\n this.$window = $(window);\n this.$document = $(document);\n\n this.ui = $.summernote.ui;\n this.$note = context.layoutInfo.note;\n this.$editor = context.layoutInfo.editor;\n this.$toolbar = context.layoutInfo.toolbar;\n this.options = context.options;\n\n this.followScroll = this.followScroll.bind(this);\n }\n\n shouldInitialize() {\n return !this.options.airMode;\n }\n\n initialize() {\n this.options.toolbar = this.options.toolbar || [];\n\n if (!this.options.toolbar.length) {\n this.$toolbar.hide();\n } else {\n this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n }\n\n if (this.options.toolbarContainer) {\n this.$toolbar.appendTo(this.options.toolbarContainer);\n }\n\n this.changeContainer(false);\n\n this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => {\n this.context.invoke('buttons.updateCurrentStyle');\n });\n\n this.context.invoke('buttons.updateCurrentStyle');\n if (this.options.followingToolbar) {\n this.$window.on('scroll resize', this.followScroll);\n }\n }\n\n destroy() {\n this.$toolbar.children().remove();\n\n if (this.options.followingToolbar) {\n this.$window.off('scroll resize', this.followScroll);\n }\n }\n\n followScroll() {\n if (this.$editor.hasClass('fullscreen')) {\n return false;\n }\n\n const $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper');\n const editorHeight = this.$editor.outerHeight();\n const editorWidth = this.$editor.width();\n\n const toolbarHeight = this.$toolbar.height();\n $toolbarWrapper.css({\n height: toolbarHeight\n });\n\n // check if the web app is currently using another static bar\n let otherBarHeight = 0;\n if (this.options.otherStaticBar) {\n otherBarHeight = $(this.options.otherStaticBar).outerHeight();\n }\n\n const currentOffset = this.$document.scrollTop();\n const editorOffsetTop = this.$editor.offset().top;\n const editorOffsetBottom = editorOffsetTop + editorHeight;\n const activateOffset = editorOffsetTop - otherBarHeight;\n const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight;\n\n if ((currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom)) {\n this.$toolbar.css({\n position: 'fixed',\n top: otherBarHeight,\n width: editorWidth\n });\n } else {\n this.$toolbar.css({\n position: 'relative',\n top: 0,\n width: '100%'\n });\n }\n }\n\n changeContainer(isFullscreen) {\n if (isFullscreen) {\n this.$toolbar.prependTo(this.$editor);\n } else {\n if (this.options.toolbarContainer) {\n this.$toolbar.appendTo(this.options.toolbarContainer);\n }\n }\n }\n\n updateFullscreen(isFullscreen) {\n this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n\n this.changeContainer(isFullscreen);\n }\n\n updateCodeview(isCodeview) {\n this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n if (isCodeview) {\n this.deactivate();\n } else {\n this.activate();\n }\n }\n\n activate(isIncludeCodeview) {\n let $btn = this.$toolbar.find('button');\n if (!isIncludeCodeview) {\n $btn = $btn.not('.btn-codeview');\n }\n this.ui.toggleBtn($btn, true);\n }\n\n deactivate(isIncludeCodeview) {\n let $btn = this.$toolbar.find('button');\n if (!isIncludeCodeview) {\n $btn = $btn.not('.btn-codeview');\n }\n this.ui.toggleBtn($btn, false);\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class LinkDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n\n context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<div class=\"form-group note-form-group\">',\n `<label class=\"note-form-label\">${this.lang.link.textToDisplay}</label>`,\n '<input class=\"note-link-text form-control note-form-control note-input\" type=\"text\" />',\n '</div>',\n '<div class=\"form-group note-form-group\">',\n `<label class=\"note-form-label\">${this.lang.link.url}</label>`,\n '<input class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\" />',\n '</div>',\n !this.options.disableLinkTarget\n ? $('<div/>').append(this.ui.checkbox({\n id: 'sn-checkbox-open-in-new-window',\n text: this.lang.link.openInNewWindow,\n checked: true\n }).render()).html()\n : ''\n ].join('');\n\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.link.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n className: 'link-dialog',\n title: this.lang.link.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n /**\n * toggle update button\n */\n toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n }\n\n /**\n * Show link dialog and set event handlers on dialog controls.\n *\n * @param {Object} linkInfo\n * @return {Promise}\n */\n showLinkDialog(linkInfo) {\n return $.Deferred((deferred) => {\n const $linkText = this.$dialog.find('.note-link-text');\n const $linkUrl = this.$dialog.find('.note-link-url');\n const $linkBtn = this.$dialog.find('.note-link-btn');\n const $openInNewWindow = this.$dialog.find('input[type=checkbox]');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n // if no url was given, copy text to url\n if (!linkInfo.url) {\n linkInfo.url = linkInfo.text;\n }\n\n $linkText.val(linkInfo.text);\n\n const handleLinkTextUpdate = () => {\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n // if linktext was modified by keyup,\n // stop cloning text from linkUrl\n linkInfo.text = $linkText.val();\n };\n\n $linkText.on('input', handleLinkTextUpdate).on('paste', () => {\n setTimeout(handleLinkTextUpdate, 0);\n });\n\n const handleLinkUrlUpdate = () => {\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n // display same link on `Text to display` input\n // when create a new link\n if (!linkInfo.text) {\n $linkText.val($linkUrl.val());\n }\n };\n\n $linkUrl.on('input', handleLinkUrlUpdate).on('paste', () => {\n setTimeout(handleLinkUrlUpdate, 0);\n }).val(linkInfo.url);\n\n if (!env.isSupportTouch) {\n $linkUrl.trigger('focus');\n }\n\n this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n this.bindEnterKey($linkUrl, $linkBtn);\n this.bindEnterKey($linkText, $linkBtn);\n\n const isChecked = linkInfo.isNewWindow !== undefined\n ? linkInfo.isNewWindow : this.context.options.linkTargetBlank;\n\n $openInNewWindow.prop('checked', isChecked);\n\n $linkBtn.one('click', (event) => {\n event.preventDefault();\n\n deferred.resolve({\n range: linkInfo.range,\n url: $linkUrl.val(),\n text: $linkText.val(),\n isNewWindow: $openInNewWindow.is(':checked')\n });\n this.ui.hideDialog(this.$dialog);\n });\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n // detach events\n $linkText.off('input paste keypress');\n $linkUrl.off('input paste keypress');\n $linkBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n }).promise();\n }\n\n /**\n * @param {Object} layoutInfo\n */\n show() {\n const linkInfo = this.context.invoke('editor.getLinkInfo');\n\n this.context.invoke('editor.saveRange');\n this.showLinkDialog(linkInfo).then((linkInfo) => {\n this.context.invoke('editor.restoreRange');\n this.context.invoke('editor.createLink', linkInfo);\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class LinkPopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => {\n this.update();\n },\n 'summernote.disable summernote.dialog.shown': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.link);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-link-popover',\n callback: ($node) => {\n const $content = $node.find('.popover-content,.note-popover-content');\n $content.prepend('<span><a target=\"_blank\"></a> </span>');\n }\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.link);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update() {\n // Prevent focusing on editable when invoke('code') is executed\n if (!this.context.invoke('editor.hasFocus')) {\n this.hide();\n return;\n }\n\n const rng = this.context.invoke('editor.createRange');\n if (rng.isCollapsed() && rng.isOnAnchor()) {\n const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n const href = $(anchor).attr('href');\n this.$popover.find('a').attr('href', href).html(href);\n\n const pos = dom.posFromPlaceholder(anchor);\n this.$popover.css({\n display: 'block',\n left: pos.left,\n top: pos.top\n });\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class ImageDialog {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n let imageLimitation = '';\n if (this.options.maximumImageFileSize) {\n const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +\n ' ' + ' KMGTP'[unit] + 'B';\n imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`;\n }\n\n const body = [\n '<div class=\"form-group note-form-group note-group-select-from-files\">',\n '<label class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>',\n '<input class=\"note-image-input note-form-control note-input\" ',\n ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\" />',\n imageLimitation,\n '</div>',\n '<div class=\"form-group note-group-image-url\" style=\"overflow:auto;\">',\n '<label class=\"note-form-label\">' + this.lang.image.url + '</label>',\n '<input class=\"note-image-url form-control note-form-control note-input ',\n ' col-md-12\" type=\"text\" />',\n '</div>'\n ].join('');\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.image.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n title: this.lang.image.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n show() {\n this.context.invoke('editor.saveRange');\n this.showImageDialog().then((data) => {\n // [workaround] hide dialog before restore range for IE range focus\n this.ui.hideDialog(this.$dialog);\n this.context.invoke('editor.restoreRange');\n\n if (typeof data === 'string') { // image url\n this.context.invoke('editor.insertImage', data);\n } else { // array of files\n this.context.invoke('editor.insertImagesOrCallback', data);\n }\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n\n /**\n * show image dialog\n *\n * @param {jQuery} $dialog\n * @return {Promise}\n */\n showImageDialog() {\n return $.Deferred((deferred) => {\n const $imageInput = this.$dialog.find('.note-image-input');\n const $imageUrl = this.$dialog.find('.note-image-url');\n const $imageBtn = this.$dialog.find('.note-image-btn');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n // Cloning imageInput to clear element.\n $imageInput.replaceWith($imageInput.clone().on('change', (event) => {\n deferred.resolve(event.target.files || event.target.value);\n }).val(''));\n\n $imageBtn.click((event) => {\n event.preventDefault();\n\n deferred.resolve($imageUrl.val());\n });\n\n $imageUrl.on('keyup paste', () => {\n const url = $imageUrl.val();\n this.ui.toggleBtn($imageBtn, url);\n }).val('');\n\n if (!env.isSupportTouch) {\n $imageUrl.trigger('focus');\n }\n this.bindEnterKey($imageUrl, $imageBtn);\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n $imageInput.off('change');\n $imageUrl.off('keyup paste keypress');\n $imageBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n });\n }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\n/**\n * Image popover module\n * mouse events that show/hide popover will be handled by Handle.js.\n * Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nexport default class ImagePopover {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n\n this.editable = context.layoutInfo.editable[0];\n this.options = context.options;\n\n this.events = {\n 'summernote.disable': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.image);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-image-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n this.context.invoke('buttons.build', $content, this.options.popover.image);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update(target) {\n if (dom.isImg(target)) {\n const pos = dom.posFromPlaceholder(target);\n const posEditor = dom.posFromPlaceholder(this.editable);\n this.$popover.css({\n display: 'block',\n left: this.options.popatmouse ? event.pageX - 20 : pos.left,\n top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top)\n });\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class TablePopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.mousedown': (we, e) => {\n this.update(e.target);\n },\n 'summernote.keyup summernote.scroll summernote.change': () => {\n this.update();\n },\n 'summernote.disable': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return !lists.isEmpty(this.options.popover.table);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-table-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n // [workaround] Disable Firefox's default table editor\n if (env.isFF) {\n document.execCommand('enableInlineTableEditing', false, false);\n }\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update(target) {\n if (this.context.isDisabled()) {\n return false;\n }\n\n const isCell = dom.isCell(target);\n\n if (isCell) {\n const pos = dom.posFromPlaceholder(target);\n this.$popover.css({\n display: 'block',\n left: pos.left,\n top: pos.top\n });\n } else {\n this.hide();\n }\n\n return isCell;\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class VideoDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<div class=\"form-group note-form-group row-fluid\">',\n `<label class=\"note-form-label\">${this.lang.video.url} <small class=\"text-muted\">${this.lang.video.providers}</small></label>`,\n '<input class=\"note-video-url form-control note-form-control note-input\" type=\"text\" />',\n '</div>'\n ].join('');\n const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n const footer = `<button type=\"submit\" href=\"#\" class=\"${buttonClass}\" disabled>${this.lang.video.insert}</button>`;\n\n this.$dialog = this.ui.dialog({\n title: this.lang.video.insert,\n fade: this.options.dialogsFade,\n body: body,\n footer: footer\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n bindEnterKey($input, $btn) {\n $input.on('keypress', (event) => {\n if (event.keyCode === key.code.ENTER) {\n event.preventDefault();\n $btn.trigger('click');\n }\n });\n }\n\n createVideoNode(url) {\n // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n const ytRegExp = /^(?:https?:\\/\\/)?(?:www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\n const ytMatch = url.match(ytRegExp);\n\n const igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n const igMatch = url.match(igRegExp);\n\n const vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n const vMatch = url.match(vRegExp);\n\n const vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n const vimMatch = url.match(vimRegExp);\n\n const dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n const dmMatch = url.match(dmRegExp);\n\n const youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n const youkuMatch = url.match(youkuRegExp);\n\n const qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n const qqMatch = url.match(qqRegExp);\n\n const qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n const qqMatch2 = url.match(qqRegExp2);\n\n const mp4RegExp = /^.+.(mp4|m4v)$/;\n const mp4Match = url.match(mp4RegExp);\n\n const oggRegExp = /^.+.(ogg|ogv)$/;\n const oggMatch = url.match(oggRegExp);\n\n const webmRegExp = /^.+.(webm)$/;\n const webmMatch = url.match(webmRegExp);\n\n let $video;\n if (ytMatch && ytMatch[1].length === 11) {\n const youtubeId = ytMatch[1];\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', '//www.youtube.com/embed/' + youtubeId)\n .attr('width', '640').attr('height', '360');\n } else if (igMatch && igMatch[0].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/')\n .attr('width', '612').attr('height', '710')\n .attr('scrolling', 'no')\n .attr('allowtransparency', 'true');\n } else if (vMatch && vMatch[0].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', vMatch[0] + '/embed/simple')\n .attr('width', '600').attr('height', '600')\n .attr('class', 'vine-embed');\n } else if (vimMatch && vimMatch[3].length) {\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('src', '//player.vimeo.com/video/' + vimMatch[3])\n .attr('width', '640').attr('height', '360');\n } else if (dmMatch && dmMatch[2].length) {\n $video = $('<iframe>')\n .attr('frameborder', 0)\n .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])\n .attr('width', '640').attr('height', '360');\n } else if (youkuMatch && youkuMatch[1].length) {\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('height', '498')\n .attr('width', '510')\n .attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) {\n const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]);\n $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n .attr('frameborder', 0)\n .attr('height', '310')\n .attr('width', '500')\n .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&auto=0');\n } else if (mp4Match || oggMatch || webmMatch) {\n $video = $('<video controls>')\n .attr('src', url)\n .attr('width', '640').attr('height', '360');\n } else {\n // this is not a known video link. Now what, Cat? Now what?\n return false;\n }\n\n $video.addClass('note-video-clip');\n\n return $video[0];\n }\n\n show() {\n const text = this.context.invoke('editor.getSelectedText');\n this.context.invoke('editor.saveRange');\n this.showVideoDialog(text).then((url) => {\n // [workaround] hide dialog before restore range for IE range focus\n this.ui.hideDialog(this.$dialog);\n this.context.invoke('editor.restoreRange');\n\n // build node\n const $node = this.createVideoNode(url);\n\n if ($node) {\n // insert video node\n this.context.invoke('editor.insertNode', $node);\n }\n }).fail(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n\n /**\n * show image dialog\n *\n * @param {jQuery} $dialog\n * @return {Promise}\n */\n showVideoDialog(text) {\n return $.Deferred((deferred) => {\n const $videoUrl = this.$dialog.find('.note-video-url');\n const $videoBtn = this.$dialog.find('.note-video-btn');\n\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n\n $videoUrl.val(text).on('input', () => {\n this.ui.toggleBtn($videoBtn, $videoUrl.val());\n });\n\n if (!env.isSupportTouch) {\n $videoUrl.trigger('focus');\n }\n\n $videoBtn.click((event) => {\n event.preventDefault();\n\n deferred.resolve($videoUrl.val());\n });\n\n this.bindEnterKey($videoUrl, $videoBtn);\n });\n\n this.ui.onDialogHidden(this.$dialog, () => {\n $videoUrl.off('input');\n $videoBtn.off('click');\n\n if (deferred.state() === 'pending') {\n deferred.reject();\n }\n });\n\n this.ui.showDialog(this.$dialog);\n });\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\n\nexport default class HelpDialog {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$body = $(document.body);\n this.$editor = context.layoutInfo.editor;\n this.options = context.options;\n this.lang = this.options.langInfo;\n }\n\n initialize() {\n const $container = this.options.dialogsInBody ? this.$body : this.$editor;\n\n const body = [\n '<p class=\"text-center\">',\n '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote @@VERSION@@</a> · ',\n '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ',\n '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>',\n '</p>'\n ].join('');\n\n this.$dialog = this.ui.dialog({\n title: this.lang.options.help,\n fade: this.options.dialogsFade,\n body: this.createShortcutList(),\n footer: body,\n callback: ($node) => {\n $node.find('.modal-body,.note-modal-body').css({\n 'max-height': 300,\n 'overflow': 'scroll'\n });\n }\n }).render().appendTo($container);\n }\n\n destroy() {\n this.ui.hideDialog(this.$dialog);\n this.$dialog.remove();\n }\n\n createShortcutList() {\n const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n return Object.keys(keyMap).map((key) => {\n const command = keyMap[key];\n const $row = $('<div><div class=\"help-list-item\"/></div>');\n $row.append($('<label><kbd>' + key + '</kdb></label>').css({\n 'width': 180,\n 'margin-right': 10\n })).append($('<span/>').html(this.context.memo('help.' + command) || command));\n return $row.html();\n }).join('');\n }\n\n /**\n * show help dialog\n *\n * @return {Promise}\n */\n showHelpDialog() {\n return $.Deferred((deferred) => {\n this.ui.onDialogShown(this.$dialog, () => {\n this.context.triggerEvent('dialog.shown');\n deferred.resolve();\n });\n this.ui.showDialog(this.$dialog);\n }).promise();\n }\n\n show() {\n this.context.invoke('editor.saveRange');\n this.showHelpDialog().then(() => {\n this.context.invoke('editor.restoreRange');\n });\n }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nconst AIR_MODE_POPOVER_X_OFFSET = 20;\n\nexport default class AirPopover {\n constructor(context) {\n this.context = context;\n this.ui = $.summernote.ui;\n this.options = context.options;\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.scroll': () => {\n this.update();\n },\n 'summernote.disable summernote.change summernote.dialog.shown': () => {\n this.hide();\n },\n 'summernote.focusout': (we, e) => {\n // [workaround] Firefox doesn't support relatedTarget on focusout\n // - Ignore hide action on focus out in FF.\n if (env.isFF) {\n return;\n }\n\n if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(this.$popover[0]))) {\n this.hide();\n }\n }\n };\n }\n\n shouldInitialize() {\n return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n }\n\n initialize() {\n this.$popover = this.ui.popover({\n className: 'note-air-popover'\n }).render().appendTo(this.options.container);\n const $content = this.$popover.find('.popover-content');\n\n this.context.invoke('buttons.build', $content, this.options.popover.air);\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n update() {\n const styleInfo = this.context.invoke('editor.currentStyle');\n if (styleInfo.range && !styleInfo.range.isCollapsed()) {\n const rect = lists.last(styleInfo.range.getClientRects());\n if (rect) {\n const bnd = func.rect2bnd(rect);\n this.$popover.css({\n display: 'block',\n left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET,\n top: bnd.top + bnd.height\n });\n this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n }\n } else {\n this.hide();\n }\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport key from '../core/key';\n\nconst POPOVER_DIST = 5;\n\nexport default class HintPopover {\n constructor(context) {\n this.context = context;\n\n this.ui = $.summernote.ui;\n this.$editable = context.layoutInfo.editable;\n this.options = context.options;\n this.hint = this.options.hint || [];\n this.direction = this.options.hintDirection || 'bottom';\n this.hints = $.isArray(this.hint) ? this.hint : [this.hint];\n\n this.events = {\n 'summernote.keyup': (we, e) => {\n if (!e.isDefaultPrevented()) {\n this.handleKeyup(e);\n }\n },\n 'summernote.keydown': (we, e) => {\n this.handleKeydown(e);\n },\n 'summernote.disable summernote.dialog.shown': () => {\n this.hide();\n }\n };\n }\n\n shouldInitialize() {\n return this.hints.length > 0;\n }\n\n initialize() {\n this.lastWordRange = null;\n this.$popover = this.ui.popover({\n className: 'note-hint-popover',\n hideArrow: true,\n direction: ''\n }).render().appendTo(this.options.container);\n\n this.$popover.hide();\n this.$content = this.$popover.find('.popover-content,.note-popover-content');\n this.$content.on('click', '.note-hint-item', () => {\n this.$content.find('.active').removeClass('active');\n $(this).addClass('active');\n this.replace();\n });\n }\n\n destroy() {\n this.$popover.remove();\n }\n\n selectItem($item) {\n this.$content.find('.active').removeClass('active');\n $item.addClass('active');\n\n this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);\n }\n\n moveDown() {\n const $current = this.$content.find('.note-hint-item.active');\n const $next = $current.next();\n\n if ($next.length) {\n this.selectItem($next);\n } else {\n let $nextGroup = $current.parent().next();\n\n if (!$nextGroup.length) {\n $nextGroup = this.$content.find('.note-hint-group').first();\n }\n\n this.selectItem($nextGroup.find('.note-hint-item').first());\n }\n }\n\n moveUp() {\n const $current = this.$content.find('.note-hint-item.active');\n const $prev = $current.prev();\n\n if ($prev.length) {\n this.selectItem($prev);\n } else {\n let $prevGroup = $current.parent().prev();\n\n if (!$prevGroup.length) {\n $prevGroup = this.$content.find('.note-hint-group').last();\n }\n\n this.selectItem($prevGroup.find('.note-hint-item').last());\n }\n }\n\n replace() {\n const $item = this.$content.find('.note-hint-item.active');\n\n if ($item.length) {\n const node = this.nodeFromItem($item);\n // XXX: consider to move codes to editor for recording redo/undo.\n this.lastWordRange.insertNode(node);\n range.createFromNode(node).collapse().select();\n\n this.lastWordRange = null;\n this.hide();\n this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]);\n this.context.invoke('editor.focus');\n }\n }\n\n nodeFromItem($item) {\n const hint = this.hints[$item.data('index')];\n const item = $item.data('item');\n let node = hint.content ? hint.content(item) : item;\n if (typeof node === 'string') {\n node = dom.createText(node);\n }\n return node;\n }\n\n createItemTemplates(hintIdx, items) {\n const hint = this.hints[hintIdx];\n return items.map((item, idx) => {\n const $item = $('<div class=\"note-hint-item\"/>');\n $item.append(hint.template ? hint.template(item) : item + '');\n $item.data({\n 'index': hintIdx,\n 'item': item\n });\n return $item;\n });\n }\n\n handleKeydown(e) {\n if (!this.$popover.is(':visible')) {\n return;\n }\n\n if (e.keyCode === key.code.ENTER) {\n e.preventDefault();\n this.replace();\n } else if (e.keyCode === key.code.UP) {\n e.preventDefault();\n this.moveUp();\n } else if (e.keyCode === key.code.DOWN) {\n e.preventDefault();\n this.moveDown();\n }\n }\n\n searchKeyword(index, keyword, callback) {\n const hint = this.hints[index];\n if (hint && hint.match.test(keyword) && hint.search) {\n const matches = hint.match.exec(keyword);\n hint.search(matches[1], callback);\n } else {\n callback();\n }\n }\n\n createGroup(idx, keyword) {\n const $group = $('<div class=\"note-hint-group note-hint-group-' + idx + '\"/>');\n this.searchKeyword(idx, keyword, (items) => {\n items = items || [];\n if (items.length) {\n $group.html(this.createItemTemplates(idx, items));\n this.show();\n }\n });\n\n return $group;\n }\n\n handleKeyup(e) {\n if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) {\n const wordRange = this.context.invoke('editor.createRange').getWordRange();\n const keyword = wordRange.toString();\n if (this.hints.length && keyword) {\n this.$content.empty();\n\n const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n if (bnd) {\n this.$popover.hide();\n this.lastWordRange = wordRange;\n this.hints.forEach((hint, idx) => {\n if (hint.match.test(keyword)) {\n this.createGroup(idx, keyword).appendTo(this.$content);\n }\n });\n // select first .note-hint-item\n this.$content.find('.note-hint-item:first').addClass('active');\n\n // set position for popover after group is created\n if (this.direction === 'top') {\n this.$popover.css({\n left: bnd.left,\n top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST\n });\n } else {\n this.$popover.css({\n left: bnd.left,\n top: bnd.top + bnd.height + POPOVER_DIST\n });\n }\n }\n } else {\n this.hide();\n }\n }\n }\n\n show() {\n this.$popover.show();\n }\n\n hide() {\n this.$popover.hide();\n }\n}\n","import $ from 'jquery';\nimport func from './core/func';\nimport lists from './core/lists';\nimport dom from './core/dom';\n\nexport default class Context {\n /**\n * @param {jQuery} $note\n * @param {Object} options\n */\n constructor($note, options) {\n this.ui = $.summernote.ui;\n this.$note = $note;\n\n this.memos = {};\n this.modules = {};\n this.layoutInfo = {};\n this.options = options;\n\n this.initialize();\n }\n\n /**\n * create layout and initialize modules and other resources\n */\n initialize() {\n this.layoutInfo = this.ui.createLayout(this.$note, this.options);\n this._initialize();\n this.$note.hide();\n return this;\n }\n\n /**\n * destroy modules and other resources and remove layout\n */\n destroy() {\n this._destroy();\n this.$note.removeData('summernote');\n this.ui.removeLayout(this.$note, this.layoutInfo);\n }\n\n /**\n * destory modules and other resources and initialize it again\n */\n reset() {\n const disabled = this.isDisabled();\n this.code(dom.emptyPara);\n this._destroy();\n this._initialize();\n\n if (disabled) {\n this.disable();\n }\n }\n\n _initialize() {\n // add optional buttons\n const buttons = $.extend({}, this.options.buttons);\n Object.keys(buttons).forEach((key) => {\n this.memo('button.' + key, buttons[key]);\n });\n\n const modules = $.extend({}, this.options.modules, $.summernote.plugins || {});\n\n // add and initialize modules\n Object.keys(modules).forEach((key) => {\n this.module(key, modules[key], true);\n });\n\n Object.keys(this.modules).forEach((key) => {\n this.initializeModule(key);\n });\n }\n\n _destroy() {\n // destroy modules with reversed order\n Object.keys(this.modules).reverse().forEach((key) => {\n this.removeModule(key);\n });\n\n Object.keys(this.memos).forEach((key) => {\n this.removeMemo(key);\n });\n // trigger custom onDestroy callback\n this.triggerEvent('destroy', this);\n }\n\n code(html) {\n const isActivated = this.invoke('codeview.isActivated');\n\n if (html === undefined) {\n this.invoke('codeview.sync');\n return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n } else {\n if (isActivated) {\n this.layoutInfo.codable.val(html);\n } else {\n this.layoutInfo.editable.html(html);\n }\n this.$note.val(html);\n this.triggerEvent('change', html);\n }\n }\n\n isDisabled() {\n return this.layoutInfo.editable.attr('contenteditable') === 'false';\n }\n\n enable() {\n this.layoutInfo.editable.attr('contenteditable', true);\n this.invoke('toolbar.activate', true);\n this.triggerEvent('disable', false);\n }\n\n disable() {\n // close codeview if codeview is opend\n if (this.invoke('codeview.isActivated')) {\n this.invoke('codeview.deactivate');\n }\n this.layoutInfo.editable.attr('contenteditable', false);\n this.invoke('toolbar.deactivate', true);\n\n this.triggerEvent('disable', true);\n }\n\n triggerEvent() {\n const namespace = lists.head(arguments);\n const args = lists.tail(lists.from(arguments));\n\n const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n if (callback) {\n callback.apply(this.$note[0], args);\n }\n this.$note.trigger('summernote.' + namespace, args);\n }\n\n initializeModule(key) {\n const module = this.modules[key];\n module.shouldInitialize = module.shouldInitialize || func.ok;\n if (!module.shouldInitialize()) {\n return;\n }\n\n // initialize module\n if (module.initialize) {\n module.initialize();\n }\n\n // attach events\n if (module.events) {\n dom.attachEvents(this.$note, module.events);\n }\n }\n\n module(key, ModuleClass, withoutIntialize) {\n if (arguments.length === 1) {\n return this.modules[key];\n }\n\n this.modules[key] = new ModuleClass(this);\n\n if (!withoutIntialize) {\n this.initializeModule(key);\n }\n }\n\n removeModule(key) {\n const module = this.modules[key];\n if (module.shouldInitialize()) {\n if (module.events) {\n dom.detachEvents(this.$note, module.events);\n }\n\n if (module.destroy) {\n module.destroy();\n }\n }\n\n delete this.modules[key];\n }\n\n memo(key, obj) {\n if (arguments.length === 1) {\n return this.memos[key];\n }\n this.memos[key] = obj;\n }\n\n removeMemo(key) {\n if (this.memos[key] && this.memos[key].destroy) {\n this.memos[key].destroy();\n }\n\n delete this.memos[key];\n }\n\n /**\n * Some buttons need to change their visual style immediately once they get pressed\n */\n createInvokeHandlerAndUpdateState(namespace, value) {\n return (event) => {\n this.createInvokeHandler(namespace, value)(event);\n this.invoke('buttons.updateCurrentStyle');\n };\n }\n\n createInvokeHandler(namespace, value) {\n return (event) => {\n event.preventDefault();\n const $target = $(event.target);\n this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n };\n }\n\n invoke() {\n const namespace = lists.head(arguments);\n const args = lists.tail(lists.from(arguments));\n\n const splits = namespace.split('.');\n const hasSeparator = splits.length > 1;\n const moduleName = hasSeparator && lists.head(splits);\n const methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n\n const module = this.modules[moduleName || 'editor'];\n if (!moduleName && this[methodName]) {\n return this[methodName].apply(this, args);\n } else if (module && module[methodName] && module.shouldInitialize()) {\n return module[methodName].apply(module, args);\n }\n }\n}\n","import $ from 'jquery';\nimport env from './base/core/env';\nimport lists from './base/core/lists';\nimport Context from './base/Context';\n\n$.fn.extend({\n /**\n * Summernote API\n *\n * @param {Object|String}\n * @return {this}\n */\n summernote: function() {\n const type = $.type(lists.head(arguments));\n const isExternalAPICalled = type === 'string';\n const hasInitOptions = type === 'object';\n\n const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n // Update options\n options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);\n options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);\n options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n\n this.each((idx, note) => {\n const $note = $(note);\n if (!$note.data('summernote')) {\n const context = new Context($note, options);\n $note.data('summernote', context);\n $note.data('summernote').triggerEvent('init', context.layoutInfo);\n }\n });\n\n const $note = this.first();\n if ($note.length) {\n const context = $note.data('summernote');\n if (isExternalAPICalled) {\n return context.invoke.apply(context, lists.from(arguments));\n } else if (options.focus) {\n context.invoke('editor.focus');\n }\n }\n\n return this;\n }\n});\n","import $ from 'jquery';\nimport ui from '../bs3/ui';\nimport dom from '../base/core/dom';\nimport '../base/summernote-en-US';\nimport Editor from '../base/module/Editor';\nimport Clipboard from '../base/module/Clipboard';\nimport Dropzone from '../base/module/Dropzone';\nimport Codeview from '../base/module/Codeview';\nimport Statusbar from '../base/module/Statusbar';\nimport Fullscreen from '../base/module/Fullscreen';\nimport Handle from '../base/module/Handle';\nimport AutoLink from '../base/module/AutoLink';\nimport AutoSync from '../base/module/AutoSync';\nimport Placeholder from '../base/module/Placeholder';\nimport Buttons from '../base/module/Buttons';\nimport Toolbar from '../base/module/Toolbar';\nimport LinkDialog from '../base/module/LinkDialog';\nimport LinkPopover from '../base/module/LinkPopover';\nimport ImageDialog from '../base/module/ImageDialog';\nimport ImagePopover from '../base/module/ImagePopover';\nimport TablePopover from '../base/module/TablePopover';\nimport VideoDialog from '../base/module/VideoDialog';\nimport HelpDialog from '../base/module/HelpDialog';\nimport AirPopover from '../base/module/AirPopover';\nimport HintPopover from '../base/module/HintPopover';\n\n$.summernote = $.extend($.summernote, {\n version: '@@VERSION@@',\n ui: ui,\n dom: dom,\n\n plugins: {},\n\n options: {\n modules: {\n 'editor': Editor,\n 'clipboard': Clipboard,\n 'dropzone': Dropzone,\n 'codeview': Codeview,\n 'statusbar': Statusbar,\n 'fullscreen': Fullscreen,\n 'handle': Handle,\n // FIXME: HintPopover must be front of autolink\n // - Script error about range when Enter key is pressed on hint popover\n 'hintPopover': HintPopover,\n 'autoLink': AutoLink,\n 'autoSync': AutoSync,\n 'placeholder': Placeholder,\n 'buttons': Buttons,\n 'toolbar': Toolbar,\n 'linkDialog': LinkDialog,\n 'linkPopover': LinkPopover,\n 'imageDialog': ImageDialog,\n 'imagePopover': ImagePopover,\n 'tablePopover': TablePopover,\n 'videoDialog': VideoDialog,\n 'helpDialog': HelpDialog,\n 'airPopover': AirPopover\n },\n\n buttons: {},\n\n lang: 'en-US',\n\n followingToolbar: true,\n otherStaticBar: '',\n\n // toolbar\n toolbar: [\n ['style', ['style']],\n ['font', ['bold', 'underline', 'clear']],\n ['fontname', ['fontname']],\n ['color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture', 'video']],\n ['view', ['fullscreen', 'codeview', 'help']]\n ],\n\n // popover\n popatmouse: true,\n popover: {\n image: [\n ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']],\n ['float', ['floatLeft', 'floatRight', 'floatNone']],\n ['remove', ['removeMedia']]\n ],\n link: [\n ['link', ['linkDialogShow', 'unlink']]\n ],\n table: [\n ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n ],\n air: [\n ['color', ['color']],\n ['font', ['bold', 'underline', 'clear']],\n ['para', ['ul', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture']]\n ]\n },\n\n // air mode: inline editor\n airMode: false,\n\n width: null,\n height: null,\n linkTargetBlank: true,\n\n focus: false,\n tabSize: 4,\n styleWithSpan: true,\n shortcuts: true,\n textareaAutoSync: true,\n hintDirection: 'bottom',\n tooltip: 'auto',\n container: 'body',\n maxTextLength: 0,\n\n styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n fontNames: [\n 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande',\n 'Tahoma', 'Times New Roman', 'Verdana'\n ],\n\n fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n\n // pallete colors(n x n)\n colors: [\n ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],\n ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],\n ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],\n ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],\n ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],\n ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],\n ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],\n ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031']\n ],\n\n // http://chir.ag/projects/name-that-color/\n colorsName: [\n ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'],\n ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'],\n ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'],\n ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'],\n ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'],\n ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'],\n ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'],\n ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou']\n ],\n\n lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n\n tableClassName: 'table table-bordered',\n\n insertTableMaxSize: {\n col: 10,\n row: 10\n },\n\n dialogsInBody: false,\n dialogsFade: false,\n\n maximumImageFileSize: null,\n\n callbacks: {\n onInit: null,\n onFocus: null,\n onBlur: null,\n onBlurCodeview: null,\n onEnter: null,\n onKeyup: null,\n onKeydown: null,\n onImageUpload: null,\n onImageUploadError: null\n },\n\n codemirror: {\n mode: 'text/html',\n htmlMode: true,\n lineNumbers: true\n },\n\n keyMap: {\n pc: {\n 'ENTER': 'insertParagraph',\n 'CTRL+Z': 'undo',\n 'CTRL+Y': 'redo',\n 'TAB': 'tab',\n 'SHIFT+TAB': 'untab',\n 'CTRL+B': 'bold',\n 'CTRL+I': 'italic',\n 'CTRL+U': 'underline',\n 'CTRL+SHIFT+S': 'strikethrough',\n 'CTRL+BACKSLASH': 'removeFormat',\n 'CTRL+SHIFT+L': 'justifyLeft',\n 'CTRL+SHIFT+E': 'justifyCenter',\n 'CTRL+SHIFT+R': 'justifyRight',\n 'CTRL+SHIFT+J': 'justifyFull',\n 'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n 'CTRL+SHIFT+NUM8': 'insertOrderedList',\n 'CTRL+LEFTBRACKET': 'outdent',\n 'CTRL+RIGHTBRACKET': 'indent',\n 'CTRL+NUM0': 'formatPara',\n 'CTRL+NUM1': 'formatH1',\n 'CTRL+NUM2': 'formatH2',\n 'CTRL+NUM3': 'formatH3',\n 'CTRL+NUM4': 'formatH4',\n 'CTRL+NUM5': 'formatH5',\n 'CTRL+NUM6': 'formatH6',\n 'CTRL+ENTER': 'insertHorizontalRule',\n 'CTRL+K': 'linkDialog.show'\n },\n\n mac: {\n 'ENTER': 'insertParagraph',\n 'CMD+Z': 'undo',\n 'CMD+SHIFT+Z': 'redo',\n 'TAB': 'tab',\n 'SHIFT+TAB': 'untab',\n 'CMD+B': 'bold',\n 'CMD+I': 'italic',\n 'CMD+U': 'underline',\n 'CMD+SHIFT+S': 'strikethrough',\n 'CMD+BACKSLASH': 'removeFormat',\n 'CMD+SHIFT+L': 'justifyLeft',\n 'CMD+SHIFT+E': 'justifyCenter',\n 'CMD+SHIFT+R': 'justifyRight',\n 'CMD+SHIFT+J': 'justifyFull',\n 'CMD+SHIFT+NUM7': 'insertUnorderedList',\n 'CMD+SHIFT+NUM8': 'insertOrderedList',\n 'CMD+LEFTBRACKET': 'outdent',\n 'CMD+RIGHTBRACKET': 'indent',\n 'CMD+NUM0': 'formatPara',\n 'CMD+NUM1': 'formatH1',\n 'CMD+NUM2': 'formatH2',\n 'CMD+NUM3': 'formatH3',\n 'CMD+NUM4': 'formatH4',\n 'CMD+NUM5': 'formatH5',\n 'CMD+NUM6': 'formatH6',\n 'CMD+ENTER': 'insertHorizontalRule',\n 'CMD+K': 'linkDialog.show'\n }\n },\n icons: {\n 'align': 'note-icon-align',\n 'alignCenter': 'note-icon-align-center',\n 'alignJustify': 'note-icon-align-justify',\n 'alignLeft': 'note-icon-align-left',\n 'alignRight': 'note-icon-align-right',\n 'rowBelow': 'note-icon-row-below',\n 'colBefore': 'note-icon-col-before',\n 'colAfter': 'note-icon-col-after',\n 'rowAbove': 'note-icon-row-above',\n 'rowRemove': 'note-icon-row-remove',\n 'colRemove': 'note-icon-col-remove',\n 'indent': 'note-icon-align-indent',\n 'outdent': 'note-icon-align-outdent',\n 'arrowsAlt': 'note-icon-arrows-alt',\n 'bold': 'note-icon-bold',\n 'caret': 'note-icon-caret',\n 'circle': 'note-icon-circle',\n 'close': 'note-icon-close',\n 'code': 'note-icon-code',\n 'eraser': 'note-icon-eraser',\n 'font': 'note-icon-font',\n 'frame': 'note-icon-frame',\n 'italic': 'note-icon-italic',\n 'link': 'note-icon-link',\n 'unlink': 'note-icon-chain-broken',\n 'magic': 'note-icon-magic',\n 'menuCheck': 'note-icon-menu-check',\n 'minus': 'note-icon-minus',\n 'orderedlist': 'note-icon-orderedlist',\n 'pencil': 'note-icon-pencil',\n 'picture': 'note-icon-picture',\n 'question': 'note-icon-question',\n 'redo': 'note-icon-redo',\n 'square': 'note-icon-square',\n 'strikethrough': 'note-icon-strikethrough',\n 'subscript': 'note-icon-subscript',\n 'superscript': 'note-icon-superscript',\n 'table': 'note-icon-table',\n 'textHeight': 'note-icon-text-height',\n 'trash': 'note-icon-trash',\n 'underline': 'note-icon-underline',\n 'undo': 'note-icon-undo',\n 'unorderedlist': 'note-icon-unorderedlist',\n 'video': 'note-icon-video'\n }\n }\n});\n\nimport '../summernote'; // eslint-disable-line\n"],"names":["$","Codeview"],"mappings":"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"}PKf[�\.��p� � !dist/lang/summernote-cs-CZ.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"cs-CZ":{font:{bold:"Tučné",italic:"Kurzíva",underline:"Podtržené",clear:"Odstranit styl písma",height:"Výška řádku",strikethrough:"Přeškrtnuté",size:"Velikost písma"},image:{image:"Obrázek",insert:"Vložit obrázek",resizeFull:"Původní velikost",resizeHalf:"Poloviční velikost",resizeQuarter:"Čtvrteční velikost",floatLeft:"Umístit doleva",floatRight:"Umístit doprava",floatNone:"Neobtékat textem",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Přetáhnout sem obrázek",dropImage:"Drop image or Text",selectFromFiles:"Vybrat soubor",url:"URL obrázku",remove:"Remove Image",original:"Original"},video:{video:"Video",videoLink:"Odkaz videa",insert:"Vložit video",url:"URL videa?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)"},link:{link:"Odkaz",insert:"Vytvořit odkaz",unlink:"Zrušit odkaz",edit:"Upravit",textToDisplay:"Zobrazovaný text",url:"Na jaké URL má tento odkaz vést?",openInNewWindow:"Otevřít v novém okně"},table:{table:"Tabulka",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:"Vložit vodorovnou čáru"},style:{style:"Styl",p:"Normální",blockquote:"Citace",pre:"Kód",h1:"Nadpis 1",h2:"Nadpis 2",h3:"Nadpis 3",h4:"Nadpis 4",h5:"Nadpis 5",h6:"Nadpis 6"},lists:{unordered:"Odrážkový seznam",ordered:"Číselný seznam"},options:{help:"Nápověda",fullscreen:"Celá obrazovka",codeview:"HTML kód"},paragraph:{paragraph:"Odstavec",outdent:"Zvětšit odsazení",indent:"Zmenšit odsazení",left:"Zarovnat doleva",center:"Zarovnat na střed",right:"Zarovnat doprava",justify:"Zarovnat oboustranně"},color:{recent:"Aktuální barva",more:"Další barvy",background:"Barva pozadí",foreground:"Barva písma",transparent:"Průhlednost",setTransparent:"Nastavit průhlednost",reset:"Obnovit",resetToDefault:"Obnovit výchozí"},shortcut:{shortcuts:"Klávesové zkratky",close:"Zavřít",textFormatting:"Formátování textu",action:"Akce",paragraphFormatting:"Formátování odstavce",documentStyle:"Styl dokumentu"},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:"Krok vzad",redo:"Krok vpřed"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\���dist/lang/summernote-ja-JP.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ja-JP': { font: { bold: '太字', italic: '斜体', underline: '下線', clear: 'クリア', height: '文字高', name: 'フォント', strikethrough: '取り消し線', subscript: 'Subscript', superscript: 'Superscript', size: '大きさ' }, image: { image: '画像', insert: '画像挿入', resizeFull: '最大化', resizeHalf: '1/2', resizeQuarter: '1/4', floatLeft: '左寄せ', floatRight: '右寄せ', floatNone: '寄せ解除', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'ここに画像をドラッグしてください', dropImage: 'Drop image or Text', selectFromFiles: '画像ファイルを選ぶ', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URLから画像を挿入する', remove: '画像を削除する', original: 'Original' }, video: { video: '動画', videoLink: '動画リンク', insert: '動画挿入', url: '動画のURL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)' }, link: { link: 'リンク', insert: 'リンク挿入', unlink: 'リンク解除', edit: '編集', textToDisplay: 'リンク文字列', url: 'URLを入力してください', openInNewWindow: '新しいウィンドウで開く' }, 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: '水平線の挿入' }, style: { style: 'スタイル', p: '標準', blockquote: '引用', pre: 'コード', h1: '見出し1', h2: '見出し2', h3: '見出し3', h4: '見出し4', h5: '見出し5', h6: '見出し6' }, lists: { unordered: '通常リスト', ordered: '番号リスト' }, options: { help: 'ヘルプ', fullscreen: 'フルスクリーン', codeview: 'コード表示' }, paragraph: { paragraph: '文章', outdent: '字上げ', indent: '字下げ', left: '左寄せ', center: '中央寄せ', right: '右寄せ', justify: '均等割付' }, color: { recent: '現在の色', more: 'もっと見る', background: '背景色', foreground: '文字色', transparent: '透明', setTransparent: '透明にする', reset: '標準', resetToDefault: '標準に戻す' }, shortcut: { shortcuts: 'ショートカット', close: '閉じる', textFormatting: '文字フォーマット', action: 'アクション', paragraphFormatting: '文章フォーマット', documentStyle: 'ドキュメント形式', extraKeys: 'Extra keys' }, help: { 'insertParagraph': '改行挿入', 'undo': '一旦、行った操作を戻す', 'redo': '最後のコマンドをやり直す', 'tab': 'Tab', 'untab': 'タブ戻し', 'bold': '太文字', 'italic': '斜体', 'underline': '下線', 'strikethrough': '取り消し線', 'removeFormat': '装飾を戻す', 'justifyLeft': '左寄せ', 'justifyCenter': '真ん中寄せ', 'justifyRight': '右寄せ', 'justifyFull': 'すべてを整列', 'insertUnorderedList': '行頭に●を挿入', 'insertOrderedList': '行頭に番号を挿入', 'outdent': '字下げを戻す(アウトデント)', 'indent': '字下げする(インデント)', 'formatPara': '段落(P tag)指定', 'formatH1': 'H1指定', 'formatH2': 'H2指定', 'formatH3': 'H3指定', 'formatH4': 'H4指定', 'formatH5': 'H5指定', 'formatH6': 'H6指定', 'insertHorizontalRule': '<hr />を挿入', 'linkDialog.show': 'リンク挿入' }, history: { undo: '元に戻す', redo: 'やり直す' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�j�� � 'dist/lang/summernote-sr-RS-Latin.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"sr-RS":{font:{bold:"Podebljano",italic:"Kurziv",underline:"Podvučeno",clear:"Ukloni stilove fonta",height:"Visina linije",name:"Font Family",strikethrough:"Precrtano",subscript:"Subscript",superscript:"Superscript",size:"Veličina fonta"},image:{image:"Slika",insert:"Umetni sliku",resizeFull:"Puna veličina",resizeHalf:"Umanji na 50%",resizeQuarter:"Umanji na 25%",floatLeft:"Uz levu ivicu",floatRight:"Uz desnu ivicu",floatNone:"Bez ravnanja",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Prevuci sliku ovde",dropImage:"Drop image or Text",selectFromFiles:"Izaberi iz datoteke",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Adresa slike",remove:"Ukloni sliku",original:"Original"},video:{video:"Video",videoLink:"Veza ka videu",insert:"Umetni video",url:"URL video",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)"},link:{link:"Veza",insert:"Umetni vezu",unlink:"Ukloni vezu",edit:"Uredi",textToDisplay:"Tekst za prikaz",url:"Internet adresa",openInNewWindow:"Otvori u novom prozoru"},table:{table:"Tabela",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:"Umetni horizontalnu liniju"},style:{style:"Stil",p:"pni",blockquote:"Citat",pre:"Kod",h1:"Zaglavlje 1",h2:"Zaglavlje 2",h3:"Zaglavlje 3",h4:"Zaglavlje 4",h5:"Zaglavlje 5",h6:"Zaglavlje 6"},lists:{unordered:"Obična lista",ordered:"Numerisana lista"},options:{help:"Pomoć",fullscreen:"Preko celog ekrana",codeview:"Izvorni kod"},paragraph:{paragraph:"Paragraf",outdent:"Smanji uvlačenje",indent:"Povečaj uvlačenje",left:"Poravnaj u levo",center:"Centrirano",right:"Poravnaj u desno",justify:"Poravnaj obostrano"},color:{recent:"Poslednja boja",more:"Više boja",background:"Boja pozadine",foreground:"Boja teksta",transparent:"Providna",setTransparent:"Providna",reset:"Opoziv",resetToDefault:"Podrazumevana"},shortcut:{shortcuts:"Prečice sa tastature",close:"Zatvori",textFormatting:"Formatiranje teksta",action:"Akcija",paragraphFormatting:"Formatiranje paragrafa",documentStyle:"Stil dokumenta",extraKeys:"Dodatne kombinacije"},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:"Poništi",redo:"Ponovi"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\������!dist/lang/summernote-ta-IN.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ta-IN":{font:{bold:"தடித்த",italic:"சாய்வு",underline:"அடிக்கோடு",clear:"நீக்கு",height:"வரி உயரம்",name:"எழுத்துரு பெயர்",strikethrough:"குறுக்குக் கோடு",size:"எழுத்துரு அளவு",superscript:"மேல் ஒட்டு",subscript:"கீழ் ஒட்டு"},image:{image:"படம்",insert:"படத்தை செருகு",resizeFull:"முழு அளவை",resizeHalf:"அரை அளவை",resizeQuarter:"கால் அளவை",floatLeft:"இடப்பக்கமாக வை",floatRight:"வலப்பக்கமாக வை",floatNone:"இயல்புநிலையில் வை",shapeRounded:"வட்டமான வடிவம்",shapeCircle:"வட்ட வடிவம்",shapeThumbnail:"சிறு வடிவம்",shapeNone:"வடிவத்தை நீக்கு",dragImageHere:"படத்தை இங்கே இழுத்துவை",dropImage:"படத்தை விடு",selectFromFiles:"கோப்புகளை தேர்வு செய்",maximumFileSize:"அதிகபட்ச கோப்பு அளவு",maximumFileSizeError:"கோப்பு அதிகபட்ச அளவை மீறிவிட்டது",url:"இணையதள முகவரி",remove:"படத்தை நீக்கு",original:"Original"},video:{video:"காணொளி",videoLink:"காணொளி இணைப்பு",insert:"காணொளியை செருகு",url:"இணையதள முகவரி",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"இணைப்பு",insert:"இணைப்பை செருகு",unlink:"இணைப்பை நீக்கு",edit:"இணைப்பை தொகு",textToDisplay:"காட்சி வாசகம்",url:"இணையதள முகவரி",openInNewWindow:"புதிய சாளரத்தில் திறக்க"},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:"கிடைமட்ட கோடு"},style:{style:"தொகுப்பு",p:"பத்தி",blockquote:"மேற்கோள்",pre:"குறியீடு",h1:"தலைப்பு 1",h2:"தலைப்பு 2",h3:"தலைப்பு 3",h4:"தலைப்பு 4",h5:"தலைப்பு 5",h6:"தலைப்பு 6"},lists:{unordered:"வரிசையிடாத",ordered:"வரிசையிட்ட"},options:{help:"உதவி",fullscreen:"முழுத்திரை",codeview:"நிரலாக்க காட்சி"},paragraph:{paragraph:"பத்தி",outdent:"வெளித்தள்ளு",indent:"உள்ளே தள்ளு",left:"இடது சீரமைப்பு",center:"நடு சீரமைப்பு",right:"வலது சீரமைப்பு",justify:"இருபுற சீரமைப்பு"},color:{recent:"அண்மை நிறம்",more:"மேலும்",background:"பின்புல நிறம்",foreground:"முன்புற நிறம்",transparent:"தெளிமையான",setTransparent:"தெளிமையாக்கு",reset:"மீட்டமைக்க",resetToDefault:"இயல்புநிலைக்கு மீட்டமை"},shortcut:{shortcuts:"குறுக்குவழி",close:"மூடு",textFormatting:"எழுத்து வடிவமைப்பு",action:"செயல்படுத்து",paragraphFormatting:"பத்தி வடிவமைப்பு",documentStyle:"ஆவண பாணி",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:"மீளமை",redo:"மீண்டும்"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\AtS��dist/lang/summernote-mn-MN.jsnu�[���// Starsoft Mongolia LLC Temuujin Ariunbold (function($) { $.extend($.summernote.lang, { 'mn-MN': { font: { bold: 'Тод', italic: 'Налуу', underline: 'Доогуур зураас', clear: 'Цэвэрлэх', height: 'Өндөр', name: 'Фонт', superscript: 'Дээд илтгэгч', subscript: 'Доод илтгэгч', strikethrough: 'Дарах', size: 'Хэмжээ' }, image: { image: 'Зураг', insert: 'Оруулах', resizeFull: 'Хэмжээ бүтэн', resizeHalf: 'Хэмжээ 1/2', resizeQuarter: 'Хэмжээ 1/4', floatLeft: 'Зүүн талд байрлуулах', floatRight: 'Баруун талд байрлуулах', floatNone: 'Анхдагч байрлалд аваачих', shapeRounded: 'Хүрээ: Дугуй', shapeCircle: 'Хүрээ: Тойрог', shapeThumbnail: 'Хүрээ: Хураангуй', shapeNone: 'Хүрээгүй', dragImageHere: 'Зургийг энд чирч авчирна уу', dropImage: 'Drop image or Text', selectFromFiles: 'Файлуудаас сонгоно уу', maximumFileSize: 'Файлын дээд хэмжээ', maximumFileSizeError: 'Файлын дээд хэмжээ хэтэрсэн', url: 'Зургийн URL', remove: 'Зургийг устгах', original: 'Original' }, video: { video: 'Видео', videoLink: 'Видео холбоос', insert: 'Видео оруулах', url: 'Видео URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion болон Youku)' }, link: { link: 'Холбоос', insert: 'Холбоос оруулах', unlink: 'Холбоос арилгах', edit: 'Засварлах', textToDisplay: 'Харуулах бичвэр', url: 'Энэ холбоос хаашаа очих вэ?', openInNewWindow: 'Шинэ цонхонд нээх' }, 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: 'Хэвтээ шугам оруулах' }, style: { style: 'Хэв маяг', p: 'p', blockquote: 'Иш татах', pre: 'Эх сурвалж', h1: 'Гарчиг 1', h2: 'Гарчиг 2', h3: 'Гарчиг 3', h4: 'Гарчиг 4', h5: 'Гарчиг 5', h6: 'Гарчиг 6' }, lists: { unordered: 'Эрэмбэлэгдээгүй', ordered: 'Эрэмбэлэгдсэн' }, options: { help: 'Тусламж', fullscreen: 'Дэлгэцийг дүүргэх', codeview: 'HTML-Code харуулах' }, paragraph: { paragraph: 'Хэсэг', outdent: 'Догол мөр хасах', indent: 'Догол мөр нэмэх', left: 'Зүүн тийш эгнүүлэх', center: 'Төвд эгнүүлэх', right: 'Баруун тийш эгнүүлэх', justify: 'Мөрийг тэгшлэх' }, color: { recent: 'Сүүлд хэрэглэсэн өнгө', more: 'Өөр өнгөнүүд', background: 'Дэвсгэр өнгө', foreground: 'Үсгийн өнгө', transparent: 'Тунгалаг', setTransparent: 'Тунгалаг болгох', reset: 'Анхдагч өнгөөр тохируулах', resetToDefault: 'Хэвд нь оруулах' }, shortcut: { shortcuts: 'Богино холбоос', close: 'Хаалт', textFormatting: 'Бичвэрийг хэлбэржүүлэх', action: 'Үйлдэл', paragraphFormatting: 'Догол мөрийг хэлбэржүүлэх', documentStyle: 'Бичиг баримтын хэв загвар', 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: 'Буцаах', redo: 'Дахин хийх' }, specialChar: { specialChar: 'Тусгай тэмдэгт', select: 'Тусгай тэмдэгт сонгох' } } }); })(jQuery); PKf[�\A�v��dist/lang/summernote-ta-IN.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ta-IN': { font: { bold: 'தடித்த', italic: 'சாய்வு', underline: 'அடிக்கோடு', clear: 'நீக்கு', height: 'வரி உயரம்', name: 'எழுத்துரு பெயர்', strikethrough: 'குறுக்குக் கோடு', size: 'எழுத்துரு அளவு', superscript: 'மேல் ஒட்டு', subscript: 'கீழ் ஒட்டு' }, image: { image: 'படம்', insert: 'படத்தை செருகு', resizeFull: 'முழு அளவை', resizeHalf: 'அரை அளவை', resizeQuarter: 'கால் அளவை', floatLeft: 'இடப்பக்கமாக வை', floatRight: 'வலப்பக்கமாக வை', floatNone: 'இயல்புநிலையில் வை', shapeRounded: 'வட்டமான வடிவம்', shapeCircle: 'வட்ட வடிவம்', shapeThumbnail: 'சிறு வடிவம்', shapeNone: 'வடிவத்தை நீக்கு', dragImageHere: 'படத்தை இங்கே இழுத்துவை', dropImage: 'படத்தை விடு', selectFromFiles: 'கோப்புகளை தேர்வு செய்', maximumFileSize: 'அதிகபட்ச கோப்பு அளவு', maximumFileSizeError: 'கோப்பு அதிகபட்ச அளவை மீறிவிட்டது', url: 'இணையதள முகவரி', remove: 'படத்தை நீக்கு', original: 'Original' }, video: { video: 'காணொளி', videoLink: 'காணொளி இணைப்பு', insert: 'காணொளியை செருகு', url: 'இணையதள முகவரி', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'இணைப்பு', insert: 'இணைப்பை செருகு', unlink: 'இணைப்பை நீக்கு', edit: 'இணைப்பை தொகு', textToDisplay: 'காட்சி வாசகம்', url: 'இணையதள முகவரி', openInNewWindow: 'புதிய சாளரத்தில் திறக்க' }, 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: 'கிடைமட்ட கோடு' }, style: { style: 'தொகுப்பு', p: 'பத்தி', blockquote: 'மேற்கோள்', pre: 'குறியீடு', h1: 'தலைப்பு 1', h2: 'தலைப்பு 2', h3: 'தலைப்பு 3', h4: 'தலைப்பு 4', h5: 'தலைப்பு 5', h6: 'தலைப்பு 6' }, lists: { unordered: 'வரிசையிடாத', ordered: 'வரிசையிட்ட' }, options: { help: 'உதவி', fullscreen: 'முழுத்திரை', codeview: 'நிரலாக்க காட்சி' }, paragraph: { paragraph: 'பத்தி', outdent: 'வெளித்தள்ளு', indent: 'உள்ளே தள்ளு', left: 'இடது சீரமைப்பு', center: 'நடு சீரமைப்பு', right: 'வலது சீரமைப்பு', justify: 'இருபுற சீரமைப்பு' }, color: { recent: 'அண்மை நிறம்', more: 'மேலும்', background: 'பின்புல நிறம்', foreground: 'முன்புற நிறம்', transparent: 'தெளிமையான', setTransparent: 'தெளிமையாக்கு', reset: 'மீட்டமைக்க', resetToDefault: 'இயல்புநிலைக்கு மீட்டமை' }, shortcut: { shortcuts: 'குறுக்குவழி', close: 'மூடு', textFormatting: 'எழுத்து வடிவமைப்பு', action: 'செயல்படுத்து', paragraphFormatting: 'பத்தி வடிவமைப்பு', documentStyle: 'ஆவண பாணி', 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: 'மீளமை', redo: 'மீண்டும்' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\S>��!dist/lang/summernote-uz-UZ.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"uz-UZ":{font:{bold:"қалин",italic:"Курсив",underline:"Белгиланган",clear:"Ҳарф турларини олиб ташлаш",height:"Чизиқ баландлиги",name:"Ҳарф",strikethrough:"Ўчирилган",subscript:"Пастки индекс",superscript:"Юқори индекс",size:"ҳарф ҳажми"},image:{image:"Расм",insert:"расмни қўйиш",resizeFull:"Ҳажмни тиклаш",resizeHalf:"50% гача кичрайтириш",resizeQuarter:"25% гача кичрайтириш",floatLeft:"Чапда жойлаштириш",floatRight:"Ўнгда жойлаштириш",floatNone:"Стандарт бўйича жойлашув",shapeRounded:"Шакли: Юмалоқ",shapeCircle:"Шакли: Доира",shapeThumbnail:"Шакли: Миниатюра",shapeNone:"Шакли: Йўқ",dragImageHere:"Суратни кўчириб ўтинг",dropImage:"Суратни кўчириб ўтинг",selectFromFiles:"Файллардан бирини танлаш",url:"суратлар URL и",remove:"Суратни ўчириш"},video:{video:"Видео",videoLink:"Видеога ҳавола",insert:"Видео",url:"URL видео",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)"},link:{link:"Ҳавола",insert:"Ҳаволани қўйиш",unlink:"Ҳаволани олиб ташлаш",edit:"Таҳрир қилиш",textToDisplay:"Кўринадиган матн",url:"URL ўтиш учун",openInNewWindow:"Янги дарчада очиш"},table:{table:"Жадвал"},hr:{insert:"Горизонтал чизиқни қўйиш"},style:{style:"Услуб",p:"Яхши",blockquote:"Жумла",pre:"Код",h1:"Сарлавҳа 1",h2:"Сарлавҳа 2",h3:"Сарлавҳа 3",h4:"Сарлавҳа 4",h5:"Сарлавҳа 5",h6:"Сарлавҳа 6"},lists:{unordered:"Белгиланган рўйҳат",ordered:"Рақамланган рўйҳат"},options:{help:"Ёрдам",fullscreen:"Бутун экран бўйича",codeview:"Бошланғич код"},paragraph:{paragraph:"Параграф",outdent:"Орқага қайтишни камайтириш",indent:"Орқага қайтишни кўпайтириш",left:"Чап қирғоққа тўғрилаш",center:"Марказга тўғрилаш",right:"Ўнг қирғоққа тўғрилаш",justify:"Эни бўйлаб чўзиш"},color:{recent:"Охирги ранг",more:"Яна ранглар",background:"Фон ранги",foreground:"Ҳарф ранги",transparent:"Шаффоф",setTransparent:"Шаффофдай қилиш",reset:"Бекор қилиш",resetToDefault:"Стандартга оид тиклаш"},shortcut:{shortcuts:"Клавишларнинг ҳамохҳанглиги",close:"Ёпиқ",textFormatting:"Матнни ",action:"Ҳаркат",paragraphFormatting:"Параграфни форматлаш",documentStyle:"Ҳужжатнинг тури",extraKeys:"Қўшимча имкониятлар"},history:{undo:"Бекор қилиш",redo:"Қайтариш"}}})}(jQuery);PKf[�\�E)dist/lang/summernote-da-DK.jsnu�[���(function($) { $.extend($.summernote.lang, { 'da-DK': { font: { bold: 'Fed', italic: 'Kursiv', underline: 'Understreget', clear: 'Fjern formatering', height: 'Højde', name: 'Skrifttype', strikethrough: 'Gennemstreget', subscript: 'Sænket skrift', superscript: 'Hævet skrift', size: 'Skriftstørrelse' }, image: { image: 'Billede', insert: 'Indsæt billede', resizeFull: 'Original størrelse', resizeHalf: 'Halv størrelse', resizeQuarter: 'Kvart størrelse', floatLeft: 'Venstrestillet', floatRight: 'Højrestillet', floatNone: 'Fjern formatering', shapeRounded: 'Form: Runde kanter', shapeCircle: 'Form: Cirkel', shapeThumbnail: 'Form: Miniature', shapeNone: 'Form: Ingen', dragImageHere: 'Træk billede hertil', dropImage: 'Slip billede', selectFromFiles: 'Vælg billed-fil', maximumFileSize: 'Maks fil størrelse', maximumFileSizeError: 'Filen er større end maks tilladte fil størrelse!', url: 'Billede URL', remove: 'Fjern billede', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Indsæt Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' }, link: { link: 'Link', insert: 'Indsæt link', unlink: 'Fjern link', edit: 'Rediger', textToDisplay: 'Visningstekst', url: 'Hvor skal linket pege hen?', openInNewWindow: 'Åbn i nyt vindue' }, table: { table: 'Tabel', 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: 'Indsæt horisontal linje' }, style: { style: 'Stil', p: 'p', blockquote: 'Citat', pre: 'Kode', h1: 'Overskrift 1', h2: 'Overskrift 2', h3: 'Overskrift 3', h4: 'Overskrift 4', h5: 'Overskrift 5', h6: 'Overskrift 6' }, lists: { unordered: 'Punktopstillet liste', ordered: 'Nummereret liste' }, options: { help: 'Hjælp', fullscreen: 'Fuld skærm', codeview: 'HTML-Visning' }, paragraph: { paragraph: 'Afsnit', outdent: 'Formindsk indryk', indent: 'Forøg indryk', left: 'Venstrestillet', center: 'Centreret', right: 'Højrestillet', justify: 'Blokjuster' }, color: { recent: 'Nyligt valgt farve', more: 'Flere farver', background: 'Baggrund', foreground: 'Forgrund', transparent: 'Transparent', setTransparent: 'Sæt transparent', reset: 'Nulstil', resetToDefault: 'Gendan standardindstillinger' }, shortcut: { shortcuts: 'Genveje', close: 'Luk', textFormatting: 'Tekstformatering', action: 'Handling', paragraphFormatting: 'Afsnitsformatering', documentStyle: 'Dokumentstil', 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: 'Fortryd', redo: 'Annuller fortryd' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\* ����dist/lang/summernote-vi-VN.jsnu�[���(function($) { $.extend($.summernote.lang, { 'vi-VN': { font: { bold: 'In Đậm', italic: 'In Nghiêng', underline: 'Gạch dưới', clear: 'Bỏ định dạng', height: 'Chiều cao dòng', name: 'Phông chữ', strikethrough: 'Gạch ngang', subscript: 'Subscript', superscript: 'Superscript', size: 'Cỡ chữ' }, image: { image: 'Hình ảnh', insert: 'Chèn', resizeFull: '100%', resizeHalf: '50%', resizeQuarter: '25%', floatLeft: 'Trôi về trái', floatRight: 'Trôi về phải', floatNone: 'Không trôi', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Thả Ảnh ở vùng này', dropImage: 'Drop image or Text', selectFromFiles: 'Chọn từ File', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL', remove: 'Xóa', original: 'Original' }, video: { video: 'Video', videoLink: 'Link đến Video', insert: 'Chèn Video', url: 'URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)' }, link: { link: 'Link', insert: 'Chèn Link', unlink: 'Gỡ Link', edit: 'Sửa', textToDisplay: 'Văn bản hiển thị', url: 'URL', openInNewWindow: 'Mở ở Cửa sổ mới' }, table: { table: 'Bảng', 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: 'Chèn' }, style: { style: 'Kiểu chữ', p: 'Chữ thường', blockquote: 'Đoạn trích', pre: 'Mã Code', h1: 'H1', h2: 'H2', h3: 'H3', h4: 'H4', h5: 'H5', h6: 'H6' }, lists: { unordered: 'Liệt kê danh sách', ordered: 'Liệt kê theo thứ tự' }, options: { help: 'Trợ giúp', fullscreen: 'Toàn Màn hình', codeview: 'Xem Code' }, paragraph: { paragraph: 'Canh lề', outdent: 'Dịch sang trái', indent: 'Dịch sang phải', left: 'Canh trái', center: 'Canh giữa', right: 'Canh phải', justify: 'Canh đều' }, color: { recent: 'Màu chữ', more: 'Mở rộng', background: 'Màu nền', foreground: 'Màu chữ', transparent: 'trong suốt', setTransparent: 'Nền trong suốt', reset: 'Thiết lập lại', resetToDefault: 'Trở lại ban đầu' }, shortcut: { shortcuts: 'Phím tắt', close: 'Đóng', textFormatting: 'Định dạng Văn bản', action: 'Hành động', paragraphFormatting: 'Định dạng', documentStyle: 'Kiểu văn bản', 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: 'Lùi lại', redo: 'Làm lại' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\<�����!dist/lang/summernote-hu-HU.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"hu-HU":{font:{bold:"Félkövér",italic:"Dőlt",underline:"Aláhúzott",clear:"Formázás törlése",height:"Sorköz",name:"Betűtípus",strikethrough:"Áthúzott",subscript:"Subscript",superscript:"Superscript",size:"Betűméret"},image:{image:"Kép",insert:"Kép beszúrása",resizeFull:"Átméretezés teljes méretre",resizeHalf:"Átméretezés felére",resizeQuarter:"Átméretezés negyedére",floatLeft:"Igazítás balra",floatRight:"Igazítás jobbra",floatNone:"Igazítás törlése",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Ide húzhat képet vagy szöveget",dropImage:"Engedje el a képet vagy szöveget",selectFromFiles:"Fájlok kiválasztása",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Kép URL címe",remove:"Kép törlése",original:"Original"},video:{video:"Videó",videoLink:"Videó hivatkozás",insert:"Videó beszúrása",url:"Videó URL címe",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)"},link:{link:"Hivatkozás",insert:"Hivatkozás beszúrása",unlink:"Hivatkozás megszüntetése",edit:"Szerkesztés",textToDisplay:"Megjelenítendő szöveg",url:"Milyen URL címre hivatkozzon?",openInNewWindow:"Megnyitás új ablakban"},table:{table:"Táblázat",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:"Elválasztó vonal beszúrása"},style:{style:"Stílus",p:"Normál",blockquote:"Idézet",pre:"Kód",h1:"Fejléc 1",h2:"Fejléc 2",h3:"Fejléc 3",h4:"Fejléc 4",h5:"Fejléc 5",h6:"Fejléc 6"},lists:{unordered:"Listajeles lista",ordered:"Számozott lista"},options:{help:"Súgó",fullscreen:"Teljes képernyő",codeview:"Kód nézet"},paragraph:{paragraph:"Bekezdés",outdent:"Behúzás csökkentése",indent:"Behúzás növelése",left:"Igazítás balra",center:"Igazítás középre",right:"Igazítás jobbra",justify:"Sorkizárt"},color:{recent:"Jelenlegi szín",more:"További színek",background:"Háttérszín",foreground:"Betűszín",transparent:"Átlátszó",setTransparent:"Átlászóság beállítása",reset:"Visszaállítás",resetToDefault:"Alaphelyzetbe állítás"},shortcut:{shortcuts:"Gyorsbillentyű",close:"Bezárás",textFormatting:"Szöveg formázása",action:"Művelet",paragraphFormatting:"Bekezdés formázása",documentStyle:"Dokumentumstílus",extraKeys:"Extra keys"},help:{insertParagraph:"Új bekezdés",undo:"Visszavonás",redo:"Újra",tab:"Behúzás növelése",untab:"Behúzás csökkentése",bold:"Félkövérre állítás",italic:"Dőltre állítás",underline:"Aláhúzás",strikethrough:"Áthúzás",removeFormat:"Formázás törlése",justifyLeft:"Balra igazítás",justifyCenter:"Középre igazítás",justifyRight:"Jobbra igazítás",justifyFull:"Sorkizárt",insertUnorderedList:"Számozatlan lista be/ki",insertOrderedList:"Számozott lista be/ki",outdent:"Jelenlegi bekezdés behúzásának megszüntetése",indent:"Jelenlegi bekezdés behúzása",formatPara:"Blokk formázása bekezdésként (P tag)",formatH1:"Blokk formázása, mint Fejléc 1",formatH2:"Blokk formázása, mint Fejléc 2",formatH3:"Blokk formázása, mint Fejléc 3",formatH4:"Blokk formázása, mint Fejléc 4",formatH5:"Blokk formázása, mint Fejléc 5",formatH6:"Blokk formázása, mint Fejléc 6",insertHorizontalRule:"Vízszintes vonal beszúrása","linkDialog.show":"Link párbeszédablak megjelenítése"},history:{undo:"Visszavonás",redo:"Újra"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\��1ZZdist/lang/summernote-es-EU.jsnu�[���(function($) { $.extend($.summernote.lang, { 'es-EU': { font: { bold: 'Lodia', italic: 'Etzana', underline: 'Azpimarratua', clear: 'Estiloa kendu', height: 'Lerro altuera', name: 'Tipografia', strikethrough: 'Marratua', subscript: 'Subscript', superscript: 'Superscript', size: 'Letren neurria' }, image: { image: 'Irudia', insert: 'Irudi bat txertatu', resizeFull: 'Jatorrizko neurrira aldatu', resizeHalf: 'Neurria erdira aldatu', resizeQuarter: 'Neurria laurdenera aldatu', floatLeft: 'Ezkerrean kokatu', floatRight: 'Eskuinean kokatu', floatNone: 'Kokapenik ez ezarri', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Irudi bat ezarri hemen', dropImage: 'Drop image or Text', selectFromFiles: 'Zure fitxategi bat aukeratu', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Irudiaren URL helbidea', remove: 'Remove Image', original: 'Original' }, video: { video: 'Bideoa', videoLink: 'Bideorako esteka', insert: 'Bideo berri bat txertatu', url: 'Bideoaren URL helbidea', providers: '(YouTube, Vimeo, Vine, Instagram edo DailyMotion)' }, link: { link: 'Esteka', insert: 'Esteka bat txertatu', unlink: 'Esteka ezabatu', edit: 'Editatu', textToDisplay: 'Estekaren testua', url: 'Estekaren URL helbidea', openInNewWindow: 'Leiho berri batean ireki' }, table: { table: 'Taula', 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: 'Marra horizontala txertatu' }, style: { style: 'Estiloa', p: 'p', blockquote: 'Aipamena', pre: 'Kodea', h1: '1. izenburua', h2: '2. izenburua', h3: '3. izenburua', h4: '4. izenburua', h5: '5. izenburua', h6: '6. izenburua' }, lists: { unordered: 'Ordenatu gabeko zerrenda', ordered: 'Zerrenda ordenatua' }, options: { help: 'Laguntza', fullscreen: 'Pantaila osoa', codeview: 'Kodea ikusi' }, paragraph: { paragraph: 'Paragrafoa', outdent: 'Koska txikiagoa', indent: 'Koska handiagoa', left: 'Ezkerrean kokatu', center: 'Erdian kokatu', right: 'Eskuinean kokatu', justify: 'Justifikatu' }, color: { recent: 'Azken kolorea', more: 'Kolore gehiago', background: 'Atzeko planoa', foreground: 'Aurreko planoa', transparent: 'Gardena', setTransparent: 'Gardendu', reset: 'Lehengoratu', resetToDefault: 'Berrezarri lehenetsia' }, shortcut: { shortcuts: 'Lasterbideak', close: 'Itxi', textFormatting: 'Testuaren formatua', action: 'Ekintza', paragraphFormatting: 'Paragrafoaren formatua', documentStyle: 'Dokumentuaren estiloa' }, 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: 'Desegin', redo: 'Berregin' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�ftdist/lang/summernote-hu-HU.jsnu�[���(function($) { $.extend($.summernote.lang, { 'hu-HU': { font: { bold: 'Félkövér', italic: 'Dőlt', underline: 'Aláhúzott', clear: 'Formázás törlése', height: 'Sorköz', name: 'Betűtípus', strikethrough: 'Áthúzott', subscript: 'Subscript', superscript: 'Superscript', size: 'Betűméret' }, image: { image: 'Kép', insert: 'Kép beszúrása', resizeFull: 'Átméretezés teljes méretre', resizeHalf: 'Átméretezés felére', resizeQuarter: 'Átméretezés negyedére', floatLeft: 'Igazítás balra', floatRight: 'Igazítás jobbra', floatNone: 'Igazítás törlése', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Ide húzhat képet vagy szöveget', dropImage: 'Engedje el a képet vagy szöveget', selectFromFiles: 'Fájlok kiválasztása', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Kép URL címe', remove: 'Kép törlése', original: 'Original' }, video: { video: 'Videó', videoLink: 'Videó hivatkozás', insert: 'Videó beszúrása', url: 'Videó URL címe', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)' }, link: { link: 'Hivatkozás', insert: 'Hivatkozás beszúrása', unlink: 'Hivatkozás megszüntetése', edit: 'Szerkesztés', textToDisplay: 'Megjelenítendő szöveg', url: 'Milyen URL címre hivatkozzon?', openInNewWindow: 'Megnyitás új ablakban' }, table: { table: 'Táblázat', 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: 'Elválasztó vonal beszúrása' }, style: { style: 'Stílus', p: 'Normál', blockquote: 'Idézet', pre: 'Kód', h1: 'Fejléc 1', h2: 'Fejléc 2', h3: 'Fejléc 3', h4: 'Fejléc 4', h5: 'Fejléc 5', h6: 'Fejléc 6' }, lists: { unordered: 'Listajeles lista', ordered: 'Számozott lista' }, options: { help: 'Súgó', fullscreen: 'Teljes képernyő', codeview: 'Kód nézet' }, paragraph: { paragraph: 'Bekezdés', outdent: 'Behúzás csökkentése', indent: 'Behúzás növelése', left: 'Igazítás balra', center: 'Igazítás középre', right: 'Igazítás jobbra', justify: 'Sorkizárt' }, color: { recent: 'Jelenlegi szín', more: 'További színek', background: 'Háttérszín', foreground: 'Betűszín', transparent: 'Átlátszó', setTransparent: 'Átlászóság beállítása', reset: 'Visszaállítás', resetToDefault: 'Alaphelyzetbe állítás' }, shortcut: { shortcuts: 'Gyorsbillentyű', close: 'Bezárás', textFormatting: 'Szöveg formázása', action: 'Művelet', paragraphFormatting: 'Bekezdés formázása', documentStyle: 'Dokumentumstílus', extraKeys: 'Extra keys' }, help: { 'insertParagraph': 'Új bekezdés', 'undo': 'Visszavonás', 'redo': 'Újra', 'tab': 'Behúzás növelése', 'untab': 'Behúzás csökkentése', 'bold': 'Félkövérre állítás', 'italic': 'Dőltre állítás', 'underline': 'Aláhúzás', 'strikethrough': 'Áthúzás', 'removeFormat': 'Formázás törlése', 'justifyLeft': 'Balra igazítás', 'justifyCenter': 'Középre igazítás', 'justifyRight': 'Jobbra igazítás', 'justifyFull': 'Sorkizárt', 'insertUnorderedList': 'Számozatlan lista be/ki', 'insertOrderedList': 'Számozott lista be/ki', 'outdent': 'Jelenlegi bekezdés behúzásának megszüntetése', 'indent': 'Jelenlegi bekezdés behúzása', 'formatPara': 'Blokk formázása bekezdésként (P tag)', 'formatH1': 'Blokk formázása, mint Fejléc 1', 'formatH2': 'Blokk formázása, mint Fejléc 2', 'formatH3': 'Blokk formázása, mint Fejléc 3', 'formatH4': 'Blokk formázása, mint Fejléc 4', 'formatH5': 'Blokk formázása, mint Fejléc 5', 'formatH6': 'Blokk formázása, mint Fejléc 6', 'insertHorizontalRule': 'Vízszintes vonal beszúrása', 'linkDialog.show': 'Link párbeszédablak megjelenítése' }, history: { undo: 'Visszavonás', redo: 'Újra' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\W���++!dist/lang/summernote-bg-BG.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"bg-BG":{font:{bold:"Удебелен",italic:"Наклонен",underline:"Подчертан",clear:"Изчисти стиловете",height:"Височина",name:"Шрифт",strikethrough:"Задраскано",subscript:"Долен индекс",superscript:"Горен индекс",size:"Размер на шрифта"},image:{image:"Изображение",insert:"Постави картинка",resizeFull:"Цял размер",resizeHalf:"Размер на 50%",resizeQuarter:"Размер на 25%",floatLeft:"Подравни в ляво",floatRight:"Подравни в дясно",floatNone:"Без подравняване",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Пуснете изображението тук",dropImage:"Drop image or Text",selectFromFiles:"Изберете файл",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL адрес на изображение",remove:"Премахни изображение",original:"Original"},video:{video:"Video",videoLink:"Video Link",insert:"Insert Video",url:"Video URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"Връзка",insert:"Добави връзка",unlink:"Премахни връзка",edit:"Промени",textToDisplay:"Текст за показване",url:"URL адрес",openInNewWindow:"Отвори в нов прозорец"},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:"Добави хоризонтална линия"},style:{style:"Стил",p:"Нормален",blockquote:"Цитат",pre:"Код",h1:"Заглавие 1",h2:"Заглавие 2",h3:"Заглавие 3",h4:"Заглавие 4",h5:"Заглавие 5",h6:"Заглавие 6"},lists:{unordered:"Символен списък",ordered:"Цифров списък"},options:{help:"Помощ",fullscreen:"На цял екран",codeview:"Преглед на код"},paragraph:{paragraph:"Параграф",outdent:"Намаляване на отстъпа",indent:"Абзац",left:"Подравняване в ляво",center:"Център",right:"Подравняване в дясно",justify:"Разтягане по ширина"},color:{recent:"Последния избран цвят",more:"Още цветове",background:"Цвят на фона",foreground:"Цвят на шрифта",transparent:"Прозрачен",setTransparent:"Направете прозрачен",reset:"Възстанови",resetToDefault:"Възстанови оригиналните"},shortcut:{shortcuts:"Клавишни комбинации",close:"Затвори",textFormatting:"Форматиране на текста",action:"Действие",paragraphFormatting:"Форматиране на параграф",documentStyle:"Стил на документа",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:"Назад",redo:"Напред"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\N�2���dist/lang/summernote-fr-FR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'fr-FR': { font: { bold: 'Gras', italic: 'Italique', underline: 'Souligné', clear: 'Effacer la mise en forme', height: 'Interligne', name: 'Famille de police', strikethrough: 'Barré', superscript: 'Exposant', subscript: 'Indice', size: 'Taille de police' }, image: { image: 'Image', insert: 'Insérer une image', resizeFull: 'Taille originale', resizeHalf: 'Redimensionner à 50 %', resizeQuarter: 'Redimensionner à 25 %', floatLeft: 'Aligné à gauche', floatRight: 'Aligné à droite', floatNone: 'Pas d\'alignement', shapeRounded: 'Forme: Rectangle arrondie', shapeCircle: 'Forme: Cercle', shapeThumbnail: 'Forme: Vignette', shapeNone: 'Forme: Aucune', dragImageHere: 'Faites glisser une image ou un texte dans ce cadre', dropImage: 'Lachez l\'image ou le texte', selectFromFiles: 'Choisir un fichier', maximumFileSize: 'Taille de fichier maximale', maximumFileSizeError: 'Taille maximale du fichier dépassée', url: 'URL de l\'image', remove: 'Supprimer l\'image', original: 'Original' }, video: { video: 'Vidéo', videoLink: 'Lien vidéo', insert: 'Insérer une vidéo', url: 'URL de la vidéo', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'Lien', insert: 'Insérer un lien', unlink: 'Supprimer un lien', edit: 'Modifier', textToDisplay: 'Texte à afficher', url: 'URL du lien', openInNewWindow: 'Ouvrir dans une nouvelle fenêtre' }, table: { table: 'Tableau', addRowAbove: 'Ajouter une ligne au-dessus', addRowBelow: 'Ajouter une ligne en dessous', addColLeft: 'Ajouter une colonne à gauche', addColRight: 'Ajouter une colonne à droite', delRow: 'Supprimer la ligne', delCol: 'Supprimer la colonne', delTable: 'Supprimer le tableau' }, hr: { insert: 'Insérer une ligne horizontale' }, style: { style: 'Style', p: 'Normal', blockquote: 'Citation', pre: 'Code source', h1: 'Titre 1', h2: 'Titre 2', h3: 'Titre 3', h4: 'Titre 4', h5: 'Titre 5', h6: 'Titre 6' }, lists: { unordered: 'Liste à puces', ordered: 'Liste numérotée' }, options: { help: 'Aide', fullscreen: 'Plein écran', codeview: 'Afficher le code HTML' }, paragraph: { paragraph: 'Paragraphe', outdent: 'Diminuer le retrait', indent: 'Augmenter le retrait', left: 'Aligner à gauche', center: 'Centrer', right: 'Aligner à droite', justify: 'Justifier' }, color: { recent: 'Dernière couleur sélectionnée', more: 'Plus de couleurs', background: 'Couleur de fond', foreground: 'Couleur de police', transparent: 'Transparent', setTransparent: 'Définir la transparence', reset: 'Restaurer', resetToDefault: 'Restaurer la couleur par défaut' }, shortcut: { shortcuts: 'Raccourcis', close: 'Fermer', textFormatting: 'Mise en forme du texte', action: 'Action', paragraphFormatting: 'Mise en forme des paragraphes', documentStyle: 'Style du document', extraKeys: 'Touches supplémentaires' }, help: { 'insertParagraph': 'Insérer paragraphe', 'undo': 'Défaire la dernière commande', 'redo': 'Refaire la dernière commande', 'tab': 'Tabulation', 'untab': 'Tabulation arrière', 'bold': 'Mettre en caractère gras', 'italic': 'Mettre en italique', 'underline': 'Mettre en souligné', 'strikethrough': 'Mettre en texte barré', 'removeFormat': 'Nettoyer les styles', 'justifyLeft': 'Aligner à gauche', 'justifyCenter': 'Centrer', 'justifyRight': 'Aligner à droite', 'justifyFull': 'Justifier à gauche et à droite', 'insertUnorderedList': 'Basculer liste à puces', 'insertOrderedList': 'Basculer liste ordonnée', 'outdent': 'Diminuer le retrait du paragraphe', 'indent': 'Augmenter le retrait du paragraphe', 'formatPara': 'Changer le paragraphe en cours en normal (P)', 'formatH1': 'Changer le paragraphe en cours en entête H1', 'formatH2': 'Changer le paragraphe en cours en entête H2', 'formatH3': 'Changer le paragraphe en cours en entête H3', 'formatH4': 'Changer le paragraphe en cours en entête H4', 'formatH5': 'Changer le paragraphe en cours en entête H5', 'formatH6': 'Changer le paragraphe en cours en entête H6', 'insertHorizontalRule': 'Insérer séparation horizontale', 'linkDialog.show': 'Afficher fenêtre d\'hyperlien' }, history: { undo: 'Annuler la dernière action', redo: 'Restaurer la dernière action annulée' }, specialChar: { specialChar: 'CARACTÈRES SPÉCIAUX', select: 'Choisir des caractères spéciaux' } } }); })(jQuery); PKf[�\a��Έ�!dist/lang/summernote-ko-KR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ko-KR":{font:{bold:"굵게",italic:"기울임꼴",underline:"밑줄",clear:"글자 효과 없애기",height:"줄간격",name:"글꼴",superscript:"위 첨자",subscript:"아래 첨자",strikethrough:"취소선",size:"글자 크기"},image:{image:"사진",insert:"사진 추가",resizeFull:"100% 크기로 변경",resizeHalf:"50% 크기로 변경",resizeQuarter:"25% 크기로 변경",floatLeft:"왼쪽 정렬",floatRight:"오른쪽 정렬",floatNone:"정렬하지 않음",shapeRounded:"스타일: 둥근 모서리",shapeCircle:"스타일: 원형",shapeThumbnail:"스타일: 액자",shapeNone:"스타일: 없음",dragImageHere:"텍스트 혹은 사진을 이곳으로 끌어오세요",dropImage:"텍스트 혹은 사진을 내려놓으세요",selectFromFiles:"파일 선택",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"사진 URL",remove:"사진 삭제",original:"Original"},video:{video:"동영상",videoLink:"동영상 링크",insert:"동영상 추가",url:"동영상 URL",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)"},link:{link:"링크",insert:"링크 추가",unlink:"링크 삭제",edit:"수정",textToDisplay:"링크에 표시할 내용",url:"이동할 URL",openInNewWindow:"새창으로 열기"},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:"구분선 추가"},style:{style:"스타일",p:"본문",blockquote:"인용구",pre:"코드",h1:"제목 1",h2:"제목 2",h3:"제목 3",h4:"제목 4",h5:"제목 5",h6:"제목 6"},lists:{unordered:"글머리 기호",ordered:"번호 매기기"},options:{help:"도움말",fullscreen:"전체 화면",codeview:"코드 보기"},paragraph:{paragraph:"문단 정렬",outdent:"내어쓰기",indent:"들여쓰기",left:"왼쪽 정렬",center:"가운데 정렬",right:"오른쪽 정렬",justify:"양쪽 정렬"},color:{recent:"마지막으로 사용한 색",more:"다른 색 선택",background:"배경색",foreground:"글자색",transparent:"투명",setTransparent:"투명",reset:"취소",resetToDefault:"기본 값으로 변경"},shortcut:{shortcuts:"키보드 단축키",close:"닫기",textFormatting:"글자 스타일 적용",action:"기능",paragraphFormatting:"문단 스타일 적용",documentStyle:"문서 스타일 적용",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:"실행 취소",redo:"다시 실행"},specialChar:{specialChar:"특수문자",select:"특수문자를 선택하세요"}}})}(jQuery);PKf[�\S��ˤ�dist/lang/summernote-ko-KR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ko-KR': { font: { bold: '굵게', italic: '기울임꼴', underline: '밑줄', clear: '글자 효과 없애기', height: '줄간격', name: '글꼴', superscript: '위 첨자', subscript: '아래 첨자', strikethrough: '취소선', size: '글자 크기' }, image: { image: '사진', insert: '사진 추가', resizeFull: '100% 크기로 변경', resizeHalf: '50% 크기로 변경', resizeQuarter: '25% 크기로 변경', floatLeft: '왼쪽 정렬', floatRight: '오른쪽 정렬', floatNone: '정렬하지 않음', shapeRounded: '스타일: 둥근 모서리', shapeCircle: '스타일: 원형', shapeThumbnail: '스타일: 액자', shapeNone: '스타일: 없음', dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요', dropImage: '텍스트 혹은 사진을 내려놓으세요', selectFromFiles: '파일 선택', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: '사진 URL', remove: '사진 삭제', original: 'Original' }, video: { video: '동영상', videoLink: '동영상 링크', insert: '동영상 추가', url: '동영상 URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)' }, link: { link: '링크', insert: '링크 추가', unlink: '링크 삭제', edit: '수정', textToDisplay: '링크에 표시할 내용', url: '이동할 URL', openInNewWindow: '새창으로 열기' }, 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: '구분선 추가' }, style: { style: '스타일', p: '본문', blockquote: '인용구', pre: '코드', h1: '제목 1', h2: '제목 2', h3: '제목 3', h4: '제목 4', h5: '제목 5', h6: '제목 6' }, lists: { unordered: '글머리 기호', ordered: '번호 매기기' }, options: { help: '도움말', fullscreen: '전체 화면', codeview: '코드 보기' }, paragraph: { paragraph: '문단 정렬', outdent: '내어쓰기', indent: '들여쓰기', left: '왼쪽 정렬', center: '가운데 정렬', right: '오른쪽 정렬', justify: '양쪽 정렬' }, color: { recent: '마지막으로 사용한 색', more: '다른 색 선택', background: '배경색', foreground: '글자색', transparent: '투명', setTransparent: '투명', reset: '취소', resetToDefault: '기본 값으로 변경' }, shortcut: { shortcuts: '키보드 단축키', close: '닫기', textFormatting: '글자 스타일 적용', action: '기능', paragraphFormatting: '문단 스타일 적용', documentStyle: '문서 스타일 적용', 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: '실행 취소', redo: '다시 실행' }, specialChar: { specialChar: '특수문자', select: '특수문자를 선택하세요' } } }); })(jQuery); PKf[�\�E��dist/lang/summernote-it-IT.jsnu�[���(function($) { $.extend($.summernote.lang, { 'it-IT': { font: { bold: 'Testo in grassetto', italic: 'Testo in corsivo', underline: 'Testo sottolineato', clear: 'Elimina la formattazione del testo', height: 'Altezza della linea di testo', name: 'Famiglia Font', strikethrough: 'Testo barrato', subscript: 'Subscript', superscript: 'Superscript', size: 'Dimensione del carattere' }, image: { image: 'Immagine', insert: 'Inserisci Immagine', resizeFull: 'Dimensioni originali', resizeHalf: 'Ridimensiona al 50%', resizeQuarter: 'Ridimensiona al 25%', floatLeft: 'Posiziona a sinistra', floatRight: 'Posiziona a destra', floatNone: 'Nessun posizionamento', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Trascina qui un\'immagine', dropImage: 'Drop image or Text', selectFromFiles: 'Scegli dai Documenti', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL dell\'immagine', remove: 'Rimuovi immagine', original: 'Original' }, video: { video: 'Video', videoLink: 'Collegamento ad un Video', insert: 'Inserisci Video', url: 'URL del Video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' }, link: { link: 'Collegamento', insert: 'Inserisci Collegamento', unlink: 'Elimina collegamento', edit: 'Modifica collegamento', textToDisplay: 'Testo del collegamento', url: 'URL del collegamento', openInNewWindow: 'Apri in una nuova finestra' }, table: { table: 'Tabella', 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: 'Inserisce una linea di separazione' }, style: { style: 'Stili', p: 'pe', blockquote: 'Citazione', pre: 'Codice', h1: 'Titolo 1', h2: 'Titolo 2', h3: 'Titolo 3', h4: 'Titolo 4', h5: 'Titolo 5', h6: 'Titolo 6' }, lists: { unordered: 'Elenco non ordinato', ordered: 'Elenco ordinato' }, options: { help: 'Aiuto', fullscreen: 'Modalità a tutto schermo', codeview: 'Visualizza codice' }, paragraph: { paragraph: 'Paragrafo', outdent: 'Diminuisce il livello di rientro', indent: 'Aumenta il livello di rientro', left: 'Allinea a sinistra', center: 'Centra', right: 'Allinea a destra', justify: 'Giustifica (allinea a destra e sinistra)' }, color: { recent: 'Ultimo colore utilizzato', more: 'Altri colori', background: 'Colore di sfondo', foreground: 'Colore', transparent: 'Trasparente', setTransparent: 'Trasparente', reset: 'Reimposta', resetToDefault: 'Reimposta i colori' }, shortcut: { shortcuts: 'Scorciatoie da tastiera', close: 'Chiudi', textFormatting: 'Formattazione testo', action: 'Azioni', paragraphFormatting: 'Formattazione paragrafo', documentStyle: 'Stili', 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: 'Annulla', redo: 'Ripristina' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\zJ���dist/lang/summernote-pl-PL.jsnu�[���(function($) { $.extend($.summernote.lang, { 'pl-PL': { font: { bold: 'Pogrubienie', italic: 'Pochylenie', underline: 'Podkreślenie', clear: 'Usuń formatowanie', height: 'Interlinia', name: 'Czcionka', strikethrough: 'Przekreślenie', subscript: 'Indeks dolny', superscript: 'Indeks górny', size: 'Rozmiar' }, image: { image: 'Grafika', insert: 'Wstaw grafikę', resizeFull: 'Zmień rozmiar na 100%', resizeHalf: 'Zmień rozmiar na 50%', resizeQuarter: 'Zmień rozmiar na 25%', floatLeft: 'Po lewej', floatRight: 'Po prawej', floatNone: 'Równo z tekstem', shapeRounded: 'Kształt: zaokrąglone', shapeCircle: 'Kształt: okrąg', shapeThumbnail: 'Kształt: miniatura', shapeNone: 'Kształt: brak', dragImageHere: 'Przeciągnij grafikę lub tekst tutaj', dropImage: 'Przeciągnij grafikę lub tekst', selectFromFiles: 'Wybierz z dysku', maximumFileSize: 'Limit wielkości pliku', maximumFileSizeError: 'Przekroczono limit wielkości pliku.', url: 'Adres URL grafiki', remove: 'Usuń grafikę', original: 'Original' }, video: { video: 'Wideo', videoLink: 'Adres wideo', insert: 'Wstaw wideo', url: 'Adres wideo', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)' }, link: { link: 'Odnośnik', insert: 'Wstaw odnośnik', unlink: 'Usuń odnośnik', edit: 'Edytuj', textToDisplay: 'Tekst do wyświetlenia', url: 'Na jaki adres URL powinien przenosić ten odnośnik?', openInNewWindow: 'Otwórz w nowym oknie' }, table: { table: 'Tabela', 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: 'Wstaw poziomą linię' }, style: { style: 'Style', p: 'pny', blockquote: 'Cytat', pre: 'Kod', h1: 'Nagłówek 1', h2: 'Nagłówek 2', h3: 'Nagłówek 3', h4: 'Nagłówek 4', h5: 'Nagłówek 5', h6: 'Nagłówek 6' }, lists: { unordered: 'Lista wypunktowana', ordered: 'Lista numerowana' }, options: { help: 'Pomoc', fullscreen: 'Pełny ekran', codeview: 'Źródło' }, paragraph: { paragraph: 'Akapit', outdent: 'Zmniejsz wcięcie', indent: 'Zwiększ wcięcie', left: 'Wyrównaj do lewej', center: 'Wyrównaj do środka', right: 'Wyrównaj do prawej', justify: 'Wyrównaj do lewej i prawej' }, color: { recent: 'Ostani kolor', more: 'Więcej kolorów', background: 'Tło', foreground: 'Czcionka', transparent: 'Przeźroczysty', setTransparent: 'Przeźroczyste', reset: 'Reset', resetToDefault: 'Domyślne' }, shortcut: { shortcuts: 'Skróty klawiaturowe', close: 'Zamknij', textFormatting: 'Formatowanie tekstu', action: 'Akcja', paragraphFormatting: 'Formatowanie akapitu', documentStyle: 'Styl dokumentu', extraKeys: 'Dodatkowe klawisze' }, 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: 'Cofnij', redo: 'Ponów' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\T��S\\dist/lang/summernote-ro-RO.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ro-RO': { font: { bold: 'Îngroșat', italic: 'Înclinat', underline: 'Subliniat', clear: 'Înlătură formatare font', height: 'Înălțime rând', name: 'Familie de fonturi', strikethrough: 'Tăiat', subscript: 'Indice', superscript: 'Exponent', size: 'Dimensiune font' }, image: { image: 'Imagine', insert: 'Inserează imagine', resizeFull: 'Redimensionează complet', resizeHalf: 'Redimensionează 1/2', resizeQuarter: 'Redimensionează 1/4', floatLeft: 'Aliniere la stânga', floatRight: 'Aliniere la dreapta', floatNone: 'Fară aliniere', shapeRounded: 'Formă: Rotund', shapeCircle: 'Formă: Cerc', shapeThumbnail: 'Formă: Pictogramă', shapeNone: 'Formă: Nici una', dragImageHere: 'Trage o imagine sau un text aici', dropImage: 'Eliberează imaginea sau textul', selectFromFiles: 'Alege din fişiere', maximumFileSize: 'Dimensiune maximă fișier', maximumFileSizeError: 'Dimensiune maximă fișier depășită.', url: 'URL imagine', remove: 'Șterge imagine', original: 'Original' }, video: { video: 'Video', videoLink: 'Link video', insert: 'Inserează video', url: 'URL video?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)' }, link: { link: 'Link', insert: 'Inserează link', unlink: 'Înlătură link', edit: 'Editează', textToDisplay: 'Text ce va fi afişat', url: 'La ce adresă URL trebuie să conducă acest link?', openInNewWindow: 'Deschidere în fereastră nouă' }, table: { table: 'Tabel', addRowAbove: 'Adaugă rând deasupra', addRowBelow: 'Adaugă rând dedesubt', addColLeft: 'Adaugă coloană stânga', addColRight: 'Adaugă coloană dreapta', delRow: 'Șterge rând', delCol: 'Șterge coloană', delTable: 'Șterge tabel' }, hr: { insert: 'Inserează o linie orizontală' }, style: { style: 'Stil', p: 'p', blockquote: 'Citat', pre: 'Preformatat', h1: 'Titlu 1', h2: 'Titlu 2', h3: 'Titlu 3', h4: 'Titlu 4', h5: 'Titlu 5', h6: 'Titlu 6' }, lists: { unordered: 'Listă neordonată', ordered: 'Listă ordonată' }, options: { help: 'Ajutor', fullscreen: 'Măreşte', codeview: 'Sursă' }, paragraph: { paragraph: 'Paragraf', outdent: 'Creşte identarea', indent: 'Scade identarea', left: 'Aliniere la stânga', center: 'Aliniere centrală', right: 'Aliniere la dreapta', justify: 'Aliniere în bloc' }, color: { recent: 'Culoare recentă', more: 'Mai multe culori', background: 'Culoarea fundalului', foreground: 'Culoarea textului', transparent: 'Transparent', setTransparent: 'Setează transparent', reset: 'Resetează', resetToDefault: 'Revino la iniţial' }, shortcut: { shortcuts: 'Scurtături tastatură', close: 'Închide', textFormatting: 'Formatare text', action: 'Acţiuni', paragraphFormatting: 'Formatare paragraf', documentStyle: 'Stil paragraf', extraKeys: 'Taste extra' }, help: { 'insertParagraph': 'Inserează paragraf', 'undo': 'Revine la starea anterioară', 'redo': 'Revine la starea ulterioară', 'tab': 'Tab', 'untab': 'Untab', 'bold': 'Setează stil îngroșat', 'italic': 'Setează stil înclinat', 'underline': 'Setează stil subliniat', 'strikethrough': 'Setează stil tăiat', 'removeFormat': 'Înlătură formatare', 'justifyLeft': 'Setează aliniere stânga', 'justifyCenter': 'Setează aliniere centru', 'justifyRight': 'Setează aliniere dreapta', 'justifyFull': 'Setează aliniere bloc', 'insertUnorderedList': 'Comutare listă neordinată', 'insertOrderedList': 'Comutare listă ordonată', 'outdent': 'Înlătură indentare paragraf curent', 'indent': 'Adaugă indentare paragraf curent', 'formatPara': 'Schimbă formatarea selecției în paragraf', 'formatH1': 'Schimbă formatarea selecției în H1', 'formatH2': 'Schimbă formatarea selecției în H2', 'formatH3': 'Schimbă formatarea selecției în H3', 'formatH4': 'Schimbă formatarea selecției în H4', 'formatH5': 'Schimbă formatarea selecției în H5', 'formatH6': 'Schimbă formatarea selecției în H6', 'insertHorizontalRule': 'Adaugă linie orizontală', 'linkDialog.show': 'Inserează link' }, history: { undo: 'Starea anterioară', redo: 'Starea ulterioară' }, specialChar: { specialChar: 'CARACTERE SPECIALE', select: 'Alege caractere speciale' } } }); })(jQuery); PKf[�\��Z��dist/lang/summernote-uz-UZ.jsnu�[���(function($) { $.extend($.summernote.lang, { 'uz-UZ': { font: { bold: 'қалин', italic: 'Курсив', underline: 'Белгиланган', clear: 'Ҳарф турларини олиб ташлаш', height: 'Чизиқ баландлиги', name: 'Ҳарф', strikethrough: 'Ўчирилган', subscript: 'Пастки индекс', superscript: 'Юқори индекс', size: 'ҳарф ҳажми' }, image: { image: 'Расм', insert: 'расмни қўйиш', resizeFull: 'Ҳажмни тиклаш', resizeHalf: '50% гача кичрайтириш', resizeQuarter: '25% гача кичрайтириш', floatLeft: 'Чапда жойлаштириш', floatRight: 'Ўнгда жойлаштириш', floatNone: 'Стандарт бўйича жойлашув', shapeRounded: 'Шакли: Юмалоқ', shapeCircle: 'Шакли: Доира', shapeThumbnail: 'Шакли: Миниатюра', shapeNone: 'Шакли: Йўқ', dragImageHere: 'Суратни кўчириб ўтинг', dropImage: 'Суратни кўчириб ўтинг', selectFromFiles: 'Файллардан бирини танлаш', url: 'суратлар URL и', remove: 'Суратни ўчириш' }, video: { video: 'Видео', videoLink: 'Видеога ҳавола', insert: 'Видео', url: 'URL видео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' }, link: { link: 'Ҳавола', insert: 'Ҳаволани қўйиш', unlink: 'Ҳаволани олиб ташлаш', edit: 'Таҳрир қилиш', textToDisplay: 'Кўринадиган матн', url: 'URL ўтиш учун', openInNewWindow: 'Янги дарчада очиш' }, table: { table: 'Жадвал' }, hr: { insert: 'Горизонтал чизиқни қўйиш' }, style: { style: 'Услуб', p: 'Яхши', blockquote: 'Жумла', pre: 'Код', h1: 'Сарлавҳа 1', h2: 'Сарлавҳа 2', h3: 'Сарлавҳа 3', h4: 'Сарлавҳа 4', h5: 'Сарлавҳа 5', h6: 'Сарлавҳа 6' }, lists: { unordered: 'Белгиланган рўйҳат', ordered: 'Рақамланган рўйҳат' }, options: { help: 'Ёрдам', fullscreen: 'Бутун экран бўйича', codeview: 'Бошланғич код' }, paragraph: { paragraph: 'Параграф', outdent: 'Орқага қайтишни камайтириш', indent: 'Орқага қайтишни кўпайтириш', left: 'Чап қирғоққа тўғрилаш', center: 'Марказга тўғрилаш', right: 'Ўнг қирғоққа тўғрилаш', justify: 'Эни бўйлаб чўзиш' }, color: { recent: 'Охирги ранг', more: 'Яна ранглар', background: 'Фон ранги', foreground: 'Ҳарф ранги', transparent: 'Шаффоф', setTransparent: 'Шаффофдай қилиш', reset: 'Бекор қилиш', resetToDefault: 'Стандартга оид тиклаш' }, shortcut: { shortcuts: 'Клавишларнинг ҳамохҳанглиги', close: 'Ёпиқ', textFormatting: 'Матнни ', action: 'Ҳаркат', paragraphFormatting: 'Параграфни форматлаш', documentStyle: 'Ҳужжатнинг тури', extraKeys: 'Қўшимча имкониятлар' }, history: { undo: 'Бекор қилиш', redo: 'Қайтариш' } } }); })(jQuery); PKf[�\q:sZ !dist/lang/summernote-lt-LV.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(t){t.extend(t.summernote.lang,{"lv-LV":{font:{bold:"Treknraksts",italic:"Kursīvs",underline:"Pasvītrots",clear:"Noņemt formatējumu",height:"Līnijas augstums",name:"Fonts",strikethrough:"Nosvītrots",superscript:"Augšraksts",subscript:"Apakšraksts",size:"Fonta lielums"},image:{image:"Attēls",insert:"Ievietot attēlu",resizeFull:"Pilns izmērts",resizeHalf:"Samazināt 50%",resizeQuarter:"Samazināt 25%",floatLeft:"Līdzināt pa kreisi",floatRight:"Līdzināt pa labi",floatNone:"Nelīdzināt",shapeRounded:"Forma: apaļām malām",shapeCircle:"Forma: aplis",shapeThumbnail:"Forma: rāmītis",shapeNone:"Forma: orģināla",dragImageHere:"Ievēlciet attēlu šeit",dropImage:"Drop image or Text",selectFromFiles:"Izvēlēties failu",maximumFileSize:"Maksimālais faila izmērs",maximumFileSizeError:"Faila izmērs pārāk liels!",url:"Attēla URL",remove:"Dzēst attēlu",original:"Original"},video:{video:"Video",videoLink:"Video Link",insert:"Insert Video",url:"Video URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"Saite",insert:"Ievietot saiti",unlink:"Noņemt saiti",edit:"Rediģēt",textToDisplay:"Saites saturs",url:"Koks URL adresas yra susietas?",openInNewWindow:"Atvērt jaunā logā"},table:{table:"Tabula",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:"Ievietot līniju"},style:{style:"Stils",p:"Parasts",blockquote:"Citāts",pre:"Kods",h1:"Virsraksts h1",h2:"Virsraksts h2",h3:"Virsraksts h3",h4:"Virsraksts h4",h5:"Virsraksts h5",h6:"Virsraksts h6"},lists:{unordered:"Nenumurēts saraksts",ordered:"Numurēts saraksts"},options:{help:"Palīdzība",fullscreen:"Pa visu ekrānu",codeview:"HTML kods"},paragraph:{paragraph:"Paragrāfs",outdent:"Samazināt atkāpi",indent:"Palielināt atkāpi",left:"Līdzināt pa kreisi",center:"Centrēt",right:"Līdzināt pa labi",justify:"Līdzināt gar abām malām"},color:{recent:"Nesen izmantotās",more:"Citas krāsas",background:"Fona krāsa",foreground:"Fonta krāsa",transparent:"Caurspīdīgs",setTransparent:"Iestatīt caurspīdīgumu",reset:"Atjaunot",resetToDefault:"Atjaunot noklusējumu"},shortcut:{shortcuts:"Saīsnes",close:"Aizvērt",textFormatting:"Teksta formatēšana",action:"Darbība",paragraphFormatting:"Paragrāfa formatēšana",documentStyle:"Dokumenta stils",extraKeys:"Citas taustiņu kombinācijas"},help:{insertParagraph:"Ievietot Paragrāfu",undo:"Atcelt iepriekšējo darbību",redo:"Atkārtot atcelto darbību",tab:"Atkāpe",untab:"Samazināt atkāpi",bold:"Pārvērst tekstu treknrakstā",italic:"Pārvērst tekstu slīprakstā (kursīvā)",underline:"Pasvītrot tekstu",strikethrough:"Nosvītrot tekstu",removeFormat:"Notīrīt stilu no teksta",justifyLeft:"Līdzīnāt saturu pa kreisi",justifyCenter:"Centrēt saturu",justifyRight:"Līdzīnāt saturu pa labi",justifyFull:"Izlīdzināt saturu gar abām malām",insertUnorderedList:"Ievietot nenumurētu sarakstu",insertOrderedList:"Ievietot numurētu sarakstu",outdent:"Samazināt/noņemt atkāpi paragrāfam",indent:"Uzlikt atkāpi paragrāfam",formatPara:"Mainīt bloka tipu uz (p) Paragrāfu",formatH1:"Mainīt bloka tipu uz virsrakstu H1",formatH2:"Mainīt bloka tipu uz virsrakstu H2",formatH3:"Mainīt bloka tipu uz virsrakstu H3",formatH4:"Mainīt bloka tipu uz virsrakstu H4",formatH5:"Mainīt bloka tipu uz virsrakstu H5",formatH6:"Mainīt bloka tipu uz virsrakstu H6",insertHorizontalRule:"Ievietot horizontālu līniju","linkDialog.show":"Parādīt saites logu"},history:{undo:"Atsauks (undo)",redo:"Atkārtot (redo)"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�8!�� � !dist/lang/summernote-da-DK.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"da-DK":{font:{bold:"Fed",italic:"Kursiv",underline:"Understreget",clear:"Fjern formatering",height:"Højde",name:"Skrifttype",strikethrough:"Gennemstreget",subscript:"Sænket skrift",superscript:"Hævet skrift",size:"Skriftstørrelse"},image:{image:"Billede",insert:"Indsæt billede",resizeFull:"Original størrelse",resizeHalf:"Halv størrelse",resizeQuarter:"Kvart størrelse",floatLeft:"Venstrestillet",floatRight:"Højrestillet",floatNone:"Fjern formatering",shapeRounded:"Form: Runde kanter",shapeCircle:"Form: Cirkel",shapeThumbnail:"Form: Miniature",shapeNone:"Form: Ingen",dragImageHere:"Træk billede hertil",dropImage:"Slip billede",selectFromFiles:"Vælg billed-fil",maximumFileSize:"Maks fil størrelse",maximumFileSizeError:"Filen er større end maks tilladte fil størrelse!",url:"Billede URL",remove:"Fjern billede",original:"Original"},video:{video:"Video",videoLink:"Video Link",insert:"Indsæt Video",url:"Video URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)"},link:{link:"Link",insert:"Indsæt link",unlink:"Fjern link",edit:"Rediger",textToDisplay:"Visningstekst",url:"Hvor skal linket pege hen?",openInNewWindow:"Åbn i nyt vindue"},table:{table:"Tabel",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:"Indsæt horisontal linje"},style:{style:"Stil",p:"p",blockquote:"Citat",pre:"Kode",h1:"Overskrift 1",h2:"Overskrift 2",h3:"Overskrift 3",h4:"Overskrift 4",h5:"Overskrift 5",h6:"Overskrift 6"},lists:{unordered:"Punktopstillet liste",ordered:"Nummereret liste"},options:{help:"Hjælp",fullscreen:"Fuld skærm",codeview:"HTML-Visning"},paragraph:{paragraph:"Afsnit",outdent:"Formindsk indryk",indent:"Forøg indryk",left:"Venstrestillet",center:"Centreret",right:"Højrestillet",justify:"Blokjuster"},color:{recent:"Nyligt valgt farve",more:"Flere farver",background:"Baggrund",foreground:"Forgrund",transparent:"Transparent",setTransparent:"Sæt transparent",reset:"Nulstil",resetToDefault:"Gendan standardindstillinger"},shortcut:{shortcuts:"Genveje",close:"Luk",textFormatting:"Tekstformatering",action:"Handling",paragraphFormatting:"Afsnitsformatering",documentStyle:"Dokumentstil",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:"Fortryd",redo:"Annuller fortryd"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\C�Л�!dist/lang/summernote-mn-MN.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"mn-MN":{font:{bold:"Тод",italic:"Налуу",underline:"Доогуур зураас",clear:"Цэвэрлэх",height:"Өндөр",name:"Фонт",superscript:"Дээд илтгэгч",subscript:"Доод илтгэгч",strikethrough:"Дарах",size:"Хэмжээ"},image:{image:"Зураг",insert:"Оруулах",resizeFull:"Хэмжээ бүтэн",resizeHalf:"Хэмжээ 1/2",resizeQuarter:"Хэмжээ 1/4",floatLeft:"Зүүн талд байрлуулах",floatRight:"Баруун талд байрлуулах",floatNone:"Анхдагч байрлалд аваачих",shapeRounded:"Хүрээ: Дугуй",shapeCircle:"Хүрээ: Тойрог",shapeThumbnail:"Хүрээ: Хураангуй",shapeNone:"Хүрээгүй",dragImageHere:"Зургийг энд чирч авчирна уу",dropImage:"Drop image or Text",selectFromFiles:"Файлуудаас сонгоно уу",maximumFileSize:"Файлын дээд хэмжээ",maximumFileSizeError:"Файлын дээд хэмжээ хэтэрсэн",url:"Зургийн URL",remove:"Зургийг устгах",original:"Original"},video:{video:"Видео",videoLink:"Видео холбоос",insert:"Видео оруулах",url:"Видео URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion болон Youku)"},link:{link:"Холбоос",insert:"Холбоос оруулах",unlink:"Холбоос арилгах",edit:"Засварлах",textToDisplay:"Харуулах бичвэр",url:"Энэ холбоос хаашаа очих вэ?",openInNewWindow:"Шинэ цонхонд нээх"},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:"Хэвтээ шугам оруулах"},style:{style:"Хэв маяг",p:"p",blockquote:"Иш татах",pre:"Эх сурвалж",h1:"Гарчиг 1",h2:"Гарчиг 2",h3:"Гарчиг 3",h4:"Гарчиг 4",h5:"Гарчиг 5",h6:"Гарчиг 6"},lists:{unordered:"Эрэмбэлэгдээгүй",ordered:"Эрэмбэлэгдсэн"},options:{help:"Тусламж",fullscreen:"Дэлгэцийг дүүргэх",codeview:"HTML-Code харуулах"},paragraph:{paragraph:"Хэсэг",outdent:"Догол мөр хасах",indent:"Догол мөр нэмэх",left:"Зүүн тийш эгнүүлэх",center:"Төвд эгнүүлэх",right:"Баруун тийш эгнүүлэх",justify:"Мөрийг тэгшлэх"},color:{recent:"Сүүлд хэрэглэсэн өнгө",more:"Өөр өнгөнүүд",background:"Дэвсгэр өнгө",foreground:"Үсгийн өнгө",transparent:"Тунгалаг",setTransparent:"Тунгалаг болгох",reset:"Анхдагч өнгөөр тохируулах",resetToDefault:"Хэвд нь оруулах"},shortcut:{shortcuts:"Богино холбоос",close:"Хаалт",textFormatting:"Бичвэрийг хэлбэржүүлэх",action:"Үйлдэл",paragraphFormatting:"Догол мөрийг хэлбэржүүлэх",documentStyle:"Бичиг баримтын хэв загвар",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:"Буцаах",redo:"Дахин хийх"},specialChar:{specialChar:"Тусгай тэмдэгт",select:"Тусгай тэмдэгт сонгох"}}})}(jQuery);PKf[�\{�A^qqdist/lang/summernote-zh-CN.jsnu�[���(function($) { $.extend($.summernote.lang, { 'zh-CN': { font: { bold: '粗体', italic: '斜体', underline: '下划线', clear: '清除格式', height: '行高', name: '字体', strikethrough: '删除线', subscript: '下标', superscript: '上标', size: '字号' }, image: { image: '图片', insert: '插入图片', resizeFull: '缩放至 100%', resizeHalf: '缩放至 50%', resizeQuarter: '缩放至 25%', floatLeft: '靠左浮动', floatRight: '靠右浮动', floatNone: '取消浮动', shapeRounded: '形状: 圆角', shapeCircle: '形状: 圆', shapeThumbnail: '形状: 缩略图', shapeNone: '形状: 无', dragImageHere: '将图片拖拽至此处', dropImage: 'Drop image or Text', selectFromFiles: '从本地上传', maximumFileSize: '文件大小最大值', maximumFileSizeError: '文件大小超出最大值。', url: '图片地址', remove: '移除图片', original: 'Original' }, video: { video: '视频', videoLink: '视频链接', insert: '插入视频', url: '视频地址', providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)' }, link: { link: '链接', insert: '插入链接', unlink: '去除链接', edit: '编辑链接', textToDisplay: '显示文本', url: '链接地址', openInNewWindow: '在新窗口打开' }, 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: '水平线' }, style: { style: '样式', p: '普通', blockquote: '引用', pre: '代码', h1: '标题 1', h2: '标题 2', h3: '标题 3', h4: '标题 4', h5: '标题 5', h6: '标题 6' }, lists: { unordered: '无序列表', ordered: '有序列表' }, options: { help: '帮助', fullscreen: '全屏', codeview: '源代码' }, paragraph: { paragraph: '段落', outdent: '减少缩进', indent: '增加缩进', left: '左对齐', center: '居中对齐', right: '右对齐', justify: '两端对齐' }, color: { recent: '最近使用', more: '更多', background: '背景', foreground: '前景', transparent: '透明', setTransparent: '透明', reset: '重置', resetToDefault: '默认' }, shortcut: { shortcuts: '快捷键', close: '关闭', textFormatting: '文本格式', action: '动作', paragraphFormatting: '段落格式', documentStyle: '文档样式', extraKeys: '额外按键' }, help: { insertParagraph: '插入段落', undo: '撤销', redo: '重做', tab: '增加缩进', untab: '减少缩进', bold: '粗体', italic: '斜体', underline: '下划线', strikethrough: '删除线', removeFormat: '清除格式', justifyLeft: '左对齐', justifyCenter: '居中对齐', justifyRight: '右对齐', justifyFull: '两端对齐', insertUnorderedList: '无序列表', insertOrderedList: '有序列表', outdent: '减少缩进', indent: '增加缩进', formatPara: '设置选中内容样式为 普通', formatH1: '设置选中内容样式为 标题1', formatH2: '设置选中内容样式为 标题2', formatH3: '设置选中内容样式为 标题3', formatH4: '设置选中内容样式为 标题4', formatH5: '设置选中内容样式为 标题5', formatH6: '设置选中内容样式为 标题6', insertHorizontalRule: '插入水平线', 'linkDialog.show': '显示链接对话框' }, history: { undo: '撤销', redo: '重做' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\���mm!dist/lang/summernote-de-DE.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"de-DE":{font:{bold:"Fett",italic:"Kursiv",underline:"Unterstreichen",clear:"Zurücksetzen",height:"Zeilenhöhe",name:"Schriftart",strikethrough:"Durchgestrichen",subscript:"Tiefgestellt",superscript:"Hochgestellt",size:"Schriftgröße"},image:{image:"Grafik",insert:"Grafik einfügen",resizeFull:"Originalgröße",resizeHalf:"Größe 1/2",resizeQuarter:"Größe 1/4",floatLeft:"Linksbündig",floatRight:"Rechtsbündig",floatNone:"Kein Textfluss",shapeRounded:"Rahmen: Abgerundet",shapeCircle:"Rahmen: Kreisförmig",shapeThumbnail:"Rahmen: Thumbnail",shapeNone:"Kein Rahmen",dragImageHere:"Ziehen Sie ein Bild mit der Maus hierher",dropImage:"Drop image or Text",selectFromFiles:"Wählen Sie eine Datei aus",maximumFileSize:"Maximale Dateigröße",maximumFileSizeError:"Maximale Dateigröße überschritten",url:"Grafik URL",remove:"Grafik entfernen",original:"Original"},video:{video:"Video",videoLink:"Video Link",insert:"Video einfügen",url:"Video URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)"},link:{link:"Link",insert:"Link einfügen",unlink:"Link entfernen",edit:"Editieren",textToDisplay:"Anzeigetext",url:"Ziel des Links?",openInNewWindow:"In einem neuen Fenster öffnen"},table:{table:"Tabelle",addRowAbove:"Zeile oberhalb einfügen",addRowBelow:"Zeile unterhalb einfügen",addColLeft:"Spalte links einfügen",addColRight:"Spalte rechts einfügen",delRow:"Zeile löschen",delCol:"Spalte löschen",delTable:"Tabelle löschen"},hr:{insert:"Eine horizontale Linie einfügen"},style:{style:"Stil",p:"Normal",blockquote:"Zitat",pre:"Quellcode",h1:"Überschrift 1",h2:"Überschrift 2",h3:"Überschrift 3",h4:"Überschrift 4",h5:"Überschrift 5",h6:"Überschrift 6"},lists:{unordered:"Aufzählung",ordered:"Nummerierung"},options:{help:"Hilfe",fullscreen:"Vollbild",codeview:"HTML-Code anzeigen"},paragraph:{paragraph:"Absatz",outdent:"Einzug vergrößern",indent:"Einzug verkleinern",left:"Links ausrichten",center:"Zentriert ausrichten",right:"Rechts ausrichten",justify:"Blocksatz"},color:{recent:"Letzte Farbe",more:"Mehr Farben",background:"Hintergrundfarbe",foreground:"Schriftfarbe",transparent:"Transparenz",setTransparent:"Transparenz setzen",reset:"Zurücksetzen",resetToDefault:"Auf Standard zurücksetzen"},shortcut:{shortcuts:"Tastenkürzel",close:"Schließen",textFormatting:"Textformatierung",action:"Aktion",paragraphFormatting:"Absatzformatierung",documentStyle:"Dokumentenstil"},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:"Rückgängig",redo:"Wiederholen"},specialChar:{specialChar:"SONDERZEICHEN",select:"Sonderzeichen auswählen"}}})}(jQuery);PKf[�\7�%YY!dist/lang/summernote-pt-BR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(a){a.extend(a.summernote.lang,{"pt-BR":{font:{bold:"Negrito",italic:"Itálico",underline:"Sublinhado",clear:"Remover estilo da fonte",height:"Altura da linha",name:"Fonte",strikethrough:"Riscado",subscript:"Subscript",superscript:"Superscript",size:"Tamanho da fonte"},image:{image:"Imagem",insert:"Inserir imagem",resizeFull:"Redimensionar Completamente",resizeHalf:"Redimensionar pela Metade",resizeQuarter:"Redimensionar um Quarto",floatLeft:"Flutuar para Esquerda",floatRight:"Flutuar para Direira",floatNone:"Não Flutuar",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Arraste uma imagem para cá",dropImage:"Drop image or Text",selectFromFiles:"Selecione a partir dos arquivos",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL da imagem",remove:"Remove Image",original:"Original"},video:{video:"Vídeo",videoLink:"Link para vídeo",insert:"Inserir vídeo",url:"URL do vídeo?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)"},link:{link:"Link",insert:"Inserir link",unlink:"Remover link",edit:"Editar",textToDisplay:"Texto para exibir",url:"Para qual URL esse link leva?",openInNewWindow:"Abrir em uma nova janela"},table:{table:"Tabela",addRowAbove:"Adicionar linha acima",addRowBelow:"Adicionar linha abaixo",addColLeft:"Adicionar coluna a esquerda",addColRight:"Adicionar coluna a direita",delRow:"Excluir linha",delCol:"Excluir coluna",delTable:"Delete table"},hr:{insert:"Inserir linha horizontal"},style:{style:"Estilo",normal:"Normal",blockquote:"Citação",pre:"Código",h1:"Título 1",h2:"Título 2",h3:"Título 3",h4:"Título 4",h5:"Título 5",h6:"Título 6"},lists:{unordered:"Lista com marcadores",ordered:"Lista numerada"},options:{help:"Ajuda",fullscreen:"Tela cheia",codeview:"Ver código-fonte"},paragraph:{paragraph:"Parágrafo",outdent:"Menor tabulação",indent:"Maior tabulação",left:"Alinhar à esquerda",center:"Alinhar ao centro",right:"Alinha à direita",justify:"Justificado"},color:{recent:"Cor recente",more:"Mais cores",background:"Fundo",foreground:"Fonte",transparent:"Transparente",setTransparent:"Fundo transparente",reset:"Restaurar",resetToDefault:"Restaurar padrão"},shortcut:{shortcuts:"Atalhos do teclado",close:"Fechar",textFormatting:"Formatação de texto",action:"Ação",paragraphFormatting:"Formatação de parágrafo",documentStyle:"Estilo de documento",extraKeys:"Extra keys"},help:{insertParagraph:"Inserir Parágrafo",undo:"Desfazer o último comando",redo:"Refazer o último comando",tab:"Tab",untab:"Desfazer tab",bold:"Colocar em negrito",italic:"Colocar em itálico",underline:"Sublinhado",strikethrough:"Tachado",removeFormat:"Remover estilo",justifyLeft:"Alinhar à esquerda",justifyCenter:"Centralizar",justifyRight:"Alinhar à esquerda",justifyFull:"Justificar",insertUnorderedList:"Lista não ordenada",insertOrderedList:"Lista ordenada",outdent:"Recuar parágrafo atual",indent:"Avançar parágrafo atual",formatPara:"Alterar formato do bloco para parágrafo(tag P)",formatH1:"Alterar formato do bloco para H1",formatH2:"Alterar formato do bloco para H2",formatH3:"Alterar formato do bloco para H3",formatH4:"Alterar formato do bloco para H4",formatH5:"Alterar formato do bloco para H5",formatH6:"Alterar formato do bloco para H6",insertHorizontalRule:"Inserir régua horizontal","linkDialog.show":"Inserir um Hiperlink"},history:{undo:"Desfazer",redo:"Refazer"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\���1GGdist/lang/summernote-bg-BG.jsnu�[���(function($) { $.extend($.summernote.lang, { 'bg-BG': { font: { bold: 'Удебелен', italic: 'Наклонен', underline: 'Подчертан', clear: 'Изчисти стиловете', height: 'Височина', name: 'Шрифт', strikethrough: 'Задраскано', subscript: 'Долен индекс', superscript: 'Горен индекс', size: 'Размер на шрифта' }, image: { image: 'Изображение', insert: 'Постави картинка', resizeFull: 'Цял размер', resizeHalf: 'Размер на 50%', resizeQuarter: 'Размер на 25%', floatLeft: 'Подравни в ляво', floatRight: 'Подравни в дясно', floatNone: 'Без подравняване', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Пуснете изображението тук', dropImage: 'Drop image or Text', selectFromFiles: 'Изберете файл', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL адрес на изображение', remove: 'Премахни изображение', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Insert Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'Връзка', insert: 'Добави връзка', unlink: 'Премахни връзка', edit: 'Промени', textToDisplay: 'Текст за показване', url: 'URL адрес', openInNewWindow: 'Отвори в нов прозорец' }, 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: 'Добави хоризонтална линия' }, style: { style: 'Стил', p: 'Нормален', blockquote: 'Цитат', pre: 'Код', h1: 'Заглавие 1', h2: 'Заглавие 2', h3: 'Заглавие 3', h4: 'Заглавие 4', h5: 'Заглавие 5', h6: 'Заглавие 6' }, lists: { unordered: 'Символен списък', ordered: 'Цифров списък' }, options: { help: 'Помощ', fullscreen: 'На цял екран', codeview: 'Преглед на код' }, paragraph: { paragraph: 'Параграф', outdent: 'Намаляване на отстъпа', indent: 'Абзац', left: 'Подравняване в ляво', center: 'Център', right: 'Подравняване в дясно', justify: 'Разтягане по ширина' }, color: { recent: 'Последния избран цвят', more: 'Още цветове', background: 'Цвят на фона', foreground: 'Цвят на шрифта', transparent: 'Прозрачен', setTransparent: 'Направете прозрачен', reset: 'Възстанови', resetToDefault: 'Възстанови оригиналните' }, shortcut: { shortcuts: 'Клавишни комбинации', close: 'Затвори', textFormatting: 'Форматиране на текста', action: 'Действие', paragraphFormatting: 'Форматиране на параграф', documentStyle: 'Стил на документа', 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: 'Назад', redo: 'Напред' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�"r�OOdist/lang/summernote-sk-SK.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sk-SK': { font: { bold: 'Tučné', italic: 'Kurzíva', underline: 'Podčiarknutie', clear: 'Odstrániť štýl písma', height: 'Výška riadku', strikethrough: 'Prečiarknuté', subscript: 'Subscript', superscript: 'Superscript', size: 'Veľkosť písma' }, image: { image: 'Obrázok', insert: 'Vložiť obrázok', resizeFull: 'Pôvodná veľkosť', resizeHalf: 'Polovičná veľkosť', resizeQuarter: 'Štvrtinová veľkosť', floatLeft: 'Umiestniť doľava', floatRight: 'Umiestniť doprava', floatNone: 'Bez zarovnania', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Pretiahnuť sem obrázok', dropImage: 'Drop image or Text', selectFromFiles: 'Vybrať súbor', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL obrázku', remove: 'Remove Image', original: 'Original' }, video: { video: 'Video', videoLink: 'Odkaz videa', insert: 'Vložiť video', url: 'URL videa?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)' }, link: { link: 'Odkaz', insert: 'Vytvoriť odkaz', unlink: 'Zrušiť odkaz', edit: 'Upraviť', textToDisplay: 'Zobrazovaný text', url: 'Na akú URL adresu má tento odkaz viesť?', openInNewWindow: 'Otvoriť v novom okne' }, table: { table: 'Tabuľka', 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: 'Vložit vodorovnú čiaru' }, style: { style: 'Štýl', p: 'Normálny', blockquote: 'Citácia', pre: 'Kód', h1: 'Nadpis 1', h2: 'Nadpis 2', h3: 'Nadpis 3', h4: 'Nadpis 4', h5: 'Nadpis 5', h6: 'Nadpis 6' }, lists: { unordered: 'Odrážkový zoznam', ordered: 'Číselný zoznam' }, options: { help: 'Pomoc', fullscreen: 'Celá obrazovka', codeview: 'HTML kód' }, paragraph: { paragraph: 'Odsek', outdent: 'Zväčšiť odsadenie', indent: 'Zmenšiť odsadenie', left: 'Zarovnať doľava', center: 'Zarovnať na stred', right: 'Zarovnať doprava', justify: 'Zarovnať obojstranne' }, color: { recent: 'Aktuálna farba', more: 'Dalšie farby', background: 'Farba pozadia', foreground: 'Farba písma', transparent: 'Priehľadnosť', setTransparent: 'Nastaviť priehľadnosť', reset: 'Obnoviť', resetToDefault: 'Obnoviť prednastavené' }, shortcut: { shortcuts: 'Klávesové skratky', close: 'Zavrieť', textFormatting: 'Formátovanie textu', action: 'Akcia', paragraphFormatting: 'Formátovanie odseku', documentStyle: 'Štýl dokumentu' }, 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: 'Krok vzad', redo: 'Krok dopredu' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\z ޚ��!dist/lang/summernote-fr-FR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"fr-FR":{font:{bold:"Gras",italic:"Italique",underline:"Souligné",clear:"Effacer la mise en forme",height:"Interligne",name:"Famille de police",strikethrough:"Barré",superscript:"Exposant",subscript:"Indice",size:"Taille de police"},image:{image:"Image",insert:"Insérer une image",resizeFull:"Taille originale",resizeHalf:"Redimensionner à 50 %",resizeQuarter:"Redimensionner à 25 %",floatLeft:"Aligné à gauche",floatRight:"Aligné à droite",floatNone:"Pas d'alignement",shapeRounded:"Forme: Rectangle arrondie",shapeCircle:"Forme: Cercle",shapeThumbnail:"Forme: Vignette",shapeNone:"Forme: Aucune",dragImageHere:"Faites glisser une image ou un texte dans ce cadre",dropImage:"Lachez l'image ou le texte",selectFromFiles:"Choisir un fichier",maximumFileSize:"Taille de fichier maximale",maximumFileSizeError:"Taille maximale du fichier dépassée",url:"URL de l'image",remove:"Supprimer l'image",original:"Original"},video:{video:"Vidéo",videoLink:"Lien vidéo",insert:"Insérer une vidéo",url:"URL de la vidéo",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)"},link:{link:"Lien",insert:"Insérer un lien",unlink:"Supprimer un lien",edit:"Modifier",textToDisplay:"Texte à afficher",url:"URL du lien",openInNewWindow:"Ouvrir dans une nouvelle fenêtre"},table:{table:"Tableau",addRowAbove:"Ajouter une ligne au-dessus",addRowBelow:"Ajouter une ligne en dessous",addColLeft:"Ajouter une colonne à gauche",addColRight:"Ajouter une colonne à droite",delRow:"Supprimer la ligne",delCol:"Supprimer la colonne",delTable:"Supprimer le tableau"},hr:{insert:"Insérer une ligne horizontale"},style:{style:"Style",p:"Normal",blockquote:"Citation",pre:"Code source",h1:"Titre 1",h2:"Titre 2",h3:"Titre 3",h4:"Titre 4",h5:"Titre 5",h6:"Titre 6"},lists:{unordered:"Liste à puces",ordered:"Liste numérotée"},options:{help:"Aide",fullscreen:"Plein écran",codeview:"Afficher le code HTML"},paragraph:{paragraph:"Paragraphe",outdent:"Diminuer le retrait",indent:"Augmenter le retrait",left:"Aligner à gauche",center:"Centrer",right:"Aligner à droite",justify:"Justifier"},color:{recent:"Dernière couleur sélectionnée",more:"Plus de couleurs",background:"Couleur de fond",foreground:"Couleur de police",transparent:"Transparent",setTransparent:"Définir la transparence",reset:"Restaurer",resetToDefault:"Restaurer la couleur par défaut"},shortcut:{shortcuts:"Raccourcis",close:"Fermer",textFormatting:"Mise en forme du texte",action:"Action",paragraphFormatting:"Mise en forme des paragraphes",documentStyle:"Style du document",extraKeys:"Touches supplémentaires"},help:{insertParagraph:"Insérer paragraphe",undo:"Défaire la dernière commande",redo:"Refaire la dernière commande",tab:"Tabulation",untab:"Tabulation arrière",bold:"Mettre en caractère gras",italic:"Mettre en italique",underline:"Mettre en souligné",strikethrough:"Mettre en texte barré",removeFormat:"Nettoyer les styles",justifyLeft:"Aligner à gauche",justifyCenter:"Centrer",justifyRight:"Aligner à droite",justifyFull:"Justifier à gauche et à droite",insertUnorderedList:"Basculer liste à puces",insertOrderedList:"Basculer liste ordonnée",outdent:"Diminuer le retrait du paragraphe",indent:"Augmenter le retrait du paragraphe",formatPara:"Changer le paragraphe en cours en normal (P)",formatH1:"Changer le paragraphe en cours en entête H1",formatH2:"Changer le paragraphe en cours en entête H2",formatH3:"Changer le paragraphe en cours en entête H3",formatH4:"Changer le paragraphe en cours en entête H4",formatH5:"Changer le paragraphe en cours en entête H5",formatH6:"Changer le paragraphe en cours en entête H6",insertHorizontalRule:"Insérer séparation horizontale","linkDialog.show":"Afficher fenêtre d'hyperlien"},history:{undo:"Annuler la dernière action",redo:"Restaurer la dernière action annulée"},specialChar:{specialChar:"CARACTÈRES SPÉCIAUX",select:"Choisir des caractères spéciaux"}}})}(jQuery);PKf[�\T!�^��!dist/lang/summernote-it-IT.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"it-IT":{font:{bold:"Testo in grassetto",italic:"Testo in corsivo",underline:"Testo sottolineato",clear:"Elimina la formattazione del testo",height:"Altezza della linea di testo",name:"Famiglia Font",strikethrough:"Testo barrato",subscript:"Subscript",superscript:"Superscript",size:"Dimensione del carattere"},image:{image:"Immagine",insert:"Inserisci Immagine",resizeFull:"Dimensioni originali",resizeHalf:"Ridimensiona al 50%",resizeQuarter:"Ridimensiona al 25%",floatLeft:"Posiziona a sinistra",floatRight:"Posiziona a destra",floatNone:"Nessun posizionamento",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Trascina qui un'immagine",dropImage:"Drop image or Text",selectFromFiles:"Scegli dai Documenti",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL dell'immagine",remove:"Rimuovi immagine",original:"Original"},video:{video:"Video",videoLink:"Collegamento ad un Video",insert:"Inserisci Video",url:"URL del Video",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)"},link:{link:"Collegamento",insert:"Inserisci Collegamento",unlink:"Elimina collegamento",edit:"Modifica collegamento",textToDisplay:"Testo del collegamento",url:"URL del collegamento",openInNewWindow:"Apri in una nuova finestra"},table:{table:"Tabella",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:"Inserisce una linea di separazione"},style:{style:"Stili",p:"pe",blockquote:"Citazione",pre:"Codice",h1:"Titolo 1",h2:"Titolo 2",h3:"Titolo 3",h4:"Titolo 4",h5:"Titolo 5",h6:"Titolo 6"},lists:{unordered:"Elenco non ordinato",ordered:"Elenco ordinato"},options:{help:"Aiuto",fullscreen:"Modalità a tutto schermo",codeview:"Visualizza codice"},paragraph:{paragraph:"Paragrafo",outdent:"Diminuisce il livello di rientro",indent:"Aumenta il livello di rientro",left:"Allinea a sinistra",center:"Centra",right:"Allinea a destra",justify:"Giustifica (allinea a destra e sinistra)"},color:{recent:"Ultimo colore utilizzato",more:"Altri colori",background:"Colore di sfondo",foreground:"Colore",transparent:"Trasparente",setTransparent:"Trasparente",reset:"Reimposta",resetToDefault:"Reimposta i colori"},shortcut:{shortcuts:"Scorciatoie da tastiera",close:"Chiudi",textFormatting:"Formattazione testo",action:"Azioni",paragraphFormatting:"Formattazione paragrafo",documentStyle:"Stili",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:"Annulla",redo:"Ripristina"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\��&k k !dist/lang/summernote-ja-JP.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ja-JP":{font:{bold:"太字",italic:"斜体",underline:"下線",clear:"クリア",height:"文字高",name:"フォント",strikethrough:"取り消し線",subscript:"Subscript",superscript:"Superscript",size:"大きさ"},image:{image:"画像",insert:"画像挿入",resizeFull:"最大化",resizeHalf:"1/2",resizeQuarter:"1/4",floatLeft:"左寄せ",floatRight:"右寄せ",floatNone:"寄せ解除",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"ここに画像をドラッグしてください",dropImage:"Drop image or Text",selectFromFiles:"画像ファイルを選ぶ",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URLから画像を挿入する",remove:"画像を削除する",original:"Original"},video:{video:"動画",videoLink:"動画リンク",insert:"動画挿入",url:"動画のURL",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)"},link:{link:"リンク",insert:"リンク挿入",unlink:"リンク解除",edit:"編集",textToDisplay:"リンク文字列",url:"URLを入力してください",openInNewWindow:"新しいウィンドウで開く"},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:"水平線の挿入"},style:{style:"スタイル",p:"標準",blockquote:"引用",pre:"コード",h1:"見出し1",h2:"見出し2",h3:"見出し3",h4:"見出し4",h5:"見出し5",h6:"見出し6"},lists:{unordered:"通常リスト",ordered:"番号リスト"},options:{help:"ヘルプ",fullscreen:"フルスクリーン",codeview:"コード表示"},paragraph:{paragraph:"文章",outdent:"字上げ",indent:"字下げ",left:"左寄せ",center:"中央寄せ",right:"右寄せ",justify:"均等割付"},color:{recent:"現在の色",more:"もっと見る",background:"背景色",foreground:"文字色",transparent:"透明",setTransparent:"透明にする",reset:"標準",resetToDefault:"標準に戻す"},shortcut:{shortcuts:"ショートカット",close:"閉じる",textFormatting:"文字フォーマット",action:"アクション",paragraphFormatting:"文章フォーマット",documentStyle:"ドキュメント形式",extraKeys:"Extra keys"},help:{insertParagraph:"改行挿入",undo:"一旦、行った操作を戻す",redo:"最後のコマンドをやり直す",tab:"Tab",untab:"タブ戻し",bold:"太文字",italic:"斜体",underline:"下線",strikethrough:"取り消し線",removeFormat:"装飾を戻す",justifyLeft:"左寄せ",justifyCenter:"真ん中寄せ",justifyRight:"右寄せ",justifyFull:"すべてを整列",insertUnorderedList:"行頭に●を挿入",insertOrderedList:"行頭に番号を挿入",outdent:"字下げを戻す(アウトデント)",indent:"字下げする(インデント)",formatPara:"段落(P tag)指定",formatH1:"H1指定",formatH2:"H2指定",formatH3:"H3指定",formatH4:"H4指定",formatH5:"H5指定",formatH6:"H6指定",insertHorizontalRule:"<hr />を挿入","linkDialog.show":"リンク挿入"},history:{undo:"元に戻す",redo:"やり直す"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\rI=�!dist/lang/summernote-nl-NL.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"nl-NL":{font:{bold:"Vet",italic:"Cursief",underline:"Onderstrepen",clear:"Stijl verwijderen",height:"Regelhoogte",name:"Lettertype",strikethrough:"Doorhalen",subscript:"Subscript",superscript:"Superscript",size:"Tekstgrootte"},image:{image:"Afbeelding",insert:"Afbeelding invoegen",resizeFull:"Volledige breedte",resizeHalf:"Halve breedte",resizeQuarter:"Kwart breedte",floatLeft:"Links uitlijnen",floatRight:"Rechts uitlijnen",floatNone:"Geen uitlijning",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Sleep hier een afbeelding naar toe",dropImage:"Drop image or Text",selectFromFiles:"Selecteer een bestand",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL van de afbeelding",remove:"Verwijder afbeelding",original:"Original"},video:{video:"Video",videoLink:"Video link",insert:"Video invoegen",url:"URL van de video",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)"},link:{link:"Link",insert:"Link invoegen",unlink:"Link verwijderen",edit:"Wijzigen",textToDisplay:"Tekst van link",url:"Naar welke URL moet deze link verwijzen?",openInNewWindow:"Open in nieuw venster"},table:{table:"Tabel",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:"Horizontale lijn invoegen"},style:{style:"Stijl",p:"Normaal",blockquote:"Quote",pre:"Code",h1:"Kop 1",h2:"Kop 2",h3:"Kop 3",h4:"Kop 4",h5:"Kop 5",h6:"Kop 6"},lists:{unordered:"Ongeordende lijst",ordered:"Geordende lijst"},options:{help:"Help",fullscreen:"Volledig scherm",codeview:"Bekijk Code"},paragraph:{paragraph:"Paragraaf",outdent:"Inspringen verkleinen",indent:"Inspringen vergroten",left:"Links uitlijnen",center:"Centreren",right:"Rechts uitlijnen",justify:"Uitvullen"},color:{recent:"Recente kleur",more:"Meer kleuren",background:"Achtergrond kleur",foreground:"Tekst kleur",transparent:"Transparant",setTransparent:"Transparant",reset:"Standaard",resetToDefault:"Standaard kleur"},shortcut:{shortcuts:"Toetsencombinaties",close:"sluiten",textFormatting:"Tekststijlen",action:"Acties",paragraphFormatting:"Paragraafstijlen",documentStyle:"Documentstijlen",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:"Ongedaan maken",redo:"Opnieuw doorvoeren"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\q��2��!dist/lang/summernote-sr-RS.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"sr-RS":{font:{bold:"Подебљано",italic:"Курзив",underline:"Подвучено",clear:"Уклони стилове фонта",height:"Висина линије",name:"Font Family",strikethrough:"Прецртано",subscript:"Subscript",superscript:"Superscript",size:"Величина фонта"},image:{image:"Слика",insert:"Уметни слику",resizeFull:"Пуна величина",resizeHalf:"Умањи на 50%",resizeQuarter:"Умањи на 25%",floatLeft:"Уз леву ивицу",floatRight:"Уз десну ивицу",floatNone:"Без равнања",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Превуци слику овде",dropImage:"Drop image or Text",selectFromFiles:"Изабери из датотеке",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Адреса слике",remove:"Уклони слику",original:"Original"},video:{video:"Видео",videoLink:"Веза ка видеу",insert:"Уметни видео",url:"URL видео",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)"},link:{link:"Веза",insert:"Уметни везу",unlink:"Уклони везу",edit:"Уреди",textToDisplay:"Текст за приказ",url:"Интернет адреса",openInNewWindow:"Отвори у новом прозору"},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:"Уметни хоризонталну линију"},style:{style:"Стил",p:"Нормални",blockquote:"Цитат",pre:"Код",h1:"Заглавље 1",h2:"Заглавље 2",h3:"Заглавље 3",h4:"Заглавље 4",h5:"Заглавље 5",h6:"Заглавље 6"},lists:{unordered:"Обична листа",ordered:"Нумерисана листа"},options:{help:"Помоћ",fullscreen:"Преко целог екрана",codeview:"Изворни код"},paragraph:{paragraph:"Параграф",outdent:"Смањи увлачење",indent:"Повечај увлачење",left:"Поравнај у лево",center:"Центрирано",right:"Поравнај у десно",justify:"Поравнај обострано"},color:{recent:"Последња боја",more:"Више боја",background:"Боја позадине",foreground:"Боја текста",transparent:"Провидна",setTransparent:"Провидна",reset:"Опозив",resetToDefault:"Подразумевана"},shortcut:{shortcuts:"Пречице са тастатуре",close:"Затвори",textFormatting:"Форматирање текста",action:"Акција",paragraphFormatting:"Форматирање параграфа",documentStyle:"Стил документа",extraKeys:"Додатне комбинације"},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:"Поништи",redo:"Понови"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\Dǚ�II!dist/lang/summernote-es-EU.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"es-EU":{font:{bold:"Lodia",italic:"Etzana",underline:"Azpimarratua",clear:"Estiloa kendu",height:"Lerro altuera",name:"Tipografia",strikethrough:"Marratua",subscript:"Subscript",superscript:"Superscript",size:"Letren neurria"},image:{image:"Irudia",insert:"Irudi bat txertatu",resizeFull:"Jatorrizko neurrira aldatu",resizeHalf:"Neurria erdira aldatu",resizeQuarter:"Neurria laurdenera aldatu",floatLeft:"Ezkerrean kokatu",floatRight:"Eskuinean kokatu",floatNone:"Kokapenik ez ezarri",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Irudi bat ezarri hemen",dropImage:"Drop image or Text",selectFromFiles:"Zure fitxategi bat aukeratu",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Irudiaren URL helbidea",remove:"Remove Image",original:"Original"},video:{video:"Bideoa",videoLink:"Bideorako esteka",insert:"Bideo berri bat txertatu",url:"Bideoaren URL helbidea",providers:"(YouTube, Vimeo, Vine, Instagram edo DailyMotion)"},link:{link:"Esteka",insert:"Esteka bat txertatu",unlink:"Esteka ezabatu",edit:"Editatu",textToDisplay:"Estekaren testua",url:"Estekaren URL helbidea",openInNewWindow:"Leiho berri batean ireki"},table:{table:"Taula",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:"Marra horizontala txertatu"},style:{style:"Estiloa",p:"p",blockquote:"Aipamena",pre:"Kodea",h1:"1. izenburua",h2:"2. izenburua",h3:"3. izenburua",h4:"4. izenburua",h5:"5. izenburua",h6:"6. izenburua"},lists:{unordered:"Ordenatu gabeko zerrenda",ordered:"Zerrenda ordenatua"},options:{help:"Laguntza",fullscreen:"Pantaila osoa",codeview:"Kodea ikusi"},paragraph:{paragraph:"Paragrafoa",outdent:"Koska txikiagoa",indent:"Koska handiagoa",left:"Ezkerrean kokatu",center:"Erdian kokatu",right:"Eskuinean kokatu",justify:"Justifikatu"},color:{recent:"Azken kolorea",more:"Kolore gehiago",background:"Atzeko planoa",foreground:"Aurreko planoa",transparent:"Gardena",setTransparent:"Gardendu",reset:"Lehengoratu",resetToDefault:"Berrezarri lehenetsia"},shortcut:{shortcuts:"Lasterbideak",close:"Itxi",textFormatting:"Testuaren formatua",action:"Ekintza",paragraphFormatting:"Paragrafoaren formatua",documentStyle:"Dokumentuaren estiloa"},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:"Desegin",redo:"Berregin"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\���e44dist/lang/summernote-nl-NL.jsnu�[���(function($) { $.extend($.summernote.lang, { 'nl-NL': { font: { bold: 'Vet', italic: 'Cursief', underline: 'Onderstrepen', clear: 'Stijl verwijderen', height: 'Regelhoogte', name: 'Lettertype', strikethrough: 'Doorhalen', subscript: 'Subscript', superscript: 'Superscript', size: 'Tekstgrootte' }, image: { image: 'Afbeelding', insert: 'Afbeelding invoegen', resizeFull: 'Volledige breedte', resizeHalf: 'Halve breedte', resizeQuarter: 'Kwart breedte', floatLeft: 'Links uitlijnen', floatRight: 'Rechts uitlijnen', floatNone: 'Geen uitlijning', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Sleep hier een afbeelding naar toe', dropImage: 'Drop image or Text', selectFromFiles: 'Selecteer een bestand', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL van de afbeelding', remove: 'Verwijder afbeelding', original: 'Original' }, video: { video: 'Video', videoLink: 'Video link', insert: 'Video invoegen', url: 'URL van de video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)' }, link: { link: 'Link', insert: 'Link invoegen', unlink: 'Link verwijderen', edit: 'Wijzigen', textToDisplay: 'Tekst van link', url: 'Naar welke URL moet deze link verwijzen?', openInNewWindow: 'Open in nieuw venster' }, table: { table: 'Tabel', 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: 'Horizontale lijn invoegen' }, style: { style: 'Stijl', p: 'Normaal', blockquote: 'Quote', pre: 'Code', h1: 'Kop 1', h2: 'Kop 2', h3: 'Kop 3', h4: 'Kop 4', h5: 'Kop 5', h6: 'Kop 6' }, lists: { unordered: 'Ongeordende lijst', ordered: 'Geordende lijst' }, options: { help: 'Help', fullscreen: 'Volledig scherm', codeview: 'Bekijk Code' }, paragraph: { paragraph: 'Paragraaf', outdent: 'Inspringen verkleinen', indent: 'Inspringen vergroten', left: 'Links uitlijnen', center: 'Centreren', right: 'Rechts uitlijnen', justify: 'Uitvullen' }, color: { recent: 'Recente kleur', more: 'Meer kleuren', background: 'Achtergrond kleur', foreground: 'Tekst kleur', transparent: 'Transparant', setTransparent: 'Transparant', reset: 'Standaard', resetToDefault: 'Standaard kleur' }, shortcut: { shortcuts: 'Toetsencombinaties', close: 'sluiten', textFormatting: 'Tekststijlen', action: 'Acties', paragraphFormatting: 'Paragraafstijlen', documentStyle: 'Documentstijlen', 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: 'Ongedaan maken', redo: 'Opnieuw doorvoeren' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\W9�Z//!dist/lang/summernote-fa-IR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"fa-IR":{font:{bold:"درشت",italic:"خمیده",underline:"میان خط",clear:"پاک کردن فرمت فونت",height:"فاصله ی خطی",name:"اسم فونت",strikethrough:"Strike",subscript:"Subscript",superscript:"Superscript",size:"اندازه ی فونت"},image:{image:"تصویر",insert:"وارد کردن تصویر",resizeFull:"تغییر به اندازه ی کامل",resizeHalf:"تغییر به اندازه نصف",resizeQuarter:"تغییر به اندازه یک چهارم",floatLeft:"چسباندن به چپ",floatRight:"چسباندن به راست",floatNone:"بدون چسبندگی",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"یک تصویر را اینجا بکشید",dropImage:"Drop image or Text",selectFromFiles:"فایل ها را انتخاب کنید",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"آدرس تصویر",remove:"حذف تصویر",original:"Original"},video:{video:"ویدیو",videoLink:"لینک ویدیو",insert:"افزودن ویدیو",url:"آدرس ویدیو ؟",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)"},link:{link:"لینک",insert:"اضافه کردن لینک",unlink:"حذف لینک",edit:"ویرایش",textToDisplay:"متن جهت نمایش",url:"این لینک به چه آدرسی باید برود ؟",openInNewWindow:"در یک پنجره ی جدید باز شود"},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:"افزودن خط افقی"},style:{style:"استیل",p:"نرمال",blockquote:"نقل قول",pre:"کد",h1:"سرتیتر 1",h2:"سرتیتر 2",h3:"سرتیتر 3",h4:"سرتیتر 4",h5:"سرتیتر 5",h6:"سرتیتر 6"},lists:{unordered:"لیست غیر ترتیبی",ordered:"لیست ترتیبی"},options:{help:"راهنما",fullscreen:"نمایش تمام صفحه",codeview:"مشاهده ی کد"},paragraph:{paragraph:"پاراگراف",outdent:"کاهش تو رفتگی",indent:"افزایش تو رفتگی",left:"چپ چین",center:"میان چین",right:"راست چین",justify:"بلوک چین"},color:{recent:"رنگ اخیرا استفاده شده",more:"رنگ بیشتر",background:"رنگ پس زمینه",foreground:"رنگ متن",transparent:"بی رنگ",setTransparent:"تنظیم حالت بی رنگ",reset:"بازنشاندن",resetToDefault:"حالت پیش فرض"},shortcut:{shortcuts:"دکمه های میان بر",close:"بستن",textFormatting:"فرمت متن",action:"عملیات",paragraphFormatting:"فرمت پاراگراف",documentStyle:"استیل سند",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:"واچیدن",redo:"بازچیدن"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\r A�� � !dist/lang/summernote-nb-NO.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"nb-NO":{font:{bold:"Fet",italic:"Kursiv",underline:"Understrek",clear:"Fjern formatering",height:"Linjehøyde",name:"Skrifttype",strikethrough:"Gjennomstrek",subscript:"Subscript",superscript:"Superscript",size:"Skriftstørrelse"},image:{image:"Bilde",insert:"Sett inn bilde",resizeFull:"Sett full størrelse",resizeHalf:"Sett halv størrelse",resizeQuarter:"Sett kvart størrelse",floatLeft:"Flyt til venstre",floatRight:"Flyt til høyre",floatNone:"Fjern flyt",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Dra et bilde hit",dropImage:"Drop image or Text",selectFromFiles:"Velg fra filer",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Bilde-URL",remove:"Fjern bilde",original:"Original"},video:{video:"Video",videoLink:"Videolenke",insert:"Sett inn video",url:"Video-URL",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)"},link:{link:"Lenke",insert:"Sett inn lenke",unlink:"Fjern lenke",edit:"Rediger",textToDisplay:"Visningstekst",url:"Til hvilken URL skal denne lenken peke?",openInNewWindow:"Åpne i nytt vindu"},table:{table:"Tabell",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:"Sett inn horisontal linje"},style:{style:"Stil",p:"p",blockquote:"Sitat",pre:"Kode",h1:"Overskrift 1",h2:"Overskrift 2",h3:"Overskrift 3",h4:"Overskrift 4",h5:"Overskrift 5",h6:"Overskrift 6"},lists:{unordered:"Punktliste",ordered:"Nummerert liste"},options:{help:"Hjelp",fullscreen:"Fullskjerm",codeview:"HTML-visning"},paragraph:{paragraph:"Avsnitt",outdent:"Tilbakerykk",indent:"Innrykk",left:"Venstrejustert",center:"Midtstilt",right:"Høyrejustert",justify:"Blokkjustert"},color:{recent:"Nylig valgt farge",more:"Flere farger",background:"Bakgrunnsfarge",foreground:"Skriftfarge",transparent:"Gjennomsiktig",setTransparent:"Sett gjennomsiktig",reset:"Nullstill",resetToDefault:"Nullstill til standard"},shortcut:{shortcuts:"Hurtigtaster",close:"Lukk",textFormatting:"Tekstformatering",action:"Handling",paragraphFormatting:"Avsnittsformatering",documentStyle:"Dokumentstil"},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:"Angre",redo:"Gjør om"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�~J<� � !dist/lang/summernote-fi-FI.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"fi-FI":{font:{bold:"Lihavoitu",italic:"Kursiivi",underline:"Alleviivaa",clear:"Tyhjennä muotoilu",height:"Riviväli",name:"Kirjasintyyppi",strikethrough:"Yliviivaus",subscript:"Subscript",superscript:"Superscript",size:"Kirjasinkoko"},image:{image:"Kuva",insert:"Lisää kuva",resizeFull:"Koko leveys",resizeHalf:"Puolikas leveys",resizeQuarter:"Neljäsosa leveys",floatLeft:"Sijoita vasemmalle",floatRight:"Sijoita oikealle",floatNone:"Ei sijoitusta",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Vedä kuva tähän",selectFromFiles:"Valitse tiedostoista",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL-osoitteen mukaan",remove:"Poista kuva",original:"Original"},video:{video:"Video",videoLink:"Linkki videoon",insert:"Lisää video",url:"Videon URL-osoite?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)"},link:{link:"Linkki",insert:"Lisää linkki",unlink:"Poista linkki",edit:"Muokkaa",textToDisplay:"Näytettävä teksti",url:"Linkin URL-osoite?",openInNewWindow:"Avaa uudessa ikkunassa"},table:{table:"Taulukko",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:"Lisää vaakaviiva"},style:{style:"Tyyli",p:"Normaali",blockquote:"Lainaus",pre:"Koodi",h1:"Otsikko 1",h2:"Otsikko 2",h3:"Otsikko 3",h4:"Otsikko 4",h5:"Otsikko 5",h6:"Otsikko 6"},lists:{unordered:"Luettelomerkitty luettelo",ordered:"Numeroitu luettelo"},options:{help:"Ohje",fullscreen:"Koko näyttö",codeview:"HTML-näkymä"},paragraph:{paragraph:"Kappale",outdent:"Pienennä sisennystä",indent:"Suurenna sisennystä",left:"Tasaus vasemmalle",center:"Keskitä",right:"Tasaus oikealle",justify:"Tasaa"},color:{recent:"Viimeisin väri",more:"Lisää värejä",background:"Taustaväri",foreground:"Tekstin väri",transparent:"Läpinäkyvä",setTransparent:"Aseta läpinäkyväksi",reset:"Palauta",resetToDefault:"Palauta oletusarvoksi"},shortcut:{shortcuts:"Pikanäppäimet",close:"Sulje",textFormatting:"Tekstin muotoilu",action:"Toiminto",paragraphFormatting:"Kappaleen muotoilu",documentStyle:"Asiakirjan tyyli"},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:"Kumoa",redo:"Toista"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\I��| | !dist/lang/summernote-id-ID.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(a){a.extend(a.summernote.lang,{"id-ID":{font:{bold:"Tebal",italic:"Miring",underline:"Garis bawah",clear:"Bersihkan gaya",height:"Jarak baris",name:"Font Family",strikethrough:"Coret",subscript:"Subscript",superscript:"Superscript",size:"Ukuran font"},image:{image:"Gambar",insert:"Sisipkan gambar",resizeFull:"Ukuran penuh",resizeHalf:"Ukuran 50%",resizeQuarter:"Ukuran 25%",floatLeft:"Rata kiri",floatRight:"Rata kanan",floatNone:"Tidak ada perataan",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Tarik gambar pada area ini",dropImage:"Drop image or Text",selectFromFiles:"Pilih gambar dari berkas",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL gambar",remove:"Hapus Gambar",original:"Original"},video:{video:"Video",videoLink:"Link video",insert:"Sisipkan video",url:"Tautan video",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)"},link:{link:"Tautan",insert:"Tambah tautan",unlink:"Hapus tautan",edit:"Edit",textToDisplay:"Tampilan teks",url:"Tautan tujuan",openInNewWindow:"Buka di jendela baru"},table:{table:"Tabel",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:"Masukkan garis horizontal"},style:{style:"Gaya",p:"p",blockquote:"Kutipan",pre:"Kode",h1:"Heading 1",h2:"Heading 2",h3:"Heading 3",h4:"Heading 4",h5:"Heading 5",h6:"Heading 6"},lists:{unordered:"Pencacahan",ordered:"Penomoran"},options:{help:"Bantuan",fullscreen:"Layar penuh",codeview:"Kode HTML"},paragraph:{paragraph:"Paragraf",outdent:"Outdent",indent:"Indent",left:"Rata kiri",center:"Rata tengah",right:"Rata kanan",justify:"Rata kanan kiri"},color:{recent:"Warna sekarang",more:"Selengkapnya",background:"Warna latar",foreground:"Warna font",transparent:"Transparan",setTransparent:"Atur transparansi",reset:"Atur ulang",resetToDefault:"Kembalikan kesemula"},shortcut:{shortcuts:"Jalan pintas",close:"Keluar",textFormatting:"Format teks",action:"Aksi",paragraphFormatting:"Format paragraf",documentStyle:"Gaya dokumen",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:"Kembali",redo:"Ulang"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�N� � !dist/lang/summernote-hr-HR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"hr-HR":{font:{bold:"Podebljano",italic:"Kurziv",underline:"Podvučeno",clear:"Ukloni stilove fonta",height:"Visina linije",name:"Font Family",strikethrough:"Precrtano",subscript:"Subscript",superscript:"Superscript",size:"Veličina fonta"},image:{image:"Slika",insert:"Ubaci sliku",resizeFull:"Puna veličina",resizeHalf:"Umanji na 50%",resizeQuarter:"Umanji na 25%",floatLeft:"Poravnaj lijevo",floatRight:"Poravnaj desno",floatNone:"Bez poravnanja",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Povuci sliku ovdje",dropImage:"Drop image or Text",selectFromFiles:"Izaberi iz datoteke",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Adresa slike",remove:"Ukloni sliku",original:"Original"},video:{video:"Video",videoLink:"Veza na video",insert:"Ubaci video",url:"URL video",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)"},link:{link:"Veza",insert:"Ubaci vezu",unlink:"Ukloni vezu",edit:"Uredi",textToDisplay:"Tekst za prikaz",url:"Internet adresa",openInNewWindow:"Otvori u novom prozoru"},table:{table:"Tablica",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:"Ubaci horizontalnu liniju"},style:{style:"Stil",p:"pni",blockquote:"Citat",pre:"Kôd",h1:"Naslov 1",h2:"Naslov 2",h3:"Naslov 3",h4:"Naslov 4",h5:"Naslov 5",h6:"Naslov 6"},lists:{unordered:"Obična lista",ordered:"Numerirana lista"},options:{help:"Pomoć",fullscreen:"Preko cijelog ekrana",codeview:"Izvorni kôd"},paragraph:{paragraph:"Paragraf",outdent:"Smanji uvlačenje",indent:"Povećaj uvlačenje",left:"Poravnaj lijevo",center:"Centrirano",right:"Poravnaj desno",justify:"Poravnaj obostrano"},color:{recent:"Posljednja boja",more:"Više boja",background:"Boja pozadine",foreground:"Boja teksta",transparent:"Prozirna",setTransparent:"Prozirna",reset:"Poništi",resetToDefault:"Podrazumijevana"},shortcut:{shortcuts:"Prečice s tipkovnice",close:"Zatvori",textFormatting:"Formatiranje teksta",action:"Akcija",paragraphFormatting:"Formatiranje paragrafa",documentStyle:"Stil dokumenta",extraKeys:"Dodatne kombinacije"},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:"Poništi",redo:"Ponovi"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\J�а � !dist/lang/summernote-vi-VN.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"vi-VN":{font:{bold:"In Đậm",italic:"In Nghiêng",underline:"Gạch dưới",clear:"Bỏ định dạng",height:"Chiều cao dòng",name:"Phông chữ",strikethrough:"Gạch ngang",subscript:"Subscript",superscript:"Superscript",size:"Cỡ chữ"},image:{image:"Hình ảnh",insert:"Chèn",resizeFull:"100%",resizeHalf:"50%",resizeQuarter:"25%",floatLeft:"Trôi về trái",floatRight:"Trôi về phải",floatNone:"Không trôi",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Thả Ảnh ở vùng này",dropImage:"Drop image or Text",selectFromFiles:"Chọn từ File",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL",remove:"Xóa",original:"Original"},video:{video:"Video",videoLink:"Link đến Video",insert:"Chèn Video",url:"URL",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)"},link:{link:"Link",insert:"Chèn Link",unlink:"Gỡ Link",edit:"Sửa",textToDisplay:"Văn bản hiển thị",url:"URL",openInNewWindow:"Mở ở Cửa sổ mới"},table:{table:"Bảng",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:"Chèn"},style:{style:"Kiểu chữ",p:"Chữ thường",blockquote:"Đoạn trích",pre:"Mã Code",h1:"H1",h2:"H2",h3:"H3",h4:"H4",h5:"H5",h6:"H6"},lists:{unordered:"Liệt kê danh sách",ordered:"Liệt kê theo thứ tự"},options:{help:"Trợ giúp",fullscreen:"Toàn Màn hình",codeview:"Xem Code"},paragraph:{paragraph:"Canh lề",outdent:"Dịch sang trái",indent:"Dịch sang phải",left:"Canh trái",center:"Canh giữa",right:"Canh phải",justify:"Canh đều"},color:{recent:"Màu chữ",more:"Mở rộng",background:"Màu nền",foreground:"Màu chữ",transparent:"trong suốt",setTransparent:"Nền trong suốt",reset:"Thiết lập lại",resetToDefault:"Trở lại ban đầu"},shortcut:{shortcuts:"Phím tắt",close:"Đóng",textFormatting:"Định dạng Văn bản",action:"Hành động",paragraphFormatting:"Định dạng",documentStyle:"Kiểu văn bản",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:"Lùi lại",redo:"Làm lại"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�La�zzdist/lang/summernote-cs-CZ.jsnu�[���(function($) { $.extend($.summernote.lang, { 'cs-CZ': { font: { bold: 'Tučné', italic: 'Kurzíva', underline: 'Podtržené', clear: 'Odstranit styl písma', height: 'Výška řádku', strikethrough: 'Přeškrtnuté', size: 'Velikost písma' }, image: { image: 'Obrázek', insert: 'Vložit obrázek', resizeFull: 'Původní velikost', resizeHalf: 'Poloviční velikost', resizeQuarter: 'Čtvrteční velikost', floatLeft: 'Umístit doleva', floatRight: 'Umístit doprava', floatNone: 'Neobtékat textem', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Přetáhnout sem obrázek', dropImage: 'Drop image or Text', selectFromFiles: 'Vybrat soubor', url: 'URL obrázku', remove: 'Remove Image', original: 'Original' }, video: { video: 'Video', videoLink: 'Odkaz videa', insert: 'Vložit video', url: 'URL videa?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)' }, link: { link: 'Odkaz', insert: 'Vytvořit odkaz', unlink: 'Zrušit odkaz', edit: 'Upravit', textToDisplay: 'Zobrazovaný text', url: 'Na jaké URL má tento odkaz vést?', openInNewWindow: 'Otevřít v novém okně' }, table: { table: 'Tabulka', 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: 'Vložit vodorovnou čáru' }, style: { style: 'Styl', p: 'Normální', blockquote: 'Citace', pre: 'Kód', h1: 'Nadpis 1', h2: 'Nadpis 2', h3: 'Nadpis 3', h4: 'Nadpis 4', h5: 'Nadpis 5', h6: 'Nadpis 6' }, lists: { unordered: 'Odrážkový seznam', ordered: 'Číselný seznam' }, options: { help: 'Nápověda', fullscreen: 'Celá obrazovka', codeview: 'HTML kód' }, paragraph: { paragraph: 'Odstavec', outdent: 'Zvětšit odsazení', indent: 'Zmenšit odsazení', left: 'Zarovnat doleva', center: 'Zarovnat na střed', right: 'Zarovnat doprava', justify: 'Zarovnat oboustranně' }, color: { recent: 'Aktuální barva', more: 'Další barvy', background: 'Barva pozadí', foreground: 'Barva písma', transparent: 'Průhlednost', setTransparent: 'Nastavit průhlednost', reset: 'Obnovit', resetToDefault: 'Obnovit výchozí' }, shortcut: { shortcuts: 'Klávesové zkratky', close: 'Zavřít', textFormatting: 'Formátování textu', action: 'Akce', paragraphFormatting: 'Formátování odstavce', documentStyle: 'Styl dokumentu' }, 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: 'Krok vzad', redo: 'Krok vpřed' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\*���!dist/lang/summernote-gl-ES.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"gl-ES":{font:{bold:"Negrita",italic:"Cursiva",underline:"Subliñado",clear:"Quitar estilo de fonte",height:"Altura de liña",name:"Fonte",strikethrough:"Riscado",superscript:"Superíndice",subscript:"Subíndice",size:"Tamaño da fonte"},image:{image:"Imaxe",insert:"Inserir imaxe",resizeFull:"Redimensionar a tamaño completo",resizeHalf:"Redimensionar á metade",resizeQuarter:"Redimensionar a un cuarto",floatLeft:"Flotar á esquerda",floatRight:"Flotar á dereita",floatNone:"Non flotar",shapeRounded:"Forma: Redondeado",shapeCircle:"Forma: Círculo",shapeThumbnail:"Forma: Marco",shapeNone:"Forma: Ningunha",dragImageHere:"Arrastrar unha imaxe ou texto aquí",dropImage:"Solta a imaxe ou texto",selectFromFiles:"Seleccionar desde os arquivos",maximumFileSize:"Tamaño máximo do arquivo",maximumFileSizeError:"Superaches o tamaño máximo do arquivo.",url:"URL da imaxe",remove:"Eliminar imaxe",original:"Original"},video:{video:"Vídeo",videoLink:"Ligazón do vídeo",insert:"Insertar vídeo",url:"URL do vídeo?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)"},link:{link:"Ligazón",insert:"Inserir Ligazón",unlink:"Quitar Ligazón",edit:"Editar",textToDisplay:"Texto para amosar",url:"Cara a que URL leva a ligazón?",openInNewWindow:"Abrir nunha nova xanela"},table:{table:"Táboa",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:"Inserir liña horizontal"},style:{style:"Estilo",normal:"Normal",blockquote:"Cita",pre:"Código",h1:"Título 1",h2:"Título 2",h3:"Título 3",h4:"Título 4",h5:"Título 5",h6:"Título 6"},lists:{unordered:"Lista desordenada",ordered:"Lista ordenada"},options:{help:"Axuda",fullscreen:"Pantalla completa",codeview:"Ver código fonte"},paragraph:{paragraph:"Parágrafo",outdent:"Menos tabulación",indent:"Máis tabulación",left:"Aliñar á esquerda",center:"Aliñar ao centro",right:"Aliñar á dereita",justify:"Xustificar"},color:{recent:"Última cor",more:"Máis cores",background:"Cor de fondo",foreground:"Cor de fuente",transparent:"Transparente",setTransparent:"Establecer transparente",reset:"Restaurar",resetToDefault:"Restaurar por defecto"},shortcut:{shortcuts:"Atallos de teclado",close:"Pechar",textFormatting:"Formato de texto",action:"Acción",paragraphFormatting:"Formato de parágrafo",documentStyle:"Estilo de documento",extraKeys:"Teclas adicionais"},help:{insertParagraph:"Inserir parágrafo",undo:"Desfacer última acción",redo:"Refacer última acción",tab:"Tabular",untab:"Eliminar tabulación",bold:"Establecer estilo negrita",italic:"Establecer estilo cursiva",underline:"Establecer estilo subliñado",strikethrough:"Establecer estilo riscado",removeFormat:"Limpar estilo",justifyLeft:"Aliñar á esquerda",justifyCenter:"Aliñar ao centro",justifyRight:"Aliñar á dereita",justifyFull:"Xustificar",insertUnorderedList:"Inserir lista desordenada",insertOrderedList:"Inserir lista ordenada",outdent:"Reducir tabulación do parágrafo",indent:"Aumentar tabulación do parágrafo",formatPara:"Mudar estilo do bloque a parágrafo (etiqueta P)",formatH1:"Mudar estilo do bloque a H1",formatH2:"Mudar estilo do bloque a H2",formatH3:"Mudar estilo do bloque a H3",formatH4:"Mudar estilo do bloque a H4",formatH5:"Mudar estilo do bloque a H5",formatH6:"Mudar estilo do bloque a H6",insertHorizontalRule:"Inserir liña horizontal","linkDialog.show":"Amosar panel ligazóns"},history:{undo:"Desfacer",redo:"Refacer"},specialChar:{specialChar:"CARACTERES ESPECIAIS",select:"Selecciona Caracteres especiais"}}})}(jQuery);PKf[�\�7��TT!dist/lang/summernote-sl-SI.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"sl-SI":{font:{bold:"Krepko",italic:"Ležeče",underline:"Podčrtano",clear:"Počisti oblikovanje izbire",height:"Razmik med vrsticami",name:"Pisava",strikethrough:"Prečrtano",subscript:"Podpisano",superscript:"Nadpisano",size:"Velikost pisave"},image:{image:"Slika",insert:"Vstavi sliko",resizeFull:"Razširi na polno velikost",resizeHalf:"Razširi na polovico velikosti",resizeQuarter:"Razširi na četrtino velikosti",floatLeft:"Leva poravnava",floatRight:"Desna poravnava",floatNone:"Brez poravnave",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Sem povlecite sliko",dropImage:"Drop image or Text",selectFromFiles:"Izberi sliko za nalaganje",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL naslov slike",remove:"Odstrani sliko",original:"Original"},video:{video:"Video",videoLink:"Video povezava",insert:"Vstavi video",url:"Povezava do videa",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)"},link:{link:"Povezava",insert:"Vstavi povezavo",unlink:"Odstrani povezavo",edit:"Uredi",textToDisplay:"Prikazano besedilo",url:"Povezava",openInNewWindow:"Odpri v novem oknu"},table:{table:"Tabela",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:"Vstavi horizontalno črto"},style:{style:"Slogi",p:"Navadno besedilo",blockquote:"Citat",pre:"Koda",h1:"Naslov 1",h2:"Naslov 2",h3:"Naslov 3",h4:"Naslov 4",h5:"Naslov 5",h6:"Naslov 6"},lists:{unordered:"Označen seznam",ordered:"Oštevilčen seznam"},options:{help:"Pomoč",fullscreen:"Celozaslonski način",codeview:"Pregled HTML kode"},paragraph:{paragraph:"Slogi odstavka",outdent:"Zmanjšaj odmik",indent:"Povečaj odmik",left:"Leva poravnava",center:"Desna poravnava",right:"Sredinska poravnava",justify:"Obojestranska poravnava"},color:{recent:"Uporabi zadnjo barvo",more:"Več barv",background:"Barva ozadja",foreground:"Barva besedila",transparent:"Brez barve",setTransparent:"Brez barve",reset:"Ponastavi",resetToDefault:"Ponastavi na privzeto"},shortcut:{shortcuts:"Bljižnice",close:"Zapri",textFormatting:"Oblikovanje besedila",action:"Dejanja",paragraphFormatting:"Oblikovanje odstavka",documentStyle:"Oblikovanje naslova",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:"Razveljavi",redo:"Uveljavi"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�!����!dist/lang/summernote-zh-CN.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"zh-CN":{font:{bold:"粗体",italic:"斜体",underline:"下划线",clear:"清除格式",height:"行高",name:"字体",strikethrough:"删除线",subscript:"下标",superscript:"上标",size:"字号"},image:{image:"图片",insert:"插入图片",resizeFull:"缩放至 100%",resizeHalf:"缩放至 50%",resizeQuarter:"缩放至 25%",floatLeft:"靠左浮动",floatRight:"靠右浮动",floatNone:"取消浮动",shapeRounded:"形状: 圆角",shapeCircle:"形状: 圆",shapeThumbnail:"形状: 缩略图",shapeNone:"形状: 无",dragImageHere:"将图片拖拽至此处",dropImage:"Drop image or Text",selectFromFiles:"从本地上传",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"图片地址",remove:"移除图片",original:"Original"},video:{video:"视频",videoLink:"视频链接",insert:"插入视频",url:"视频地址",providers:"(优酷, 腾讯, Instagram, DailyMotion, Youtube等)"},link:{link:"链接",insert:"插入链接",unlink:"去除链接",edit:"编辑链接",textToDisplay:"显示文本",url:"链接地址",openInNewWindow:"在新窗口打开"},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:"水平线"},style:{style:"样式",p:"普通",blockquote:"引用",pre:"代码",h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",h5:"标题 5",h6:"标题 6"},lists:{unordered:"无序列表",ordered:"有序列表"},options:{help:"帮助",fullscreen:"全屏",codeview:"源代码"},paragraph:{paragraph:"段落",outdent:"减少缩进",indent:"增加缩进",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐"},color:{recent:"最近使用",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重置",resetToDefault:"默认"},shortcut:{shortcuts:"快捷键",close:"关闭",textFormatting:"文本格式",action:"动作",paragraphFormatting:"段落格式",documentStyle:"文档样式",extraKeys:"额外按键"},help:{insertParagraph:"插入段落",undo:"撤销",redo:"重做",tab:"增加缩进",untab:"减少缩进",bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",removeFormat:"清除格式",justifyLeft:"左对齐",justifyCenter:"居中对齐",justifyRight:"右对齐",justifyFull:"两端对齐",insertUnorderedList:"无序列表",insertOrderedList:"有序列表",outdent:"减少缩进",indent:"增加缩进",formatPara:"设置选中内容样式为 普通",formatH1:"设置选中内容样式为 标题1",formatH2:"设置选中内容样式为 标题2",formatH3:"设置选中内容样式为 标题3",formatH4:"设置选中内容样式为 标题4",formatH5:"设置选中内容样式为 标题5",formatH6:"设置选中内容样式为 标题6",insertHorizontalRule:"插入水平线","linkDialog.show":"显示链接对话框"},history:{undo:"撤销",redo:"重做"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�C_��dist/lang/summernote-fi-FI.jsnu�[���(function($) { $.extend($.summernote.lang, { 'fi-FI': { font: { bold: 'Lihavoitu', italic: 'Kursiivi', underline: 'Alleviivaa', clear: 'Tyhjennä muotoilu', height: 'Riviväli', name: 'Kirjasintyyppi', strikethrough: 'Yliviivaus', subscript: 'Subscript', superscript: 'Superscript', size: 'Kirjasinkoko' }, image: { image: 'Kuva', insert: 'Lisää kuva', resizeFull: 'Koko leveys', resizeHalf: 'Puolikas leveys', resizeQuarter: 'Neljäsosa leveys', floatLeft: 'Sijoita vasemmalle', floatRight: 'Sijoita oikealle', floatNone: 'Ei sijoitusta', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Vedä kuva tähän', selectFromFiles: 'Valitse tiedostoista', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL-osoitteen mukaan', remove: 'Poista kuva', original: 'Original' }, video: { video: 'Video', videoLink: 'Linkki videoon', insert: 'Lisää video', url: 'Videon URL-osoite?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)' }, link: { link: 'Linkki', insert: 'Lisää linkki', unlink: 'Poista linkki', edit: 'Muokkaa', textToDisplay: 'Näytettävä teksti', url: 'Linkin URL-osoite?', openInNewWindow: 'Avaa uudessa ikkunassa' }, table: { table: 'Taulukko', 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: 'Lisää vaakaviiva' }, style: { style: 'Tyyli', p: 'Normaali', blockquote: 'Lainaus', pre: 'Koodi', h1: 'Otsikko 1', h2: 'Otsikko 2', h3: 'Otsikko 3', h4: 'Otsikko 4', h5: 'Otsikko 5', h6: 'Otsikko 6' }, lists: { unordered: 'Luettelomerkitty luettelo', ordered: 'Numeroitu luettelo' }, options: { help: 'Ohje', fullscreen: 'Koko näyttö', codeview: 'HTML-näkymä' }, paragraph: { paragraph: 'Kappale', outdent: 'Pienennä sisennystä', indent: 'Suurenna sisennystä', left: 'Tasaus vasemmalle', center: 'Keskitä', right: 'Tasaus oikealle', justify: 'Tasaa' }, color: { recent: 'Viimeisin väri', more: 'Lisää värejä', background: 'Taustaväri', foreground: 'Tekstin väri', transparent: 'Läpinäkyvä', setTransparent: 'Aseta läpinäkyväksi', reset: 'Palauta', resetToDefault: 'Palauta oletusarvoksi' }, shortcut: { shortcuts: 'Pikanäppäimet', close: 'Sulje', textFormatting: 'Tekstin muotoilu', action: 'Toiminto', paragraphFormatting: 'Kappaleen muotoilu', documentStyle: 'Asiakirjan tyyli' }, 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: 'Kumoa', redo: 'Toista' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�"+�> > !dist/lang/summernote-zh-TW.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"zh-TW":{font:{bold:"粗體",italic:"斜體",underline:"底線",clear:"清除格式",height:"行高",name:"字體",strikethrough:"刪除線",subscript:"下標",superscript:"上標",size:"字號"},image:{image:"圖片",insert:"插入圖片",resizeFull:"縮放至100%",resizeHalf:"縮放至 50%",resizeQuarter:"縮放至 25%",floatLeft:"靠左浮動",floatRight:"靠右浮動",floatNone:"取消浮動",shapeRounded:"形狀: 圓角",shapeCircle:"形狀: 圓",shapeThumbnail:"形狀: 縮略圖",shapeNone:"形狀: 無",dragImageHere:"將圖片拖曳至此處",dropImage:"Drop image or Text",selectFromFiles:"從本機上傳",maximumFileSize:"文件大小最大值",maximumFileSizeError:"文件大小超出最大值。",url:"圖片網址",remove:"移除圖片",original:"Original"},video:{video:"影片",videoLink:"影片連結",insert:"插入影片",url:"影片網址",providers:"(優酷, Instagram, DailyMotion, Youtube等)"},link:{link:"連結",insert:"插入連結",unlink:"取消連結",edit:"編輯連結",textToDisplay:"顯示文字",url:"連結網址",openInNewWindow:"在新視窗開啟"},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:"水平線"},style:{style:"樣式",p:"一般",blockquote:"引用區塊",pre:"程式碼區塊",h1:"標題 1",h2:"標題 2",h3:"標題 3",h4:"標題 4",h5:"標題 5",h6:"標題 6"},lists:{unordered:"項目清單",ordered:"編號清單"},options:{help:"幫助",fullscreen:"全螢幕",codeview:"原始碼"},paragraph:{paragraph:"段落",outdent:"取消縮排",indent:"增加縮排",left:"靠右對齊",center:"靠中對齊",right:"靠右對齊",justify:"左右對齊"},color:{recent:"字型顏色",more:"更多",background:"背景",foreground:"前景",transparent:"透明",setTransparent:"透明",reset:"重設",resetToDefault:"默認"},shortcut:{shortcuts:"快捷鍵",close:"關閉",textFormatting:"文字格式",action:"動作",paragraphFormatting:"段落格式",documentStyle:"文件格式",extraKeys:"額外按鍵"},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:"復原",redo:"取消復原"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\D�jKdist/lang/summernote-ca-ES.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ca-ES': { font: { bold: 'Negreta', italic: 'Cursiva', underline: 'Subratllat', clear: 'Treure estil de lletra', height: 'Alçada de línia', name: 'Font', strikethrough: 'Ratllat', subscript: 'Subíndex', superscript: 'Superíndex', size: 'Mida de lletra' }, image: { image: 'Imatge', insert: 'Inserir imatge', resizeFull: 'Redimensionar a mida completa', resizeHalf: 'Redimensionar a la meitat', resizeQuarter: 'Redimensionar a un quart', floatLeft: 'Alinear a l\'esquerra', floatRight: 'Alinear a la dreta', floatNone: 'No alinear', shapeRounded: 'Forma: Arrodonit', shapeCircle: 'Forma: Cercle', shapeThumbnail: 'Forma: Marc', shapeNone: 'Forma: Cap', dragImageHere: 'Arrossegueu una imatge o text aquí', dropImage: 'Deixa anar aquí una imatge o un text', selectFromFiles: 'Seleccioneu des dels arxius', maximumFileSize: 'Mida màxima de l\'arxiu', maximumFileSizeError: 'La mida màxima de l\'arxiu s\'ha superat.', url: 'URL de la imatge', remove: 'Eliminar imatge', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Enllaç del vídeo', insert: 'Inserir vídeo', url: 'URL del vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' }, link: { link: 'Enllaç', insert: 'Inserir enllaç', unlink: 'Treure enllaç', edit: 'Editar', textToDisplay: 'Text per mostrar', url: 'Cap a quina URL porta l\'enllaç?', openInNewWindow: 'Obrir en una finestra nova' }, table: { table: 'Taula', 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: 'Inserir línia horitzontal' }, style: { style: 'Estil', p: 'p', blockquote: 'Cita', pre: 'Codi', h1: 'Títol 1', h2: 'Títol 2', h3: 'Títol 3', h4: 'Títol 4', h5: 'Títol 5', h6: 'Títol 6' }, lists: { unordered: 'Llista desendreçada', ordered: 'Llista endreçada' }, options: { help: 'Ajut', fullscreen: 'Pantalla sencera', codeview: 'Veure codi font' }, paragraph: { paragraph: 'Paràgraf', outdent: 'Menys tabulació', indent: 'Més tabulació', left: 'Alinear a l\'esquerra', center: 'Alinear al mig', right: 'Alinear a la dreta', justify: 'Justificar' }, color: { recent: 'Últim color', more: 'Més colors', background: 'Color de fons', foreground: 'Color de lletra', transparent: 'Transparent', setTransparent: 'Establir transparent', reset: 'Restablir', resetToDefault: 'Restablir per defecte' }, shortcut: { shortcuts: 'Dreceres de teclat', close: 'Tancar', textFormatting: 'Format de text', action: 'Acció', paragraphFormatting: 'Format de paràgraf', documentStyle: 'Estil del document', extraKeys: 'Tecles adicionals' }, help: { 'insertParagraph': 'Inserir paràgraf', 'undo': 'Desfer l\'última acció', 'redo': 'Refer l\'última acció', 'tab': 'Tabular', 'untab': 'Eliminar tabulació', 'bold': 'Establir estil negreta', 'italic': 'Establir estil cursiva', 'underline': 'Establir estil subratllat', 'strikethrough': 'Establir estil ratllat', 'removeFormat': 'Netejar estil', 'justifyLeft': 'Alinear a l\'esquerra', 'justifyCenter': 'Alinear al centre', 'justifyRight': 'Alinear a la dreta', 'justifyFull': 'Justificar', 'insertUnorderedList': 'Inserir llista desendreçada', 'insertOrderedList': 'Inserir llista endreçada', 'outdent': 'Reduïr tabulació del paràgraf', 'indent': 'Augmentar tabulació del paràgraf', 'formatPara': 'Canviar l\'estil del bloc com a un paràgraf (etiqueta P)', 'formatH1': 'Canviar l\'estil del bloc com a un H1', 'formatH2': 'Canviar l\'estil del bloc com a un H2', 'formatH3': 'Canviar l\'estil del bloc com a un H3', 'formatH4': 'Canviar l\'estil del bloc com a un H4', 'formatH5': 'Canviar l\'estil del bloc com a un H5', 'formatH6': 'Canviar l\'estil del bloc com a un H6', 'insertHorizontalRule': 'Inserir una línia horitzontal', 'linkDialog.show': 'Mostrar panel d\'enllaços' }, history: { undo: 'Desfer', redo: 'Refer' }, specialChar: { specialChar: 'CARÀCTERS ESPECIALS', select: 'Selecciona caràcters especials' } } }); })(jQuery); PKf[�\B�bnndist/lang/summernote-th-TH.jsnu�[���(function($) { $.extend($.summernote.lang, { 'th-TH': { font: { bold: 'ตัวหนา', italic: 'ตัวเอียง', underline: 'ขีดเส้นใต้', clear: 'ล้างรูปแบบตัวอักษร', height: 'ความสูงบรรทัด', name: 'แบบตัวอักษร', strikethrough: 'ขีดฆ่า', subscript: 'ตัวห้อย', superscript: 'ตัวยก', size: 'ขนาดตัวอักษร' }, image: { image: 'รูปภาพ', insert: 'แทรกรูปภาพ', resizeFull: 'ปรับขนาดเท่าจริง', resizeHalf: 'ปรับขนาดลง 50%', resizeQuarter: 'ปรับขนาดลง 25%', floatLeft: 'ชิดซ้าย', floatRight: 'ชิดขวา', floatNone: 'ไม่จัดตำแหน่ง', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'ลากรูปภาพที่ต้องการไว้ที่นี่', dropImage: 'Drop image or Text', selectFromFiles: 'เลือกไฟล์รูปภาพ', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'ที่อยู่ URL ของรูปภาพ', remove: 'ลบรูปภาพ', original: 'Original' }, video: { video: 'วีดีโอ', videoLink: 'ลิงก์ของวีดีโอ', insert: 'แทรกวีดีโอ', url: 'ที่อยู่ URL ของวีดีโอ?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)' }, link: { link: 'ตัวเชื่อมโยง', insert: 'แทรกตัวเชื่อมโยง', unlink: 'ยกเลิกตัวเชื่อมโยง', edit: 'แก้ไข', textToDisplay: 'ข้อความที่ให้แสดง', url: 'ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?', openInNewWindow: 'เปิดในหน้าต่างใหม่' }, 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: 'แทรกเส้นคั่น' }, style: { style: 'รูปแบบ', p: 'ปกติ', blockquote: 'ข้อความ', pre: 'โค้ด', h1: 'หัวข้อ 1', h2: 'หัวข้อ 2', h3: 'หัวข้อ 3', h4: 'หัวข้อ 4', h5: 'หัวข้อ 5', h6: 'หัวข้อ 6' }, lists: { unordered: 'รายการแบบไม่มีลำดับ', ordered: 'รายการแบบมีลำดับ' }, options: { help: 'ช่วยเหลือ', fullscreen: 'ขยายเต็มหน้าจอ', codeview: 'ซอร์สโค้ด' }, paragraph: { paragraph: 'ย่อหน้า', outdent: 'เยื้องซ้าย', indent: 'เยื้องขวา', left: 'จัดหน้าชิดซ้าย', center: 'จัดหน้ากึ่งกลาง', right: 'จัดหน้าชิดขวา', justify: 'จัดบรรทัดเสมอกัน' }, color: { recent: 'สีที่ใช้ล่าสุด', more: 'สีอื่นๆ', background: 'สีพื้นหลัง', foreground: 'สีพื้นหน้า', transparent: 'โปร่งแสง', setTransparent: 'ตั้งค่าความโปร่งแสง', reset: 'คืนค่า', resetToDefault: 'คืนค่ามาตรฐาน' }, shortcut: { shortcuts: 'แป้นลัด', close: 'ปิด', textFormatting: 'การจัดรูปแบบข้อความ', action: 'การกระทำ', paragraphFormatting: 'การจัดรูปแบบย่อหน้า', documentStyle: 'รูปแบบของเอกสาร', 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: 'ยกเลิกการกระทำ', redo: 'ทำซ้ำการกระทำ' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\m��ppdist/lang/summernote-sl-SI.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sl-SI': { font: { bold: 'Krepko', italic: 'Ležeče', underline: 'Podčrtano', clear: 'Počisti oblikovanje izbire', height: 'Razmik med vrsticami', name: 'Pisava', strikethrough: 'Prečrtano', subscript: 'Podpisano', superscript: 'Nadpisano', size: 'Velikost pisave' }, image: { image: 'Slika', insert: 'Vstavi sliko', resizeFull: 'Razširi na polno velikost', resizeHalf: 'Razširi na polovico velikosti', resizeQuarter: 'Razširi na četrtino velikosti', floatLeft: 'Leva poravnava', floatRight: 'Desna poravnava', floatNone: 'Brez poravnave', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Sem povlecite sliko', dropImage: 'Drop image or Text', selectFromFiles: 'Izberi sliko za nalaganje', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL naslov slike', remove: 'Odstrani sliko', original: 'Original' }, video: { video: 'Video', videoLink: 'Video povezava', insert: 'Vstavi video', url: 'Povezava do videa', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)' }, link: { link: 'Povezava', insert: 'Vstavi povezavo', unlink: 'Odstrani povezavo', edit: 'Uredi', textToDisplay: 'Prikazano besedilo', url: 'Povezava', openInNewWindow: 'Odpri v novem oknu' }, table: { table: 'Tabela', 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: 'Vstavi horizontalno črto' }, style: { style: 'Slogi', p: 'Navadno besedilo', blockquote: 'Citat', pre: 'Koda', h1: 'Naslov 1', h2: 'Naslov 2', h3: 'Naslov 3', h4: 'Naslov 4', h5: 'Naslov 5', h6: 'Naslov 6' }, lists: { unordered: 'Označen seznam', ordered: 'Oštevilčen seznam' }, options: { help: 'Pomoč', fullscreen: 'Celozaslonski način', codeview: 'Pregled HTML kode' }, paragraph: { paragraph: 'Slogi odstavka', outdent: 'Zmanjšaj odmik', indent: 'Povečaj odmik', left: 'Leva poravnava', center: 'Desna poravnava', right: 'Sredinska poravnava', justify: 'Obojestranska poravnava' }, color: { recent: 'Uporabi zadnjo barvo', more: 'Več barv', background: 'Barva ozadja', foreground: 'Barva besedila', transparent: 'Brez barve', setTransparent: 'Brez barve', reset: 'Ponastavi', resetToDefault: 'Ponastavi na privzeto' }, shortcut: { shortcuts: 'Bljižnice', close: 'Zapri', textFormatting: 'Oblikovanje besedila', action: 'Dejanja', paragraphFormatting: 'Oblikovanje odstavka', documentStyle: 'Oblikovanje naslova', 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: 'Razveljavi', redo: 'Uveljavi' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\v?!b''dist/lang/summernote-he-IL.jsnu�[���(function($) { $.extend($.summernote.lang, { 'he-IL': { font: { bold: 'מודגש', italic: 'נטוי', underline: 'קו תחתון', clear: 'נקה עיצוב', height: 'גובה', name: 'גופן', strikethrough: 'קו חוצה', subscript: 'כתב תחתי', superscript: 'כתב עילי', size: 'גודל גופן' }, image: { image: 'תמונה', insert: 'הוסף תמונה', resizeFull: 'גודל מלא', resizeHalf: 'להקטין לחצי', resizeQuarter: 'להקטין לרבע', floatLeft: 'יישור לשמאל', floatRight: 'יישור לימין', floatNone: 'ישר', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'גרור תמונה לכאן', dropImage: 'Drop image or Text', selectFromFiles: 'בחר מתוך קבצים', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'נתיב לתמונה', remove: 'הסר תמונה', original: 'Original' }, video: { video: 'סרטון', videoLink: 'קישור לסרטון', insert: 'הוסף סרטון', url: 'קישור לסרטון', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)' }, link: { link: 'קישור', insert: 'הוסף קישור', unlink: 'הסר קישור', edit: 'ערוך', textToDisplay: 'טקסט להציג', url: 'קישור', openInNewWindow: 'פתח בחלון חדש' }, 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: 'הוסף קו' }, style: { style: 'עיצוב', p: 'טקסט רגיל', blockquote: 'ציטוט', pre: 'קוד', h1: 'כותרת 1', h2: 'כותרת 2', h3: 'כותרת 3', h4: 'כותרת 4', h5: 'כותרת 5', h6: 'כותרת 6' }, lists: { unordered: 'רשימת תבליטים', ordered: 'רשימה ממוספרת' }, options: { help: 'עזרה', fullscreen: 'מסך מלא', codeview: 'תצוגת קוד' }, paragraph: { paragraph: 'פסקה', outdent: 'הקטן כניסה', indent: 'הגדל כניסה', left: 'יישור לשמאל', center: 'יישור למרכז', right: 'יישור לימין', justify: 'מיושר' }, color: { recent: 'צבע טקסט אחרון', more: 'עוד צבעים', background: 'צבע רקע', foreground: 'צבע טקסט', transparent: 'שקוף', setTransparent: 'קבע כשקוף', reset: 'איפוס', resetToDefault: 'אפס לברירת מחדל' }, shortcut: { shortcuts: 'קיצורי מקלדת', close: 'סגור', textFormatting: 'עיצוב הטקסט', action: 'פעולה', paragraphFormatting: 'סגנונות פסקה', documentStyle: 'עיצוב המסמך', extraKeys: 'קיצורים נוספים' }, 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: 'בטל פעולה', redo: 'בצע שוב' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\FbJ6CC!dist/lang/summernote-el-GR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"el-GR":{font:{bold:"Έντονα",italic:"Πλάγια",underline:"Υπογραμμισμένα",clear:"Καθαρισμός",height:"Ύψος",name:"Γραμματοσειρά",strikethrough:"Διεγραμμένα",subscript:"Δείκτης",superscript:"Εκθέτης",size:"Μέγεθος"},image:{image:"εικόνα",insert:"Εισαγωγή",resizeFull:"Πλήρες μέγεθος",resizeHalf:"Μισό μέγεθος",resizeQuarter:"1/4 μέγεθος",floatLeft:"Μετατόπιση αριστερά",floatRight:"Μετατόπιση δεξιά",floatNone:"Χωρίς μετατόπιση",shapeRounded:"Σχήμα: Στρογγυλεμένο",shapeCircle:"Σχήμα: Κύκλος",shapeThumbnail:"Σχήμα: Thumbnail",shapeNone:"Σχήμα: Κανένα",dragImageHere:"Σύρτε την εικόνα εδώ",dropImage:"Αφήστε την εικόνα",selectFromFiles:"Επιλογή από αρχεία",maximumFileSize:"Μέγιστο μέγεθος αρχείου",maximumFileSizeError:"Το μέγεθος είναι μεγαλύτερο από το μέγιστο επιτρεπτό.",url:"URL",remove:"Αφαίρεση",original:"Original"},link:{link:"Σύνδεσμος",insert:"Εισαγωγή συνδέσμου",unlink:"Αφαίρεση συνδέσμου",edit:"Επεξεργασία συνδέσμου",textToDisplay:"Κείμενο συνδέσμου",url:"URL",openInNewWindow:"Άνοιγμα σε νέο παράθυρο"},video:{video:"Βίντεο",videoLink:"Σύνδεσμος Βίντεο",insert:"Εισαγωγή",url:"URL",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},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:"Εισαγωγή οριζόντιας γραμμής"},style:{style:"Στυλ",normal:"Κανονικό",blockquote:"Παράθεση",pre:"Ως έχει",h1:"Κεφαλίδα 1",h2:"συνδέσμου 2",h3:"συνδέσμου 3",h4:"συνδέσμου 4",h5:"συνδέσμου 5",h6:"συνδέσμου 6"},lists:{unordered:"Αταξινόμητη λίστα",ordered:"Ταξινομημένη λίστα"},options:{help:"Βοήθεια",fullscreen:"Πλήρης οθόνη",codeview:"Προβολή HTML"},paragraph:{paragraph:"Παράγραφος",outdent:"Μείωση εσοχής",indent:"Άυξηση εσοχής",left:"Αριστερή στοίχιση",center:"Στοίχιση στο κέντρο",right:"Δεξιά στοίχιση",justify:"Πλήρης στοίχιση"},color:{recent:"Πρόσφατη επιλογή",more:"Περισσότερα",background:"Υπόβαθρο",foreground:"Μπροστά",transparent:"Διαφανές",setTransparent:"Επιλογή διαφάνειας",reset:"Επαναφορά",resetToDefault:"Επαναφορά στις προκαθορισμένες τιμές"},shortcut:{shortcuts:"Συντομεύσεις",close:"Κλείσιμο",textFormatting:"Διαμόρφωση κειμένου",action:"Ενέργεια",paragraphFormatting:"Διαμόρφωση παραγράφου",documentStyle:"Στυλ κειμένου",extraKeys:"Επιπλέον συντομεύσεις"},help:{insertParagraph:"Εισαγωγή παραγράφου",undo:"Αναιρεί την προηγούμενη εντολή",redo:"Επαναλαμβάνει την προηγούμενη εντολή",tab:"Εσοχή",untab:"Αναίρεση εσοχής",bold:"Ορισμός έντονου στυλ",italic:"Ορισμός πλάγιου στυλ",underline:"Ορισμός υπογεγραμμένου στυλ",strikethrough:"Ορισμός διεγραμμένου στυλ",removeFormat:"Αφαίρεση στυλ",justifyLeft:"Ορισμός αριστερής στοίχισης",justifyCenter:"Ορισμός κεντρικής στοίχισης",justifyRight:"Ορισμός δεξιάς στοίχισης",justifyFull:"Ορισμός πλήρους στοίχισης",insertUnorderedList:"Ορισμός μη-ταξινομημένης λίστας",insertOrderedList:"Ορισμός ταξινομημένης λίστας",outdent:"Προεξοχή παραγράφου",indent:"Εσοχή παραγράφου",formatPara:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε παράγραφο (P tag)",formatH1:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε H1",formatH2:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε H2",formatH3:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε H3",formatH4:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε H4",formatH5:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε H5",formatH6:"Αλλαγή της μορφής του τρέχοντος μπλοκ σε H6",insertHorizontalRule:"Εισαγωγή οριζόντιας γραμμής","linkDialog.show":"Εμφάνιση διαλόγου συνδέσμου"},history:{undo:"Αναίρεση",redo:"Επαναληψη"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Επιλέξτε ειδικούς χαρακτήρες"}}})}(jQuery);PKf[�\�n2m33!dist/lang/summernote-pt-PT.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"pt-PT":{font:{bold:"Negrito",italic:"Itálico",underline:"Sublinhado",clear:"Remover estilo da fonte",height:"Altura da linha",name:"Fonte",strikethrough:"Riscado",subscript:"Subscript",superscript:"Superscript",size:"Tamanho da fonte"},image:{image:"Imagem",insert:"Inserir imagem",resizeFull:"Redimensionar Completo",resizeHalf:"Redimensionar Metade",resizeQuarter:"Redimensionar Um Quarto",floatLeft:"Float Esquerda",floatRight:"Float Direita",floatNone:"Sem Float",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Arraste uma imagem para aqui",dropImage:"Drop image or Text",selectFromFiles:"Selecione a partir dos arquivos",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Endereço da imagem",remove:"Remove Image",original:"Original"},video:{video:"Vídeo",videoLink:"Link para vídeo",insert:"Inserir vídeo",url:"URL do vídeo?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)"},link:{link:"Link",insert:"Inserir ligação",unlink:"Remover ligação",edit:"Editar",textToDisplay:"Texto para exibir",url:"Que endereço esta licação leva?",openInNewWindow:"Abrir numa nova janela"},table:{table:"Tabela",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:"Inserir linha horizontal"},style:{style:"Estilo",p:"p",blockquote:"Citação",pre:"Código",h1:"Título 1",h2:"Título 2",h3:"Título 3",h4:"Título 4",h5:"Título 5",h6:"Título 6"},lists:{unordered:"Lista com marcadores",ordered:"Lista numerada"},options:{help:"Ajuda",fullscreen:"Janela Completa",codeview:"Ver código-fonte"},paragraph:{paragraph:"Parágrafo",outdent:"Menor tabulação",indent:"Maior tabulação",left:"Alinhar à esquerda",center:"Alinhar ao centro",right:"Alinha à direita",justify:"Justificado"},color:{recent:"Cor recente",more:"Mais cores",background:"Fundo",foreground:"Fonte",transparent:"Transparente",setTransparent:"Fundo transparente",reset:"Restaurar",resetToDefault:"Restaurar padrão"},shortcut:{shortcuts:"Atalhos do teclado",close:"Fechar",textFormatting:"Formatação de texto",action:"Ação",paragraphFormatting:"Formatação de parágrafo",documentStyle:"Estilo de documento"},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:"Desfazer",redo:"Refazer"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\[܂}dist/lang/summernote-es-ES.jsnu�[���(function($) { $.extend($.summernote.lang, { 'es-ES': { font: { bold: 'Negrita', italic: 'Cursiva', underline: 'Subrayado', clear: 'Quitar estilo de fuente', height: 'Altura de línea', name: 'Fuente', strikethrough: 'Tachado', superscript: 'Superíndice', subscript: 'Subíndice', size: 'Tamaño de la fuente' }, image: { image: 'Imagen', insert: 'Insertar imagen', resizeFull: 'Redimensionar a tamaño completo', resizeHalf: 'Redimensionar a la mitad', resizeQuarter: 'Redimensionar a un cuarto', floatLeft: 'Flotar a la izquierda', floatRight: 'Flotar a la derecha', floatNone: 'No flotar', shapeRounded: 'Forma: Redondeado', shapeCircle: 'Forma: Círculo', shapeThumbnail: 'Forma: Marco', shapeNone: 'Forma: Ninguna', dragImageHere: 'Arrastrar una imagen o texto aquí', dropImage: 'Suelta la imagen o texto', selectFromFiles: 'Seleccionar desde los archivos', maximumFileSize: 'Tamaño máximo del archivo', maximumFileSizeError: 'Has superado el tamaño máximo del archivo.', url: 'URL de la imagen', remove: 'Eliminar imagen', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Link del vídeo', insert: 'Insertar vídeo', url: '¿URL del vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' }, link: { link: 'Link', insert: 'Insertar link', unlink: 'Quitar link', edit: 'Editar', textToDisplay: 'Texto para mostrar', url: '¿Hacia que URL lleva el link?', openInNewWindow: 'Abrir en una nueva ventana' }, table: { table: 'Tabla', addRowAbove: 'Añadir fila encima', addRowBelow: 'Añadir fila debajo', addColLeft: 'Añadir columna izquierda', addColRight: 'Añadir columna derecha', delRow: 'Borrar fila', delCol: 'Eliminar columna', delTable: 'Eliminar tabla' }, hr: { insert: 'Insertar línea horizontal' }, style: { style: 'Estilo', p: 'p', blockquote: 'Cita', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista desordenada', ordered: 'Lista ordenada' }, options: { help: 'Ayuda', fullscreen: 'Pantalla completa', codeview: 'Ver código fuente' }, paragraph: { paragraph: 'Párrafo', outdent: 'Menos tabulación', indent: 'Más tabulación', left: 'Alinear a la izquierda', center: 'Alinear al centro', right: 'Alinear a la derecha', justify: 'Justificar' }, color: { recent: 'Último color', more: 'Más colores', background: 'Color de fondo', foreground: 'Color de fuente', transparent: 'Transparente', setTransparent: 'Establecer transparente', reset: 'Restaurar', resetToDefault: 'Restaurar por defecto' }, shortcut: { shortcuts: 'Atajos de teclado', close: 'Cerrar', textFormatting: 'Formato de texto', action: 'Acción', paragraphFormatting: 'Formato de párrafo', documentStyle: 'Estilo de documento', extraKeys: 'Teclas adicionales' }, help: { 'insertParagraph': 'Insertar párrafo', 'undo': 'Deshacer última acción', 'redo': 'Rehacer última acción', 'tab': 'Tabular', 'untab': 'Eliminar tabulación', 'bold': 'Establecer estilo negrita', 'italic': 'Establecer estilo cursiva', 'underline': 'Establecer estilo subrayado', 'strikethrough': 'Establecer estilo tachado', 'removeFormat': 'Limpiar estilo', 'justifyLeft': 'Alinear a la izquierda', 'justifyCenter': 'Alinear al centro', 'justifyRight': 'Alinear a la derecha', 'justifyFull': 'Justificar', 'insertUnorderedList': 'Insertar lista desordenada', 'insertOrderedList': 'Insertar lista ordenada', 'outdent': 'Reducir tabulación del párrafo', 'indent': 'Aumentar tabulación del párrafo', 'formatPara': 'Cambiar estilo del bloque a párrafo (etiqueta P)', 'formatH1': 'Cambiar estilo del bloque a H1', 'formatH2': 'Cambiar estilo del bloque a H2', 'formatH3': 'Cambiar estilo del bloque a H3', 'formatH4': 'Cambiar estilo del bloque a H4', 'formatH5': 'Cambiar estilo del bloque a H5', 'formatH6': 'Cambiar estilo del bloque a H6', 'insertHorizontalRule': 'Insertar línea horizontal', 'linkDialog.show': 'Mostrar panel enlaces' }, history: { undo: 'Deshacer', redo: 'Rehacer' }, specialChar: { specialChar: 'CARACTERES ESPECIALES', select: 'Selecciona Caracteres especiales' } } }); })(jQuery); PKf[�\ӹ@&��!dist/lang/summernote-ar-AR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ar-AR":{font:{bold:"عريض",italic:"مائل",underline:"تحته خط",clear:"مسح التنسيق",height:"إرتفاع السطر",name:"الخط",strikethrough:"فى وسطه خط",subscript:"مخطوطة",superscript:"حرف فوقي",size:"الحجم"},image:{image:"صورة",insert:"إضافة صورة",resizeFull:"الحجم بالكامل",resizeHalf:"تصغير للنصف",resizeQuarter:"تصغير للربع",floatLeft:"تطيير لليسار",floatRight:"تطيير لليمين",floatNone:"ثابته",shapeRounded:"الشكل: تقريب",shapeCircle:"الشكل: دائرة",shapeThumbnail:"الشكل: صورة مصغرة",shapeNone:"الشكل: لا شيء",dragImageHere:"إدرج الصورة هنا",dropImage:"إسقاط صورة أو نص",selectFromFiles:"حدد ملف",maximumFileSize:"الحد الأقصى لحجم الملف",maximumFileSizeError:"تم تجاوز الحد الأقصى لحجم الملف",url:"رابط الصورة",remove:"حذف الصورة",original:"Original"},video:{video:"فيديو",videoLink:"رابط الفيديو",insert:"إدراج الفيديو",url:"رابط الفيديو",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)"},link:{link:"رابط رابط",insert:"إدراج",unlink:"حذف الرابط",edit:"تعديل",textToDisplay:"النص",url:"مسار الرابط",openInNewWindow:"فتح في نافذة جديدة"},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:"إدراج خط أفقي"},style:{style:"تنسيق",p:"عادي",blockquote:"إقتباس",pre:"شفيرة",h1:"عنوان رئيسي 1",h2:"عنوان رئيسي 2",h3:"عنوان رئيسي 3",h4:"عنوان رئيسي 4",h5:"عنوان رئيسي 5",h6:"عنوان رئيسي 6"},lists:{unordered:"قائمة مُنقطة",ordered:"قائمة مُرقمة"},options:{help:"مساعدة",fullscreen:"حجم الشاشة بالكامل",codeview:"شفيرة المصدر"},paragraph:{paragraph:"فقرة",outdent:"محاذاة للخارج",indent:"محاذاة للداخل",left:"محاذاة لليسار",center:"توسيط",right:"محاذاة لليمين",justify:"ملئ السطر"},color:{recent:"تم إستخدامه",more:"المزيد",background:"لون الخلفية",foreground:"لون النص",transparent:"شفاف",setTransparent:"بدون خلفية",reset:"إعادة الضبط",resetToDefault:"إعادة الضبط"},shortcut:{shortcuts:"إختصارات",close:"غلق",textFormatting:"تنسيق النص",action:"Action",paragraphFormatting:"تنسيق الفقرة",documentStyle:"تنسيق المستند",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:"تراجع",redo:"إعادة"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\&\] !dist/lang/summernote-es-ES.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"es-ES":{font:{bold:"Negrita",italic:"Cursiva",underline:"Subrayado",clear:"Quitar estilo de fuente",height:"Altura de línea",name:"Fuente",strikethrough:"Tachado",superscript:"Superíndice",subscript:"Subíndice",size:"Tamaño de la fuente"},image:{image:"Imagen",insert:"Insertar imagen",resizeFull:"Redimensionar a tamaño completo",resizeHalf:"Redimensionar a la mitad",resizeQuarter:"Redimensionar a un cuarto",floatLeft:"Flotar a la izquierda",floatRight:"Flotar a la derecha",floatNone:"No flotar",shapeRounded:"Forma: Redondeado",shapeCircle:"Forma: Círculo",shapeThumbnail:"Forma: Marco",shapeNone:"Forma: Ninguna",dragImageHere:"Arrastrar una imagen o texto aquí",dropImage:"Suelta la imagen o texto",selectFromFiles:"Seleccionar desde los archivos",maximumFileSize:"Tamaño máximo del archivo",maximumFileSizeError:"Has superado el tamaño máximo del archivo.",url:"URL de la imagen",remove:"Eliminar imagen",original:"Original"},video:{video:"Vídeo",videoLink:"Link del vídeo",insert:"Insertar vídeo",url:"¿URL del vídeo?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)"},link:{link:"Link",insert:"Insertar link",unlink:"Quitar link",edit:"Editar",textToDisplay:"Texto para mostrar",url:"¿Hacia que URL lleva el link?",openInNewWindow:"Abrir en una nueva ventana"},table:{table:"Tabla",addRowAbove:"Añadir fila encima",addRowBelow:"Añadir fila debajo",addColLeft:"Añadir columna izquierda",addColRight:"Añadir columna derecha",delRow:"Borrar fila",delCol:"Eliminar columna",delTable:"Eliminar tabla"},hr:{insert:"Insertar línea horizontal"},style:{style:"Estilo",p:"p",blockquote:"Cita",pre:"Código",h1:"Título 1",h2:"Título 2",h3:"Título 3",h4:"Título 4",h5:"Título 5",h6:"Título 6"},lists:{unordered:"Lista desordenada",ordered:"Lista ordenada"},options:{help:"Ayuda",fullscreen:"Pantalla completa",codeview:"Ver código fuente"},paragraph:{paragraph:"Párrafo",outdent:"Menos tabulación",indent:"Más tabulación",left:"Alinear a la izquierda",center:"Alinear al centro",right:"Alinear a la derecha",justify:"Justificar"},color:{recent:"Último color",more:"Más colores",background:"Color de fondo",foreground:"Color de fuente",transparent:"Transparente",setTransparent:"Establecer transparente",reset:"Restaurar",resetToDefault:"Restaurar por defecto"},shortcut:{shortcuts:"Atajos de teclado",close:"Cerrar",textFormatting:"Formato de texto",action:"Acción",paragraphFormatting:"Formato de párrafo",documentStyle:"Estilo de documento",extraKeys:"Teclas adicionales"},help:{insertParagraph:"Insertar párrafo",undo:"Deshacer última acción",redo:"Rehacer última acción",tab:"Tabular",untab:"Eliminar tabulación",bold:"Establecer estilo negrita",italic:"Establecer estilo cursiva",underline:"Establecer estilo subrayado",strikethrough:"Establecer estilo tachado",removeFormat:"Limpiar estilo",justifyLeft:"Alinear a la izquierda",justifyCenter:"Alinear al centro",justifyRight:"Alinear a la derecha",justifyFull:"Justificar",insertUnorderedList:"Insertar lista desordenada",insertOrderedList:"Insertar lista ordenada",outdent:"Reducir tabulación del párrafo",indent:"Aumentar tabulación del párrafo",formatPara:"Cambiar estilo del bloque a párrafo (etiqueta P)",formatH1:"Cambiar estilo del bloque a H1",formatH2:"Cambiar estilo del bloque a H2",formatH3:"Cambiar estilo del bloque a H3",formatH4:"Cambiar estilo del bloque a H4",formatH5:"Cambiar estilo del bloque a H5",formatH6:"Cambiar estilo del bloque a H6",insertHorizontalRule:"Insertar línea horizontal","linkDialog.show":"Mostrar panel enlaces"},history:{undo:"Deshacer",redo:"Rehacer"},specialChar:{specialChar:"CARACTERES ESPECIALES",select:"Selecciona Caracteres especiales"}}})}(jQuery);PKf[�\ݕو��dist/lang/summernote-nb-NO.jsnu�[���(function($) { $.extend($.summernote.lang, { 'nb-NO': { font: { bold: 'Fet', italic: 'Kursiv', underline: 'Understrek', clear: 'Fjern formatering', height: 'Linjehøyde', name: 'Skrifttype', strikethrough: 'Gjennomstrek', subscript: 'Subscript', superscript: 'Superscript', size: 'Skriftstørrelse' }, image: { image: 'Bilde', insert: 'Sett inn bilde', resizeFull: 'Sett full størrelse', resizeHalf: 'Sett halv størrelse', resizeQuarter: 'Sett kvart størrelse', floatLeft: 'Flyt til venstre', floatRight: 'Flyt til høyre', floatNone: 'Fjern flyt', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Dra et bilde hit', dropImage: 'Drop image or Text', selectFromFiles: 'Velg fra filer', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Bilde-URL', remove: 'Fjern bilde', original: 'Original' }, video: { video: 'Video', videoLink: 'Videolenke', insert: 'Sett inn video', url: 'Video-URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' }, link: { link: 'Lenke', insert: 'Sett inn lenke', unlink: 'Fjern lenke', edit: 'Rediger', textToDisplay: 'Visningstekst', url: 'Til hvilken URL skal denne lenken peke?', openInNewWindow: 'Åpne i nytt vindu' }, table: { table: 'Tabell', 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: 'Sett inn horisontal linje' }, style: { style: 'Stil', p: 'p', blockquote: 'Sitat', pre: 'Kode', h1: 'Overskrift 1', h2: 'Overskrift 2', h3: 'Overskrift 3', h4: 'Overskrift 4', h5: 'Overskrift 5', h6: 'Overskrift 6' }, lists: { unordered: 'Punktliste', ordered: 'Nummerert liste' }, options: { help: 'Hjelp', fullscreen: 'Fullskjerm', codeview: 'HTML-visning' }, paragraph: { paragraph: 'Avsnitt', outdent: 'Tilbakerykk', indent: 'Innrykk', left: 'Venstrejustert', center: 'Midtstilt', right: 'Høyrejustert', justify: 'Blokkjustert' }, color: { recent: 'Nylig valgt farge', more: 'Flere farger', background: 'Bakgrunnsfarge', foreground: 'Skriftfarge', transparent: 'Gjennomsiktig', setTransparent: 'Sett gjennomsiktig', reset: 'Nullstill', resetToDefault: 'Nullstill til standard' }, shortcut: { shortcuts: 'Hurtigtaster', close: 'Lukk', textFormatting: 'Tekstformatering', action: 'Handling', paragraphFormatting: 'Avsnittsformatering', documentStyle: 'Dokumentstil' }, 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: 'Angre', redo: 'Gjør om' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�5H�++!dist/lang/summernote-ru-RU.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ru-RU":{font:{bold:"Полужирный",italic:"Курсив",underline:"Подчёркнутый",clear:"Убрать стили шрифта",height:"Высота линии",name:"Шрифт",strikethrough:"Зачёркнутый",subscript:"Нижний индекс",superscript:"Верхний индекс",size:"Размер шрифта"},image:{image:"Картинка",insert:"Вставить картинку",resizeFull:"Восстановить размер",resizeHalf:"Уменьшить до 50%",resizeQuarter:"Уменьшить до 25%",floatLeft:"Расположить слева",floatRight:"Расположить справа",floatNone:"Расположение по-умолчанию",shapeRounded:"Форма: Закругленная",shapeCircle:"Форма: Круг",shapeThumbnail:"Форма: Миниатюра",shapeNone:"Форма: Нет",dragImageHere:"Перетащите сюда картинку",dropImage:"Перетащите картинку",selectFromFiles:"Выбрать из файлов",maximumFileSize:"Максимальный размер файла",maximumFileSizeError:"Превышен максимальный размер файла",url:"URL картинки",remove:"Удалить картинку",original:"Оригинал"},video:{video:"Видео",videoLink:"Ссылка на видео",insert:"Вставить видео",url:"URL видео",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)"},link:{link:"Ссылка",insert:"Вставить ссылку",unlink:"Убрать ссылку",edit:"Редактировать",textToDisplay:"Отображаемый текст",url:"URL для перехода",openInNewWindow:"Открывать в новом окне"},table:{table:"Таблица",addRowAbove:"Добавить строку выше",addRowBelow:"Добавить строку ниже",addColLeft:"Добавить столбец слева",addColRight:"Добавить столбец справа",delRow:"Удалить строку",delCol:"Удалить столбец",delTable:"Удалить таблицу"},hr:{insert:"Вставить горизонтальную линию"},style:{style:"Стиль",p:"Нормальный",blockquote:"Цитата",pre:"Код",h1:"Заголовок 1",h2:"Заголовок 2",h3:"Заголовок 3",h4:"Заголовок 4",h5:"Заголовок 5",h6:"Заголовок 6"},lists:{unordered:"Маркированный список",ordered:"Нумерованный список"},options:{help:"Помощь",fullscreen:"На весь экран",codeview:"Исходный код"},paragraph:{paragraph:"Параграф",outdent:"Уменьшить отступ",indent:"Увеличить отступ",left:"Выровнять по левому краю",center:"Выровнять по центру",right:"Выровнять по правому краю",justify:"Растянуть по ширине"},color:{recent:"Последний цвет",more:"Еще цвета",background:"Цвет фона",foreground:"Цвет шрифта",transparent:"Прозрачный",setTransparent:"Сделать прозрачным",reset:"Сброс",resetToDefault:"Восстановить умолчания"},shortcut:{shortcuts:"Сочетания клавиш",close:"Закрыть",textFormatting:"Форматирование текста",action:"Действие",paragraphFormatting:"Форматирование параграфа",documentStyle:"Стиль документа",extraKeys:"Дополнительные комбинации"},help:{insertParagraph:"Новый параграф",undo:"Отменить последнюю команду",redo:"Повторить последнюю команду",tab:"Tab",untab:"Untab",bold:'Установить стиль "Жирный"',italic:'Установить стиль "Наклонный"',underline:'Установить стиль "Подчеркнутый"',strikethrough:'Установить стиль "Зачеркнутый"',removeFormat:"Сборсить стили",justifyLeft:"Выровнять по левому краю",justifyCenter:"Выровнять по центру",justifyRight:"Выровнять по правому краю",justifyFull:"Растянуть на всю ширину",insertUnorderedList:"Включить/отключить маркированный список",insertOrderedList:"Включить/отключить нумерованный список",outdent:"Убрать отступ в текущем параграфе",indent:"Вставить отступ в текущем параграфе",formatPara:"Форматировать текущий блок как параграф (тег P)",formatH1:"Форматировать текущий блок как H1",formatH2:"Форматировать текущий блок как H2",formatH3:"Форматировать текущий блок как H3",formatH4:"Форматировать текущий блок как H4",formatH5:"Форматировать текущий блок как H5",formatH6:"Форматировать текущий блок как H6",insertHorizontalRule:"Вставить горизонтальную черту","linkDialog.show":'Показать диалог "Ссылка"'},history:{undo:"Отменить",redo:"Повтор"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\5r���dist/lang/summernote-sr-RS.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sr-RS': { font: { bold: 'Подебљано', italic: 'Курзив', underline: 'Подвучено', clear: 'Уклони стилове фонта', height: 'Висина линије', name: 'Font Family', strikethrough: 'Прецртано', subscript: 'Subscript', superscript: 'Superscript', size: 'Величина фонта' }, image: { image: 'Слика', insert: 'Уметни слику', resizeFull: 'Пуна величина', resizeHalf: 'Умањи на 50%', resizeQuarter: 'Умањи на 25%', floatLeft: 'Уз леву ивицу', floatRight: 'Уз десну ивицу', floatNone: 'Без равнања', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Превуци слику овде', dropImage: 'Drop image or Text', selectFromFiles: 'Изабери из датотеке', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Адреса слике', remove: 'Уклони слику', original: 'Original' }, video: { video: 'Видео', videoLink: 'Веза ка видеу', insert: 'Уметни видео', url: 'URL видео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' }, link: { link: 'Веза', insert: 'Уметни везу', unlink: 'Уклони везу', edit: 'Уреди', textToDisplay: 'Текст за приказ', url: 'Интернет адреса', openInNewWindow: 'Отвори у новом прозору' }, 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: 'Уметни хоризонталну линију' }, style: { style: 'Стил', p: 'Нормални', blockquote: 'Цитат', pre: 'Код', h1: 'Заглавље 1', h2: 'Заглавље 2', h3: 'Заглавље 3', h4: 'Заглавље 4', h5: 'Заглавље 5', h6: 'Заглавље 6' }, lists: { unordered: 'Обична листа', ordered: 'Нумерисана листа' }, options: { help: 'Помоћ', fullscreen: 'Преко целог екрана', codeview: 'Изворни код' }, paragraph: { paragraph: 'Параграф', outdent: 'Смањи увлачење', indent: 'Повечај увлачење', left: 'Поравнај у лево', center: 'Центрирано', right: 'Поравнај у десно', justify: 'Поравнај обострано' }, color: { recent: 'Последња боја', more: 'Више боја', background: 'Боја позадине', foreground: 'Боја текста', transparent: 'Провидна', setTransparent: 'Провидна', reset: 'Опозив', resetToDefault: 'Подразумевана' }, shortcut: { shortcuts: 'Пречице са тастатуре', close: 'Затвори', textFormatting: 'Форматирање текста', action: 'Акција', paragraphFormatting: 'Форматирање параграфа', documentStyle: 'Стил документа', extraKeys: 'Додатне комбинације' }, 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: 'Поништи', redo: 'Понови' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\[�^^!dist/lang/summernote-tr-TR.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(a){a.extend(a.summernote.lang,{"tr-TR":{font:{bold:"Kalın",italic:"İtalik",underline:"Altı çizili",clear:"Temizle",height:"Satır yüksekliği",name:"Yazı Tipi",strikethrough:"Üstü çizili",subscript:"Alt Simge",superscript:"Üst Simge",size:"Yazı tipi boyutu"},image:{image:"Resim",insert:"Resim ekle",resizeFull:"Orjinal boyut",resizeHalf:"1/2 boyut",resizeQuarter:"1/4 boyut",floatLeft:"Sola hizala",floatRight:"Sağa hizala",floatNone:"Hizalamayı kaldır",shapeRounded:"Şekil: Yuvarlatılmış Köşe",shapeCircle:"Şekil: Daire",shapeThumbnail:"Şekil: K.Resim",shapeNone:"Şekil: Yok",dragImageHere:"Buraya sürükleyin",dropImage:"Resim veya metni bırakın",selectFromFiles:"Dosya seçin",maximumFileSize:"Maksimum dosya boyutu",maximumFileSizeError:"Maksimum dosya boyutu aşıldı.",url:"Resim bağlantısı",remove:"Resimi Kaldır",original:"Original"},video:{video:"Video",videoLink:"Video bağlantısı",insert:"Video ekle",url:"Video bağlantısı?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)"},link:{link:"Bağlantı",insert:"Bağlantı ekle",unlink:"Bağlantıyı kaldır",edit:"Bağlantıyı düzenle",textToDisplay:"Görüntülemek için",url:"Bağlantı adresi?",openInNewWindow:"Yeni pencerede aç"},table:{table:"Tablo",addRowAbove:"Yukarı satır ekle",addRowBelow:"Aşağı satır ekle",addColLeft:"Sola sütun ekle",addColRight:"Sağa sütun ekle",delRow:"Satırı sil",delCol:"Sütunu sil",delTable:"Tabloyu sil"},hr:{insert:"Yatay çizgi ekle"},style:{style:"Biçim",p:"p",blockquote:"Alıntı",pre:"Önbiçimli",h1:"Başlık 1",h2:"Başlık 2",h3:"Başlık 3",h4:"Başlık 4",h5:"Başlık 5",h6:"Başlık 6"},lists:{unordered:"Madde işaretli liste",ordered:"Numaralı liste"},options:{help:"Yardım",fullscreen:"Tam ekran",codeview:"HTML Kodu"},paragraph:{paragraph:"Paragraf",outdent:"Girintiyi artır",indent:"Girintiyi azalt",left:"Sola hizala",center:"Ortaya hizala",right:"Sağa hizala",justify:"Yasla"},color:{recent:"Son renk",more:"Daha fazla renk",background:"Arka plan rengi",foreground:"Yazı rengi",transparent:"Seffaflık",setTransparent:"Şeffaflığı ayarla",reset:"Sıfırla",resetToDefault:"Varsayılanlara sıfırla"},shortcut:{shortcuts:"Kısayollar",close:"Kapat",textFormatting:"Yazı biçimlendirme",action:"Eylem",paragraphFormatting:"Paragraf biçimlendirme",documentStyle:"Biçim",extraKeys:"İlave anahtarlar"},help:{insertParagraph:"Paragraf ekler",undo:"Son komudu geri alır",redo:"Son komudu yineler",tab:"Girintiyi artırır",untab:"Girintiyi azaltır",bold:"Kalın yazma stilini ayarlar",italic:"İtalik yazma stilini ayarlar",underline:"Altı çizgili yazma stilini ayarlar",strikethrough:"Üstü çizgili yazma stilini ayarlar",removeFormat:"Biçimlendirmeyi temizler",justifyLeft:"Yazıyı sola hizalar",justifyCenter:"Yazıyı ortalar",justifyRight:"Yazıyı sağa hizalar",justifyFull:"Yazıyı her iki tarafa yazlar",insertUnorderedList:"Madde işaretli liste ekler",insertOrderedList:"Numaralı liste ekler",outdent:"Aktif paragrafın girintisini azaltır",indent:"Aktif paragrafın girintisini artırır",formatPara:"Aktif bloğun biçimini paragraf (p) olarak değiştirir",formatH1:"Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir",formatH2:"Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir",formatH3:"Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir",formatH4:"Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir",formatH5:"Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir",formatH6:"Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir",insertHorizontalRule:"Yatay çizgi ekler","linkDialog.show":"Bağlantı ayar kutusunu gösterir"},history:{undo:"Geri al",redo:"Yinele"},specialChar:{specialChar:"ÖZEL KARAKTERLER",select:"Özel Karakterleri seçin"}}})}(jQuery);PKf[�\��RR!dist/lang/summernote-th-TH.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"th-TH":{font:{bold:"ตัวหนา",italic:"ตัวเอียง",underline:"ขีดเส้นใต้",clear:"ล้างรูปแบบตัวอักษร",height:"ความสูงบรรทัด",name:"แบบตัวอักษร",strikethrough:"ขีดฆ่า",subscript:"ตัวห้อย",superscript:"ตัวยก",size:"ขนาดตัวอักษร"},image:{image:"รูปภาพ",insert:"แทรกรูปภาพ",resizeFull:"ปรับขนาดเท่าจริง",resizeHalf:"ปรับขนาดลง 50%",resizeQuarter:"ปรับขนาดลง 25%",floatLeft:"ชิดซ้าย",floatRight:"ชิดขวา",floatNone:"ไม่จัดตำแหน่ง",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"ลากรูปภาพที่ต้องการไว้ที่นี่",dropImage:"Drop image or Text",selectFromFiles:"เลือกไฟล์รูปภาพ",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"ที่อยู่ URL ของรูปภาพ",remove:"ลบรูปภาพ",original:"Original"},video:{video:"วีดีโอ",videoLink:"ลิงก์ของวีดีโอ",insert:"แทรกวีดีโอ",url:"ที่อยู่ URL ของวีดีโอ?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)"},link:{link:"ตัวเชื่อมโยง",insert:"แทรกตัวเชื่อมโยง",unlink:"ยกเลิกตัวเชื่อมโยง",edit:"แก้ไข",textToDisplay:"ข้อความที่ให้แสดง",url:"ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?",openInNewWindow:"เปิดในหน้าต่างใหม่"},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:"แทรกเส้นคั่น"},style:{style:"รูปแบบ",p:"ปกติ",blockquote:"ข้อความ",pre:"โค้ด",h1:"หัวข้อ 1",h2:"หัวข้อ 2",h3:"หัวข้อ 3",h4:"หัวข้อ 4",h5:"หัวข้อ 5",h6:"หัวข้อ 6"},lists:{unordered:"รายการแบบไม่มีลำดับ",ordered:"รายการแบบมีลำดับ"},options:{help:"ช่วยเหลือ",fullscreen:"ขยายเต็มหน้าจอ",codeview:"ซอร์สโค้ด"},paragraph:{paragraph:"ย่อหน้า",outdent:"เยื้องซ้าย",indent:"เยื้องขวา",left:"จัดหน้าชิดซ้าย",center:"จัดหน้ากึ่งกลาง",right:"จัดหน้าชิดขวา",justify:"จัดบรรทัดเสมอกัน"},color:{recent:"สีที่ใช้ล่าสุด",more:"สีอื่นๆ",background:"สีพื้นหลัง",foreground:"สีพื้นหน้า",transparent:"โปร่งแสง",setTransparent:"ตั้งค่าความโปร่งแสง",reset:"คืนค่า",resetToDefault:"คืนค่ามาตรฐาน"},shortcut:{shortcuts:"แป้นลัด",close:"ปิด",textFormatting:"การจัดรูปแบบข้อความ",action:"การกระทำ",paragraphFormatting:"การจัดรูปแบบย่อหน้า",documentStyle:"รูปแบบของเอกสาร",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:"ยกเลิกการกระทำ",redo:"ทำซ้ำการกระทำ"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\uS)�OO!dist/lang/summernote-uk-UA.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"uk-UA":{font:{bold:"Напівжирний",italic:"Курсив",underline:"Підкреслений",clear:"Прибрати стилі шрифту",height:"Висота лінії",name:"Шрифт",strikethrough:"Закреслений",subscript:"Нижній індекс",superscript:"Верхній індекс",size:"Розмір шрифту"},image:{image:"Картинка",insert:"Вставити картинку",resizeFull:"Відновити розмір",resizeHalf:"Зменшити до 50%",resizeQuarter:"Зменшити до 25%",floatLeft:"Розташувати ліворуч",floatRight:"Розташувати праворуч",floatNone:"Початкове розташування",shapeRounded:"Форма: Заокруглена",shapeCircle:"Форма: Коло",shapeThumbnail:"Форма: Мініатюра",shapeNone:"Форма: Немає",dragImageHere:"Перетягніть сюди картинку",dropImage:"Перетягніть картинку",selectFromFiles:"Вибрати з файлів",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL картинки",remove:"Видалити картинку",original:"Original"},video:{video:"Відео",videoLink:"Посилання на відео",insert:"Вставити відео",url:"URL відео",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)"},link:{link:"Посилання",insert:"Вставити посилання",unlink:"Прибрати посилання",edit:"Редагувати",textToDisplay:"Текст, що відображається",url:"URL для переходу",openInNewWindow:"Відкривати у новому вікні"},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:"Вставити горизонтальну лінію"},style:{style:"Стиль",p:"Нормальний",blockquote:"Цитата",pre:"Код",h1:"Заголовок 1",h2:"Заголовок 2",h3:"Заголовок 3",h4:"Заголовок 4",h5:"Заголовок 5",h6:"Заголовок 6"},lists:{unordered:"Маркований список",ordered:"Нумерований список"},options:{help:"Допомога",fullscreen:"На весь екран",codeview:"Початковий код"},paragraph:{paragraph:"Параграф",outdent:"Зменшити відступ",indent:"Збільшити відступ",left:"Вирівняти по лівому краю",center:"Вирівняти по центру",right:"Вирівняти по правому краю",justify:"Розтягнути по ширині"},color:{recent:"Останній колір",more:"Ще кольори",background:"Колір фону",foreground:"Колір шрифту",transparent:"Прозорий",setTransparent:"Зробити прозорим",reset:"Відновити",resetToDefault:"Відновити початкові"},shortcut:{shortcuts:"Комбінації клавіш",close:"Закрити",textFormatting:"Форматування тексту",action:"Дія",paragraphFormatting:"Форматування параграфу",documentStyle:"Стиль документу",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:"Відмінити",redo:"Повторити"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\��+�ZZdist/lang/summernote-zh-TW.jsnu�[���(function($) { $.extend($.summernote.lang, { 'zh-TW': { font: { bold: '粗體', italic: '斜體', underline: '底線', clear: '清除格式', height: '行高', name: '字體', strikethrough: '刪除線', subscript: '下標', superscript: '上標', size: '字號' }, image: { image: '圖片', insert: '插入圖片', resizeFull: '縮放至100%', resizeHalf: '縮放至 50%', resizeQuarter: '縮放至 25%', floatLeft: '靠左浮動', floatRight: '靠右浮動', floatNone: '取消浮動', shapeRounded: '形狀: 圓角', shapeCircle: '形狀: 圓', shapeThumbnail: '形狀: 縮略圖', shapeNone: '形狀: 無', dragImageHere: '將圖片拖曳至此處', dropImage: 'Drop image or Text', selectFromFiles: '從本機上傳', maximumFileSize: '文件大小最大值', maximumFileSizeError: '文件大小超出最大值。', url: '圖片網址', remove: '移除圖片', original: 'Original' }, video: { video: '影片', videoLink: '影片連結', insert: '插入影片', url: '影片網址', providers: '(優酷, Instagram, DailyMotion, Youtube等)' }, link: { link: '連結', insert: '插入連結', unlink: '取消連結', edit: '編輯連結', textToDisplay: '顯示文字', url: '連結網址', openInNewWindow: '在新視窗開啟' }, 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: '水平線' }, style: { style: '樣式', p: '一般', blockquote: '引用區塊', pre: '程式碼區塊', h1: '標題 1', h2: '標題 2', h3: '標題 3', h4: '標題 4', h5: '標題 5', h6: '標題 6' }, lists: { unordered: '項目清單', ordered: '編號清單' }, options: { help: '幫助', fullscreen: '全螢幕', codeview: '原始碼' }, paragraph: { paragraph: '段落', outdent: '取消縮排', indent: '增加縮排', left: '靠右對齊', center: '靠中對齊', right: '靠右對齊', justify: '左右對齊' }, color: { recent: '字型顏色', more: '更多', background: '背景', foreground: '前景', transparent: '透明', setTransparent: '透明', reset: '重設', resetToDefault: '默認' }, shortcut: { shortcuts: '快捷鍵', close: '關閉', textFormatting: '文字格式', action: '動作', paragraphFormatting: '段落格式', documentStyle: '文件格式', extraKeys: '額外按鍵' }, 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: '復原', redo: '取消復原' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\8N�kkdist/lang/summernote-uk-UA.jsnu�[���(function($) { $.extend($.summernote.lang, { 'uk-UA': { font: { bold: 'Напівжирний', italic: 'Курсив', underline: 'Підкреслений', clear: 'Прибрати стилі шрифту', height: 'Висота лінії', name: 'Шрифт', strikethrough: 'Закреслений', subscript: 'Нижній індекс', superscript: 'Верхній індекс', size: 'Розмір шрифту' }, image: { image: 'Картинка', insert: 'Вставити картинку', resizeFull: 'Відновити розмір', resizeHalf: 'Зменшити до 50%', resizeQuarter: 'Зменшити до 25%', floatLeft: 'Розташувати ліворуч', floatRight: 'Розташувати праворуч', floatNone: 'Початкове розташування', shapeRounded: 'Форма: Заокруглена', shapeCircle: 'Форма: Коло', shapeThumbnail: 'Форма: Мініатюра', shapeNone: 'Форма: Немає', dragImageHere: 'Перетягніть сюди картинку', dropImage: 'Перетягніть картинку', selectFromFiles: 'Вибрати з файлів', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL картинки', remove: 'Видалити картинку', original: 'Original' }, video: { video: 'Відео', videoLink: 'Посилання на відео', insert: 'Вставити відео', url: 'URL відео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)' }, link: { link: 'Посилання', insert: 'Вставити посилання', unlink: 'Прибрати посилання', edit: 'Редагувати', textToDisplay: 'Текст, що відображається', url: 'URL для переходу', openInNewWindow: 'Відкривати у новому вікні' }, 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: 'Вставити горизонтальну лінію' }, style: { style: 'Стиль', p: 'Нормальний', blockquote: 'Цитата', pre: 'Код', h1: 'Заголовок 1', h2: 'Заголовок 2', h3: 'Заголовок 3', h4: 'Заголовок 4', h5: 'Заголовок 5', h6: 'Заголовок 6' }, lists: { unordered: 'Маркований список', ordered: 'Нумерований список' }, options: { help: 'Допомога', fullscreen: 'На весь екран', codeview: 'Початковий код' }, paragraph: { paragraph: 'Параграф', outdent: 'Зменшити відступ', indent: 'Збільшити відступ', left: 'Вирівняти по лівому краю', center: 'Вирівняти по центру', right: 'Вирівняти по правому краю', justify: 'Розтягнути по ширині' }, color: { recent: 'Останній колір', more: 'Ще кольори', background: 'Колір фону', foreground: 'Колір шрифту', transparent: 'Прозорий', setTransparent: 'Зробити прозорим', reset: 'Відновити', resetToDefault: 'Відновити початкові' }, shortcut: { shortcuts: 'Комбінації клавіш', close: 'Закрити', textFormatting: 'Форматування тексту', action: 'Дія', paragraphFormatting: 'Форматування параграфу', documentStyle: 'Стиль документу', 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: 'Відмінити', redo: 'Повторити' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\@�T;!dist/lang/summernote-pl-PL.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"pl-PL":{font:{bold:"Pogrubienie",italic:"Pochylenie",underline:"Podkreślenie",clear:"Usuń formatowanie",height:"Interlinia",name:"Czcionka",strikethrough:"Przekreślenie",subscript:"Indeks dolny",superscript:"Indeks górny",size:"Rozmiar"},image:{image:"Grafika",insert:"Wstaw grafikę",resizeFull:"Zmień rozmiar na 100%",resizeHalf:"Zmień rozmiar na 50%",resizeQuarter:"Zmień rozmiar na 25%",floatLeft:"Po lewej",floatRight:"Po prawej",floatNone:"Równo z tekstem",shapeRounded:"Kształt: zaokrąglone",shapeCircle:"Kształt: okrąg",shapeThumbnail:"Kształt: miniatura",shapeNone:"Kształt: brak",dragImageHere:"Przeciągnij grafikę lub tekst tutaj",dropImage:"Przeciągnij grafikę lub tekst",selectFromFiles:"Wybierz z dysku",maximumFileSize:"Limit wielkości pliku",maximumFileSizeError:"Przekroczono limit wielkości pliku.",url:"Adres URL grafiki",remove:"Usuń grafikę",original:"Original"},video:{video:"Wideo",videoLink:"Adres wideo",insert:"Wstaw wideo",url:"Adres wideo",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)"},link:{link:"Odnośnik",insert:"Wstaw odnośnik",unlink:"Usuń odnośnik",edit:"Edytuj",textToDisplay:"Tekst do wyświetlenia",url:"Na jaki adres URL powinien przenosić ten odnośnik?",openInNewWindow:"Otwórz w nowym oknie"},table:{table:"Tabela",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:"Wstaw poziomą linię"},style:{style:"Style",p:"pny",blockquote:"Cytat",pre:"Kod",h1:"Nagłówek 1",h2:"Nagłówek 2",h3:"Nagłówek 3",h4:"Nagłówek 4",h5:"Nagłówek 5",h6:"Nagłówek 6"},lists:{unordered:"Lista wypunktowana",ordered:"Lista numerowana"},options:{help:"Pomoc",fullscreen:"Pełny ekran",codeview:"Źródło"},paragraph:{paragraph:"Akapit",outdent:"Zmniejsz wcięcie",indent:"Zwiększ wcięcie",left:"Wyrównaj do lewej",center:"Wyrównaj do środka",right:"Wyrównaj do prawej",justify:"Wyrównaj do lewej i prawej"},color:{recent:"Ostani kolor",more:"Więcej kolorów",background:"Tło",foreground:"Czcionka",transparent:"Przeźroczysty",setTransparent:"Przeźroczyste",reset:"Reset",resetToDefault:"Domyślne"},shortcut:{shortcuts:"Skróty klawiaturowe",close:"Zamknij",textFormatting:"Formatowanie tekstu",action:"Akcja",paragraphFormatting:"Formatowanie akapitu",documentStyle:"Styl dokumentu",extraKeys:"Dodatkowe klawisze"},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:"Cofnij",redo:"Ponów"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\$����#dist/lang/summernote-sr-RS-Latin.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sr-RS': { font: { bold: 'Podebljano', italic: 'Kurziv', underline: 'Podvučeno', clear: 'Ukloni stilove fonta', height: 'Visina linije', name: 'Font Family', strikethrough: 'Precrtano', subscript: 'Subscript', superscript: 'Superscript', size: 'Veličina fonta' }, image: { image: 'Slika', insert: 'Umetni sliku', resizeFull: 'Puna veličina', resizeHalf: 'Umanji na 50%', resizeQuarter: 'Umanji na 25%', floatLeft: 'Uz levu ivicu', floatRight: 'Uz desnu ivicu', floatNone: 'Bez ravnanja', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Prevuci sliku ovde', dropImage: 'Drop image or Text', selectFromFiles: 'Izaberi iz datoteke', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Adresa slike', remove: 'Ukloni sliku', original: 'Original' }, video: { video: 'Video', videoLink: 'Veza ka videu', insert: 'Umetni video', url: 'URL video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)' }, link: { link: 'Veza', insert: 'Umetni vezu', unlink: 'Ukloni vezu', edit: 'Uredi', textToDisplay: 'Tekst za prikaz', url: 'Internet adresa', openInNewWindow: 'Otvori u novom prozoru' }, table: { table: 'Tabela', 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: 'Umetni horizontalnu liniju' }, style: { style: 'Stil', p: 'pni', blockquote: 'Citat', pre: 'Kod', h1: 'Zaglavlje 1', h2: 'Zaglavlje 2', h3: 'Zaglavlje 3', h4: 'Zaglavlje 4', h5: 'Zaglavlje 5', h6: 'Zaglavlje 6' }, lists: { unordered: 'Obična lista', ordered: 'Numerisana lista' }, options: { help: 'Pomoć', fullscreen: 'Preko celog ekrana', codeview: 'Izvorni kod' }, paragraph: { paragraph: 'Paragraf', outdent: 'Smanji uvlačenje', indent: 'Povečaj uvlačenje', left: 'Poravnaj u levo', center: 'Centrirano', right: 'Poravnaj u desno', justify: 'Poravnaj obostrano' }, color: { recent: 'Poslednja boja', more: 'Više boja', background: 'Boja pozadine', foreground: 'Boja teksta', transparent: 'Providna', setTransparent: 'Providna', reset: 'Opoziv', resetToDefault: 'Podrazumevana' }, shortcut: { shortcuts: 'Prečice sa tastature', close: 'Zatvori', textFormatting: 'Formatiranje teksta', action: 'Akcija', paragraphFormatting: 'Formatiranje paragrafa', documentStyle: 'Stil dokumenta', extraKeys: 'Dodatne kombinacije' }, 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: 'Poništi', redo: 'Ponovi' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�k-�II!dist/lang/summernote-sk-SK.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"sk-SK":{font:{bold:"Tučné",italic:"Kurzíva",underline:"Podčiarknutie",clear:"Odstrániť štýl písma",height:"Výška riadku",strikethrough:"Prečiarknuté",subscript:"Subscript",superscript:"Superscript",size:"Veľkosť písma"},image:{image:"Obrázok",insert:"Vložiť obrázok",resizeFull:"Pôvodná veľkosť",resizeHalf:"Polovičná veľkosť",resizeQuarter:"Štvrtinová veľkosť",floatLeft:"Umiestniť doľava",floatRight:"Umiestniť doprava",floatNone:"Bez zarovnania",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Pretiahnuť sem obrázok",dropImage:"Drop image or Text",selectFromFiles:"Vybrať súbor",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"URL obrázku",remove:"Remove Image",original:"Original"},video:{video:"Video",videoLink:"Odkaz videa",insert:"Vložiť video",url:"URL videa?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)"},link:{link:"Odkaz",insert:"Vytvoriť odkaz",unlink:"Zrušiť odkaz",edit:"Upraviť",textToDisplay:"Zobrazovaný text",url:"Na akú URL adresu má tento odkaz viesť?",openInNewWindow:"Otvoriť v novom okne"},table:{table:"Tabuľka",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:"Vložit vodorovnú čiaru"},style:{style:"Štýl",p:"Normálny",blockquote:"Citácia",pre:"Kód",h1:"Nadpis 1",h2:"Nadpis 2",h3:"Nadpis 3",h4:"Nadpis 4",h5:"Nadpis 5",h6:"Nadpis 6"},lists:{unordered:"Odrážkový zoznam",ordered:"Číselný zoznam"},options:{help:"Pomoc",fullscreen:"Celá obrazovka",codeview:"HTML kód"},paragraph:{paragraph:"Odsek",outdent:"Zväčšiť odsadenie",indent:"Zmenšiť odsadenie",left:"Zarovnať doľava",center:"Zarovnať na stred",right:"Zarovnať doprava",justify:"Zarovnať obojstranne"},color:{recent:"Aktuálna farba",more:"Dalšie farby",background:"Farba pozadia",foreground:"Farba písma",transparent:"Priehľadnosť",setTransparent:"Nastaviť priehľadnosť",reset:"Obnoviť",resetToDefault:"Obnoviť prednastavené"},shortcut:{shortcuts:"Klávesové skratky",close:"Zavrieť",textFormatting:"Formátovanie textu",action:"Akcia",paragraphFormatting:"Formátovanie odseku",documentStyle:"Štýl dokumentu"},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:"Krok vzad",redo:"Krok dopredu"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\�{�� !dist/lang/summernote-lt-LT.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(a){a.extend(a.summernote.lang,{"lt-LT":{font:{bold:"Paryškintas",italic:"Kursyvas",underline:"Pabrėžtas",clear:"Be formatavimo",height:"Eilutės aukštis",name:"Šrifto pavadinimas",strikethrough:"Perbrauktas",superscript:"Viršutinis",subscript:"Indeksas",size:"Šrifto dydis"},image:{image:"Paveikslėlis",insert:"Įterpti paveikslėlį",resizeFull:"Pilnas dydis",resizeHalf:"Sumažinti dydį 50%",resizeQuarter:"Sumažinti dydį 25%",floatLeft:"Kairinis lygiavimas",floatRight:"Dešininis lygiavimas",floatNone:"Jokio lygiavimo",shapeRounded:"Forma: apvalūs kraštai",shapeCircle:"Forma: apskritimas",shapeThumbnail:"Forma: miniatiūra",shapeNone:"Forma: jokia",dragImageHere:"Vilkite paveikslėlį čia",dropImage:"Drop image or Text",selectFromFiles:"Pasirinkite failą",maximumFileSize:"Maskimalus failo dydis",maximumFileSizeError:"Maskimalus failo dydis viršytas!",url:"Paveikslėlio URL adresas",remove:"Ištrinti paveikslėlį",original:"Original"},video:{video:"Video",videoLink:"Video Link",insert:"Insert Video",url:"Video URL?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)"},link:{link:"Nuoroda",insert:"Įterpti nuorodą",unlink:"Pašalinti nuorodą",edit:"Redaguoti",textToDisplay:"Rodomas tekstas",url:"Koks URL adresas yra susietas?",openInNewWindow:"Atidaryti naujame lange"},table:{table:"Lentelė",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:"Įterpti horizontalią liniją"},style:{style:"Stilius",p:"pus",blockquote:"Citata",pre:"Kodas",h1:"Antraštė 1",h2:"Antraštė 2",h3:"Antraštė 3",h4:"Antraštė 4",h5:"Antraštė 5",h6:"Antraštė 6"},lists:{unordered:"Suženklintasis sąrašas",ordered:"Sunumeruotas sąrašas"},options:{help:"Pagalba",fullscreen:"Viso ekrano režimas",codeview:"HTML kodo peržiūra"},paragraph:{paragraph:"Pastraipa",outdent:"Sumažinti įtrauką",indent:"Padidinti įtrauką",left:"Kairinė lygiuotė",center:"Centrinė lygiuotė",right:"Dešininė lygiuotė",justify:"Abipusis išlyginimas"},color:{recent:"Paskutinė naudota spalva",more:"Daugiau spalvų",background:"Fono spalva",foreground:"Šrifto spalva",transparent:"Permatoma",setTransparent:"Nustatyti skaidrumo intensyvumą",reset:"Atkurti",resetToDefault:"Atstatyti numatytąją spalvą"},shortcut:{shortcuts:"Spartieji klavišai",close:"Uždaryti",textFormatting:"Teksto formatavimas",action:"Veiksmas",paragraphFormatting:"Pastraipos formatavimas",documentStyle:"Dokumento stilius",extraKeys:"Papildomi klavišų deriniai"},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:"Anuliuoti veiksmą",redo:"Perdaryti veiksmą"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\1��(nndist/lang/summernote-pt-BR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'pt-BR': { font: { bold: 'Negrito', italic: 'Itálico', underline: 'Sublinhado', clear: 'Remover estilo da fonte', height: 'Altura da linha', name: 'Fonte', strikethrough: 'Riscado', subscript: 'Subscript', superscript: 'Superscript', size: 'Tamanho da fonte' }, image: { image: 'Imagem', insert: 'Inserir imagem', resizeFull: 'Redimensionar Completamente', resizeHalf: 'Redimensionar pela Metade', resizeQuarter: 'Redimensionar um Quarto', floatLeft: 'Flutuar para Esquerda', floatRight: 'Flutuar para Direira', floatNone: 'Não Flutuar', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Arraste uma imagem para cá', dropImage: 'Drop image or Text', selectFromFiles: 'Selecione a partir dos arquivos', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL da imagem', remove: 'Remove Image', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Link para vídeo', insert: 'Inserir vídeo', url: 'URL do vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'Link', insert: 'Inserir link', unlink: 'Remover link', edit: 'Editar', textToDisplay: 'Texto para exibir', url: 'Para qual URL esse link leva?', openInNewWindow: 'Abrir em uma nova janela' }, table: { table: 'Tabela', addRowAbove: 'Adicionar linha acima', addRowBelow: 'Adicionar linha abaixo', addColLeft: 'Adicionar coluna a esquerda', addColRight: 'Adicionar coluna a direita', delRow: 'Excluir linha', delCol: 'Excluir coluna', delTable: 'Delete table' }, hr: { insert: 'Inserir linha horizontal' }, style: { style: 'Estilo', normal: 'Normal', blockquote: 'Citação', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista com marcadores', ordered: 'Lista numerada' }, options: { help: 'Ajuda', fullscreen: 'Tela cheia', codeview: 'Ver código-fonte' }, paragraph: { paragraph: 'Parágrafo', outdent: 'Menor tabulação', indent: 'Maior tabulação', left: 'Alinhar à esquerda', center: 'Alinhar ao centro', right: 'Alinha à direita', justify: 'Justificado' }, color: { recent: 'Cor recente', more: 'Mais cores', background: 'Fundo', foreground: 'Fonte', transparent: 'Transparente', setTransparent: 'Fundo transparente', reset: 'Restaurar', resetToDefault: 'Restaurar padrão' }, shortcut: { shortcuts: 'Atalhos do teclado', close: 'Fechar', textFormatting: 'Formatação de texto', action: 'Ação', paragraphFormatting: 'Formatação de parágrafo', documentStyle: 'Estilo de documento', extraKeys: 'Extra keys' }, help: { 'insertParagraph': 'Inserir Parágrafo', 'undo': 'Desfazer o último comando', 'redo': 'Refazer o último comando', 'tab': 'Tab', 'untab': 'Desfazer tab', 'bold': 'Colocar em negrito', 'italic': 'Colocar em itálico', 'underline': 'Sublinhado', 'strikethrough': 'Tachado', 'removeFormat': 'Remover estilo', 'justifyLeft': 'Alinhar à esquerda', 'justifyCenter': 'Centralizar', 'justifyRight': 'Alinhar à esquerda', 'justifyFull': 'Justificar', 'insertUnorderedList': 'Lista não ordenada', 'insertOrderedList': 'Lista ordenada', 'outdent': 'Recuar parágrafo atual', 'indent': 'Avançar parágrafo atual', 'formatPara': 'Alterar formato do bloco para parágrafo(tag P)', 'formatH1': 'Alterar formato do bloco para H1', 'formatH2': 'Alterar formato do bloco para H2', 'formatH3': 'Alterar formato do bloco para H3', 'formatH4': 'Alterar formato do bloco para H4', 'formatH5': 'Alterar formato do bloco para H5', 'formatH6': 'Alterar formato do bloco para H6', 'insertHorizontalRule': 'Inserir régua horizontal', 'linkDialog.show': 'Inserir um Hiperlink' }, history: { undo: 'Desfazer', redo: 'Refazer' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\%J���dist/lang/summernote-hr-HR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'hr-HR': { font: { bold: 'Podebljano', italic: 'Kurziv', underline: 'Podvučeno', clear: 'Ukloni stilove fonta', height: 'Visina linije', name: 'Font Family', strikethrough: 'Precrtano', subscript: 'Subscript', superscript: 'Superscript', size: 'Veličina fonta' }, image: { image: 'Slika', insert: 'Ubaci sliku', resizeFull: 'Puna veličina', resizeHalf: 'Umanji na 50%', resizeQuarter: 'Umanji na 25%', floatLeft: 'Poravnaj lijevo', floatRight: 'Poravnaj desno', floatNone: 'Bez poravnanja', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Povuci sliku ovdje', dropImage: 'Drop image or Text', selectFromFiles: 'Izaberi iz datoteke', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Adresa slike', remove: 'Ukloni sliku', original: 'Original' }, video: { video: 'Video', videoLink: 'Veza na video', insert: 'Ubaci video', url: 'URL video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)' }, link: { link: 'Veza', insert: 'Ubaci vezu', unlink: 'Ukloni vezu', edit: 'Uredi', textToDisplay: 'Tekst za prikaz', url: 'Internet adresa', openInNewWindow: 'Otvori u novom prozoru' }, table: { table: 'Tablica', 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: 'Ubaci horizontalnu liniju' }, style: { style: 'Stil', p: 'pni', blockquote: 'Citat', pre: 'Kôd', h1: 'Naslov 1', h2: 'Naslov 2', h3: 'Naslov 3', h4: 'Naslov 4', h5: 'Naslov 5', h6: 'Naslov 6' }, lists: { unordered: 'Obična lista', ordered: 'Numerirana lista' }, options: { help: 'Pomoć', fullscreen: 'Preko cijelog ekrana', codeview: 'Izvorni kôd' }, paragraph: { paragraph: 'Paragraf', outdent: 'Smanji uvlačenje', indent: 'Povećaj uvlačenje', left: 'Poravnaj lijevo', center: 'Centrirano', right: 'Poravnaj desno', justify: 'Poravnaj obostrano' }, color: { recent: 'Posljednja boja', more: 'Više boja', background: 'Boja pozadine', foreground: 'Boja teksta', transparent: 'Prozirna', setTransparent: 'Prozirna', reset: 'Poništi', resetToDefault: 'Podrazumijevana' }, shortcut: { shortcuts: 'Prečice s tipkovnice', close: 'Zatvori', textFormatting: 'Formatiranje teksta', action: 'Akcija', paragraphFormatting: 'Formatiranje paragrafa', documentStyle: 'Stil dokumenta', extraKeys: 'Dodatne kombinacije' }, 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: 'Poništi', redo: 'Ponovi' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\��0v!dist/lang/summernote-he-IL.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"he-IL":{font:{bold:"מודגש",italic:"נטוי",underline:"קו תחתון",clear:"נקה עיצוב",height:"גובה",name:"גופן",strikethrough:"קו חוצה",subscript:"כתב תחתי",superscript:"כתב עילי",size:"גודל גופן"},image:{image:"תמונה",insert:"הוסף תמונה",resizeFull:"גודל מלא",resizeHalf:"להקטין לחצי",resizeQuarter:"להקטין לרבע",floatLeft:"יישור לשמאל",floatRight:"יישור לימין",floatNone:"ישר",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"גרור תמונה לכאן",dropImage:"Drop image or Text",selectFromFiles:"בחר מתוך קבצים",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"נתיב לתמונה",remove:"הסר תמונה",original:"Original"},video:{video:"סרטון",videoLink:"קישור לסרטון",insert:"הוסף סרטון",url:"קישור לסרטון",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)"},link:{link:"קישור",insert:"הוסף קישור",unlink:"הסר קישור",edit:"ערוך",textToDisplay:"טקסט להציג",url:"קישור",openInNewWindow:"פתח בחלון חדש"},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:"הוסף קו"},style:{style:"עיצוב",p:"טקסט רגיל",blockquote:"ציטוט",pre:"קוד",h1:"כותרת 1",h2:"כותרת 2",h3:"כותרת 3",h4:"כותרת 4",h5:"כותרת 5",h6:"כותרת 6"},lists:{unordered:"רשימת תבליטים",ordered:"רשימה ממוספרת"},options:{help:"עזרה",fullscreen:"מסך מלא",codeview:"תצוגת קוד"},paragraph:{paragraph:"פסקה",outdent:"הקטן כניסה",indent:"הגדל כניסה",left:"יישור לשמאל",center:"יישור למרכז",right:"יישור לימין",justify:"מיושר"},color:{recent:"צבע טקסט אחרון",more:"עוד צבעים",background:"צבע רקע",foreground:"צבע טקסט",transparent:"שקוף",setTransparent:"קבע כשקוף",reset:"איפוס",resetToDefault:"אפס לברירת מחדל"},shortcut:{shortcuts:"קיצורי מקלדת",close:"סגור",textFormatting:"עיצוב הטקסט",action:"פעולה",paragraphFormatting:"סגנונות פסקה",documentStyle:"עיצוב המסמך",extraKeys:"קיצורים נוספים"},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:"בטל פעולה",redo:"בצע שוב"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\0����!dist/lang/summernote-ca-ES.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ca-ES":{font:{bold:"Negreta",italic:"Cursiva",underline:"Subratllat",clear:"Treure estil de lletra",height:"Alçada de línia",name:"Font",strikethrough:"Ratllat",subscript:"Subíndex",superscript:"Superíndex",size:"Mida de lletra"},image:{image:"Imatge",insert:"Inserir imatge",resizeFull:"Redimensionar a mida completa",resizeHalf:"Redimensionar a la meitat",resizeQuarter:"Redimensionar a un quart",floatLeft:"Alinear a l'esquerra",floatRight:"Alinear a la dreta",floatNone:"No alinear",shapeRounded:"Forma: Arrodonit",shapeCircle:"Forma: Cercle",shapeThumbnail:"Forma: Marc",shapeNone:"Forma: Cap",dragImageHere:"Arrossegueu una imatge o text aquí",dropImage:"Deixa anar aquí una imatge o un text",selectFromFiles:"Seleccioneu des dels arxius",maximumFileSize:"Mida màxima de l'arxiu",maximumFileSizeError:"La mida màxima de l'arxiu s'ha superat.",url:"URL de la imatge",remove:"Eliminar imatge",original:"Original"},video:{video:"Vídeo",videoLink:"Enllaç del vídeo",insert:"Inserir vídeo",url:"URL del vídeo?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)"},link:{link:"Enllaç",insert:"Inserir enllaç",unlink:"Treure enllaç",edit:"Editar",textToDisplay:"Text per mostrar",url:"Cap a quina URL porta l'enllaç?",openInNewWindow:"Obrir en una finestra nova"},table:{table:"Taula",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:"Inserir línia horitzontal"},style:{style:"Estil",p:"p",blockquote:"Cita",pre:"Codi",h1:"Títol 1",h2:"Títol 2",h3:"Títol 3",h4:"Títol 4",h5:"Títol 5",h6:"Títol 6"},lists:{unordered:"Llista desendreçada",ordered:"Llista endreçada"},options:{help:"Ajut",fullscreen:"Pantalla sencera",codeview:"Veure codi font"},paragraph:{paragraph:"Paràgraf",outdent:"Menys tabulació",indent:"Més tabulació",left:"Alinear a l'esquerra",center:"Alinear al mig",right:"Alinear a la dreta",justify:"Justificar"},color:{recent:"Últim color",more:"Més colors",background:"Color de fons",foreground:"Color de lletra",transparent:"Transparent",setTransparent:"Establir transparent",reset:"Restablir",resetToDefault:"Restablir per defecte"},shortcut:{shortcuts:"Dreceres de teclat",close:"Tancar",textFormatting:"Format de text",action:"Acció",paragraphFormatting:"Format de paràgraf",documentStyle:"Estil del document",extraKeys:"Tecles adicionals"},help:{insertParagraph:"Inserir paràgraf",undo:"Desfer l'última acció",redo:"Refer l'última acció",tab:"Tabular",untab:"Eliminar tabulació",bold:"Establir estil negreta",italic:"Establir estil cursiva",underline:"Establir estil subratllat",strikethrough:"Establir estil ratllat",removeFormat:"Netejar estil",justifyLeft:"Alinear a l'esquerra",justifyCenter:"Alinear al centre",justifyRight:"Alinear a la dreta",justifyFull:"Justificar",insertUnorderedList:"Inserir llista desendreçada",insertOrderedList:"Inserir llista endreçada",outdent:"Reduïr tabulació del paràgraf",indent:"Augmentar tabulació del paràgraf",formatPara:"Canviar l'estil del bloc com a un paràgraf (etiqueta P)",formatH1:"Canviar l'estil del bloc com a un H1",formatH2:"Canviar l'estil del bloc com a un H2",formatH3:"Canviar l'estil del bloc com a un H3",formatH4:"Canviar l'estil del bloc com a un H4",formatH5:"Canviar l'estil del bloc com a un H5",formatH6:"Canviar l'estil del bloc com a un H6",insertHorizontalRule:"Inserir una línia horitzontal","linkDialog.show":"Mostrar panel d'enllaços"},history:{undo:"Desfer",redo:"Refer"},specialChar:{specialChar:"CARÀCTERS ESPECIALS",select:"Selecciona caràcters especials"}}})}(jQuery);PKf[�\�MHy��dist/lang/summernote-id-ID.jsnu�[���(function($) { $.extend($.summernote.lang, { 'id-ID': { font: { bold: 'Tebal', italic: 'Miring', underline: 'Garis bawah', clear: 'Bersihkan gaya', height: 'Jarak baris', name: 'Font Family', strikethrough: 'Coret', subscript: 'Subscript', superscript: 'Superscript', size: 'Ukuran font' }, image: { image: 'Gambar', insert: 'Sisipkan gambar', resizeFull: 'Ukuran penuh', resizeHalf: 'Ukuran 50%', resizeQuarter: 'Ukuran 25%', floatLeft: 'Rata kiri', floatRight: 'Rata kanan', floatNone: 'Tidak ada perataan', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Tarik gambar pada area ini', dropImage: 'Drop image or Text', selectFromFiles: 'Pilih gambar dari berkas', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL gambar', remove: 'Hapus Gambar', original: 'Original' }, video: { video: 'Video', videoLink: 'Link video', insert: 'Sisipkan video', url: 'Tautan video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)' }, link: { link: 'Tautan', insert: 'Tambah tautan', unlink: 'Hapus tautan', edit: 'Edit', textToDisplay: 'Tampilan teks', url: 'Tautan tujuan', openInNewWindow: 'Buka di jendela baru' }, table: { table: 'Tabel', 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: 'Masukkan garis horizontal' }, style: { style: 'Gaya', p: 'p', blockquote: 'Kutipan', pre: 'Kode', h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', h4: 'Heading 4', h5: 'Heading 5', h6: 'Heading 6' }, lists: { unordered: 'Pencacahan', ordered: 'Penomoran' }, options: { help: 'Bantuan', fullscreen: 'Layar penuh', codeview: 'Kode HTML' }, paragraph: { paragraph: 'Paragraf', outdent: 'Outdent', indent: 'Indent', left: 'Rata kiri', center: 'Rata tengah', right: 'Rata kanan', justify: 'Rata kanan kiri' }, color: { recent: 'Warna sekarang', more: 'Selengkapnya', background: 'Warna latar', foreground: 'Warna font', transparent: 'Transparan', setTransparent: 'Atur transparansi', reset: 'Atur ulang', resetToDefault: 'Kembalikan kesemula' }, shortcut: { shortcuts: 'Jalan pintas', close: 'Keluar', textFormatting: 'Format teks', action: 'Aksi', paragraphFormatting: 'Format paragraf', documentStyle: 'Gaya dokumen', 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: 'Kembali', redo: 'Ulang' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\?�l�~~dist/lang/summernote-de-DE.jsnu�[���(function($) { $.extend($.summernote.lang, { 'de-DE': { font: { bold: 'Fett', italic: 'Kursiv', underline: 'Unterstreichen', clear: 'Zurücksetzen', height: 'Zeilenhöhe', name: 'Schriftart', strikethrough: 'Durchgestrichen', subscript: 'Tiefgestellt', superscript: 'Hochgestellt', size: 'Schriftgröße' }, image: { image: 'Grafik', insert: 'Grafik einfügen', resizeFull: 'Originalgröße', resizeHalf: 'Größe 1/2', resizeQuarter: 'Größe 1/4', floatLeft: 'Linksbündig', floatRight: 'Rechtsbündig', floatNone: 'Kein Textfluss', shapeRounded: 'Rahmen: Abgerundet', shapeCircle: 'Rahmen: Kreisförmig', shapeThumbnail: 'Rahmen: Thumbnail', shapeNone: 'Kein Rahmen', dragImageHere: 'Ziehen Sie ein Bild mit der Maus hierher', dropImage: 'Drop image or Text', selectFromFiles: 'Wählen Sie eine Datei aus', maximumFileSize: 'Maximale Dateigröße', maximumFileSizeError: 'Maximale Dateigröße überschritten', url: 'Grafik URL', remove: 'Grafik entfernen', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Video einfügen', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)' }, link: { link: 'Link', insert: 'Link einfügen', unlink: 'Link entfernen', edit: 'Editieren', textToDisplay: 'Anzeigetext', url: 'Ziel des Links?', openInNewWindow: 'In einem neuen Fenster öffnen' }, table: { table: 'Tabelle', addRowAbove: 'Zeile oberhalb einfügen', addRowBelow: 'Zeile unterhalb einfügen', addColLeft: 'Spalte links einfügen', addColRight: 'Spalte rechts einfügen', delRow: 'Zeile löschen', delCol: 'Spalte löschen', delTable: 'Tabelle löschen' }, hr: { insert: 'Eine horizontale Linie einfügen' }, style: { style: 'Stil', p: 'Normal', blockquote: 'Zitat', pre: 'Quellcode', h1: 'Überschrift 1', h2: 'Überschrift 2', h3: 'Überschrift 3', h4: 'Überschrift 4', h5: 'Überschrift 5', h6: 'Überschrift 6' }, lists: { unordered: 'Aufzählung', ordered: 'Nummerierung' }, options: { help: 'Hilfe', fullscreen: 'Vollbild', codeview: 'HTML-Code anzeigen' }, paragraph: { paragraph: 'Absatz', outdent: 'Einzug vergrößern', indent: 'Einzug verkleinern', left: 'Links ausrichten', center: 'Zentriert ausrichten', right: 'Rechts ausrichten', justify: 'Blocksatz' }, color: { recent: 'Letzte Farbe', more: 'Mehr Farben', background: 'Hintergrundfarbe', foreground: 'Schriftfarbe', transparent: 'Transparenz', setTransparent: 'Transparenz setzen', reset: 'Zurücksetzen', resetToDefault: 'Auf Standard zurücksetzen' }, shortcut: { shortcuts: 'Tastenkürzel', close: 'Schließen', textFormatting: 'Textformatierung', action: 'Aktion', paragraphFormatting: 'Absatzformatierung', documentStyle: 'Dokumentenstil' }, 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: 'Rückgängig', redo: 'Wiederholen' }, specialChar: { specialChar: 'SONDERZEICHEN', select: 'Sonderzeichen auswählen' } } }); })(jQuery); PKf[�\���Z��dist/lang/summernote-lt-LV.jsnu�[���(function($) { $.extend($.summernote.lang, { 'lv-LV': { font: { bold: 'Treknraksts', italic: 'Kursīvs', underline: 'Pasvītrots', clear: 'Noņemt formatējumu', height: 'Līnijas augstums', name: 'Fonts', strikethrough: 'Nosvītrots', superscript: 'Augšraksts', subscript: 'Apakšraksts', size: 'Fonta lielums' }, image: { image: 'Attēls', insert: 'Ievietot attēlu', resizeFull: 'Pilns izmērts', resizeHalf: 'Samazināt 50%', resizeQuarter: 'Samazināt 25%', floatLeft: 'Līdzināt pa kreisi', floatRight: 'Līdzināt pa labi', floatNone: 'Nelīdzināt', shapeRounded: 'Forma: apaļām malām', shapeCircle: 'Forma: aplis', shapeThumbnail: 'Forma: rāmītis', shapeNone: 'Forma: orģināla', dragImageHere: 'Ievēlciet attēlu šeit', dropImage: 'Drop image or Text', selectFromFiles: 'Izvēlēties failu', maximumFileSize: 'Maksimālais faila izmērs', maximumFileSizeError: 'Faila izmērs pārāk liels!', url: 'Attēla URL', remove: 'Dzēst attēlu', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Insert Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'Saite', insert: 'Ievietot saiti', unlink: 'Noņemt saiti', edit: 'Rediģēt', textToDisplay: 'Saites saturs', url: 'Koks URL adresas yra susietas?', openInNewWindow: 'Atvērt jaunā logā' }, table: { table: 'Tabula', 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: 'Ievietot līniju' }, style: { style: 'Stils', p: 'Parasts', blockquote: 'Citāts', pre: 'Kods', h1: 'Virsraksts h1', h2: 'Virsraksts h2', h3: 'Virsraksts h3', h4: 'Virsraksts h4', h5: 'Virsraksts h5', h6: 'Virsraksts h6' }, lists: { unordered: 'Nenumurēts saraksts', ordered: 'Numurēts saraksts' }, options: { help: 'Palīdzība', fullscreen: 'Pa visu ekrānu', codeview: 'HTML kods' }, paragraph: { paragraph: 'Paragrāfs', outdent: 'Samazināt atkāpi', indent: 'Palielināt atkāpi', left: 'Līdzināt pa kreisi', center: 'Centrēt', right: 'Līdzināt pa labi', justify: 'Līdzināt gar abām malām' }, color: { recent: 'Nesen izmantotās', more: 'Citas krāsas', background: 'Fona krāsa', foreground: 'Fonta krāsa', transparent: 'Caurspīdīgs', setTransparent: 'Iestatīt caurspīdīgumu', reset: 'Atjaunot', resetToDefault: 'Atjaunot noklusējumu' }, shortcut: { shortcuts: 'Saīsnes', close: 'Aizvērt', textFormatting: 'Teksta formatēšana', action: 'Darbība', paragraphFormatting: 'Paragrāfa formatēšana', documentStyle: 'Dokumenta stils', extraKeys: 'Citas taustiņu kombinācijas' }, help: { insertParagraph: 'Ievietot Paragrāfu', undo: 'Atcelt iepriekšējo darbību', redo: 'Atkārtot atcelto darbību', tab: 'Atkāpe', untab: 'Samazināt atkāpi', bold: 'Pārvērst tekstu treknrakstā', italic: 'Pārvērst tekstu slīprakstā (kursīvā)', underline: 'Pasvītrot tekstu', strikethrough: 'Nosvītrot tekstu', removeFormat: 'Notīrīt stilu no teksta', justifyLeft: 'Līdzīnāt saturu pa kreisi', justifyCenter: 'Centrēt saturu', justifyRight: 'Līdzīnāt saturu pa labi', justifyFull: 'Izlīdzināt saturu gar abām malām', insertUnorderedList: 'Ievietot nenumurētu sarakstu', insertOrderedList: 'Ievietot numurētu sarakstu', outdent: 'Samazināt/noņemt atkāpi paragrāfam', indent: 'Uzlikt atkāpi paragrāfam', formatPara: 'Mainīt bloka tipu uz (p) Paragrāfu', formatH1: 'Mainīt bloka tipu uz virsrakstu H1', formatH2: 'Mainīt bloka tipu uz virsrakstu H2', formatH3: 'Mainīt bloka tipu uz virsrakstu H3', formatH4: 'Mainīt bloka tipu uz virsrakstu H4', formatH5: 'Mainīt bloka tipu uz virsrakstu H5', formatH6: 'Mainīt bloka tipu uz virsrakstu H6', insertHorizontalRule: 'Ievietot horizontālu līniju', 'linkDialog.show': 'Parādīt saites logu' }, history: { undo: 'Atsauks (undo)', redo: 'Atkārtot (redo)' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\d�[���dist/lang/summernote-gl-ES.jsnu�[���(function($) { $.extend($.summernote.lang, { 'gl-ES': { font: { bold: 'Negrita', italic: 'Cursiva', underline: 'Subliñado', clear: 'Quitar estilo de fonte', height: 'Altura de liña', name: 'Fonte', strikethrough: 'Riscado', superscript: 'Superíndice', subscript: 'Subíndice', size: 'Tamaño da fonte' }, image: { image: 'Imaxe', insert: 'Inserir imaxe', resizeFull: 'Redimensionar a tamaño completo', resizeHalf: 'Redimensionar á metade', resizeQuarter: 'Redimensionar a un cuarto', floatLeft: 'Flotar á esquerda', floatRight: 'Flotar á dereita', floatNone: 'Non flotar', shapeRounded: 'Forma: Redondeado', shapeCircle: 'Forma: Círculo', shapeThumbnail: 'Forma: Marco', shapeNone: 'Forma: Ningunha', dragImageHere: 'Arrastrar unha imaxe ou texto aquí', dropImage: 'Solta a imaxe ou texto', selectFromFiles: 'Seleccionar desde os arquivos', maximumFileSize: 'Tamaño máximo do arquivo', maximumFileSizeError: 'Superaches o tamaño máximo do arquivo.', url: 'URL da imaxe', remove: 'Eliminar imaxe', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Ligazón do vídeo', insert: 'Insertar vídeo', url: 'URL do vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)' }, link: { link: 'Ligazón', insert: 'Inserir Ligazón', unlink: 'Quitar Ligazón', edit: 'Editar', textToDisplay: 'Texto para amosar', url: 'Cara a que URL leva a ligazón?', openInNewWindow: 'Abrir nunha nova xanela' }, table: { table: 'Táboa', 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: 'Inserir liña horizontal' }, style: { style: 'Estilo', normal: 'Normal', blockquote: 'Cita', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista desordenada', ordered: 'Lista ordenada' }, options: { help: 'Axuda', fullscreen: 'Pantalla completa', codeview: 'Ver código fonte' }, paragraph: { paragraph: 'Parágrafo', outdent: 'Menos tabulación', indent: 'Máis tabulación', left: 'Aliñar á esquerda', center: 'Aliñar ao centro', right: 'Aliñar á dereita', justify: 'Xustificar' }, color: { recent: 'Última cor', more: 'Máis cores', background: 'Cor de fondo', foreground: 'Cor de fuente', transparent: 'Transparente', setTransparent: 'Establecer transparente', reset: 'Restaurar', resetToDefault: 'Restaurar por defecto' }, shortcut: { shortcuts: 'Atallos de teclado', close: 'Pechar', textFormatting: 'Formato de texto', action: 'Acción', paragraphFormatting: 'Formato de parágrafo', documentStyle: 'Estilo de documento', extraKeys: 'Teclas adicionais' }, help: { 'insertParagraph': 'Inserir parágrafo', 'undo': 'Desfacer última acción', 'redo': 'Refacer última acción', 'tab': 'Tabular', 'untab': 'Eliminar tabulación', 'bold': 'Establecer estilo negrita', 'italic': 'Establecer estilo cursiva', 'underline': 'Establecer estilo subliñado', 'strikethrough': 'Establecer estilo riscado', 'removeFormat': 'Limpar estilo', 'justifyLeft': 'Aliñar á esquerda', 'justifyCenter': 'Aliñar ao centro', 'justifyRight': 'Aliñar á dereita', 'justifyFull': 'Xustificar', 'insertUnorderedList': 'Inserir lista desordenada', 'insertOrderedList': 'Inserir lista ordenada', 'outdent': 'Reducir tabulación do parágrafo', 'indent': 'Aumentar tabulación do parágrafo', 'formatPara': 'Mudar estilo do bloque a parágrafo (etiqueta P)', 'formatH1': 'Mudar estilo do bloque a H1', 'formatH2': 'Mudar estilo do bloque a H2', 'formatH3': 'Mudar estilo do bloque a H3', 'formatH4': 'Mudar estilo do bloque a H4', 'formatH5': 'Mudar estilo do bloque a H5', 'formatH6': 'Mudar estilo do bloque a H6', 'insertHorizontalRule': 'Inserir liña horizontal', 'linkDialog.show': 'Amosar panel ligazóns' }, history: { undo: 'Desfacer', redo: 'Refacer' }, specialChar: { specialChar: 'CARACTERES ESPECIAIS', select: 'Selecciona Caracteres especiais' } } }); })(jQuery); PKf[�\Q~�@@dist/lang/summernote-ru-RU.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ru-RU': { font: { bold: 'Полужирный', italic: 'Курсив', underline: 'Подчёркнутый', clear: 'Убрать стили шрифта', height: 'Высота линии', name: 'Шрифт', strikethrough: 'Зачёркнутый', subscript: 'Нижний индекс', superscript: 'Верхний индекс', size: 'Размер шрифта' }, image: { image: 'Картинка', insert: 'Вставить картинку', resizeFull: 'Восстановить размер', resizeHalf: 'Уменьшить до 50%', resizeQuarter: 'Уменьшить до 25%', floatLeft: 'Расположить слева', floatRight: 'Расположить справа', floatNone: 'Расположение по-умолчанию', shapeRounded: 'Форма: Закругленная', shapeCircle: 'Форма: Круг', shapeThumbnail: 'Форма: Миниатюра', shapeNone: 'Форма: Нет', dragImageHere: 'Перетащите сюда картинку', dropImage: 'Перетащите картинку', selectFromFiles: 'Выбрать из файлов', maximumFileSize: 'Максимальный размер файла', maximumFileSizeError: 'Превышен максимальный размер файла', url: 'URL картинки', remove: 'Удалить картинку', original: 'Оригинал' }, video: { video: 'Видео', videoLink: 'Ссылка на видео', insert: 'Вставить видео', url: 'URL видео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' }, link: { link: 'Ссылка', insert: 'Вставить ссылку', unlink: 'Убрать ссылку', edit: 'Редактировать', textToDisplay: 'Отображаемый текст', url: 'URL для перехода', openInNewWindow: 'Открывать в новом окне' }, table: { table: 'Таблица', addRowAbove: 'Добавить строку выше', addRowBelow: 'Добавить строку ниже', addColLeft: 'Добавить столбец слева', addColRight: 'Добавить столбец справа', delRow: 'Удалить строку', delCol: 'Удалить столбец', delTable: 'Удалить таблицу' }, hr: { insert: 'Вставить горизонтальную линию' }, style: { style: 'Стиль', p: 'Нормальный', blockquote: 'Цитата', pre: 'Код', h1: 'Заголовок 1', h2: 'Заголовок 2', h3: 'Заголовок 3', h4: 'Заголовок 4', h5: 'Заголовок 5', h6: 'Заголовок 6' }, lists: { unordered: 'Маркированный список', ordered: 'Нумерованный список' }, options: { help: 'Помощь', fullscreen: 'На весь экран', codeview: 'Исходный код' }, paragraph: { paragraph: 'Параграф', outdent: 'Уменьшить отступ', indent: 'Увеличить отступ', left: 'Выровнять по левому краю', center: 'Выровнять по центру', right: 'Выровнять по правому краю', justify: 'Растянуть по ширине' }, color: { recent: 'Последний цвет', more: 'Еще цвета', background: 'Цвет фона', foreground: 'Цвет шрифта', transparent: 'Прозрачный', setTransparent: 'Сделать прозрачным', reset: 'Сброс', resetToDefault: 'Восстановить умолчания' }, shortcut: { shortcuts: 'Сочетания клавиш', close: 'Закрыть', textFormatting: 'Форматирование текста', action: 'Действие', paragraphFormatting: 'Форматирование параграфа', documentStyle: 'Стиль документа', extraKeys: 'Дополнительные комбинации' }, help: { 'insertParagraph': 'Новый параграф', 'undo': 'Отменить последнюю команду', 'redo': 'Повторить последнюю команду', 'tab': 'Tab', 'untab': 'Untab', 'bold': 'Установить стиль "Жирный"', 'italic': 'Установить стиль "Наклонный"', 'underline': 'Установить стиль "Подчеркнутый"', 'strikethrough': 'Установить стиль "Зачеркнутый"', 'removeFormat': 'Сборсить стили', 'justifyLeft': 'Выровнять по левому краю', 'justifyCenter': 'Выровнять по центру', 'justifyRight': 'Выровнять по правому краю', 'justifyFull': 'Растянуть на всю ширину', 'insertUnorderedList': 'Включить/отключить маркированный список', 'insertOrderedList': 'Включить/отключить нумерованный список', 'outdent': 'Убрать отступ в текущем параграфе', 'indent': 'Вставить отступ в текущем параграфе', 'formatPara': 'Форматировать текущий блок как параграф (тег P)', 'formatH1': 'Форматировать текущий блок как H1', 'formatH2': 'Форматировать текущий блок как H2', 'formatH3': 'Форматировать текущий блок как H3', 'formatH4': 'Форматировать текущий блок как H4', 'formatH5': 'Форматировать текущий блок как H5', 'formatH6': 'Форматировать текущий блок как H6', 'insertHorizontalRule': 'Вставить горизонтальную черту', 'linkDialog.show': 'Показать диалог "Ссылка"' }, history: { undo: 'Отменить', redo: 'Повтор' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\���DDdist/lang/summernote-pt-PT.jsnu�[���(function($) { $.extend($.summernote.lang, { 'pt-PT': { font: { bold: 'Negrito', italic: 'Itálico', underline: 'Sublinhado', clear: 'Remover estilo da fonte', height: 'Altura da linha', name: 'Fonte', strikethrough: 'Riscado', subscript: 'Subscript', superscript: 'Superscript', size: 'Tamanho da fonte' }, image: { image: 'Imagem', insert: 'Inserir imagem', resizeFull: 'Redimensionar Completo', resizeHalf: 'Redimensionar Metade', resizeQuarter: 'Redimensionar Um Quarto', floatLeft: 'Float Esquerda', floatRight: 'Float Direita', floatNone: 'Sem Float', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Arraste uma imagem para aqui', dropImage: 'Drop image or Text', selectFromFiles: 'Selecione a partir dos arquivos', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Endereço da imagem', remove: 'Remove Image', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Link para vídeo', insert: 'Inserir vídeo', url: 'URL do vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'Link', insert: 'Inserir ligação', unlink: 'Remover ligação', edit: 'Editar', textToDisplay: 'Texto para exibir', url: 'Que endereço esta licação leva?', openInNewWindow: 'Abrir numa nova janela' }, table: { table: 'Tabela', 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: 'Inserir linha horizontal' }, style: { style: 'Estilo', p: 'p', blockquote: 'Citação', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista com marcadores', ordered: 'Lista numerada' }, options: { help: 'Ajuda', fullscreen: 'Janela Completa', codeview: 'Ver código-fonte' }, paragraph: { paragraph: 'Parágrafo', outdent: 'Menor tabulação', indent: 'Maior tabulação', left: 'Alinhar à esquerda', center: 'Alinhar ao centro', right: 'Alinha à direita', justify: 'Justificado' }, color: { recent: 'Cor recente', more: 'Mais cores', background: 'Fundo', foreground: 'Fonte', transparent: 'Transparente', setTransparent: 'Fundo transparente', reset: 'Restaurar', resetToDefault: 'Restaurar padrão' }, shortcut: { shortcuts: 'Atalhos do teclado', close: 'Fechar', textFormatting: 'Formatação de texto', action: 'Ação', paragraphFormatting: 'Formatação de parágrafo', documentStyle: 'Estilo de documento' }, 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: 'Desfazer', redo: 'Refazer' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\y�[dist/lang/summernote-ar-AR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ar-AR': { font: { bold: 'عريض', italic: 'مائل', underline: 'تحته خط', clear: 'مسح التنسيق', height: 'إرتفاع السطر', name: 'الخط', strikethrough: 'فى وسطه خط', subscript: 'مخطوطة', superscript: 'حرف فوقي', size: 'الحجم' }, image: { image: 'صورة', insert: 'إضافة صورة', resizeFull: 'الحجم بالكامل', resizeHalf: 'تصغير للنصف', resizeQuarter: 'تصغير للربع', floatLeft: 'تطيير لليسار', floatRight: 'تطيير لليمين', floatNone: 'ثابته', shapeRounded: 'الشكل: تقريب', shapeCircle: 'الشكل: دائرة', shapeThumbnail: 'الشكل: صورة مصغرة', shapeNone: 'الشكل: لا شيء', dragImageHere: 'إدرج الصورة هنا', dropImage: 'إسقاط صورة أو نص', selectFromFiles: 'حدد ملف', maximumFileSize: 'الحد الأقصى لحجم الملف', maximumFileSizeError: 'تم تجاوز الحد الأقصى لحجم الملف', url: 'رابط الصورة', remove: 'حذف الصورة', original: 'Original' }, video: { video: 'فيديو', videoLink: 'رابط الفيديو', insert: 'إدراج الفيديو', url: 'رابط الفيديو', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'رابط رابط', insert: 'إدراج', unlink: 'حذف الرابط', edit: 'تعديل', textToDisplay: 'النص', url: 'مسار الرابط', openInNewWindow: 'فتح في نافذة جديدة' }, 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: 'إدراج خط أفقي' }, style: { style: 'تنسيق', p: 'عادي', blockquote: 'إقتباس', pre: 'شفيرة', h1: 'عنوان رئيسي 1', h2: 'عنوان رئيسي 2', h3: 'عنوان رئيسي 3', h4: 'عنوان رئيسي 4', h5: 'عنوان رئيسي 5', h6: 'عنوان رئيسي 6' }, lists: { unordered: 'قائمة مُنقطة', ordered: 'قائمة مُرقمة' }, options: { help: 'مساعدة', fullscreen: 'حجم الشاشة بالكامل', codeview: 'شفيرة المصدر' }, paragraph: { paragraph: 'فقرة', outdent: 'محاذاة للخارج', indent: 'محاذاة للداخل', left: 'محاذاة لليسار', center: 'توسيط', right: 'محاذاة لليمين', justify: 'ملئ السطر' }, color: { recent: 'تم إستخدامه', more: 'المزيد', background: 'لون الخلفية', foreground: 'لون النص', transparent: 'شفاف', setTransparent: 'بدون خلفية', reset: 'إعادة الضبط', resetToDefault: 'إعادة الضبط' }, shortcut: { shortcuts: 'إختصارات', close: 'غلق', textFormatting: 'تنسيق النص', action: 'Action', paragraphFormatting: 'تنسيق الفقرة', documentStyle: 'تنسيق المستند', 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: 'تراجع', redo: 'إعادة' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\��d�KKdist/lang/summernote-fa-IR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'fa-IR': { font: { bold: 'درشت', italic: 'خمیده', underline: 'میان خط', clear: 'پاک کردن فرمت فونت', height: 'فاصله ی خطی', name: 'اسم فونت', strikethrough: 'Strike', subscript: 'Subscript', superscript: 'Superscript', size: 'اندازه ی فونت' }, image: { image: 'تصویر', insert: 'وارد کردن تصویر', resizeFull: 'تغییر به اندازه ی کامل', resizeHalf: 'تغییر به اندازه نصف', resizeQuarter: 'تغییر به اندازه یک چهارم', floatLeft: 'چسباندن به چپ', floatRight: 'چسباندن به راست', floatNone: 'بدون چسبندگی', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'یک تصویر را اینجا بکشید', dropImage: 'Drop image or Text', selectFromFiles: 'فایل ها را انتخاب کنید', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'آدرس تصویر', remove: 'حذف تصویر', original: 'Original' }, video: { video: 'ویدیو', videoLink: 'لینک ویدیو', insert: 'افزودن ویدیو', url: 'آدرس ویدیو ؟', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)' }, link: { link: 'لینک', insert: 'اضافه کردن لینک', unlink: 'حذف لینک', edit: 'ویرایش', textToDisplay: 'متن جهت نمایش', url: 'این لینک به چه آدرسی باید برود ؟', openInNewWindow: 'در یک پنجره ی جدید باز شود' }, 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: 'افزودن خط افقی' }, style: { style: 'استیل', p: 'نرمال', blockquote: 'نقل قول', pre: 'کد', h1: 'سرتیتر 1', h2: 'سرتیتر 2', h3: 'سرتیتر 3', h4: 'سرتیتر 4', h5: 'سرتیتر 5', h6: 'سرتیتر 6' }, lists: { unordered: 'لیست غیر ترتیبی', ordered: 'لیست ترتیبی' }, options: { help: 'راهنما', fullscreen: 'نمایش تمام صفحه', codeview: 'مشاهده ی کد' }, paragraph: { paragraph: 'پاراگراف', outdent: 'کاهش تو رفتگی', indent: 'افزایش تو رفتگی', left: 'چپ چین', center: 'میان چین', right: 'راست چین', justify: 'بلوک چین' }, color: { recent: 'رنگ اخیرا استفاده شده', more: 'رنگ بیشتر', background: 'رنگ پس زمینه', foreground: 'رنگ متن', transparent: 'بی رنگ', setTransparent: 'تنظیم حالت بی رنگ', reset: 'بازنشاندن', resetToDefault: 'حالت پیش فرض' }, shortcut: { shortcuts: 'دکمه های میان بر', close: 'بستن', textFormatting: 'فرمت متن', action: 'عملیات', paragraphFormatting: 'فرمت پاراگراف', documentStyle: 'استیل سند', 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: 'واچیدن', redo: 'بازچیدن' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�9pRssdist/lang/summernote-tr-TR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'tr-TR': { font: { bold: 'Kalın', italic: 'İtalik', underline: 'Altı çizili', clear: 'Temizle', height: 'Satır yüksekliği', name: 'Yazı Tipi', strikethrough: 'Üstü çizili', subscript: 'Alt Simge', superscript: 'Üst Simge', size: 'Yazı tipi boyutu' }, image: { image: 'Resim', insert: 'Resim ekle', resizeFull: 'Orjinal boyut', resizeHalf: '1/2 boyut', resizeQuarter: '1/4 boyut', floatLeft: 'Sola hizala', floatRight: 'Sağa hizala', floatNone: 'Hizalamayı kaldır', shapeRounded: 'Şekil: Yuvarlatılmış Köşe', shapeCircle: 'Şekil: Daire', shapeThumbnail: 'Şekil: K.Resim', shapeNone: 'Şekil: Yok', dragImageHere: 'Buraya sürükleyin', dropImage: 'Resim veya metni bırakın', selectFromFiles: 'Dosya seçin', maximumFileSize: 'Maksimum dosya boyutu', maximumFileSizeError: 'Maksimum dosya boyutu aşıldı.', url: 'Resim bağlantısı', remove: 'Resimi Kaldır', original: 'Original' }, video: { video: 'Video', videoLink: 'Video bağlantısı', insert: 'Video ekle', url: 'Video bağlantısı?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)' }, link: { link: 'Bağlantı', insert: 'Bağlantı ekle', unlink: 'Bağlantıyı kaldır', edit: 'Bağlantıyı düzenle', textToDisplay: 'Görüntülemek için', url: 'Bağlantı adresi?', openInNewWindow: 'Yeni pencerede aç' }, table: { table: 'Tablo', addRowAbove: 'Yukarı satır ekle', addRowBelow: 'Aşağı satır ekle', addColLeft: 'Sola sütun ekle', addColRight: 'Sağa sütun ekle', delRow: 'Satırı sil', delCol: 'Sütunu sil', delTable: 'Tabloyu sil' }, hr: { insert: 'Yatay çizgi ekle' }, style: { style: 'Biçim', p: 'p', blockquote: 'Alıntı', pre: 'Önbiçimli', h1: 'Başlık 1', h2: 'Başlık 2', h3: 'Başlık 3', h4: 'Başlık 4', h5: 'Başlık 5', h6: 'Başlık 6' }, lists: { unordered: 'Madde işaretli liste', ordered: 'Numaralı liste' }, options: { help: 'Yardım', fullscreen: 'Tam ekran', codeview: 'HTML Kodu' }, paragraph: { paragraph: 'Paragraf', outdent: 'Girintiyi artır', indent: 'Girintiyi azalt', left: 'Sola hizala', center: 'Ortaya hizala', right: 'Sağa hizala', justify: 'Yasla' }, color: { recent: 'Son renk', more: 'Daha fazla renk', background: 'Arka plan rengi', foreground: 'Yazı rengi', transparent: 'Seffaflık', setTransparent: 'Şeffaflığı ayarla', reset: 'Sıfırla', resetToDefault: 'Varsayılanlara sıfırla' }, shortcut: { shortcuts: 'Kısayollar', close: 'Kapat', textFormatting: 'Yazı biçimlendirme', action: 'Eylem', paragraphFormatting: 'Paragraf biçimlendirme', documentStyle: 'Biçim', extraKeys: 'İlave anahtarlar' }, help: { 'insertParagraph': 'Paragraf ekler', 'undo': 'Son komudu geri alır', 'redo': 'Son komudu yineler', 'tab': 'Girintiyi artırır', 'untab': 'Girintiyi azaltır', 'bold': 'Kalın yazma stilini ayarlar', 'italic': 'İtalik yazma stilini ayarlar', 'underline': 'Altı çizgili yazma stilini ayarlar', 'strikethrough': 'Üstü çizgili yazma stilini ayarlar', 'removeFormat': 'Biçimlendirmeyi temizler', 'justifyLeft': 'Yazıyı sola hizalar', 'justifyCenter': 'Yazıyı ortalar', 'justifyRight': 'Yazıyı sağa hizalar', 'justifyFull': 'Yazıyı her iki tarafa yazlar', 'insertUnorderedList': 'Madde işaretli liste ekler', 'insertOrderedList': 'Numaralı liste ekler', 'outdent': 'Aktif paragrafın girintisini azaltır', 'indent': 'Aktif paragrafın girintisini artırır', 'formatPara': 'Aktif bloğun biçimini paragraf (p) olarak değiştirir', 'formatH1': 'Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir', 'formatH2': 'Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir', 'formatH3': 'Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir', 'formatH4': 'Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir', 'formatH5': 'Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir', 'formatH6': 'Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir', 'insertHorizontalRule': 'Yatay çizgi ekler', 'linkDialog.show': 'Bağlantı ayar kutusunu gösterir' }, history: { undo: 'Geri al', redo: 'Yinele' }, specialChar: { specialChar: 'ÖZEL KARAKTERLER', select: 'Özel Karakterleri seçin' } } }); })(jQuery); PKf[�\���p� � !dist/lang/summernote-sv-SE.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"sv-SE":{font:{bold:"Fet",italic:"Kursiv",underline:"Understruken",clear:"Radera formatering",height:"Radavstånd",name:"Teckensnitt",strikethrough:"Genomstruken",subscript:"Subscript",superscript:"Superscript",size:"Teckenstorlek"},image:{image:"Bild",insert:"Infoga bild",resizeFull:"Full storlek",resizeHalf:"Halv storlek",resizeQuarter:"En fjärdedel i storlek",floatLeft:"Vänsterjusterad",floatRight:"Högerjusterad",floatNone:"Ingen justering",shapeRounded:"Shape: Rounded",shapeCircle:"Shape: Circle",shapeThumbnail:"Shape: Thumbnail",shapeNone:"Shape: None",dragImageHere:"Dra en bild hit",dropImage:"Drop image or Text",selectFromFiles:"Välj från filer",maximumFileSize:"Maximum file size",maximumFileSizeError:"Maximum file size exceeded.",url:"Länk till bild",remove:"Ta bort bild",original:"Original"},video:{video:"Filmklipp",videoLink:"Länk till filmklipp",insert:"Infoga filmklipp",url:"Länk till filmklipp",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)"},link:{link:"Länk",insert:"Infoga länk",unlink:"Ta bort länk",edit:"Redigera",textToDisplay:"Visningstext",url:"Till vilken URL ska denna länk peka?",openInNewWindow:"Öppna i ett nytt fönster"},table:{table:"Tabell",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:"Infoga horisontell linje"},style:{style:"Stil",p:"p",blockquote:"Citat",pre:"Kod",h1:"Rubrik 1",h2:"Rubrik 2",h3:"Rubrik 3",h4:"Rubrik 4",h5:"Rubrik 5",h6:"Rubrik 6"},lists:{unordered:"Punktlista",ordered:"Numrerad lista"},options:{help:"Hjälp",fullscreen:"Fullskärm",codeview:"HTML-visning"},paragraph:{paragraph:"Justera text",outdent:"Minska indrag",indent:"Öka indrag",left:"Vänsterjusterad",center:"Centrerad",right:"Högerjusterad",justify:"Justera text"},color:{recent:"Senast använda färg",more:"Fler färger",background:"Bakgrundsfärg",foreground:"Teckenfärg",transparent:"Genomskinlig",setTransparent:"Gör genomskinlig",reset:"Nollställ",resetToDefault:"Återställ till standard"},shortcut:{shortcuts:"Kortkommandon",close:"Stäng",textFormatting:"Textformatering",action:"Funktion",paragraphFormatting:"Avsnittsformatering",documentStyle:"Dokumentstil",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:"Ångra",redo:"Gör om"},specialChar:{specialChar:"SPECIAL CHARACTERS",select:"Select Special characters"}}})}(jQuery);PKf[�\߂�XXdist/lang/summernote-el-GR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'el-GR': { font: { bold: 'Έντονα', italic: 'Πλάγια', underline: 'Υπογραμμισμένα', clear: 'Καθαρισμός', height: 'Ύψος', name: 'Γραμματοσειρά', strikethrough: 'Διεγραμμένα', subscript: 'Δείκτης', superscript: 'Εκθέτης', size: 'Μέγεθος' }, image: { image: 'εικόνα', insert: 'Εισαγωγή', resizeFull: 'Πλήρες μέγεθος', resizeHalf: 'Μισό μέγεθος', resizeQuarter: '1/4 μέγεθος', floatLeft: 'Μετατόπιση αριστερά', floatRight: 'Μετατόπιση δεξιά', floatNone: 'Χωρίς μετατόπιση', shapeRounded: 'Σχήμα: Στρογγυλεμένο', shapeCircle: 'Σχήμα: Κύκλος', shapeThumbnail: 'Σχήμα: Thumbnail', shapeNone: 'Σχήμα: Κανένα', dragImageHere: 'Σύρτε την εικόνα εδώ', dropImage: 'Αφήστε την εικόνα', selectFromFiles: 'Επιλογή από αρχεία', maximumFileSize: 'Μέγιστο μέγεθος αρχείου', maximumFileSizeError: 'Το μέγεθος είναι μεγαλύτερο από το μέγιστο επιτρεπτό.', url: 'URL', remove: 'Αφαίρεση', original: 'Original' }, link: { link: 'Σύνδεσμος', insert: 'Εισαγωγή συνδέσμου', unlink: 'Αφαίρεση συνδέσμου', edit: 'Επεξεργασία συνδέσμου', textToDisplay: 'Κείμενο συνδέσμου', url: 'URL', openInNewWindow: 'Άνοιγμα σε νέο παράθυρο' }, video: { video: 'Βίντεο', videoLink: 'Σύνδεσμος Βίντεο', insert: 'Εισαγωγή', url: 'URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, 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: 'Εισαγωγή οριζόντιας γραμμής' }, style: { style: 'Στυλ', normal: 'Κανονικό', blockquote: 'Παράθεση', pre: 'Ως έχει', h1: 'Κεφαλίδα 1', h2: 'συνδέσμου 2', h3: 'συνδέσμου 3', h4: 'συνδέσμου 4', h5: 'συνδέσμου 5', h6: 'συνδέσμου 6' }, lists: { unordered: 'Αταξινόμητη λίστα', ordered: 'Ταξινομημένη λίστα' }, options: { help: 'Βοήθεια', fullscreen: 'Πλήρης οθόνη', codeview: 'Προβολή HTML' }, paragraph: { paragraph: 'Παράγραφος', outdent: 'Μείωση εσοχής', indent: 'Άυξηση εσοχής', left: 'Αριστερή στοίχιση', center: 'Στοίχιση στο κέντρο', right: 'Δεξιά στοίχιση', justify: 'Πλήρης στοίχιση' }, color: { recent: 'Πρόσφατη επιλογή', more: 'Περισσότερα', background: 'Υπόβαθρο', foreground: 'Μπροστά', transparent: 'Διαφανές', setTransparent: 'Επιλογή διαφάνειας', reset: 'Επαναφορά', resetToDefault: 'Επαναφορά στις προκαθορισμένες τιμές' }, shortcut: { shortcuts: 'Συντομεύσεις', close: 'Κλείσιμο', textFormatting: 'Διαμόρφωση κειμένου', action: 'Ενέργεια', paragraphFormatting: 'Διαμόρφωση παραγράφου', documentStyle: 'Στυλ κειμένου', extraKeys: 'Επιπλέον συντομεύσεις' }, help: { 'insertParagraph': 'Εισαγωγή παραγράφου', 'undo': 'Αναιρεί την προηγούμενη εντολή', 'redo': 'Επαναλαμβάνει την προηγούμενη εντολή', 'tab': 'Εσοχή', 'untab': 'Αναίρεση εσοχής', 'bold': 'Ορισμός έντονου στυλ', 'italic': 'Ορισμός πλάγιου στυλ', 'underline': 'Ορισμός υπογεγραμμένου στυλ', 'strikethrough': 'Ορισμός διεγραμμένου στυλ', 'removeFormat': 'Αφαίρεση στυλ', 'justifyLeft': 'Ορισμός αριστερής στοίχισης', 'justifyCenter': 'Ορισμός κεντρικής στοίχισης', 'justifyRight': 'Ορισμός δεξιάς στοίχισης', 'justifyFull': 'Ορισμός πλήρους στοίχισης', 'insertUnorderedList': 'Ορισμός μη-ταξινομημένης λίστας', 'insertOrderedList': 'Ορισμός ταξινομημένης λίστας', 'outdent': 'Προεξοχή παραγράφου', 'indent': 'Εσοχή παραγράφου', 'formatPara': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε παράγραφο (P tag)', 'formatH1': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H1', 'formatH2': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H2', 'formatH3': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H3', 'formatH4': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H4', 'formatH5': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H5', 'formatH6': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H6', 'insertHorizontalRule': 'Εισαγωγή οριζόντιας γραμμής', 'linkDialog.show': 'Εμφάνιση διαλόγου συνδέσμου' }, history: { undo: 'Αναίρεση', redo: 'Επαναληψη' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Επιλέξτε ειδικούς χαρακτήρες' } } }); })(jQuery); PKf[�\{ �dist/lang/summernote-sv-SE.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sv-SE': { font: { bold: 'Fet', italic: 'Kursiv', underline: 'Understruken', clear: 'Radera formatering', height: 'Radavstånd', name: 'Teckensnitt', strikethrough: 'Genomstruken', subscript: 'Subscript', superscript: 'Superscript', size: 'Teckenstorlek' }, image: { image: 'Bild', insert: 'Infoga bild', resizeFull: 'Full storlek', resizeHalf: 'Halv storlek', resizeQuarter: 'En fjärdedel i storlek', floatLeft: 'Vänsterjusterad', floatRight: 'Högerjusterad', floatNone: 'Ingen justering', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Dra en bild hit', dropImage: 'Drop image or Text', selectFromFiles: 'Välj från filer', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Länk till bild', remove: 'Ta bort bild', original: 'Original' }, video: { video: 'Filmklipp', videoLink: 'Länk till filmklipp', insert: 'Infoga filmklipp', url: 'Länk till filmklipp', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' }, link: { link: 'Länk', insert: 'Infoga länk', unlink: 'Ta bort länk', edit: 'Redigera', textToDisplay: 'Visningstext', url: 'Till vilken URL ska denna länk peka?', openInNewWindow: 'Öppna i ett nytt fönster' }, table: { table: 'Tabell', 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: 'Infoga horisontell linje' }, style: { style: 'Stil', p: 'p', blockquote: 'Citat', pre: 'Kod', h1: 'Rubrik 1', h2: 'Rubrik 2', h3: 'Rubrik 3', h4: 'Rubrik 4', h5: 'Rubrik 5', h6: 'Rubrik 6' }, lists: { unordered: 'Punktlista', ordered: 'Numrerad lista' }, options: { help: 'Hjälp', fullscreen: 'Fullskärm', codeview: 'HTML-visning' }, paragraph: { paragraph: 'Justera text', outdent: 'Minska indrag', indent: 'Öka indrag', left: 'Vänsterjusterad', center: 'Centrerad', right: 'Högerjusterad', justify: 'Justera text' }, color: { recent: 'Senast använda färg', more: 'Fler färger', background: 'Bakgrundsfärg', foreground: 'Teckenfärg', transparent: 'Genomskinlig', setTransparent: 'Gör genomskinlig', reset: 'Nollställ', resetToDefault: 'Återställ till standard' }, shortcut: { shortcuts: 'Kortkommandon', close: 'Stäng', textFormatting: 'Textformatering', action: 'Funktion', paragraphFormatting: 'Avsnittsformatering', documentStyle: 'Dokumentstil', 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: 'Ångra', redo: 'Gör om' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�X��GG!dist/lang/summernote-ro-RO.min.jsnu�[���/*! Summernote v0.8.10 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(e){e.extend(e.summernote.lang,{"ro-RO":{font:{bold:"Îngroșat",italic:"Înclinat",underline:"Subliniat",clear:"Înlătură formatare font",height:"Înălțime rând",name:"Familie de fonturi",strikethrough:"Tăiat",subscript:"Indice",superscript:"Exponent",size:"Dimensiune font"},image:{image:"Imagine",insert:"Inserează imagine",resizeFull:"Redimensionează complet",resizeHalf:"Redimensionează 1/2",resizeQuarter:"Redimensionează 1/4",floatLeft:"Aliniere la stânga",floatRight:"Aliniere la dreapta",floatNone:"Fară aliniere",shapeRounded:"Formă: Rotund",shapeCircle:"Formă: Cerc",shapeThumbnail:"Formă: Pictogramă",shapeNone:"Formă: Nici una",dragImageHere:"Trage o imagine sau un text aici",dropImage:"Eliberează imaginea sau textul",selectFromFiles:"Alege din fişiere",maximumFileSize:"Dimensiune maximă fișier",maximumFileSizeError:"Dimensiune maximă fișier depășită.",url:"URL imagine",remove:"Șterge imagine",original:"Original"},video:{video:"Video",videoLink:"Link video",insert:"Inserează video",url:"URL video?",providers:"(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)"},link:{link:"Link",insert:"Inserează link",unlink:"Înlătură link",edit:"Editează",textToDisplay:"Text ce va fi afişat",url:"La ce adresă URL trebuie să conducă acest link?",openInNewWindow:"Deschidere în fereastră nouă"},table:{table:"Tabel",addRowAbove:"Adaugă rând deasupra",addRowBelow:"Adaugă rând dedesubt",addColLeft:"Adaugă coloană stânga",addColRight:"Adaugă coloană dreapta",delRow:"Șterge rând",delCol:"Șterge coloană",delTable:"Șterge tabel"},hr:{insert:"Inserează o linie orizontală"},style:{style:"Stil",p:"p",blockquote:"Citat",pre:"Preformatat",h1:"Titlu 1",h2:"Titlu 2",h3:"Titlu 3",h4:"Titlu 4",h5:"Titlu 5",h6:"Titlu 6"},lists:{unordered:"Listă neordonată",ordered:"Listă ordonată"},options:{help:"Ajutor",fullscreen:"Măreşte",codeview:"Sursă"},paragraph:{paragraph:"Paragraf",outdent:"Creşte identarea",indent:"Scade identarea",left:"Aliniere la stânga",center:"Aliniere centrală",right:"Aliniere la dreapta",justify:"Aliniere în bloc"},color:{recent:"Culoare recentă",more:"Mai multe culori",background:"Culoarea fundalului",foreground:"Culoarea textului",transparent:"Transparent",setTransparent:"Setează transparent",reset:"Resetează",resetToDefault:"Revino la iniţial"},shortcut:{shortcuts:"Scurtături tastatură",close:"Închide",textFormatting:"Formatare text",action:"Acţiuni",paragraphFormatting:"Formatare paragraf",documentStyle:"Stil paragraf",extraKeys:"Taste extra"},help:{insertParagraph:"Inserează paragraf",undo:"Revine la starea anterioară",redo:"Revine la starea ulterioară",tab:"Tab",untab:"Untab",bold:"Setează stil îngroșat",italic:"Setează stil înclinat",underline:"Setează stil subliniat",strikethrough:"Setează stil tăiat",removeFormat:"Înlătură formatare",justifyLeft:"Setează aliniere stânga",justifyCenter:"Setează aliniere centru",justifyRight:"Setează aliniere dreapta",justifyFull:"Setează aliniere bloc",insertUnorderedList:"Comutare listă neordinată",insertOrderedList:"Comutare listă ordonată",outdent:"Înlătură indentare paragraf curent",indent:"Adaugă indentare paragraf curent",formatPara:"Schimbă formatarea selecției în paragraf",formatH1:"Schimbă formatarea selecției în H1",formatH2:"Schimbă formatarea selecției în H2",formatH3:"Schimbă formatarea selecției în H3",formatH4:"Schimbă formatarea selecției în H4",formatH5:"Schimbă formatarea selecției în H5",formatH6:"Schimbă formatarea selecției în H6",insertHorizontalRule:"Adaugă linie orizontală","linkDialog.show":"Inserează link"},history:{undo:"Starea anterioară",redo:"Starea ulterioară"},specialChar:{specialChar:"CARACTERE SPECIALE",select:"Alege caractere speciale"}}})}(jQuery);PKf[�\m�v'<<dist/lang/summernote-lt-LT.jsnu�[���(function($) { $.extend($.summernote.lang, { 'lt-LT': { font: { bold: 'Paryškintas', italic: 'Kursyvas', underline: 'Pabrėžtas', clear: 'Be formatavimo', height: 'Eilutės aukštis', name: 'Šrifto pavadinimas', strikethrough: 'Perbrauktas', superscript: 'Viršutinis', subscript: 'Indeksas', size: 'Šrifto dydis' }, image: { image: 'Paveikslėlis', insert: 'Įterpti paveikslėlį', resizeFull: 'Pilnas dydis', resizeHalf: 'Sumažinti dydį 50%', resizeQuarter: 'Sumažinti dydį 25%', floatLeft: 'Kairinis lygiavimas', floatRight: 'Dešininis lygiavimas', floatNone: 'Jokio lygiavimo', shapeRounded: 'Forma: apvalūs kraštai', shapeCircle: 'Forma: apskritimas', shapeThumbnail: 'Forma: miniatiūra', shapeNone: 'Forma: jokia', dragImageHere: 'Vilkite paveikslėlį čia', dropImage: 'Drop image or Text', selectFromFiles: 'Pasirinkite failą', maximumFileSize: 'Maskimalus failo dydis', maximumFileSizeError: 'Maskimalus failo dydis viršytas!', url: 'Paveikslėlio URL adresas', remove: 'Ištrinti paveikslėlį', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Insert Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'Nuoroda', insert: 'Įterpti nuorodą', unlink: 'Pašalinti nuorodą', edit: 'Redaguoti', textToDisplay: 'Rodomas tekstas', url: 'Koks URL adresas yra susietas?', openInNewWindow: 'Atidaryti naujame lange' }, table: { table: 'Lentelė', 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: 'Įterpti horizontalią liniją' }, style: { style: 'Stilius', p: 'pus', blockquote: 'Citata', pre: 'Kodas', h1: 'Antraštė 1', h2: 'Antraštė 2', h3: 'Antraštė 3', h4: 'Antraštė 4', h5: 'Antraštė 5', h6: 'Antraštė 6' }, lists: { unordered: 'Suženklintasis sąrašas', ordered: 'Sunumeruotas sąrašas' }, options: { help: 'Pagalba', fullscreen: 'Viso ekrano režimas', codeview: 'HTML kodo peržiūra' }, paragraph: { paragraph: 'Pastraipa', outdent: 'Sumažinti įtrauką', indent: 'Padidinti įtrauką', left: 'Kairinė lygiuotė', center: 'Centrinė lygiuotė', right: 'Dešininė lygiuotė', justify: 'Abipusis išlyginimas' }, color: { recent: 'Paskutinė naudota spalva', more: 'Daugiau spalvų', background: 'Fono spalva', foreground: 'Šrifto spalva', transparent: 'Permatoma', setTransparent: 'Nustatyti skaidrumo intensyvumą', reset: 'Atkurti', resetToDefault: 'Atstatyti numatytąją spalvą' }, shortcut: { shortcuts: 'Spartieji klavišai', close: 'Uždaryti', textFormatting: 'Teksto formatavimas', action: 'Veiksmas', paragraphFormatting: 'Pastraipos formatavimas', documentStyle: 'Dokumento stilius', extraKeys: 'Papildomi klavišų deriniai' }, 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: 'Anuliuoti veiksmą', redo: 'Perdaryti veiksmą' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\ˈ�examples/hint-userdefine.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libs stylesheets --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script src="https://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> $(function() { $('.summernote').summernote({ height: 200, hint: { match: /#(\w{2,})$/, search: function(keyword, callback) { $.ajax({ url: 'https://api.github.com/search/repositories?q=' + keyword + '&order=asc' }).then(function (data) { callback(data.items); }); }, content: function(item) { return '[' + item.full_name + '] ' + item.description; }, template: function(item) { return '[<strong>' + item.full_name + '</strong>] ' + item.description; } } }); }); </script> </head> <body> <textarea class="summernote">type #su</textarea> </body> </html> PKf[�\,2���examples/ondialog-multitab.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script> $(function () { $('#dropper').on('shown.bs.modal', function() { $('.dropping').summernote({ height: 300, focus: true }); }).on('hidden.bs.modal', function () { $('.dropping').summernote('destroy'); }); $('.nav.nav-tabs a').click(function (e) { e.preventDefault() $(this).tab('show') }) }); </script> </head> <body> <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#dropper">Show Dialog</button> <div id="dropper" class="modal fade" tabindex="-1" data-backdrop="static" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> <div role="tabpanel"> <!-- Nav tabs --> <ul class="nav nav-tabs" role="tablist"> <li role="presentation" class="active"><a href="#tab1" aria-controls="tab1" role="tab" data-toggle="tab">Tab 1</a></li> <li role="presentation"><a href="#tab2" aria-controls="tab2" role="tab" data-toggle="tab">Tab 2</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="tab1"> <div class="dropping">text...</div> </div> <div role="tabpanel" class="tab-pane" id="tab2"> <div class="dropping">text...</div> </div> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default pull-left"> <span class="fa fa-paperclip"></span> Attach Digital Assets </button> <div class="btn-group"> <button type="button" class="btn btn-default opacity75" class="close" data-dismiss="modal"> × Cancel </button> <button type="button" class="btn btn-warning" href="javascript:postDrop()"> Post Status Update <span class="fa fa-bullhorn"></span> </button> </div> </div> </div> </div> </div> </body> </html> PKf[�\�r���examples/bs3.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote - bs3</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libs stylesheets --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" /> <script src="//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote.css"> <script type="text/javascript" src="../dist/summernote.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 300, tabsize: 2 }); }); </script> </head> <body> <div class="container"> <h4>Lately library <span class="label label-info">Bootstrap v3.3.5</span> </h4> <div class="summernote"></div> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> </div> </body> </html> PKf[�\�뻒�examples/link-blank.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript" src="../lang/summernote-ko-KR.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 200, tabsize: 2, linkTargetBlank: false }); }); </script> </head> <body> <textarea class="summernote"></textarea> </body> </html> PKf[�\侈�--examples/textarea.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(function() { $('.summernote').summernote({ height: 200 }); $('form').on('submit', function (e) { e.preventDefault(); alert($('.summernote').summernote('code')); alert($('.summernote').val()); }); }); </script> </head> <body> <form action="#" novalidate> <div class="form-group"> <label for="input">Text</label> <input type="text" class="form-input" id="input" value="Title"> </div> <div class="form-group"> <label for="contents">Contents</label> <textarea name="text" class="summernote" id="contents" title="Contents"></textarea> </div> <button type="submit" class="btn btn-default">submit</button> </form> </body> </html> PKf[�\���j��examples/lite.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <link rel="stylesheet" href="../dist/summernote-lite.css"> <title>summernote-lite</title> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <script type="text/javascript" src="../dist/summernote-lite.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 300, tabsize: 2 }); }); </script> </head> <body> <h4>Summernote standalone</h4> <div class="summernote"></div> </body> </html> PKf[�\oi~DDexamples/plugin-hello.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript" src="../lang/summernote-ko-KR.js"></script> <script type="text/javascript" src="../plugin/hello/summernote-ext-hello.js"></script> <script type="text/javascript"> $(function() { $('.summernote').summernote({ height: 200, tabsize: 2, toolbar: [ ['style', ['bold', 'italic', 'underline', 'clear']], ['insert', ['hello']] ] }); }); </script> </head> <body> <textarea class="summernote">Seasons coming up</textarea> </body> </html> PKf[�\9�7�ssexamples/codemirror.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote - codemirror</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libs stylesheets --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include codemirror (codemirror.css, codemirror.js, xml.js, formatting.js)--> <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/codemirror.min.css" /> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/theme/blackboard.min.css"> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/theme/monokai.min.css"> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/codemirror.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/mode/xml/xml.min.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 200, tabsize: 2, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true, theme: 'monokai' } }); }); </script> </head> <body> <textarea class="summernote"><p>Seasons <b>coming up</b></p></textarea> </body> </html> PKf[�\c�ɟ%%examples/ie8.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css"> <link rel="stylesheet" href="../dist/summernote.css"> <title>summernote</title> <script src="//code.jquery.com/jquery-1.11.3.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/es5-shim/4.3.1/es5-shim.js"></script> <script src="//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> <script type="text/javascript" src="../dist/summernote.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 300, tabsize: 2 }); }); </script> </head> <body> <div class="container"> <h4>Summernote <span class="label label-info">Bootstrap v3.3.5</span> </h4> <div class="summernote"><p>Hello World</p></div> </div> </body> </html> PKf[�\�f���examples/airmode.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote airmode</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libs stylesheets --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 300, tabsize: 2, airMode: true }); }); </script> </head> <body> <div class="summernote"> <p>In <a href="http://en.wikipedia.org/wiki/Computer_science" title="Computer science">computer science</a>, <b>functional programming</b> is a <a href="http://en.wikipedia.org/wiki/Programming_paradigm" title="Programming paradigm">programming paradigm</a>, a style of building the structure and elements of computer programs, that treats <a href="http://en.wikipedia.org/wiki/Computation" title="Computation">computation</a> as the evaluation of <a href="http://en.wikipedia.org/wiki/Function_(mathematics)" title="Function (mathematics)">mathematical functions</a> and avoids <a href="http://en.wikipedia.org/wiki/Program_state" title="Program state" class="mw-redirect">state</a> and <a href="http://en.wikipedia.org/wiki/Immutable_object" title="Immutable object">mutable</a> data. Functional programming emphasizes <a href="http://en.wikipedia.org/wiki/Function_(computer_science)" title="Function (computer science)" class="mw-redirect">functions</a> that produce results that depend only on their inputs and not on the program state—i.e. <a href="http://en.wikipedia.org/wiki/Pure_function" title="Pure function">pure</a> <a href="http://en.wikipedia.org/wiki/Function_(mathematics)" title="Function (mathematics)">mathematical functions</a>. It is a <a href="http://en.wikipedia.org/wiki/Declarative_programming" title="Declarative programming">declarative programming</a> paradigm, which means programming is done with <a href="http://en.wikipedia.org/wiki/Expression_(computer_science)" title="Expression (computer science)">expressions</a>. In functional code, the output value of a function depends only on the arguments that are input to the function, so calling a function <i>f</i> twice with the same value for an argument <i>x</i> will produce the same result <i>f(x)</i> both times. Eliminating <a href="http://en.wikipedia.org/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>, i.e. changes in state that do not depend on the function inputs, can make it much easier to understand and predict the behavior of a program, which is one of the key motivations for the development of functional programming.</p> </div> </body> </html> PKf[�\q�#�examples/bs4.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.css" /> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <title>summernote</title> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.js"></script> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 300, tabsize: 2 }); }); </script> </head> <body> <div class="container"> <h5> <i class="note-icon-summernote"></i> Summernote <span class="badge badge-pill badge-info">Bootstrap v4.0.0</span> </h5> <div class="summernote"><p>Hello World</p></div> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> <p>scroll text...</p> </div> </body> </html> PKf[�\;}{,^^examples/nativestyle.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 200, tabsize: 2, styleWithSpan: false }); }); </script> </head> <body> <textarea class="summernote"><p>Seasons <b>coming up</b></p></textarea> </body> </html> PKf[�\�S�DcDc8examples/symbols_mathematical-symbols_Greek-letters.jsonnu�[���[ { "Character": "Latin small f with hook = function = florin", "Entity": "ƒ", "Decimal": "ƒ", "Hex": "ƒ", "Rendering in Your Browser": "ƒ", "FIELD6": "ƒ", "FIELD7": "ƒ" }, { "Character": "Greek capital letter alpha", "Entity": "Α", "Decimal": "Α", "Hex": "Α", "Rendering in Your Browser": "Α", "FIELD6": "Α", "FIELD7": "Α" }, { "Character": "Greek capital letter beta", "Entity": "Β", "Decimal": "Β", "Hex": "Β", "Rendering in Your Browser": "Β", "FIELD6": "Β", "FIELD7": "Β" }, { "Character": "Greek capital letter gamma", "Entity": "Γ", "Decimal": "Γ", "Hex": "Γ", "Rendering in Your Browser": "Γ", "FIELD6": "Γ", "FIELD7": "Γ" }, { "Character": "Greek capital letter delta", "Entity": "Δ", "Decimal": "Δ", "Hex": "Δ", "Rendering in Your Browser": "Δ", "FIELD6": "Δ", "FIELD7": "Δ" }, { "Character": "Greek capital letter epsilon", "Entity": "Ε", "Decimal": "Ε", "Hex": "Ε", "Rendering in Your Browser": "Ε", "FIELD6": "Ε", "FIELD7": "Ε" }, { "Character": "Greek capital letter zeta", "Entity": "Ζ", "Decimal": "Ζ", "Hex": "Ζ", "Rendering in Your Browser": "Ζ", "FIELD6": "Ζ", "FIELD7": "Ζ" }, { "Character": "Greek capital letter eta", "Entity": "Η", "Decimal": "Η", "Hex": "Η", "Rendering in Your Browser": "Η", "FIELD6": "Η", "FIELD7": "Η" }, { "Character": "Greek capital letter theta", "Entity": "Θ", "Decimal": "Θ", "Hex": "Θ", "Rendering in Your Browser": "Θ", "FIELD6": "Θ", "FIELD7": "Θ" }, { "Character": "Greek capital letter iota", "Entity": "Ι", "Decimal": "Ι", "Hex": "Ι", "Rendering in Your Browser": "Ι", "FIELD6": "Ι", "FIELD7": "Ι" }, { "Character": "Greek capital letter kappa", "Entity": "Κ", "Decimal": "Κ", "Hex": "Κ", "Rendering in Your Browser": "Κ", "FIELD6": "Κ", "FIELD7": "Κ" }, { "Character": "Greek capital letter lambda", "Entity": "Λ", "Decimal": "Λ", "Hex": "Λ", "Rendering in Your Browser": "Λ", "FIELD6": "Λ", "FIELD7": "Λ" }, { "Character": "Greek capital letter mu", "Entity": "Μ", "Decimal": "Μ", "Hex": "Μ", "Rendering in Your Browser": "Μ", "FIELD6": "Μ", "FIELD7": "Μ" }, { "Character": "Greek capital letter nu", "Entity": "Ν", "Decimal": "Ν", "Hex": "Ν", "Rendering in Your Browser": "Ν", "FIELD6": "Ν", "FIELD7": "Ν" }, { "Character": "Greek capital letter xi", "Entity": "Ξ", "Decimal": "Ξ", "Hex": "Ξ", "Rendering in Your Browser": "Ξ", "FIELD6": "Ξ", "FIELD7": "Ξ" }, { "Character": "Greek capital letter omicron", "Entity": "Ο", "Decimal": "Ο", "Hex": "Ο", "Rendering in Your Browser": "Ο", "FIELD6": "Ο", "FIELD7": "Ο" }, { "Character": "Greek capital letter pi", "Entity": "Π", "Decimal": "Π", "Hex": "Π", "Rendering in Your Browser": "Π", "FIELD6": "Π", "FIELD7": "Π" }, { "Character": "Greek capital letter rho", "Entity": "Ρ", "Decimal": "Ρ", "Hex": "Ρ", "Rendering in Your Browser": "Ρ", "FIELD6": "Ρ", "FIELD7": "Ρ" }, { "Character": "Greek capital letter sigma", "Entity": "Σ", "Decimal": "Σ", "Hex": "Σ", "Rendering in Your Browser": "Σ", "FIELD6": "Σ", "FIELD7": "Σ" }, { "Character": "Greek capital letter tau", "Entity": "Τ", "Decimal": "Τ", "Hex": "Τ", "Rendering in Your Browser": "Τ", "FIELD6": "Τ", "FIELD7": "Τ" }, { "Character": "Greek capital letter upsilon", "Entity": "Υ", "Decimal": "Υ", "Hex": "Υ", "Rendering in Your Browser": "Υ", "FIELD6": "Υ", "FIELD7": "Υ" }, { "Character": "Greek capital letter phi", "Entity": "Φ", "Decimal": "Φ", "Hex": "Φ", "Rendering in Your Browser": "Φ", "FIELD6": "Φ", "FIELD7": "Φ" }, { "Character": "Greek capital letter chi", "Entity": "Χ", "Decimal": "Χ", "Hex": "Χ", "Rendering in Your Browser": "Χ", "FIELD6": "Χ", "FIELD7": "Χ" }, { "Character": "Greek capital letter psi", "Entity": "Ψ", "Decimal": "Ψ", "Hex": "Ψ", "Rendering in Your Browser": "Ψ", "FIELD6": "Ψ", "FIELD7": "Ψ" }, { "Character": "Greek capital letter omega", "Entity": "Ω", "Decimal": "Ω", "Hex": "Ω", "Rendering in Your Browser": "Ω", "FIELD6": "Ω", "FIELD7": "Ω" }, { "Character": "Greek small letter alpha", "Entity": "α", "Decimal": "α", "Hex": "α", "Rendering in Your Browser": "α", "FIELD6": "α", "FIELD7": "α" }, { "Character": "Greek small letter beta", "Entity": "β", "Decimal": "β", "Hex": "β", "Rendering in Your Browser": "β", "FIELD6": "β", "FIELD7": "β" }, { "Character": "Greek small letter gamma", "Entity": "γ", "Decimal": "γ", "Hex": "γ", "Rendering in Your Browser": "γ", "FIELD6": "γ", "FIELD7": "γ" }, { "Character": "Greek small letter delta", "Entity": "δ", "Decimal": "δ", "Hex": "δ", "Rendering in Your Browser": "δ", "FIELD6": "δ", "FIELD7": "δ" }, { "Character": "Greek small letter epsilon", "Entity": "ε", "Decimal": "ε", "Hex": "ε", "Rendering in Your Browser": "ε", "FIELD6": "ε", "FIELD7": "ε" }, { "Character": "Greek small letter zeta", "Entity": "ζ", "Decimal": "ζ", "Hex": "ζ", "Rendering in Your Browser": "ζ", "FIELD6": "ζ", "FIELD7": "ζ" }, { "Character": "Greek small letter eta", "Entity": "η", "Decimal": "η", "Hex": "η", "Rendering in Your Browser": "η", "FIELD6": "η", "FIELD7": "η" }, { "Character": "Greek small letter theta", "Entity": "θ", "Decimal": "θ", "Hex": "θ", "Rendering in Your Browser": "θ", "FIELD6": "θ", "FIELD7": "θ" }, { "Character": "Greek small letter iota", "Entity": "ι", "Decimal": "ι", "Hex": "ι", "Rendering in Your Browser": "ι", "FIELD6": "ι", "FIELD7": "ι" }, { "Character": "Greek small letter kappa", "Entity": "κ", "Decimal": "κ", "Hex": "κ", "Rendering in Your Browser": "κ", "FIELD6": "κ", "FIELD7": "κ" }, { "Character": "Greek small letter lambda", "Entity": "λ", "Decimal": "λ", "Hex": "λ", "Rendering in Your Browser": "λ", "FIELD6": "λ", "FIELD7": "λ" }, { "Character": "Greek small letter mu", "Entity": "μ", "Decimal": "μ", "Hex": "μ", "Rendering in Your Browser": "μ", "FIELD6": "μ", "FIELD7": "μ" }, { "Character": "Greek small letter nu", "Entity": "ν", "Decimal": "ν", "Hex": "ν", "Rendering in Your Browser": "ν", "FIELD6": "ν", "FIELD7": "ν" }, { "Character": "Greek small letter xi", "Entity": "ξ", "Decimal": "ξ", "Hex": "ξ", "Rendering in Your Browser": "ξ", "FIELD6": "ξ", "FIELD7": "ξ" }, { "Character": "Greek small letter omicron", "Entity": "ο", "Decimal": "ο", "Hex": "ο", "Rendering in Your Browser": "ο", "FIELD6": "ο", "FIELD7": "ο" }, { "Character": "Greek small letter pi", "Entity": "π", "Decimal": "π", "Hex": "π", "Rendering in Your Browser": "π", "FIELD6": "π", "FIELD7": "π" }, { "Character": "Greek small letter rho", "Entity": "ρ", "Decimal": "ρ", "Hex": "ρ", "Rendering in Your Browser": "ρ", "FIELD6": "ρ", "FIELD7": "ρ" }, { "Character": "Greek small letter final sigma", "Entity": "ς", "Decimal": "ς", "Hex": "ς", "Rendering in Your Browser": "ς", "FIELD6": "ς", "FIELD7": "ς" }, { "Character": "Greek small letter sigma", "Entity": "σ", "Decimal": "σ", "Hex": "σ", "Rendering in Your Browser": "σ", "FIELD6": "σ", "FIELD7": "σ" }, { "Character": "Greek small letter tau", "Entity": "τ", "Decimal": "τ", "Hex": "τ", "Rendering in Your Browser": "τ", "FIELD6": "τ", "FIELD7": "τ" }, { "Character": "Greek small letter upsilon", "Entity": "υ", "Decimal": "υ", "Hex": "υ", "Rendering in Your Browser": "υ", "FIELD6": "υ", "FIELD7": "υ" }, { "Character": "Greek small letter phi", "Entity": "φ", "Decimal": "φ", "Hex": "φ", "Rendering in Your Browser": "φ", "FIELD6": "φ", "FIELD7": "φ" }, { "Character": "Greek small letter chi", "Entity": "χ", "Decimal": "χ", "Hex": "χ", "Rendering in Your Browser": "χ", "FIELD6": "χ", "FIELD7": "χ" }, { "Character": "Greek small letter psi", "Entity": "ψ", "Decimal": "ψ", "Hex": "ψ", "Rendering in Your Browser": "ψ", "FIELD6": "ψ", "FIELD7": "ψ" }, { "Character": "Greek small letter omega", "Entity": "ω", "Decimal": "ω", "Hex": "ω", "Rendering in Your Browser": "ω", "FIELD6": "ω", "FIELD7": "ω" }, { "Character": "Greek small letter theta symbol", "Entity": "ϑ", "Decimal": "ϑ", "Hex": "ϑ", "Rendering in Your Browser": "ϑ", "FIELD6": "ϑ", "FIELD7": "ϑ" }, { "Character": "Greek upsilon with hook symbol", "Entity": "ϒ", "Decimal": "ϒ", "Hex": "ϒ", "Rendering in Your Browser": "ϒ", "FIELD6": "ϒ", "FIELD7": "ϒ" }, { "Character": "Greek pi symbol", "Entity": "ϖ", "Decimal": "ϖ", "Hex": "ϖ", "Rendering in Your Browser": "ϖ", "FIELD6": "ϖ", "FIELD7": "ϖ" }, { "Character": "bullet = black small circle", "Entity": "•", "Decimal": "•", "Hex": "•", "Rendering in Your Browser": "•", "FIELD6": "•", "FIELD7": "•" }, { "Character": "horizontal ellipsis = three dot leader", "Entity": "…", "Decimal": "…", "Hex": "…", "Rendering in Your Browser": "…", "FIELD6": "…", "FIELD7": "…" }, { "Character": "prime = minutes = feet", "Entity": "′", "Decimal": "′", "Hex": "′", "Rendering in Your Browser": "′", "FIELD6": "′", "FIELD7": "′" }, { "Character": "double prime = seconds = inches", "Entity": "″", "Decimal": "″", "Hex": "″", "Rendering in Your Browser": "″", "FIELD6": "″", "FIELD7": "″" }, { "Character": "overline = spacing overscore", "Entity": "‾", "Decimal": "‾", "Hex": "‾", "Rendering in Your Browser": "‾", "FIELD6": "‾", "FIELD7": "‾" }, { "Character": "fraction slash", "Entity": "⁄", "Decimal": "⁄", "Hex": "⁄", "Rendering in Your Browser": "⁄", "FIELD6": "⁄", "FIELD7": "⁄" }, { "Character": "script capital P = power set = Weierstrass p", "Entity": "℘", "Decimal": "℘", "Hex": "℘", "Rendering in Your Browser": "℘", "FIELD6": "℘", "FIELD7": "℘" }, { "Character": "blackletter capital I = imaginary part", "Entity": "ℑ", "Decimal": "ℑ", "Hex": "ℑ", "Rendering in Your Browser": "ℑ", "FIELD6": "ℑ", "FIELD7": "ℑ" }, { "Character": "blackletter capital R = real part symbol", "Entity": "ℜ", "Decimal": "ℜ", "Hex": "ℜ", "Rendering in Your Browser": "ℜ", "FIELD6": "ℜ", "FIELD7": "ℜ" }, { "Character": "trade mark sign", "Entity": "™", "Decimal": "™", "Hex": "™", "Rendering in Your Browser": "™", "FIELD6": "™", "FIELD7": "™" }, { "Character": "alef symbol = first transfinite cardinal", "Entity": "ℵ", "Decimal": "ℵ", "Hex": "ℵ", "Rendering in Your Browser": "ℵ", "FIELD6": "ℵ", "FIELD7": "ℵ" }, { "Character": "leftwards arrow", "Entity": "←", "Decimal": "←", "Hex": "←", "Rendering in Your Browser": "←", "FIELD6": "←", "FIELD7": "←" }, { "Character": "upwards arrow", "Entity": "↑", "Decimal": "↑", "Hex": "↑", "Rendering in Your Browser": "↑", "FIELD6": "↑", "FIELD7": "↑" }, { "Character": "rightwards arrow", "Entity": "→", "Decimal": "→", "Hex": "→", "Rendering in Your Browser": "→", "FIELD6": "→", "FIELD7": "→" }, { "Character": "downwards arrow", "Entity": "↓", "Decimal": "↓", "Hex": "↓", "Rendering in Your Browser": "↓", "FIELD6": "↓", "FIELD7": "↓" }, { "Character": "left right arrow", "Entity": "↔", "Decimal": "↔", "Hex": "↔", "Rendering in Your Browser": "↔", "FIELD6": "↔", "FIELD7": "↔" }, { "Character": "downwards arrow with corner leftwards = carriage return", "Entity": "↵", "Decimal": "↵", "Hex": "↵", "Rendering in Your Browser": "↵", "FIELD6": "↵", "FIELD7": "↵" }, { "Character": "leftwards double arrow", "Entity": "⇐", "Decimal": "⇐", "Hex": "⇐", "Rendering in Your Browser": "⇐", "FIELD6": "⇐", "FIELD7": "⇐" }, { "Character": "upwards double arrow", "Entity": "⇑", "Decimal": "⇑", "Hex": "⇑", "Rendering in Your Browser": "⇑", "FIELD6": "⇑", "FIELD7": "⇑" }, { "Character": "rightwards double arrow", "Entity": "⇒", "Decimal": "⇒", "Hex": "⇒", "Rendering in Your Browser": "⇒", "FIELD6": "⇒", "FIELD7": "⇒" }, { "Character": "downwards double arrow", "Entity": "⇓", "Decimal": "⇓", "Hex": "⇓", "Rendering in Your Browser": "⇓", "FIELD6": "⇓", "FIELD7": "⇓" }, { "Character": "left right double arrow", "Entity": "⇔", "Decimal": "⇔", "Hex": "⇔", "Rendering in Your Browser": "⇔", "FIELD6": "⇔", "FIELD7": "⇔" }, { "Character": "for all", "Entity": "∀", "Decimal": "∀", "Hex": "∀", "Rendering in Your Browser": "∀", "FIELD6": "∀", "FIELD7": "∀" }, { "Character": "partial differential", "Entity": "∂", "Decimal": "∂", "Hex": "∂", "Rendering in Your Browser": "∂", "FIELD6": "∂", "FIELD7": "∂" }, { "Character": "there exists", "Entity": "∃", "Decimal": "∃", "Hex": "∃", "Rendering in Your Browser": "∃", "FIELD6": "∃", "FIELD7": "∃" }, { "Character": "empty set = null set = diameter", "Entity": "∅", "Decimal": "∅", "Hex": "∅", "Rendering in Your Browser": "∅", "FIELD6": "∅", "FIELD7": "∅" }, { "Character": "nabla = backward difference", "Entity": "∇", "Decimal": "∇", "Hex": "∇", "Rendering in Your Browser": "∇", "FIELD6": "∇", "FIELD7": "∇" }, { "Character": "element of", "Entity": "∈", "Decimal": "∈", "Hex": "∈", "Rendering in Your Browser": "∈", "FIELD6": "∈", "FIELD7": "∈" }, { "Character": "not an element of", "Entity": "∉", "Decimal": "∉", "Hex": "∉", "Rendering in Your Browser": "∉", "FIELD6": "∉", "FIELD7": "∉" }, { "Character": "contains as member", "Entity": "∋", "Decimal": "∋", "Hex": "∋", "Rendering in Your Browser": "∋", "FIELD6": "∋", "FIELD7": "∋" }, { "Character": "n-ary product = product sign", "Entity": "∏", "Decimal": "∏", "Hex": "∏", "Rendering in Your Browser": "∏", "FIELD6": "∏", "FIELD7": "∏" }, { "Character": "n-ary sumation", "Entity": "∑", "Decimal": "∑", "Hex": "∑", "Rendering in Your Browser": "∑", "FIELD6": "∑", "FIELD7": "∑" }, { "Character": "minus sign", "Entity": "−", "Decimal": "−", "Hex": "−", "Rendering in Your Browser": "−", "FIELD6": "−", "FIELD7": "−" }, { "Character": "asterisk operator", "Entity": "∗", "Decimal": "∗", "Hex": "∗", "Rendering in Your Browser": "∗", "FIELD6": "∗", "FIELD7": "∗" }, { "Character": "square root = radical sign", "Entity": "√", "Decimal": "√", "Hex": "√", "Rendering in Your Browser": "√", "FIELD6": "√", "FIELD7": "√" }, { "Character": "proportional to", "Entity": "∝", "Decimal": "∝", "Hex": "∝", "Rendering in Your Browser": "∝", "FIELD6": "∝", "FIELD7": "∝" }, { "Character": "infinity", "Entity": "∞", "Decimal": "∞", "Hex": "∞", "Rendering in Your Browser": "∞", "FIELD6": "∞", "FIELD7": "∞" }, { "Character": "angle", "Entity": "∠", "Decimal": "∠", "Hex": "∠", "Rendering in Your Browser": "∠", "FIELD6": "∠", "FIELD7": "∠" }, { "Character": "logical and = wedge", "Entity": "∧", "Decimal": "∧", "Hex": "∧", "Rendering in Your Browser": "∧", "FIELD6": "∧", "FIELD7": "∧" }, { "Character": "logical or = vee", "Entity": "∨", "Decimal": "∨", "Hex": "∨", "Rendering in Your Browser": "∨", "FIELD6": "∨", "FIELD7": "∨" }, { "Character": "intersection = cap", "Entity": "∩", "Decimal": "∩", "Hex": "∩", "Rendering in Your Browser": "∩", "FIELD6": "∩", "FIELD7": "∩" }, { "Character": "union = cup", "Entity": "∪", "Decimal": "∪", "Hex": "∪", "Rendering in Your Browser": "∪", "FIELD6": "∪", "FIELD7": "∪" }, { "Character": "integral", "Entity": "∫", "Decimal": "∫", "Hex": "∫", "Rendering in Your Browser": "∫", "FIELD6": "∫", "FIELD7": "∫" }, { "Character": "therefore", "Entity": "∴", "Decimal": "∴", "Hex": "∴", "Rendering in Your Browser": "∴", "FIELD6": "∴", "FIELD7": "∴" }, { "Character": "tilde operator = varies with = similar to", "Entity": "∼", "Decimal": "∼", "Hex": "∼", "Rendering in Your Browser": "∼", "FIELD6": "∼", "FIELD7": "∼" }, { "Character": "approximately equal to", "Entity": "≅", "Decimal": "≅", "Hex": "≅", "Rendering in Your Browser": "≅", "FIELD6": "≅", "FIELD7": "≅" }, { "Character": "almost equal to = asymptotic to", "Entity": "≈", "Decimal": "≈", "Hex": "≈", "Rendering in Your Browser": "≈", "FIELD6": "≈", "FIELD7": "≈" }, { "Character": "not equal to", "Entity": "≠", "Decimal": "≠", "Hex": "≠", "Rendering in Your Browser": "≠", "FIELD6": "≠", "FIELD7": "≠" }, { "Character": "identical to", "Entity": "≡", "Decimal": "≡", "Hex": "≡", "Rendering in Your Browser": "≡", "FIELD6": "≡", "FIELD7": "≡" }, { "Character": "less-than or equal to", "Entity": "≤", "Decimal": "≤", "Hex": "≤", "Rendering in Your Browser": "≤", "FIELD6": "≤", "FIELD7": "≤" }, { "Character": "greater-than or equal to", "Entity": "≥", "Decimal": "≥", "Hex": "≥", "Rendering in Your Browser": "≥", "FIELD6": "≥", "FIELD7": "≥" }, { "Character": "subset of", "Entity": "⊂", "Decimal": "⊂", "Hex": "⊂", "Rendering in Your Browser": "⊂", "FIELD6": "⊂", "FIELD7": "⊂" }, { "Character": "superset of", "Entity": "⊃", "Decimal": "⊃", "Hex": "⊃", "Rendering in Your Browser": "⊃", "FIELD6": "⊃", "FIELD7": "⊃" }, { "Character": "not a subset of", "Entity": "⊄", "Decimal": "⊄", "Hex": "⊄", "Rendering in Your Browser": "⊄", "FIELD6": "⊄", "FIELD7": "⊄" }, { "Character": "subset of or equal to", "Entity": "⊆", "Decimal": "⊆", "Hex": "⊆", "Rendering in Your Browser": "⊆", "FIELD6": "⊆", "FIELD7": "⊆" }, { "Character": "superset of or equal to", "Entity": "⊇", "Decimal": "⊇", "Hex": "⊇", "Rendering in Your Browser": "⊇", "FIELD6": "⊇", "FIELD7": "⊇" }, { "Character": "circled plus = direct sum", "Entity": "⊕", "Decimal": "⊕", "Hex": "⊕", "Rendering in Your Browser": "⊕", "FIELD6": "⊕", "FIELD7": "⊕" }, { "Character": "circled times = vector product", "Entity": "⊗", "Decimal": "⊗", "Hex": "⊗", "Rendering in Your Browser": "⊗", "FIELD6": "⊗", "FIELD7": "⊗" }, { "Character": "up tack = orthogonal to = perpendicular", "Entity": "⊥", "Decimal": "⊥", "Hex": "⊥", "Rendering in Your Browser": "⊥", "FIELD6": "⊥", "FIELD7": "⊥" }, { "Character": "dot operator", "Entity": "⋅", "Decimal": "⋅", "Hex": "⋅", "Rendering in Your Browser": "⋅", "FIELD6": "⋅", "FIELD7": "⋅" }, { "Character": "left ceiling = APL upstile", "Entity": "⌈", "Decimal": "⌈", "Hex": "⌈", "Rendering in Your Browser": "⌈", "FIELD6": "⌈", "FIELD7": "⌈" }, { "Character": "right ceiling", "Entity": "⌉", "Decimal": "⌉", "Hex": "⌉", "Rendering in Your Browser": "⌉", "FIELD6": "⌉", "FIELD7": "⌉" }, { "Character": "left floor = APL downstile", "Entity": "⌊", "Decimal": "⌊", "Hex": "⌊", "Rendering in Your Browser": "⌊", "FIELD6": "⌊", "FIELD7": "⌊" }, { "Character": "right floor", "Entity": "⌋", "Decimal": "⌋", "Hex": "⌋", "Rendering in Your Browser": "⌋", "FIELD6": "⌋", "FIELD7": "⌋" }, { "Character": "left-pointing angle bracket = bra", "Entity": "⟨", "Decimal": "〈", "Hex": "〈", "Rendering in Your Browser": "⟨", "FIELD6": "〈", "FIELD7": "〈" }, { "Character": "right-pointing angle bracket = ket", "Entity": "⟩", "Decimal": "〉", "Hex": "〉", "Rendering in Your Browser": "⟩", "FIELD6": "〉", "FIELD7": "〉" }, { "Character": "lozenge", "Entity": "◊", "Decimal": "◊", "Hex": "◊", "Rendering in Your Browser": "◊", "FIELD6": "◊", "FIELD7": "◊" }, { "Character": "black spade suit", "Entity": "♠", "Decimal": "♠", "Hex": "♠", "Rendering in Your Browser": "♠", "FIELD6": "♠", "FIELD7": "♠" }, { "Character": "black club suit = shamrock", "Entity": "♣", "Decimal": "♣", "Hex": "♣", "Rendering in Your Browser": "♣", "FIELD6": "♣", "FIELD7": "♣" }, { "Character": "black heart suit = valentine", "Entity": "♥", "Decimal": "♥", "Hex": "♥", "Rendering in Your Browser": "♥", "FIELD6": "♥", "FIELD7": "♥" }, { "Character": "black diamond suit", "Entity": "♦", "Decimal": "♦", "Hex": "♦", "Rendering in Your Browser": "♦", "FIELD6": "♦", "FIELD7": "♦" } ] PKf[�\�65�rrexamples/hint-emoji.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript" src="../lang/summernote-ko-KR.js"></script> <script type="text/javascript"> $(document).ready(function () { var self = this; // load github's emoji list $.ajax({ url: 'https://api.github.com/emojis' }).then(function (data) { var emojis = Object.keys(data); var emojiUrls = data; $('.summernote').summernote({ height: 300, hintDirection: 'top', hint: [{ search: function (keyword, callback) { callback($.grep(emojis, function (item) { return item.indexOf(keyword) === 0; })); }, match: /\B:([\-+\w]+)$/, template: function (item) { var content = emojiUrls[item]; return '<img src="' + content + '" width="20" /> :' + item + ':'; }, content: function (item) { var url = emojiUrls[item]; if (url) { return $('<img />').attr('src', url).css('width', 20)[0]; } return ''; } }] }); }); }); </script> </head> <body> <textarea class="summernote">Type text start with ":". For example, :smile or :+1:.</textarea> </body> </html> PKf[�\� �� examples/external-api.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>summernote - external-api</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libs stylesheets --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <style> .container { position: absolute; left: 10%; right: 10%; top: 10%; bottom: 10%; } .custom-toolbar { padding: 5px; } h1 { text-align: center; } </style> <script type="text/javascript"> var $summernote; $(document).ready(function () { $summernote = $('.summernote'); // init summernote $summernote.summernote({ height: 300, toolbar: false }); $("button").popover({ trigger: 'hover' }); }); function command() { $summernote.summernote(arguments[0], arguments[1]); } </script> </head> <body> <div class="container"> <h1>External API Sample</h1> <div class="custom-toolbar"> <div class="btn-group" role="group" aria-label="..."> <button type="button" class="btn btn-default" data-container="body" data-trigger="hover" data-placement="left" data-content="Sample Content" title="Sample Button" onclick="command('justifyLeft')">Left </button> <button type="button" class="btn btn-default" onclick="command('justifyCenter')">Middle</button> <button type="button" class="btn btn-default" onclick="command('justifyRight')">Right</button> </div> <div class="btn-group" role="group" aria-label="..."> <button type="button" class="btn btn-default" data-container="body" data-trigger="hover" data-placement="bottom" data-content="Apply bold style to selected text" title="Bold (CTRL+B)" onclick="command('bold')"><i class="fa fa-bold"></i> Bold </button> <button type="button" class="btn btn-default" title="Italic (CTRL+I)" onclick="command('italic')"><i class="fa fa-italic"></i> Italic </button> <button type="button" class="btn btn-default" title="Underline (CTRL+U)" onclick="command('underline')"><i class="fa fa-underline"></i> Underline </button> <button type="button" class="btn btn-default" title="Remove Font Style (CTRL+\)" onclick="command('removeFormat')" style="color:red;"><i class="fa fa-eraser"></i> Remove Format </button> </div> </div> <div class="summernote">Hello World</div> </div> </body> </html> PKf[�\ 48i��examples/with-google-font.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script> <link href="https://fonts.googleapis.com/css?family=Coming+Soon|Exo+2" rel="stylesheet"> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(function() { $('.summernote').summernote({ height: 200, fontNames : ['Coming Soon'], fontNamesIgnoreCheck: ['Coming Soon'] }); $('form').on('submit', function (e) { e.preventDefault(); alert($('.summernote').summernote('code')); alert($('.summernote').val()); }); }); </script> </head> <body> <form action="#" novalidate> <div class="form-group"> <label for="input">Text</label> <input type="text" class="form-input" id="input" value="Title"> </div> <div class="form-group"> <label for="contents">Contents</label> <textarea name="text" class="summernote" id="contents" title="Contents"></textarea>` </div> <button type="submit" class="btn btn-default">submit</button> </form> </body> </html> PKf[�\�S"%GGexamples/toolbar-container.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS3 --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" /> <script type="text/javascript" src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote.css"> <script type="text/javascript" src="../dist/summernote.js"></script> <script type="text/javascript"> $(function() { $('.summernote').summernote({ height: 200, tabsize: 2, toolbarContainer : "#toolbar" }); }); </script> </head> <body> Here is a toolbar. <div id="toolbar"></div> <p>Here is a summernote.</p> <textarea class="summernote">Seasons coming up</textarea> </body> </html> PKf[�\�-֥�examples/lang.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript" src="../lang/summernote-ko-KR.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 200, tabsize: 2, lang: 'ko-KR' }); }); </script> </head> <body> <textarea class="summernote"><p>Seasons <b>coming up</b></p></textarea> </body> </html> PKf[�\!�z���!examples/jquery-custom-event.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jquery old</title> <script src="http://code.jquery.com/jquery-1.11.3.js"></script> <!-- include libraries --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <style> .container { position: absolute; left: 10%; right: 10%; top: 10%; bottom: 10%; } .custom-toolbar { padding: 5px; } h1 { text-align: center; } </style> <script type="text/javascript"> $(function() { $('.summernote').on('summernote.init', function() { console.log('summernote initialize!') }).on('summernote.change', function() { console.log(' changed content ') }).on('summernote.keyup', function(event) { console.log('you can use keyboard event', event); }).on('summernote.enter', function(event) { console.log('check enter key '); }).summernote({ height : 300 }); }); </script> </head> <body> <div class="container"> <h1>jQuery Custom Event Sample</h1> <div class="summernote"> <article class="markdown-body js-file js-task-list-container is-task-list-enabled" data-task-list-update-url="https://gist.github.com/easylogic/95d2dbe03ce500bd0ae1/file/gistfile1.md"> <h1> <a name="user-content-how-to-set-custom-event" class="anchor" href="#how-to-set-custom-event" rel="noreferrer"><span class="octicon octicon-link"></span></a>How to set custom event</h1> <h2> <a name="user-content-current-style-1" class="anchor" href="#current-style-1" rel="noreferrer"><span class="octicon octicon-link"></span></a>current style</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).summernote({ <span class="pl-en">onfocus</span> : <span class="pl-st">function</span>(<span class="pl-vpf">e</span>) { <span class="pl-c">// to do something</span> } });</pre></div> <h2> <a name="user-content-jquery-plugin-style" class="anchor" href="#jquery-plugin-style" rel="noreferrer"><span class="octicon octicon-link"></span></a>jquery style</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.focus<span class="pl-pds">"</span></span>, <span class="pl-st">function</span>(<span class="pl-vpf">e</span>) { <span class="pl-c">// to do something</span> });</pre></div> <h1> <a name="user-content-event-list" class="anchor" href="#event-list" rel="noreferrer"><span class="octicon octicon-link"></span></a>Event List</h1> <h2> <a name="user-content-oninit" class="anchor" href="#oninit" rel="noreferrer"><span class="octicon octicon-link"></span></a>oninit</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.init<span class="pl-pds">"</span></span>, ...);</pre></div> <h2> <a name="user-content-onfocus" class="anchor" href="#onfocus" rel="noreferrer"><span class="octicon octicon-link"></span></a>onfocus</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.focus<span class="pl-pds">"</span></span>, ...);</pre></div> <h2> <a name="user-content-onenter" class="anchor" href="#onenter" rel="noreferrer"><span class="octicon octicon-link"></span></a>onenter</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.enter<span class="pl-pds">"</span></span>, ...);</pre></div> <h2> <a name="user-content-onblur" class="anchor" href="#onblur" rel="noreferrer"><span class="octicon octicon-link"></span></a>onblur</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.blur<span class="pl-pds">"</span></span>, ...);</pre></div> <h2> <a name="user-content-onkeyup" class="anchor" href="#onkeyup" rel="noreferrer"><span class="octicon octicon-link"></span></a>onkeyup</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.keyup<span class="pl-pds">"</span></span>, ...);</pre></div> <h2> <a name="user-content-onkeydown" class="anchor" href="#onkeydown" rel="noreferrer"><span class="octicon octicon-link"></span></a>onkeydown</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.keydown<span class="pl-pds">"</span></span>, ...);</pre></div> <h2> <a name="user-content-onchange" class="anchor" href="#onchange" rel="noreferrer"><span class="octicon octicon-link"></span></a>onChange</h2> <div class="highlight highlight-javascript"><pre>$(<span class="pl-s1"><span class="pl-pds">"</span>.summernote<span class="pl-pds">"</span></span>).on(<span class="pl-s1"><span class="pl-pds">"</span>summernote.change<span class="pl-pds">"</span></span>, ...);</pre></div> </article> </div> </div> </body> </html> PKf[�\~ ��AAexamples/ondialog.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script> $(function () { $('#dropper').on('shown.bs.modal', function() { $('#dropping').summernote({ height: 300, focus: true }); }).on('hidden.bs.modal', function () { $('#dropping').summernote('destroy'); }); }); </script> </head> <body> <button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#dropper">Show Dialog</button> <div id="dropper" class="modal fade" tabindex="-1" data-backdrop="static" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> <div id="dropping">text...</div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default pull-left"> <span class="fa fa-paperclip"></span> Attach Digital Assets </button> <div class="btn-group"> <button type="button" class="btn btn-default opacity75" class="close" data-dismiss="modal"> × Cancel </button> <button type="button" class="btn btn-warning" href="javascript:postDrop()"> Post Status Update <span class="fa fa-bullhorn"></span> </button> </div> </div> </div> </div> </div> </body> </html> PKf[�\��.���=examples/hint-symbols_mathematical-symbols_Greek-letters.htmlnu�[���<!-- Data Source: http://www.htmlhelp.com/reference/html40/entities/symbols.html HTML To Convert JSON http://convertjson.com/html-table-to-json.htm Creator : ARGE|LOG github@argelog.com.tr --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> <!-- include libs stylesheets --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script src="https://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> $(function() { $('.summernote').summernote({ height: 200, hint: { match: /=(\w{0,})$/, search: function(keyword, callback) { $.ajax({ url: 'symbols_mathematical-symbols_Greek-letters.json?v=1' }).then(function (data) { callback(data.filter(function(item){return item.Character.indexOf(keyword)>-1 || item.FIELD6.indexOf(keyword)>-1;})); }); }, content: function(item) { return item.FIELD6; }, template: function(item) { return '[<strong>' + item.FIELD6 + '</strong>] ' + item.Character; } } }); }); </script> </head> <body> <textarea class="summernote">type #su</textarea> </body> </html> PKf[�\&�9��examples/jquery19lt.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jquery old</title> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <!-- include libraries --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" /> <script src="//netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote.css"> <script type="text/javascript" src="../dist/summernote.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({height: 200}); }); </script> </head> <body> <div class="summernote"></div> </body> </html> PKf[�\��qZZexamples/rtl.htmlnu�[���<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>summernote</title> <!-- include jquery --> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <!-- include libraries BS --> <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.css" /> <script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.js"></script> <script src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.js"></script> <!-- include summernote --> <link rel="stylesheet" href="../dist/summernote-bs4.css"> <script type="text/javascript" src="../dist/summernote-bs4.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.summernote').summernote({ height: 200, tabsize: 2, direction: 'rtl' }); }); </script> </head> <body> <textarea class="summernote"><p>Seasons <b>coming up</b></p></textarea> </body> </html> PKf[�\T�� README.mdnu�[���# Summernote Super simple WYSIWYG Editor. [](http://travis-ci.org/summernote/summernote) [](http://badge.fury.io/js/summernote) [](https://gemnasium.com/summernote/summernote) [](https://coveralls.io/github/summernote/summernote?branch=develop) [](https://saucelabs.com/u/summernoteis) ### Summernote Summernote is a JavaScript library that helps you create WYSIWYG editors online. Home page: <https://summernote.org> ### Why Summernote? Summernote has a few special features: * Paste images from clipboard * Saves images directly in the content of the field using base64 encoding, so you don't need to implement image handling at all * Simple UI * Interactive WYSIWYG editing * Handy integration with server * Supports Bootstrap 3 and 4 integrities * Lots of [plugins and connectors](https://github.com/summernote/awesome-summernote) provided together ### Installation and dependencies Summernote is built on [jQuery](http://jquery.com/). #### 1. Include JS/CSS Include the following code in the `<head>` tag of your HTML: ```html <!-- include libraries(jQuery, bootstrap) --> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" /> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script> <!-- include summernote css/js--> <link href="summernote.css" rel="stylesheet"> <script src="summernote.js"></script> ``` #### 2. Target a element Then place a `div` tag somewhere in the `body` tag. This element will be replaced with the summernote editor. ```html <div id="summernote">Hello Summernote</div> ``` #### 3. Summernote it! Finally, run this script after the DOM is ready: ```javascript $(document).ready(function() { $('#summernote').summernote(); }); ``` For more examples, please visit to [homepage](http://summernote.org/examples). ### API `code` - get the HTML source code underlying the text in the editor: ```javascript var html = $('#summernote').summernote('code'); ``` For more detail about API, please refer to [document](http://summernote.org/getting-started/#basic-api). #### Warning - code injection The code view allows the user to enter script contents. Make sure to filter/[sanitize the HTML on the server](https://github.com/search?l=JavaScript&q=sanitize+html). Otherwise, an attacker can inject arbitrary JavaScript code into clients. ### For contributing https://github.com/summernote/summernote/blob/develop/CONTRIBUTING.md ### Contacts * Facebook user group: https://www.facebook.com/groups/summernote * Summernote Slack: [Join the Summernote Slack community](https://communityinviter.com/apps/summernote/summernote) ### License Summernote may be freely distributed under the MIT license. PKf[�\���lang/summernote-ja-JP.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ja-JP': { font: { bold: '太字', italic: '斜体', underline: '下線', clear: 'クリア', height: '文字高', name: 'フォント', strikethrough: '取り消し線', subscript: 'Subscript', superscript: 'Superscript', size: '大きさ' }, image: { image: '画像', insert: '画像挿入', resizeFull: '最大化', resizeHalf: '1/2', resizeQuarter: '1/4', floatLeft: '左寄せ', floatRight: '右寄せ', floatNone: '寄せ解除', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'ここに画像をドラッグしてください', dropImage: 'Drop image or Text', selectFromFiles: '画像ファイルを選ぶ', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URLから画像を挿入する', remove: '画像を削除する', original: 'Original' }, video: { video: '動画', videoLink: '動画リンク', insert: '動画挿入', url: '動画のURL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku)' }, link: { link: 'リンク', insert: 'リンク挿入', unlink: 'リンク解除', edit: '編集', textToDisplay: 'リンク文字列', url: 'URLを入力してください', openInNewWindow: '新しいウィンドウで開く' }, 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: '水平線の挿入' }, style: { style: 'スタイル', p: '標準', blockquote: '引用', pre: 'コード', h1: '見出し1', h2: '見出し2', h3: '見出し3', h4: '見出し4', h5: '見出し5', h6: '見出し6' }, lists: { unordered: '通常リスト', ordered: '番号リスト' }, options: { help: 'ヘルプ', fullscreen: 'フルスクリーン', codeview: 'コード表示' }, paragraph: { paragraph: '文章', outdent: '字上げ', indent: '字下げ', left: '左寄せ', center: '中央寄せ', right: '右寄せ', justify: '均等割付' }, color: { recent: '現在の色', more: 'もっと見る', background: '背景色', foreground: '文字色', transparent: '透明', setTransparent: '透明にする', reset: '標準', resetToDefault: '標準に戻す' }, shortcut: { shortcuts: 'ショートカット', close: '閉じる', textFormatting: '文字フォーマット', action: 'アクション', paragraphFormatting: '文章フォーマット', documentStyle: 'ドキュメント形式', extraKeys: 'Extra keys' }, help: { 'insertParagraph': '改行挿入', 'undo': '一旦、行った操作を戻す', 'redo': '最後のコマンドをやり直す', 'tab': 'Tab', 'untab': 'タブ戻し', 'bold': '太文字', 'italic': '斜体', 'underline': '下線', 'strikethrough': '取り消し線', 'removeFormat': '装飾を戻す', 'justifyLeft': '左寄せ', 'justifyCenter': '真ん中寄せ', 'justifyRight': '右寄せ', 'justifyFull': 'すべてを整列', 'insertUnorderedList': '行頭に●を挿入', 'insertOrderedList': '行頭に番号を挿入', 'outdent': '字下げを戻す(アウトデント)', 'indent': '字下げする(インデント)', 'formatPara': '段落(P tag)指定', 'formatH1': 'H1指定', 'formatH2': 'H2指定', 'formatH3': 'H3指定', 'formatH4': 'H4指定', 'formatH5': 'H5指定', 'formatH6': 'H6指定', 'insertHorizontalRule': '<hr />を挿入', 'linkDialog.show': 'リンク挿入' }, history: { undo: '元に戻す', redo: 'やり直す' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\AtS��lang/summernote-mn-MN.jsnu�[���// Starsoft Mongolia LLC Temuujin Ariunbold (function($) { $.extend($.summernote.lang, { 'mn-MN': { font: { bold: 'Тод', italic: 'Налуу', underline: 'Доогуур зураас', clear: 'Цэвэрлэх', height: 'Өндөр', name: 'Фонт', superscript: 'Дээд илтгэгч', subscript: 'Доод илтгэгч', strikethrough: 'Дарах', size: 'Хэмжээ' }, image: { image: 'Зураг', insert: 'Оруулах', resizeFull: 'Хэмжээ бүтэн', resizeHalf: 'Хэмжээ 1/2', resizeQuarter: 'Хэмжээ 1/4', floatLeft: 'Зүүн талд байрлуулах', floatRight: 'Баруун талд байрлуулах', floatNone: 'Анхдагч байрлалд аваачих', shapeRounded: 'Хүрээ: Дугуй', shapeCircle: 'Хүрээ: Тойрог', shapeThumbnail: 'Хүрээ: Хураангуй', shapeNone: 'Хүрээгүй', dragImageHere: 'Зургийг энд чирч авчирна уу', dropImage: 'Drop image or Text', selectFromFiles: 'Файлуудаас сонгоно уу', maximumFileSize: 'Файлын дээд хэмжээ', maximumFileSizeError: 'Файлын дээд хэмжээ хэтэрсэн', url: 'Зургийн URL', remove: 'Зургийг устгах', original: 'Original' }, video: { video: 'Видео', videoLink: 'Видео холбоос', insert: 'Видео оруулах', url: 'Видео URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion болон Youku)' }, link: { link: 'Холбоос', insert: 'Холбоос оруулах', unlink: 'Холбоос арилгах', edit: 'Засварлах', textToDisplay: 'Харуулах бичвэр', url: 'Энэ холбоос хаашаа очих вэ?', openInNewWindow: 'Шинэ цонхонд нээх' }, 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: 'Хэвтээ шугам оруулах' }, style: { style: 'Хэв маяг', p: 'p', blockquote: 'Иш татах', pre: 'Эх сурвалж', h1: 'Гарчиг 1', h2: 'Гарчиг 2', h3: 'Гарчиг 3', h4: 'Гарчиг 4', h5: 'Гарчиг 5', h6: 'Гарчиг 6' }, lists: { unordered: 'Эрэмбэлэгдээгүй', ordered: 'Эрэмбэлэгдсэн' }, options: { help: 'Тусламж', fullscreen: 'Дэлгэцийг дүүргэх', codeview: 'HTML-Code харуулах' }, paragraph: { paragraph: 'Хэсэг', outdent: 'Догол мөр хасах', indent: 'Догол мөр нэмэх', left: 'Зүүн тийш эгнүүлэх', center: 'Төвд эгнүүлэх', right: 'Баруун тийш эгнүүлэх', justify: 'Мөрийг тэгшлэх' }, color: { recent: 'Сүүлд хэрэглэсэн өнгө', more: 'Өөр өнгөнүүд', background: 'Дэвсгэр өнгө', foreground: 'Үсгийн өнгө', transparent: 'Тунгалаг', setTransparent: 'Тунгалаг болгох', reset: 'Анхдагч өнгөөр тохируулах', resetToDefault: 'Хэвд нь оруулах' }, shortcut: { shortcuts: 'Богино холбоос', close: 'Хаалт', textFormatting: 'Бичвэрийг хэлбэржүүлэх', action: 'Үйлдэл', paragraphFormatting: 'Догол мөрийг хэлбэржүүлэх', documentStyle: 'Бичиг баримтын хэв загвар', 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: 'Буцаах', redo: 'Дахин хийх' }, specialChar: { specialChar: 'Тусгай тэмдэгт', select: 'Тусгай тэмдэгт сонгох' } } }); })(jQuery); PKf[�\A�v��lang/summernote-ta-IN.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ta-IN': { font: { bold: 'தடித்த', italic: 'சாய்வு', underline: 'அடிக்கோடு', clear: 'நீக்கு', height: 'வரி உயரம்', name: 'எழுத்துரு பெயர்', strikethrough: 'குறுக்குக் கோடு', size: 'எழுத்துரு அளவு', superscript: 'மேல் ஒட்டு', subscript: 'கீழ் ஒட்டு' }, image: { image: 'படம்', insert: 'படத்தை செருகு', resizeFull: 'முழு அளவை', resizeHalf: 'அரை அளவை', resizeQuarter: 'கால் அளவை', floatLeft: 'இடப்பக்கமாக வை', floatRight: 'வலப்பக்கமாக வை', floatNone: 'இயல்புநிலையில் வை', shapeRounded: 'வட்டமான வடிவம்', shapeCircle: 'வட்ட வடிவம்', shapeThumbnail: 'சிறு வடிவம்', shapeNone: 'வடிவத்தை நீக்கு', dragImageHere: 'படத்தை இங்கே இழுத்துவை', dropImage: 'படத்தை விடு', selectFromFiles: 'கோப்புகளை தேர்வு செய்', maximumFileSize: 'அதிகபட்ச கோப்பு அளவு', maximumFileSizeError: 'கோப்பு அதிகபட்ச அளவை மீறிவிட்டது', url: 'இணையதள முகவரி', remove: 'படத்தை நீக்கு', original: 'Original' }, video: { video: 'காணொளி', videoLink: 'காணொளி இணைப்பு', insert: 'காணொளியை செருகு', url: 'இணையதள முகவரி', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'இணைப்பு', insert: 'இணைப்பை செருகு', unlink: 'இணைப்பை நீக்கு', edit: 'இணைப்பை தொகு', textToDisplay: 'காட்சி வாசகம்', url: 'இணையதள முகவரி', openInNewWindow: 'புதிய சாளரத்தில் திறக்க' }, 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: 'கிடைமட்ட கோடு' }, style: { style: 'தொகுப்பு', p: 'பத்தி', blockquote: 'மேற்கோள்', pre: 'குறியீடு', h1: 'தலைப்பு 1', h2: 'தலைப்பு 2', h3: 'தலைப்பு 3', h4: 'தலைப்பு 4', h5: 'தலைப்பு 5', h6: 'தலைப்பு 6' }, lists: { unordered: 'வரிசையிடாத', ordered: 'வரிசையிட்ட' }, options: { help: 'உதவி', fullscreen: 'முழுத்திரை', codeview: 'நிரலாக்க காட்சி' }, paragraph: { paragraph: 'பத்தி', outdent: 'வெளித்தள்ளு', indent: 'உள்ளே தள்ளு', left: 'இடது சீரமைப்பு', center: 'நடு சீரமைப்பு', right: 'வலது சீரமைப்பு', justify: 'இருபுற சீரமைப்பு' }, color: { recent: 'அண்மை நிறம்', more: 'மேலும்', background: 'பின்புல நிறம்', foreground: 'முன்புற நிறம்', transparent: 'தெளிமையான', setTransparent: 'தெளிமையாக்கு', reset: 'மீட்டமைக்க', resetToDefault: 'இயல்புநிலைக்கு மீட்டமை' }, shortcut: { shortcuts: 'குறுக்குவழி', close: 'மூடு', textFormatting: 'எழுத்து வடிவமைப்பு', action: 'செயல்படுத்து', paragraphFormatting: 'பத்தி வடிவமைப்பு', documentStyle: 'ஆவண பாணி', 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: 'மீளமை', redo: 'மீண்டும்' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�E)lang/summernote-da-DK.jsnu�[���(function($) { $.extend($.summernote.lang, { 'da-DK': { font: { bold: 'Fed', italic: 'Kursiv', underline: 'Understreget', clear: 'Fjern formatering', height: 'Højde', name: 'Skrifttype', strikethrough: 'Gennemstreget', subscript: 'Sænket skrift', superscript: 'Hævet skrift', size: 'Skriftstørrelse' }, image: { image: 'Billede', insert: 'Indsæt billede', resizeFull: 'Original størrelse', resizeHalf: 'Halv størrelse', resizeQuarter: 'Kvart størrelse', floatLeft: 'Venstrestillet', floatRight: 'Højrestillet', floatNone: 'Fjern formatering', shapeRounded: 'Form: Runde kanter', shapeCircle: 'Form: Cirkel', shapeThumbnail: 'Form: Miniature', shapeNone: 'Form: Ingen', dragImageHere: 'Træk billede hertil', dropImage: 'Slip billede', selectFromFiles: 'Vælg billed-fil', maximumFileSize: 'Maks fil størrelse', maximumFileSizeError: 'Filen er større end maks tilladte fil størrelse!', url: 'Billede URL', remove: 'Fjern billede', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Indsæt Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' }, link: { link: 'Link', insert: 'Indsæt link', unlink: 'Fjern link', edit: 'Rediger', textToDisplay: 'Visningstekst', url: 'Hvor skal linket pege hen?', openInNewWindow: 'Åbn i nyt vindue' }, table: { table: 'Tabel', 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: 'Indsæt horisontal linje' }, style: { style: 'Stil', p: 'p', blockquote: 'Citat', pre: 'Kode', h1: 'Overskrift 1', h2: 'Overskrift 2', h3: 'Overskrift 3', h4: 'Overskrift 4', h5: 'Overskrift 5', h6: 'Overskrift 6' }, lists: { unordered: 'Punktopstillet liste', ordered: 'Nummereret liste' }, options: { help: 'Hjælp', fullscreen: 'Fuld skærm', codeview: 'HTML-Visning' }, paragraph: { paragraph: 'Afsnit', outdent: 'Formindsk indryk', indent: 'Forøg indryk', left: 'Venstrestillet', center: 'Centreret', right: 'Højrestillet', justify: 'Blokjuster' }, color: { recent: 'Nyligt valgt farve', more: 'Flere farver', background: 'Baggrund', foreground: 'Forgrund', transparent: 'Transparent', setTransparent: 'Sæt transparent', reset: 'Nulstil', resetToDefault: 'Gendan standardindstillinger' }, shortcut: { shortcuts: 'Genveje', close: 'Luk', textFormatting: 'Tekstformatering', action: 'Handling', paragraphFormatting: 'Afsnitsformatering', documentStyle: 'Dokumentstil', 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: 'Fortryd', redo: 'Annuller fortryd' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\* ����lang/summernote-vi-VN.jsnu�[���(function($) { $.extend($.summernote.lang, { 'vi-VN': { font: { bold: 'In Đậm', italic: 'In Nghiêng', underline: 'Gạch dưới', clear: 'Bỏ định dạng', height: 'Chiều cao dòng', name: 'Phông chữ', strikethrough: 'Gạch ngang', subscript: 'Subscript', superscript: 'Superscript', size: 'Cỡ chữ' }, image: { image: 'Hình ảnh', insert: 'Chèn', resizeFull: '100%', resizeHalf: '50%', resizeQuarter: '25%', floatLeft: 'Trôi về trái', floatRight: 'Trôi về phải', floatNone: 'Không trôi', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Thả Ảnh ở vùng này', dropImage: 'Drop image or Text', selectFromFiles: 'Chọn từ File', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL', remove: 'Xóa', original: 'Original' }, video: { video: 'Video', videoLink: 'Link đến Video', insert: 'Chèn Video', url: 'URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion và Youku)' }, link: { link: 'Link', insert: 'Chèn Link', unlink: 'Gỡ Link', edit: 'Sửa', textToDisplay: 'Văn bản hiển thị', url: 'URL', openInNewWindow: 'Mở ở Cửa sổ mới' }, table: { table: 'Bảng', 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: 'Chèn' }, style: { style: 'Kiểu chữ', p: 'Chữ thường', blockquote: 'Đoạn trích', pre: 'Mã Code', h1: 'H1', h2: 'H2', h3: 'H3', h4: 'H4', h5: 'H5', h6: 'H6' }, lists: { unordered: 'Liệt kê danh sách', ordered: 'Liệt kê theo thứ tự' }, options: { help: 'Trợ giúp', fullscreen: 'Toàn Màn hình', codeview: 'Xem Code' }, paragraph: { paragraph: 'Canh lề', outdent: 'Dịch sang trái', indent: 'Dịch sang phải', left: 'Canh trái', center: 'Canh giữa', right: 'Canh phải', justify: 'Canh đều' }, color: { recent: 'Màu chữ', more: 'Mở rộng', background: 'Màu nền', foreground: 'Màu chữ', transparent: 'trong suốt', setTransparent: 'Nền trong suốt', reset: 'Thiết lập lại', resetToDefault: 'Trở lại ban đầu' }, shortcut: { shortcuts: 'Phím tắt', close: 'Đóng', textFormatting: 'Định dạng Văn bản', action: 'Hành động', paragraphFormatting: 'Định dạng', documentStyle: 'Kiểu văn bản', 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: 'Lùi lại', redo: 'Làm lại' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\��1ZZlang/summernote-es-EU.jsnu�[���(function($) { $.extend($.summernote.lang, { 'es-EU': { font: { bold: 'Lodia', italic: 'Etzana', underline: 'Azpimarratua', clear: 'Estiloa kendu', height: 'Lerro altuera', name: 'Tipografia', strikethrough: 'Marratua', subscript: 'Subscript', superscript: 'Superscript', size: 'Letren neurria' }, image: { image: 'Irudia', insert: 'Irudi bat txertatu', resizeFull: 'Jatorrizko neurrira aldatu', resizeHalf: 'Neurria erdira aldatu', resizeQuarter: 'Neurria laurdenera aldatu', floatLeft: 'Ezkerrean kokatu', floatRight: 'Eskuinean kokatu', floatNone: 'Kokapenik ez ezarri', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Irudi bat ezarri hemen', dropImage: 'Drop image or Text', selectFromFiles: 'Zure fitxategi bat aukeratu', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Irudiaren URL helbidea', remove: 'Remove Image', original: 'Original' }, video: { video: 'Bideoa', videoLink: 'Bideorako esteka', insert: 'Bideo berri bat txertatu', url: 'Bideoaren URL helbidea', providers: '(YouTube, Vimeo, Vine, Instagram edo DailyMotion)' }, link: { link: 'Esteka', insert: 'Esteka bat txertatu', unlink: 'Esteka ezabatu', edit: 'Editatu', textToDisplay: 'Estekaren testua', url: 'Estekaren URL helbidea', openInNewWindow: 'Leiho berri batean ireki' }, table: { table: 'Taula', 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: 'Marra horizontala txertatu' }, style: { style: 'Estiloa', p: 'p', blockquote: 'Aipamena', pre: 'Kodea', h1: '1. izenburua', h2: '2. izenburua', h3: '3. izenburua', h4: '4. izenburua', h5: '5. izenburua', h6: '6. izenburua' }, lists: { unordered: 'Ordenatu gabeko zerrenda', ordered: 'Zerrenda ordenatua' }, options: { help: 'Laguntza', fullscreen: 'Pantaila osoa', codeview: 'Kodea ikusi' }, paragraph: { paragraph: 'Paragrafoa', outdent: 'Koska txikiagoa', indent: 'Koska handiagoa', left: 'Ezkerrean kokatu', center: 'Erdian kokatu', right: 'Eskuinean kokatu', justify: 'Justifikatu' }, color: { recent: 'Azken kolorea', more: 'Kolore gehiago', background: 'Atzeko planoa', foreground: 'Aurreko planoa', transparent: 'Gardena', setTransparent: 'Gardendu', reset: 'Lehengoratu', resetToDefault: 'Berrezarri lehenetsia' }, shortcut: { shortcuts: 'Lasterbideak', close: 'Itxi', textFormatting: 'Testuaren formatua', action: 'Ekintza', paragraphFormatting: 'Paragrafoaren formatua', documentStyle: 'Dokumentuaren estiloa' }, 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: 'Desegin', redo: 'Berregin' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�ftlang/summernote-hu-HU.jsnu�[���(function($) { $.extend($.summernote.lang, { 'hu-HU': { font: { bold: 'Félkövér', italic: 'Dőlt', underline: 'Aláhúzott', clear: 'Formázás törlése', height: 'Sorköz', name: 'Betűtípus', strikethrough: 'Áthúzott', subscript: 'Subscript', superscript: 'Superscript', size: 'Betűméret' }, image: { image: 'Kép', insert: 'Kép beszúrása', resizeFull: 'Átméretezés teljes méretre', resizeHalf: 'Átméretezés felére', resizeQuarter: 'Átméretezés negyedére', floatLeft: 'Igazítás balra', floatRight: 'Igazítás jobbra', floatNone: 'Igazítás törlése', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Ide húzhat képet vagy szöveget', dropImage: 'Engedje el a képet vagy szöveget', selectFromFiles: 'Fájlok kiválasztása', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Kép URL címe', remove: 'Kép törlése', original: 'Original' }, video: { video: 'Videó', videoLink: 'Videó hivatkozás', insert: 'Videó beszúrása', url: 'Videó URL címe', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion vagy Youku)' }, link: { link: 'Hivatkozás', insert: 'Hivatkozás beszúrása', unlink: 'Hivatkozás megszüntetése', edit: 'Szerkesztés', textToDisplay: 'Megjelenítendő szöveg', url: 'Milyen URL címre hivatkozzon?', openInNewWindow: 'Megnyitás új ablakban' }, table: { table: 'Táblázat', 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: 'Elválasztó vonal beszúrása' }, style: { style: 'Stílus', p: 'Normál', blockquote: 'Idézet', pre: 'Kód', h1: 'Fejléc 1', h2: 'Fejléc 2', h3: 'Fejléc 3', h4: 'Fejléc 4', h5: 'Fejléc 5', h6: 'Fejléc 6' }, lists: { unordered: 'Listajeles lista', ordered: 'Számozott lista' }, options: { help: 'Súgó', fullscreen: 'Teljes képernyő', codeview: 'Kód nézet' }, paragraph: { paragraph: 'Bekezdés', outdent: 'Behúzás csökkentése', indent: 'Behúzás növelése', left: 'Igazítás balra', center: 'Igazítás középre', right: 'Igazítás jobbra', justify: 'Sorkizárt' }, color: { recent: 'Jelenlegi szín', more: 'További színek', background: 'Háttérszín', foreground: 'Betűszín', transparent: 'Átlátszó', setTransparent: 'Átlászóság beállítása', reset: 'Visszaállítás', resetToDefault: 'Alaphelyzetbe állítás' }, shortcut: { shortcuts: 'Gyorsbillentyű', close: 'Bezárás', textFormatting: 'Szöveg formázása', action: 'Művelet', paragraphFormatting: 'Bekezdés formázása', documentStyle: 'Dokumentumstílus', extraKeys: 'Extra keys' }, help: { 'insertParagraph': 'Új bekezdés', 'undo': 'Visszavonás', 'redo': 'Újra', 'tab': 'Behúzás növelése', 'untab': 'Behúzás csökkentése', 'bold': 'Félkövérre állítás', 'italic': 'Dőltre állítás', 'underline': 'Aláhúzás', 'strikethrough': 'Áthúzás', 'removeFormat': 'Formázás törlése', 'justifyLeft': 'Balra igazítás', 'justifyCenter': 'Középre igazítás', 'justifyRight': 'Jobbra igazítás', 'justifyFull': 'Sorkizárt', 'insertUnorderedList': 'Számozatlan lista be/ki', 'insertOrderedList': 'Számozott lista be/ki', 'outdent': 'Jelenlegi bekezdés behúzásának megszüntetése', 'indent': 'Jelenlegi bekezdés behúzása', 'formatPara': 'Blokk formázása bekezdésként (P tag)', 'formatH1': 'Blokk formázása, mint Fejléc 1', 'formatH2': 'Blokk formázása, mint Fejléc 2', 'formatH3': 'Blokk formázása, mint Fejléc 3', 'formatH4': 'Blokk formázása, mint Fejléc 4', 'formatH5': 'Blokk formázása, mint Fejléc 5', 'formatH6': 'Blokk formázása, mint Fejléc 6', 'insertHorizontalRule': 'Vízszintes vonal beszúrása', 'linkDialog.show': 'Link párbeszédablak megjelenítése' }, history: { undo: 'Visszavonás', redo: 'Újra' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\N�2���lang/summernote-fr-FR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'fr-FR': { font: { bold: 'Gras', italic: 'Italique', underline: 'Souligné', clear: 'Effacer la mise en forme', height: 'Interligne', name: 'Famille de police', strikethrough: 'Barré', superscript: 'Exposant', subscript: 'Indice', size: 'Taille de police' }, image: { image: 'Image', insert: 'Insérer une image', resizeFull: 'Taille originale', resizeHalf: 'Redimensionner à 50 %', resizeQuarter: 'Redimensionner à 25 %', floatLeft: 'Aligné à gauche', floatRight: 'Aligné à droite', floatNone: 'Pas d\'alignement', shapeRounded: 'Forme: Rectangle arrondie', shapeCircle: 'Forme: Cercle', shapeThumbnail: 'Forme: Vignette', shapeNone: 'Forme: Aucune', dragImageHere: 'Faites glisser une image ou un texte dans ce cadre', dropImage: 'Lachez l\'image ou le texte', selectFromFiles: 'Choisir un fichier', maximumFileSize: 'Taille de fichier maximale', maximumFileSizeError: 'Taille maximale du fichier dépassée', url: 'URL de l\'image', remove: 'Supprimer l\'image', original: 'Original' }, video: { video: 'Vidéo', videoLink: 'Lien vidéo', insert: 'Insérer une vidéo', url: 'URL de la vidéo', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'Lien', insert: 'Insérer un lien', unlink: 'Supprimer un lien', edit: 'Modifier', textToDisplay: 'Texte à afficher', url: 'URL du lien', openInNewWindow: 'Ouvrir dans une nouvelle fenêtre' }, table: { table: 'Tableau', addRowAbove: 'Ajouter une ligne au-dessus', addRowBelow: 'Ajouter une ligne en dessous', addColLeft: 'Ajouter une colonne à gauche', addColRight: 'Ajouter une colonne à droite', delRow: 'Supprimer la ligne', delCol: 'Supprimer la colonne', delTable: 'Supprimer le tableau' }, hr: { insert: 'Insérer une ligne horizontale' }, style: { style: 'Style', p: 'Normal', blockquote: 'Citation', pre: 'Code source', h1: 'Titre 1', h2: 'Titre 2', h3: 'Titre 3', h4: 'Titre 4', h5: 'Titre 5', h6: 'Titre 6' }, lists: { unordered: 'Liste à puces', ordered: 'Liste numérotée' }, options: { help: 'Aide', fullscreen: 'Plein écran', codeview: 'Afficher le code HTML' }, paragraph: { paragraph: 'Paragraphe', outdent: 'Diminuer le retrait', indent: 'Augmenter le retrait', left: 'Aligner à gauche', center: 'Centrer', right: 'Aligner à droite', justify: 'Justifier' }, color: { recent: 'Dernière couleur sélectionnée', more: 'Plus de couleurs', background: 'Couleur de fond', foreground: 'Couleur de police', transparent: 'Transparent', setTransparent: 'Définir la transparence', reset: 'Restaurer', resetToDefault: 'Restaurer la couleur par défaut' }, shortcut: { shortcuts: 'Raccourcis', close: 'Fermer', textFormatting: 'Mise en forme du texte', action: 'Action', paragraphFormatting: 'Mise en forme des paragraphes', documentStyle: 'Style du document', extraKeys: 'Touches supplémentaires' }, help: { 'insertParagraph': 'Insérer paragraphe', 'undo': 'Défaire la dernière commande', 'redo': 'Refaire la dernière commande', 'tab': 'Tabulation', 'untab': 'Tabulation arrière', 'bold': 'Mettre en caractère gras', 'italic': 'Mettre en italique', 'underline': 'Mettre en souligné', 'strikethrough': 'Mettre en texte barré', 'removeFormat': 'Nettoyer les styles', 'justifyLeft': 'Aligner à gauche', 'justifyCenter': 'Centrer', 'justifyRight': 'Aligner à droite', 'justifyFull': 'Justifier à gauche et à droite', 'insertUnorderedList': 'Basculer liste à puces', 'insertOrderedList': 'Basculer liste ordonnée', 'outdent': 'Diminuer le retrait du paragraphe', 'indent': 'Augmenter le retrait du paragraphe', 'formatPara': 'Changer le paragraphe en cours en normal (P)', 'formatH1': 'Changer le paragraphe en cours en entête H1', 'formatH2': 'Changer le paragraphe en cours en entête H2', 'formatH3': 'Changer le paragraphe en cours en entête H3', 'formatH4': 'Changer le paragraphe en cours en entête H4', 'formatH5': 'Changer le paragraphe en cours en entête H5', 'formatH6': 'Changer le paragraphe en cours en entête H6', 'insertHorizontalRule': 'Insérer séparation horizontale', 'linkDialog.show': 'Afficher fenêtre d\'hyperlien' }, history: { undo: 'Annuler la dernière action', redo: 'Restaurer la dernière action annulée' }, specialChar: { specialChar: 'CARACTÈRES SPÉCIAUX', select: 'Choisir des caractères spéciaux' } } }); })(jQuery); PKf[�\S��ˤ�lang/summernote-ko-KR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ko-KR': { font: { bold: '굵게', italic: '기울임꼴', underline: '밑줄', clear: '글자 효과 없애기', height: '줄간격', name: '글꼴', superscript: '위 첨자', subscript: '아래 첨자', strikethrough: '취소선', size: '글자 크기' }, image: { image: '사진', insert: '사진 추가', resizeFull: '100% 크기로 변경', resizeHalf: '50% 크기로 변경', resizeQuarter: '25% 크기로 변경', floatLeft: '왼쪽 정렬', floatRight: '오른쪽 정렬', floatNone: '정렬하지 않음', shapeRounded: '스타일: 둥근 모서리', shapeCircle: '스타일: 원형', shapeThumbnail: '스타일: 액자', shapeNone: '스타일: 없음', dragImageHere: '텍스트 혹은 사진을 이곳으로 끌어오세요', dropImage: '텍스트 혹은 사진을 내려놓으세요', selectFromFiles: '파일 선택', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: '사진 URL', remove: '사진 삭제', original: 'Original' }, video: { video: '동영상', videoLink: '동영상 링크', insert: '동영상 추가', url: '동영상 URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, Youku 사용 가능)' }, link: { link: '링크', insert: '링크 추가', unlink: '링크 삭제', edit: '수정', textToDisplay: '링크에 표시할 내용', url: '이동할 URL', openInNewWindow: '새창으로 열기' }, 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: '구분선 추가' }, style: { style: '스타일', p: '본문', blockquote: '인용구', pre: '코드', h1: '제목 1', h2: '제목 2', h3: '제목 3', h4: '제목 4', h5: '제목 5', h6: '제목 6' }, lists: { unordered: '글머리 기호', ordered: '번호 매기기' }, options: { help: '도움말', fullscreen: '전체 화면', codeview: '코드 보기' }, paragraph: { paragraph: '문단 정렬', outdent: '내어쓰기', indent: '들여쓰기', left: '왼쪽 정렬', center: '가운데 정렬', right: '오른쪽 정렬', justify: '양쪽 정렬' }, color: { recent: '마지막으로 사용한 색', more: '다른 색 선택', background: '배경색', foreground: '글자색', transparent: '투명', setTransparent: '투명', reset: '취소', resetToDefault: '기본 값으로 변경' }, shortcut: { shortcuts: '키보드 단축키', close: '닫기', textFormatting: '글자 스타일 적용', action: '기능', paragraphFormatting: '문단 스타일 적용', documentStyle: '문서 스타일 적용', 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: '실행 취소', redo: '다시 실행' }, specialChar: { specialChar: '특수문자', select: '특수문자를 선택하세요' } } }); })(jQuery); PKf[�\�E��lang/summernote-it-IT.jsnu�[���(function($) { $.extend($.summernote.lang, { 'it-IT': { font: { bold: 'Testo in grassetto', italic: 'Testo in corsivo', underline: 'Testo sottolineato', clear: 'Elimina la formattazione del testo', height: 'Altezza della linea di testo', name: 'Famiglia Font', strikethrough: 'Testo barrato', subscript: 'Subscript', superscript: 'Superscript', size: 'Dimensione del carattere' }, image: { image: 'Immagine', insert: 'Inserisci Immagine', resizeFull: 'Dimensioni originali', resizeHalf: 'Ridimensiona al 50%', resizeQuarter: 'Ridimensiona al 25%', floatLeft: 'Posiziona a sinistra', floatRight: 'Posiziona a destra', floatNone: 'Nessun posizionamento', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Trascina qui un\'immagine', dropImage: 'Drop image or Text', selectFromFiles: 'Scegli dai Documenti', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL dell\'immagine', remove: 'Rimuovi immagine', original: 'Original' }, video: { video: 'Video', videoLink: 'Collegamento ad un Video', insert: 'Inserisci Video', url: 'URL del Video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' }, link: { link: 'Collegamento', insert: 'Inserisci Collegamento', unlink: 'Elimina collegamento', edit: 'Modifica collegamento', textToDisplay: 'Testo del collegamento', url: 'URL del collegamento', openInNewWindow: 'Apri in una nuova finestra' }, table: { table: 'Tabella', 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: 'Inserisce una linea di separazione' }, style: { style: 'Stili', p: 'pe', blockquote: 'Citazione', pre: 'Codice', h1: 'Titolo 1', h2: 'Titolo 2', h3: 'Titolo 3', h4: 'Titolo 4', h5: 'Titolo 5', h6: 'Titolo 6' }, lists: { unordered: 'Elenco non ordinato', ordered: 'Elenco ordinato' }, options: { help: 'Aiuto', fullscreen: 'Modalità a tutto schermo', codeview: 'Visualizza codice' }, paragraph: { paragraph: 'Paragrafo', outdent: 'Diminuisce il livello di rientro', indent: 'Aumenta il livello di rientro', left: 'Allinea a sinistra', center: 'Centra', right: 'Allinea a destra', justify: 'Giustifica (allinea a destra e sinistra)' }, color: { recent: 'Ultimo colore utilizzato', more: 'Altri colori', background: 'Colore di sfondo', foreground: 'Colore', transparent: 'Trasparente', setTransparent: 'Trasparente', reset: 'Reimposta', resetToDefault: 'Reimposta i colori' }, shortcut: { shortcuts: 'Scorciatoie da tastiera', close: 'Chiudi', textFormatting: 'Formattazione testo', action: 'Azioni', paragraphFormatting: 'Formattazione paragrafo', documentStyle: 'Stili', 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: 'Annulla', redo: 'Ripristina' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\zJ���lang/summernote-pl-PL.jsnu�[���(function($) { $.extend($.summernote.lang, { 'pl-PL': { font: { bold: 'Pogrubienie', italic: 'Pochylenie', underline: 'Podkreślenie', clear: 'Usuń formatowanie', height: 'Interlinia', name: 'Czcionka', strikethrough: 'Przekreślenie', subscript: 'Indeks dolny', superscript: 'Indeks górny', size: 'Rozmiar' }, image: { image: 'Grafika', insert: 'Wstaw grafikę', resizeFull: 'Zmień rozmiar na 100%', resizeHalf: 'Zmień rozmiar na 50%', resizeQuarter: 'Zmień rozmiar na 25%', floatLeft: 'Po lewej', floatRight: 'Po prawej', floatNone: 'Równo z tekstem', shapeRounded: 'Kształt: zaokrąglone', shapeCircle: 'Kształt: okrąg', shapeThumbnail: 'Kształt: miniatura', shapeNone: 'Kształt: brak', dragImageHere: 'Przeciągnij grafikę lub tekst tutaj', dropImage: 'Przeciągnij grafikę lub tekst', selectFromFiles: 'Wybierz z dysku', maximumFileSize: 'Limit wielkości pliku', maximumFileSizeError: 'Przekroczono limit wielkości pliku.', url: 'Adres URL grafiki', remove: 'Usuń grafikę', original: 'Original' }, video: { video: 'Wideo', videoLink: 'Adres wideo', insert: 'Wstaw wideo', url: 'Adres wideo', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion lub Youku)' }, link: { link: 'Odnośnik', insert: 'Wstaw odnośnik', unlink: 'Usuń odnośnik', edit: 'Edytuj', textToDisplay: 'Tekst do wyświetlenia', url: 'Na jaki adres URL powinien przenosić ten odnośnik?', openInNewWindow: 'Otwórz w nowym oknie' }, table: { table: 'Tabela', 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: 'Wstaw poziomą linię' }, style: { style: 'Style', p: 'pny', blockquote: 'Cytat', pre: 'Kod', h1: 'Nagłówek 1', h2: 'Nagłówek 2', h3: 'Nagłówek 3', h4: 'Nagłówek 4', h5: 'Nagłówek 5', h6: 'Nagłówek 6' }, lists: { unordered: 'Lista wypunktowana', ordered: 'Lista numerowana' }, options: { help: 'Pomoc', fullscreen: 'Pełny ekran', codeview: 'Źródło' }, paragraph: { paragraph: 'Akapit', outdent: 'Zmniejsz wcięcie', indent: 'Zwiększ wcięcie', left: 'Wyrównaj do lewej', center: 'Wyrównaj do środka', right: 'Wyrównaj do prawej', justify: 'Wyrównaj do lewej i prawej' }, color: { recent: 'Ostani kolor', more: 'Więcej kolorów', background: 'Tło', foreground: 'Czcionka', transparent: 'Przeźroczysty', setTransparent: 'Przeźroczyste', reset: 'Reset', resetToDefault: 'Domyślne' }, shortcut: { shortcuts: 'Skróty klawiaturowe', close: 'Zamknij', textFormatting: 'Formatowanie tekstu', action: 'Akcja', paragraphFormatting: 'Formatowanie akapitu', documentStyle: 'Styl dokumentu', extraKeys: 'Dodatkowe klawisze' }, 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: 'Cofnij', redo: 'Ponów' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\T��S\\lang/summernote-ro-RO.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ro-RO': { font: { bold: 'Îngroșat', italic: 'Înclinat', underline: 'Subliniat', clear: 'Înlătură formatare font', height: 'Înălțime rând', name: 'Familie de fonturi', strikethrough: 'Tăiat', subscript: 'Indice', superscript: 'Exponent', size: 'Dimensiune font' }, image: { image: 'Imagine', insert: 'Inserează imagine', resizeFull: 'Redimensionează complet', resizeHalf: 'Redimensionează 1/2', resizeQuarter: 'Redimensionează 1/4', floatLeft: 'Aliniere la stânga', floatRight: 'Aliniere la dreapta', floatNone: 'Fară aliniere', shapeRounded: 'Formă: Rotund', shapeCircle: 'Formă: Cerc', shapeThumbnail: 'Formă: Pictogramă', shapeNone: 'Formă: Nici una', dragImageHere: 'Trage o imagine sau un text aici', dropImage: 'Eliberează imaginea sau textul', selectFromFiles: 'Alege din fişiere', maximumFileSize: 'Dimensiune maximă fișier', maximumFileSizeError: 'Dimensiune maximă fișier depășită.', url: 'URL imagine', remove: 'Șterge imagine', original: 'Original' }, video: { video: 'Video', videoLink: 'Link video', insert: 'Inserează video', url: 'URL video?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)' }, link: { link: 'Link', insert: 'Inserează link', unlink: 'Înlătură link', edit: 'Editează', textToDisplay: 'Text ce va fi afişat', url: 'La ce adresă URL trebuie să conducă acest link?', openInNewWindow: 'Deschidere în fereastră nouă' }, table: { table: 'Tabel', addRowAbove: 'Adaugă rând deasupra', addRowBelow: 'Adaugă rând dedesubt', addColLeft: 'Adaugă coloană stânga', addColRight: 'Adaugă coloană dreapta', delRow: 'Șterge rând', delCol: 'Șterge coloană', delTable: 'Șterge tabel' }, hr: { insert: 'Inserează o linie orizontală' }, style: { style: 'Stil', p: 'p', blockquote: 'Citat', pre: 'Preformatat', h1: 'Titlu 1', h2: 'Titlu 2', h3: 'Titlu 3', h4: 'Titlu 4', h5: 'Titlu 5', h6: 'Titlu 6' }, lists: { unordered: 'Listă neordonată', ordered: 'Listă ordonată' }, options: { help: 'Ajutor', fullscreen: 'Măreşte', codeview: 'Sursă' }, paragraph: { paragraph: 'Paragraf', outdent: 'Creşte identarea', indent: 'Scade identarea', left: 'Aliniere la stânga', center: 'Aliniere centrală', right: 'Aliniere la dreapta', justify: 'Aliniere în bloc' }, color: { recent: 'Culoare recentă', more: 'Mai multe culori', background: 'Culoarea fundalului', foreground: 'Culoarea textului', transparent: 'Transparent', setTransparent: 'Setează transparent', reset: 'Resetează', resetToDefault: 'Revino la iniţial' }, shortcut: { shortcuts: 'Scurtături tastatură', close: 'Închide', textFormatting: 'Formatare text', action: 'Acţiuni', paragraphFormatting: 'Formatare paragraf', documentStyle: 'Stil paragraf', extraKeys: 'Taste extra' }, help: { 'insertParagraph': 'Inserează paragraf', 'undo': 'Revine la starea anterioară', 'redo': 'Revine la starea ulterioară', 'tab': 'Tab', 'untab': 'Untab', 'bold': 'Setează stil îngroșat', 'italic': 'Setează stil înclinat', 'underline': 'Setează stil subliniat', 'strikethrough': 'Setează stil tăiat', 'removeFormat': 'Înlătură formatare', 'justifyLeft': 'Setează aliniere stânga', 'justifyCenter': 'Setează aliniere centru', 'justifyRight': 'Setează aliniere dreapta', 'justifyFull': 'Setează aliniere bloc', 'insertUnorderedList': 'Comutare listă neordinată', 'insertOrderedList': 'Comutare listă ordonată', 'outdent': 'Înlătură indentare paragraf curent', 'indent': 'Adaugă indentare paragraf curent', 'formatPara': 'Schimbă formatarea selecției în paragraf', 'formatH1': 'Schimbă formatarea selecției în H1', 'formatH2': 'Schimbă formatarea selecției în H2', 'formatH3': 'Schimbă formatarea selecției în H3', 'formatH4': 'Schimbă formatarea selecției în H4', 'formatH5': 'Schimbă formatarea selecției în H5', 'formatH6': 'Schimbă formatarea selecției în H6', 'insertHorizontalRule': 'Adaugă linie orizontală', 'linkDialog.show': 'Inserează link' }, history: { undo: 'Starea anterioară', redo: 'Starea ulterioară' }, specialChar: { specialChar: 'CARACTERE SPECIALE', select: 'Alege caractere speciale' } } }); })(jQuery); PKf[�\��Z��lang/summernote-uz-UZ.jsnu�[���(function($) { $.extend($.summernote.lang, { 'uz-UZ': { font: { bold: 'қалин', italic: 'Курсив', underline: 'Белгиланган', clear: 'Ҳарф турларини олиб ташлаш', height: 'Чизиқ баландлиги', name: 'Ҳарф', strikethrough: 'Ўчирилган', subscript: 'Пастки индекс', superscript: 'Юқори индекс', size: 'ҳарф ҳажми' }, image: { image: 'Расм', insert: 'расмни қўйиш', resizeFull: 'Ҳажмни тиклаш', resizeHalf: '50% гача кичрайтириш', resizeQuarter: '25% гача кичрайтириш', floatLeft: 'Чапда жойлаштириш', floatRight: 'Ўнгда жойлаштириш', floatNone: 'Стандарт бўйича жойлашув', shapeRounded: 'Шакли: Юмалоқ', shapeCircle: 'Шакли: Доира', shapeThumbnail: 'Шакли: Миниатюра', shapeNone: 'Шакли: Йўқ', dragImageHere: 'Суратни кўчириб ўтинг', dropImage: 'Суратни кўчириб ўтинг', selectFromFiles: 'Файллардан бирини танлаш', url: 'суратлар URL и', remove: 'Суратни ўчириш' }, video: { video: 'Видео', videoLink: 'Видеога ҳавола', insert: 'Видео', url: 'URL видео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' }, link: { link: 'Ҳавола', insert: 'Ҳаволани қўйиш', unlink: 'Ҳаволани олиб ташлаш', edit: 'Таҳрир қилиш', textToDisplay: 'Кўринадиган матн', url: 'URL ўтиш учун', openInNewWindow: 'Янги дарчада очиш' }, table: { table: 'Жадвал' }, hr: { insert: 'Горизонтал чизиқни қўйиш' }, style: { style: 'Услуб', p: 'Яхши', blockquote: 'Жумла', pre: 'Код', h1: 'Сарлавҳа 1', h2: 'Сарлавҳа 2', h3: 'Сарлавҳа 3', h4: 'Сарлавҳа 4', h5: 'Сарлавҳа 5', h6: 'Сарлавҳа 6' }, lists: { unordered: 'Белгиланган рўйҳат', ordered: 'Рақамланган рўйҳат' }, options: { help: 'Ёрдам', fullscreen: 'Бутун экран бўйича', codeview: 'Бошланғич код' }, paragraph: { paragraph: 'Параграф', outdent: 'Орқага қайтишни камайтириш', indent: 'Орқага қайтишни кўпайтириш', left: 'Чап қирғоққа тўғрилаш', center: 'Марказга тўғрилаш', right: 'Ўнг қирғоққа тўғрилаш', justify: 'Эни бўйлаб чўзиш' }, color: { recent: 'Охирги ранг', more: 'Яна ранглар', background: 'Фон ранги', foreground: 'Ҳарф ранги', transparent: 'Шаффоф', setTransparent: 'Шаффофдай қилиш', reset: 'Бекор қилиш', resetToDefault: 'Стандартга оид тиклаш' }, shortcut: { shortcuts: 'Клавишларнинг ҳамохҳанглиги', close: 'Ёпиқ', textFormatting: 'Матнни ', action: 'Ҳаркат', paragraphFormatting: 'Параграфни форматлаш', documentStyle: 'Ҳужжатнинг тури', extraKeys: 'Қўшимча имкониятлар' }, history: { undo: 'Бекор қилиш', redo: 'Қайтариш' } } }); })(jQuery); PKf[�\{�A^qqlang/summernote-zh-CN.jsnu�[���(function($) { $.extend($.summernote.lang, { 'zh-CN': { font: { bold: '粗体', italic: '斜体', underline: '下划线', clear: '清除格式', height: '行高', name: '字体', strikethrough: '删除线', subscript: '下标', superscript: '上标', size: '字号' }, image: { image: '图片', insert: '插入图片', resizeFull: '缩放至 100%', resizeHalf: '缩放至 50%', resizeQuarter: '缩放至 25%', floatLeft: '靠左浮动', floatRight: '靠右浮动', floatNone: '取消浮动', shapeRounded: '形状: 圆角', shapeCircle: '形状: 圆', shapeThumbnail: '形状: 缩略图', shapeNone: '形状: 无', dragImageHere: '将图片拖拽至此处', dropImage: 'Drop image or Text', selectFromFiles: '从本地上传', maximumFileSize: '文件大小最大值', maximumFileSizeError: '文件大小超出最大值。', url: '图片地址', remove: '移除图片', original: 'Original' }, video: { video: '视频', videoLink: '视频链接', insert: '插入视频', url: '视频地址', providers: '(优酷, 腾讯, Instagram, DailyMotion, Youtube等)' }, link: { link: '链接', insert: '插入链接', unlink: '去除链接', edit: '编辑链接', textToDisplay: '显示文本', url: '链接地址', openInNewWindow: '在新窗口打开' }, 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: '水平线' }, style: { style: '样式', p: '普通', blockquote: '引用', pre: '代码', h1: '标题 1', h2: '标题 2', h3: '标题 3', h4: '标题 4', h5: '标题 5', h6: '标题 6' }, lists: { unordered: '无序列表', ordered: '有序列表' }, options: { help: '帮助', fullscreen: '全屏', codeview: '源代码' }, paragraph: { paragraph: '段落', outdent: '减少缩进', indent: '增加缩进', left: '左对齐', center: '居中对齐', right: '右对齐', justify: '两端对齐' }, color: { recent: '最近使用', more: '更多', background: '背景', foreground: '前景', transparent: '透明', setTransparent: '透明', reset: '重置', resetToDefault: '默认' }, shortcut: { shortcuts: '快捷键', close: '关闭', textFormatting: '文本格式', action: '动作', paragraphFormatting: '段落格式', documentStyle: '文档样式', extraKeys: '额外按键' }, help: { insertParagraph: '插入段落', undo: '撤销', redo: '重做', tab: '增加缩进', untab: '减少缩进', bold: '粗体', italic: '斜体', underline: '下划线', strikethrough: '删除线', removeFormat: '清除格式', justifyLeft: '左对齐', justifyCenter: '居中对齐', justifyRight: '右对齐', justifyFull: '两端对齐', insertUnorderedList: '无序列表', insertOrderedList: '有序列表', outdent: '减少缩进', indent: '增加缩进', formatPara: '设置选中内容样式为 普通', formatH1: '设置选中内容样式为 标题1', formatH2: '设置选中内容样式为 标题2', formatH3: '设置选中内容样式为 标题3', formatH4: '设置选中内容样式为 标题4', formatH5: '设置选中内容样式为 标题5', formatH6: '设置选中内容样式为 标题6', insertHorizontalRule: '插入水平线', 'linkDialog.show': '显示链接对话框' }, history: { undo: '撤销', redo: '重做' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\���1GGlang/summernote-bg-BG.jsnu�[���(function($) { $.extend($.summernote.lang, { 'bg-BG': { font: { bold: 'Удебелен', italic: 'Наклонен', underline: 'Подчертан', clear: 'Изчисти стиловете', height: 'Височина', name: 'Шрифт', strikethrough: 'Задраскано', subscript: 'Долен индекс', superscript: 'Горен индекс', size: 'Размер на шрифта' }, image: { image: 'Изображение', insert: 'Постави картинка', resizeFull: 'Цял размер', resizeHalf: 'Размер на 50%', resizeQuarter: 'Размер на 25%', floatLeft: 'Подравни в ляво', floatRight: 'Подравни в дясно', floatNone: 'Без подравняване', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Пуснете изображението тук', dropImage: 'Drop image or Text', selectFromFiles: 'Изберете файл', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL адрес на изображение', remove: 'Премахни изображение', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Insert Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'Връзка', insert: 'Добави връзка', unlink: 'Премахни връзка', edit: 'Промени', textToDisplay: 'Текст за показване', url: 'URL адрес', openInNewWindow: 'Отвори в нов прозорец' }, 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: 'Добави хоризонтална линия' }, style: { style: 'Стил', p: 'Нормален', blockquote: 'Цитат', pre: 'Код', h1: 'Заглавие 1', h2: 'Заглавие 2', h3: 'Заглавие 3', h4: 'Заглавие 4', h5: 'Заглавие 5', h6: 'Заглавие 6' }, lists: { unordered: 'Символен списък', ordered: 'Цифров списък' }, options: { help: 'Помощ', fullscreen: 'На цял екран', codeview: 'Преглед на код' }, paragraph: { paragraph: 'Параграф', outdent: 'Намаляване на отстъпа', indent: 'Абзац', left: 'Подравняване в ляво', center: 'Център', right: 'Подравняване в дясно', justify: 'Разтягане по ширина' }, color: { recent: 'Последния избран цвят', more: 'Още цветове', background: 'Цвят на фона', foreground: 'Цвят на шрифта', transparent: 'Прозрачен', setTransparent: 'Направете прозрачен', reset: 'Възстанови', resetToDefault: 'Възстанови оригиналните' }, shortcut: { shortcuts: 'Клавишни комбинации', close: 'Затвори', textFormatting: 'Форматиране на текста', action: 'Действие', paragraphFormatting: 'Форматиране на параграф', documentStyle: 'Стил на документа', 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: 'Назад', redo: 'Напред' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�"r�OOlang/summernote-sk-SK.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sk-SK': { font: { bold: 'Tučné', italic: 'Kurzíva', underline: 'Podčiarknutie', clear: 'Odstrániť štýl písma', height: 'Výška riadku', strikethrough: 'Prečiarknuté', subscript: 'Subscript', superscript: 'Superscript', size: 'Veľkosť písma' }, image: { image: 'Obrázok', insert: 'Vložiť obrázok', resizeFull: 'Pôvodná veľkosť', resizeHalf: 'Polovičná veľkosť', resizeQuarter: 'Štvrtinová veľkosť', floatLeft: 'Umiestniť doľava', floatRight: 'Umiestniť doprava', floatNone: 'Bez zarovnania', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Pretiahnuť sem obrázok', dropImage: 'Drop image or Text', selectFromFiles: 'Vybrať súbor', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL obrázku', remove: 'Remove Image', original: 'Original' }, video: { video: 'Video', videoLink: 'Odkaz videa', insert: 'Vložiť video', url: 'URL videa?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion alebo Youku)' }, link: { link: 'Odkaz', insert: 'Vytvoriť odkaz', unlink: 'Zrušiť odkaz', edit: 'Upraviť', textToDisplay: 'Zobrazovaný text', url: 'Na akú URL adresu má tento odkaz viesť?', openInNewWindow: 'Otvoriť v novom okne' }, table: { table: 'Tabuľka', 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: 'Vložit vodorovnú čiaru' }, style: { style: 'Štýl', p: 'Normálny', blockquote: 'Citácia', pre: 'Kód', h1: 'Nadpis 1', h2: 'Nadpis 2', h3: 'Nadpis 3', h4: 'Nadpis 4', h5: 'Nadpis 5', h6: 'Nadpis 6' }, lists: { unordered: 'Odrážkový zoznam', ordered: 'Číselný zoznam' }, options: { help: 'Pomoc', fullscreen: 'Celá obrazovka', codeview: 'HTML kód' }, paragraph: { paragraph: 'Odsek', outdent: 'Zväčšiť odsadenie', indent: 'Zmenšiť odsadenie', left: 'Zarovnať doľava', center: 'Zarovnať na stred', right: 'Zarovnať doprava', justify: 'Zarovnať obojstranne' }, color: { recent: 'Aktuálna farba', more: 'Dalšie farby', background: 'Farba pozadia', foreground: 'Farba písma', transparent: 'Priehľadnosť', setTransparent: 'Nastaviť priehľadnosť', reset: 'Obnoviť', resetToDefault: 'Obnoviť prednastavené' }, shortcut: { shortcuts: 'Klávesové skratky', close: 'Zavrieť', textFormatting: 'Formátovanie textu', action: 'Akcia', paragraphFormatting: 'Formátovanie odseku', documentStyle: 'Štýl dokumentu' }, 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: 'Krok vzad', redo: 'Krok dopredu' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\���e44lang/summernote-nl-NL.jsnu�[���(function($) { $.extend($.summernote.lang, { 'nl-NL': { font: { bold: 'Vet', italic: 'Cursief', underline: 'Onderstrepen', clear: 'Stijl verwijderen', height: 'Regelhoogte', name: 'Lettertype', strikethrough: 'Doorhalen', subscript: 'Subscript', superscript: 'Superscript', size: 'Tekstgrootte' }, image: { image: 'Afbeelding', insert: 'Afbeelding invoegen', resizeFull: 'Volledige breedte', resizeHalf: 'Halve breedte', resizeQuarter: 'Kwart breedte', floatLeft: 'Links uitlijnen', floatRight: 'Rechts uitlijnen', floatNone: 'Geen uitlijning', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Sleep hier een afbeelding naar toe', dropImage: 'Drop image or Text', selectFromFiles: 'Selecteer een bestand', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL van de afbeelding', remove: 'Verwijder afbeelding', original: 'Original' }, video: { video: 'Video', videoLink: 'Video link', insert: 'Video invoegen', url: 'URL van de video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion of Youku)' }, link: { link: 'Link', insert: 'Link invoegen', unlink: 'Link verwijderen', edit: 'Wijzigen', textToDisplay: 'Tekst van link', url: 'Naar welke URL moet deze link verwijzen?', openInNewWindow: 'Open in nieuw venster' }, table: { table: 'Tabel', 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: 'Horizontale lijn invoegen' }, style: { style: 'Stijl', p: 'Normaal', blockquote: 'Quote', pre: 'Code', h1: 'Kop 1', h2: 'Kop 2', h3: 'Kop 3', h4: 'Kop 4', h5: 'Kop 5', h6: 'Kop 6' }, lists: { unordered: 'Ongeordende lijst', ordered: 'Geordende lijst' }, options: { help: 'Help', fullscreen: 'Volledig scherm', codeview: 'Bekijk Code' }, paragraph: { paragraph: 'Paragraaf', outdent: 'Inspringen verkleinen', indent: 'Inspringen vergroten', left: 'Links uitlijnen', center: 'Centreren', right: 'Rechts uitlijnen', justify: 'Uitvullen' }, color: { recent: 'Recente kleur', more: 'Meer kleuren', background: 'Achtergrond kleur', foreground: 'Tekst kleur', transparent: 'Transparant', setTransparent: 'Transparant', reset: 'Standaard', resetToDefault: 'Standaard kleur' }, shortcut: { shortcuts: 'Toetsencombinaties', close: 'sluiten', textFormatting: 'Tekststijlen', action: 'Acties', paragraphFormatting: 'Paragraafstijlen', documentStyle: 'Documentstijlen', 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: 'Ongedaan maken', redo: 'Opnieuw doorvoeren' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�La�zzlang/summernote-cs-CZ.jsnu�[���(function($) { $.extend($.summernote.lang, { 'cs-CZ': { font: { bold: 'Tučné', italic: 'Kurzíva', underline: 'Podtržené', clear: 'Odstranit styl písma', height: 'Výška řádku', strikethrough: 'Přeškrtnuté', size: 'Velikost písma' }, image: { image: 'Obrázek', insert: 'Vložit obrázek', resizeFull: 'Původní velikost', resizeHalf: 'Poloviční velikost', resizeQuarter: 'Čtvrteční velikost', floatLeft: 'Umístit doleva', floatRight: 'Umístit doprava', floatNone: 'Neobtékat textem', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Přetáhnout sem obrázek', dropImage: 'Drop image or Text', selectFromFiles: 'Vybrat soubor', url: 'URL obrázku', remove: 'Remove Image', original: 'Original' }, video: { video: 'Video', videoLink: 'Odkaz videa', insert: 'Vložit video', url: 'URL videa?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion nebo Youku)' }, link: { link: 'Odkaz', insert: 'Vytvořit odkaz', unlink: 'Zrušit odkaz', edit: 'Upravit', textToDisplay: 'Zobrazovaný text', url: 'Na jaké URL má tento odkaz vést?', openInNewWindow: 'Otevřít v novém okně' }, table: { table: 'Tabulka', 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: 'Vložit vodorovnou čáru' }, style: { style: 'Styl', p: 'Normální', blockquote: 'Citace', pre: 'Kód', h1: 'Nadpis 1', h2: 'Nadpis 2', h3: 'Nadpis 3', h4: 'Nadpis 4', h5: 'Nadpis 5', h6: 'Nadpis 6' }, lists: { unordered: 'Odrážkový seznam', ordered: 'Číselný seznam' }, options: { help: 'Nápověda', fullscreen: 'Celá obrazovka', codeview: 'HTML kód' }, paragraph: { paragraph: 'Odstavec', outdent: 'Zvětšit odsazení', indent: 'Zmenšit odsazení', left: 'Zarovnat doleva', center: 'Zarovnat na střed', right: 'Zarovnat doprava', justify: 'Zarovnat oboustranně' }, color: { recent: 'Aktuální barva', more: 'Další barvy', background: 'Barva pozadí', foreground: 'Barva písma', transparent: 'Průhlednost', setTransparent: 'Nastavit průhlednost', reset: 'Obnovit', resetToDefault: 'Obnovit výchozí' }, shortcut: { shortcuts: 'Klávesové zkratky', close: 'Zavřít', textFormatting: 'Formátování textu', action: 'Akce', paragraphFormatting: 'Formátování odstavce', documentStyle: 'Styl dokumentu' }, 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: 'Krok vzad', redo: 'Krok vpřed' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�C_��lang/summernote-fi-FI.jsnu�[���(function($) { $.extend($.summernote.lang, { 'fi-FI': { font: { bold: 'Lihavoitu', italic: 'Kursiivi', underline: 'Alleviivaa', clear: 'Tyhjennä muotoilu', height: 'Riviväli', name: 'Kirjasintyyppi', strikethrough: 'Yliviivaus', subscript: 'Subscript', superscript: 'Superscript', size: 'Kirjasinkoko' }, image: { image: 'Kuva', insert: 'Lisää kuva', resizeFull: 'Koko leveys', resizeHalf: 'Puolikas leveys', resizeQuarter: 'Neljäsosa leveys', floatLeft: 'Sijoita vasemmalle', floatRight: 'Sijoita oikealle', floatNone: 'Ei sijoitusta', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Vedä kuva tähän', selectFromFiles: 'Valitse tiedostoista', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL-osoitteen mukaan', remove: 'Poista kuva', original: 'Original' }, video: { video: 'Video', videoLink: 'Linkki videoon', insert: 'Lisää video', url: 'Videon URL-osoite?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion tai Youku)' }, link: { link: 'Linkki', insert: 'Lisää linkki', unlink: 'Poista linkki', edit: 'Muokkaa', textToDisplay: 'Näytettävä teksti', url: 'Linkin URL-osoite?', openInNewWindow: 'Avaa uudessa ikkunassa' }, table: { table: 'Taulukko', 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: 'Lisää vaakaviiva' }, style: { style: 'Tyyli', p: 'Normaali', blockquote: 'Lainaus', pre: 'Koodi', h1: 'Otsikko 1', h2: 'Otsikko 2', h3: 'Otsikko 3', h4: 'Otsikko 4', h5: 'Otsikko 5', h6: 'Otsikko 6' }, lists: { unordered: 'Luettelomerkitty luettelo', ordered: 'Numeroitu luettelo' }, options: { help: 'Ohje', fullscreen: 'Koko näyttö', codeview: 'HTML-näkymä' }, paragraph: { paragraph: 'Kappale', outdent: 'Pienennä sisennystä', indent: 'Suurenna sisennystä', left: 'Tasaus vasemmalle', center: 'Keskitä', right: 'Tasaus oikealle', justify: 'Tasaa' }, color: { recent: 'Viimeisin väri', more: 'Lisää värejä', background: 'Taustaväri', foreground: 'Tekstin väri', transparent: 'Läpinäkyvä', setTransparent: 'Aseta läpinäkyväksi', reset: 'Palauta', resetToDefault: 'Palauta oletusarvoksi' }, shortcut: { shortcuts: 'Pikanäppäimet', close: 'Sulje', textFormatting: 'Tekstin muotoilu', action: 'Toiminto', paragraphFormatting: 'Kappaleen muotoilu', documentStyle: 'Asiakirjan tyyli' }, 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: 'Kumoa', redo: 'Toista' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\D�jKlang/summernote-ca-ES.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ca-ES': { font: { bold: 'Negreta', italic: 'Cursiva', underline: 'Subratllat', clear: 'Treure estil de lletra', height: 'Alçada de línia', name: 'Font', strikethrough: 'Ratllat', subscript: 'Subíndex', superscript: 'Superíndex', size: 'Mida de lletra' }, image: { image: 'Imatge', insert: 'Inserir imatge', resizeFull: 'Redimensionar a mida completa', resizeHalf: 'Redimensionar a la meitat', resizeQuarter: 'Redimensionar a un quart', floatLeft: 'Alinear a l\'esquerra', floatRight: 'Alinear a la dreta', floatNone: 'No alinear', shapeRounded: 'Forma: Arrodonit', shapeCircle: 'Forma: Cercle', shapeThumbnail: 'Forma: Marc', shapeNone: 'Forma: Cap', dragImageHere: 'Arrossegueu una imatge o text aquí', dropImage: 'Deixa anar aquí una imatge o un text', selectFromFiles: 'Seleccioneu des dels arxius', maximumFileSize: 'Mida màxima de l\'arxiu', maximumFileSizeError: 'La mida màxima de l\'arxiu s\'ha superat.', url: 'URL de la imatge', remove: 'Eliminar imatge', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Enllaç del vídeo', insert: 'Inserir vídeo', url: 'URL del vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' }, link: { link: 'Enllaç', insert: 'Inserir enllaç', unlink: 'Treure enllaç', edit: 'Editar', textToDisplay: 'Text per mostrar', url: 'Cap a quina URL porta l\'enllaç?', openInNewWindow: 'Obrir en una finestra nova' }, table: { table: 'Taula', 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: 'Inserir línia horitzontal' }, style: { style: 'Estil', p: 'p', blockquote: 'Cita', pre: 'Codi', h1: 'Títol 1', h2: 'Títol 2', h3: 'Títol 3', h4: 'Títol 4', h5: 'Títol 5', h6: 'Títol 6' }, lists: { unordered: 'Llista desendreçada', ordered: 'Llista endreçada' }, options: { help: 'Ajut', fullscreen: 'Pantalla sencera', codeview: 'Veure codi font' }, paragraph: { paragraph: 'Paràgraf', outdent: 'Menys tabulació', indent: 'Més tabulació', left: 'Alinear a l\'esquerra', center: 'Alinear al mig', right: 'Alinear a la dreta', justify: 'Justificar' }, color: { recent: 'Últim color', more: 'Més colors', background: 'Color de fons', foreground: 'Color de lletra', transparent: 'Transparent', setTransparent: 'Establir transparent', reset: 'Restablir', resetToDefault: 'Restablir per defecte' }, shortcut: { shortcuts: 'Dreceres de teclat', close: 'Tancar', textFormatting: 'Format de text', action: 'Acció', paragraphFormatting: 'Format de paràgraf', documentStyle: 'Estil del document', extraKeys: 'Tecles adicionals' }, help: { 'insertParagraph': 'Inserir paràgraf', 'undo': 'Desfer l\'última acció', 'redo': 'Refer l\'última acció', 'tab': 'Tabular', 'untab': 'Eliminar tabulació', 'bold': 'Establir estil negreta', 'italic': 'Establir estil cursiva', 'underline': 'Establir estil subratllat', 'strikethrough': 'Establir estil ratllat', 'removeFormat': 'Netejar estil', 'justifyLeft': 'Alinear a l\'esquerra', 'justifyCenter': 'Alinear al centre', 'justifyRight': 'Alinear a la dreta', 'justifyFull': 'Justificar', 'insertUnorderedList': 'Inserir llista desendreçada', 'insertOrderedList': 'Inserir llista endreçada', 'outdent': 'Reduïr tabulació del paràgraf', 'indent': 'Augmentar tabulació del paràgraf', 'formatPara': 'Canviar l\'estil del bloc com a un paràgraf (etiqueta P)', 'formatH1': 'Canviar l\'estil del bloc com a un H1', 'formatH2': 'Canviar l\'estil del bloc com a un H2', 'formatH3': 'Canviar l\'estil del bloc com a un H3', 'formatH4': 'Canviar l\'estil del bloc com a un H4', 'formatH5': 'Canviar l\'estil del bloc com a un H5', 'formatH6': 'Canviar l\'estil del bloc com a un H6', 'insertHorizontalRule': 'Inserir una línia horitzontal', 'linkDialog.show': 'Mostrar panel d\'enllaços' }, history: { undo: 'Desfer', redo: 'Refer' }, specialChar: { specialChar: 'CARÀCTERS ESPECIALS', select: 'Selecciona caràcters especials' } } }); })(jQuery); PKf[�\B�bnnlang/summernote-th-TH.jsnu�[���(function($) { $.extend($.summernote.lang, { 'th-TH': { font: { bold: 'ตัวหนา', italic: 'ตัวเอียง', underline: 'ขีดเส้นใต้', clear: 'ล้างรูปแบบตัวอักษร', height: 'ความสูงบรรทัด', name: 'แบบตัวอักษร', strikethrough: 'ขีดฆ่า', subscript: 'ตัวห้อย', superscript: 'ตัวยก', size: 'ขนาดตัวอักษร' }, image: { image: 'รูปภาพ', insert: 'แทรกรูปภาพ', resizeFull: 'ปรับขนาดเท่าจริง', resizeHalf: 'ปรับขนาดลง 50%', resizeQuarter: 'ปรับขนาดลง 25%', floatLeft: 'ชิดซ้าย', floatRight: 'ชิดขวา', floatNone: 'ไม่จัดตำแหน่ง', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'ลากรูปภาพที่ต้องการไว้ที่นี่', dropImage: 'Drop image or Text', selectFromFiles: 'เลือกไฟล์รูปภาพ', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'ที่อยู่ URL ของรูปภาพ', remove: 'ลบรูปภาพ', original: 'Original' }, video: { video: 'วีดีโอ', videoLink: 'ลิงก์ของวีดีโอ', insert: 'แทรกวีดีโอ', url: 'ที่อยู่ URL ของวีดีโอ?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion หรือ Youku)' }, link: { link: 'ตัวเชื่อมโยง', insert: 'แทรกตัวเชื่อมโยง', unlink: 'ยกเลิกตัวเชื่อมโยง', edit: 'แก้ไข', textToDisplay: 'ข้อความที่ให้แสดง', url: 'ที่อยู่เว็บไซต์ที่ต้องการให้เชื่อมโยงไปถึง?', openInNewWindow: 'เปิดในหน้าต่างใหม่' }, 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: 'แทรกเส้นคั่น' }, style: { style: 'รูปแบบ', p: 'ปกติ', blockquote: 'ข้อความ', pre: 'โค้ด', h1: 'หัวข้อ 1', h2: 'หัวข้อ 2', h3: 'หัวข้อ 3', h4: 'หัวข้อ 4', h5: 'หัวข้อ 5', h6: 'หัวข้อ 6' }, lists: { unordered: 'รายการแบบไม่มีลำดับ', ordered: 'รายการแบบมีลำดับ' }, options: { help: 'ช่วยเหลือ', fullscreen: 'ขยายเต็มหน้าจอ', codeview: 'ซอร์สโค้ด' }, paragraph: { paragraph: 'ย่อหน้า', outdent: 'เยื้องซ้าย', indent: 'เยื้องขวา', left: 'จัดหน้าชิดซ้าย', center: 'จัดหน้ากึ่งกลาง', right: 'จัดหน้าชิดขวา', justify: 'จัดบรรทัดเสมอกัน' }, color: { recent: 'สีที่ใช้ล่าสุด', more: 'สีอื่นๆ', background: 'สีพื้นหลัง', foreground: 'สีพื้นหน้า', transparent: 'โปร่งแสง', setTransparent: 'ตั้งค่าความโปร่งแสง', reset: 'คืนค่า', resetToDefault: 'คืนค่ามาตรฐาน' }, shortcut: { shortcuts: 'แป้นลัด', close: 'ปิด', textFormatting: 'การจัดรูปแบบข้อความ', action: 'การกระทำ', paragraphFormatting: 'การจัดรูปแบบย่อหน้า', documentStyle: 'รูปแบบของเอกสาร', 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: 'ยกเลิกการกระทำ', redo: 'ทำซ้ำการกระทำ' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\m��pplang/summernote-sl-SI.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sl-SI': { font: { bold: 'Krepko', italic: 'Ležeče', underline: 'Podčrtano', clear: 'Počisti oblikovanje izbire', height: 'Razmik med vrsticami', name: 'Pisava', strikethrough: 'Prečrtano', subscript: 'Podpisano', superscript: 'Nadpisano', size: 'Velikost pisave' }, image: { image: 'Slika', insert: 'Vstavi sliko', resizeFull: 'Razširi na polno velikost', resizeHalf: 'Razširi na polovico velikosti', resizeQuarter: 'Razširi na četrtino velikosti', floatLeft: 'Leva poravnava', floatRight: 'Desna poravnava', floatNone: 'Brez poravnave', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Sem povlecite sliko', dropImage: 'Drop image or Text', selectFromFiles: 'Izberi sliko za nalaganje', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL naslov slike', remove: 'Odstrani sliko', original: 'Original' }, video: { video: 'Video', videoLink: 'Video povezava', insert: 'Vstavi video', url: 'Povezava do videa', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ali Youku)' }, link: { link: 'Povezava', insert: 'Vstavi povezavo', unlink: 'Odstrani povezavo', edit: 'Uredi', textToDisplay: 'Prikazano besedilo', url: 'Povezava', openInNewWindow: 'Odpri v novem oknu' }, table: { table: 'Tabela', 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: 'Vstavi horizontalno črto' }, style: { style: 'Slogi', p: 'Navadno besedilo', blockquote: 'Citat', pre: 'Koda', h1: 'Naslov 1', h2: 'Naslov 2', h3: 'Naslov 3', h4: 'Naslov 4', h5: 'Naslov 5', h6: 'Naslov 6' }, lists: { unordered: 'Označen seznam', ordered: 'Oštevilčen seznam' }, options: { help: 'Pomoč', fullscreen: 'Celozaslonski način', codeview: 'Pregled HTML kode' }, paragraph: { paragraph: 'Slogi odstavka', outdent: 'Zmanjšaj odmik', indent: 'Povečaj odmik', left: 'Leva poravnava', center: 'Desna poravnava', right: 'Sredinska poravnava', justify: 'Obojestranska poravnava' }, color: { recent: 'Uporabi zadnjo barvo', more: 'Več barv', background: 'Barva ozadja', foreground: 'Barva besedila', transparent: 'Brez barve', setTransparent: 'Brez barve', reset: 'Ponastavi', resetToDefault: 'Ponastavi na privzeto' }, shortcut: { shortcuts: 'Bljižnice', close: 'Zapri', textFormatting: 'Oblikovanje besedila', action: 'Dejanja', paragraphFormatting: 'Oblikovanje odstavka', documentStyle: 'Oblikovanje naslova', 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: 'Razveljavi', redo: 'Uveljavi' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\v?!b''lang/summernote-he-IL.jsnu�[���(function($) { $.extend($.summernote.lang, { 'he-IL': { font: { bold: 'מודגש', italic: 'נטוי', underline: 'קו תחתון', clear: 'נקה עיצוב', height: 'גובה', name: 'גופן', strikethrough: 'קו חוצה', subscript: 'כתב תחתי', superscript: 'כתב עילי', size: 'גודל גופן' }, image: { image: 'תמונה', insert: 'הוסף תמונה', resizeFull: 'גודל מלא', resizeHalf: 'להקטין לחצי', resizeQuarter: 'להקטין לרבע', floatLeft: 'יישור לשמאל', floatRight: 'יישור לימין', floatNone: 'ישר', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'גרור תמונה לכאן', dropImage: 'Drop image or Text', selectFromFiles: 'בחר מתוך קבצים', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'נתיב לתמונה', remove: 'הסר תמונה', original: 'Original' }, video: { video: 'סרטון', videoLink: 'קישור לסרטון', insert: 'הוסף סרטון', url: 'קישור לסרטון', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion או Youku)' }, link: { link: 'קישור', insert: 'הוסף קישור', unlink: 'הסר קישור', edit: 'ערוך', textToDisplay: 'טקסט להציג', url: 'קישור', openInNewWindow: 'פתח בחלון חדש' }, 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: 'הוסף קו' }, style: { style: 'עיצוב', p: 'טקסט רגיל', blockquote: 'ציטוט', pre: 'קוד', h1: 'כותרת 1', h2: 'כותרת 2', h3: 'כותרת 3', h4: 'כותרת 4', h5: 'כותרת 5', h6: 'כותרת 6' }, lists: { unordered: 'רשימת תבליטים', ordered: 'רשימה ממוספרת' }, options: { help: 'עזרה', fullscreen: 'מסך מלא', codeview: 'תצוגת קוד' }, paragraph: { paragraph: 'פסקה', outdent: 'הקטן כניסה', indent: 'הגדל כניסה', left: 'יישור לשמאל', center: 'יישור למרכז', right: 'יישור לימין', justify: 'מיושר' }, color: { recent: 'צבע טקסט אחרון', more: 'עוד צבעים', background: 'צבע רקע', foreground: 'צבע טקסט', transparent: 'שקוף', setTransparent: 'קבע כשקוף', reset: 'איפוס', resetToDefault: 'אפס לברירת מחדל' }, shortcut: { shortcuts: 'קיצורי מקלדת', close: 'סגור', textFormatting: 'עיצוב הטקסט', action: 'פעולה', paragraphFormatting: 'סגנונות פסקה', documentStyle: 'עיצוב המסמך', extraKeys: 'קיצורים נוספים' }, 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: 'בטל פעולה', redo: 'בצע שוב' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\[܂}lang/summernote-es-ES.jsnu�[���(function($) { $.extend($.summernote.lang, { 'es-ES': { font: { bold: 'Negrita', italic: 'Cursiva', underline: 'Subrayado', clear: 'Quitar estilo de fuente', height: 'Altura de línea', name: 'Fuente', strikethrough: 'Tachado', superscript: 'Superíndice', subscript: 'Subíndice', size: 'Tamaño de la fuente' }, image: { image: 'Imagen', insert: 'Insertar imagen', resizeFull: 'Redimensionar a tamaño completo', resizeHalf: 'Redimensionar a la mitad', resizeQuarter: 'Redimensionar a un cuarto', floatLeft: 'Flotar a la izquierda', floatRight: 'Flotar a la derecha', floatNone: 'No flotar', shapeRounded: 'Forma: Redondeado', shapeCircle: 'Forma: Círculo', shapeThumbnail: 'Forma: Marco', shapeNone: 'Forma: Ninguna', dragImageHere: 'Arrastrar una imagen o texto aquí', dropImage: 'Suelta la imagen o texto', selectFromFiles: 'Seleccionar desde los archivos', maximumFileSize: 'Tamaño máximo del archivo', maximumFileSizeError: 'Has superado el tamaño máximo del archivo.', url: 'URL de la imagen', remove: 'Eliminar imagen', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Link del vídeo', insert: 'Insertar vídeo', url: '¿URL del vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion o Youku)' }, link: { link: 'Link', insert: 'Insertar link', unlink: 'Quitar link', edit: 'Editar', textToDisplay: 'Texto para mostrar', url: '¿Hacia que URL lleva el link?', openInNewWindow: 'Abrir en una nueva ventana' }, table: { table: 'Tabla', addRowAbove: 'Añadir fila encima', addRowBelow: 'Añadir fila debajo', addColLeft: 'Añadir columna izquierda', addColRight: 'Añadir columna derecha', delRow: 'Borrar fila', delCol: 'Eliminar columna', delTable: 'Eliminar tabla' }, hr: { insert: 'Insertar línea horizontal' }, style: { style: 'Estilo', p: 'p', blockquote: 'Cita', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista desordenada', ordered: 'Lista ordenada' }, options: { help: 'Ayuda', fullscreen: 'Pantalla completa', codeview: 'Ver código fuente' }, paragraph: { paragraph: 'Párrafo', outdent: 'Menos tabulación', indent: 'Más tabulación', left: 'Alinear a la izquierda', center: 'Alinear al centro', right: 'Alinear a la derecha', justify: 'Justificar' }, color: { recent: 'Último color', more: 'Más colores', background: 'Color de fondo', foreground: 'Color de fuente', transparent: 'Transparente', setTransparent: 'Establecer transparente', reset: 'Restaurar', resetToDefault: 'Restaurar por defecto' }, shortcut: { shortcuts: 'Atajos de teclado', close: 'Cerrar', textFormatting: 'Formato de texto', action: 'Acción', paragraphFormatting: 'Formato de párrafo', documentStyle: 'Estilo de documento', extraKeys: 'Teclas adicionales' }, help: { 'insertParagraph': 'Insertar párrafo', 'undo': 'Deshacer última acción', 'redo': 'Rehacer última acción', 'tab': 'Tabular', 'untab': 'Eliminar tabulación', 'bold': 'Establecer estilo negrita', 'italic': 'Establecer estilo cursiva', 'underline': 'Establecer estilo subrayado', 'strikethrough': 'Establecer estilo tachado', 'removeFormat': 'Limpiar estilo', 'justifyLeft': 'Alinear a la izquierda', 'justifyCenter': 'Alinear al centro', 'justifyRight': 'Alinear a la derecha', 'justifyFull': 'Justificar', 'insertUnorderedList': 'Insertar lista desordenada', 'insertOrderedList': 'Insertar lista ordenada', 'outdent': 'Reducir tabulación del párrafo', 'indent': 'Aumentar tabulación del párrafo', 'formatPara': 'Cambiar estilo del bloque a párrafo (etiqueta P)', 'formatH1': 'Cambiar estilo del bloque a H1', 'formatH2': 'Cambiar estilo del bloque a H2', 'formatH3': 'Cambiar estilo del bloque a H3', 'formatH4': 'Cambiar estilo del bloque a H4', 'formatH5': 'Cambiar estilo del bloque a H5', 'formatH6': 'Cambiar estilo del bloque a H6', 'insertHorizontalRule': 'Insertar línea horizontal', 'linkDialog.show': 'Mostrar panel enlaces' }, history: { undo: 'Deshacer', redo: 'Rehacer' }, specialChar: { specialChar: 'CARACTERES ESPECIALES', select: 'Selecciona Caracteres especiales' } } }); })(jQuery); PKf[�\ݕو��lang/summernote-nb-NO.jsnu�[���(function($) { $.extend($.summernote.lang, { 'nb-NO': { font: { bold: 'Fet', italic: 'Kursiv', underline: 'Understrek', clear: 'Fjern formatering', height: 'Linjehøyde', name: 'Skrifttype', strikethrough: 'Gjennomstrek', subscript: 'Subscript', superscript: 'Superscript', size: 'Skriftstørrelse' }, image: { image: 'Bilde', insert: 'Sett inn bilde', resizeFull: 'Sett full størrelse', resizeHalf: 'Sett halv størrelse', resizeQuarter: 'Sett kvart størrelse', floatLeft: 'Flyt til venstre', floatRight: 'Flyt til høyre', floatNone: 'Fjern flyt', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Dra et bilde hit', dropImage: 'Drop image or Text', selectFromFiles: 'Velg fra filer', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Bilde-URL', remove: 'Fjern bilde', original: 'Original' }, video: { video: 'Video', videoLink: 'Videolenke', insert: 'Sett inn video', url: 'Video-URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' }, link: { link: 'Lenke', insert: 'Sett inn lenke', unlink: 'Fjern lenke', edit: 'Rediger', textToDisplay: 'Visningstekst', url: 'Til hvilken URL skal denne lenken peke?', openInNewWindow: 'Åpne i nytt vindu' }, table: { table: 'Tabell', 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: 'Sett inn horisontal linje' }, style: { style: 'Stil', p: 'p', blockquote: 'Sitat', pre: 'Kode', h1: 'Overskrift 1', h2: 'Overskrift 2', h3: 'Overskrift 3', h4: 'Overskrift 4', h5: 'Overskrift 5', h6: 'Overskrift 6' }, lists: { unordered: 'Punktliste', ordered: 'Nummerert liste' }, options: { help: 'Hjelp', fullscreen: 'Fullskjerm', codeview: 'HTML-visning' }, paragraph: { paragraph: 'Avsnitt', outdent: 'Tilbakerykk', indent: 'Innrykk', left: 'Venstrejustert', center: 'Midtstilt', right: 'Høyrejustert', justify: 'Blokkjustert' }, color: { recent: 'Nylig valgt farge', more: 'Flere farger', background: 'Bakgrunnsfarge', foreground: 'Skriftfarge', transparent: 'Gjennomsiktig', setTransparent: 'Sett gjennomsiktig', reset: 'Nullstill', resetToDefault: 'Nullstill til standard' }, shortcut: { shortcuts: 'Hurtigtaster', close: 'Lukk', textFormatting: 'Tekstformatering', action: 'Handling', paragraphFormatting: 'Avsnittsformatering', documentStyle: 'Dokumentstil' }, 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: 'Angre', redo: 'Gjør om' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\5r���lang/summernote-sr-RS.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sr-RS': { font: { bold: 'Подебљано', italic: 'Курзив', underline: 'Подвучено', clear: 'Уклони стилове фонта', height: 'Висина линије', name: 'Font Family', strikethrough: 'Прецртано', subscript: 'Subscript', superscript: 'Superscript', size: 'Величина фонта' }, image: { image: 'Слика', insert: 'Уметни слику', resizeFull: 'Пуна величина', resizeHalf: 'Умањи на 50%', resizeQuarter: 'Умањи на 25%', floatLeft: 'Уз леву ивицу', floatRight: 'Уз десну ивицу', floatNone: 'Без равнања', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Превуци слику овде', dropImage: 'Drop image or Text', selectFromFiles: 'Изабери из датотеке', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Адреса слике', remove: 'Уклони слику', original: 'Original' }, video: { video: 'Видео', videoLink: 'Веза ка видеу', insert: 'Уметни видео', url: 'URL видео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' }, link: { link: 'Веза', insert: 'Уметни везу', unlink: 'Уклони везу', edit: 'Уреди', textToDisplay: 'Текст за приказ', url: 'Интернет адреса', openInNewWindow: 'Отвори у новом прозору' }, 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: 'Уметни хоризонталну линију' }, style: { style: 'Стил', p: 'Нормални', blockquote: 'Цитат', pre: 'Код', h1: 'Заглавље 1', h2: 'Заглавље 2', h3: 'Заглавље 3', h4: 'Заглавље 4', h5: 'Заглавље 5', h6: 'Заглавље 6' }, lists: { unordered: 'Обична листа', ordered: 'Нумерисана листа' }, options: { help: 'Помоћ', fullscreen: 'Преко целог екрана', codeview: 'Изворни код' }, paragraph: { paragraph: 'Параграф', outdent: 'Смањи увлачење', indent: 'Повечај увлачење', left: 'Поравнај у лево', center: 'Центрирано', right: 'Поравнај у десно', justify: 'Поравнај обострано' }, color: { recent: 'Последња боја', more: 'Више боја', background: 'Боја позадине', foreground: 'Боја текста', transparent: 'Провидна', setTransparent: 'Провидна', reset: 'Опозив', resetToDefault: 'Подразумевана' }, shortcut: { shortcuts: 'Пречице са тастатуре', close: 'Затвори', textFormatting: 'Форматирање текста', action: 'Акција', paragraphFormatting: 'Форматирање параграфа', documentStyle: 'Стил документа', extraKeys: 'Додатне комбинације' }, 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: 'Поништи', redo: 'Понови' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\��+�ZZlang/summernote-zh-TW.jsnu�[���(function($) { $.extend($.summernote.lang, { 'zh-TW': { font: { bold: '粗體', italic: '斜體', underline: '底線', clear: '清除格式', height: '行高', name: '字體', strikethrough: '刪除線', subscript: '下標', superscript: '上標', size: '字號' }, image: { image: '圖片', insert: '插入圖片', resizeFull: '縮放至100%', resizeHalf: '縮放至 50%', resizeQuarter: '縮放至 25%', floatLeft: '靠左浮動', floatRight: '靠右浮動', floatNone: '取消浮動', shapeRounded: '形狀: 圓角', shapeCircle: '形狀: 圓', shapeThumbnail: '形狀: 縮略圖', shapeNone: '形狀: 無', dragImageHere: '將圖片拖曳至此處', dropImage: 'Drop image or Text', selectFromFiles: '從本機上傳', maximumFileSize: '文件大小最大值', maximumFileSizeError: '文件大小超出最大值。', url: '圖片網址', remove: '移除圖片', original: 'Original' }, video: { video: '影片', videoLink: '影片連結', insert: '插入影片', url: '影片網址', providers: '(優酷, Instagram, DailyMotion, Youtube等)' }, link: { link: '連結', insert: '插入連結', unlink: '取消連結', edit: '編輯連結', textToDisplay: '顯示文字', url: '連結網址', openInNewWindow: '在新視窗開啟' }, 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: '水平線' }, style: { style: '樣式', p: '一般', blockquote: '引用區塊', pre: '程式碼區塊', h1: '標題 1', h2: '標題 2', h3: '標題 3', h4: '標題 4', h5: '標題 5', h6: '標題 6' }, lists: { unordered: '項目清單', ordered: '編號清單' }, options: { help: '幫助', fullscreen: '全螢幕', codeview: '原始碼' }, paragraph: { paragraph: '段落', outdent: '取消縮排', indent: '增加縮排', left: '靠右對齊', center: '靠中對齊', right: '靠右對齊', justify: '左右對齊' }, color: { recent: '字型顏色', more: '更多', background: '背景', foreground: '前景', transparent: '透明', setTransparent: '透明', reset: '重設', resetToDefault: '默認' }, shortcut: { shortcuts: '快捷鍵', close: '關閉', textFormatting: '文字格式', action: '動作', paragraphFormatting: '段落格式', documentStyle: '文件格式', extraKeys: '額外按鍵' }, 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: '復原', redo: '取消復原' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\8N�kklang/summernote-uk-UA.jsnu�[���(function($) { $.extend($.summernote.lang, { 'uk-UA': { font: { bold: 'Напівжирний', italic: 'Курсив', underline: 'Підкреслений', clear: 'Прибрати стилі шрифту', height: 'Висота лінії', name: 'Шрифт', strikethrough: 'Закреслений', subscript: 'Нижній індекс', superscript: 'Верхній індекс', size: 'Розмір шрифту' }, image: { image: 'Картинка', insert: 'Вставити картинку', resizeFull: 'Відновити розмір', resizeHalf: 'Зменшити до 50%', resizeQuarter: 'Зменшити до 25%', floatLeft: 'Розташувати ліворуч', floatRight: 'Розташувати праворуч', floatNone: 'Початкове розташування', shapeRounded: 'Форма: Заокруглена', shapeCircle: 'Форма: Коло', shapeThumbnail: 'Форма: Мініатюра', shapeNone: 'Форма: Немає', dragImageHere: 'Перетягніть сюди картинку', dropImage: 'Перетягніть картинку', selectFromFiles: 'Вибрати з файлів', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL картинки', remove: 'Видалити картинку', original: 'Original' }, video: { video: 'Відео', videoLink: 'Посилання на відео', insert: 'Вставити відео', url: 'URL відео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion чи Youku)' }, link: { link: 'Посилання', insert: 'Вставити посилання', unlink: 'Прибрати посилання', edit: 'Редагувати', textToDisplay: 'Текст, що відображається', url: 'URL для переходу', openInNewWindow: 'Відкривати у новому вікні' }, 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: 'Вставити горизонтальну лінію' }, style: { style: 'Стиль', p: 'Нормальний', blockquote: 'Цитата', pre: 'Код', h1: 'Заголовок 1', h2: 'Заголовок 2', h3: 'Заголовок 3', h4: 'Заголовок 4', h5: 'Заголовок 5', h6: 'Заголовок 6' }, lists: { unordered: 'Маркований список', ordered: 'Нумерований список' }, options: { help: 'Допомога', fullscreen: 'На весь екран', codeview: 'Початковий код' }, paragraph: { paragraph: 'Параграф', outdent: 'Зменшити відступ', indent: 'Збільшити відступ', left: 'Вирівняти по лівому краю', center: 'Вирівняти по центру', right: 'Вирівняти по правому краю', justify: 'Розтягнути по ширині' }, color: { recent: 'Останній колір', more: 'Ще кольори', background: 'Колір фону', foreground: 'Колір шрифту', transparent: 'Прозорий', setTransparent: 'Зробити прозорим', reset: 'Відновити', resetToDefault: 'Відновити початкові' }, shortcut: { shortcuts: 'Комбінації клавіш', close: 'Закрити', textFormatting: 'Форматування тексту', action: 'Дія', paragraphFormatting: 'Форматування параграфу', documentStyle: 'Стиль документу', 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: 'Відмінити', redo: 'Повторити' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\$����lang/summernote-sr-RS-Latin.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sr-RS': { font: { bold: 'Podebljano', italic: 'Kurziv', underline: 'Podvučeno', clear: 'Ukloni stilove fonta', height: 'Visina linije', name: 'Font Family', strikethrough: 'Precrtano', subscript: 'Subscript', superscript: 'Superscript', size: 'Veličina fonta' }, image: { image: 'Slika', insert: 'Umetni sliku', resizeFull: 'Puna veličina', resizeHalf: 'Umanji na 50%', resizeQuarter: 'Umanji na 25%', floatLeft: 'Uz levu ivicu', floatRight: 'Uz desnu ivicu', floatNone: 'Bez ravnanja', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Prevuci sliku ovde', dropImage: 'Drop image or Text', selectFromFiles: 'Izaberi iz datoteke', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Adresa slike', remove: 'Ukloni sliku', original: 'Original' }, video: { video: 'Video', videoLink: 'Veza ka videu', insert: 'Umetni video', url: 'URL video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)' }, link: { link: 'Veza', insert: 'Umetni vezu', unlink: 'Ukloni vezu', edit: 'Uredi', textToDisplay: 'Tekst za prikaz', url: 'Internet adresa', openInNewWindow: 'Otvori u novom prozoru' }, table: { table: 'Tabela', 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: 'Umetni horizontalnu liniju' }, style: { style: 'Stil', p: 'pni', blockquote: 'Citat', pre: 'Kod', h1: 'Zaglavlje 1', h2: 'Zaglavlje 2', h3: 'Zaglavlje 3', h4: 'Zaglavlje 4', h5: 'Zaglavlje 5', h6: 'Zaglavlje 6' }, lists: { unordered: 'Obična lista', ordered: 'Numerisana lista' }, options: { help: 'Pomoć', fullscreen: 'Preko celog ekrana', codeview: 'Izvorni kod' }, paragraph: { paragraph: 'Paragraf', outdent: 'Smanji uvlačenje', indent: 'Povečaj uvlačenje', left: 'Poravnaj u levo', center: 'Centrirano', right: 'Poravnaj u desno', justify: 'Poravnaj obostrano' }, color: { recent: 'Poslednja boja', more: 'Više boja', background: 'Boja pozadine', foreground: 'Boja teksta', transparent: 'Providna', setTransparent: 'Providna', reset: 'Opoziv', resetToDefault: 'Podrazumevana' }, shortcut: { shortcuts: 'Prečice sa tastature', close: 'Zatvori', textFormatting: 'Formatiranje teksta', action: 'Akcija', paragraphFormatting: 'Formatiranje paragrafa', documentStyle: 'Stil dokumenta', extraKeys: 'Dodatne kombinacije' }, 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: 'Poništi', redo: 'Ponovi' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\1��(nnlang/summernote-pt-BR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'pt-BR': { font: { bold: 'Negrito', italic: 'Itálico', underline: 'Sublinhado', clear: 'Remover estilo da fonte', height: 'Altura da linha', name: 'Fonte', strikethrough: 'Riscado', subscript: 'Subscript', superscript: 'Superscript', size: 'Tamanho da fonte' }, image: { image: 'Imagem', insert: 'Inserir imagem', resizeFull: 'Redimensionar Completamente', resizeHalf: 'Redimensionar pela Metade', resizeQuarter: 'Redimensionar um Quarto', floatLeft: 'Flutuar para Esquerda', floatRight: 'Flutuar para Direira', floatNone: 'Não Flutuar', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Arraste uma imagem para cá', dropImage: 'Drop image or Text', selectFromFiles: 'Selecione a partir dos arquivos', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL da imagem', remove: 'Remove Image', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Link para vídeo', insert: 'Inserir vídeo', url: 'URL do vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'Link', insert: 'Inserir link', unlink: 'Remover link', edit: 'Editar', textToDisplay: 'Texto para exibir', url: 'Para qual URL esse link leva?', openInNewWindow: 'Abrir em uma nova janela' }, table: { table: 'Tabela', addRowAbove: 'Adicionar linha acima', addRowBelow: 'Adicionar linha abaixo', addColLeft: 'Adicionar coluna a esquerda', addColRight: 'Adicionar coluna a direita', delRow: 'Excluir linha', delCol: 'Excluir coluna', delTable: 'Delete table' }, hr: { insert: 'Inserir linha horizontal' }, style: { style: 'Estilo', normal: 'Normal', blockquote: 'Citação', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista com marcadores', ordered: 'Lista numerada' }, options: { help: 'Ajuda', fullscreen: 'Tela cheia', codeview: 'Ver código-fonte' }, paragraph: { paragraph: 'Parágrafo', outdent: 'Menor tabulação', indent: 'Maior tabulação', left: 'Alinhar à esquerda', center: 'Alinhar ao centro', right: 'Alinha à direita', justify: 'Justificado' }, color: { recent: 'Cor recente', more: 'Mais cores', background: 'Fundo', foreground: 'Fonte', transparent: 'Transparente', setTransparent: 'Fundo transparente', reset: 'Restaurar', resetToDefault: 'Restaurar padrão' }, shortcut: { shortcuts: 'Atalhos do teclado', close: 'Fechar', textFormatting: 'Formatação de texto', action: 'Ação', paragraphFormatting: 'Formatação de parágrafo', documentStyle: 'Estilo de documento', extraKeys: 'Extra keys' }, help: { 'insertParagraph': 'Inserir Parágrafo', 'undo': 'Desfazer o último comando', 'redo': 'Refazer o último comando', 'tab': 'Tab', 'untab': 'Desfazer tab', 'bold': 'Colocar em negrito', 'italic': 'Colocar em itálico', 'underline': 'Sublinhado', 'strikethrough': 'Tachado', 'removeFormat': 'Remover estilo', 'justifyLeft': 'Alinhar à esquerda', 'justifyCenter': 'Centralizar', 'justifyRight': 'Alinhar à esquerda', 'justifyFull': 'Justificar', 'insertUnorderedList': 'Lista não ordenada', 'insertOrderedList': 'Lista ordenada', 'outdent': 'Recuar parágrafo atual', 'indent': 'Avançar parágrafo atual', 'formatPara': 'Alterar formato do bloco para parágrafo(tag P)', 'formatH1': 'Alterar formato do bloco para H1', 'formatH2': 'Alterar formato do bloco para H2', 'formatH3': 'Alterar formato do bloco para H3', 'formatH4': 'Alterar formato do bloco para H4', 'formatH5': 'Alterar formato do bloco para H5', 'formatH6': 'Alterar formato do bloco para H6', 'insertHorizontalRule': 'Inserir régua horizontal', 'linkDialog.show': 'Inserir um Hiperlink' }, history: { undo: 'Desfazer', redo: 'Refazer' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\%J���lang/summernote-hr-HR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'hr-HR': { font: { bold: 'Podebljano', italic: 'Kurziv', underline: 'Podvučeno', clear: 'Ukloni stilove fonta', height: 'Visina linije', name: 'Font Family', strikethrough: 'Precrtano', subscript: 'Subscript', superscript: 'Superscript', size: 'Veličina fonta' }, image: { image: 'Slika', insert: 'Ubaci sliku', resizeFull: 'Puna veličina', resizeHalf: 'Umanji na 50%', resizeQuarter: 'Umanji na 25%', floatLeft: 'Poravnaj lijevo', floatRight: 'Poravnaj desno', floatNone: 'Bez poravnanja', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Povuci sliku ovdje', dropImage: 'Drop image or Text', selectFromFiles: 'Izaberi iz datoteke', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Adresa slike', remove: 'Ukloni sliku', original: 'Original' }, video: { video: 'Video', videoLink: 'Veza na video', insert: 'Ubaci video', url: 'URL video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ili Youku)' }, link: { link: 'Veza', insert: 'Ubaci vezu', unlink: 'Ukloni vezu', edit: 'Uredi', textToDisplay: 'Tekst za prikaz', url: 'Internet adresa', openInNewWindow: 'Otvori u novom prozoru' }, table: { table: 'Tablica', 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: 'Ubaci horizontalnu liniju' }, style: { style: 'Stil', p: 'pni', blockquote: 'Citat', pre: 'Kôd', h1: 'Naslov 1', h2: 'Naslov 2', h3: 'Naslov 3', h4: 'Naslov 4', h5: 'Naslov 5', h6: 'Naslov 6' }, lists: { unordered: 'Obična lista', ordered: 'Numerirana lista' }, options: { help: 'Pomoć', fullscreen: 'Preko cijelog ekrana', codeview: 'Izvorni kôd' }, paragraph: { paragraph: 'Paragraf', outdent: 'Smanji uvlačenje', indent: 'Povećaj uvlačenje', left: 'Poravnaj lijevo', center: 'Centrirano', right: 'Poravnaj desno', justify: 'Poravnaj obostrano' }, color: { recent: 'Posljednja boja', more: 'Više boja', background: 'Boja pozadine', foreground: 'Boja teksta', transparent: 'Prozirna', setTransparent: 'Prozirna', reset: 'Poništi', resetToDefault: 'Podrazumijevana' }, shortcut: { shortcuts: 'Prečice s tipkovnice', close: 'Zatvori', textFormatting: 'Formatiranje teksta', action: 'Akcija', paragraphFormatting: 'Formatiranje paragrafa', documentStyle: 'Stil dokumenta', extraKeys: 'Dodatne kombinacije' }, 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: 'Poništi', redo: 'Ponovi' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�MHy��lang/summernote-id-ID.jsnu�[���(function($) { $.extend($.summernote.lang, { 'id-ID': { font: { bold: 'Tebal', italic: 'Miring', underline: 'Garis bawah', clear: 'Bersihkan gaya', height: 'Jarak baris', name: 'Font Family', strikethrough: 'Coret', subscript: 'Subscript', superscript: 'Superscript', size: 'Ukuran font' }, image: { image: 'Gambar', insert: 'Sisipkan gambar', resizeFull: 'Ukuran penuh', resizeHalf: 'Ukuran 50%', resizeQuarter: 'Ukuran 25%', floatLeft: 'Rata kiri', floatRight: 'Rata kanan', floatNone: 'Tidak ada perataan', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Tarik gambar pada area ini', dropImage: 'Drop image or Text', selectFromFiles: 'Pilih gambar dari berkas', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'URL gambar', remove: 'Hapus Gambar', original: 'Original' }, video: { video: 'Video', videoLink: 'Link video', insert: 'Sisipkan video', url: 'Tautan video', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion atau Youku)' }, link: { link: 'Tautan', insert: 'Tambah tautan', unlink: 'Hapus tautan', edit: 'Edit', textToDisplay: 'Tampilan teks', url: 'Tautan tujuan', openInNewWindow: 'Buka di jendela baru' }, table: { table: 'Tabel', 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: 'Masukkan garis horizontal' }, style: { style: 'Gaya', p: 'p', blockquote: 'Kutipan', pre: 'Kode', h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', h4: 'Heading 4', h5: 'Heading 5', h6: 'Heading 6' }, lists: { unordered: 'Pencacahan', ordered: 'Penomoran' }, options: { help: 'Bantuan', fullscreen: 'Layar penuh', codeview: 'Kode HTML' }, paragraph: { paragraph: 'Paragraf', outdent: 'Outdent', indent: 'Indent', left: 'Rata kiri', center: 'Rata tengah', right: 'Rata kanan', justify: 'Rata kanan kiri' }, color: { recent: 'Warna sekarang', more: 'Selengkapnya', background: 'Warna latar', foreground: 'Warna font', transparent: 'Transparan', setTransparent: 'Atur transparansi', reset: 'Atur ulang', resetToDefault: 'Kembalikan kesemula' }, shortcut: { shortcuts: 'Jalan pintas', close: 'Keluar', textFormatting: 'Format teks', action: 'Aksi', paragraphFormatting: 'Format paragraf', documentStyle: 'Gaya dokumen', 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: 'Kembali', redo: 'Ulang' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\?�l�~~lang/summernote-de-DE.jsnu�[���(function($) { $.extend($.summernote.lang, { 'de-DE': { font: { bold: 'Fett', italic: 'Kursiv', underline: 'Unterstreichen', clear: 'Zurücksetzen', height: 'Zeilenhöhe', name: 'Schriftart', strikethrough: 'Durchgestrichen', subscript: 'Tiefgestellt', superscript: 'Hochgestellt', size: 'Schriftgröße' }, image: { image: 'Grafik', insert: 'Grafik einfügen', resizeFull: 'Originalgröße', resizeHalf: 'Größe 1/2', resizeQuarter: 'Größe 1/4', floatLeft: 'Linksbündig', floatRight: 'Rechtsbündig', floatNone: 'Kein Textfluss', shapeRounded: 'Rahmen: Abgerundet', shapeCircle: 'Rahmen: Kreisförmig', shapeThumbnail: 'Rahmen: Thumbnail', shapeNone: 'Kein Rahmen', dragImageHere: 'Ziehen Sie ein Bild mit der Maus hierher', dropImage: 'Drop image or Text', selectFromFiles: 'Wählen Sie eine Datei aus', maximumFileSize: 'Maximale Dateigröße', maximumFileSizeError: 'Maximale Dateigröße überschritten', url: 'Grafik URL', remove: 'Grafik entfernen', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Video einfügen', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion oder Youku)' }, link: { link: 'Link', insert: 'Link einfügen', unlink: 'Link entfernen', edit: 'Editieren', textToDisplay: 'Anzeigetext', url: 'Ziel des Links?', openInNewWindow: 'In einem neuen Fenster öffnen' }, table: { table: 'Tabelle', addRowAbove: 'Zeile oberhalb einfügen', addRowBelow: 'Zeile unterhalb einfügen', addColLeft: 'Spalte links einfügen', addColRight: 'Spalte rechts einfügen', delRow: 'Zeile löschen', delCol: 'Spalte löschen', delTable: 'Tabelle löschen' }, hr: { insert: 'Eine horizontale Linie einfügen' }, style: { style: 'Stil', p: 'Normal', blockquote: 'Zitat', pre: 'Quellcode', h1: 'Überschrift 1', h2: 'Überschrift 2', h3: 'Überschrift 3', h4: 'Überschrift 4', h5: 'Überschrift 5', h6: 'Überschrift 6' }, lists: { unordered: 'Aufzählung', ordered: 'Nummerierung' }, options: { help: 'Hilfe', fullscreen: 'Vollbild', codeview: 'HTML-Code anzeigen' }, paragraph: { paragraph: 'Absatz', outdent: 'Einzug vergrößern', indent: 'Einzug verkleinern', left: 'Links ausrichten', center: 'Zentriert ausrichten', right: 'Rechts ausrichten', justify: 'Blocksatz' }, color: { recent: 'Letzte Farbe', more: 'Mehr Farben', background: 'Hintergrundfarbe', foreground: 'Schriftfarbe', transparent: 'Transparenz', setTransparent: 'Transparenz setzen', reset: 'Zurücksetzen', resetToDefault: 'Auf Standard zurücksetzen' }, shortcut: { shortcuts: 'Tastenkürzel', close: 'Schließen', textFormatting: 'Textformatierung', action: 'Aktion', paragraphFormatting: 'Absatzformatierung', documentStyle: 'Dokumentenstil' }, 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: 'Rückgängig', redo: 'Wiederholen' }, specialChar: { specialChar: 'SONDERZEICHEN', select: 'Sonderzeichen auswählen' } } }); })(jQuery); PKf[�\���Z��lang/summernote-lt-LV.jsnu�[���(function($) { $.extend($.summernote.lang, { 'lv-LV': { font: { bold: 'Treknraksts', italic: 'Kursīvs', underline: 'Pasvītrots', clear: 'Noņemt formatējumu', height: 'Līnijas augstums', name: 'Fonts', strikethrough: 'Nosvītrots', superscript: 'Augšraksts', subscript: 'Apakšraksts', size: 'Fonta lielums' }, image: { image: 'Attēls', insert: 'Ievietot attēlu', resizeFull: 'Pilns izmērts', resizeHalf: 'Samazināt 50%', resizeQuarter: 'Samazināt 25%', floatLeft: 'Līdzināt pa kreisi', floatRight: 'Līdzināt pa labi', floatNone: 'Nelīdzināt', shapeRounded: 'Forma: apaļām malām', shapeCircle: 'Forma: aplis', shapeThumbnail: 'Forma: rāmītis', shapeNone: 'Forma: orģināla', dragImageHere: 'Ievēlciet attēlu šeit', dropImage: 'Drop image or Text', selectFromFiles: 'Izvēlēties failu', maximumFileSize: 'Maksimālais faila izmērs', maximumFileSizeError: 'Faila izmērs pārāk liels!', url: 'Attēla URL', remove: 'Dzēst attēlu', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Insert Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'Saite', insert: 'Ievietot saiti', unlink: 'Noņemt saiti', edit: 'Rediģēt', textToDisplay: 'Saites saturs', url: 'Koks URL adresas yra susietas?', openInNewWindow: 'Atvērt jaunā logā' }, table: { table: 'Tabula', 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: 'Ievietot līniju' }, style: { style: 'Stils', p: 'Parasts', blockquote: 'Citāts', pre: 'Kods', h1: 'Virsraksts h1', h2: 'Virsraksts h2', h3: 'Virsraksts h3', h4: 'Virsraksts h4', h5: 'Virsraksts h5', h6: 'Virsraksts h6' }, lists: { unordered: 'Nenumurēts saraksts', ordered: 'Numurēts saraksts' }, options: { help: 'Palīdzība', fullscreen: 'Pa visu ekrānu', codeview: 'HTML kods' }, paragraph: { paragraph: 'Paragrāfs', outdent: 'Samazināt atkāpi', indent: 'Palielināt atkāpi', left: 'Līdzināt pa kreisi', center: 'Centrēt', right: 'Līdzināt pa labi', justify: 'Līdzināt gar abām malām' }, color: { recent: 'Nesen izmantotās', more: 'Citas krāsas', background: 'Fona krāsa', foreground: 'Fonta krāsa', transparent: 'Caurspīdīgs', setTransparent: 'Iestatīt caurspīdīgumu', reset: 'Atjaunot', resetToDefault: 'Atjaunot noklusējumu' }, shortcut: { shortcuts: 'Saīsnes', close: 'Aizvērt', textFormatting: 'Teksta formatēšana', action: 'Darbība', paragraphFormatting: 'Paragrāfa formatēšana', documentStyle: 'Dokumenta stils', extraKeys: 'Citas taustiņu kombinācijas' }, help: { insertParagraph: 'Ievietot Paragrāfu', undo: 'Atcelt iepriekšējo darbību', redo: 'Atkārtot atcelto darbību', tab: 'Atkāpe', untab: 'Samazināt atkāpi', bold: 'Pārvērst tekstu treknrakstā', italic: 'Pārvērst tekstu slīprakstā (kursīvā)', underline: 'Pasvītrot tekstu', strikethrough: 'Nosvītrot tekstu', removeFormat: 'Notīrīt stilu no teksta', justifyLeft: 'Līdzīnāt saturu pa kreisi', justifyCenter: 'Centrēt saturu', justifyRight: 'Līdzīnāt saturu pa labi', justifyFull: 'Izlīdzināt saturu gar abām malām', insertUnorderedList: 'Ievietot nenumurētu sarakstu', insertOrderedList: 'Ievietot numurētu sarakstu', outdent: 'Samazināt/noņemt atkāpi paragrāfam', indent: 'Uzlikt atkāpi paragrāfam', formatPara: 'Mainīt bloka tipu uz (p) Paragrāfu', formatH1: 'Mainīt bloka tipu uz virsrakstu H1', formatH2: 'Mainīt bloka tipu uz virsrakstu H2', formatH3: 'Mainīt bloka tipu uz virsrakstu H3', formatH4: 'Mainīt bloka tipu uz virsrakstu H4', formatH5: 'Mainīt bloka tipu uz virsrakstu H5', formatH6: 'Mainīt bloka tipu uz virsrakstu H6', insertHorizontalRule: 'Ievietot horizontālu līniju', 'linkDialog.show': 'Parādīt saites logu' }, history: { undo: 'Atsauks (undo)', redo: 'Atkārtot (redo)' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\d�[���lang/summernote-gl-ES.jsnu�[���(function($) { $.extend($.summernote.lang, { 'gl-ES': { font: { bold: 'Negrita', italic: 'Cursiva', underline: 'Subliñado', clear: 'Quitar estilo de fonte', height: 'Altura de liña', name: 'Fonte', strikethrough: 'Riscado', superscript: 'Superíndice', subscript: 'Subíndice', size: 'Tamaño da fonte' }, image: { image: 'Imaxe', insert: 'Inserir imaxe', resizeFull: 'Redimensionar a tamaño completo', resizeHalf: 'Redimensionar á metade', resizeQuarter: 'Redimensionar a un cuarto', floatLeft: 'Flotar á esquerda', floatRight: 'Flotar á dereita', floatNone: 'Non flotar', shapeRounded: 'Forma: Redondeado', shapeCircle: 'Forma: Círculo', shapeThumbnail: 'Forma: Marco', shapeNone: 'Forma: Ningunha', dragImageHere: 'Arrastrar unha imaxe ou texto aquí', dropImage: 'Solta a imaxe ou texto', selectFromFiles: 'Seleccionar desde os arquivos', maximumFileSize: 'Tamaño máximo do arquivo', maximumFileSizeError: 'Superaches o tamaño máximo do arquivo.', url: 'URL da imaxe', remove: 'Eliminar imaxe', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Ligazón do vídeo', insert: 'Insertar vídeo', url: 'URL do vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion, o Youku)' }, link: { link: 'Ligazón', insert: 'Inserir Ligazón', unlink: 'Quitar Ligazón', edit: 'Editar', textToDisplay: 'Texto para amosar', url: 'Cara a que URL leva a ligazón?', openInNewWindow: 'Abrir nunha nova xanela' }, table: { table: 'Táboa', 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: 'Inserir liña horizontal' }, style: { style: 'Estilo', normal: 'Normal', blockquote: 'Cita', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista desordenada', ordered: 'Lista ordenada' }, options: { help: 'Axuda', fullscreen: 'Pantalla completa', codeview: 'Ver código fonte' }, paragraph: { paragraph: 'Parágrafo', outdent: 'Menos tabulación', indent: 'Máis tabulación', left: 'Aliñar á esquerda', center: 'Aliñar ao centro', right: 'Aliñar á dereita', justify: 'Xustificar' }, color: { recent: 'Última cor', more: 'Máis cores', background: 'Cor de fondo', foreground: 'Cor de fuente', transparent: 'Transparente', setTransparent: 'Establecer transparente', reset: 'Restaurar', resetToDefault: 'Restaurar por defecto' }, shortcut: { shortcuts: 'Atallos de teclado', close: 'Pechar', textFormatting: 'Formato de texto', action: 'Acción', paragraphFormatting: 'Formato de parágrafo', documentStyle: 'Estilo de documento', extraKeys: 'Teclas adicionais' }, help: { 'insertParagraph': 'Inserir parágrafo', 'undo': 'Desfacer última acción', 'redo': 'Refacer última acción', 'tab': 'Tabular', 'untab': 'Eliminar tabulación', 'bold': 'Establecer estilo negrita', 'italic': 'Establecer estilo cursiva', 'underline': 'Establecer estilo subliñado', 'strikethrough': 'Establecer estilo riscado', 'removeFormat': 'Limpar estilo', 'justifyLeft': 'Aliñar á esquerda', 'justifyCenter': 'Aliñar ao centro', 'justifyRight': 'Aliñar á dereita', 'justifyFull': 'Xustificar', 'insertUnorderedList': 'Inserir lista desordenada', 'insertOrderedList': 'Inserir lista ordenada', 'outdent': 'Reducir tabulación do parágrafo', 'indent': 'Aumentar tabulación do parágrafo', 'formatPara': 'Mudar estilo do bloque a parágrafo (etiqueta P)', 'formatH1': 'Mudar estilo do bloque a H1', 'formatH2': 'Mudar estilo do bloque a H2', 'formatH3': 'Mudar estilo do bloque a H3', 'formatH4': 'Mudar estilo do bloque a H4', 'formatH5': 'Mudar estilo do bloque a H5', 'formatH6': 'Mudar estilo do bloque a H6', 'insertHorizontalRule': 'Inserir liña horizontal', 'linkDialog.show': 'Amosar panel ligazóns' }, history: { undo: 'Desfacer', redo: 'Refacer' }, specialChar: { specialChar: 'CARACTERES ESPECIAIS', select: 'Selecciona Caracteres especiais' } } }); })(jQuery); PKf[�\Q~�@@lang/summernote-ru-RU.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ru-RU': { font: { bold: 'Полужирный', italic: 'Курсив', underline: 'Подчёркнутый', clear: 'Убрать стили шрифта', height: 'Высота линии', name: 'Шрифт', strikethrough: 'Зачёркнутый', subscript: 'Нижний индекс', superscript: 'Верхний индекс', size: 'Размер шрифта' }, image: { image: 'Картинка', insert: 'Вставить картинку', resizeFull: 'Восстановить размер', resizeHalf: 'Уменьшить до 50%', resizeQuarter: 'Уменьшить до 25%', floatLeft: 'Расположить слева', floatRight: 'Расположить справа', floatNone: 'Расположение по-умолчанию', shapeRounded: 'Форма: Закругленная', shapeCircle: 'Форма: Круг', shapeThumbnail: 'Форма: Миниатюра', shapeNone: 'Форма: Нет', dragImageHere: 'Перетащите сюда картинку', dropImage: 'Перетащите картинку', selectFromFiles: 'Выбрать из файлов', maximumFileSize: 'Максимальный размер файла', maximumFileSizeError: 'Превышен максимальный размер файла', url: 'URL картинки', remove: 'Удалить картинку', original: 'Оригинал' }, video: { video: 'Видео', videoLink: 'Ссылка на видео', insert: 'Вставить видео', url: 'URL видео', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion или Youku)' }, link: { link: 'Ссылка', insert: 'Вставить ссылку', unlink: 'Убрать ссылку', edit: 'Редактировать', textToDisplay: 'Отображаемый текст', url: 'URL для перехода', openInNewWindow: 'Открывать в новом окне' }, table: { table: 'Таблица', addRowAbove: 'Добавить строку выше', addRowBelow: 'Добавить строку ниже', addColLeft: 'Добавить столбец слева', addColRight: 'Добавить столбец справа', delRow: 'Удалить строку', delCol: 'Удалить столбец', delTable: 'Удалить таблицу' }, hr: { insert: 'Вставить горизонтальную линию' }, style: { style: 'Стиль', p: 'Нормальный', blockquote: 'Цитата', pre: 'Код', h1: 'Заголовок 1', h2: 'Заголовок 2', h3: 'Заголовок 3', h4: 'Заголовок 4', h5: 'Заголовок 5', h6: 'Заголовок 6' }, lists: { unordered: 'Маркированный список', ordered: 'Нумерованный список' }, options: { help: 'Помощь', fullscreen: 'На весь экран', codeview: 'Исходный код' }, paragraph: { paragraph: 'Параграф', outdent: 'Уменьшить отступ', indent: 'Увеличить отступ', left: 'Выровнять по левому краю', center: 'Выровнять по центру', right: 'Выровнять по правому краю', justify: 'Растянуть по ширине' }, color: { recent: 'Последний цвет', more: 'Еще цвета', background: 'Цвет фона', foreground: 'Цвет шрифта', transparent: 'Прозрачный', setTransparent: 'Сделать прозрачным', reset: 'Сброс', resetToDefault: 'Восстановить умолчания' }, shortcut: { shortcuts: 'Сочетания клавиш', close: 'Закрыть', textFormatting: 'Форматирование текста', action: 'Действие', paragraphFormatting: 'Форматирование параграфа', documentStyle: 'Стиль документа', extraKeys: 'Дополнительные комбинации' }, help: { 'insertParagraph': 'Новый параграф', 'undo': 'Отменить последнюю команду', 'redo': 'Повторить последнюю команду', 'tab': 'Tab', 'untab': 'Untab', 'bold': 'Установить стиль "Жирный"', 'italic': 'Установить стиль "Наклонный"', 'underline': 'Установить стиль "Подчеркнутый"', 'strikethrough': 'Установить стиль "Зачеркнутый"', 'removeFormat': 'Сборсить стили', 'justifyLeft': 'Выровнять по левому краю', 'justifyCenter': 'Выровнять по центру', 'justifyRight': 'Выровнять по правому краю', 'justifyFull': 'Растянуть на всю ширину', 'insertUnorderedList': 'Включить/отключить маркированный список', 'insertOrderedList': 'Включить/отключить нумерованный список', 'outdent': 'Убрать отступ в текущем параграфе', 'indent': 'Вставить отступ в текущем параграфе', 'formatPara': 'Форматировать текущий блок как параграф (тег P)', 'formatH1': 'Форматировать текущий блок как H1', 'formatH2': 'Форматировать текущий блок как H2', 'formatH3': 'Форматировать текущий блок как H3', 'formatH4': 'Форматировать текущий блок как H4', 'formatH5': 'Форматировать текущий блок как H5', 'formatH6': 'Форматировать текущий блок как H6', 'insertHorizontalRule': 'Вставить горизонтальную черту', 'linkDialog.show': 'Показать диалог "Ссылка"' }, history: { undo: 'Отменить', redo: 'Повтор' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\���DDlang/summernote-pt-PT.jsnu�[���(function($) { $.extend($.summernote.lang, { 'pt-PT': { font: { bold: 'Negrito', italic: 'Itálico', underline: 'Sublinhado', clear: 'Remover estilo da fonte', height: 'Altura da linha', name: 'Fonte', strikethrough: 'Riscado', subscript: 'Subscript', superscript: 'Superscript', size: 'Tamanho da fonte' }, image: { image: 'Imagem', insert: 'Inserir imagem', resizeFull: 'Redimensionar Completo', resizeHalf: 'Redimensionar Metade', resizeQuarter: 'Redimensionar Um Quarto', floatLeft: 'Float Esquerda', floatRight: 'Float Direita', floatNone: 'Sem Float', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Arraste uma imagem para aqui', dropImage: 'Drop image or Text', selectFromFiles: 'Selecione a partir dos arquivos', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Endereço da imagem', remove: 'Remove Image', original: 'Original' }, video: { video: 'Vídeo', videoLink: 'Link para vídeo', insert: 'Inserir vídeo', url: 'URL do vídeo?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'Link', insert: 'Inserir ligação', unlink: 'Remover ligação', edit: 'Editar', textToDisplay: 'Texto para exibir', url: 'Que endereço esta licação leva?', openInNewWindow: 'Abrir numa nova janela' }, table: { table: 'Tabela', 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: 'Inserir linha horizontal' }, style: { style: 'Estilo', p: 'p', blockquote: 'Citação', pre: 'Código', h1: 'Título 1', h2: 'Título 2', h3: 'Título 3', h4: 'Título 4', h5: 'Título 5', h6: 'Título 6' }, lists: { unordered: 'Lista com marcadores', ordered: 'Lista numerada' }, options: { help: 'Ajuda', fullscreen: 'Janela Completa', codeview: 'Ver código-fonte' }, paragraph: { paragraph: 'Parágrafo', outdent: 'Menor tabulação', indent: 'Maior tabulação', left: 'Alinhar à esquerda', center: 'Alinhar ao centro', right: 'Alinha à direita', justify: 'Justificado' }, color: { recent: 'Cor recente', more: 'Mais cores', background: 'Fundo', foreground: 'Fonte', transparent: 'Transparente', setTransparent: 'Fundo transparente', reset: 'Restaurar', resetToDefault: 'Restaurar padrão' }, shortcut: { shortcuts: 'Atalhos do teclado', close: 'Fechar', textFormatting: 'Formatação de texto', action: 'Ação', paragraphFormatting: 'Formatação de parágrafo', documentStyle: 'Estilo de documento' }, 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: 'Desfazer', redo: 'Refazer' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\y�[lang/summernote-ar-AR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'ar-AR': { font: { bold: 'عريض', italic: 'مائل', underline: 'تحته خط', clear: 'مسح التنسيق', height: 'إرتفاع السطر', name: 'الخط', strikethrough: 'فى وسطه خط', subscript: 'مخطوطة', superscript: 'حرف فوقي', size: 'الحجم' }, image: { image: 'صورة', insert: 'إضافة صورة', resizeFull: 'الحجم بالكامل', resizeHalf: 'تصغير للنصف', resizeQuarter: 'تصغير للربع', floatLeft: 'تطيير لليسار', floatRight: 'تطيير لليمين', floatNone: 'ثابته', shapeRounded: 'الشكل: تقريب', shapeCircle: 'الشكل: دائرة', shapeThumbnail: 'الشكل: صورة مصغرة', shapeNone: 'الشكل: لا شيء', dragImageHere: 'إدرج الصورة هنا', dropImage: 'إسقاط صورة أو نص', selectFromFiles: 'حدد ملف', maximumFileSize: 'الحد الأقصى لحجم الملف', maximumFileSizeError: 'تم تجاوز الحد الأقصى لحجم الملف', url: 'رابط الصورة', remove: 'حذف الصورة', original: 'Original' }, video: { video: 'فيديو', videoLink: 'رابط الفيديو', insert: 'إدراج الفيديو', url: 'رابط الفيديو', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion ou Youku)' }, link: { link: 'رابط رابط', insert: 'إدراج', unlink: 'حذف الرابط', edit: 'تعديل', textToDisplay: 'النص', url: 'مسار الرابط', openInNewWindow: 'فتح في نافذة جديدة' }, 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: 'إدراج خط أفقي' }, style: { style: 'تنسيق', p: 'عادي', blockquote: 'إقتباس', pre: 'شفيرة', h1: 'عنوان رئيسي 1', h2: 'عنوان رئيسي 2', h3: 'عنوان رئيسي 3', h4: 'عنوان رئيسي 4', h5: 'عنوان رئيسي 5', h6: 'عنوان رئيسي 6' }, lists: { unordered: 'قائمة مُنقطة', ordered: 'قائمة مُرقمة' }, options: { help: 'مساعدة', fullscreen: 'حجم الشاشة بالكامل', codeview: 'شفيرة المصدر' }, paragraph: { paragraph: 'فقرة', outdent: 'محاذاة للخارج', indent: 'محاذاة للداخل', left: 'محاذاة لليسار', center: 'توسيط', right: 'محاذاة لليمين', justify: 'ملئ السطر' }, color: { recent: 'تم إستخدامه', more: 'المزيد', background: 'لون الخلفية', foreground: 'لون النص', transparent: 'شفاف', setTransparent: 'بدون خلفية', reset: 'إعادة الضبط', resetToDefault: 'إعادة الضبط' }, shortcut: { shortcuts: 'إختصارات', close: 'غلق', textFormatting: 'تنسيق النص', action: 'Action', paragraphFormatting: 'تنسيق الفقرة', documentStyle: 'تنسيق المستند', 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: 'تراجع', redo: 'إعادة' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\��d�KKlang/summernote-fa-IR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'fa-IR': { font: { bold: 'درشت', italic: 'خمیده', underline: 'میان خط', clear: 'پاک کردن فرمت فونت', height: 'فاصله ی خطی', name: 'اسم فونت', strikethrough: 'Strike', subscript: 'Subscript', superscript: 'Superscript', size: 'اندازه ی فونت' }, image: { image: 'تصویر', insert: 'وارد کردن تصویر', resizeFull: 'تغییر به اندازه ی کامل', resizeHalf: 'تغییر به اندازه نصف', resizeQuarter: 'تغییر به اندازه یک چهارم', floatLeft: 'چسباندن به چپ', floatRight: 'چسباندن به راست', floatNone: 'بدون چسبندگی', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'یک تصویر را اینجا بکشید', dropImage: 'Drop image or Text', selectFromFiles: 'فایل ها را انتخاب کنید', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'آدرس تصویر', remove: 'حذف تصویر', original: 'Original' }, video: { video: 'ویدیو', videoLink: 'لینک ویدیو', insert: 'افزودن ویدیو', url: 'آدرس ویدیو ؟', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion یا Youku)' }, link: { link: 'لینک', insert: 'اضافه کردن لینک', unlink: 'حذف لینک', edit: 'ویرایش', textToDisplay: 'متن جهت نمایش', url: 'این لینک به چه آدرسی باید برود ؟', openInNewWindow: 'در یک پنجره ی جدید باز شود' }, 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: 'افزودن خط افقی' }, style: { style: 'استیل', p: 'نرمال', blockquote: 'نقل قول', pre: 'کد', h1: 'سرتیتر 1', h2: 'سرتیتر 2', h3: 'سرتیتر 3', h4: 'سرتیتر 4', h5: 'سرتیتر 5', h6: 'سرتیتر 6' }, lists: { unordered: 'لیست غیر ترتیبی', ordered: 'لیست ترتیبی' }, options: { help: 'راهنما', fullscreen: 'نمایش تمام صفحه', codeview: 'مشاهده ی کد' }, paragraph: { paragraph: 'پاراگراف', outdent: 'کاهش تو رفتگی', indent: 'افزایش تو رفتگی', left: 'چپ چین', center: 'میان چین', right: 'راست چین', justify: 'بلوک چین' }, color: { recent: 'رنگ اخیرا استفاده شده', more: 'رنگ بیشتر', background: 'رنگ پس زمینه', foreground: 'رنگ متن', transparent: 'بی رنگ', setTransparent: 'تنظیم حالت بی رنگ', reset: 'بازنشاندن', resetToDefault: 'حالت پیش فرض' }, shortcut: { shortcuts: 'دکمه های میان بر', close: 'بستن', textFormatting: 'فرمت متن', action: 'عملیات', paragraphFormatting: 'فرمت پاراگراف', documentStyle: 'استیل سند', 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: 'واچیدن', redo: 'بازچیدن' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�9pRsslang/summernote-tr-TR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'tr-TR': { font: { bold: 'Kalın', italic: 'İtalik', underline: 'Altı çizili', clear: 'Temizle', height: 'Satır yüksekliği', name: 'Yazı Tipi', strikethrough: 'Üstü çizili', subscript: 'Alt Simge', superscript: 'Üst Simge', size: 'Yazı tipi boyutu' }, image: { image: 'Resim', insert: 'Resim ekle', resizeFull: 'Orjinal boyut', resizeHalf: '1/2 boyut', resizeQuarter: '1/4 boyut', floatLeft: 'Sola hizala', floatRight: 'Sağa hizala', floatNone: 'Hizalamayı kaldır', shapeRounded: 'Şekil: Yuvarlatılmış Köşe', shapeCircle: 'Şekil: Daire', shapeThumbnail: 'Şekil: K.Resim', shapeNone: 'Şekil: Yok', dragImageHere: 'Buraya sürükleyin', dropImage: 'Resim veya metni bırakın', selectFromFiles: 'Dosya seçin', maximumFileSize: 'Maksimum dosya boyutu', maximumFileSizeError: 'Maksimum dosya boyutu aşıldı.', url: 'Resim bağlantısı', remove: 'Resimi Kaldır', original: 'Original' }, video: { video: 'Video', videoLink: 'Video bağlantısı', insert: 'Video ekle', url: 'Video bağlantısı?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion veya Youku)' }, link: { link: 'Bağlantı', insert: 'Bağlantı ekle', unlink: 'Bağlantıyı kaldır', edit: 'Bağlantıyı düzenle', textToDisplay: 'Görüntülemek için', url: 'Bağlantı adresi?', openInNewWindow: 'Yeni pencerede aç' }, table: { table: 'Tablo', addRowAbove: 'Yukarı satır ekle', addRowBelow: 'Aşağı satır ekle', addColLeft: 'Sola sütun ekle', addColRight: 'Sağa sütun ekle', delRow: 'Satırı sil', delCol: 'Sütunu sil', delTable: 'Tabloyu sil' }, hr: { insert: 'Yatay çizgi ekle' }, style: { style: 'Biçim', p: 'p', blockquote: 'Alıntı', pre: 'Önbiçimli', h1: 'Başlık 1', h2: 'Başlık 2', h3: 'Başlık 3', h4: 'Başlık 4', h5: 'Başlık 5', h6: 'Başlık 6' }, lists: { unordered: 'Madde işaretli liste', ordered: 'Numaralı liste' }, options: { help: 'Yardım', fullscreen: 'Tam ekran', codeview: 'HTML Kodu' }, paragraph: { paragraph: 'Paragraf', outdent: 'Girintiyi artır', indent: 'Girintiyi azalt', left: 'Sola hizala', center: 'Ortaya hizala', right: 'Sağa hizala', justify: 'Yasla' }, color: { recent: 'Son renk', more: 'Daha fazla renk', background: 'Arka plan rengi', foreground: 'Yazı rengi', transparent: 'Seffaflık', setTransparent: 'Şeffaflığı ayarla', reset: 'Sıfırla', resetToDefault: 'Varsayılanlara sıfırla' }, shortcut: { shortcuts: 'Kısayollar', close: 'Kapat', textFormatting: 'Yazı biçimlendirme', action: 'Eylem', paragraphFormatting: 'Paragraf biçimlendirme', documentStyle: 'Biçim', extraKeys: 'İlave anahtarlar' }, help: { 'insertParagraph': 'Paragraf ekler', 'undo': 'Son komudu geri alır', 'redo': 'Son komudu yineler', 'tab': 'Girintiyi artırır', 'untab': 'Girintiyi azaltır', 'bold': 'Kalın yazma stilini ayarlar', 'italic': 'İtalik yazma stilini ayarlar', 'underline': 'Altı çizgili yazma stilini ayarlar', 'strikethrough': 'Üstü çizgili yazma stilini ayarlar', 'removeFormat': 'Biçimlendirmeyi temizler', 'justifyLeft': 'Yazıyı sola hizalar', 'justifyCenter': 'Yazıyı ortalar', 'justifyRight': 'Yazıyı sağa hizalar', 'justifyFull': 'Yazıyı her iki tarafa yazlar', 'insertUnorderedList': 'Madde işaretli liste ekler', 'insertOrderedList': 'Numaralı liste ekler', 'outdent': 'Aktif paragrafın girintisini azaltır', 'indent': 'Aktif paragrafın girintisini artırır', 'formatPara': 'Aktif bloğun biçimini paragraf (p) olarak değiştirir', 'formatH1': 'Aktif bloğun biçimini başlık 1 (h1) olarak değiştirir', 'formatH2': 'Aktif bloğun biçimini başlık 2 (h2) olarak değiştirir', 'formatH3': 'Aktif bloğun biçimini başlık 3 (h3) olarak değiştirir', 'formatH4': 'Aktif bloğun biçimini başlık 4 (h4) olarak değiştirir', 'formatH5': 'Aktif bloğun biçimini başlık 5 (h5) olarak değiştirir', 'formatH6': 'Aktif bloğun biçimini başlık 6 (h6) olarak değiştirir', 'insertHorizontalRule': 'Yatay çizgi ekler', 'linkDialog.show': 'Bağlantı ayar kutusunu gösterir' }, history: { undo: 'Geri al', redo: 'Yinele' }, specialChar: { specialChar: 'ÖZEL KARAKTERLER', select: 'Özel Karakterleri seçin' } } }); })(jQuery); PKf[�\߂�XXlang/summernote-el-GR.jsnu�[���(function($) { $.extend($.summernote.lang, { 'el-GR': { font: { bold: 'Έντονα', italic: 'Πλάγια', underline: 'Υπογραμμισμένα', clear: 'Καθαρισμός', height: 'Ύψος', name: 'Γραμματοσειρά', strikethrough: 'Διεγραμμένα', subscript: 'Δείκτης', superscript: 'Εκθέτης', size: 'Μέγεθος' }, image: { image: 'εικόνα', insert: 'Εισαγωγή', resizeFull: 'Πλήρες μέγεθος', resizeHalf: 'Μισό μέγεθος', resizeQuarter: '1/4 μέγεθος', floatLeft: 'Μετατόπιση αριστερά', floatRight: 'Μετατόπιση δεξιά', floatNone: 'Χωρίς μετατόπιση', shapeRounded: 'Σχήμα: Στρογγυλεμένο', shapeCircle: 'Σχήμα: Κύκλος', shapeThumbnail: 'Σχήμα: Thumbnail', shapeNone: 'Σχήμα: Κανένα', dragImageHere: 'Σύρτε την εικόνα εδώ', dropImage: 'Αφήστε την εικόνα', selectFromFiles: 'Επιλογή από αρχεία', maximumFileSize: 'Μέγιστο μέγεθος αρχείου', maximumFileSizeError: 'Το μέγεθος είναι μεγαλύτερο από το μέγιστο επιτρεπτό.', url: 'URL', remove: 'Αφαίρεση', original: 'Original' }, link: { link: 'Σύνδεσμος', insert: 'Εισαγωγή συνδέσμου', unlink: 'Αφαίρεση συνδέσμου', edit: 'Επεξεργασία συνδέσμου', textToDisplay: 'Κείμενο συνδέσμου', url: 'URL', openInNewWindow: 'Άνοιγμα σε νέο παράθυρο' }, video: { video: 'Βίντεο', videoLink: 'Σύνδεσμος Βίντεο', insert: 'Εισαγωγή', url: 'URL', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, 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: 'Εισαγωγή οριζόντιας γραμμής' }, style: { style: 'Στυλ', normal: 'Κανονικό', blockquote: 'Παράθεση', pre: 'Ως έχει', h1: 'Κεφαλίδα 1', h2: 'συνδέσμου 2', h3: 'συνδέσμου 3', h4: 'συνδέσμου 4', h5: 'συνδέσμου 5', h6: 'συνδέσμου 6' }, lists: { unordered: 'Αταξινόμητη λίστα', ordered: 'Ταξινομημένη λίστα' }, options: { help: 'Βοήθεια', fullscreen: 'Πλήρης οθόνη', codeview: 'Προβολή HTML' }, paragraph: { paragraph: 'Παράγραφος', outdent: 'Μείωση εσοχής', indent: 'Άυξηση εσοχής', left: 'Αριστερή στοίχιση', center: 'Στοίχιση στο κέντρο', right: 'Δεξιά στοίχιση', justify: 'Πλήρης στοίχιση' }, color: { recent: 'Πρόσφατη επιλογή', more: 'Περισσότερα', background: 'Υπόβαθρο', foreground: 'Μπροστά', transparent: 'Διαφανές', setTransparent: 'Επιλογή διαφάνειας', reset: 'Επαναφορά', resetToDefault: 'Επαναφορά στις προκαθορισμένες τιμές' }, shortcut: { shortcuts: 'Συντομεύσεις', close: 'Κλείσιμο', textFormatting: 'Διαμόρφωση κειμένου', action: 'Ενέργεια', paragraphFormatting: 'Διαμόρφωση παραγράφου', documentStyle: 'Στυλ κειμένου', extraKeys: 'Επιπλέον συντομεύσεις' }, help: { 'insertParagraph': 'Εισαγωγή παραγράφου', 'undo': 'Αναιρεί την προηγούμενη εντολή', 'redo': 'Επαναλαμβάνει την προηγούμενη εντολή', 'tab': 'Εσοχή', 'untab': 'Αναίρεση εσοχής', 'bold': 'Ορισμός έντονου στυλ', 'italic': 'Ορισμός πλάγιου στυλ', 'underline': 'Ορισμός υπογεγραμμένου στυλ', 'strikethrough': 'Ορισμός διεγραμμένου στυλ', 'removeFormat': 'Αφαίρεση στυλ', 'justifyLeft': 'Ορισμός αριστερής στοίχισης', 'justifyCenter': 'Ορισμός κεντρικής στοίχισης', 'justifyRight': 'Ορισμός δεξιάς στοίχισης', 'justifyFull': 'Ορισμός πλήρους στοίχισης', 'insertUnorderedList': 'Ορισμός μη-ταξινομημένης λίστας', 'insertOrderedList': 'Ορισμός ταξινομημένης λίστας', 'outdent': 'Προεξοχή παραγράφου', 'indent': 'Εσοχή παραγράφου', 'formatPara': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε παράγραφο (P tag)', 'formatH1': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H1', 'formatH2': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H2', 'formatH3': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H3', 'formatH4': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H4', 'formatH5': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H5', 'formatH6': 'Αλλαγή της μορφής του τρέχοντος μπλοκ σε H6', 'insertHorizontalRule': 'Εισαγωγή οριζόντιας γραμμής', 'linkDialog.show': 'Εμφάνιση διαλόγου συνδέσμου' }, history: { undo: 'Αναίρεση', redo: 'Επαναληψη' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Επιλέξτε ειδικούς χαρακτήρες' } } }); })(jQuery); PKf[�\{ �lang/summernote-sv-SE.jsnu�[���(function($) { $.extend($.summernote.lang, { 'sv-SE': { font: { bold: 'Fet', italic: 'Kursiv', underline: 'Understruken', clear: 'Radera formatering', height: 'Radavstånd', name: 'Teckensnitt', strikethrough: 'Genomstruken', subscript: 'Subscript', superscript: 'Superscript', size: 'Teckenstorlek' }, image: { image: 'Bild', insert: 'Infoga bild', resizeFull: 'Full storlek', resizeHalf: 'Halv storlek', resizeQuarter: 'En fjärdedel i storlek', floatLeft: 'Vänsterjusterad', floatRight: 'Högerjusterad', floatNone: 'Ingen justering', shapeRounded: 'Shape: Rounded', shapeCircle: 'Shape: Circle', shapeThumbnail: 'Shape: Thumbnail', shapeNone: 'Shape: None', dragImageHere: 'Dra en bild hit', dropImage: 'Drop image or Text', selectFromFiles: 'Välj från filer', maximumFileSize: 'Maximum file size', maximumFileSizeError: 'Maximum file size exceeded.', url: 'Länk till bild', remove: 'Ta bort bild', original: 'Original' }, video: { video: 'Filmklipp', videoLink: 'Länk till filmklipp', insert: 'Infoga filmklipp', url: 'Länk till filmklipp', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion eller Youku)' }, link: { link: 'Länk', insert: 'Infoga länk', unlink: 'Ta bort länk', edit: 'Redigera', textToDisplay: 'Visningstext', url: 'Till vilken URL ska denna länk peka?', openInNewWindow: 'Öppna i ett nytt fönster' }, table: { table: 'Tabell', 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: 'Infoga horisontell linje' }, style: { style: 'Stil', p: 'p', blockquote: 'Citat', pre: 'Kod', h1: 'Rubrik 1', h2: 'Rubrik 2', h3: 'Rubrik 3', h4: 'Rubrik 4', h5: 'Rubrik 5', h6: 'Rubrik 6' }, lists: { unordered: 'Punktlista', ordered: 'Numrerad lista' }, options: { help: 'Hjälp', fullscreen: 'Fullskärm', codeview: 'HTML-visning' }, paragraph: { paragraph: 'Justera text', outdent: 'Minska indrag', indent: 'Öka indrag', left: 'Vänsterjusterad', center: 'Centrerad', right: 'Högerjusterad', justify: 'Justera text' }, color: { recent: 'Senast använda färg', more: 'Fler färger', background: 'Bakgrundsfärg', foreground: 'Teckenfärg', transparent: 'Genomskinlig', setTransparent: 'Gör genomskinlig', reset: 'Nollställ', resetToDefault: 'Återställ till standard' }, shortcut: { shortcuts: 'Kortkommandon', close: 'Stäng', textFormatting: 'Textformatering', action: 'Funktion', paragraphFormatting: 'Avsnittsformatering', documentStyle: 'Dokumentstil', 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: 'Ångra', redo: 'Gör om' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\m�v'<<lang/summernote-lt-LT.jsnu�[���(function($) { $.extend($.summernote.lang, { 'lt-LT': { font: { bold: 'Paryškintas', italic: 'Kursyvas', underline: 'Pabrėžtas', clear: 'Be formatavimo', height: 'Eilutės aukštis', name: 'Šrifto pavadinimas', strikethrough: 'Perbrauktas', superscript: 'Viršutinis', subscript: 'Indeksas', size: 'Šrifto dydis' }, image: { image: 'Paveikslėlis', insert: 'Įterpti paveikslėlį', resizeFull: 'Pilnas dydis', resizeHalf: 'Sumažinti dydį 50%', resizeQuarter: 'Sumažinti dydį 25%', floatLeft: 'Kairinis lygiavimas', floatRight: 'Dešininis lygiavimas', floatNone: 'Jokio lygiavimo', shapeRounded: 'Forma: apvalūs kraštai', shapeCircle: 'Forma: apskritimas', shapeThumbnail: 'Forma: miniatiūra', shapeNone: 'Forma: jokia', dragImageHere: 'Vilkite paveikslėlį čia', dropImage: 'Drop image or Text', selectFromFiles: 'Pasirinkite failą', maximumFileSize: 'Maskimalus failo dydis', maximumFileSizeError: 'Maskimalus failo dydis viršytas!', url: 'Paveikslėlio URL adresas', remove: 'Ištrinti paveikslėlį', original: 'Original' }, video: { video: 'Video', videoLink: 'Video Link', insert: 'Insert Video', url: 'Video URL?', providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)' }, link: { link: 'Nuoroda', insert: 'Įterpti nuorodą', unlink: 'Pašalinti nuorodą', edit: 'Redaguoti', textToDisplay: 'Rodomas tekstas', url: 'Koks URL adresas yra susietas?', openInNewWindow: 'Atidaryti naujame lange' }, table: { table: 'Lentelė', 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: 'Įterpti horizontalią liniją' }, style: { style: 'Stilius', p: 'pus', blockquote: 'Citata', pre: 'Kodas', h1: 'Antraštė 1', h2: 'Antraštė 2', h3: 'Antraštė 3', h4: 'Antraštė 4', h5: 'Antraštė 5', h6: 'Antraštė 6' }, lists: { unordered: 'Suženklintasis sąrašas', ordered: 'Sunumeruotas sąrašas' }, options: { help: 'Pagalba', fullscreen: 'Viso ekrano režimas', codeview: 'HTML kodo peržiūra' }, paragraph: { paragraph: 'Pastraipa', outdent: 'Sumažinti įtrauką', indent: 'Padidinti įtrauką', left: 'Kairinė lygiuotė', center: 'Centrinė lygiuotė', right: 'Dešininė lygiuotė', justify: 'Abipusis išlyginimas' }, color: { recent: 'Paskutinė naudota spalva', more: 'Daugiau spalvų', background: 'Fono spalva', foreground: 'Šrifto spalva', transparent: 'Permatoma', setTransparent: 'Nustatyti skaidrumo intensyvumą', reset: 'Atkurti', resetToDefault: 'Atstatyti numatytąją spalvą' }, shortcut: { shortcuts: 'Spartieji klavišai', close: 'Uždaryti', textFormatting: 'Teksto formatavimas', action: 'Veiksmas', paragraphFormatting: 'Pastraipos formatavimas', documentStyle: 'Dokumento stilius', extraKeys: 'Papildomi klavišų deriniai' }, 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: 'Anuliuoti veiksmą', redo: 'Perdaryti veiksmą' }, specialChar: { specialChar: 'SPECIAL CHARACTERS', select: 'Select Special characters' } } }); })(jQuery); PKf[�\�Z�**2plugin/specialchars/summernote-ext-specialchars.jsnu�[���(function(factory) { /* global define */ if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery'], factory); } else if (typeof module === 'object' && module.exports) { // Node/CommonJS module.exports = factory(require('jquery')); } else { // Browser globals factory(window.jQuery); } }(function($) { $.extend($.summernote.plugins, { 'specialchars': function(context) { var self = this; var ui = $.summernote.ui; var $editor = context.layoutInfo.editor; var options = context.options; var lang = options.langInfo; var KEY = { UP: 38, DOWN: 40, LEFT: 37, RIGHT: 39, ENTER: 13 }; var COLUMN_LENGTH = 15; var COLUMN_WIDTH = 35; var currentColumn = 0; var currentRow = 0; var totalColumn = 0; var totalRow = 0; // special characters data set var specialCharDataSet = [ '"', '&', '<', '>', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬', '®', '¯', '°', '±', '²', '³', '´', 'µ', '¶', '·', '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', '×', '÷', 'ƒ', 'ˆ', '˜', '–', '—', '‘', '’', '‚', '“', '”', '„', '†', '‡', '•', '…', '‰', '′', '″', '‹', '›', '‾', '⁄', '€', 'ℑ', '℘', 'ℜ', '™', 'ℵ', '←', '↑', '→', '↓', '↔', '↵', '⇐', '⇑', '⇒', '⇓', '⇔', '∀', '∂', '∃', '∅', '∇', '∈', '∉', '∋', '∏', '∑', '−', '∗', '√', '∝', '∞', '∠', '∧', '∨', '∩', '∪', '∫', '∴', '∼', '≅', '≈', '≠', '≡', '≤', '≥', '⊂', '⊃', '⊄', '⊆', '⊇', '⊕', '⊗', '⊥', '⋅', '⌈', '⌉', '⌊', '⌋', '◊', '♠', '♣', '♥', '♦' ]; context.memo('button.specialchars', function() { return ui.button({ contents: '<i class="fa fa-font fa-flip-vertical">', tooltip: lang.specialChar.specialChar, click: function() { self.show(); } }).render(); }); /** * Make Special Characters Table * * @member plugin.specialChar * @private * @return {jQuery} */ this.makeSpecialCharSetTable = function() { var $table = $('<table/>'); $.each(specialCharDataSet, function(idx, text) { var $td = $('<td/>').addClass('note-specialchar-node'); var $tr = (idx % COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last(); var $button = ui.button({ callback: function($node) { $node.html(text); $node.attr('title', text); $node.attr('data-value', encodeURIComponent(text)); $node.css({ width: COLUMN_WIDTH, 'margin-right': '2px', 'margin-bottom': '2px' }); } }).render(); $td.append($button); $tr.append($td); if (idx % COLUMN_LENGTH === 0) { $table.append($tr); } }); totalRow = $table.find('tr').length; totalColumn = COLUMN_LENGTH; return $table; }; this.initialize = function() { var $container = options.dialogsInBody ? $(document.body) : $editor; var body = '<div class="form-group row-fluid">' + this.makeSpecialCharSetTable()[0].outerHTML + '</div>'; this.$dialog = ui.dialog({ title: lang.specialChar.select, body: body }).render().appendTo($container); }; this.show = function() { var text = context.invoke('editor.getSelectedText'); context.invoke('editor.saveRange'); this.showSpecialCharDialog(text).then(function(selectChar) { context.invoke('editor.restoreRange'); // build node var $node = $('<span></span>').html(selectChar)[0]; if ($node) { // insert video node context.invoke('editor.insertNode', $node); } }).fail(function() { context.invoke('editor.restoreRange'); }); }; /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ this.showSpecialCharDialog = function(text) { return $.Deferred(function(deferred) { var $specialCharDialog = self.$dialog; var $specialCharNode = $specialCharDialog.find('.note-specialchar-node'); var $selectedNode = null; var ARROW_KEYS = [KEY.UP, KEY.DOWN, KEY.LEFT, KEY.RIGHT]; var ENTER_KEY = KEY.ENTER; function addActiveClass($target) { if (!$target) { return; } $target.find('button').addClass('active'); $selectedNode = $target; } function removeActiveClass($target) { $target.find('button').removeClass('active'); $selectedNode = null; } // find next node function findNextNode(row, column) { var findNode = null; $.each($specialCharNode, function(idx, $node) { var findRow = Math.ceil((idx + 1) / COLUMN_LENGTH); var findColumn = ((idx + 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx + 1) % COLUMN_LENGTH; if (findRow === row && findColumn === column) { findNode = $node; return false; } }); return $(findNode); } function arrowKeyHandler(keyCode) { // left, right, up, down key var $nextNode; var lastRowColumnLength = $specialCharNode.length % totalColumn; if (KEY.LEFT === keyCode) { if (currentColumn > 1) { currentColumn = currentColumn - 1; } else if (currentRow === 1 && currentColumn === 1) { currentColumn = lastRowColumnLength; currentRow = totalRow; } else { currentColumn = totalColumn; currentRow = currentRow - 1; } } else if (KEY.RIGHT === keyCode) { if (currentRow === totalRow && lastRowColumnLength === currentColumn) { currentColumn = 1; currentRow = 1; } else if (currentColumn < totalColumn) { currentColumn = currentColumn + 1; } else { currentColumn = 1; currentRow = currentRow + 1; } } else if (KEY.UP === keyCode) { if (currentRow === 1 && lastRowColumnLength < currentColumn) { currentRow = totalRow - 1; } else { currentRow = currentRow - 1; } } else if (KEY.DOWN === keyCode) { currentRow = currentRow + 1; } if (currentRow === totalRow && currentColumn > lastRowColumnLength) { currentRow = 1; } else if (currentRow > totalRow) { currentRow = 1; } else if (currentRow < 1) { currentRow = totalRow; } $nextNode = findNextNode(currentRow, currentColumn); if ($nextNode) { removeActiveClass($selectedNode); addActiveClass($nextNode); } } function enterKeyHandler() { if (!$selectedNode) { return; } deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value'))); $specialCharDialog.modal('hide'); } function keyDownEventHandler(event) { event.preventDefault(); var keyCode = event.keyCode; if (keyCode === undefined || keyCode === null) { return; } // check arrowKeys match if (ARROW_KEYS.indexOf(keyCode) > -1) { if ($selectedNode === null) { addActiveClass($specialCharNode.eq(0)); currentColumn = 1; currentRow = 1; return; } arrowKeyHandler(keyCode); } else if (keyCode === ENTER_KEY) { enterKeyHandler(); } return false; } // remove class removeActiveClass($specialCharNode); // find selected node if (text) { for (var i = 0; i < $specialCharNode.length; i++) { var $checkNode = $($specialCharNode[i]); if ($checkNode.text() === text) { addActiveClass($checkNode); currentRow = Math.ceil((i + 1) / COLUMN_LENGTH); currentColumn = (i + 1) % COLUMN_LENGTH; } } } ui.onDialogShown(self.$dialog, function() { $(document).on('keydown', keyDownEventHandler); self.$dialog.find('button').tooltip(); $specialCharNode.on('click', function(event) { event.preventDefault(); deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value'))); ui.hideDialog(self.$dialog); }); }); ui.onDialogHidden(self.$dialog, function() { $specialCharNode.off('click'); self.$dialog.find('button').tooltip('destroy'); $(document).off('keydown', keyDownEventHandler); if (deferred.state() === 'pending') { deferred.reject(); } }); ui.showDialog(self.$dialog); }); }; } }); })); PKf[�\x�#-plugin/databasic/summernote-ext-databasic.cssnu�[���.ext-databasic { position: relative; display: block; min-height: 50px; background-color: cyan; text-align: center; padding: 20px; border: 1px solid white; border-radius: 10px; } .ext-databasic p { color: white; font-size: 1.2em; margin: 0; } PKf[�\���M!M!,plugin/databasic/summernote-ext-databasic.jsnu�[���(function(factory) { /* global define */ if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery'], factory); } else if (typeof module === 'object' && module.exports) { // Node/CommonJS module.exports = factory(require('jquery')); } else { // Browser globals factory(window.jQuery); } }(function($) { // pull in some summernote core functions var ui = $.summernote.ui; var dom = $.summernote.dom; // define the popover plugin var DataBasicPlugin = function(context) { var self = this; var options = context.options; var lang = options.langInfo; self.icon = '<i class="fa fa-object-group"/>'; // add context menu button for dialog context.memo('button.databasic', function() { return ui.button({ contents: self.icon, tooltip: lang.databasic.insert, click: context.createInvokeHandler('databasic.showDialog') }).render(); }); // add popover edit button context.memo('button.databasicDialog', function() { return ui.button({ contents: self.icon, tooltip: lang.databasic.edit, click: context.createInvokeHandler('databasic.showDialog') }).render(); }); // add popover size buttons context.memo('button.databasicSize100', function() { return ui.button({ contents: '<span class="note-fontsize-10">100%</span>', tooltip: lang.image.resizeFull, click: context.createInvokeHandler('editor.resize', '1') }).render(); }); context.memo('button.databasicSize50', function() { return ui.button({ contents: '<span class="note-fontsize-10">50%</span>', tooltip: lang.image.resizeHalf, click: context.createInvokeHandler('editor.resize', '0.5') }).render(); }); context.memo('button.databasicSize25', function() { return ui.button({ contents: '<span class="note-fontsize-10">25%</span>', tooltip: lang.image.resizeQuarter, click: context.createInvokeHandler('editor.resize', '0.25') }).render(); }); self.events = { 'summernote.init': function(we, e) { // update existing containers $('data.ext-databasic', e.editable).each(function() { self.setContent($(this)); }); // TODO: make this an undo snapshot... }, 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': function() { self.update(); }, 'summernote.dialog.shown': function() { self.hidePopover(); } }; self.initialize = function() { // create dialog markup var $container = options.dialogsInBody ? $(document.body) : context.layoutInfo.editor; var body = '<div class="form-group row-fluid">' + '<label>' + lang.databasic.testLabel + '</label>' + '<input class="ext-databasic-test form-control" type="text" />' + '</div>'; var footer = '<button href="#" class="btn btn-primary ext-databasic-save">' + lang.databasic.insert + '</button>'; self.$dialog = ui.dialog({ title: lang.databasic.name, fade: options.dialogsFade, body: body, footer: footer }).render().appendTo($container); // create popover self.$popover = ui.popover({ className: 'ext-databasic-popover' }).render().appendTo('body'); var $content = self.$popover.find('.popover-content'); context.invoke('buttons.build', $content, options.popover.databasic); }; self.destroy = function() { self.$popover.remove(); self.$popover = null; self.$dialog.remove(); self.$dialog = null; }; self.update = function() { // Prevent focusing on editable when invoke('code') is executed if (!context.invoke('editor.hasFocus')) { self.hidePopover(); return; } var rng = context.invoke('editor.createRange'); var visible = false; if (rng.isOnData()) { var $data = $(rng.sc).closest('data.ext-databasic'); if ($data.length) { var pos = dom.posFromPlaceholder($data[0]); self.$popover.css({ display: 'block', left: pos.left, top: pos.top }); // save editor target to let size buttons resize the container context.invoke('editor.saveTarget', $data[0]); visible = true; } } // hide if not visible if (!visible) { self.hidePopover(); } }; self.hidePopover = function() { self.$popover.hide(); }; // define plugin dialog self.getInfo = function() { var rng = context.invoke('editor.createRange'); if (rng.isOnData()) { var $data = $(rng.sc).closest('data.ext-databasic'); if ($data.length) { // Get the first node on range(for edit). return { node: $data, test: $data.attr('data-test') }; } } return {}; }; self.setContent = function($node) { $node.html('<p contenteditable="false">' + self.icon + ' ' + lang.databasic.name + ': ' + $node.attr('data-test') + '</p>'); }; self.updateNode = function(info) { self.setContent(info.node .attr('data-test', info.test)); }; self.createNode = function(info) { var $node = $('<data class="ext-databasic"></data>'); if ($node) { // save node to info structure info.node = $node; // insert node into editor dom context.invoke('editor.insertNode', $node[0]); } return $node; }; self.showDialog = function() { var info = self.getInfo(); var newNode = !info.node; context.invoke('editor.saveRange'); self .openDialog(info) .then(function(dialogInfo) { // [workaround] hide dialog before restore range for IE range focus ui.hideDialog(self.$dialog); context.invoke('editor.restoreRange'); // insert a new node if (newNode) { self.createNode(info); } // update info with dialog info $.extend(info, dialogInfo); self.updateNode(info); }) .fail(function() { context.invoke('editor.restoreRange'); }); }; self.openDialog = function(info) { return $.Deferred(function(deferred) { var $inpTest = self.$dialog.find('.ext-databasic-test'); var $saveBtn = self.$dialog.find('.ext-databasic-save'); var onKeyup = function(event) { if (event.keyCode === 13) { $saveBtn.trigger('click'); } }; ui.onDialogShown(self.$dialog, function() { context.triggerEvent('dialog.shown'); $inpTest.val(info.test).on('input', function() { ui.toggleBtn($saveBtn, $inpTest.val()); }).trigger('focus').on('keyup', onKeyup); $saveBtn .text(info.node ? lang.databasic.edit : lang.databasic.insert) .click(function(event) { event.preventDefault(); deferred.resolve({ test: $inpTest.val() }); }); // init save button ui.toggleBtn($saveBtn, $inpTest.val()); }); ui.onDialogHidden(self.$dialog, function() { $inpTest.off('input keyup'); $saveBtn.off('click'); if (deferred.state() === 'pending') { deferred.reject(); } }); ui.showDialog(self.$dialog); }); }; }; // Extends summernote $.extend(true, $.summernote, { plugins: { databasic: DataBasicPlugin }, options: { popover: { databasic: [ ['databasic', ['databasicDialog', 'databasicSize100', 'databasicSize50', 'databasicSize25']] ] } }, // add localization texts lang: { 'en-US': { databasic: { name: 'Basic Data Container', insert: 'insert basic data container', edit: 'edit basic data container', testLabel: 'test input' } } } }); })); PKf[�\X$Q�; ; $plugin/hello/summernote-ext-hello.jsnu�[���(function(factory) { /* global define */ if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery'], factory); } else if (typeof module === 'object' && module.exports) { // Node/CommonJS module.exports = factory(require('jquery')); } else { // Browser globals factory(window.jQuery); } }(function($) { // Extends plugins for adding hello. // - plugin is external module for customizing. $.extend($.summernote.plugins, { /** * @param {Object} context - context object has status of editor. */ 'hello': function(context) { var self = this; // ui has renders to build ui elements. // - you can create a button with `ui.button` var ui = $.summernote.ui; // add hello button context.memo('button.hello', function() { // create button var button = ui.button({ contents: '<i class="fa fa-child"/> Hello', tooltip: 'hello', click: function() { self.$panel.show(); self.$panel.hide(500); // invoke insertText method with 'hello' on editor module. context.invoke('editor.insertText', 'hello'); } }); // create jQuery object from button instance. var $hello = button.render(); return $hello; }); // This events will be attached when editor is initialized. this.events = { // This will be called after modules are initialized. 'summernote.init': function(we, e) { console.log('summernote initialized', we, e); }, // This will be called when user releases a key on editable. 'summernote.keyup': function(we, e) { console.log('summernote keyup', we, e); } }; // This method will be called when editor is initialized by $('..').summernote(); // You can create elements for plugin this.initialize = function() { this.$panel = $('<div class="hello-panel"/>').css({ position: 'absolute', width: 100, height: 100, left: '50%', top: '50%', background: 'red' }).hide(); this.$panel.appendTo('body'); }; // This methods will be called when editor is destroyed by $('..').summernote('destroy'); // You should remove elements on `initialize`. this.destroy = function() { this.$panel.remove(); this.$panel = null; }; } }); })); PKf[�\둋��� tsconfig.jsonnu�[���{ "compilerOptions": { "outDir": "./built", "allowJs": true, "sourceMap": true, "experimentalDecorators": true }, "include": [ "./src/**/*.js", "./src/**/*.ts" ] } PKf[�\�߹��.�.Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/History.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/editing/History.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/editing/</a> History.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">76.19% </span> <span class="quiet">Statements</span> <span class='fraction'>32/42</span> </div> <div class='fl pad1y space-right2'> <span class="strong">43.75% </span> <span class="quiet">Branches</span> <span class='fraction'>7/16</span> </div> <div class='fl pad1y space-right2'> <span class="strong">77.78% </span> <span class="quiet">Functions</span> <span class='fraction'>7/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">76.19% </span> <span class="quiet">Lines</span> <span class='fraction'>32/42</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import range from '../core/range'; export default class History { constructor($editable) { this.stack = []; this.stackOffset = -1; this.$editable = $editable; this.editable = $editable[0]; } makeSnapshot() { const rng = range.create(this.editable); const emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}}; return { contents: this.$editable.html(), bookmark: (rng ? rng.bookmark(this.editable) : <span class="branch-1 cbranch-no" title="branch not covered" >emptyBookmark)</span> }; } applySnapshot(snapshot) { <span class="missing-if-branch" title="else path not taken" >E</span>if (snapshot.contents !== null) { this.$editable.html(snapshot.contents); } <span class="missing-if-branch" title="else path not taken" >E</span>if (snapshot.bookmark !== null) { range.createFromBookmark(this.editable, snapshot.bookmark).select(); } } /** * @method rewind * Rewinds the history stack back to the first snapshot taken. * Leaves the stack intact, so that "Redo" can still be used. */ <span class="fstat-no" title="function not covered" > rewind() {</span> // Create snap shot if not yet recorded <span class="cstat-no" title="statement not covered" > if (this.$editable.html() !== this.stack[this.stackOffset].contents) {</span> <span class="cstat-no" title="statement not covered" > this.recordUndo();</span> } // Return to the first available snapshot. <span class="cstat-no" title="statement not covered" > this.stackOffset = 0;</span> // Apply that snapshot. <span class="cstat-no" title="statement not covered" > this.applySnapshot(this.stack[this.stackOffset]);</span> } /** * @method reset * Resets the history stack completely; reverting to an empty editor. */ <span class="fstat-no" title="function not covered" > reset() {</span> // Clear the stack. <span class="cstat-no" title="statement not covered" > this.stack = [];</span> // Restore stackOffset to its original value. <span class="cstat-no" title="statement not covered" > this.stackOffset = -1;</span> // Clear the editable area. <span class="cstat-no" title="statement not covered" > this.$editable.html('');</span> // Record our first snapshot (of nothing). <span class="cstat-no" title="statement not covered" > this.recordUndo();</span> } /** * undo */ undo() { // Create snap shot if not yet recorded <span class="missing-if-branch" title="if path not taken" >I</span>if (this.$editable.html() !== this.stack[this.stackOffset].contents) { <span class="cstat-no" title="statement not covered" > this.recordUndo();</span> } <span class="missing-if-branch" title="else path not taken" >E</span>if (this.stackOffset > 0) { this.stackOffset--; this.applySnapshot(this.stack[this.stackOffset]); } } /** * redo */ redo() { <span class="missing-if-branch" title="else path not taken" >E</span>if (this.stack.length - 1 > this.stackOffset) { this.stackOffset++; this.applySnapshot(this.stack[this.stackOffset]); } } /** * recorded undo */ recordUndo() { this.stackOffset++; // Wash out stack after stackOffset <span class="missing-if-branch" title="if path not taken" >I</span>if (this.stack.length > this.stackOffset) { <span class="cstat-no" title="statement not covered" > this.stack = this.stack.slice(0, this.stackOffset);</span> } // Create new snapshot and push it to the end this.stack.push(this.makeSnapshot()); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\ɋ��Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/editing/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> src/js/base/editing/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">88.13% </span> <span class="quiet">Statements</span> <span class='fraction'>453/514</span> </div> <div class='fl pad1y space-right2'> <span class="strong">76.09% </span> <span class="quiet">Branches</span> <span class='fraction'>210/276</span> </div> <div class='fl pad1y space-right2'> <span class="strong">90% </span> <span class="quiet">Functions</span> <span class='fraction'>63/70</span> </div> <div class='fl pad1y space-right2'> <span class="strong">88.8% </span> <span class="quiet">Lines</span> <span class='fraction'>452/509</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="Bullet.js"><a href="Bullet.js.html">Bullet.js</a></td> <td data-value="97.73" class="pic high"><div class="chart"><div class="cover-fill" style="width: 97%;"></div><div class="cover-empty" style="width:3%;"></div></div></td> <td data-value="97.73" class="pct high">97.73%</td> <td data-value="88" class="abs high">86/88</td> <td data-value="78.95" class="pct medium">78.95%</td> <td data-value="38" class="abs medium">30/38</td> <td data-value="100" class="pct high">100%</td> <td data-value="23" class="abs high">23/23</td> <td data-value="97.73" class="pct high">97.73%</td> <td data-value="88" class="abs high">86/88</td> </tr> <tr> <td class="file medium" data-value="History.js"><a href="History.js.html">History.js</a></td> <td data-value="76.19" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 76%;"></div><div class="cover-empty" style="width:24%;"></div></div></td> <td data-value="76.19" class="pct medium">76.19%</td> <td data-value="42" class="abs medium">32/42</td> <td data-value="43.75" class="pct low">43.75%</td> <td data-value="16" class="abs low">7/16</td> <td data-value="77.78" class="pct medium">77.78%</td> <td data-value="9" class="abs medium">7/9</td> <td data-value="76.19" class="pct medium">76.19%</td> <td data-value="42" class="abs medium">32/42</td> </tr> <tr> <td class="file high" data-value="Style.js"><a href="Style.js.html">Style.js</a></td> <td data-value="84.62" class="pic high"><div class="chart"><div class="cover-fill" style="width: 84%;"></div><div class="cover-empty" style="width:16%;"></div></div></td> <td data-value="84.62" class="pct high">84.62%</td> <td data-value="65" class="abs high">55/65</td> <td data-value="82.22" class="pct high">82.22%</td> <td data-value="45" class="abs high">37/45</td> <td data-value="75" class="pct medium">75%</td> <td data-value="12" class="abs medium">9/12</td> <td data-value="84.62" class="pct high">84.62%</td> <td data-value="65" class="abs high">55/65</td> </tr> <tr> <td class="file high" data-value="Table.js"><a href="Table.js.html">Table.js</a></td> <td data-value="89.96" class="pic high"><div class="chart"><div class="cover-fill" style="width: 89%;"></div><div class="cover-empty" style="width:11%;"></div></div></td> <td data-value="89.96" class="pct high">89.96%</td> <td data-value="279" class="abs high">251/279</td> <td data-value="78.48" class="pct medium">78.48%</td> <td data-value="158" class="abs medium">124/158</td> <td data-value="95.24" class="pct high">95.24%</td> <td data-value="21" class="abs high">20/21</td> <td data-value="91.24" class="pct high">91.24%</td> <td data-value="274" class="abs high">250/274</td> </tr> <tr> <td class="file medium" data-value="Typing.js"><a href="Typing.js.html">Typing.js</a></td> <td data-value="72.5" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 72%;"></div><div class="cover-empty" style="width:28%;"></div></div></td> <td data-value="72.5" class="pct medium">72.5%</td> <td data-value="40" class="abs medium">29/40</td> <td data-value="63.16" class="pct medium">63.16%</td> <td data-value="19" class="abs medium">12/19</td> <td data-value="80" class="pct high">80%</td> <td data-value="5" class="abs high">4/5</td> <td data-value="72.5" class="pct medium">72.5%</td> <td data-value="40" class="abs medium">29/40</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\� ��XMXMQcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Bullet.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/editing/Bullet.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/editing/</a> Bullet.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">97.73% </span> <span class="quiet">Statements</span> <span class='fraction'>86/88</span> </div> <div class='fl pad1y space-right2'> <span class="strong">78.95% </span> <span class="quiet">Branches</span> <span class='fraction'>30/38</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>23/23</span> </div> <div class='fl pad1y space-right2'> <span class="strong">97.73% </span> <span class="quiet">Lines</span> <span class='fraction'>86/88</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import lists from '../core/lists'; import func from '../core/func'; import dom from '../core/dom'; import range from '../core/range'; export default class Bullet { /** * toggle ordered list */ insertOrderedList(editable) { this.toggleList('OL', editable); } /** * toggle unordered list */ insertUnorderedList(editable) { this.toggleList('UL', editable); } /** * indent */ indent(editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); const paras = rng.nodes(dom.isPara, { includeAncestor: true }); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $.each(clustereds, (idx, paras) => { const head = lists.head(paras); if (dom.isLi(head)) { this.wrapList(paras, head.parentNode.nodeName); } else { $.each(paras, (idx, para) => { $(para).css('marginLeft', (idx, val) => { return (parseInt(val, 10) || 0) + 25; }); }); } }); rng.select(); } /** * outdent */ outdent(editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); const paras = rng.nodes(dom.isPara, { includeAncestor: true }); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $.each(clustereds, (idx, paras) => { const head = lists.head(paras); if (dom.isLi(head)) { this.releaseList([paras]); } else { $.each(paras, (idx, para) => { $(para).css('marginLeft', (idx, val) => { val = (parseInt(val, 10) || <span class="branch-1 cbranch-no" title="branch not covered" >0)</span>; return val > 25 ? <span class="branch-0 cbranch-no" title="branch not covered" >val - 25 </span>: ''; }); }); } }); rng.select(); } /** * toggle list * * @param {String} listName - OL or UL */ toggleList(listName, editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); let paras = rng.nodes(dom.isPara, { includeAncestor: true }); const bookmark = rng.paraBookmark(paras); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list if (lists.find(paras, dom.isPurePara)) { let wrappedParas = []; $.each(clustereds, (idx, paras) => { wrappedParas = wrappedParas.concat(this.wrapList(paras, listName)); }); paras = wrappedParas; // list to paragraph or change list style } else { const diffLists = rng.nodes(dom.isList, { includeAncestor: true }).filter((listNode) => { return !$.nodeName(listNode, listName); }); if (diffLists.length) { $.each(diffLists, (idx, listNode) => { dom.replace(listNode, listName); }); } else { paras = this.releaseList(clustereds, true); } } range.createFromParaBookmark(bookmark, paras).select(); } /** * @param {Node[]} paras * @param {String} listName * @return {Node[]} */ wrapList(paras, listName) { const head = lists.head(paras); const last = lists.last(paras); const prevList = dom.isList(head.previousSibling) && <span class="branch-1 cbranch-no" title="branch not covered" >head.previousSibling;</span> const nextList = dom.isList(last.nextSibling) && <span class="branch-1 cbranch-no" title="branch not covered" >last.nextSibling;</span> const listNode = prevList || dom.insertAfter(dom.create(listName || <span class="branch-1 cbranch-no" title="branch not covered" >'UL')</span>, last); // P to LI paras = paras.map((para) => { return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; }); // append to list(<ul>, <ol>) dom.appendChildNodes(listNode, paras); <span class="missing-if-branch" title="if path not taken" >I</span>if (nextList) { <span class="cstat-no" title="statement not covered" > dom.appendChildNodes(listNode, lists.from(nextList.childNodes));</span> <span class="cstat-no" title="statement not covered" > dom.remove(nextList);</span> } return paras; } /** * @method releaseList * * @param {Array[]} clustereds * @param {Boolean} isEscapseToBody * @return {Node[]} */ releaseList(clustereds, isEscapseToBody) { let releasedParas = []; $.each(clustereds, (idx, paras) => { const head = lists.head(paras); const last = lists.last(paras); const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode; const lastList = headList.childNodes.length > 1 ? <span class="branch-0 cbranch-no" title="branch not covered" >dom.splitTree(headList, {</span> node: last.parentNode, offset: dom.position(last) + 1 }, { isSkipPaddingBlankHTML: true }) : null; const middleList = dom.splitTree(headList, { node: head.parentNode, offset: dom.position(head) }, { isSkipPaddingBlankHTML: true }); paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi) : lists.from(middleList.childNodes).filter(dom.isLi); // LI to P if (isEscapseToBody || !dom.isList(headList.parentNode)) { paras = paras.map((para) => { return dom.replace(para, 'P'); }); } $.each(lists.from(paras).reverse(), (idx, para) => { dom.insertAfter(para, headList); }); // remove empty lists const rootLists = lists.compact([headList, middleList, lastList]); $.each(rootLists, (idx, rootList) => { const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList)); $.each(listNodes.reverse(), (idx, listNode) => { <span class="missing-if-branch" title="else path not taken" >E</span>if (!dom.nodeLength(listNode)) { dom.remove(listNode, true); } }); }); releasedParas = releasedParas.concat(paras); }); return releasedParas; } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\KWtn����Pcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Table.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/editing/Table.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/editing/</a> Table.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">89.96% </span> <span class="quiet">Statements</span> <span class='fraction'>251/279</span> </div> <div class='fl pad1y space-right2'> <span class="strong">78.48% </span> <span class="quiet">Branches</span> <span class='fraction'>124/158</span> </div> <div class='fl pad1y space-right2'> <span class="strong">95.24% </span> <span class="quiet">Functions</span> <span class='fraction'>20/21</span> </div> <div class='fl pad1y space-right2'> <span class="strong">91.24% </span> <span class="quiet">Lines</span> <span class='fraction'>250/274</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">112×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">112×</span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">112×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">102×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">60×</span> <span class="cline-any cline-yes">45×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-yes">94×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">66×</span> <span class="cline-any cline-yes">66×</span> <span class="cline-any cline-yes">66×</span> <span class="cline-any cline-yes">66×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import dom from '../core/dom'; import range from '../core/range'; import lists from '../core/lists'; /** * @class Create a virtual table to create what actions to do in change. * @param {object} startPoint Cell selected to apply change. * @param {enum} where Where change will be applied Row or Col. Use enum: TableResultAction.where * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction * @param {object} domTable Dom element of table to make changes. */ const TableResultAction = function(startPoint, where, action, domTable) { const _startPoint = { 'colPos': 0, 'rowPos': 0 }; const _virtualTable = []; const _actionCellList = []; /// /////////////////////////////////////////// // Private functions /// /////////////////////////////////////////// /** * Set the startPoint of action. */ function setStartPoint() { <span class="missing-if-branch" title="if path not taken" >I</span>if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && <span class="branch-3 cbranch-no" title="branch not covered" >startPoint.tagName.toLowerCase() !== 'th')</span>) { <span class="cstat-no" title="statement not covered" > console.error('Impossible to identify start Cell point.', startPoint);</span> <span class="cstat-no" title="statement not covered" > return;</span> } _startPoint.colPos = startPoint.cellIndex; <span class="missing-if-branch" title="if path not taken" >I</span>if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') { <span class="cstat-no" title="statement not covered" > console.error('Impossible to identify start Row point.', startPoint);</span> <span class="cstat-no" title="statement not covered" > return;</span> } _startPoint.rowPos = startPoint.parentElement.rowIndex; } /** * Define virtual table position info object. * * @param {int} rowIndex Index position in line of virtual table. * @param {int} cellIndex Index position in column of virtual table. * @param {object} baseRow Row affected by this position. * @param {object} baseCell Cell affected by this position. * @param {bool} isSpan Inform if it is an span cell/row. */ function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) { const objPosition = { 'baseRow': baseRow, 'baseCell': baseCell, 'isRowSpan': isRowSpan, 'isColSpan': isColSpan, 'isVirtual': isVirtualCell }; if (!_virtualTable[rowIndex]) { _virtualTable[rowIndex] = []; } _virtualTable[rowIndex][cellIndex] = objPosition; } /** * Create action cell object. * * @param {object} virtualTableCellObj Object of specific position on virtual table. * @param {enum} resultAction Action to be applied in that item. */ function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) { return { 'baseCell': virtualTableCellObj.baseCell, 'action': resultAction, 'virtualTable': { 'rowIndex': virtualRowPosition, 'cellIndex': virtualColPosition } }; } /** * Recover free index of row to append Cell. * * @param {int} rowIndex Index of row to find free space. * @param {int} cellIndex Index of cell to find free space in table. */ function recoverCellIndex(rowIndex, cellIndex) { if (!_virtualTable[rowIndex]) { return cellIndex; } if (!_virtualTable[rowIndex][cellIndex]) { return cellIndex; } let newCellIndex = cellIndex; while (_virtualTable[rowIndex][newCellIndex]) { newCellIndex++; if (!_virtualTable[rowIndex][newCellIndex]) { return newCellIndex; } } } /** * Recover info about row and cell and add information to virtual table. * * @param {object} row Row to recover information. * @param {object} cell Cell to recover information. */ function addCellInfoToVirtual(row, cell) { const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex); const cellHasColspan = (cell.colSpan > 1); const cellHasRowspan = (cell.rowSpan > 1); const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos); setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false); // Add span rows to virtual Table. const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0; if (rowspanNumber > 1) { for (let rp = 1; rp < rowspanNumber; rp++) { const rowspanIndex = row.rowIndex + rp; adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell); setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true); } } // Add span cols to virtual table. const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0; if (colspanNumber > 1) { for (let cp = 1; cp < colspanNumber; cp++) { const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp)); adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell); setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true); } } } /** * Process validation and adjust of start point if needed * * @param {int} rowIndex * @param {int} cellIndex * @param {object} cell * @param {bool} isSelectedCell */ function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) { if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) { _startPoint.colPos++; } } /** * Create virtual table of cells with all cells, including span cells. */ function createVirtualTable() { const rows = domTable.rows; for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) { const cells = rows[rowIndex].cells; for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) { addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]); } } } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getDeleteResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; case TableResultAction.where.Row: if (!cell.isVirtual && cell.isRowSpan) { return TableResultAction.resultAction.AddCell; } else if (cell.isRowSpan) { return TableResultAction.resultAction.SubtractSpanCount; } break; } return TableResultAction.resultAction.RemoveCell; } /** * Get action to be applied on the cell. * * @param {object} cell virtual table cell to apply action */ function getAddResultActionToCell(cell) { switch (where) { case TableResultAction.where.Column: if (cell.isColSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isRowSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; case TableResultAction.where.Row: if (cell.isRowSpan) { return TableResultAction.resultAction.SumSpanCount; } else if (cell.isColSpan && cell.isVirtual) { return TableResultAction.resultAction.Ignore; } break; } return TableResultAction.resultAction.AddCell; } function init() { setStartPoint(); createVirtualTable(); } /// /////////////////////////////////////////// // Public functions /// /////////////////////////////////////////// /** * Recover array os what to do in table. */ this.getActionList = function() { const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1; const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1; let actualPosition = 0; let canContinue = true; while (canContinue) { const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition; const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition; const row = _virtualTable[rowPosition]; if (!row) { canContinue = false; return _actionCellList; } const cell = row[colPosition]; if (!cell) { canContinue = false; return _actionCellList; } // Define action to be applied in this cell let resultAction = TableResultAction.resultAction.Ignore; switch (action) { case TableResultAction.requestAction.Add: resultAction = getAddResultActionToCell(cell); break; case TableResultAction.requestAction.Delete: resultAction = getDeleteResultActionToCell(cell); break; } _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition)); actualPosition++; } <span class="cstat-no" title="statement not covered" > return _actionCellList;</span> }; init(); }; /** * * Where action occours enum. */ TableResultAction.where = { 'Row': 0, 'Column': 1 }; /** * * Requested action to apply enum. */ TableResultAction.requestAction = { 'Add': 0, 'Delete': 1 }; /** * * Result action to be executed enum. */ TableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 }; /** * * @class editing.Table * * Table * */ export default class Table { /** * handle tab key * * @param {WrappedRange} rng * @param {Boolean} isShift */ <span class="fstat-no" title="function not covered" > tab(rng, isShift)</span> { <span class="cstat-no" title="statement not covered" > const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);</span> <span class="cstat-no" title="statement not covered" > const table = dom.ancestor(cell, dom.isTable);</span> <span class="cstat-no" title="statement not covered" > const cells = dom.listDescendant(table, dom.isCell);</span> <span class="cstat-no" title="statement not covered" > const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);</span> <span class="cstat-no" title="statement not covered" > if (nextCell) {</span> <span class="cstat-no" title="statement not covered" > range.create(nextCell, 0).select();</span> } } /** * Add a new row * * @param {WrappedRange} rng * @param {String} position (top/bottom) * @return {Node} */ addRow(rng, position) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const currentTr = $(cell).closest('tr'); const trAttributes = this.recoverAttributes(currentTr); const html = $('<tr' + trAttributes + '></tr>'); const vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]); const actions = vTable.getActionList(); for (let idCell = 0; idCell < actions.length; idCell++) { const currentCell = actions[idCell]; const tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: html.append('<td' + tdAttributes + '>' + dom.blank + '</td>'); break; case TableResultAction.resultAction.SumSpanCount: if (position === 'top') { const baseCellTr = currentCell.baseCell.parent; const isTopFromRowSpan = (!baseCellTr ? 0 : <span class="branch-1 cbranch-no" title="branch not covered" >currentCell.baseCell.closest('tr').rowIndex)</span> <= currentTr[0].rowIndex; <span class="missing-if-branch" title="else path not taken" >E</span>if (isTopFromRowSpan) { const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html(); html.append(newTd); break; } } let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10); rowspanNumber++; currentCell.baseCell.setAttribute('rowSpan', rowspanNumber); break; } } if (position === 'top') { currentTr.before(html); } else { const cellHasRowspan = (cell.rowSpan > 1); if (cellHasRowspan) { const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2); $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html)); return; } currentTr.after(html); } } /** * Add a new col * * @param {WrappedRange} rng * @param {String} position (left/right) * @return {Node} */ addCol(rng, position) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const row = $(cell).closest('tr'); const rowsGroup = $(row).siblings(); rowsGroup.push(row); const vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Add, $(row).closest('table')[0]); const actions = vTable.getActionList(); for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) { const currentCell = actions[actionIndex]; const tdAttributes = this.recoverAttributes(currentCell.baseCell); switch (currentCell.action) { case TableResultAction.resultAction.AddCell: if (position === 'right') { $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>'); } else { $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>'); } break; case TableResultAction.resultAction.SumSpanCount: <span class="missing-if-branch" title="else path not taken" >E</span>if (position === 'right') { let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10); colspanNumber++; currentCell.baseCell.setAttribute('colSpan', colspanNumber); } else { <span class="cstat-no" title="statement not covered" > $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');</span> } break; } } } /* * Copy attributes from element. * * @param {object} Element to recover attributes. * @return {string} Copied string elements. */ recoverAttributes(el) { let resultStr = ''; <span class="missing-if-branch" title="if path not taken" >I</span>if (!el) { <span class="cstat-no" title="statement not covered" > return resultStr;</span> } const attrList = el.attributes || []; for (let i = 0; i < attrList.length; i++) { if (attrList[i].name.toLowerCase() === 'id') { continue; } <span class="missing-if-branch" title="else path not taken" >E</span>if (attrList[i].specified) { resultStr += ' ' + attrList[i].name + '=\'' + attrList[i].value + '\''; } } return resultStr; } /** * Delete current row * * @param {WrappedRange} rng * @return {Node} */ deleteRow(rng) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const row = $(cell).closest('tr'); const cellPos = row.children('td, th').index($(cell)); const rowPos = row[0].rowIndex; const vTable = new TableResultAction(cell, TableResultAction.where.Row, TableResultAction.requestAction.Delete, $(row).closest('table')[0]); const actions = vTable.getActionList(); for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) { <span class="missing-if-branch" title="if path not taken" >I</span>if (!actions[actionIndex]) { <span class="cstat-no" title="statement not covered" > continue;</span> } const baseCell = actions[actionIndex].baseCell; const virtualPosition = actions[actionIndex].virtualTable; const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1); let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0; switch (actions[actionIndex].action) { <span class="branch-0 cbranch-no" title="branch not covered" > case TableResultAction.resultAction.Ignore:</span> <span class="cstat-no" title="statement not covered" > continue;</span> case TableResultAction.resultAction.AddCell: const nextRow = row.next('tr')[0]; <span class="missing-if-branch" title="if path not taken" >I</span>if (!nextRow) { <span class="cstat-no" title="statement not covered" >continue; </span>} const cloneRow = row[0].cells[cellPos]; <span class="missing-if-branch" title="else path not taken" >E</span>if (hasRowspan) { <span class="missing-if-branch" title="if path not taken" >I</span>if (rowspanNumber > 2) { <span class="cstat-no" title="statement not covered" > rowspanNumber--;</span> <span class="cstat-no" title="statement not covered" > nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);</span> <span class="cstat-no" title="statement not covered" > nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);</span> <span class="cstat-no" title="statement not covered" > nextRow.cells[cellPos].innerHTML = '';</span> } else <span class="missing-if-branch" title="else path not taken" >E</span>if (rowspanNumber === 2) { nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]); nextRow.cells[cellPos].removeAttribute('rowSpan'); nextRow.cells[cellPos].innerHTML = ''; } } continue; case TableResultAction.resultAction.SubtractSpanCount: <span class="missing-if-branch" title="else path not taken" >E</span>if (hasRowspan) { <span class="missing-if-branch" title="else path not taken" >E</span>if (rowspanNumber > 2) { rowspanNumber--; baseCell.setAttribute('rowSpan', rowspanNumber); <span class="missing-if-branch" title="if path not taken" >I</span>if (virtualPosition.rowIndex !== rowPos && <span class="branch-1 cbranch-no" title="branch not covered" >baseCell.cellIndex === cellPos)</span> { <span class="cstat-no" title="statement not covered" >baseCell.innerHTML = ''; </span>} } else <span class="cstat-no" title="statement not covered" >if (rowspanNumber === 2) {</span> <span class="cstat-no" title="statement not covered" > baseCell.removeAttribute('rowSpan');</span> <span class="cstat-no" title="statement not covered" > if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { <span class="cstat-no" title="statement not covered" >baseCell.innerHTML = ''; </span>}</span> } } continue; case TableResultAction.resultAction.RemoveCell: // Do not need remove cell because row will be deleted. continue; } } row.remove(); } /** * Delete current col * * @param {WrappedRange} rng * @return {Node} */ deleteCol(rng) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); const row = $(cell).closest('tr'); const cellPos = row.children('td, th').index($(cell)); const vTable = new TableResultAction(cell, TableResultAction.where.Column, TableResultAction.requestAction.Delete, $(row).closest('table')[0]); const actions = vTable.getActionList(); for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) { <span class="missing-if-branch" title="if path not taken" >I</span>if (!actions[actionIndex]) { <span class="cstat-no" title="statement not covered" > continue;</span> } switch (actions[actionIndex].action) { <span class="branch-0 cbranch-no" title="branch not covered" > case TableResultAction.resultAction.Ignore:</span> <span class="cstat-no" title="statement not covered" > continue;</span> case TableResultAction.resultAction.SubtractSpanCount: const baseCell = actions[actionIndex].baseCell; const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1); <span class="missing-if-branch" title="else path not taken" >E</span>if (hasColspan) { let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : <span class="branch-1 cbranch-no" title="branch not covered" >0;</span> if (colspanNumber > 2) { colspanNumber--; baseCell.setAttribute('colSpan', colspanNumber); <span class="missing-if-branch" title="if path not taken" >I</span>if (baseCell.cellIndex === cellPos) { <span class="cstat-no" title="statement not covered" >baseCell.innerHTML = ''; </span>} } else <span class="missing-if-branch" title="else path not taken" >E</span>if (colspanNumber === 2) { baseCell.removeAttribute('colSpan'); if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; } } } continue; case TableResultAction.resultAction.RemoveCell: dom.remove(actions[actionIndex].baseCell, true); continue; } } } /** * create empty table element * * @param {Number} rowCount * @param {Number} colCount * @return {Node} */ createTable(colCount, rowCount, options) { const tds = []; let tdHTML; for (let idxCol = 0; idxCol < colCount; idxCol++) { tds.push('<td>' + dom.blank + '</td>'); } tdHTML = tds.join(''); const trs = []; let trHTML; for (let idxRow = 0; idxRow < rowCount; idxRow++) { trs.push('<tr>' + tdHTML + '</tr>'); } trHTML = trs.join(''); const $table = $('<table>' + trHTML + '</table>'); if (options && options.tableClassName) { $table.addClass(options.tableClassName); } return $table[0]; } /** * Delete current table * * @param {WrappedRange} rng * @return {Node} */ deleteTable(rng) { const cell = dom.ancestor(rng.commonAncestor(), dom.isCell); $(cell).closest('table').remove(); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\M->EEPcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Style.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/editing/Style.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/editing/</a> Style.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">84.62% </span> <span class="quiet">Statements</span> <span class='fraction'>55/65</span> </div> <div class='fl pad1y space-right2'> <span class="strong">82.22% </span> <span class="quiet">Branches</span> <span class='fraction'>37/45</span> </div> <div class='fl pad1y space-right2'> <span class="strong">75% </span> <span class="quiet">Functions</span> <span class='fraction'>9/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">84.62% </span> <span class="quiet">Lines</span> <span class='fraction'>55/65</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; export default class Style { /** * @method jQueryCSS * * [workaround] for old jQuery * passing an array of style properties to .css() * will result in an object of property-value pairs. * (compability with version < 1.9) * * @private * @param {jQuery} $obj * @param {Array} propertyNames - An array of one or more CSS properties. * @return {Object} */ jQueryCSS($obj, propertyNames) { <span class="missing-if-branch" title="if path not taken" >I</span>if (env.jqueryVersion < 1.9) { <span class="cstat-no" title="statement not covered" > const result = {};</span> <span class="cstat-no" title="statement not covered" > $.each(propertyNames, <span class="fstat-no" title="function not covered" >(idx, propertyName)</span> => {</span> <span class="cstat-no" title="statement not covered" > result[propertyName] = $obj.css(propertyName);</span> }); <span class="cstat-no" title="statement not covered" > return result;</span> } return $obj.css(propertyNames); } /** * returns style object from node * * @param {jQuery} $node * @return {Object} */ fromNode($node) { const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height']; const styleInfo = this.jQueryCSS($node, properties) || <span class="branch-1 cbranch-no" title="branch not covered" >{};</span> styleInfo['font-size'] = parseInt(styleInfo['font-size'], 10); return styleInfo; } /** * paragraph level style * * @param {WrappedRange} rng * @param {Object} styleInfo */ <span class="fstat-no" title="function not covered" > stylePara(rng, styleInfo)</span> { <span class="cstat-no" title="statement not covered" > $.each(rng.nodes(dom.isPara, {</span> includeAncestor: true }), <span class="fstat-no" title="function not covered" >(idx, para)</span> => { <span class="cstat-no" title="statement not covered" > $(para).css(styleInfo);</span> }); } /** * insert and returns styleNodes on range. * * @param {WrappedRange} rng * @param {Object} [options] - options for styleNodes * @param {String} [options.nodeName] - default: `SPAN` * @param {Boolean} [options.expandClosestSibling] - default: `false` * @param {Boolean} [options.onlyPartialContains] - default: `false` * @return {Node[]} */ styleNodes(rng, options) { rng = rng.splitText(); const nodeName = (options && options.nodeName) || 'SPAN'; const expandClosestSibling = !!(options && options.expandClosestSibling); const onlyPartialContains = !!(options && options.onlyPartialContains); if (rng.isCollapsed()) { return [rng.insertNode(dom.create(nodeName))]; } let pred = dom.makePredByNodeName(nodeName); const nodes = rng.nodes(dom.isText, { fullyContains: true }).map((text) => { return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName); }); if (expandClosestSibling) { if (onlyPartialContains) { const nodesInRange = rng.nodes(); // compose with partial contains predication pred = func.and(pred, (node) => { return lists.contains(nodesInRange, node); }); } return nodes.map((node) => { const siblings = dom.withClosestSiblings(node, pred); const head = lists.head(siblings); const tails = lists.tail(siblings); $.each(tails, (idx, elem) => { dom.appendChildNodes(head, elem.childNodes); dom.remove(elem); }); return lists.head(siblings); }); } else { return nodes; } } /** * get current style on cursor * * @param {WrappedRange} rng * @return {Object} - object contains style properties. */ current(rng) { const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : <span class="branch-1 cbranch-no" title="branch not covered" >rng.sc)</span>; let styleInfo = this.fromNode($cont); // document.queryCommandState for toggle state // [workaround] prevent Firefox nsresult: "0x80004005 (NS_ERROR_FAILURE)" try { styleInfo = $.extend(styleInfo, { 'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal', 'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal', 'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal', 'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal', 'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal', 'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal', 'font-family': document.queryCommandValue('fontname') || <span class="branch-1 cbranch-no" title="branch not covered" >styleInfo['font-family']</span> }); } catch (e) {} // list-style-type to list-style(unordered, ordered) <span class="missing-if-branch" title="else path not taken" >E</span>if (!rng.isOnList()) { styleInfo['list-style'] = 'none'; } else { <span class="cstat-no" title="statement not covered" > const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];</span> <span class="cstat-no" title="statement not covered" > const isUnordered = $.inArray(styleInfo['list-style-type'], orderedTypes) > -1;</span> <span class="cstat-no" title="statement not covered" > styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';</span> } const para = dom.ancestor(rng.sc, dom.isPara); <span class="missing-if-branch" title="if path not taken" >I</span>if (para && para.style['line-height']) { <span class="cstat-no" title="statement not covered" > styleInfo['line-height'] = para.style.lineHeight;</span> } else { const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10); styleInfo['line-height'] = lineHeight.toFixed(1); } styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor); styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable); styleInfo.range = rng; return styleInfo; } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\���(+(+Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Typing.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/editing/Typing.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/editing/</a> Typing.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">72.5% </span> <span class="quiet">Statements</span> <span class='fraction'>29/40</span> </div> <div class='fl pad1y space-right2'> <span class="strong">63.16% </span> <span class="quiet">Branches</span> <span class='fraction'>12/19</span> </div> <div class='fl pad1y space-right2'> <span class="strong">80% </span> <span class="quiet">Functions</span> <span class='fraction'>4/5</span> </div> <div class='fl pad1y space-right2'> <span class="strong">72.5% </span> <span class="quiet">Lines</span> <span class='fraction'>29/40</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import dom from '../core/dom'; import range from '../core/range'; import Bullet from '../editing/Bullet'; /** * @class editing.Typing * * Typing * */ export default class Typing { constructor() { // a Bullet instance to toggle lists off this.bullet = new Bullet(); } /** * insert tab * * @param {WrappedRange} rng * @param {Number} tabsize */ insertTab(rng, tabsize) { const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); rng = rng.deleteContents(); rng.insertNode(tab, true); rng = range.create(tab, tabsize); rng.select(); } /** * insert paragraph */ insertParagraph(editable) { let rng = range.create(editable); // deleteContents on range. rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph rng = rng.wrapBodyInlineWithPara(); // finding paragraph const splitRoot = dom.ancestor(rng.sc, dom.isPara); let nextPara; // on paragraph: split paragraph <span class="missing-if-branch" title="else path not taken" >E</span>if (splitRoot) { // if it is an empty line with li <span class="missing-if-branch" title="if path not taken" >I</span>if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { // toogle UL/OL and escape <span class="cstat-no" title="statement not covered" > this.bullet.toggleList(splitRoot.parentNode.nodeName);</span> <span class="cstat-no" title="statement not covered" > return;</span> // if it is an empty line with para on blockquote } else <span class="missing-if-branch" title="if path not taken" >I</span>if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { // escape blockquote <span class="cstat-no" title="statement not covered" > dom.insertAfter(splitRoot, splitRoot.parentNode);</span> <span class="cstat-no" title="statement not covered" > nextPara = splitRoot;</span> // if new line has content (not a line break) } else { nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); $.each(emptyAnchors, <span class="fstat-no" title="function not covered" >(idx, anchor)</span> => { <span class="cstat-no" title="statement not covered" > dom.remove(anchor);</span> }); // replace empty heading, pre or custom-made styleTag with P tag <span class="missing-if-branch" title="if path not taken" >I</span>if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && <span class="branch-3 cbranch-no" title="branch not covered" >dom.isEmpty(nextPara))</span> { <span class="cstat-no" title="statement not covered" > nextPara = dom.replace(nextPara, 'p');</span> } } // no paragraph: insert empty paragraph } else { <span class="cstat-no" title="statement not covered" > const next = rng.sc.childNodes[rng.so];</span> <span class="cstat-no" title="statement not covered" > nextPara = $(dom.emptyPara)[0];</span> <span class="cstat-no" title="statement not covered" > if (next) {</span> <span class="cstat-no" title="statement not covered" > rng.sc.insertBefore(nextPara, next);</span> } else { <span class="cstat-no" title="statement not covered" > rng.sc.appendChild(nextPara);</span> } } range.create(nextPara, 0).normalize().select().scrollIntoView(editable); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�z�J�$�$Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/range.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/range.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> range.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">74.28% </span> <span class="quiet">Statements</span> <span class='fraction'>231/311</span> </div> <div class='fl pad1y space-right2'> <span class="strong">69.89% </span> <span class="quiet">Branches</span> <span class='fraction'>123/176</span> </div> <div class='fl pad1y space-right2'> <span class="strong">86.67% </span> <span class="quiet">Functions</span> <span class='fraction'>39/45</span> </div> <div class='fl pad1y space-right2'> <span class="strong">74.28% </span> <span class="quiet">Lines</span> <span class='fraction'>231/311</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">596×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">102×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">187×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">138×</span> <span class="cline-any cline-yes">162×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">61×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">101×</span> <span class="cline-any cline-yes">101×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">23×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">83×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">83×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">138×</span> <span class="cline-any cline-yes">138×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">138×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-yes">120×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">118×</span> <span class="cline-any cline-yes">118×</span> <span class="cline-any cline-yes">67×</span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">67×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">51×</span> <span class="cline-any cline-yes">46×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">118×</span> <span class="cline-any cline-yes">65×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">133×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">129×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">41×</span> <span class="cline-any cline-yes">36×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2980×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">190×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">47×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">46×</span> <span class="cline-any cline-yes">46×</span> <span class="cline-any cline-yes">19×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">21×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">17×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">126×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">591×</span> <span class="cline-any cline-yes">180×</span> <span class="cline-any cline-yes">411×</span> <span class="cline-any cline-yes">46×</span> <span class="cline-any cline-yes">46×</span> <span class="cline-any cline-yes">46×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">365×</span> <span class="cline-any cline-yes">365×</span> <span class="cline-any cline-yes">119×</span> <span class="cline-any cline-yes">119×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">246×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">365×</span> <span class="cline-any cline-yes">365×</span> <span class="cline-any cline-yes">365×</span> <span class="cline-any cline-yes">365×</span> <span class="cline-any cline-yes">194×</span> <span class="cline-any cline-yes">171×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">102×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">69×</span> <span class="cline-any cline-yes">69×</span> <span class="cline-any cline-yes">69×</span> <span class="cline-any cline-yes">69×</span> <span class="cline-any cline-yes">69×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">69×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from './env'; import func from './func'; import lists from './lists'; import dom from './dom'; /** * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js * * @param {TextRange} textRange * @param {Boolean} isStart * @return {BoundaryPoint} * * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx */ <span class="fstat-no" title="function not covered" >function textRangeToPoint(textRange, isStart)</span> { <span class="cstat-no" title="statement not covered" > let container = textRange.parentElement();</span> <span class="cstat-no" title="statement not covered" > let offset;</span> <span class="cstat-no" title="statement not covered" > const tester = document.body.createTextRange();</span> <span class="cstat-no" title="statement not covered" > let prevContainer;</span> <span class="cstat-no" title="statement not covered" > const childNodes = lists.from(container.childNodes);</span> <span class="cstat-no" title="statement not covered" > for (offset = 0; offset < childNodes.length; offset++) {</span> <span class="cstat-no" title="statement not covered" > if (dom.isText(childNodes[offset])) {</span> <span class="cstat-no" title="statement not covered" > continue;</span> } <span class="cstat-no" title="statement not covered" > tester.moveToElementText(childNodes[offset]);</span> <span class="cstat-no" title="statement not covered" > if (tester.compareEndPoints('StartToStart', textRange) >= 0) {</span> <span class="cstat-no" title="statement not covered" > break;</span> } <span class="cstat-no" title="statement not covered" > prevContainer = childNodes[offset];</span> } <span class="cstat-no" title="statement not covered" > if (offset !== 0 && dom.isText(childNodes[offset - 1])) {</span> <span class="cstat-no" title="statement not covered" > const textRangeStart = document.body.createTextRange();</span> <span class="cstat-no" title="statement not covered" > let curTextNode = null;</span> <span class="cstat-no" title="statement not covered" > textRangeStart.moveToElementText(prevContainer || container);</span> <span class="cstat-no" title="statement not covered" > textRangeStart.collapse(!prevContainer);</span> <span class="cstat-no" title="statement not covered" > curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;</span> <span class="cstat-no" title="statement not covered" > const pointTester = textRange.duplicate();</span> <span class="cstat-no" title="statement not covered" > pointTester.setEndPoint('StartToStart', textRangeStart);</span> <span class="cstat-no" title="statement not covered" > let textCount = pointTester.text.replace(/[\r\n]/g, '').length;</span> <span class="cstat-no" title="statement not covered" > while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {</span> <span class="cstat-no" title="statement not covered" > textCount -= curTextNode.nodeValue.length;</span> <span class="cstat-no" title="statement not covered" > curTextNode = curTextNode.nextSibling;</span> } // [workaround] enforce IE to re-reference curTextNode, hack <span class="cstat-no" title="statement not covered" > const dummy = curTextNode.nodeValue; </span>// eslint-disable-line <span class="cstat-no" title="statement not covered" > if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&</span> textCount === curTextNode.nodeValue.length) { <span class="cstat-no" title="statement not covered" > textCount -= curTextNode.nodeValue.length;</span> <span class="cstat-no" title="statement not covered" > curTextNode = curTextNode.nextSibling;</span> } <span class="cstat-no" title="statement not covered" > container = curTextNode;</span> <span class="cstat-no" title="statement not covered" > offset = textCount;</span> } <span class="cstat-no" title="statement not covered" > return {</span> cont: container, offset: offset }; } /** * return TextRange from boundary point (inspired by google closure-library) * @param {BoundaryPoint} point * @return {TextRange} */ <span class="fstat-no" title="function not covered" >function pointToTextRange(point)</span> { <span class="cstat-no" title="statement not covered" > const textRangeInfo = <span class="fstat-no" title="function not covered" >function(container, offset)</span> {</span> <span class="cstat-no" title="statement not covered" > let node, isCollapseToStart;</span> <span class="cstat-no" title="statement not covered" > if (dom.isText(container)) {</span> <span class="cstat-no" title="statement not covered" > const prevTextNodes = dom.listPrev(container, func.not(dom.isText));</span> <span class="cstat-no" title="statement not covered" > const prevContainer = lists.last(prevTextNodes).previousSibling;</span> <span class="cstat-no" title="statement not covered" > node = prevContainer || container.parentNode;</span> <span class="cstat-no" title="statement not covered" > offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);</span> <span class="cstat-no" title="statement not covered" > isCollapseToStart = !prevContainer;</span> } else { <span class="cstat-no" title="statement not covered" > node = container.childNodes[offset] || container;</span> <span class="cstat-no" title="statement not covered" > if (dom.isText(node)) {</span> <span class="cstat-no" title="statement not covered" > return textRangeInfo(node, 0);</span> } <span class="cstat-no" title="statement not covered" > offset = 0;</span> <span class="cstat-no" title="statement not covered" > isCollapseToStart = false;</span> } <span class="cstat-no" title="statement not covered" > return {</span> node: node, collapseToStart: isCollapseToStart, offset: offset }; }; <span class="cstat-no" title="statement not covered" > const textRange = document.body.createTextRange();</span> <span class="cstat-no" title="statement not covered" > const info = textRangeInfo(point.node, point.offset);</span> <span class="cstat-no" title="statement not covered" > textRange.moveToElementText(info.node);</span> <span class="cstat-no" title="statement not covered" > textRange.collapse(info.collapseToStart);</span> <span class="cstat-no" title="statement not covered" > textRange.moveStart('character', info.offset);</span> <span class="cstat-no" title="statement not covered" > return textRange;</span> } /** * Wrapped Range * * @constructor * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset */ class WrappedRange { constructor(sc, so, ec, eo) { this.sc = sc; this.so = so; this.ec = ec; this.eo = eo; // isOnEditable: judge whether range is on editable or not this.isOnEditable = this.makeIsOn(dom.isEditable); // isOnList: judge whether range is on list node or not this.isOnList = this.makeIsOn(dom.isList); // isOnAnchor: judge whether range is on anchor node or not this.isOnAnchor = this.makeIsOn(dom.isAnchor); // isOnCell: judge whether range is on cell node or not this.isOnCell = this.makeIsOn(dom.isCell); // isOnData: judge whether range is on data node or not this.isOnData = this.makeIsOn(dom.isData); } // nativeRange: get nativeRange from sc, so, ec, eo nativeRange() { <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isW3CRangeSupport) { const w3cRange = document.createRange(); w3cRange.setStart(this.sc, this.so); w3cRange.setEnd(this.ec, this.eo); return w3cRange; } else { <span class="cstat-no" title="statement not covered" > const textRange = pointToTextRange({</span> node: this.sc, offset: this.so }); <span class="cstat-no" title="statement not covered" > textRange.setEndPoint('EndToEnd', pointToTextRange({</span> node: this.ec, offset: this.eo })); <span class="cstat-no" title="statement not covered" > return textRange;</span> } } getPoints() { return { sc: this.sc, so: this.so, ec: this.ec, eo: this.eo }; } getStartPoint() { return { node: this.sc, offset: this.so }; } getEndPoint() { return { node: this.ec, offset: this.eo }; } /** * select update visible range */ select() { const nativeRng = this.nativeRange(); <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isW3CRangeSupport) { const selection = document.getSelection(); if (selection.rangeCount > 0) { selection.removeAllRanges(); } selection.addRange(nativeRng); } else { <span class="cstat-no" title="statement not covered" > nativeRng.select();</span> } return this; } /** * Moves the scrollbar to start container(sc) of current range * * @return {WrappedRange} */ scrollIntoView(container) { const height = $(container).height(); <span class="missing-if-branch" title="if path not taken" >I</span>if (container.scrollTop + height < this.sc.offsetTop) { <span class="cstat-no" title="statement not covered" > container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);</span> } return this; } /** * @return {WrappedRange} */ normalize() { /** * @param {BoundaryPoint} point * @param {Boolean} isLeftToRight * @return {BoundaryPoint} */ const getVisiblePoint = function(point, isLeftToRight) { if ((dom.isVisiblePoint(point) && !dom.isEdgePoint(point)) || (dom.isVisiblePoint(point) && dom.isRightEdgePoint(point) && !isLeftToRight) || (dom.isVisiblePoint(point) && dom.isLeftEdgePoint(point) && isLeftToRight) || (dom.isVisiblePoint(point) && dom.isBlock(point.node) && dom.isEmpty(point.node))) { return point; } // point on block's edge const block = dom.ancestor(point.node, dom.isBlock); if (((dom.isLeftEdgePointOf(point, block) || dom.isVoid(dom.prevPoint(point).node)) && !isLeftToRight) || ((dom.isRightEdgePointOf(point, block) || dom.isVoid(dom.nextPoint(point).node)) && isLeftToRight)) { // returns point already on visible point if (dom.isVisiblePoint(point)) { return point; } // reverse direction isLeftToRight = !isLeftToRight; } const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint) : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint); return nextPoint || <span class="branch-1 cbranch-no" title="branch not covered" >point;</span> }; const endPoint = getVisiblePoint(this.getEndPoint(), false); const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true); return new WrappedRange( startPoint.node, startPoint.offset, endPoint.node, endPoint.offset ); } /** * returns matched nodes on range * * @param {Function} [pred] - predicate function * @param {Object} [options] * @param {Boolean} [options.includeAncestor] * @param {Boolean} [options.fullyContains] * @return {Node[]} */ nodes(pred, options) { pred = pred || func.ok; const includeAncestor = options && options.includeAncestor; const fullyContains = options && options.fullyContains; // TODO compare points and sort const startPoint = this.getStartPoint(); const endPoint = this.getEndPoint(); const nodes = []; const leftEdgeNodes = []; dom.walkPoint(startPoint, endPoint, function(point) { if (dom.isEditable(point.node)) { return; } let node; if (fullyContains) { if (dom.isLeftEdgePoint(point)) { leftEdgeNodes.push(point.node); } if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) { node = point.node; } } else if (includeAncestor) { node = dom.ancestor(point.node, pred); } else { node = point.node; } if (node && pred(node)) { nodes.push(node); } }, true); return lists.unique(nodes); } /** * returns commonAncestor of range * @return {Element} - commonAncestor */ commonAncestor() { return dom.commonAncestor(this.sc, this.ec); } /** * returns expanded range by pred * * @param {Function} pred - predicate function * @return {WrappedRange} */ expand(pred) { const startAncestor = dom.ancestor(this.sc, pred); const endAncestor = dom.ancestor(this.ec, pred); <span class="missing-if-branch" title="if path not taken" >I</span>if (!startAncestor && <span class="branch-1 cbranch-no" title="branch not covered" >!endAncestor)</span> { <span class="cstat-no" title="statement not covered" > return new WrappedRange(this.sc, this.so, this.ec, this.eo);</span> } const boundaryPoints = this.getPoints(); <span class="missing-if-branch" title="else path not taken" >E</span>if (startAncestor) { boundaryPoints.sc = startAncestor; boundaryPoints.so = 0; } <span class="missing-if-branch" title="else path not taken" >E</span>if (endAncestor) { boundaryPoints.ec = endAncestor; boundaryPoints.eo = dom.nodeLength(endAncestor); } return new WrappedRange( boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo ); } /** * @param {Boolean} isCollapseToStart * @return {WrappedRange} */ collapse(isCollapseToStart) { if (isCollapseToStart) { return new WrappedRange(this.sc, this.so, this.sc, this.so); } else { return new WrappedRange(this.ec, this.eo, this.ec, this.eo); } } /** * splitText on range */ splitText() { const isSameContainer = this.sc === this.ec; const boundaryPoints = this.getPoints(); if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) { this.ec.splitText(this.eo); } if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) { boundaryPoints.sc = this.sc.splitText(this.so); boundaryPoints.so = 0; if (isSameContainer) { boundaryPoints.ec = boundaryPoints.sc; boundaryPoints.eo = this.eo - this.so; } } return new WrappedRange( boundaryPoints.sc, boundaryPoints.so, boundaryPoints.ec, boundaryPoints.eo ); } /** * delete contents on range * @return {WrappedRange} */ deleteContents() { if (this.isCollapsed()) { return this; } const rng = this.splitText(); const nodes = rng.nodes(null, { fullyContains: true }); // find new cursor point const point = dom.prevPointUntil(rng.getStartPoint(), function(point) { return !lists.contains(nodes, point.node); }); const emptyParents = []; $.each(nodes, function(idx, node) { // find empty parents const parent = node.parentNode; if (point.node !== parent && dom.nodeLength(parent) === 1) { emptyParents.push(parent); } dom.remove(node, false); }); // remove empty parents $.each(emptyParents, function(idx, node) { dom.remove(node, false); }); return new WrappedRange( point.node, point.offset, point.node, point.offset ).normalize(); } /** * makeIsOn: return isOn(pred) function */ makeIsOn(pred) { return function() { const ancestor = dom.ancestor(this.sc, pred); return !!ancestor && (ancestor === dom.ancestor(this.ec, pred)); }; } /** * @param {Function} pred * @return {Boolean} */ <span class="fstat-no" title="function not covered" > isLeftEdgeOf(pred)</span> { <span class="cstat-no" title="statement not covered" > if (!dom.isLeftEdgePoint(this.getStartPoint())) {</span> <span class="cstat-no" title="statement not covered" > return false;</span> } <span class="cstat-no" title="statement not covered" > const node = dom.ancestor(this.sc, pred);</span> <span class="cstat-no" title="statement not covered" > return node && dom.isLeftEdgeOf(this.sc, node);</span> } /** * returns whether range was collapsed or not */ isCollapsed() { return this.sc === this.ec && this.so === this.eo; } /** * wrap inline nodes which children of body with paragraph * * @return {WrappedRange} */ wrapBodyInlineWithPara() { if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) { this.sc.innerHTML = dom.emptyPara; return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0); } /** * [workaround] firefox often create range on not visible point. so normalize here. * - firefox: |<p>text</p>| * - chrome: <p>|text|</p> */ const rng = this.normalize(); if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) { return rng; } // find inline top ancestor let topAncestor; if (dom.isInline(rng.sc)) { const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline)); topAncestor = lists.last(ancestors); if (!dom.isInline(topAncestor)) { topAncestor = ancestors[ancestors.length - 2] || <span class="branch-1 cbranch-no" title="branch not covered" >rng.sc.childNodes[rng.so];</span> } } else { topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : <span class="branch-1 cbranch-no" title="branch not covered" >0]</span>; } // siblings not in paragraph let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse(); inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline)); // wrap with paragraph if (inlineSiblings.length) { const para = dom.wrap(lists.head(inlineSiblings), 'p'); dom.appendChildNodes(para, lists.tail(inlineSiblings)); } return this.normalize(); } /** * insert node at current cursor * * @param {Node} node * @return {Node} */ insertNode(node) { const rng = this.wrapBodyInlineWithPara().deleteContents(); const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node)); if (info.rightNode) { info.rightNode.parentNode.insertBefore(node, info.rightNode); } else { info.container.appendChild(node); } return node; } /** * insert html at current cursor */ pasteHTML(markup) { const contentsContainer = $('<div></div>').html(markup)[0]; const childNodes = lists.from(contentsContainer.childNodes); const rng = this.wrapBodyInlineWithPara().deleteContents(); return childNodes.reverse().map(function(childNode) { return rng.insertNode(childNode); }).reverse(); } /** * returns text in range * * @return {String} */ toString() { const nativeRng = this.nativeRange(); return env.isW3CRangeSupport ? nativeRng.toString() : <span class="branch-1 cbranch-no" title="branch not covered" >nativeRng.text;</span> } /** * returns range for word before cursor * * @param {Boolean} [findAfter] - find after cursor, default: false * @return {WrappedRange} */ getWordRange(findAfter) { let endPoint = this.getEndPoint(); if (!dom.isCharPoint(endPoint)) { return this; } const startPoint = dom.prevPointUntil(endPoint, function(point) { return !dom.isCharPoint(point); }); <span class="missing-if-branch" title="if path not taken" >I</span>if (findAfter) { <span class="cstat-no" title="statement not covered" > endPoint = dom.nextPointUntil(endPoint, <span class="fstat-no" title="function not covered" >function(point)</span> {</span> <span class="cstat-no" title="statement not covered" > return !dom.isCharPoint(point);</span> }); } return new WrappedRange( startPoint.node, startPoint.offset, endPoint.node, endPoint.offset ); } /** * create offsetPath bookmark * * @param {Node} editable */ bookmark(editable) { return { s: { path: dom.makeOffsetPath(editable, this.sc), offset: this.so }, e: { path: dom.makeOffsetPath(editable, this.ec), offset: this.eo } }; } /** * create offsetPath bookmark base on paragraph * * @param {Node[]} paras */ paraBookmark(paras) { return { s: { path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)), offset: this.so }, e: { path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)), offset: this.eo } }; } /** * getClientRects * @return {Rect[]} */ <span class="fstat-no" title="function not covered" > getClientRects() {</span> <span class="cstat-no" title="statement not covered" > const nativeRng = this.nativeRange();</span> <span class="cstat-no" title="statement not covered" > return nativeRng.getClientRects();</span> } } /** * Data structure * * BoundaryPoint: a point of dom tree * * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range * * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position */ export default { /** * create Range Object From arguments or Browser Selection * * @param {Node} sc - start container * @param {Number} so - start offset * @param {Node} ec - end container * @param {Number} eo - end offset * @return {WrappedRange} */ create: function(sc, so, ec, eo) { if (arguments.length === 4) { return new WrappedRange(sc, so, ec, eo); } else if (arguments.length === 2) { // collapsed ec = sc; eo = so; return new WrappedRange(sc, so, ec, eo); } else { let wrappedRange = this.createFromSelection(); if (!wrappedRange && arguments.length === 1) { wrappedRange = this.createFromNode(arguments[0]); return wrappedRange.collapse(dom.emptyPara === arguments[0].innerHTML); } return wrappedRange; } }, createFromSelection: function() { let sc, so, ec, eo; <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isW3CRangeSupport) { const selection = document.getSelection(); if (!selection || selection.rangeCount === 0) { return null; } else if (dom.isBody(selection.anchorNode)) { // Firefox: returns entire body as range on initialization. // We won't never need it. return null; } const nativeRng = selection.getRangeAt(0); sc = nativeRng.startContainer; so = nativeRng.startOffset; ec = nativeRng.endContainer; eo = nativeRng.endOffset; } else { // IE8: TextRange <span class="cstat-no" title="statement not covered" > const textRange = document.selection.createRange();</span> <span class="cstat-no" title="statement not covered" > const textRangeEnd = textRange.duplicate();</span> <span class="cstat-no" title="statement not covered" > textRangeEnd.collapse(false);</span> <span class="cstat-no" title="statement not covered" > const textRangeStart = textRange;</span> <span class="cstat-no" title="statement not covered" > textRangeStart.collapse(true);</span> <span class="cstat-no" title="statement not covered" > let startPoint = textRangeToPoint(textRangeStart, true);</span> <span class="cstat-no" title="statement not covered" > let endPoint = textRangeToPoint(textRangeEnd, false);</span> // same visible point case: range was collapsed. <span class="cstat-no" title="statement not covered" > if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&</span> dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) && endPoint.node.nextSibling === startPoint.node) { <span class="cstat-no" title="statement not covered" > startPoint = endPoint;</span> } <span class="cstat-no" title="statement not covered" > sc = startPoint.cont;</span> <span class="cstat-no" title="statement not covered" > so = startPoint.offset;</span> <span class="cstat-no" title="statement not covered" > ec = endPoint.cont;</span> <span class="cstat-no" title="statement not covered" > eo = endPoint.offset;</span> } return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from node * * @param {Node} node * @return {WrappedRange} */ createFromNode: function(node) { let sc = node; let so = 0; let ec = node; let eo = dom.nodeLength(ec); // browsers can't target a picture or void node if (dom.isVoid(sc)) { so = dom.listPrev(sc).length - 1; sc = sc.parentNode; } <span class="missing-if-branch" title="if path not taken" >I</span>if (dom.isBR(ec)) { <span class="cstat-no" title="statement not covered" > eo = dom.listPrev(ec).length - 1;</span> <span class="cstat-no" title="statement not covered" > ec = ec.parentNode;</span> } else if (dom.isVoid(ec)) { eo = dom.listPrev(ec).length; ec = ec.parentNode; } return this.create(sc, so, ec, eo); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeBefore: function(node) { return this.createFromNode(node).collapse(true); }, /** * create WrappedRange from node after position * * @param {Node} node * @return {WrappedRange} */ createFromNodeAfter: function(node) { return this.createFromNode(node).collapse(); }, /** * @method * * create WrappedRange from bookmark * * @param {Node} editable * @param {Object} bookmark * @return {WrappedRange} */ createFromBookmark: function(editable, bookmark) { const sc = dom.fromOffsetPath(editable, bookmark.s.path); const so = bookmark.s.offset; const ec = dom.fromOffsetPath(editable, bookmark.e.path); const eo = bookmark.e.offset; return new WrappedRange(sc, so, ec, eo); }, /** * @method * * create WrappedRange from paraBookmark * * @param {Object} bookmark * @param {Node[]} paras * @return {WrappedRange} */ createFromParaBookmark: function(bookmark, paras) { const so = bookmark.s.offset; const eo = bookmark.e.offset; const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path); const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path); return new WrappedRange(sc, so, ec, eo); } }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\����mmMcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/async.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/async.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> async.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">53.33% </span> <span class="quiet">Statements</span> <span class='fraction'>8/15</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">37.5% </span> <span class="quiet">Functions</span> <span class='fraction'>3/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">53.33% </span> <span class="quiet">Lines</span> <span class='fraction'>8/15</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; /** * @method readFileAsDataURL * * read contents of file as representing URL * * @param {File} file * @return {Promise} - then: dataUrl */ <span class="fstat-no" title="function not covered" >export function readFileAsDataURL(file)</span> { <span class="cstat-no" title="statement not covered" > return $.Deferred(<span class="fstat-no" title="function not covered" >(deferred)</span> => {</span> <span class="cstat-no" title="statement not covered" > $.extend(new FileReader(), {</span> onload: <span class="fstat-no" title="function not covered" >(e)</span> => { <span class="cstat-no" title="statement not covered" > const dataURL = e.target.result;</span> <span class="cstat-no" title="statement not covered" > deferred.resolve(dataURL);</span> }, onerror: <span class="fstat-no" title="function not covered" >(err)</span> => { <span class="cstat-no" title="statement not covered" > deferred.reject(err);</span> } }).readAsDataURL(file); }).promise(); } /** * @method createImage * * create `<image>` from url string * * @param {String} url * @return {Promise} - then: $image */ export function createImage(url) { return $.Deferred((deferred) => { const $img = $('<img>'); $img.one('load', () => { $img.off('error abort'); deferred.resolve($img); }).one('error abort', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > $img.off('load').detach();</span> <span class="cstat-no" title="statement not covered" > deferred.reject($img);</span> }).css({ display: 'none' }).appendTo(document.body).attr('src', url); }).promise(); } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��U#U#Kcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/key.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/key.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> key.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>6/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>2/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>6/6</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import lists from './lists'; import func from './func'; const KEY_MAP = { 'BACKSPACE': 8, 'TAB': 9, 'ENTER': 13, 'SPACE': 32, 'DELETE': 46, // Arrow 'LEFT': 37, 'UP': 38, 'RIGHT': 39, 'DOWN': 40, // Number: 0-9 'NUM0': 48, 'NUM1': 49, 'NUM2': 50, 'NUM3': 51, 'NUM4': 52, 'NUM5': 53, 'NUM6': 54, 'NUM7': 55, 'NUM8': 56, // Alphabet: a-z 'B': 66, 'E': 69, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'R': 82, 'S': 83, 'U': 85, 'V': 86, 'Y': 89, 'Z': 90, 'SLASH': 191, 'LEFTBRACKET': 219, 'BACKSLASH': 220, 'RIGHTBRACKET': 221 }; /** * @class core.key * * Object for keycodes. * * @singleton * @alternateClassName key */ export default { /** * @method isEdit * * @param {Number} keyCode * @return {Boolean} */ isEdit: (keyCode) => { return lists.contains([ KEY_MAP.BACKSPACE, KEY_MAP.TAB, KEY_MAP.ENTER, KEY_MAP.SPACE, KEY_MAP.DELETE ], keyCode); }, /** * @method isMove * * @param {Number} keyCode * @return {Boolean} */ isMove: (keyCode) => { return lists.contains([ KEY_MAP.LEFT, KEY_MAP.UP, KEY_MAP.RIGHT, KEY_MAP.DOWN ], keyCode); }, /** * @property {Object} nameFromCode * @property {String} nameFromCode.8 "BACKSPACE" */ nameFromCode: func.invertObject(KEY_MAP), code: KEY_MAP }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��Rd~I~IMcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/lists.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/lists.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> lists.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">87.14% </span> <span class="quiet">Statements</span> <span class='fraction'>61/70</span> </div> <div class='fl pad1y space-right2'> <span class="strong">75% </span> <span class="quiet">Branches</span> <span class='fraction'>15/20</span> </div> <div class='fl pad1y space-right2'> <span class="strong">88.89% </span> <span class="quiet">Functions</span> <span class='fraction'>16/18</span> </div> <div class='fl pad1y space-right2'> <span class="strong">90.91% </span> <span class="quiet">Lines</span> <span class='fraction'>60/66</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1958×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">958×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1069×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">441×</span> <span class="cline-any cline-yes">446×</span> <span class="cline-any cline-yes">294×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">147×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">111×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">111×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1056×</span> <span class="cline-any cline-yes">1056×</span> <span class="cline-any cline-yes">1056×</span> <span class="cline-any cline-yes">1056×</span> <span class="cline-any cline-yes">1944×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1056×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">291×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">71×</span> <span class="cline-any cline-yes">37×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import func from './func'; /** * returns the first item of an array. * * @param {Array} array */ function head(array) { return array[0]; } /** * returns the last item of an array. * * @param {Array} array */ function last(array) { return array[array.length - 1]; } /** * returns everything but the last entry of the array. * * @param {Array} array */ function initial(array) { return array.slice(0, array.length - 1); } /** * returns the rest of the items in an array. * * @param {Array} array */ function tail(array) { return array.slice(1); } /** * returns item of array */ function find(array, pred) { for (let idx = 0, len = array.length; idx < len; idx++) { const item = array[idx]; if (pred(item)) { return item; } } } /** * returns true if all of the values in the array pass the predicate truth test. */ function all(array, pred) { for (let idx = 0, len = array.length; idx < len; idx++) { if (!pred(array[idx])) { return false; } } return true; } /** * returns index of item */ function indexOf(array, item) { return $.inArray(item, array); } /** * returns true if the value is present in the list. */ function contains(array, item) { return indexOf(array, item) !== -1; } /** * get sum from a list * * @param {Array} array - array * @param {Function} fn - iterator */ function sum(array, fn) { fn = fn || func.self; return array.reduce(function(memo, v) { return memo + fn(v); }, 0); } /** * returns a copy of the collection with array type. * @param {Collection} collection - collection eg) node.childNodes, ... */ function from(collection) { const result = []; const length = collection.length; let idx = -1; while (++idx < length) { result[idx] = collection[idx]; } return result; } /** * returns whether list is empty or not */ function isEmpty(array) { return !array || !array.length; } /** * cluster elements by predicate function. * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule * @param {Array[]} */ function clusterBy(array, fn) { <span class="missing-if-branch" title="if path not taken" >I</span>if (!array.length) { <span class="cstat-no" title="statement not covered" >return []; </span>} const aTail = tail(array); return aTail.reduce(function(memo, v) { const aLast = last(memo); if (fn(last(aLast), v)) { aLast[aLast.length] = v; } else { memo[memo.length] = [v]; } return memo; }, [[head(array)]]); } /** * returns a copy of the array with all false values removed * * @param {Array} array - array * @param {Function} fn - predicate function for cluster rule */ function compact(array) { const aResult = []; for (let idx = 0, len = array.length; idx < len; idx++) { if (array[idx]) { aResult.push(array[idx]); } } return aResult; } /** * produces a duplicate-free version of the array * * @param {Array} array */ function unique(array) { const results = []; for (let idx = 0, len = array.length; idx < len; idx++) { if (!contains(results, array[idx])) { results.push(array[idx]); } } return results; } /** * returns next item. * @param {Array} array */ <span class="fstat-no" title="function not covered" >function next(array, item)</span> { <span class="cstat-no" title="statement not covered" > const idx = indexOf(array, item);</span> <span class="cstat-no" title="statement not covered" > if (idx === -1) { <span class="cstat-no" title="statement not covered" >return null; </span>}</span> <span class="cstat-no" title="statement not covered" > return array[idx + 1];</span> } /** * returns prev item. * @param {Array} array */ <span class="fstat-no" title="function not covered" >function prev(array, item)</span> { <span class="cstat-no" title="statement not covered" > const idx = indexOf(array, item);</span> <span class="cstat-no" title="statement not covered" > if (idx === -1) { <span class="cstat-no" title="statement not covered" >return null; </span>}</span> <span class="cstat-no" title="statement not covered" > return array[idx - 1];</span> } /** * @class core.list * * list utils * * @singleton * @alternateClassName list */ export default { head, last, initial, tail, prev, next, find, contains, all, sum, from, isEmpty, clusterBy, compact, unique }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\79^�2�2Kcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/env.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/env.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> env.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">52.78% </span> <span class="quiet">Statements</span> <span class='fraction'>19/36</span> </div> <div class='fl pad1y space-right2'> <span class="strong">51.35% </span> <span class="quiet">Branches</span> <span class='fraction'>19/37</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>1/1</span> </div> <div class='fl pad1y space-right2'> <span class="strong">52.78% </span> <span class="quiet">Lines</span> <span class='fraction'>19/36</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; const isSupportAmd = typeof define === 'function' && <span class="branch-1 cbranch-no" title="branch not covered" >define.amd;</span> // eslint-disable-line /** * returns whether font is installed or not. * * @param {String} fontName * @return {Boolean} */ function isFontInstalled(fontName) { const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS'; const $tester = $('<div>').css({ position: 'absolute', left: '-9999px', top: '-9999px', fontSize: '200px' }).text('mmmmmmmmmwwwwwww').appendTo(document.body); const originalWidth = $tester.css('fontFamily', testFontName).width(); const width = $tester.css('fontFamily', fontName + ',' + testFontName).width(); $tester.remove(); return originalWidth !== width; } const userAgent = navigator.userAgent; const isMSIE = /MSIE|Trident/i.test(userAgent); let browserVersion; <span class="missing-if-branch" title="if path not taken" >I</span>if (isMSIE) { <span class="cstat-no" title="statement not covered" > let matches = /MSIE (\d+[.]\d+)/.exec(userAgent);</span> <span class="cstat-no" title="statement not covered" > if (matches) {</span> <span class="cstat-no" title="statement not covered" > browserVersion = parseFloat(matches[1]);</span> } <span class="cstat-no" title="statement not covered" > matches = /Trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);</span> <span class="cstat-no" title="statement not covered" > if (matches) {</span> <span class="cstat-no" title="statement not covered" > browserVersion = parseFloat(matches[1]);</span> } } const isEdge = /Edge\/\d+/.test(userAgent); let hasCodeMirror = !!window.CodeMirror; <span class="missing-if-branch" title="if path not taken" >I</span>if (!hasCodeMirror && isSupportAmd) { // Webpack <span class="cstat-no" title="statement not covered" > if (typeof __webpack_require__ === 'function') { // eslint-disable-line</span> <span class="cstat-no" title="statement not covered" > try {</span> // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. <span class="cstat-no" title="statement not covered" > require.resolve('codemirror');</span> <span class="cstat-no" title="statement not covered" > hasCodeMirror = true;</span> } catch (e) { // do nothing } } else <span class="cstat-no" title="statement not covered" >if (typeof require !== 'undefined') {</span> // Browserify <span class="cstat-no" title="statement not covered" > if (typeof require.resolve !== 'undefined') {</span> <span class="cstat-no" title="statement not covered" > try {</span> // If CodeMirror can't be resolved, `require.resolve` will throw an // exception and `hasCodeMirror` won't be set to `true`. <span class="cstat-no" title="statement not covered" > require.resolve('codemirror');</span> <span class="cstat-no" title="statement not covered" > hasCodeMirror = true;</span> } catch (e) { // do nothing } // Almond/Require } else <span class="cstat-no" title="statement not covered" >if (typeof require.specified !== 'undefined') {</span> <span class="cstat-no" title="statement not covered" > hasCodeMirror = require.specified('codemirror');</span> } } } const isSupportTouch = (('ontouchstart' in window) || (<span class="branch-1 cbranch-no" title="branch not covered" >navigator.MaxTouchPoints > 0)</span> || (<span class="branch-2 cbranch-no" title="branch not covered" >navigator.msMaxTouchPoints > 0)</span>); // [workaround] IE doesn't have input events for contentEditable // - see: https://goo.gl/4bfIvA const inputEventName = (isMSIE || isEdge) ? <span class="branch-0 cbranch-no" title="branch not covered" >'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' </span>: 'input'; /** * @class core.env * * Object which check platform and agent * * @singleton * @alternateClassName env */ export default { isMac: navigator.appVersion.indexOf('Mac') > -1, isMSIE, isEdge, isFF: !isEdge && /firefox/i.test(userAgent), isPhantom: /PhantomJS/i.test(userAgent), isWebkit: !isEdge && /webkit/i.test(userAgent), isChrome: !isEdge && /chrome/i.test(userAgent), isSafari: !isEdge && /safari/i.test(userAgent), browserVersion, jqueryVersion: parseFloat($.fn.jquery), isSupportAmd, isSupportTouch, hasCodeMirror, isFontInstalled, isW3CRangeSupport: !!document.createRange, inputEventName }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\.���Jcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> src/js/base/core/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">82.09% </span> <span class="quiet">Statements</span> <span class='fraction'>706/860</span> </div> <div class='fl pad1y space-right2'> <span class="strong">75.62% </span> <span class="quiet">Branches</span> <span class='fraction'>366/484</span> </div> <div class='fl pad1y space-right2'> <span class="strong">88.1% </span> <span class="quiet">Functions</span> <span class='fraction'>148/168</span> </div> <div class='fl pad1y space-right2'> <span class="strong">82.27% </span> <span class="quiet">Lines</span> <span class='fraction'>696/846</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file medium" data-value="async.js"><a href="async.js.html">async.js</a></td> <td data-value="53.33" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 53%;"></div><div class="cover-empty" style="width:47%;"></div></div></td> <td data-value="53.33" class="pct medium">53.33%</td> <td data-value="15" class="abs medium">8/15</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="37.5" class="pct low">37.5%</td> <td data-value="8" class="abs low">3/8</td> <td data-value="53.33" class="pct medium">53.33%</td> <td data-value="15" class="abs medium">8/15</td> </tr> <tr> <td class="file high" data-value="dom.js"><a href="dom.js.html">dom.js</a></td> <td data-value="89.65" class="pic high"><div class="chart"><div class="cover-fill" style="width: 89%;"></div><div class="cover-empty" style="width:11%;"></div></div></td> <td data-value="89.65" class="pct high">89.65%</td> <td data-value="367" class="abs high">329/367</td> <td data-value="84.39" class="pct high">84.39%</td> <td data-value="237" class="abs high">200/237</td> <td data-value="91.67" class="pct high">91.67%</td> <td data-value="72" class="abs high">66/72</td> <td data-value="89.64" class="pct high">89.64%</td> <td data-value="357" class="abs high">320/357</td> </tr> <tr> <td class="file medium" data-value="env.js"><a href="env.js.html">env.js</a></td> <td data-value="52.78" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 52%;"></div><div class="cover-empty" style="width:48%;"></div></div></td> <td data-value="52.78" class="pct medium">52.78%</td> <td data-value="36" class="abs medium">19/36</td> <td data-value="51.35" class="pct medium">51.35%</td> <td data-value="37" class="abs medium">19/37</td> <td data-value="100" class="pct high">100%</td> <td data-value="1" class="abs high">1/1</td> <td data-value="52.78" class="pct medium">52.78%</td> <td data-value="36" class="abs medium">19/36</td> </tr> <tr> <td class="file high" data-value="func.js"><a href="func.js.html">func.js</a></td> <td data-value="94.55" class="pic high"><div class="chart"><div class="cover-fill" style="width: 94%;"></div><div class="cover-empty" style="width:6%;"></div></div></td> <td data-value="94.55" class="pct high">94.55%</td> <td data-value="55" class="abs high">52/55</td> <td data-value="64.29" class="pct medium">64.29%</td> <td data-value="14" class="abs medium">9/14</td> <td data-value="95.45" class="pct high">95.45%</td> <td data-value="22" class="abs high">21/22</td> <td data-value="94.55" class="pct high">94.55%</td> <td data-value="55" class="abs high">52/55</td> </tr> <tr> <td class="file high" data-value="key.js"><a href="key.js.html">key.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="6" class="abs high">6/6</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="2" class="abs high">2/2</td> <td data-value="100" class="pct high">100%</td> <td data-value="6" class="abs high">6/6</td> </tr> <tr> <td class="file high" data-value="lists.js"><a href="lists.js.html">lists.js</a></td> <td data-value="87.14" class="pic high"><div class="chart"><div class="cover-fill" style="width: 87%;"></div><div class="cover-empty" style="width:13%;"></div></div></td> <td data-value="87.14" class="pct high">87.14%</td> <td data-value="70" class="abs high">61/70</td> <td data-value="75" class="pct medium">75%</td> <td data-value="20" class="abs medium">15/20</td> <td data-value="88.89" class="pct high">88.89%</td> <td data-value="18" class="abs high">16/18</td> <td data-value="90.91" class="pct high">90.91%</td> <td data-value="66" class="abs high">60/66</td> </tr> <tr> <td class="file medium" data-value="range.js"><a href="range.js.html">range.js</a></td> <td data-value="74.28" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 74%;"></div><div class="cover-empty" style="width:26%;"></div></div></td> <td data-value="74.28" class="pct medium">74.28%</td> <td data-value="311" class="abs medium">231/311</td> <td data-value="69.89" class="pct medium">69.89%</td> <td data-value="176" class="abs medium">123/176</td> <td data-value="86.67" class="pct high">86.67%</td> <td data-value="45" class="abs high">39/45</td> <td data-value="74.28" class="pct medium">74.28%</td> <td data-value="311" class="abs medium">231/311</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�m��;�;Lcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/func.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/func.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> func.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">94.55% </span> <span class="quiet">Statements</span> <span class='fraction'>52/55</span> </div> <div class='fl pad1y space-right2'> <span class="strong">64.29% </span> <span class="quiet">Branches</span> <span class='fraction'>9/14</span> </div> <div class='fl pad1y space-right2'> <span class="strong">95.45% </span> <span class="quiet">Functions</span> <span class='fraction'>21/22</span> </div> <div class='fl pad1y space-right2'> <span class="strong">94.55% </span> <span class="quiet">Lines</span> <span class='fraction'>52/55</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">317×</span> <span class="cline-any cline-yes">514×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1854×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">220×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">210×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">464×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">2115×</span> <span class="cline-any cline-yes">2115×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">172×</span> <span class="cline-any cline-yes">172×</span> <span class="cline-any cline-yes">227×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">81×</span> <span class="cline-any cline-yes">80×</span> <span class="cline-any cline-yes">80×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * @class core.func * * func utils (for high-order func's arg) * * @singleton * @alternateClassName func */ function eq(itemA) { return function(itemB) { return itemA === itemB; }; } function eq2(itemA, itemB) { return itemA === itemB; } function peq2(propName) { return function(itemA, itemB) { return itemA[propName] === itemB[propName]; }; } function ok() { return true; } function fail() { return false; } function not(f) { return () => { return !f.apply(f, arguments); }; } function and(fA, fB) { return function(item) { return fA(item) && fB(item); }; } function self(a) { return a; } function invoke(obj, method) { return () => { return obj[method].apply(obj, arguments); }; } let idCounter = 0; /** * generate a globally-unique id * * @param {String} [prefix] */ function uniqueId(prefix) { const id = ++idCounter + ''; return prefix ? prefix + id : <span class="branch-1 cbranch-no" title="branch not covered" >id;</span> } /** * returns bnd (bounds) from rect * * - IE Compatibility Issue: http://goo.gl/sRLOAo * - Scroll Issue: http://goo.gl/sNjUc * * @param {Rect} rect * @return {Object} bounds * @return {Number} bounds.top * @return {Number} bounds.left * @return {Number} bounds.width * @return {Number} bounds.height */ <span class="fstat-no" title="function not covered" >function rect2bnd(rect)</span> { <span class="cstat-no" title="statement not covered" > const $document = $(document);</span> <span class="cstat-no" title="statement not covered" > return {</span> top: rect.top + $document.scrollTop(), left: rect.left + $document.scrollLeft(), width: rect.right - rect.left, height: rect.bottom - rect.top }; } /** * returns a copy of the object where the keys have become the values and the values the keys. * @param {Object} obj * @return {Object} */ function invertObject(obj) { const inverted = {}; for (const key in obj) { <span class="missing-if-branch" title="else path not taken" >E</span>if (obj.hasOwnProperty(key)) { inverted[obj[key]] = key; } } return inverted; } /** * @param {String} namespace * @param {String} [prefix] * @return {String} */ function namespaceToCamel(namespace, prefix) { prefix = prefix || ''; return prefix + namespace.split('.').map(function(name) { return name.substring(0, 1).toUpperCase() + name.substring(1); }).join(''); } /** * Returns a function, that, as long as it continues to be invoked, will not * be triggered. The function will be called after it stops being called for * N milliseconds. If `immediate` is passed, trigger the function on the * leading edge, instead of the trailing. * @param {Function} func * @param {Number} wait * @param {Boolean} immediate * @return {Function} */ function debounce(func, wait, immediate) { let timeout; return () => { const context = this; const args = arguments; const later = () => { timeout = null; <span class="missing-if-branch" title="else path not taken" >E</span>if (!immediate) { func.apply(context, args); } }; const callNow = immediate && <span class="branch-1 cbranch-no" title="branch not covered" >!timeout;</span> clearTimeout(timeout); timeout = setTimeout(later, wait); <span class="missing-if-branch" title="if path not taken" >I</span>if (callNow) { <span class="cstat-no" title="statement not covered" > func.apply(context, args);</span> } }; } export default { eq, eq2, peq2, ok, fail, self, not, and, invoke, uniqueId, rect2bnd, invertObject, namespaceToCamel, debounce }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�2ӌkkKcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/dom.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/core/dom.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/core/</a> dom.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">89.65% </span> <span class="quiet">Statements</span> <span class='fraction'>329/367</span> </div> <div class='fl pad1y space-right2'> <span class="strong">84.39% </span> <span class="quiet">Branches</span> <span class='fraction'>200/237</span> </div> <div class='fl pad1y space-right2'> <span class="strong">91.67% </span> <span class="quiet">Functions</span> <span class='fraction'>66/72</span> </div> <div class='fl pad1y space-right2'> <span class="strong">89.64% </span> <span class="quiet">Lines</span> <span class='fraction'>320/357</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3458×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">2010×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3125×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">835×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">720×</span> <span class="cline-any cline-yes">51×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">669×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">363×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">423×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">535×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">432×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1368×</span> <span class="cline-any cline-yes">378×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">990×</span> <span class="cline-any cline-yes">990×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">464×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">464×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">463×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">439×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">439×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">50×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">796×</span> <span class="cline-any cline-yes">1745×</span> <span class="cline-any cline-yes">1092×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">951×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">143×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">437×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">437×</span> <span class="cline-any cline-yes">437×</span> <span class="cline-any cline-yes">942×</span> <span class="cline-any cline-yes">597×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">942×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">437×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">34×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">32×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">32×</span> <span class="cline-any cline-yes">32×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">32×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">59×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">59×</span> <span class="cline-any cline-yes">59×</span> <span class="cline-any cline-yes">40×</span> <span class="cline-any cline-yes">39×</span> <span class="cline-any cline-yes">39×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">59×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-yes">25×</span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">25×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">43×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">392×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">343×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">167×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">33×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">23×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">32×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">63×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">63×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">62×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">101×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">251×</span> <span class="cline-any cline-yes">251×</span> <span class="cline-any cline-yes">63×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">251×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">782×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">227×</span> <span class="cline-any cline-yes">227×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">227×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">219×</span> <span class="cline-any cline-yes">204×</span> <span class="cline-any cline-yes">204×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-yes">15×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">227×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">134×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">134×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">120×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">71×</span> <span class="cline-any cline-yes">71×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">134×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">120×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">718×</span> <span class="cline-any cline-yes">307×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">411×</span> <span class="cline-any cline-yes">411×</span> <span class="cline-any cline-yes">411×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">410×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">75×</span> <span class="cline-any cline-yes">166×</span> <span class="cline-any cline-yes">75×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">91×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-yes">25×</span> <span class="cline-any cline-yes">16×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">21×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">21×</span> <span class="cline-any cline-yes">21×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-yes">120×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">120×</span> <span class="cline-any cline-yes">28×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">92×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">92×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">277×</span> <span class="cline-any cline-yes">277×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">60×</span> <span class="cline-any cline-yes">60×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">60×</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">25×</span> <span class="cline-any cline-yes">25×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">37×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">37×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">37×</span> <span class="cline-any cline-yes">19×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">23×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">23×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-yes">22×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">27×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">30×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">11×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">385×</span> <span class="cline-any cline-yes">924×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">24×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import func from './func'; import lists from './lists'; import env from './env'; const NBSP_CHAR = String.fromCharCode(160); const ZERO_WIDTH_NBSP_CHAR = '\ufeff'; /** * @method isEditable * * returns whether node is `note-editable` or not. * * @param {Node} node * @return {Boolean} */ function isEditable(node) { return node && $(node).hasClass('note-editable'); } /** * @method isControlSizing * * returns whether node is `note-control-sizing` or not. * * @param {Node} node * @return {Boolean} */ <span class="fstat-no" title="function not covered" >function isControlSizing(node)</span> { <span class="cstat-no" title="statement not covered" > return node && $(node).hasClass('note-control-sizing');</span> } /** * @method makePredByNodeName * * returns predicate which judge whether nodeName is same * * @param {String} nodeName * @return {Function} */ function makePredByNodeName(nodeName) { nodeName = nodeName.toUpperCase(); return function(node) { return node && node.nodeName.toUpperCase() === nodeName; }; } /** * @method isText * * * * @param {Node} node * @return {Boolean} true if node's type is text(3) */ function isText(node) { return node && node.nodeType === 3; } /** * @method isElement * * * * @param {Node} node * @return {Boolean} true if node's type is element(1) */ function isElement(node) { return node && node.nodeType === 1; } /** * ex) br, col, embed, hr, img, input, ... * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements */ function isVoid(node) { return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT/.test(node.nodeName.toUpperCase()); } function isPara(node) { if (isEditable(node)) { return false; } // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase()); } function isHeading(node) { return node && /^H[1-7]/.test(node.nodeName.toUpperCase()); } const isPre = makePredByNodeName('PRE'); const isLi = makePredByNodeName('LI'); function isPurePara(node) { return isPara(node) && !isLi(node); } const isTable = makePredByNodeName('TABLE'); const isData = makePredByNodeName('DATA'); function isInline(node) { return !isBodyContainer(node) && !isList(node) && !isHr(node) && !isPara(node) && !isTable(node) && !isBlockquote(node) && !isData(node); } function isList(node) { return node && /^UL|^OL/.test(node.nodeName.toUpperCase()); } const isHr = makePredByNodeName('HR'); function isCell(node) { return node && /^TD|^TH/.test(node.nodeName.toUpperCase()); } const isBlockquote = makePredByNodeName('BLOCKQUOTE'); function isBodyContainer(node) { return isCell(node) || isBlockquote(node) || isEditable(node); } const isAnchor = makePredByNodeName('A'); function isParaInline(node) { return isInline(node) && !!ancestor(node, isPara); } <span class="fstat-no" title="function not covered" >function isBodyInline(node)</span> { <span class="cstat-no" title="statement not covered" > return isInline(node) && !ancestor(node, isPara);</span> } const isBody = makePredByNodeName('BODY'); /** * returns whether nodeB is closest sibling of nodeA * * @param {Node} nodeA * @param {Node} nodeB * @return {Boolean} */ <span class="fstat-no" title="function not covered" >function isClosestSibling(nodeA, nodeB)</span> { <span class="cstat-no" title="statement not covered" > return nodeA.nextSibling === nodeB ||</span> nodeA.previousSibling === nodeB; } /** * returns array of closest siblings with node * * @param {Node} node * @param {function} [pred] - predicate function * @return {Node[]} */ function withClosestSiblings(node, pred) { pred = pred || <span class="branch-1 cbranch-no" title="branch not covered" >func.ok;</span> const siblings = []; <span class="missing-if-branch" title="if path not taken" >I</span>if (node.previousSibling && <span class="branch-1 cbranch-no" title="branch not covered" >pred(node.previousSibling))</span> { <span class="cstat-no" title="statement not covered" > siblings.push(node.previousSibling);</span> } siblings.push(node); if (node.nextSibling && pred(node.nextSibling)) { siblings.push(node.nextSibling); } return siblings; } /** * blank HTML for cursor position * - [workaround] old IE only works with &nbsp; * - [workaround] IE11 and other browser works with bogus br */ const blankHTML = env.isMSIE && <span class="branch-1 cbranch-no" title="branch not covered" >env.browserVersion < 11 </span>? <span class="branch-0 cbranch-no" title="branch not covered" >'&nbsp;' </span>: '<br>'; /** * @method nodeLength * * returns #text's text size or element's childNodes size * * @param {Node} node */ function nodeLength(node) { if (isText(node)) { return node.nodeValue.length; } <span class="missing-if-branch" title="else path not taken" >E</span>if (node) { return node.childNodes.length; } <span class="cstat-no" title="statement not covered" > return 0;</span> } /** * returns whether node is empty or not. * * @param {Node} node * @return {Boolean} */ function isEmpty(node) { const len = nodeLength(node); if (len === 0) { return true; } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) { // ex) <p><br></p>, <span><br></span> return true; } else <span class="missing-if-branch" title="if path not taken" >I</span>if (lists.all(node.childNodes, isText) && node.innerHTML === '') { // ex) <p></p>, <span></span> <span class="cstat-no" title="statement not covered" > return true;</span> } return false; } /** * padding blankHTML if node is empty (for cursor position) */ function paddingBlankHTML(node) { if (!isVoid(node) && !nodeLength(node)) { node.innerHTML = blankHTML; } } /** * find nearest ancestor predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function ancestor(node, pred) { while (node) { if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * find nearest ancestor only single child blood line and predicate hit * * @param {Node} node * @param {Function} pred - predicate function */ function singleChildAncestor(node, pred) { node = node.parentNode; while (node) { if (nodeLength(node) !== 1) { break; } if (pred(node)) { return node; } if (isEditable(node)) { break; } node = node.parentNode; } return null; } /** * returns new array of ancestor nodes (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listAncestor(node, pred) { pred = pred || func.fail; const ancestors = []; ancestor(node, function(el) { if (!isEditable(el)) { ancestors.push(el); } return pred(el); }); return ancestors; } /** * find farthest ancestor predicate hit */ function lastAncestor(node, pred) { const ancestors = listAncestor(node); return lists.last(ancestors.filter(pred)); } /** * returns common ancestor node between two nodes. * * @param {Node} nodeA * @param {Node} nodeB */ function commonAncestor(nodeA, nodeB) { const ancestors = listAncestor(nodeA); for (let n = nodeB; n; n = n.parentNode) { if ($.inArray(n, ancestors) > -1) { return n; } } <span class="cstat-no" title="statement not covered" > return null; </span>// difference document area } /** * listing all previous siblings (until predicate hit). * * @param {Node} node * @param {Function} [optional] pred - predicate function */ function listPrev(node, pred) { pred = pred || func.fail; const nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.previousSibling; } return nodes; } /** * listing next siblings (until predicate hit). * * @param {Node} node * @param {Function} [pred] - predicate function */ function listNext(node, pred) { pred = pred || func.fail; const nodes = []; while (node) { if (pred(node)) { break; } nodes.push(node); node = node.nextSibling; } return nodes; } /** * listing descendant nodes * * @param {Node} node * @param {Function} [pred] - predicate function */ function listDescendant(node, pred) { const descendants = []; pred = pred || func.ok; // start DFS(depth first search) with node (function fnWalk(current) { if (node !== current && pred(current)) { descendants.push(current); } for (let idx = 0, len = current.childNodes.length; idx < len; idx++) { fnWalk(current.childNodes[idx]); } })(node); return descendants; } /** * wrap node with new tag. * * @param {Node} node * @param {Node} tagName of wrapper * @return {Node} - wrapper */ function wrap(node, wrapperName) { const parent = node.parentNode; const wrapper = $('<' + wrapperName + '>')[0]; parent.insertBefore(wrapper, node); wrapper.appendChild(node); return wrapper; } /** * insert node after preceding * * @param {Node} node * @param {Node} preceding - predicate function */ function insertAfter(node, preceding) { const next = preceding.nextSibling; let parent = preceding.parentNode; if (next) { parent.insertBefore(node, next); } else { parent.appendChild(node); } return node; } /** * append elements. * * @param {Node} node * @param {Collection} aChild */ function appendChildNodes(node, aChild) { $.each(aChild, function(idx, child) { node.appendChild(child); }); return node; } /** * returns whether boundaryPoint is left edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isLeftEdgePoint(point) { return point.offset === 0; } /** * returns whether boundaryPoint is right edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isRightEdgePoint(point) { return point.offset === nodeLength(point.node); } /** * returns whether boundaryPoint is edge or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isEdgePoint(point) { return isLeftEdgePoint(point) || isRightEdgePoint(point); } /** * returns whether node is left edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgeOf(node, ancestor) { while (node && node !== ancestor) { if (position(node) !== 0) { return false; } node = node.parentNode; } return true; } /** * returns whether node is right edge of ancestor or not. * * @param {Node} node * @param {Node} ancestor * @return {Boolean} */ function isRightEdgeOf(node, ancestor) { <span class="missing-if-branch" title="if path not taken" >I</span>if (!ancestor) { <span class="cstat-no" title="statement not covered" > return false;</span> } while (node && node !== ancestor) { if (position(node) !== nodeLength(node.parentNode) - 1) { return false; } node = node.parentNode; } return true; } /** * returns whether point is left edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isLeftEdgePointOf(point, ancestor) { return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor); } /** * returns whether point is right edge of ancestor or not. * @param {BoundaryPoint} point * @param {Node} ancestor * @return {Boolean} */ function isRightEdgePointOf(point, ancestor) { return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor); } /** * returns offset from parent. * * @param {Node} node */ function position(node) { let offset = 0; while ((node = node.previousSibling)) { offset += 1; } return offset; } function hasChildren(node) { return !!(node && node.childNodes && node.childNodes.length); } /** * returns previous boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function prevPoint(point, isSkipInnerOffset) { let node; let offset; if (point.offset === 0) { <span class="missing-if-branch" title="if path not taken" >I</span>if (isEditable(point.node)) { <span class="cstat-no" title="statement not covered" > return null;</span> } node = point.node.parentNode; offset = position(point.node); } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset - 1]; offset = nodeLength(node); } else { node = point.node; offset = isSkipInnerOffset ? <span class="branch-0 cbranch-no" title="branch not covered" >0 </span>: point.offset - 1; } return { node: node, offset: offset }; } /** * returns next boundaryPoint * * @param {BoundaryPoint} point * @param {Boolean} isSkipInnerOffset * @return {BoundaryPoint} */ function nextPoint(point, isSkipInnerOffset) { let node, offset; if (nodeLength(point.node) === point.offset) { <span class="missing-if-branch" title="if path not taken" >I</span>if (isEditable(point.node)) { <span class="cstat-no" title="statement not covered" > return null;</span> } node = point.node.parentNode; offset = position(point.node) + 1; } else if (hasChildren(point.node)) { node = point.node.childNodes[point.offset]; offset = 0; } else { node = point.node; offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1; } return { node: node, offset: offset }; } /** * returns whether pointA and pointB is same or not. * * @param {BoundaryPoint} pointA * @param {BoundaryPoint} pointB * @return {Boolean} */ function isSamePoint(pointA, pointB) { return pointA.node === pointB.node && pointA.offset === pointB.offset; } /** * returns whether point is visible (can set cursor) or not. * * @param {BoundaryPoint} point * @return {Boolean} */ function isVisiblePoint(point) { if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) { return true; } const leftNode = point.node.childNodes[point.offset - 1]; const rightNode = point.node.childNodes[point.offset]; if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) { return true; } return false; } /** * @method prevPointUtil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function prevPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = prevPoint(point); } <span class="cstat-no" title="statement not covered" > return null;</span> } /** * @method nextPointUntil * * @param {BoundaryPoint} point * @param {Function} pred * @return {BoundaryPoint} */ function nextPointUntil(point, pred) { while (point) { if (pred(point)) { return point; } point = nextPoint(point); } <span class="cstat-no" title="statement not covered" > return null;</span> } /** * returns whether point has character or not. * * @param {Point} point * @return {Boolean} */ function isCharPoint(point) { <span class="missing-if-branch" title="if path not taken" >I</span>if (!isText(point.node)) { <span class="cstat-no" title="statement not covered" > return false;</span> } const ch = point.node.nodeValue.charAt(point.offset - 1); return ch && (ch !== ' ' && ch !== NBSP_CHAR); } /** * @method walkPoint * * @param {BoundaryPoint} startPoint * @param {BoundaryPoint} endPoint * @param {Function} handler * @param {Boolean} isSkipInnerOffset */ function walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) { let point = startPoint; while (point) { handler(point); if (isSamePoint(point, endPoint)) { break; } const isSkipOffset = isSkipInnerOffset && startPoint.node !== point.node && endPoint.node !== point.node; point = nextPoint(point, isSkipOffset); } } /** * @method makeOffsetPath * * return offsetPath(array of offset) from ancestor * * @param {Node} ancestor - ancestor node * @param {Node} node */ function makeOffsetPath(ancestor, node) { const ancestors = listAncestor(node, func.eq(ancestor)); return ancestors.map(position).reverse(); } /** * @method fromOffsetPath * * return element from offsetPath(array of offset) * * @param {Node} ancestor - ancestor node * @param {array} offsets - offsetPath */ function fromOffsetPath(ancestor, offsets) { let current = ancestor; for (let i = 0, len = offsets.length; i < len; i++) { <span class="missing-if-branch" title="if path not taken" >I</span>if (current.childNodes.length <= offsets[i]) { <span class="cstat-no" title="statement not covered" > current = current.childNodes[current.childNodes.length - 1];</span> } else { current = current.childNodes[offsets[i]]; } } return current; } /** * @method splitNode * * split element or #text * * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitNode(point, options) { const isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML; const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint; // edge case if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) { if (isLeftEdgePoint(point)) { return point.node; } else <span class="missing-if-branch" title="else path not taken" >E</span>if (isRightEdgePoint(point)) { return point.node.nextSibling; } } // split #text if (isText(point.node)) { return point.node.splitText(point.offset); } else { const childNode = point.node.childNodes[point.offset]; const clone = insertAfter(point.node.cloneNode(false), point.node); appendChildNodes(clone, listNext(childNode)); if (!isSkipPaddingBlankHTML) { paddingBlankHTML(point.node); paddingBlankHTML(clone); } return clone; } } /** * @method splitTree * * split tree by point * * @param {Node} root - split root * @param {BoundaryPoint} point * @param {Object} [options] * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false * @param {Boolean} [options.isNotSplitEdgePoint] - default: false * @return {Node} right node of boundaryPoint */ function splitTree(root, point, options) { // ex) [#text, <span>, <p>] const ancestors = listAncestor(point.node, func.eq(root)); <span class="missing-if-branch" title="if path not taken" >I</span>if (!ancestors.length) { <span class="cstat-no" title="statement not covered" > return null;</span> } else if (ancestors.length === 1) { return splitNode(point, options); } return ancestors.reduce(function(node, parent) { if (node === point.node) { node = splitNode(point, options); } return splitNode({ node: parent, offset: node ? position(node) : nodeLength(parent) }, options); }); } /** * split point * * @param {Point} point * @param {Boolean} isInline * @return {Object} */ function splitPoint(point, isInline) { // find splitRoot, container // - inline: splitRoot is a child of paragraph // - block: splitRoot is a child of bodyContainer const pred = isInline ? isPara : isBodyContainer; const ancestors = listAncestor(point.node, pred); const topAncestor = lists.last(ancestors) || <span class="branch-1 cbranch-no" title="branch not covered" >point.node;</span> let splitRoot, container; if (pred(topAncestor)) { splitRoot = ancestors[ancestors.length - 2]; container = topAncestor; } else { splitRoot = topAncestor; container = splitRoot.parentNode; } // if splitRoot is exists, split with splitTree let pivot = splitRoot && splitTree(splitRoot, point, { isSkipPaddingBlankHTML: isInline, isNotSplitEdgePoint: isInline }); // if container is point.node, find pivot with point.offset if (!pivot && container === point.node) { pivot = point.node.childNodes[point.offset]; } return { rightNode: pivot, container: container }; } function create(nodeName) { return document.createElement(nodeName); } function createText(text) { return document.createTextNode(text); } /** * @method remove * * remove node, (isRemoveChild: remove child or not) * * @param {Node} node * @param {Boolean} isRemoveChild */ function remove(node, isRemoveChild) { if (!node || !node.parentNode) { return; } <span class="missing-if-branch" title="if path not taken" >I</span>if (node.removeNode) { <span class="cstat-no" title="statement not covered" >return node.removeNode(isRemoveChild); </span>} const parent = node.parentNode; if (!isRemoveChild) { const nodes = []; for (let i = 0, len = node.childNodes.length; i < len; i++) { <span class="cstat-no" title="statement not covered" > nodes.push(node.childNodes[i]);</span> } for (let i = 0, len = nodes.length; i < len; i++) { <span class="cstat-no" title="statement not covered" > parent.insertBefore(nodes[i], node);</span> } } parent.removeChild(node); } /** * @method removeWhile * * @param {Node} node * @param {Function} pred */ <span class="fstat-no" title="function not covered" >function removeWhile(node, pred)</span> { <span class="cstat-no" title="statement not covered" > while (node) {</span> <span class="cstat-no" title="statement not covered" > if (isEditable(node) || !pred(node)) {</span> <span class="cstat-no" title="statement not covered" > break;</span> } <span class="cstat-no" title="statement not covered" > const parent = node.parentNode;</span> <span class="cstat-no" title="statement not covered" > remove(node);</span> <span class="cstat-no" title="statement not covered" > node = parent;</span> } } /** * @method replace * * replace node with provided nodeName * * @param {Node} node * @param {String} nodeName * @return {Node} - new node */ function replace(node, nodeName) { <span class="missing-if-branch" title="if path not taken" >I</span>if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) { <span class="cstat-no" title="statement not covered" > return node;</span> } const newNode = create(nodeName); <span class="missing-if-branch" title="if path not taken" >I</span>if (node.style.cssText) { <span class="cstat-no" title="statement not covered" > newNode.style.cssText = node.style.cssText;</span> } appendChildNodes(newNode, lists.from(node.childNodes)); insertAfter(newNode, node); remove(node); return newNode; } const isTextarea = makePredByNodeName('TEXTAREA'); /** * @param {jQuery} $node * @param {Boolean} [stripLinebreaks] - default: false */ function value($node, stripLinebreaks) { const val = isTextarea($node[0]) ? $node.val() : $node.html(); <span class="missing-if-branch" title="if path not taken" >I</span>if (stripLinebreaks) { <span class="cstat-no" title="statement not covered" > return val.replace(/[\n\r]/g, '');</span> } return val; } /** * @method html * * get the HTML contents of node * * @param {jQuery} $node * @param {Boolean} [isNewlineOnBlock] */ function html($node, isNewlineOnBlock) { let markup = value($node); <span class="missing-if-branch" title="if path not taken" >I</span>if (isNewlineOnBlock) { <span class="cstat-no" title="statement not covered" > const regexTag = /<(\/?)(\b(?!!)[^>\s]*)(.*?)(\s*\/?>)/g;</span> <span class="cstat-no" title="statement not covered" > markup = markup.replace(regexTag, <span class="fstat-no" title="function not covered" >function(match, endSlash, name)</span> {</span> <span class="cstat-no" title="statement not covered" > name = name.toUpperCase();</span> <span class="cstat-no" title="statement not covered" > const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&</span> !!endSlash; <span class="cstat-no" title="statement not covered" > const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);</span> <span class="cstat-no" title="statement not covered" > return match + ((isEndOfInlineContainer || isBlockNode) ? '\n' : '');</span> }); <span class="cstat-no" title="statement not covered" > markup = $.trim(markup);</span> } return markup; } <span class="fstat-no" title="function not covered" >function posFromPlaceholder(placeholder)</span> { <span class="cstat-no" title="statement not covered" > const $placeholder = $(placeholder);</span> <span class="cstat-no" title="statement not covered" > const pos = $placeholder.offset();</span> <span class="cstat-no" title="statement not covered" > const height = $placeholder.outerHeight(true); </span>// include margin <span class="cstat-no" title="statement not covered" > return {</span> left: pos.left, top: pos.top + height }; } function attachEvents($node, events) { Object.keys(events).forEach(function(key) { $node.on(key, events[key]); }); } function detachEvents($node, events) { Object.keys(events).forEach(function(key) { $node.off(key, events[key]); }); } /** * @method isCustomStyleTag * * assert if a node contains a "note-styletag" class, * which implies that's a custom-made style tag node * * @param {Node} an HTML DOM node */ function isCustomStyleTag(node) { return node && !isText(node) && lists.contains(node.classList, 'note-styletag'); } export default { /** @property {String} NBSP_CHAR */ NBSP_CHAR, /** @property {String} ZERO_WIDTH_NBSP_CHAR */ ZERO_WIDTH_NBSP_CHAR, /** @property {String} blank */ blank: blankHTML, /** @property {String} emptyPara */ emptyPara: `<p>${blankHTML}</p>`, makePredByNodeName, isEditable, isControlSizing, isText, isElement, isVoid, isPara, isPurePara, isHeading, isInline, isBlock: func.not(isInline), isBodyInline, isBody, isParaInline, isPre, isList, isTable, isData, isCell, isBlockquote, isBodyContainer, isAnchor, isDiv: makePredByNodeName('DIV'), isLi, isBR: makePredByNodeName('BR'), isSpan: makePredByNodeName('SPAN'), isB: makePredByNodeName('B'), isU: makePredByNodeName('U'), isS: makePredByNodeName('S'), isI: makePredByNodeName('I'), isImg: makePredByNodeName('IMG'), isTextarea, isEmpty, isEmptyAnchor: func.and(isAnchor, isEmpty), isClosestSibling, withClosestSiblings, nodeLength, isLeftEdgePoint, isRightEdgePoint, isEdgePoint, isLeftEdgeOf, isRightEdgeOf, isLeftEdgePointOf, isRightEdgePointOf, prevPoint, nextPoint, isSamePoint, isVisiblePoint, prevPointUntil, nextPointUntil, isCharPoint, walkPoint, ancestor, singleChildAncestor, listAncestor, lastAncestor, listNext, listPrev, listDescendant, commonAncestor, wrap, insertAfter, appendChildNodes, position, hasChildren, makeOffsetPath, fromOffsetPath, splitTree, splitPoint, create, createText, remove, removeWhile, replace, html, value, posFromPlaceholder, attachEvents, detachEvents, isCustomStyleTag }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��VP8P8Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Codeview.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Codeview.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Codeview.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">66.67% </span> <span class="quiet">Statements</span> <span class='fraction'>42/63</span> </div> <div class='fl pad1y space-right2'> <span class="strong">45.83% </span> <span class="quiet">Branches</span> <span class='fraction'>11/24</span> </div> <div class='fl pad1y space-right2'> <span class="strong">66.67% </span> <span class="quiet">Functions</span> <span class='fraction'>8/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">66.67% </span> <span class="quiet">Lines</span> <span class='fraction'>42/63</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import env from '../core/env'; import dom from '../core/dom'; let CodeMirror; <span class="missing-if-branch" title="if path not taken" >I</span>if (env.hasCodeMirror) { <span class="cstat-no" title="statement not covered" > if (env.isSupportAmd) {</span> <span class="cstat-no" title="statement not covered" > require(['codemirror'], <span class="fstat-no" title="function not covered" >function(cm)</span> {</span> <span class="cstat-no" title="statement not covered" > CodeMirror = cm;</span> }); } else { <span class="cstat-no" title="statement not covered" > CodeMirror = window.CodeMirror;</span> } } /** * @class Codeview */ export default class CodeView { constructor(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.options = context.options; } sync() { const isCodeview = this.isActivated(); <span class="missing-if-branch" title="if path not taken" >I</span>if (isCodeview && <span class="branch-1 cbranch-no" title="branch not covered" >env.hasCodeMirror)</span> { <span class="cstat-no" title="statement not covered" > this.$codable.data('cmEditor').save();</span> } } /** * @return {Boolean} */ isActivated() { return this.$editor.hasClass('codeview'); } /** * toggle codeview */ toggle() { if (this.isActivated()) { this.deactivate(); } else { this.activate(); } this.context.triggerEvent('codeview.toggled'); } /** * activate code view */ activate() { this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml)); this.$codable.height(this.$editable.height()); this.context.invoke('toolbar.updateCodeview', true); this.$editor.addClass('codeview'); this.$codable.focus(); // activate CodeMirror as codable <span class="missing-if-branch" title="if path not taken" >I</span>if (env.hasCodeMirror) { <span class="cstat-no" title="statement not covered" > const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);</span> // CodeMirror TernServer <span class="cstat-no" title="statement not covered" > if (this.options.codemirror.tern) {</span> <span class="cstat-no" title="statement not covered" > const server = new CodeMirror.TernServer(this.options.codemirror.tern);</span> <span class="cstat-no" title="statement not covered" > cmEditor.ternServer = server;</span> <span class="cstat-no" title="statement not covered" > cmEditor.on('cursorActivity', <span class="fstat-no" title="function not covered" >(cm)</span> => {</span> <span class="cstat-no" title="statement not covered" > server.updateArgHints(cm);</span> }); } <span class="cstat-no" title="statement not covered" > cmEditor.on('blur', <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);</span> }); // CodeMirror hasn't Padding. <span class="cstat-no" title="statement not covered" > cmEditor.setSize(null, this.$editable.outerHeight());</span> <span class="cstat-no" title="statement not covered" > this.$codable.data('cmEditor', cmEditor);</span> } else { this.$codable.on('blur', <span class="fstat-no" title="function not covered" >(event)</span> => { <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('blur.codeview', this.$codable.val(), event);</span> }); } } /** * deactivate code view */ deactivate() { // deactivate CodeMirror as codable <span class="missing-if-branch" title="if path not taken" >I</span>if (env.hasCodeMirror) { <span class="cstat-no" title="statement not covered" > const cmEditor = this.$codable.data('cmEditor');</span> <span class="cstat-no" title="statement not covered" > this.$codable.val(cmEditor.getValue());</span> <span class="cstat-no" title="statement not covered" > cmEditor.toTextArea();</span> } const value = dom.value(this.$codable, this.options.prettifyHtml) || <span class="branch-1 cbranch-no" title="branch not covered" >dom.emptyPara;</span> const isChange = this.$editable.html() !== value; this.$editable.html(value); this.$editable.height(this.options.height ? <span class="branch-0 cbranch-no" title="branch not covered" >this.$codable.height() </span>: 'auto'); this.$editor.removeClass('codeview'); <span class="missing-if-branch" title="if path not taken" >I</span>if (isChange) { <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('change', this.$editable.html(), this.$editable);</span> } this.$editable.focus(); this.context.invoke('toolbar.updateCodeview', false); } destroy() { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.isActivated()) { <span class="cstat-no" title="statement not covered" > this.deactivate();</span> } } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\���� Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/TablePopover.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/TablePopover.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> TablePopover.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">91.43% </span> <span class="quiet">Statements</span> <span class='fraction'>32/35</span> </div> <div class='fl pad1y space-right2'> <span class="strong">66.67% </span> <span class="quiet">Branches</span> <span class='fraction'>4/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>10/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">91.43% </span> <span class="quiet">Lines</span> <span class='fraction'>32/35</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import lists from '../core/lists'; import dom from '../core/dom'; export default class TablePopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.options = context.options; this.events = { 'summernote.mousedown': (we, e) => { this.update(e.target); }, 'summernote.keyup summernote.scroll summernote.change': () => { this.update(); }, 'summernote.disable': () => { this.hide(); } }; } shouldInitialize() { return !lists.isEmpty(this.options.popover.table); } initialize() { this.$popover = this.ui.popover({ className: 'note-table-popover' }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.table); // [workaround] Disable Firefox's default table editor <span class="missing-if-branch" title="if path not taken" >I</span>if (env.isFF) { <span class="cstat-no" title="statement not covered" > document.execCommand('enableInlineTableEditing', false, false);</span> } } destroy() { this.$popover.remove(); } update(target) { if (this.context.isDisabled()) { return false; } const isCell = dom.isCell(target); <span class="missing-if-branch" title="if path not taken" >I</span>if (isCell) { <span class="cstat-no" title="statement not covered" > const pos = dom.posFromPlaceholder(target);</span> <span class="cstat-no" title="statement not covered" > this.$popover.css({</span> display: 'block', left: pos.left, top: pos.top }); } else { this.hide(); } return isCell; } hide() { this.$popover.hide(); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\_ϒ�C�CUcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/ImageDialog.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/ImageDialog.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> ImageDialog.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">40% </span> <span class="quiet">Statements</span> <span class='fraction'>26/65</span> </div> <div class='fl pad1y space-right2'> <span class="strong">14.29% </span> <span class="quiet">Branches</span> <span class='fraction'>2/14</span> </div> <div class='fl pad1y space-right2'> <span class="strong">25% </span> <span class="quiet">Functions</span> <span class='fraction'>4/16</span> </div> <div class='fl pad1y space-right2'> <span class="strong">40% </span> <span class="quiet">Lines</span> <span class='fraction'>26/65</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; export default class ImageDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } initialize() { const $container = this.options.dialogsInBody ? <span class="branch-0 cbranch-no" title="branch not covered" >this.$body </span>: this.$editor; let imageLimitation = ''; <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.maximumImageFileSize) { <span class="cstat-no" title="statement not covered" > const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));</span> <span class="cstat-no" title="statement not covered" > const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +</span> ' ' + ' KMGTP'[unit] + 'B'; <span class="cstat-no" title="statement not covered" > imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`;</span> } const body = [ '<div class="form-group note-form-group note-group-select-from-files">', '<label class="note-form-label">' + this.lang.image.selectFromFiles + '</label>', '<input class="note-image-input note-form-control note-input" ', ' type="file" name="files" accept="image/*" multiple="multiple" />', imageLimitation, '</div>', '<div class="form-group note-group-image-url" style="overflow:auto;">', '<label class="note-form-label">' + this.lang.image.url + '</label>', '<input class="note-image-url form-control note-form-control note-input ', ' col-md-12" type="text" />', '</div>' ].join(''); const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn'; const footer = `<button type="submit" href="#" class="${buttonClass}" disabled>${this.lang.image.insert}</button>`; this.$dialog = this.ui.dialog({ title: this.lang.image.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } <span class="fstat-no" title="function not covered" > bindEnterKey($input, $btn)</span> { <span class="cstat-no" title="statement not covered" > $input.on('keypress', <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > if (event.keyCode === key.code.ENTER) {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > $btn.trigger('click');</span> } }); } <span class="fstat-no" title="function not covered" > show() {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.saveRange');</span> <span class="cstat-no" title="statement not covered" > this.showImageDialog().then(<span class="fstat-no" title="function not covered" >(data)</span> => {</span> // [workaround] hide dialog before restore range for IE range focus <span class="cstat-no" title="statement not covered" > this.ui.hideDialog(this.$dialog);</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> <span class="cstat-no" title="statement not covered" > if (typeof data === 'string') { // image url</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.insertImage', data);</span> } else { // array of files <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.insertImagesOrCallback', data);</span> } }).fail(<span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> }); } /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ <span class="fstat-no" title="function not covered" > showImageDialog() {</span> <span class="cstat-no" title="statement not covered" > return $.Deferred(<span class="fstat-no" title="function not covered" >(deferred)</span> => {</span> <span class="cstat-no" title="statement not covered" > const $imageInput = this.$dialog.find('.note-image-input');</span> <span class="cstat-no" title="statement not covered" > const $imageUrl = this.$dialog.find('.note-image-url');</span> <span class="cstat-no" title="statement not covered" > const $imageBtn = this.$dialog.find('.note-image-btn');</span> <span class="cstat-no" title="statement not covered" > this.ui.onDialogShown(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('dialog.shown');</span> // Cloning imageInput to clear element. <span class="cstat-no" title="statement not covered" > $imageInput.replaceWith($imageInput.clone().on('change', <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > deferred.resolve(event.target.files || event.target.value);</span> }).val('')); <span class="cstat-no" title="statement not covered" > $imageBtn.click(<span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > deferred.resolve($imageUrl.val());</span> }); <span class="cstat-no" title="statement not covered" > $imageUrl.on('keyup paste', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > const url = $imageUrl.val();</span> <span class="cstat-no" title="statement not covered" > this.ui.toggleBtn($imageBtn, url);</span> }).val(''); <span class="cstat-no" title="statement not covered" > if (!env.isSupportTouch) {</span> <span class="cstat-no" title="statement not covered" > $imageUrl.trigger('focus');</span> } <span class="cstat-no" title="statement not covered" > this.bindEnterKey($imageUrl, $imageBtn);</span> }); <span class="cstat-no" title="statement not covered" > this.ui.onDialogHidden(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > $imageInput.off('change');</span> <span class="cstat-no" title="statement not covered" > $imageUrl.off('keyup paste keypress');</span> <span class="cstat-no" title="statement not covered" > $imageBtn.off('click');</span> <span class="cstat-no" title="statement not covered" > if (deferred.state() === 'pending') {</span> <span class="cstat-no" title="statement not covered" > deferred.reject();</span> } }); <span class="cstat-no" title="statement not covered" > this.ui.showDialog(this.$dialog);</span> }); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�<�fCBCBQcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Buttons.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Buttons.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Buttons.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">88.48% </span> <span class="quiet">Statements</span> <span class='fraction'>215/243</span> </div> <div class='fl pad1y space-right2'> <span class="strong">54.93% </span> <span class="quiet">Branches</span> <span class='fraction'>39/71</span> </div> <div class='fl pad1y space-right2'> <span class="strong">91.03% </span> <span class="quiet">Functions</span> <span class='fraction'>71/78</span> </div> <div class='fl pad1y space-right2'> <span class="strong">88.48% </span> <span class="quiet">Lines</span> <span class='fraction'>215/243</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">972×</span> <span class="cline-any cline-yes">972×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">972×</span> <span class="cline-any cline-yes">972×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">972×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">972×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3119×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3119×</span> <span class="cline-any cline-yes">3119×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">960×</span> <span class="cline-any cline-yes">892×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">960×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">693×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">693×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">36×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">36×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">36×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">36×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">40×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">847×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">36×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">308×</span> <span class="cline-any cline-yes">1050×</span> <span class="cline-any cline-yes">1050×</span> <span class="cline-any cline-yes">1050×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1050×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1050×</span> <span class="cline-any cline-yes">2584×</span> <span class="cline-any cline-yes">2584×</span> <span class="cline-any cline-yes">2584×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1050×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">143×</span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">826×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">826×</span> <span class="cline-any cline-yes">826×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">495×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">495×</span> <span class="cline-any cline-yes">495×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-yes">73×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">143×</span> <span class="cline-any cline-yes">142×</span> <span class="cline-any cline-yes">852×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import func from '../core/func'; import lists from '../core/lists'; import env from '../core/env'; export default class Buttons { constructor(context) { this.ui = $.summernote.ui; this.context = context; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.lang = this.options.langInfo; this.invertedKeyMap = func.invertObject( this.options.keyMap[env.isMac ? 'mac' : <span class="branch-1 cbranch-no" title="branch not covered" >'pc']</span> ); } representShortcut(editorMethod) { let shortcut = this.invertedKeyMap[editorMethod]; <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options.shortcuts || !shortcut) { <span class="cstat-no" title="statement not covered" > return '';</span> } <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isMac) { shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧'); } shortcut = shortcut.replace('BACKSLASH', '\\') .replace('SLASH', '/') .replace('LEFTBRACKET', '[') .replace('RIGHTBRACKET', ']'); return ' (' + shortcut + ')'; } button(o) { <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options.tooltip && <span class="branch-1 cbranch-no" title="branch not covered" >o.tooltip)</span> { <span class="cstat-no" title="statement not covered" > delete o.tooltip;</span> } o.container = this.options.container; return this.ui.button(o); } initialize() { this.addToolbarButtons(); this.addImagePopoverButtons(); this.addLinkPopoverButtons(); this.addTablePopoverButtons(); this.fontInstalledMap = {}; } destroy() { delete this.fontInstalledMap; } isFontInstalled(name) { if (!this.fontInstalledMap.hasOwnProperty(name)) { this.fontInstalledMap[name] = env.isFontInstalled(name) || <span class="branch-1 cbranch-no" title="branch not covered" > lists.contains(this.options.fontNamesIgnoreCheck, name);</span> } return this.fontInstalledMap[name]; } isFontDeservedToAdd(name) { const genericFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy']; name = name.toLowerCase(); return ((name !== '') && this.isFontInstalled(name) && ($.inArray(name, genericFamilies) === -1)); } addToolbarButtons() { this.context.memo('button.style', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents( this.ui.icon(this.options.icons.magic), this.options ), tooltip: this.lang.style.style, data: { toggle: 'dropdown' } }), this.ui.dropdown({ className: 'dropdown-style', items: this.options.styleTags, title: this.lang.style.style, template: (item) => { <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof item === 'string') { item = { tag: item, title: (this.lang.style.hasOwnProperty(item) ? this.lang.style[item] : <span class="branch-1 cbranch-no" title="branch not covered" >item)</span> }; } const tag = item.tag; const title = item.title; const style = item.style ? <span class="branch-0 cbranch-no" title="branch not covered" >' style="' + item.style + '" ' </span>: ''; const className = item.className ? <span class="branch-0 cbranch-no" title="branch not covered" >' class="' + item.className + '"' </span>: ''; return '<' + tag + style + className + '>' + title + '</' + tag + '>'; }, click: this.context.createInvokeHandler('editor.formatBlock') }) ]).render(); }); for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) { const item = this.options.styleTags[styleIdx]; this.context.memo('button.style.' + item, <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > return this.button({</span> className: 'note-btn-style-' + item, contents: '<div data-value="' + item + '">' + item.toUpperCase() + '</div>', tooltip: this.lang.style[item], click: this.context.createInvokeHandler('editor.formatBlock') }).render(); }); } this.context.memo('button.bold', () => { return this.button({ className: 'note-btn-bold', contents: this.ui.icon(this.options.icons.bold), tooltip: this.lang.font.bold + this.representShortcut('bold'), click: this.context.createInvokeHandlerAndUpdateState('editor.bold') }).render(); }); this.context.memo('button.italic', () => { return this.button({ className: 'note-btn-italic', contents: this.ui.icon(this.options.icons.italic), tooltip: this.lang.font.italic + this.representShortcut('italic'), click: this.context.createInvokeHandlerAndUpdateState('editor.italic') }).render(); }); this.context.memo('button.underline', () => { return this.button({ className: 'note-btn-underline', contents: this.ui.icon(this.options.icons.underline), tooltip: this.lang.font.underline + this.representShortcut('underline'), click: this.context.createInvokeHandlerAndUpdateState('editor.underline') }).render(); }); this.context.memo('button.clear', () => { return this.button({ contents: this.ui.icon(this.options.icons.eraser), tooltip: this.lang.font.clear + this.representShortcut('removeFormat'), click: this.context.createInvokeHandler('editor.removeFormat') }).render(); }); this.context.memo('button.strikethrough', () => { return this.button({ className: 'note-btn-strikethrough', contents: this.ui.icon(this.options.icons.strikethrough), tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'), click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough') }).render(); }); this.context.memo('button.superscript', () => { return this.button({ className: 'note-btn-superscript', contents: this.ui.icon(this.options.icons.superscript), tooltip: this.lang.font.superscript, click: this.context.createInvokeHandlerAndUpdateState('editor.superscript') }).render(); }); this.context.memo('button.subscript', () => { return this.button({ className: 'note-btn-subscript', contents: this.ui.icon(this.options.icons.subscript), tooltip: this.lang.font.subscript, click: this.context.createInvokeHandlerAndUpdateState('editor.subscript') }).render(); }); this.context.memo('button.fontname', () => { const styleInfo = this.context.invoke('editor.currentStyle'); // Add 'default' fonts into the fontnames array if not exist $.each(styleInfo['font-family'].split(','), (idx, fontname) => { fontname = fontname.trim().replace(/['"]+/g, ''); if (this.isFontDeservedToAdd(fontname)) { if ($.inArray(fontname, this.options.fontNames) === -1) { this.options.fontNames.push(fontname); } } }); return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents( '<span class="note-current-fontname"/>', this.options ), tooltip: this.lang.font.name, data: { toggle: 'dropdown' } }), this.ui.dropdownCheck({ className: 'dropdown-fontname', checkClassName: this.options.icons.menuCheck, items: this.options.fontNames.filter(this.isFontInstalled.bind(this)), title: this.lang.font.name, template: (item) => { return '<span style="font-family: \'' + item + '\'">' + item + '</span>'; }, click: this.context.createInvokeHandlerAndUpdateState('editor.fontName') }) ]).render(); }); this.context.memo('button.fontsize', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents('<span class="note-current-fontsize"/>', this.options), tooltip: this.lang.font.size, data: { toggle: 'dropdown' } }), this.ui.dropdownCheck({ className: 'dropdown-fontsize', checkClassName: this.options.icons.menuCheck, items: this.options.fontSizes, title: this.lang.font.size, click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize') }) ]).render(); }); this.context.memo('button.color', () => { return this.ui.buttonGroup({ className: 'note-color', children: [ this.button({ className: 'note-current-color-button', contents: this.ui.icon(this.options.icons.font + ' note-recent-color'), tooltip: this.lang.color.recent, click: (e) => { const $button = $(e.currentTarget); this.context.invoke('editor.color', { backColor: $button.attr('data-backColor'), foreColor: $button.attr('data-foreColor') }); }, callback: ($button) => { const $recentColor = $button.find('.note-recent-color'); $recentColor.css('background-color', '#FFFF00'); $button.attr('data-backColor', '#FFFF00'); } }), this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents('', this.options), tooltip: this.lang.color.more, data: { toggle: 'dropdown' } }), this.ui.dropdown({ items: [ '<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>', '<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>' ].join(''), callback: ($dropdown) => { $dropdown.find('.note-holder').each((idx, item) => { const $holder = $(item); $holder.append(this.ui.palette({ colors: this.options.colors, colorsName: this.options.colorsName, eventName: $holder.data('event'), container: this.options.container, tooltip: this.options.tooltip }).render()); }); }, click: (event) => { const $button = $(event.target); const eventName = $button.data('event'); const value = $button.data('value'); <span class="missing-if-branch" title="else path not taken" >E</span>if (eventName && value) { const key = eventName === 'backColor' ? 'background-color' : 'color'; const $color = $button.closest('.note-color').find('.note-recent-color'); const $currentButton = $button.closest('.note-color').find('.note-current-color-button'); $color.css(key, value); $currentButton.attr('data-' + eventName, value); this.context.invoke('editor.' + eventName, value); } } }) ] }).render(); }); this.context.memo('button.ul', () => { return this.button({ contents: this.ui.icon(this.options.icons.unorderedlist), tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'), click: this.context.createInvokeHandler('editor.insertUnorderedList') }).render(); }); this.context.memo('button.ol', () => { return this.button({ contents: this.ui.icon(this.options.icons.orderedlist), tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'), click: this.context.createInvokeHandler('editor.insertOrderedList') }).render(); }); const justifyLeft = this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'), click: this.context.createInvokeHandler('editor.justifyLeft') }); const justifyCenter = this.button({ contents: this.ui.icon(this.options.icons.alignCenter), tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'), click: this.context.createInvokeHandler('editor.justifyCenter') }); const justifyRight = this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'), click: this.context.createInvokeHandler('editor.justifyRight') }); const justifyFull = this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'), click: this.context.createInvokeHandler('editor.justifyFull') }); const outdent = this.button({ contents: this.ui.icon(this.options.icons.outdent), tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'), click: this.context.createInvokeHandler('editor.outdent') }); const indent = this.button({ contents: this.ui.icon(this.options.icons.indent), tooltip: this.lang.paragraph.indent + this.representShortcut('indent'), click: this.context.createInvokeHandler('editor.indent') }); this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render')); this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render')); this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render')); this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render')); this.context.memo('button.outdent', func.invoke(outdent, 'render')); this.context.memo('button.indent', func.invoke(indent, 'render')); this.context.memo('button.paragraph', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options), tooltip: this.lang.paragraph.paragraph, data: { toggle: 'dropdown' } }), this.ui.dropdown([ this.ui.buttonGroup({ className: 'note-align', children: [justifyLeft, justifyCenter, justifyRight, justifyFull] }), this.ui.buttonGroup({ className: 'note-list', children: [outdent, indent] }) ]) ]).render(); }); this.context.memo('button.height', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > return this.ui.buttonGroup([</span> this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options), tooltip: this.lang.font.height, data: { toggle: 'dropdown' } }), this.ui.dropdownCheck({ items: this.options.lineHeights, checkClassName: this.options.icons.menuCheck, className: 'dropdown-line-height', title: this.lang.font.height, click: this.context.createInvokeHandler('editor.lineHeight') }) ]).render(); }); this.context.memo('button.table', () => { return this.ui.buttonGroup([ this.button({ className: 'dropdown-toggle', contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options), tooltip: this.lang.table.table, data: { toggle: 'dropdown' } }), this.ui.dropdown({ title: this.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: ($node) => { const $catcher = $node.find('.note-dimension-picker-mousecatcher'); $catcher.css({ width: this.options.insertTableMaxSize.col + 'em', height: this.options.insertTableMaxSize.row + 'em' }).mousedown(this.context.createInvokeHandler('editor.insertTable')) .on('mousemove', this.tableMoveHandler.bind(this)); } }).render(); }); this.context.memo('button.link', () => { return this.button({ contents: this.ui.icon(this.options.icons.link), tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'), click: this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.picture', () => { return this.button({ contents: this.ui.icon(this.options.icons.picture), tooltip: this.lang.image.image, click: this.context.createInvokeHandler('imageDialog.show') }).render(); }); this.context.memo('button.video', () => { return this.button({ contents: this.ui.icon(this.options.icons.video), tooltip: this.lang.video.video, click: this.context.createInvokeHandler('videoDialog.show') }).render(); }); this.context.memo('button.hr', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > return this.button({</span> contents: this.ui.icon(this.options.icons.minus), tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'), click: this.context.createInvokeHandler('editor.insertHorizontalRule') }).render(); }); this.context.memo('button.fullscreen', () => { return this.button({ className: 'btn-fullscreen', contents: this.ui.icon(this.options.icons.arrowsAlt), tooltip: this.lang.options.fullscreen, click: this.context.createInvokeHandler('fullscreen.toggle') }).render(); }); this.context.memo('button.codeview', () => { return this.button({ className: 'btn-codeview', contents: this.ui.icon(this.options.icons.code), tooltip: this.lang.options.codeview, click: this.context.createInvokeHandler('codeview.toggle') }).render(); }); this.context.memo('button.redo', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > return this.button({</span> contents: this.ui.icon(this.options.icons.redo), tooltip: this.lang.history.redo + this.representShortcut('redo'), click: this.context.createInvokeHandler('editor.redo') }).render(); }); this.context.memo('button.undo', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > return this.button({</span> contents: this.ui.icon(this.options.icons.undo), tooltip: this.lang.history.undo + this.representShortcut('undo'), click: this.context.createInvokeHandler('editor.undo') }).render(); }); this.context.memo('button.help', () => { return this.button({ contents: this.ui.icon(this.options.icons.question), tooltip: this.lang.options.help, click: this.context.createInvokeHandler('helpDialog.show') }).render(); }); } /** * image : [ * ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], * ['float', ['floatLeft', 'floatRight', 'floatNone' ]], * ['remove', ['removeMedia']] * ], */ addImagePopoverButtons() { // Image Size Buttons this.context.memo('button.imageSize100', () => { return this.button({ contents: '<span class="note-fontsize-10">100%</span>', tooltip: this.lang.image.resizeFull, click: this.context.createInvokeHandler('editor.resize', '1') }).render(); }); this.context.memo('button.imageSize50', () => { return this.button({ contents: '<span class="note-fontsize-10">50%</span>', tooltip: this.lang.image.resizeHalf, click: this.context.createInvokeHandler('editor.resize', '0.5') }).render(); }); this.context.memo('button.imageSize25', () => { return this.button({ contents: '<span class="note-fontsize-10">25%</span>', tooltip: this.lang.image.resizeQuarter, click: this.context.createInvokeHandler('editor.resize', '0.25') }).render(); }); // Float Buttons this.context.memo('button.floatLeft', () => { return this.button({ contents: this.ui.icon(this.options.icons.alignLeft), tooltip: this.lang.image.floatLeft, click: this.context.createInvokeHandler('editor.floatMe', 'left') }).render(); }); this.context.memo('button.floatRight', () => { return this.button({ contents: this.ui.icon(this.options.icons.alignRight), tooltip: this.lang.image.floatRight, click: this.context.createInvokeHandler('editor.floatMe', 'right') }).render(); }); this.context.memo('button.floatNone', () => { return this.button({ contents: this.ui.icon(this.options.icons.alignJustify), tooltip: this.lang.image.floatNone, click: this.context.createInvokeHandler('editor.floatMe', 'none') }).render(); }); // Remove Buttons this.context.memo('button.removeMedia', () => { return this.button({ contents: this.ui.icon(this.options.icons.trash), tooltip: this.lang.image.remove, click: this.context.createInvokeHandler('editor.removeMedia') }).render(); }); } addLinkPopoverButtons() { this.context.memo('button.linkDialogShow', () => { return this.button({ contents: this.ui.icon(this.options.icons.link), tooltip: this.lang.link.edit, click: this.context.createInvokeHandler('linkDialog.show') }).render(); }); this.context.memo('button.unlink', () => { return this.button({ contents: this.ui.icon(this.options.icons.unlink), tooltip: this.lang.link.unlink, click: this.context.createInvokeHandler('editor.unlink') }).render(); }); } /** * table : [ * ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']], * ['delete', ['deleteRow', 'deleteCol', 'deleteTable']] * ], */ addTablePopoverButtons() { this.context.memo('button.addRowUp', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.rowAbove), tooltip: this.lang.table.addRowAbove, click: this.context.createInvokeHandler('editor.addRow', 'top') }).render(); }); this.context.memo('button.addRowDown', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.rowBelow), tooltip: this.lang.table.addRowBelow, click: this.context.createInvokeHandler('editor.addRow', 'bottom') }).render(); }); this.context.memo('button.addColLeft', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.colBefore), tooltip: this.lang.table.addColLeft, click: this.context.createInvokeHandler('editor.addCol', 'left') }).render(); }); this.context.memo('button.addColRight', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.colAfter), tooltip: this.lang.table.addColRight, click: this.context.createInvokeHandler('editor.addCol', 'right') }).render(); }); this.context.memo('button.deleteRow', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.rowRemove), tooltip: this.lang.table.delRow, click: this.context.createInvokeHandler('editor.deleteRow') }).render(); }); this.context.memo('button.deleteCol', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.colRemove), tooltip: this.lang.table.delCol, click: this.context.createInvokeHandler('editor.deleteCol') }).render(); }); this.context.memo('button.deleteTable', () => { return this.button({ className: 'btn-md', contents: this.ui.icon(this.options.icons.trash), tooltip: this.lang.table.delTable, click: this.context.createInvokeHandler('editor.deleteTable') }).render(); }); } build($container, groups) { for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) { const group = groups[groupIdx]; const groupName = $.isArray(group) ? group[0] : <span class="branch-1 cbranch-no" title="branch not covered" >group;</span> const buttons = $.isArray(group) ? ((group.length === 1) ? <span class="branch-0 cbranch-no" title="branch not covered" >[group[0]] </span>: group[1]) : <span class="branch-1 cbranch-no" title="branch not covered" >[group];</span> const $group = this.ui.buttonGroup({ className: 'note-' + groupName }).render(); for (let idx = 0, len = buttons.length; idx < len; idx++) { const btn = this.context.memo('button.' + buttons[idx]); <span class="missing-if-branch" title="else path not taken" >E</span>if (btn) { $group.append(typeof btn === 'function' ? btn(this.context) : <span class="branch-1 cbranch-no" title="branch not covered" >btn)</span>; } } $group.appendTo($container); } } /** * @param {jQuery} [$container] */ updateCurrentStyle($container) { const $cont = $container || this.$toolbar; const styleInfo = this.context.invoke('editor.currentStyle'); this.updateBtnStates($cont, { '.note-btn-bold': () => { return styleInfo['font-bold'] === 'bold'; }, '.note-btn-italic': () => { return styleInfo['font-italic'] === 'italic'; }, '.note-btn-underline': () => { return styleInfo['font-underline'] === 'underline'; }, '.note-btn-subscript': () => { return styleInfo['font-subscript'] === 'subscript'; }, '.note-btn-superscript': () => { return styleInfo['font-superscript'] === 'superscript'; }, '.note-btn-strikethrough': () => { return styleInfo['font-strikethrough'] === 'strikethrough'; } }); if (styleInfo['font-family']) { const fontNames = styleInfo['font-family'].split(',').map((name) => { return name.replace(/[\'\"]/g, '') .replace(/\s+$/, '') .replace(/^\s+/, ''); }); const fontName = lists.find(fontNames, this.isFontInstalled.bind(this)); $cont.find('.dropdown-fontname a').each((idx, item) => { const $item = $(item); // always compare string to avoid creating another func. const isChecked = ($item.data('value') + '') === (fontName + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName); } if (styleInfo['font-size']) { const fontSize = styleInfo['font-size']; $cont.find('.dropdown-fontsize a').each((idx, item) => { const $item = $(item); // always compare with string to avoid creating another func. const isChecked = ($item.data('value') + '') === (fontSize + ''); $item.toggleClass('checked', isChecked); }); $cont.find('.note-current-fontsize').text(fontSize); } if (styleInfo['line-height']) { const lineHeight = styleInfo['line-height']; $cont.find('.dropdown-line-height li a').each(<span class="fstat-no" title="function not covered" >(idx, item)</span> => { // always compare with string to avoid creating another func. <span class="cstat-no" title="statement not covered" > const isChecked = ($(item).data('value') + '') === (lineHeight + '');</span> <span class="cstat-no" title="statement not covered" > this.className = isChecked ? 'checked' : '';</span> }); } } updateBtnStates($container, infos) { $.each(infos, (selector, pred) => { this.ui.toggleBtnActive($container.find(selector), pred()); }); } <span class="fstat-no" title="function not covered" > tableMoveHandler(event)</span> { <span class="cstat-no" title="statement not covered" > const PX_PER_EM = 18;</span> <span class="cstat-no" title="statement not covered" > const $picker = $(event.target.parentNode); </span>// target is mousecatcher <span class="cstat-no" title="statement not covered" > const $dimensionDisplay = $picker.next();</span> <span class="cstat-no" title="statement not covered" > const $catcher = $picker.find('.note-dimension-picker-mousecatcher');</span> <span class="cstat-no" title="statement not covered" > const $highlighted = $picker.find('.note-dimension-picker-highlighted');</span> <span class="cstat-no" title="statement not covered" > const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');</span> <span class="cstat-no" title="statement not covered" > let posOffset;</span> // HTML5 with jQuery - e.offsetX is undefined in Firefox <span class="cstat-no" title="statement not covered" > if (event.offsetX === undefined) {</span> <span class="cstat-no" title="statement not covered" > const posCatcher = $(event.target).offset();</span> <span class="cstat-no" title="statement not covered" > posOffset = {</span> x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { <span class="cstat-no" title="statement not covered" > posOffset = {</span> x: event.offsetX, y: event.offsetY }; } <span class="cstat-no" title="statement not covered" > const dim = {</span> c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; <span class="cstat-no" title="statement not covered" > $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });</span> <span class="cstat-no" title="statement not covered" > $catcher.data('value', dim.c + 'x' + dim.r);</span> <span class="cstat-no" title="statement not covered" > if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {</span> <span class="cstat-no" title="statement not covered" > $unhighlighted.css({ width: dim.c + 1 + 'em' });</span> } <span class="cstat-no" title="statement not covered" > if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {</span> <span class="cstat-no" title="statement not covered" > $unhighlighted.css({ height: dim.r + 1 + 'em' });</span> } <span class="cstat-no" title="statement not covered" > $dimensionDisplay.html(dim.c + ' x ' + dim.r);</span> } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\V$�YO O Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AutoLink.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/AutoLink.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> AutoLink.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">62.86% </span> <span class="quiet">Statements</span> <span class='fraction'>22/35</span> </div> <div class='fl pad1y space-right2'> <span class="strong">20% </span> <span class="quiet">Branches</span> <span class='fraction'>3/15</span> </div> <div class='fl pad1y space-right2'> <span class="strong">88.89% </span> <span class="quiet">Functions</span> <span class='fraction'>8/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">62.86% </span> <span class="quiet">Lines</span> <span class='fraction'>22/35</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import lists from '../core/lists'; import key from '../core/key'; const defaultScheme = 'http://'; const linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?|mailto:[A-Z0-9._%+-]+@)?(www\.)?(.+)$/i; export default class AutoLink { constructor(context) { this.context = context; this.events = { 'summernote.keyup': (we, e) => { <span class="missing-if-branch" title="else path not taken" >E</span>if (!e.isDefaultPrevented()) { this.handleKeyup(e); } }, 'summernote.keydown': (we, e) => { this.handleKeydown(e); } }; } initialize() { this.lastWordRange = null; } destroy() { this.lastWordRange = null; } <span class="fstat-no" title="function not covered" > replace() {</span> <span class="cstat-no" title="statement not covered" > if (!this.lastWordRange) {</span> <span class="cstat-no" title="statement not covered" > return;</span> } <span class="cstat-no" title="statement not covered" > const keyword = this.lastWordRange.toString();</span> <span class="cstat-no" title="statement not covered" > const match = keyword.match(linkPattern);</span> <span class="cstat-no" title="statement not covered" > if (match && (match[1] || match[2])) {</span> <span class="cstat-no" title="statement not covered" > const link = match[1] ? keyword : defaultScheme + keyword;</span> <span class="cstat-no" title="statement not covered" > const node = $('<a />').html(keyword).attr('href', link)[0];</span> <span class="cstat-no" title="statement not covered" > this.lastWordRange.insertNode(node);</span> <span class="cstat-no" title="statement not covered" > this.lastWordRange = null;</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.focus');</span> } } handleKeydown(e) { <span class="missing-if-branch" title="if path not taken" >I</span>if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { <span class="cstat-no" title="statement not covered" > const wordRange = this.context.invoke('editor.createRange').getWordRange();</span> <span class="cstat-no" title="statement not covered" > this.lastWordRange = wordRange;</span> } } handleKeyup(e) { <span class="missing-if-branch" title="if path not taken" >I</span>if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) { <span class="cstat-no" title="statement not covered" > this.replace();</span> } } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\'h�f'f'Tcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AirPopover.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/AirPopover.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> AirPopover.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Statements</span> <span class='fraction'>19/38</span> </div> <div class='fl pad1y space-right2'> <span class="strong">7.14% </span> <span class="quiet">Branches</span> <span class='fraction'>1/14</span> </div> <div class='fl pad1y space-right2'> <span class="strong">30% </span> <span class="quiet">Functions</span> <span class='fraction'>3/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Lines</span> <span class='fraction'>19/38</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; const AIR_MODE_POPOVER_X_OFFSET = 20; export default class AirPopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.scroll': <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.update();</span> }, 'summernote.disable summernote.change summernote.dialog.shown': <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> }, 'summernote.focusout': <span class="fstat-no" title="function not covered" >(we, e)</span> => { // [workaround] Firefox doesn't support relatedTarget on focusout // - Ignore hide action on focus out in FF. <span class="cstat-no" title="statement not covered" > if (env.isFF) {</span> <span class="cstat-no" title="statement not covered" > return;</span> } <span class="cstat-no" title="statement not covered" > if (!e.relatedTarget || !dom.ancestor(e.relatedTarget, func.eq(this.$popover[0]))) {</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> } } }; } shouldInitialize() { return this.options.airMode && <span class="branch-1 cbranch-no" title="branch not covered" >!lists.isEmpty(this.options.popover.air);</span> } <span class="fstat-no" title="function not covered" > initialize() {</span> <span class="cstat-no" title="statement not covered" > this.$popover = this.ui.popover({</span> className: 'note-air-popover' }).render().appendTo(this.options.container); <span class="cstat-no" title="statement not covered" > const $content = this.$popover.find('.popover-content');</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('buttons.build', $content, this.options.popover.air);</span> } <span class="fstat-no" title="function not covered" > destroy() {</span> <span class="cstat-no" title="statement not covered" > this.$popover.remove();</span> } <span class="fstat-no" title="function not covered" > update() {</span> <span class="cstat-no" title="statement not covered" > const styleInfo = this.context.invoke('editor.currentStyle');</span> <span class="cstat-no" title="statement not covered" > if (styleInfo.range && !styleInfo.range.isCollapsed()) {</span> <span class="cstat-no" title="statement not covered" > const rect = lists.last(styleInfo.range.getClientRects());</span> <span class="cstat-no" title="statement not covered" > if (rect) {</span> <span class="cstat-no" title="statement not covered" > const bnd = func.rect2bnd(rect);</span> <span class="cstat-no" title="statement not covered" > this.$popover.css({</span> display: 'block', left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET, top: bnd.top + bnd.height }); <span class="cstat-no" title="statement not covered" > this.context.invoke('buttons.updateCurrentStyle', this.$popover);</span> } } else { <span class="cstat-no" title="statement not covered" > this.hide();</span> } } <span class="fstat-no" title="function not covered" > hide() {</span> <span class="cstat-no" title="statement not covered" > this.$popover.hide();</span> } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\w�X���Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Clipboard.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Clipboard.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Clipboard.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">60% </span> <span class="quiet">Statements</span> <span class='fraction'>9/15</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">75% </span> <span class="quiet">Functions</span> <span class='fraction'>3/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">60% </span> <span class="quiet">Lines</span> <span class='fraction'>9/15</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import lists from '../core/lists'; export default class Clipboard { constructor(context) { this.context = context; this.$editable = context.layoutInfo.editable; } initialize() { this.$editable.on('paste', this.pasteByEvent.bind(this)); } /** * paste by clipboard event * * @param {Event} event */ <span class="fstat-no" title="function not covered" > pasteByEvent(event)</span> { <span class="cstat-no" title="statement not covered" > const clipboardData = event.originalEvent.clipboardData;</span> <span class="cstat-no" title="statement not covered" > if (clipboardData && clipboardData.items && clipboardData.items.length) {</span> <span class="cstat-no" title="statement not covered" > const item = lists.head(clipboardData.items);</span> <span class="cstat-no" title="statement not covered" > if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);</span> } <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.afterCommand');</span> } } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�q���N�NPcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Editor.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Editor.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Editor.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">70.78% </span> <span class="quiet">Statements</span> <span class='fraction'>281/397</span> </div> <div class='fl pad1y space-right2'> <span class="strong">43.43% </span> <span class="quiet">Branches</span> <span class='fraction'>76/175</span> </div> <div class='fl pad1y space-right2'> <span class="strong">64.29% </span> <span class="quiet">Functions</span> <span class='fraction'>54/84</span> </div> <div class='fl pad1y space-right2'> <span class="strong">71.43% </span> <span class="quiet">Lines</span> <span class='fraction'>280/392</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1001×</span> <span class="cline-any cline-yes">1001×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1001×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">462×</span> <span class="cline-any cline-yes">462×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">462×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">23×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">20×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">12×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">58×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-yes">38×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">215×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-yes">35×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1541×</span> <span class="cline-any cline-yes">1540×</span> <span class="cline-any cline-yes">33×</span> <span class="cline-any cline-yes">33×</span> <span class="cline-any cline-yes">33×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">115×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">62×</span> <span class="cline-any cline-yes">62×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">49×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; import range from '../core/range'; import { readFileAsDataURL, createImage } from '../core/async'; import History from '../editing/History'; import Style from '../editing/Style'; import Typing from '../editing/Typing'; import Table from '../editing/Table'; import Bullet from '../editing/Bullet'; const KEY_BOGUS = 'bogus'; /** * @class Editor */ export default class Editor { constructor(context) { this.context = context; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.editable = this.$editable[0]; this.lastRange = null; this.style = new Style(); this.table = new Table(); this.typing = new Typing(); this.bullet = new Bullet(); this.history = new History(this.$editable); this.context.memo('help.undo', this.lang.help.undo); this.context.memo('help.redo', this.lang.help.redo); this.context.memo('help.tab', this.lang.help.tab); this.context.memo('help.untab', this.lang.help.untab); this.context.memo('help.insertParagraph', this.lang.help.insertParagraph); this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList); this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList); this.context.memo('help.indent', this.lang.help.indent); this.context.memo('help.outdent', this.lang.help.outdent); this.context.memo('help.formatPara', this.lang.help.formatPara); this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule); this.context.memo('help.fontName', this.lang.help.fontName); // native commands(with execCommand), generate function for execCommand const commands = [ 'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'formatBlock', 'removeFormat', 'backColor' ]; for (let idx = 0, len = commands.length; idx < len; idx++) { this[commands[idx]] = ((sCmd) => { return (value) => { this.beforeCommand(); document.execCommand(sCmd, false, value); this.afterCommand(true); }; })(commands[idx]); this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]); } this.fontName = this.wrapCommand(<span class="fstat-no" title="function not covered" >(value)</span> => { <span class="cstat-no" title="statement not covered" > return this.fontStyling('font-family', "\'" + value + "\'");</span> }); this.fontSize = this.wrapCommand((value) => { return this.fontStyling('font-size', value + 'px'); }); for (let idx = 1; idx <= 6; idx++) { this['formatH' + idx] = ((idx) => { return <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.formatBlock('H' + idx);</span> }; })(idx); this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]); }; this.insertParagraph = this.wrapCommand(() => { this.typing.insertParagraph(this.editable); }); this.insertOrderedList = this.wrapCommand(() => { this.bullet.insertOrderedList(this.editable); }); this.insertUnorderedList = this.wrapCommand(() => { this.bullet.insertUnorderedList(this.editable); }); this.indent = this.wrapCommand(() => { this.bullet.indent(this.editable); }); this.outdent = this.wrapCommand(() => { this.bullet.outdent(this.editable); }); /** * insertNode * insert node * @param {Node} node */ this.insertNode = this.wrapCommand((node) => { if (this.isLimited($(node).text().length)) { return; } const rng = this.createRange(); rng.insertNode(node); range.createFromNodeAfter(node).select(); }); /** * insert text * @param {String} text */ this.insertText = this.wrapCommand((text) => { if (this.isLimited(text.length)) { return; } const rng = this.createRange(); const textNode = rng.insertNode(dom.createText(text)); range.create(textNode, dom.nodeLength(textNode)).select(); }); /** * paste HTML * @param {String} markup */ this.pasteHTML = this.wrapCommand((markup) => { if (this.isLimited(markup.length)) { return; } const contents = this.createRange().pasteHTML(markup); range.createFromNodeAfter(lists.last(contents)).select(); }); /** * formatBlock * * @param {String} tagName */ this.formatBlock = this.wrapCommand((tagName, $target) => { const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle; <span class="missing-if-branch" title="if path not taken" >I</span>if (onApplyCustomStyle) { <span class="cstat-no" title="statement not covered" > onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock);</span> } else { this.onFormatBlock(tagName, $target); } }); /** * insert horizontal rule */ this.insertHorizontalRule = this.wrapCommand(() => { const hrNode = this.createRange().insertNode(dom.create('HR')); <span class="missing-if-branch" title="else path not taken" >E</span>if (hrNode.nextSibling) { range.create(hrNode.nextSibling, 0).normalize().select(); } }); /** * lineHeight * @param {String} value */ this.lineHeight = this.wrapCommand(<span class="fstat-no" title="function not covered" >(value)</span> => { <span class="cstat-no" title="statement not covered" > this.style.stylePara(this.createRange(), {</span> lineHeight: value }); }); /** * create link (command) * * @param {Object} linkInfo */ this.createLink = this.wrapCommand((linkInfo) => { let linkUrl = linkInfo.url; const linkText = linkInfo.text; const isNewWindow = linkInfo.isNewWindow; let rng = linkInfo.range || this.createRange(); const isTextChanged = rng.toString() !== linkText; // handle spaced urls from input <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof linkUrl === 'string') { linkUrl = linkUrl.trim(); } <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.onCreateLink) { <span class="cstat-no" title="statement not covered" > linkUrl = this.options.onCreateLink(linkUrl);</span> } else { // if url doesn't match an URL schema, set http:// as default linkUrl = /^[A-Za-z][A-Za-z0-9+-.]*\:[\/\/]?/.test(linkUrl) ? linkUrl : <span class="branch-1 cbranch-no" title="branch not covered" >'http://' + linkUrl;</span> } let anchors = []; <span class="missing-if-branch" title="else path not taken" >E</span>if (isTextChanged) { rng = rng.deleteContents(); const anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]); anchors.push(anchor); } else { <span class="cstat-no" title="statement not covered" > anchors = this.style.styleNodes(rng, {</span> nodeName: 'A', expandClosestSibling: true, onlyPartialContains: true }); } $.each(anchors, (idx, anchor) => { $(anchor).attr('href', linkUrl); if (isNewWindow) { $(anchor).attr('target', '_blank'); } else { $(anchor).removeAttr('target'); } }); const startRange = range.createFromNodeBefore(lists.head(anchors)); const startPoint = startRange.getStartPoint(); const endRange = range.createFromNodeAfter(lists.last(anchors)); const endPoint = endRange.getEndPoint(); range.create( startPoint.node, startPoint.offset, endPoint.node, endPoint.offset ).select(); }); /** * setting color * * @param {Object} sObjColor color code * @param {String} sObjColor.foreColor foreground color * @param {String} sObjColor.backColor background color */ this.color = this.wrapCommand((colorInfo) => { const foreColor = colorInfo.foreColor; const backColor = colorInfo.backColor; <span class="missing-if-branch" title="if path not taken" >I</span>if (foreColor) { <span class="cstat-no" title="statement not covered" >document.execCommand('foreColor', false, foreColor); </span>} <span class="missing-if-branch" title="else path not taken" >E</span>if (backColor) { document.execCommand('backColor', false, backColor); } }); /** * Set foreground color * * @param {String} colorCode foreground color code */ this.foreColor = this.wrapCommand((colorInfo) => { document.execCommand('styleWithCSS', false, true); document.execCommand('foreColor', false, colorInfo); }); /** * insert Table * * @param {String} dimension of table (ex : "5x5") */ this.insertTable = this.wrapCommand((dim) => { const dimension = dim.split('x'); const rng = this.createRange().deleteContents(); rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options)); }); /** * remove media object and Figure Elements if media object is img with Figure. */ this.removeMedia = this.wrapCommand(<span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > let $target = $(this.restoreTarget()).parent();</span> <span class="cstat-no" title="statement not covered" > if ($target.parent('figure').length) {</span> <span class="cstat-no" title="statement not covered" > $target.parent('figure').remove();</span> } else { <span class="cstat-no" title="statement not covered" > $target = $(this.restoreTarget()).detach();</span> } <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('media.delete', $target, this.$editable);</span> }); /** * float me * * @param {String} value */ this.floatMe = this.wrapCommand(<span class="fstat-no" title="function not covered" >(value)</span> => { <span class="cstat-no" title="statement not covered" > const $target = $(this.restoreTarget());</span> <span class="cstat-no" title="statement not covered" > $target.toggleClass('note-float-left', value === 'left');</span> <span class="cstat-no" title="statement not covered" > $target.toggleClass('note-float-right', value === 'right');</span> <span class="cstat-no" title="statement not covered" > $target.css('float', value);</span> }); /** * resize overlay element * @param {String} value */ this.resize = this.wrapCommand(<span class="fstat-no" title="function not covered" >(value)</span> => { <span class="cstat-no" title="statement not covered" > const $target = $(this.restoreTarget());</span> <span class="cstat-no" title="statement not covered" > $target.css({</span> width: value * 100 + '%', height: '' }); }); } initialize() { // bind custom events this.$editable.on('keydown', (event) => { <span class="missing-if-branch" title="if path not taken" >I</span>if (event.keyCode === key.code.ENTER) { <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('enter', event);</span> } this.context.triggerEvent('keydown', event); <span class="missing-if-branch" title="else path not taken" >E</span>if (!event.isDefaultPrevented()) { <span class="missing-if-branch" title="else path not taken" >E</span>if (this.options.shortcuts) { this.handleKeyMap(event); } else { <span class="cstat-no" title="statement not covered" > this.preventDefaultEditableShortCuts(event);</span> } } <span class="missing-if-branch" title="if path not taken" >I</span>if (this.isLimited(1, event)) { <span class="cstat-no" title="statement not covered" > return false;</span> } }).on('keyup', (event) => { this.context.triggerEvent('keyup', event); }).on('focus', (event) => { this.context.triggerEvent('focus', event); }).on('blur', (event) => { this.context.triggerEvent('blur', event); }).on('mousedown', (event) => { this.context.triggerEvent('mousedown', event); }).on('mouseup', (event) => { this.context.triggerEvent('mouseup', event); }).on('scroll', (event) => { this.context.triggerEvent('scroll', event); }).on('paste', <span class="fstat-no" title="function not covered" >(event)</span> => { <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('paste', event);</span> }); // init content before set event this.$editable.html(dom.html(this.$note) || dom.emptyPara); this.$editable.on(env.inputEventName, func.debounce(() => { this.context.triggerEvent('change', this.$editable.html()); }, 100)); this.$editor.on('focusin', (event) => { this.context.triggerEvent('focusin', event); }).on('focusout', (event) => { this.context.triggerEvent('focusout', event); }); <span class="missing-if-branch" title="else path not taken" >E</span>if (!this.options.airMode) { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.width) { <span class="cstat-no" title="statement not covered" > this.$editor.outerWidth(this.options.width);</span> } <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.height) { <span class="cstat-no" title="statement not covered" > this.$editable.outerHeight(this.options.height);</span> } <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.maxHeight) { <span class="cstat-no" title="statement not covered" > this.$editable.css('max-height', this.options.maxHeight);</span> } <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.minHeight) { <span class="cstat-no" title="statement not covered" > this.$editable.css('min-height', this.options.minHeight);</span> } } this.history.recordUndo(); } destroy() { this.$editable.off(); } handleKeyMap(event) { const keyMap = this.options.keyMap[env.isMac ? 'mac' : <span class="branch-1 cbranch-no" title="branch not covered" >'pc']</span>; const keys = []; <span class="missing-if-branch" title="if path not taken" >I</span>if (event.metaKey) { <span class="cstat-no" title="statement not covered" >keys.push('CMD'); </span>} <span class="missing-if-branch" title="if path not taken" >I</span>if (event.ctrlKey && <span class="branch-1 cbranch-no" title="branch not covered" >!event.altKey)</span> { <span class="cstat-no" title="statement not covered" >keys.push('CTRL'); </span>} <span class="missing-if-branch" title="if path not taken" >I</span>if (event.shiftKey) { <span class="cstat-no" title="statement not covered" >keys.push('SHIFT'); </span>} const keyName = key.nameFromCode[event.keyCode]; <span class="missing-if-branch" title="if path not taken" >I</span>if (keyName) { <span class="cstat-no" title="statement not covered" > keys.push(keyName);</span> } const eventName = keyMap[keys.join('+')]; <span class="missing-if-branch" title="if path not taken" >I</span>if (eventName) { <span class="cstat-no" title="statement not covered" > if (this.context.invoke(eventName) !== false) {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> } } else <span class="missing-if-branch" title="if path not taken" >I</span>if (key.isEdit(event.keyCode)) { <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } <span class="fstat-no" title="function not covered" > preventDefaultEditableShortCuts(event)</span> { // B(Bold, 66) / I(Italic, 73) / U(Underline, 85) <span class="cstat-no" title="statement not covered" > if ((event.ctrlKey || event.metaKey) &&</span> lists.contains([66, 73, 85], event.keyCode)) { <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> } } isLimited(pad, event) { pad = pad || <span class="branch-1 cbranch-no" title="branch not covered" >0;</span> if (typeof event !== 'undefined') { <span class="missing-if-branch" title="if path not taken" >I</span>if (key.isMove(event.keyCode) || (event.ctrlKey || event.metaKey) || lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) { <span class="cstat-no" title="statement not covered" > return false;</span> } } if (this.options.maxTextLength > 0) { <span class="missing-if-branch" title="else path not taken" >E</span>if ((this.$editable.text().length + pad) >= this.options.maxTextLength) { return true; } } return false; } /** * create range * @return {WrappedRange} */ createRange() { this.focus(); return range.create(this.editable); } /** * saveRange * * save current range * * @param {Boolean} [thenCollapse=false] */ <span class="fstat-no" title="function not covered" > saveRange(thenCollapse)</span> { <span class="cstat-no" title="statement not covered" > this.lastRange = this.createRange();</span> <span class="cstat-no" title="statement not covered" > if (thenCollapse) {</span> <span class="cstat-no" title="statement not covered" > this.lastRange.collapse().select();</span> } } /** * restoreRange * * restore lately range */ <span class="fstat-no" title="function not covered" > restoreRange() {</span> <span class="cstat-no" title="statement not covered" > if (this.lastRange) {</span> <span class="cstat-no" title="statement not covered" > this.lastRange.select();</span> <span class="cstat-no" title="statement not covered" > this.focus();</span> } } <span class="fstat-no" title="function not covered" > saveTarget(node)</span> { <span class="cstat-no" title="statement not covered" > this.$editable.data('target', node);</span> } clearTarget() { this.$editable.removeData('target'); } <span class="fstat-no" title="function not covered" > restoreTarget() {</span> <span class="cstat-no" title="statement not covered" > return this.$editable.data('target');</span> } /** * currentStyle * * current style * @return {Object|Boolean} unfocus */ currentStyle() { let rng = range.create(); if (rng) { rng = rng.normalize(); } return rng ? this.style.current(rng) : this.style.fromNode(this.$editable); } /** * style from node * * @param {jQuery} $node * @return {Object} */ <span class="fstat-no" title="function not covered" > styleFromNode($node)</span> { <span class="cstat-no" title="statement not covered" > return this.style.fromNode($node);</span> } /** * undo */ undo() { this.context.triggerEvent('before.command', this.$editable.html()); this.history.undo(); this.context.triggerEvent('change', this.$editable.html()); } /** * redo */ redo() { this.context.triggerEvent('before.command', this.$editable.html()); this.history.redo(); this.context.triggerEvent('change', this.$editable.html()); } /** * before command */ beforeCommand() { this.context.triggerEvent('before.command', this.$editable.html()); // keep focus on editable before command execution this.focus(); } /** * after command * @param {Boolean} isPreventTrigger */ afterCommand(isPreventTrigger) { this.normalizeContent(); this.history.recordUndo(); if (!isPreventTrigger) { this.context.triggerEvent('change', this.$editable.html()); } } /** * handle tab key */ tab() { const rng = this.createRange(); <span class="missing-if-branch" title="if path not taken" >I</span>if (rng.isCollapsed() && rng.isOnCell()) { <span class="cstat-no" title="statement not covered" > this.table.tab(rng);</span> } else { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.tabSize === 0) { <span class="cstat-no" title="statement not covered" > return false;</span> } <span class="missing-if-branch" title="else path not taken" >E</span>if (!this.isLimited(this.options.tabSize)) { this.beforeCommand(); this.typing.insertTab(rng, this.options.tabSize); this.afterCommand(); } } } /** * handle shift+tab key */ <span class="fstat-no" title="function not covered" > untab() {</span> <span class="cstat-no" title="statement not covered" > const rng = this.createRange();</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnCell()) {</span> <span class="cstat-no" title="statement not covered" > this.table.tab(rng, true);</span> } else { <span class="cstat-no" title="statement not covered" > if (this.options.tabSize === 0) {</span> <span class="cstat-no" title="statement not covered" > return false;</span> } } } /** * run given function between beforeCommand and afterCommand */ wrapCommand(fn) { return () => { this.beforeCommand(); fn.apply(this, arguments); this.afterCommand(); }; } /** * insert image * * @param {String} src * @param {String|Function} param * @return {Promise} */ insertImage(src, param) { return createImage(src, param).then(($image) => { this.beforeCommand(); <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof param === 'function') { <span class="cstat-no" title="statement not covered" > param($image);</span> } else { <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof param === 'string') { $image.attr('data-filename', param); } $image.css('width', Math.min(this.$editable.width(), $image.width())); } $image.show(); range.create(this.editable).insertNode($image[0]); range.createFromNodeAfter($image[0]).select(); this.afterCommand(); }).fail(<span class="fstat-no" title="function not covered" >(e)</span> => { <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('image.upload.error', e);</span> }); } /** * insertImages * @param {File[]} files */ <span class="fstat-no" title="function not covered" > insertImages(files)</span> { <span class="cstat-no" title="statement not covered" > $.each(files, <span class="fstat-no" title="function not covered" >(idx, file)</span> => {</span> <span class="cstat-no" title="statement not covered" > const filename = file.name;</span> <span class="cstat-no" title="statement not covered" > if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) {</span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError);</span> } else { <span class="cstat-no" title="statement not covered" > readFileAsDataURL(file).then(<span class="fstat-no" title="function not covered" >(dataURL)</span> => {</span> <span class="cstat-no" title="statement not covered" > return this.insertImage(dataURL, filename);</span> }).fail(<span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('image.upload.error');</span> }); } }); } /** * insertImagesOrCallback * @param {File[]} files */ <span class="fstat-no" title="function not covered" > insertImagesOrCallback(files)</span> { <span class="cstat-no" title="statement not covered" > const callbacks = this.options.callbacks;</span> // If onImageUpload this.options setted <span class="cstat-no" title="statement not covered" > if (callbacks.onImageUpload) {</span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('image.upload', files);</span> // else insert Image as dataURL } else { <span class="cstat-no" title="statement not covered" > this.insertImages(files);</span> } } /** * return selected plain text * @return {String} text */ <span class="fstat-no" title="function not covered" > getSelectedText() {</span> <span class="cstat-no" title="statement not covered" > let rng = this.createRange();</span> // if range on anchor, expand range with anchor <span class="cstat-no" title="statement not covered" > if (rng.isOnAnchor()) {</span> <span class="cstat-no" title="statement not covered" > rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));</span> } <span class="cstat-no" title="statement not covered" > return rng.toString();</span> } onFormatBlock(tagName, $target) { // [workaround] for MSIE, IE need `<` tagName = env.isMSIE ? <span class="branch-0 cbranch-no" title="branch not covered" >'<' + tagName + '>' </span>: tagName; document.execCommand('FormatBlock', false, tagName); // support custom class if ($target && $target.length) { const className = $target[0].className || <span class="branch-1 cbranch-no" title="branch not covered" >'';</span> <span class="missing-if-branch" title="else path not taken" >E</span>if (className) { const currentRange = this.createRange(); const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName); $parent.addClass(className); } } } <span class="fstat-no" title="function not covered" > formatPara() {</span> <span class="cstat-no" title="statement not covered" > this.formatBlock('P');</span> } fontStyling(target, value) { const rng = this.createRange(); <span class="missing-if-branch" title="else path not taken" >E</span>if (rng) { const spans = this.style.styleNodes(rng); $(spans).css(target, value); // [workaround] added styled bogus span for style // - also bogus character needed for cursor position <span class="missing-if-branch" title="else path not taken" >E</span>if (rng.isCollapsed()) { const firstSpan = lists.head(spans); <span class="missing-if-branch" title="else path not taken" >E</span>if (firstSpan && !dom.nodeLength(firstSpan)) { firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR; range.createFromNodeAfter(firstSpan.firstChild).select(); this.$editable.data(KEY_BOGUS, firstSpan); } } } } /** * unlink * * @type command */ <span class="fstat-no" title="function not covered" > unlink() {</span> <span class="cstat-no" title="statement not covered" > let rng = this.createRange();</span> <span class="cstat-no" title="statement not covered" > if (rng.isOnAnchor()) {</span> <span class="cstat-no" title="statement not covered" > const anchor = dom.ancestor(rng.sc, dom.isAnchor);</span> <span class="cstat-no" title="statement not covered" > rng = range.createFromNode(anchor);</span> <span class="cstat-no" title="statement not covered" > rng.select();</span> <span class="cstat-no" title="statement not covered" > this.beforeCommand();</span> <span class="cstat-no" title="statement not covered" > document.execCommand('unlink');</span> <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } /** * returns link info * * @return {Object} * @return {WrappedRange} return.range * @return {String} return.text * @return {Boolean} [return.isNewWindow=true] * @return {String} [return.url=""] */ <span class="fstat-no" title="function not covered" > getLinkInfo() {</span> <span class="cstat-no" title="statement not covered" > const rng = this.createRange().expand(dom.isAnchor);</span> // Get the first anchor on range(for edit). <span class="cstat-no" title="statement not covered" > const $anchor = $(lists.head(rng.nodes(dom.isAnchor)));</span> <span class="cstat-no" title="statement not covered" > const linkInfo = {</span> range: rng, text: rng.toString(), url: $anchor.length ? $anchor.attr('href') : '' }; // Define isNewWindow when anchor exists. <span class="cstat-no" title="statement not covered" > if ($anchor.length) {</span> <span class="cstat-no" title="statement not covered" > linkInfo.isNewWindow = $anchor.attr('target') === '_blank';</span> } <span class="cstat-no" title="statement not covered" > return linkInfo;</span> } <span class="fstat-no" title="function not covered" > addRow(position)</span> { <span class="cstat-no" title="statement not covered" > const rng = this.createRange(this.$editable);</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnCell()) {</span> <span class="cstat-no" title="statement not covered" > this.beforeCommand();</span> <span class="cstat-no" title="statement not covered" > this.table.addRow(rng, position);</span> <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } <span class="fstat-no" title="function not covered" > addCol(position)</span> { <span class="cstat-no" title="statement not covered" > const rng = this.createRange(this.$editable);</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnCell()) {</span> <span class="cstat-no" title="statement not covered" > this.beforeCommand();</span> <span class="cstat-no" title="statement not covered" > this.table.addCol(rng, position);</span> <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } <span class="fstat-no" title="function not covered" > deleteRow() {</span> <span class="cstat-no" title="statement not covered" > const rng = this.createRange(this.$editable);</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnCell()) {</span> <span class="cstat-no" title="statement not covered" > this.beforeCommand();</span> <span class="cstat-no" title="statement not covered" > this.table.deleteRow(rng);</span> <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } <span class="fstat-no" title="function not covered" > deleteCol() {</span> <span class="cstat-no" title="statement not covered" > const rng = this.createRange(this.$editable);</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnCell()) {</span> <span class="cstat-no" title="statement not covered" > this.beforeCommand();</span> <span class="cstat-no" title="statement not covered" > this.table.deleteCol(rng);</span> <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } <span class="fstat-no" title="function not covered" > deleteTable() {</span> <span class="cstat-no" title="statement not covered" > const rng = this.createRange(this.$editable);</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnCell()) {</span> <span class="cstat-no" title="statement not covered" > this.beforeCommand();</span> <span class="cstat-no" title="statement not covered" > this.table.deleteTable(rng);</span> <span class="cstat-no" title="statement not covered" > this.afterCommand();</span> } } /** * @param {Position} pos * @param {jQuery} $target - target element * @param {Boolean} [bKeepRatio] - keep ratio */ <span class="fstat-no" title="function not covered" > resizeTo(pos, $target, bKeepRatio)</span> { <span class="cstat-no" title="statement not covered" > let imageSize;</span> <span class="cstat-no" title="statement not covered" > if (bKeepRatio) {</span> <span class="cstat-no" title="statement not covered" > const newRatio = pos.y / pos.x;</span> <span class="cstat-no" title="statement not covered" > const ratio = $target.data('ratio');</span> <span class="cstat-no" title="statement not covered" > imageSize = {</span> width: ratio > newRatio ? pos.x : pos.y / ratio, height: ratio > newRatio ? pos.x * ratio : pos.y }; } else { <span class="cstat-no" title="statement not covered" > imageSize = {</span> width: pos.x, height: pos.y }; } <span class="cstat-no" title="statement not covered" > $target.css(imageSize);</span> } /** * returns whether editable area has focus or not. */ hasFocus() { return this.$editable.is(':focus'); } /** * set focus */ focus() { // [workaround] Screen will move when page is scolled in IE. // - do focus when not focused <span class="missing-if-branch" title="else path not taken" >E</span>if (!this.hasFocus()) { this.$editable.focus(); } } /** * returns whether contents is empty or not. * @return {Boolean} */ isEmpty() { return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html(); } /** * Removes all contents and restores the editable instance to an _emptyPara_. */ empty() { this.context.invoke('code', dom.emptyPara); } /** * normalize content */ normalizeContent() { this.$editable[0].normalize(); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�aC�EELcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> src/js/base/module/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">66.01% </span> <span class="quiet">Statements</span> <span class='fraction'>1043/1580</span> </div> <div class='fl pad1y space-right2'> <span class="strong">38.15% </span> <span class="quiet">Branches</span> <span class='fraction'>206/540</span> </div> <div class='fl pad1y space-right2'> <span class="strong">63.85% </span> <span class="quiet">Functions</span> <span class='fraction'>242/379</span> </div> <div class='fl pad1y space-right2'> <span class="strong">66.16% </span> <span class="quiet">Lines</span> <span class='fraction'>1042/1575</span> </div> </div> </div> <div class='status-line medium'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file medium" data-value="AirPopover.js"><a href="AirPopover.js.html">AirPopover.js</a></td> <td data-value="50" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 50%;"></div><div class="cover-empty" style="width:50%;"></div></div></td> <td data-value="50" class="pct medium">50%</td> <td data-value="38" class="abs medium">19/38</td> <td data-value="7.14" class="pct low">7.14%</td> <td data-value="14" class="abs low">1/14</td> <td data-value="30" class="pct low">30%</td> <td data-value="10" class="abs low">3/10</td> <td data-value="50" class="pct medium">50%</td> <td data-value="38" class="abs medium">19/38</td> </tr> <tr> <td class="file medium" data-value="AutoLink.js"><a href="AutoLink.js.html">AutoLink.js</a></td> <td data-value="62.86" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 62%;"></div><div class="cover-empty" style="width:38%;"></div></div></td> <td data-value="62.86" class="pct medium">62.86%</td> <td data-value="35" class="abs medium">22/35</td> <td data-value="20" class="pct low">20%</td> <td data-value="15" class="abs low">3/15</td> <td data-value="88.89" class="pct high">88.89%</td> <td data-value="9" class="abs high">8/9</td> <td data-value="62.86" class="pct medium">62.86%</td> <td data-value="35" class="abs medium">22/35</td> </tr> <tr> <td class="file high" data-value="AutoSync.js"><a href="AutoSync.js.html">AutoSync.js</a></td> <td data-value="88.89" class="pic high"><div class="chart"><div class="cover-fill" style="width: 88%;"></div><div class="cover-empty" style="width:12%;"></div></div></td> <td data-value="88.89" class="pct high">88.89%</td> <td data-value="9" class="abs high">8/9</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="75" class="pct medium">75%</td> <td data-value="4" class="abs medium">3/4</td> <td data-value="88.89" class="pct high">88.89%</td> <td data-value="9" class="abs high">8/9</td> </tr> <tr> <td class="file high" data-value="Buttons.js"><a href="Buttons.js.html">Buttons.js</a></td> <td data-value="88.48" class="pic high"><div class="chart"><div class="cover-fill" style="width: 88%;"></div><div class="cover-empty" style="width:12%;"></div></div></td> <td data-value="88.48" class="pct high">88.48%</td> <td data-value="243" class="abs high">215/243</td> <td data-value="54.93" class="pct medium">54.93%</td> <td data-value="71" class="abs medium">39/71</td> <td data-value="91.03" class="pct high">91.03%</td> <td data-value="78" class="abs high">71/78</td> <td data-value="88.48" class="pct high">88.48%</td> <td data-value="243" class="abs high">215/243</td> </tr> <tr> <td class="file medium" data-value="Clipboard.js"><a href="Clipboard.js.html">Clipboard.js</a></td> <td data-value="60" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 60%;"></div><div class="cover-empty" style="width:40%;"></div></div></td> <td data-value="60" class="pct medium">60%</td> <td data-value="15" class="abs medium">9/15</td> <td data-value="0" class="pct low">0%</td> <td data-value="9" class="abs low">0/9</td> <td data-value="75" class="pct medium">75%</td> <td data-value="4" class="abs medium">3/4</td> <td data-value="60" class="pct medium">60%</td> <td data-value="15" class="abs medium">9/15</td> </tr> <tr> <td class="file medium" data-value="Codeview.js"><a href="Codeview.js.html">Codeview.js</a></td> <td data-value="66.67" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td> <td data-value="66.67" class="pct medium">66.67%</td> <td data-value="63" class="abs medium">42/63</td> <td data-value="45.83" class="pct low">45.83%</td> <td data-value="24" class="abs low">11/24</td> <td data-value="66.67" class="pct medium">66.67%</td> <td data-value="12" class="abs medium">8/12</td> <td data-value="66.67" class="pct medium">66.67%</td> <td data-value="63" class="abs medium">42/63</td> </tr> <tr> <td class="file low" data-value="Dropzone.js"><a href="Dropzone.js.html">Dropzone.js</a></td> <td data-value="46.67" class="pic low"><div class="chart"><div class="cover-fill" style="width: 46%;"></div><div class="cover-empty" style="width:54%;"></div></div></td> <td data-value="46.67" class="pct low">46.67%</td> <td data-value="60" class="abs low">28/60</td> <td data-value="5.56" class="pct low">5.56%</td> <td data-value="18" class="abs low">1/18</td> <td data-value="40" class="pct low">40%</td> <td data-value="15" class="abs low">6/15</td> <td data-value="46.67" class="pct low">46.67%</td> <td data-value="60" class="abs low">28/60</td> </tr> <tr> <td class="file medium" data-value="Editor.js"><a href="Editor.js.html">Editor.js</a></td> <td data-value="70.78" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 70%;"></div><div class="cover-empty" style="width:30%;"></div></div></td> <td data-value="70.78" class="pct medium">70.78%</td> <td data-value="397" class="abs medium">281/397</td> <td data-value="43.43" class="pct low">43.43%</td> <td data-value="175" class="abs low">76/175</td> <td data-value="64.29" class="pct medium">64.29%</td> <td data-value="84" class="abs medium">54/84</td> <td data-value="71.43" class="pct medium">71.43%</td> <td data-value="392" class="abs medium">280/392</td> </tr> <tr> <td class="file high" data-value="Fullscreen.js"><a href="Fullscreen.js.html">Fullscreen.js</a></td> <td data-value="96.67" class="pic high"><div class="chart"><div class="cover-fill" style="width: 96%;"></div><div class="cover-empty" style="width:4%;"></div></div></td> <td data-value="96.67" class="pct high">96.67%</td> <td data-value="30" class="abs high">29/30</td> <td data-value="75" class="pct medium">75%</td> <td data-value="4" class="abs medium">3/4</td> <td data-value="100" class="pct high">100%</td> <td data-value="6" class="abs high">6/6</td> <td data-value="96.67" class="pct high">96.67%</td> <td data-value="30" class="abs high">29/30</td> </tr> <tr> <td class="file medium" data-value="Handle.js"><a href="Handle.js.html">Handle.js</a></td> <td data-value="54.1" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 54%;"></div><div class="cover-empty" style="width:46%;"></div></div></td> <td data-value="54.1" class="pct medium">54.1%</td> <td data-value="61" class="abs medium">33/61</td> <td data-value="42.86" class="pct low">42.86%</td> <td data-value="14" class="abs low">6/14</td> <td data-value="71.43" class="pct medium">71.43%</td> <td data-value="14" class="abs medium">10/14</td> <td data-value="54.1" class="pct medium">54.1%</td> <td data-value="61" class="abs medium">33/61</td> </tr> <tr> <td class="file medium" data-value="HelpDialog.js"><a href="HelpDialog.js.html">HelpDialog.js</a></td> <td data-value="77.78" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 77%;"></div><div class="cover-empty" style="width:23%;"></div></div></td> <td data-value="77.78" class="pct medium">77.78%</td> <td data-value="36" class="abs medium">28/36</td> <td data-value="50" class="pct medium">50%</td> <td data-value="6" class="abs medium">3/6</td> <td data-value="58.33" class="pct medium">58.33%</td> <td data-value="12" class="abs medium">7/12</td> <td data-value="77.78" class="pct medium">77.78%</td> <td data-value="36" class="abs medium">28/36</td> </tr> <tr> <td class="file low" data-value="HintPopover.js"><a href="HintPopover.js.html">HintPopover.js</a></td> <td data-value="26.36" class="pic low"><div class="chart"><div class="cover-fill" style="width: 26%;"></div><div class="cover-empty" style="width:74%;"></div></div></td> <td data-value="26.36" class="pct low">26.36%</td> <td data-value="129" class="abs low">34/129</td> <td data-value="7.55" class="pct low">7.55%</td> <td data-value="53" class="abs low">4/53</td> <td data-value="12.5" class="pct low">12.5%</td> <td data-value="24" class="abs low">3/24</td> <td data-value="26.36" class="pct low">26.36%</td> <td data-value="129" class="abs low">34/129</td> </tr> <tr> <td class="file low" data-value="ImageDialog.js"><a href="ImageDialog.js.html">ImageDialog.js</a></td> <td data-value="40" class="pic low"><div class="chart"><div class="cover-fill" style="width: 40%;"></div><div class="cover-empty" style="width:60%;"></div></div></td> <td data-value="40" class="pct low">40%</td> <td data-value="65" class="abs low">26/65</td> <td data-value="14.29" class="pct low">14.29%</td> <td data-value="14" class="abs low">2/14</td> <td data-value="25" class="pct low">25%</td> <td data-value="16" class="abs low">4/16</td> <td data-value="40" class="pct low">40%</td> <td data-value="65" class="abs low">26/65</td> </tr> <tr> <td class="file high" data-value="ImagePopover.js"><a href="ImagePopover.js.html">ImagePopover.js</a></td> <td data-value="89.29" class="pic high"><div class="chart"><div class="cover-fill" style="width: 89%;"></div><div class="cover-empty" style="width:11%;"></div></div></td> <td data-value="89.29" class="pct high">89.29%</td> <td data-value="28" class="abs high">25/28</td> <td data-value="16.67" class="pct low">16.67%</td> <td data-value="6" class="abs low">1/6</td> <td data-value="100" class="pct high">100%</td> <td data-value="8" class="abs high">8/8</td> <td data-value="89.29" class="pct high">89.29%</td> <td data-value="28" class="abs high">25/28</td> </tr> <tr> <td class="file low" data-value="LinkDialog.js"><a href="LinkDialog.js.html">LinkDialog.js</a></td> <td data-value="34.21" class="pic low"><div class="chart"><div class="cover-fill" style="width: 34%;"></div><div class="cover-empty" style="width:66%;"></div></div></td> <td data-value="34.21" class="pct low">34.21%</td> <td data-value="76" class="abs low">26/76</td> <td data-value="11.11" class="pct low">11.11%</td> <td data-value="18" class="abs low">2/18</td> <td data-value="21.05" class="pct low">21.05%</td> <td data-value="19" class="abs low">4/19</td> <td data-value="34.21" class="pct low">34.21%</td> <td data-value="76" class="abs low">26/76</td> </tr> <tr> <td class="file medium" data-value="LinkPopover.js"><a href="LinkPopover.js.html">LinkPopover.js</a></td> <td data-value="77.78" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 77%;"></div><div class="cover-empty" style="width:23%;"></div></div></td> <td data-value="77.78" class="pct medium">77.78%</td> <td data-value="36" class="abs medium">28/36</td> <td data-value="16.67" class="pct low">16.67%</td> <td data-value="6" class="abs low">1/6</td> <td data-value="100" class="pct high">100%</td> <td data-value="10" class="abs high">10/10</td> <td data-value="77.78" class="pct medium">77.78%</td> <td data-value="36" class="abs medium">28/36</td> </tr> <tr> <td class="file medium" data-value="Placeholder.js"><a href="Placeholder.js.html">Placeholder.js</a></td> <td data-value="59.09" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 59%;"></div><div class="cover-empty" style="width:41%;"></div></div></td> <td data-value="59.09" class="pct medium">59.09%</td> <td data-value="22" class="abs medium">13/22</td> <td data-value="0" class="pct low">0%</td> <td data-value="2" class="abs low">0/2</td> <td data-value="33.33" class="pct low">33.33%</td> <td data-value="9" class="abs low">3/9</td> <td data-value="59.09" class="pct medium">59.09%</td> <td data-value="22" class="abs medium">13/22</td> </tr> <tr> <td class="file medium" data-value="Statusbar.js"><a href="Statusbar.js.html">Statusbar.js</a></td> <td data-value="55.56" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 55%;"></div><div class="cover-empty" style="width:45%;"></div></div></td> <td data-value="55.56" class="pct medium">55.56%</td> <td data-value="27" class="abs medium">15/27</td> <td data-value="37.5" class="pct low">37.5%</td> <td data-value="8" class="abs low">3/8</td> <td data-value="57.14" class="pct medium">57.14%</td> <td data-value="7" class="abs medium">4/7</td> <td data-value="55.56" class="pct medium">55.56%</td> <td data-value="27" class="abs medium">15/27</td> </tr> <tr> <td class="file high" data-value="TablePopover.js"><a href="TablePopover.js.html">TablePopover.js</a></td> <td data-value="91.43" class="pic high"><div class="chart"><div class="cover-fill" style="width: 91%;"></div><div class="cover-empty" style="width:9%;"></div></div></td> <td data-value="91.43" class="pct high">91.43%</td> <td data-value="35" class="abs high">32/35</td> <td data-value="66.67" class="pct medium">66.67%</td> <td data-value="6" class="abs medium">4/6</td> <td data-value="100" class="pct high">100%</td> <td data-value="10" class="abs high">10/10</td> <td data-value="91.43" class="pct high">91.43%</td> <td data-value="35" class="abs high">32/35</td> </tr> <tr> <td class="file high" data-value="Toolbar.js"><a href="Toolbar.js.html">Toolbar.js</a></td> <td data-value="93.24" class="pic high"><div class="chart"><div class="cover-fill" style="width: 93%;"></div><div class="cover-empty" style="width:7%;"></div></div></td> <td data-value="93.24" class="pct high">93.24%</td> <td data-value="74" class="abs high">69/74</td> <td data-value="67.86" class="pct medium">67.86%</td> <td data-value="28" class="abs medium">19/28</td> <td data-value="100" class="pct high">100%</td> <td data-value="12" class="abs high">12/12</td> <td data-value="93.24" class="pct high">93.24%</td> <td data-value="74" class="abs high">69/74</td> </tr> <tr> <td class="file medium" data-value="VideoDialog.js"><a href="VideoDialog.js.html">VideoDialog.js</a></td> <td data-value="60.4" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 60%;"></div><div class="cover-empty" style="width:40%;"></div></div></td> <td data-value="60.4" class="pct medium">60.4%</td> <td data-value="101" class="abs medium">61/101</td> <td data-value="55.1" class="pct medium">55.1%</td> <td data-value="49" class="abs medium">27/49</td> <td data-value="31.25" class="pct low">31.25%</td> <td data-value="16" class="abs low">5/16</td> <td data-value="60.4" class="pct medium">60.4%</td> <td data-value="101" class="abs medium">61/101</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�g&:��Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Statusbar.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Statusbar.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Statusbar.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">55.56% </span> <span class="quiet">Statements</span> <span class='fraction'>15/27</span> </div> <div class='fl pad1y space-right2'> <span class="strong">37.5% </span> <span class="quiet">Branches</span> <span class='fraction'>3/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">57.14% </span> <span class="quiet">Functions</span> <span class='fraction'>4/7</span> </div> <div class='fl pad1y space-right2'> <span class="strong">55.56% </span> <span class="quiet">Lines</span> <span class='fraction'>15/27</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; const EDITABLE_PADDING = 24; export default class Statusbar { constructor(context) { this.$document = $(document); this.$statusbar = context.layoutInfo.statusbar; this.$editable = context.layoutInfo.editable; this.options = context.options; } initialize() { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.airMode || this.options.disableResizeEditor) { <span class="cstat-no" title="statement not covered" > this.destroy();</span> <span class="cstat-no" title="statement not covered" > return;</span> } this.$statusbar.on('mousedown', <span class="fstat-no" title="function not covered" >(event)</span> => { <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > event.stopPropagation();</span> <span class="cstat-no" title="statement not covered" > const editableTop = this.$editable.offset().top - this.$document.scrollTop();</span> <span class="cstat-no" title="statement not covered" > const onMouseMove = <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > let height = event.clientY - (editableTop + EDITABLE_PADDING);</span> <span class="cstat-no" title="statement not covered" > height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height;</span> <span class="cstat-no" title="statement not covered" > height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height;</span> <span class="cstat-no" title="statement not covered" > this.$editable.height(height);</span> }; <span class="cstat-no" title="statement not covered" > this.$document.on('mousemove', onMouseMove).one('mouseup', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.$document.off('mousemove', onMouseMove);</span> }); }); } destroy() { this.$statusbar.off(); this.$statusbar.addClass('locked'); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\ǻJUUTcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/LinkDialog.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/LinkDialog.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> LinkDialog.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">34.21% </span> <span class="quiet">Statements</span> <span class='fraction'>26/76</span> </div> <div class='fl pad1y space-right2'> <span class="strong">11.11% </span> <span class="quiet">Branches</span> <span class='fraction'>2/18</span> </div> <div class='fl pad1y space-right2'> <span class="strong">21.05% </span> <span class="quiet">Functions</span> <span class='fraction'>4/19</span> </div> <div class='fl pad1y space-right2'> <span class="strong">34.21% </span> <span class="quiet">Lines</span> <span class='fraction'>26/76</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; export default class LinkDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']); } initialize() { const $container = this.options.dialogsInBody ? <span class="branch-0 cbranch-no" title="branch not covered" >this.$body </span>: this.$editor; const body = [ '<div class="form-group note-form-group">', `<label class="note-form-label">${this.lang.link.textToDisplay}</label>`, '<input class="note-link-text form-control note-form-control note-input" type="text" />', '</div>', '<div class="form-group note-form-group">', `<label class="note-form-label">${this.lang.link.url}</label>`, '<input class="note-link-url form-control note-form-control note-input" type="text" value="http://" />', '</div>', !this.options.disableLinkTarget ? $('<div/>').append(this.ui.checkbox({ id: 'sn-checkbox-open-in-new-window', text: this.lang.link.openInNewWindow, checked: true }).render()).html() : <span class="branch-1 cbranch-no" title="branch not covered" >''</span> ].join(''); const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn'; const footer = `<button type="submit" href="#" class="${buttonClass}" disabled>${this.lang.link.insert}</button>`; this.$dialog = this.ui.dialog({ className: 'link-dialog', title: this.lang.link.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } <span class="fstat-no" title="function not covered" > bindEnterKey($input, $btn)</span> { <span class="cstat-no" title="statement not covered" > $input.on('keypress', <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > if (event.keyCode === key.code.ENTER) {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > $btn.trigger('click');</span> } }); } /** * toggle update button */ <span class="fstat-no" title="function not covered" > toggleLinkBtn($linkBtn, $linkText, $linkUrl)</span> { <span class="cstat-no" title="statement not covered" > this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());</span> } /** * Show link dialog and set event handlers on dialog controls. * * @param {Object} linkInfo * @return {Promise} */ <span class="fstat-no" title="function not covered" > showLinkDialog(linkInfo)</span> { <span class="cstat-no" title="statement not covered" > return $.Deferred(<span class="fstat-no" title="function not covered" >(deferred)</span> => {</span> <span class="cstat-no" title="statement not covered" > const $linkText = this.$dialog.find('.note-link-text');</span> <span class="cstat-no" title="statement not covered" > const $linkUrl = this.$dialog.find('.note-link-url');</span> <span class="cstat-no" title="statement not covered" > const $linkBtn = this.$dialog.find('.note-link-btn');</span> <span class="cstat-no" title="statement not covered" > const $openInNewWindow = this.$dialog.find('input[type=checkbox]');</span> <span class="cstat-no" title="statement not covered" > this.ui.onDialogShown(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('dialog.shown');</span> // if no url was given, copy text to url <span class="cstat-no" title="statement not covered" > if (!linkInfo.url) {</span> <span class="cstat-no" title="statement not covered" > linkInfo.url = linkInfo.text;</span> } <span class="cstat-no" title="statement not covered" > $linkText.val(linkInfo.text);</span> <span class="cstat-no" title="statement not covered" > const handleLinkTextUpdate = <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);</span> // if linktext was modified by keyup, // stop cloning text from linkUrl <span class="cstat-no" title="statement not covered" > linkInfo.text = $linkText.val();</span> }; <span class="cstat-no" title="statement not covered" > $linkText.on('input', handleLinkTextUpdate).on('paste', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > setTimeout(handleLinkTextUpdate, 0);</span> }); <span class="cstat-no" title="statement not covered" > const handleLinkUrlUpdate = <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);</span> // display same link on `Text to display` input // when create a new link <span class="cstat-no" title="statement not covered" > if (!linkInfo.text) {</span> <span class="cstat-no" title="statement not covered" > $linkText.val($linkUrl.val());</span> } }; <span class="cstat-no" title="statement not covered" > $linkUrl.on('input', handleLinkUrlUpdate).on('paste', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > setTimeout(handleLinkUrlUpdate, 0);</span> }).val(linkInfo.url); <span class="cstat-no" title="statement not covered" > if (!env.isSupportTouch) {</span> <span class="cstat-no" title="statement not covered" > $linkUrl.trigger('focus');</span> } <span class="cstat-no" title="statement not covered" > this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);</span> <span class="cstat-no" title="statement not covered" > this.bindEnterKey($linkUrl, $linkBtn);</span> <span class="cstat-no" title="statement not covered" > this.bindEnterKey($linkText, $linkBtn);</span> <span class="cstat-no" title="statement not covered" > const isChecked = linkInfo.isNewWindow !== undefined</span> ? linkInfo.isNewWindow : this.context.options.linkTargetBlank; <span class="cstat-no" title="statement not covered" > $openInNewWindow.prop('checked', isChecked);</span> <span class="cstat-no" title="statement not covered" > $linkBtn.one('click', <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > deferred.resolve({</span> range: linkInfo.range, url: $linkUrl.val(), text: $linkText.val(), isNewWindow: $openInNewWindow.is(':checked') }); <span class="cstat-no" title="statement not covered" > this.ui.hideDialog(this.$dialog);</span> }); }); <span class="cstat-no" title="statement not covered" > this.ui.onDialogHidden(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> // detach events <span class="cstat-no" title="statement not covered" > $linkText.off('input paste keypress');</span> <span class="cstat-no" title="statement not covered" > $linkUrl.off('input paste keypress');</span> <span class="cstat-no" title="statement not covered" > $linkBtn.off('click');</span> <span class="cstat-no" title="statement not covered" > if (deferred.state() === 'pending') {</span> <span class="cstat-no" title="statement not covered" > deferred.reject();</span> } }); <span class="cstat-no" title="statement not covered" > this.ui.showDialog(this.$dialog);</span> }).promise(); } /** * @param {Object} layoutInfo */ <span class="fstat-no" title="function not covered" > show() {</span> <span class="cstat-no" title="statement not covered" > const linkInfo = this.context.invoke('editor.getLinkInfo');</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.saveRange');</span> <span class="cstat-no" title="statement not covered" > this.showLinkDialog(linkInfo).then(<span class="fstat-no" title="function not covered" >(linkInfo)</span> => {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.createLink', linkInfo);</span> }).fail(<span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> }); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�̅+BBPcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Handle.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Handle.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Handle.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">54.1% </span> <span class="quiet">Statements</span> <span class='fraction'>33/61</span> </div> <div class='fl pad1y space-right2'> <span class="strong">42.86% </span> <span class="quiet">Branches</span> <span class='fraction'>6/14</span> </div> <div class='fl pad1y space-right2'> <span class="strong">71.43% </span> <span class="quiet">Functions</span> <span class='fraction'>10/14</span> </div> <div class='fl pad1y space-right2'> <span class="strong">54.1% </span> <span class="quiet">Lines</span> <span class='fraction'>33/61</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">55×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">58×</span> <span class="cline-any cline-yes">58×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import dom from '../core/dom'; export default class Handle { constructor(context) { this.context = context; this.$document = $(document); this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.lang = this.options.langInfo; this.events = { 'summernote.mousedown': (we, e) => { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.update(e.target)) { <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> } }, 'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => { this.update(); }, 'summernote.disable': () => { this.hide(); }, 'summernote.codeview.toggled': () => { this.update(); } }; } initialize() { this.$handle = $([ '<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 ? <span class="branch-0 cbranch-no" title="branch not covered" >'note-control-holder' </span>: 'note-control-sizing'), ' note-control-se"></div>', (this.options.disableResizeImage ? <span class="branch-0 cbranch-no" title="branch not covered" >'' </span>: '<div class="note-control-selection-info"></div>'), '</div>', '</div>' ].join('')).prependTo(this.$editingArea); this.$handle.on('mousedown', <span class="fstat-no" title="function not covered" >(event)</span> => { <span class="cstat-no" title="statement not covered" > if (dom.isControlSizing(event.target)) {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > event.stopPropagation();</span> <span class="cstat-no" title="statement not covered" > const $target = this.$handle.find('.note-control-selection').data('target');</span> <span class="cstat-no" title="statement not covered" > const posStart = $target.offset();</span> <span class="cstat-no" title="statement not covered" > const scrollTop = this.$document.scrollTop();</span> <span class="cstat-no" title="statement not covered" > const onMouseMove = <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.resizeTo', {</span> x: event.clientX - posStart.left, y: event.clientY - (posStart.top - scrollTop) }, $target, !event.shiftKey); <span class="cstat-no" title="statement not covered" > this.update($target[0]);</span> }; <span class="cstat-no" title="statement not covered" > this.$document</span> .on('mousemove', onMouseMove) .one('mouseup', <span class="fstat-no" title="function not covered" >(e)</span> => { <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> <span class="cstat-no" title="statement not covered" > this.$document.off('mousemove', onMouseMove);</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.afterCommand');</span> }); <span class="cstat-no" title="statement not covered" > if (!$target.data('ratio')) { // original ratio.</span> <span class="cstat-no" title="statement not covered" > $target.data('ratio', $target.height() / $target.width());</span> } } }); // Listen for scrolling on the handle overlay. this.$handle.on('wheel', <span class="fstat-no" title="function not covered" >(e)</span> => { <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> <span class="cstat-no" title="statement not covered" > this.update();</span> }); } destroy() { this.$handle.remove(); } update(target) { if (this.context.isDisabled()) { return false; } const isImage = dom.isImg(target); const $selection = this.$handle.find('.note-control-selection'); this.context.invoke('imagePopover.update', target); <span class="missing-if-branch" title="if path not taken" >I</span>if (isImage) { <span class="cstat-no" title="statement not covered" > const $image = $(target);</span> <span class="cstat-no" title="statement not covered" > const position = $image.position();</span> <span class="cstat-no" title="statement not covered" > const pos = {</span> left: position.left + parseInt($image.css('marginLeft'), 10), top: position.top + parseInt($image.css('marginTop'), 10) }; // exclude margin <span class="cstat-no" title="statement not covered" > const imageSize = {</span> w: $image.outerWidth(false), h: $image.outerHeight(false) }; <span class="cstat-no" title="statement not covered" > $selection.css({</span> display: 'block', left: pos.left, top: pos.top, width: imageSize.w, height: imageSize.h }).data('target', $image); // save current image element. <span class="cstat-no" title="statement not covered" > const origImageObj = new Image();</span> <span class="cstat-no" title="statement not covered" > origImageObj.src = $image.attr('src');</span> <span class="cstat-no" title="statement not covered" > const sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';</span> <span class="cstat-no" title="statement not covered" > $selection.find('.note-control-selection-info').text(sizingText);</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.saveTarget', target);</span> } else { this.hide(); } return isImage; } /** * hide * * @param {jQuery} $handle */ hide() { this.context.invoke('editor.clearTarget'); this.$handle.children().hide(); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�,�gw'w'Tcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/HelpDialog.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/HelpDialog.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> HelpDialog.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">77.78% </span> <span class="quiet">Statements</span> <span class='fraction'>28/36</span> </div> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Branches</span> <span class='fraction'>3/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">58.33% </span> <span class="quiet">Functions</span> <span class='fraction'>7/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">77.78% </span> <span class="quiet">Lines</span> <span class='fraction'>28/36</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">2079×</span> <span class="cline-any cline-yes">2079×</span> <span class="cline-any cline-yes">2079×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2079×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; export default class HelpDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } initialize() { const $container = this.options.dialogsInBody ? <span class="branch-0 cbranch-no" title="branch not covered" >this.$body </span>: this.$editor; const body = [ '<p class="text-center">', '<a href="http://summernote.org/" target="_blank">Summernote @@VERSION@@</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: body, callback: ($node) => { $node.find('.modal-body,.note-modal-body').css({ 'max-height': 300, 'overflow': 'scroll' }); } }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } createShortcutList() { const keyMap = this.options.keyMap[env.isMac ? 'mac' : <span class="branch-1 cbranch-no" title="branch not covered" >'pc']</span>; return Object.keys(keyMap).map((key) => { const command = keyMap[key]; const $row = $('<div><div class="help-list-item"/></div>'); $row.append($('<label><kbd>' + key + '</kdb></label>').css({ 'width': 180, 'margin-right': 10 })).append($('<span/>').html(this.context.memo('help.' + command) || <span class="branch-1 cbranch-no" title="branch not covered" >command)</span>); return $row.html(); }).join(''); } /** * show help dialog * * @return {Promise} */ <span class="fstat-no" title="function not covered" > showHelpDialog() {</span> <span class="cstat-no" title="statement not covered" > return $.Deferred(<span class="fstat-no" title="function not covered" >(deferred)</span> => {</span> <span class="cstat-no" title="statement not covered" > this.ui.onDialogShown(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('dialog.shown');</span> <span class="cstat-no" title="statement not covered" > deferred.resolve();</span> }); <span class="cstat-no" title="statement not covered" > this.ui.showDialog(this.$dialog);</span> }).promise(); } <span class="fstat-no" title="function not covered" > show() {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.saveRange');</span> <span class="cstat-no" title="statement not covered" > this.showHelpDialog().then(<span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> }); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\x]��8�8Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Toolbar.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Toolbar.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Toolbar.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">93.24% </span> <span class="quiet">Statements</span> <span class='fraction'>69/74</span> </div> <div class='fl pad1y space-right2'> <span class="strong">67.86% </span> <span class="quiet">Branches</span> <span class='fraction'>19/28</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>12/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">93.24% </span> <span class="quiet">Lines</span> <span class='fraction'>69/74</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">87×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">52×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">544×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">543×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; export default class Toolbar { constructor(context) { this.context = context; this.$window = $(window); this.$document = $(document); this.ui = $.summernote.ui; this.$note = context.layoutInfo.note; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.options = context.options; this.followScroll = this.followScroll.bind(this); } shouldInitialize() { return !this.options.airMode; } initialize() { this.options.toolbar = this.options.toolbar || <span class="branch-1 cbranch-no" title="branch not covered" >[];</span> <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.options.toolbar.length) { <span class="cstat-no" title="statement not covered" > this.$toolbar.hide();</span> } else { this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar); } <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.toolbarContainer) { <span class="cstat-no" title="statement not covered" > this.$toolbar.appendTo(this.options.toolbarContainer);</span> } this.changeContainer(false); this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => { this.context.invoke('buttons.updateCurrentStyle'); }); this.context.invoke('buttons.updateCurrentStyle'); <span class="missing-if-branch" title="else path not taken" >E</span>if (this.options.followingToolbar) { this.$window.on('scroll resize', this.followScroll); } } destroy() { this.$toolbar.children().remove(); <span class="missing-if-branch" title="else path not taken" >E</span>if (this.options.followingToolbar) { this.$window.off('scroll resize', this.followScroll); } } followScroll() { if (this.$editor.hasClass('fullscreen')) { return false; } const $toolbarWrapper = this.$toolbar.parent('.note-toolbar-wrapper'); const editorHeight = this.$editor.outerHeight(); const editorWidth = this.$editor.width(); const toolbarHeight = this.$toolbar.height(); $toolbarWrapper.css({ height: toolbarHeight }); // check if the web app is currently using another static bar let otherBarHeight = 0; <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.otherStaticBar) { <span class="cstat-no" title="statement not covered" > otherBarHeight = $(this.options.otherStaticBar).outerHeight();</span> } const currentOffset = this.$document.scrollTop(); const editorOffsetTop = this.$editor.offset().top; const editorOffsetBottom = editorOffsetTop + editorHeight; const activateOffset = editorOffsetTop - otherBarHeight; const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight; <span class="missing-if-branch" title="if path not taken" >I</span>if ((currentOffset > activateOffset) && (<span class="branch-1 cbranch-no" title="branch not covered" >currentOffset < deactivateOffsetBottom)</span>) { <span class="cstat-no" title="statement not covered" > this.$toolbar.css({</span> position: 'fixed', top: otherBarHeight, width: editorWidth }); } else { this.$toolbar.css({ position: 'relative', top: 0, width: '100%' }); } } changeContainer(isFullscreen) { if (isFullscreen) { this.$toolbar.prependTo(this.$editor); } else { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.toolbarContainer) { <span class="cstat-no" title="statement not covered" > this.$toolbar.appendTo(this.options.toolbarContainer);</span> } } } updateFullscreen(isFullscreen) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen); this.changeContainer(isFullscreen); } updateCodeview(isCodeview) { this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview); if (isCodeview) { this.deactivate(); } else { this.activate(); } } activate(isIncludeCodeview) { let $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, true); } deactivate(isIncludeCodeview) { let $btn = this.$toolbar.find('button'); if (!isIncludeCodeview) { $btn = $btn.not('.btn-codeview'); } this.ui.toggleBtn($btn, false); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\'1G��Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/ImagePopover.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/ImagePopover.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> ImagePopover.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">89.29% </span> <span class="quiet">Statements</span> <span class='fraction'>25/28</span> </div> <div class='fl pad1y space-right2'> <span class="strong">16.67% </span> <span class="quiet">Branches</span> <span class='fraction'>1/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>8/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">89.29% </span> <span class="quiet">Lines</span> <span class='fraction'>25/28</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">133×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">54×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">58×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import lists from '../core/lists'; import dom from '../core/dom'; /** * Image popover module * mouse events that show/hide popover will be handled by Handle.js. * Handle.js will receive the events and invoke 'imagePopover.update'. */ export default class ImagePopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.editable = context.layoutInfo.editable[0]; this.options = context.options; this.events = { 'summernote.disable': () => { this.hide(); } }; } shouldInitialize() { return !lists.isEmpty(this.options.popover.image); } initialize() { this.$popover = this.ui.popover({ className: 'note-image-popover' }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.image); } destroy() { this.$popover.remove(); } update(target) { <span class="missing-if-branch" title="if path not taken" >I</span>if (dom.isImg(target)) { <span class="cstat-no" title="statement not covered" > const pos = dom.posFromPlaceholder(target);</span> <span class="cstat-no" title="statement not covered" > const posEditor = dom.posFromPlaceholder(this.editable);</span> <span class="cstat-no" title="statement not covered" > this.$popover.css({</span> display: 'block', left: this.options.popatmouse ? event.pageX - 20 : pos.left, top: this.options.popatmouse ? event.pageY : Math.min(pos.top, posEditor.top) }); } else { this.hide(); } } hide() { this.$popover.hide(); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\Bj)�;�;Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Dropzone.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Dropzone.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Dropzone.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">46.67% </span> <span class="quiet">Statements</span> <span class='fraction'>28/60</span> </div> <div class='fl pad1y space-right2'> <span class="strong">5.56% </span> <span class="quiet">Branches</span> <span class='fraction'>1/18</span> </div> <div class='fl pad1y space-right2'> <span class="strong">40% </span> <span class="quiet">Functions</span> <span class='fraction'>6/15</span> </div> <div class='fl pad1y space-right2'> <span class="strong">46.67% </span> <span class="quiet">Lines</span> <span class='fraction'>28/60</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; export default class Dropzone { constructor(context) { this.context = context; this.$eventListener = $(document); this.$editor = context.layoutInfo.editor; this.$editable = context.layoutInfo.editable; this.options = context.options; this.lang = this.options.langInfo; this.documentEventHandlers = {}; this.$dropzone = $([ '<div class="note-dropzone">', ' <div class="note-dropzone-message"/>', '</div>' ].join('')).prependTo(this.$editor); } /** * attach Drag and Drop Events */ initialize() { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.options.disableDragAndDrop) { // prevent default drop event <span class="cstat-no" title="statement not covered" > this.documentEventHandlers.onDrop = <span class="fstat-no" title="function not covered" >(e)</span> => {</span> <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> }; // do not consider outside of dropzone <span class="cstat-no" title="statement not covered" > this.$eventListener = this.$dropzone;</span> <span class="cstat-no" title="statement not covered" > this.$eventListener.on('drop', this.documentEventHandlers.onDrop);</span> } else { this.attachDragAndDropEvent(); } } /** * attach Drag and Drop Events */ attachDragAndDropEvent() { let collection = $(); const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message'); this.documentEventHandlers.onDragenter = <span class="fstat-no" title="function not covered" >(e)</span> => { <span class="cstat-no" title="statement not covered" > const isCodeview = this.context.invoke('codeview.isActivated');</span> <span class="cstat-no" title="statement not covered" > const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0;</span> <span class="cstat-no" title="statement not covered" > if (!isCodeview && !collection.length && hasEditorSize) {</span> <span class="cstat-no" title="statement not covered" > this.$editor.addClass('dragover');</span> <span class="cstat-no" title="statement not covered" > this.$dropzone.width(this.$editor.width());</span> <span class="cstat-no" title="statement not covered" > this.$dropzone.height(this.$editor.height());</span> <span class="cstat-no" title="statement not covered" > $dropzoneMessage.text(this.lang.image.dragImageHere);</span> } <span class="cstat-no" title="statement not covered" > collection = collection.add(e.target);</span> }; this.documentEventHandlers.onDragleave = <span class="fstat-no" title="function not covered" >(e)</span> => { <span class="cstat-no" title="statement not covered" > collection = collection.not(e.target);</span> <span class="cstat-no" title="statement not covered" > if (!collection.length) {</span> <span class="cstat-no" title="statement not covered" > this.$editor.removeClass('dragover');</span> } }; this.documentEventHandlers.onDrop = <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > collection = $();</span> <span class="cstat-no" title="statement not covered" > this.$editor.removeClass('dragover');</span> }; // show dropzone on dragenter when dragging a object to document // -but only if the editor is visible, i.e. has a positive width and height this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter) .on('dragleave', this.documentEventHandlers.onDragleave) .on('drop', this.documentEventHandlers.onDrop); // change dropzone's message on hover. this.$dropzone.on('dragenter', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.$dropzone.addClass('hover');</span> <span class="cstat-no" title="statement not covered" > $dropzoneMessage.text(this.lang.image.dropImage);</span> }).on('dragleave', <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.$dropzone.removeClass('hover');</span> <span class="cstat-no" title="statement not covered" > $dropzoneMessage.text(this.lang.image.dragImageHere);</span> }); // attach dropImage this.$dropzone.on('drop', <span class="fstat-no" title="function not covered" >(event)</span> => { <span class="cstat-no" title="statement not covered" > const dataTransfer = event.originalEvent.dataTransfer;</span> // stop the browser from opening the dropped content <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {</span> <span class="cstat-no" title="statement not covered" > this.$editable.focus();</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);</span> } else { <span class="cstat-no" title="statement not covered" > $.each(dataTransfer.types, <span class="fstat-no" title="function not covered" >(idx, type)</span> => {</span> <span class="cstat-no" title="statement not covered" > const content = dataTransfer.getData(type);</span> <span class="cstat-no" title="statement not covered" > if (type.toLowerCase().indexOf('text') > -1) {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.pasteHTML', content);</span> } else { <span class="cstat-no" title="statement not covered" > $(content).each(<span class="fstat-no" title="function not covered" >(idx, item)</span> => {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.insertNode', item);</span> }); } }); } }).on('dragover', false); // prevent default dragover event } destroy() { Object.keys(this.documentEventHandlers).forEach((key) => { this.$eventListener.off(key.substr(2).toLowerCase(), this.documentEventHandlers[key]); }); this.documentEventHandlers = {}; } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\o���Tcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Fullscreen.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Fullscreen.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Fullscreen.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">96.67% </span> <span class="quiet">Statements</span> <span class='fraction'>29/30</span> </div> <div class='fl pad1y space-right2'> <span class="strong">75% </span> <span class="quiet">Branches</span> <span class='fraction'>3/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>6/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">96.67% </span> <span class="quiet">Lines</span> <span class='fraction'>29/30</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">7×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; export default class Fullscreen { constructor(context) { this.context = context; this.$editor = context.layoutInfo.editor; this.$toolbar = context.layoutInfo.toolbar; this.$editable = context.layoutInfo.editable; this.$codable = context.layoutInfo.codable; this.$window = $(window); this.$scrollbar = $('html, body'); this.onResize = () => { this.resizeTo({ h: this.$window.height() - this.$toolbar.outerHeight() }); }; } resizeTo(size) { this.$editable.css('height', size.h); this.$codable.css('height', size.h); <span class="missing-if-branch" title="if path not taken" >I</span>if (this.$codable.data('cmeditor')) { <span class="cstat-no" title="statement not covered" > this.$codable.data('cmeditor').setsize(null, size.h);</span> } } /** * toggle fullscreen */ toggle() { this.$editor.toggleClass('fullscreen'); if (this.isFullscreen()) { this.$editable.data('orgHeight', this.$editable.css('height')); this.$window.on('resize', this.onResize).trigger('resize'); this.$scrollbar.css('overflow', 'hidden'); } else { this.$window.off('resize', this.onResize); this.resizeTo({ h: this.$editable.data('orgHeight') }); this.$scrollbar.css('overflow', 'visible'); } this.context.invoke('toolbar.updateFullscreen', this.isFullscreen()); } isFullscreen() { return this.$editor.hasClass('fullscreen'); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��V�!�!Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/LinkPopover.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/LinkPopover.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> LinkPopover.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">77.78% </span> <span class="quiet">Statements</span> <span class='fraction'>28/36</span> </div> <div class='fl pad1y space-right2'> <span class="strong">16.67% </span> <span class="quiet">Branches</span> <span class='fraction'>1/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>10/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">77.78% </span> <span class="quiet">Lines</span> <span class='fraction'>28/36</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-yes">53×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">57×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import lists from '../core/lists'; import dom from '../core/dom'; export default class LinkPopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.options = context.options; this.events = { 'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => { this.update(); }, 'summernote.disable summernote.dialog.shown': () => { this.hide(); } }; } shouldInitialize() { return !lists.isEmpty(this.options.popover.link); } initialize() { this.$popover = this.ui.popover({ className: 'note-link-popover', callback: ($node) => { const $content = $node.find('.popover-content,.note-popover-content'); $content.prepend('<span><a target="_blank"></a>&nbsp;</span>'); } }).render().appendTo(this.options.container); const $content = this.$popover.find('.popover-content,.note-popover-content'); this.context.invoke('buttons.build', $content, this.options.popover.link); } destroy() { this.$popover.remove(); } update() { // Prevent focusing on editable when invoke('code') is executed <span class="missing-if-branch" title="else path not taken" >E</span>if (!this.context.invoke('editor.hasFocus')) { this.hide(); return; } <span class="cstat-no" title="statement not covered" > const rng = this.context.invoke('editor.createRange');</span> <span class="cstat-no" title="statement not covered" > if (rng.isCollapsed() && rng.isOnAnchor()) {</span> <span class="cstat-no" title="statement not covered" > const anchor = dom.ancestor(rng.sc, dom.isAnchor);</span> <span class="cstat-no" title="statement not covered" > const href = $(anchor).attr('href');</span> <span class="cstat-no" title="statement not covered" > this.$popover.find('a').attr('href', href).html(href);</span> <span class="cstat-no" title="statement not covered" > const pos = dom.posFromPlaceholder(anchor);</span> <span class="cstat-no" title="statement not covered" > this.$popover.css({</span> display: 'block', left: pos.left, top: pos.top }); } else { <span class="cstat-no" title="statement not covered" > this.hide();</span> } } hide() { this.$popover.hide(); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�f�nbbUcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/VideoDialog.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/VideoDialog.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> VideoDialog.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">60.4% </span> <span class="quiet">Statements</span> <span class='fraction'>61/101</span> </div> <div class='fl pad1y space-right2'> <span class="strong">55.1% </span> <span class="quiet">Branches</span> <span class='fraction'>27/49</span> </div> <div class='fl pad1y space-right2'> <span class="strong">31.25% </span> <span class="quiet">Functions</span> <span class='fraction'>5/16</span> </div> <div class='fl pad1y space-right2'> <span class="strong">60.4% </span> <span class="quiet">Lines</span> <span class='fraction'>61/101</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from '../core/env'; import key from '../core/key'; export default class VideoDialog { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$body = $(document.body); this.$editor = context.layoutInfo.editor; this.options = context.options; this.lang = this.options.langInfo; } initialize() { const $container = this.options.dialogsInBody ? <span class="branch-0 cbranch-no" title="branch not covered" >this.$body </span>: this.$editor; const body = [ '<div class="form-group note-form-group row-fluid">', `<label class="note-form-label">${this.lang.video.url} <small class="text-muted">${this.lang.video.providers}</small></label>`, '<input class="note-video-url form-control note-form-control note-input" type="text" />', '</div>' ].join(''); const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn'; const footer = `<button type="submit" href="#" class="${buttonClass}" disabled>${this.lang.video.insert}</button>`; this.$dialog = this.ui.dialog({ title: this.lang.video.insert, fade: this.options.dialogsFade, body: body, footer: footer }).render().appendTo($container); } destroy() { this.ui.hideDialog(this.$dialog); this.$dialog.remove(); } <span class="fstat-no" title="function not covered" > bindEnterKey($input, $btn)</span> { <span class="cstat-no" title="statement not covered" > $input.on('keypress', <span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > if (event.keyCode === key.code.ENTER) {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > $btn.trigger('click');</span> } }); } createVideoNode(url) { // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm) const ytRegExp = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/; const ytMatch = url.match(ytRegExp); const igRegExp = /(?:www\.|\/\/)instagram\.com\/p\/(.[a-zA-Z0-9_-]*)/; const igMatch = url.match(igRegExp); const vRegExp = /\/\/vine\.co\/v\/([a-zA-Z0-9]+)/; const vMatch = url.match(vRegExp); const vimRegExp = /\/\/(player\.)?vimeo\.com\/([a-z]*\/)*(\d+)[?]?.*/; const vimMatch = url.match(vimRegExp); const dmRegExp = /.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/; const dmMatch = url.match(dmRegExp); const youkuRegExp = /\/\/v\.youku\.com\/v_show\/id_(\w+)=*\.html/; const youkuMatch = url.match(youkuRegExp); const qqRegExp = /\/\/v\.qq\.com.*?vid=(.+)/; const qqMatch = url.match(qqRegExp); const qqRegExp2 = /\/\/v\.qq\.com\/x?\/?(page|cover).*?\/([^\/]+)\.html\??.*/; const qqMatch2 = url.match(qqRegExp2); const mp4RegExp = /^.+.(mp4|m4v)$/; const mp4Match = url.match(mp4RegExp); const oggRegExp = /^.+.(ogg|ogv)$/; const oggMatch = url.match(oggRegExp); const webmRegExp = /^.+.(webm)$/; const webmMatch = url.match(webmRegExp); let $video; <span class="missing-if-branch" title="if path not taken" >I</span>if (ytMatch && <span class="branch-1 cbranch-no" title="branch not covered" >ytMatch[1].length === 11)</span> { <span class="cstat-no" title="statement not covered" > const youtubeId = ytMatch[1];</span> <span class="cstat-no" title="statement not covered" > $video = $('<iframe>')</span> .attr('frameborder', 0) .attr('src', '//www.youtube.com/embed/' + youtubeId) .attr('width', '640').attr('height', '360'); } else <span class="missing-if-branch" title="if path not taken" >I</span>if (igMatch && <span class="branch-1 cbranch-no" title="branch not covered" >igMatch[0].length)</span> { <span class="cstat-no" title="statement not covered" > $video = $('<iframe>')</span> .attr('frameborder', 0) .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/') .attr('width', '612').attr('height', '710') .attr('scrolling', 'no') .attr('allowtransparency', 'true'); } else <span class="missing-if-branch" title="if path not taken" >I</span>if (vMatch && <span class="branch-1 cbranch-no" title="branch not covered" >vMatch[0].length)</span> { <span class="cstat-no" title="statement not covered" > $video = $('<iframe>')</span> .attr('frameborder', 0) .attr('src', vMatch[0] + '/embed/simple') .attr('width', '600').attr('height', '600') .attr('class', 'vine-embed'); } else <span class="missing-if-branch" title="if path not taken" >I</span>if (vimMatch && <span class="branch-1 cbranch-no" title="branch not covered" >vimMatch[3].length)</span> { <span class="cstat-no" title="statement not covered" > $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')</span> .attr('frameborder', 0) .attr('src', '//player.vimeo.com/video/' + vimMatch[3]) .attr('width', '640').attr('height', '360'); } else <span class="missing-if-branch" title="if path not taken" >I</span>if (dmMatch && <span class="branch-1 cbranch-no" title="branch not covered" >dmMatch[2].length)</span> { <span class="cstat-no" title="statement not covered" > $video = $('<iframe>')</span> .attr('frameborder', 0) .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2]) .attr('width', '640').attr('height', '360'); } else <span class="missing-if-branch" title="if path not taken" >I</span>if (youkuMatch && <span class="branch-1 cbranch-no" title="branch not covered" >youkuMatch[1].length)</span> { <span class="cstat-no" title="statement not covered" > $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')</span> .attr('frameborder', 0) .attr('height', '498') .attr('width', '510') .attr('src', '//player.youku.com/embed/' + youkuMatch[1]); } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) { const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]); $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>') .attr('frameborder', 0) .attr('height', '310') .attr('width', '500') .attr('src', 'http://v.qq.com/iframe/player.html?vid=' + vid + '&amp;auto=0'); } else <span class="missing-if-branch" title="if path not taken" >I</span>if (mp4Match || oggMatch || webmMatch) { <span class="cstat-no" title="statement not covered" > $video = $('<video controls>')</span> .attr('src', url) .attr('width', '640').attr('height', '360'); } else { // this is not a known video link. Now what, Cat? Now what? return false; } $video.addClass('note-video-clip'); return $video[0]; } <span class="fstat-no" title="function not covered" > show() {</span> <span class="cstat-no" title="statement not covered" > const text = this.context.invoke('editor.getSelectedText');</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.saveRange');</span> <span class="cstat-no" title="statement not covered" > this.showVideoDialog(text).then(<span class="fstat-no" title="function not covered" >(url)</span> => {</span> // [workaround] hide dialog before restore range for IE range focus <span class="cstat-no" title="statement not covered" > this.ui.hideDialog(this.$dialog);</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> // build node <span class="cstat-no" title="statement not covered" > const $node = this.createVideoNode(url);</span> <span class="cstat-no" title="statement not covered" > if ($node) {</span> // insert video node <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.insertNode', $node);</span> } }).fail(<span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.restoreRange');</span> }); } /** * show image dialog * * @param {jQuery} $dialog * @return {Promise} */ <span class="fstat-no" title="function not covered" > showVideoDialog(text)</span> { <span class="cstat-no" title="statement not covered" > return $.Deferred(<span class="fstat-no" title="function not covered" >(deferred)</span> => {</span> <span class="cstat-no" title="statement not covered" > const $videoUrl = this.$dialog.find('.note-video-url');</span> <span class="cstat-no" title="statement not covered" > const $videoBtn = this.$dialog.find('.note-video-btn');</span> <span class="cstat-no" title="statement not covered" > this.ui.onDialogShown(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('dialog.shown');</span> <span class="cstat-no" title="statement not covered" > $videoUrl.val(text).on('input', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.ui.toggleBtn($videoBtn, $videoUrl.val());</span> }); <span class="cstat-no" title="statement not covered" > if (!env.isSupportTouch) {</span> <span class="cstat-no" title="statement not covered" > $videoUrl.trigger('focus');</span> } <span class="cstat-no" title="statement not covered" > $videoBtn.click(<span class="fstat-no" title="function not covered" >(event)</span> => {</span> <span class="cstat-no" title="statement not covered" > event.preventDefault();</span> <span class="cstat-no" title="statement not covered" > deferred.resolve($videoUrl.val());</span> }); <span class="cstat-no" title="statement not covered" > this.bindEnterKey($videoUrl, $videoBtn);</span> }); <span class="cstat-no" title="statement not covered" > this.ui.onDialogHidden(this.$dialog, <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > $videoUrl.off('input');</span> <span class="cstat-no" title="statement not covered" > $videoBtn.off('click');</span> <span class="cstat-no" title="statement not covered" > if (deferred.state() === 'pending') {</span> <span class="cstat-no" title="statement not covered" > deferred.reject();</span> } }); <span class="cstat-no" title="statement not covered" > this.ui.showDialog(this.$dialog);</span> }); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�^I�n�nUcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/HintPopover.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/HintPopover.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> HintPopover.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">26.36% </span> <span class="quiet">Statements</span> <span class='fraction'>34/129</span> </div> <div class='fl pad1y space-right2'> <span class="strong">7.55% </span> <span class="quiet">Branches</span> <span class='fraction'>4/53</span> </div> <div class='fl pad1y space-right2'> <span class="strong">12.5% </span> <span class="quiet">Functions</span> <span class='fraction'>3/24</span> </div> <div class='fl pad1y space-right2'> <span class="strong">26.36% </span> <span class="quiet">Lines</span> <span class='fraction'>34/129</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import func from '../core/func'; import lists from '../core/lists'; import dom from '../core/dom'; import range from '../core/range'; import key from '../core/key'; const POPOVER_DIST = 5; export default class HintPopover { constructor(context) { this.context = context; this.ui = $.summernote.ui; this.$editable = context.layoutInfo.editable; this.options = context.options; this.hint = this.options.hint || []; this.direction = this.options.hintDirection || <span class="branch-1 cbranch-no" title="branch not covered" >'bottom';</span> this.hints = $.isArray(this.hint) ? this.hint : <span class="branch-1 cbranch-no" title="branch not covered" >[this.hint];</span> this.events = { 'summernote.keyup': <span class="fstat-no" title="function not covered" >(we, e)</span> => { <span class="cstat-no" title="statement not covered" > if (!e.isDefaultPrevented()) {</span> <span class="cstat-no" title="statement not covered" > this.handleKeyup(e);</span> } }, 'summernote.keydown': <span class="fstat-no" title="function not covered" >(we, e)</span> => { <span class="cstat-no" title="statement not covered" > this.handleKeydown(e);</span> }, 'summernote.disable summernote.dialog.shown': <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> } }; } shouldInitialize() { return this.hints.length > 0; } <span class="fstat-no" title="function not covered" > initialize() {</span> <span class="cstat-no" title="statement not covered" > this.lastWordRange = null;</span> <span class="cstat-no" title="statement not covered" > this.$popover = this.ui.popover({</span> className: 'note-hint-popover', hideArrow: true, direction: '' }).render().appendTo(this.options.container); <span class="cstat-no" title="statement not covered" > this.$popover.hide();</span> <span class="cstat-no" title="statement not covered" > this.$content = this.$popover.find('.popover-content,.note-popover-content');</span> <span class="cstat-no" title="statement not covered" > this.$content.on('click', '.note-hint-item', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.$content.find('.active').removeClass('active');</span> <span class="cstat-no" title="statement not covered" > $(this).addClass('active');</span> <span class="cstat-no" title="statement not covered" > this.replace();</span> }); } <span class="fstat-no" title="function not covered" > destroy() {</span> <span class="cstat-no" title="statement not covered" > this.$popover.remove();</span> } <span class="fstat-no" title="function not covered" > selectItem($item)</span> { <span class="cstat-no" title="statement not covered" > this.$content.find('.active').removeClass('active');</span> <span class="cstat-no" title="statement not covered" > $item.addClass('active');</span> <span class="cstat-no" title="statement not covered" > this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);</span> } <span class="fstat-no" title="function not covered" > moveDown() {</span> <span class="cstat-no" title="statement not covered" > const $current = this.$content.find('.note-hint-item.active');</span> <span class="cstat-no" title="statement not covered" > const $next = $current.next();</span> <span class="cstat-no" title="statement not covered" > if ($next.length) {</span> <span class="cstat-no" title="statement not covered" > this.selectItem($next);</span> } else { <span class="cstat-no" title="statement not covered" > let $nextGroup = $current.parent().next();</span> <span class="cstat-no" title="statement not covered" > if (!$nextGroup.length) {</span> <span class="cstat-no" title="statement not covered" > $nextGroup = this.$content.find('.note-hint-group').first();</span> } <span class="cstat-no" title="statement not covered" > this.selectItem($nextGroup.find('.note-hint-item').first());</span> } } <span class="fstat-no" title="function not covered" > moveUp() {</span> <span class="cstat-no" title="statement not covered" > const $current = this.$content.find('.note-hint-item.active');</span> <span class="cstat-no" title="statement not covered" > const $prev = $current.prev();</span> <span class="cstat-no" title="statement not covered" > if ($prev.length) {</span> <span class="cstat-no" title="statement not covered" > this.selectItem($prev);</span> } else { <span class="cstat-no" title="statement not covered" > let $prevGroup = $current.parent().prev();</span> <span class="cstat-no" title="statement not covered" > if (!$prevGroup.length) {</span> <span class="cstat-no" title="statement not covered" > $prevGroup = this.$content.find('.note-hint-group').last();</span> } <span class="cstat-no" title="statement not covered" > this.selectItem($prevGroup.find('.note-hint-item').last());</span> } } <span class="fstat-no" title="function not covered" > replace() {</span> <span class="cstat-no" title="statement not covered" > const $item = this.$content.find('.note-hint-item.active');</span> <span class="cstat-no" title="statement not covered" > if ($item.length) {</span> <span class="cstat-no" title="statement not covered" > const node = this.nodeFromItem($item);</span> // XXX: consider to move codes to editor for recording redo/undo. <span class="cstat-no" title="statement not covered" > this.lastWordRange.insertNode(node);</span> <span class="cstat-no" title="statement not covered" > range.createFromNode(node).collapse().select();</span> <span class="cstat-no" title="statement not covered" > this.lastWordRange = null;</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> <span class="cstat-no" title="statement not covered" > this.context.triggerEvent('change', this.$editable.html(), this.$editable[0]);</span> <span class="cstat-no" title="statement not covered" > this.context.invoke('editor.focus');</span> } } <span class="fstat-no" title="function not covered" > nodeFromItem($item)</span> { <span class="cstat-no" title="statement not covered" > const hint = this.hints[$item.data('index')];</span> <span class="cstat-no" title="statement not covered" > const item = $item.data('item');</span> <span class="cstat-no" title="statement not covered" > let node = hint.content ? hint.content(item) : item;</span> <span class="cstat-no" title="statement not covered" > if (typeof node === 'string') {</span> <span class="cstat-no" title="statement not covered" > node = dom.createText(node);</span> } <span class="cstat-no" title="statement not covered" > return node;</span> } <span class="fstat-no" title="function not covered" > createItemTemplates(hintIdx, items)</span> { <span class="cstat-no" title="statement not covered" > const hint = this.hints[hintIdx];</span> <span class="cstat-no" title="statement not covered" > return items.map(<span class="fstat-no" title="function not covered" >(item, idx)</span> => {</span> <span class="cstat-no" title="statement not covered" > const $item = $('<div class="note-hint-item"/>');</span> <span class="cstat-no" title="statement not covered" > $item.append(hint.template ? hint.template(item) : item + '');</span> <span class="cstat-no" title="statement not covered" > $item.data({</span> 'index': hintIdx, 'item': item }); <span class="cstat-no" title="statement not covered" > return $item;</span> }); } <span class="fstat-no" title="function not covered" > handleKeydown(e)</span> { <span class="cstat-no" title="statement not covered" > if (!this.$popover.is(':visible')) {</span> <span class="cstat-no" title="statement not covered" > return;</span> } <span class="cstat-no" title="statement not covered" > if (e.keyCode === key.code.ENTER) {</span> <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> <span class="cstat-no" title="statement not covered" > this.replace();</span> } else <span class="cstat-no" title="statement not covered" >if (e.keyCode === key.code.UP) {</span> <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> <span class="cstat-no" title="statement not covered" > this.moveUp();</span> } else <span class="cstat-no" title="statement not covered" >if (e.keyCode === key.code.DOWN) {</span> <span class="cstat-no" title="statement not covered" > e.preventDefault();</span> <span class="cstat-no" title="statement not covered" > this.moveDown();</span> } } <span class="fstat-no" title="function not covered" > searchKeyword(index, keyword, callback)</span> { <span class="cstat-no" title="statement not covered" > const hint = this.hints[index];</span> <span class="cstat-no" title="statement not covered" > if (hint && hint.match.test(keyword) && hint.search) {</span> <span class="cstat-no" title="statement not covered" > const matches = hint.match.exec(keyword);</span> <span class="cstat-no" title="statement not covered" > hint.search(matches[1], callback);</span> } else { <span class="cstat-no" title="statement not covered" > callback();</span> } } <span class="fstat-no" title="function not covered" > createGroup(idx, keyword)</span> { <span class="cstat-no" title="statement not covered" > const $group = $('<div class="note-hint-group note-hint-group-' + idx + '"/>');</span> <span class="cstat-no" title="statement not covered" > this.searchKeyword(idx, keyword, <span class="fstat-no" title="function not covered" >(items)</span> => {</span> <span class="cstat-no" title="statement not covered" > items = items || [];</span> <span class="cstat-no" title="statement not covered" > if (items.length) {</span> <span class="cstat-no" title="statement not covered" > $group.html(this.createItemTemplates(idx, items));</span> <span class="cstat-no" title="statement not covered" > this.show();</span> } }); <span class="cstat-no" title="statement not covered" > return $group;</span> } <span class="fstat-no" title="function not covered" > handleKeyup(e)</span> { <span class="cstat-no" title="statement not covered" > if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) {</span> <span class="cstat-no" title="statement not covered" > const wordRange = this.context.invoke('editor.createRange').getWordRange();</span> <span class="cstat-no" title="statement not covered" > const keyword = wordRange.toString();</span> <span class="cstat-no" title="statement not covered" > if (this.hints.length && keyword) {</span> <span class="cstat-no" title="statement not covered" > this.$content.empty();</span> <span class="cstat-no" title="statement not covered" > const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));</span> <span class="cstat-no" title="statement not covered" > if (bnd) {</span> <span class="cstat-no" title="statement not covered" > this.$popover.hide();</span> <span class="cstat-no" title="statement not covered" > this.lastWordRange = wordRange;</span> <span class="cstat-no" title="statement not covered" > this.hints.forEach(<span class="fstat-no" title="function not covered" >(hint, idx)</span> => {</span> <span class="cstat-no" title="statement not covered" > if (hint.match.test(keyword)) {</span> <span class="cstat-no" title="statement not covered" > this.createGroup(idx, keyword).appendTo(this.$content);</span> } }); // select first .note-hint-item <span class="cstat-no" title="statement not covered" > this.$content.find('.note-hint-item:first').addClass('active');</span> // set position for popover after group is created <span class="cstat-no" title="statement not covered" > if (this.direction === 'top') {</span> <span class="cstat-no" title="statement not covered" > this.$popover.css({</span> left: bnd.left, top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST }); } else { <span class="cstat-no" title="statement not covered" > this.$popover.css({</span> left: bnd.left, top: bnd.top + bnd.height + POPOVER_DIST }); } } } else { <span class="cstat-no" title="statement not covered" > this.hide();</span> } } } <span class="fstat-no" title="function not covered" > show() {</span> <span class="cstat-no" title="statement not covered" > this.$popover.show();</span> } <span class="fstat-no" title="function not covered" > hide() {</span> <span class="cstat-no" title="statement not covered" > this.$popover.hide();</span> } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\|����Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Placeholder.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/Placeholder.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> Placeholder.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">59.09% </span> <span class="quiet">Statements</span> <span class='fraction'>13/22</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">33.33% </span> <span class="quiet">Functions</span> <span class='fraction'>3/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">59.09% </span> <span class="quiet">Lines</span> <span class='fraction'>13/22</span> </div> </div> </div> <div class='status-line medium'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; export default class Placeholder { constructor(context) { this.context = context; this.$editingArea = context.layoutInfo.editingArea; this.options = context.options; this.events = { 'summernote.init summernote.change': <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.update();</span> }, 'summernote.codeview.toggled': <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.update();</span> } }; } shouldInitialize() { return !!this.options.placeholder; } <span class="fstat-no" title="function not covered" > initialize() {</span> <span class="cstat-no" title="statement not covered" > this.$placeholder = $('<div class="note-placeholder">');</span> <span class="cstat-no" title="statement not covered" > this.$placeholder.on('click', <span class="fstat-no" title="function not covered" >() => {</span></span> <span class="cstat-no" title="statement not covered" > this.context.invoke('focus');</span> }).text(this.options.placeholder).prependTo(this.$editingArea); <span class="cstat-no" title="statement not covered" > this.update();</span> } <span class="fstat-no" title="function not covered" > destroy() {</span> <span class="cstat-no" title="statement not covered" > this.$placeholder.remove();</span> } <span class="fstat-no" title="function not covered" > update() {</span> <span class="cstat-no" title="statement not covered" > const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');</span> <span class="cstat-no" title="statement not covered" > this.$placeholder.toggle(isShow);</span> } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\1�!!Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AutoSync.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/module/AutoSync.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/base/module/</a> AutoSync.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">88.89% </span> <span class="quiet">Statements</span> <span class='fraction'>8/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">75% </span> <span class="quiet">Functions</span> <span class='fraction'>3/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">88.89% </span> <span class="quiet">Lines</span> <span class='fraction'>8/9</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">79×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import dom from '../core/dom'; /** * textarea auto sync. */ export default class AutoSync { constructor(context) { this.$note = context.layoutInfo.note; this.events = { 'summernote.change': <span class="fstat-no" title="function not covered" >() => {</span> <span class="cstat-no" title="statement not covered" > this.$note.val(context.invoke('code'));</span> } }; } shouldInitialize() { return dom.isTextarea(this.$note[0]); } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�#�vE?E?Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/summernote-en-US.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/summernote-en-US.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/base/</a> summernote-en-US.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>3/3</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>2/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>3/3</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; $.summernote = $.summernote || { lang: {} }; $.extend($.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' }, image: { image: 'Picture', insert: 'Insert Image', resizeFull: 'Resize Full', resizeHalf: 'Resize Half', resizeQuarter: 'Resize Quarter', floatLeft: 'Float Left', floatRight: 'Float Right', floatNone: 'Float None', 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' }, 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: 'Foreground Color', transparent: 'Transparent', setTransparent: 'Set transparent', reset: 'Reset', resetToDefault: 'Reset to default' }, 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' } } }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\2�TH��Ecoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> src/js/base/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">95.78% </span> <span class="quiet">Statements</span> <span class='fraction'>159/166</span> </div> <div class='fl pad1y space-right2'> <span class="strong">87.1% </span> <span class="quiet">Branches</span> <span class='fraction'>81/93</span> </div> <div class='fl pad1y space-right2'> <span class="strong">97.06% </span> <span class="quiet">Functions</span> <span class='fraction'>33/34</span> </div> <div class='fl pad1y space-right2'> <span class="strong">95.78% </span> <span class="quiet">Lines</span> <span class='fraction'>159/166</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="Context.js"><a href="Context.js.html">Context.js</a></td> <td data-value="94.44" class="pic high"><div class="chart"><div class="cover-fill" style="width: 94%;"></div><div class="cover-empty" style="width:6%;"></div></div></td> <td data-value="94.44" class="pct high">94.44%</td> <td data-value="126" class="abs high">119/126</td> <td data-value="81.82" class="pct high">81.82%</td> <td data-value="55" class="abs high">45/55</td> <td data-value="96.3" class="pct high">96.3%</td> <td data-value="27" class="abs high">26/27</td> <td data-value="94.44" class="pct high">94.44%</td> <td data-value="126" class="abs high">119/126</td> </tr> <tr> <td class="file high" data-value="renderer.js"><a href="renderer.js.html">renderer.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="37" class="abs high">37/37</td> <td data-value="94.44" class="pct high">94.44%</td> <td data-value="36" class="abs high">34/36</td> <td data-value="100" class="pct high">100%</td> <td data-value="7" class="abs high">7/7</td> <td data-value="100" class="pct high">100%</td> <td data-value="37" class="abs high">37/37</td> </tr> <tr> <td class="file high" data-value="summernote-en-US.js"><a href="summernote-en-US.js.html">summernote-en-US.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="3" class="abs high">3/3</td> <td data-value="100" class="pct high">100%</td> <td data-value="2" class="abs high">2/2</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="3" class="abs high">3/3</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\v^@��V�VJcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/Context.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/Context.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/base/</a> Context.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">94.44% </span> <span class="quiet">Statements</span> <span class='fraction'>119/126</span> </div> <div class='fl pad1y space-right2'> <span class="strong">81.82% </span> <span class="quiet">Branches</span> <span class='fraction'>45/55</span> </div> <div class='fl pad1y space-right2'> <span class="strong">96.3% </span> <span class="quiet">Functions</span> <span class='fraction'>26/27</span> </div> <div class='fl pad1y space-right2'> <span class="strong">94.44% </span> <span class="quiet">Lines</span> <span class='fraction'>119/126</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">56×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">78×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">176×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">115×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">170×</span> <span class="cline-any cline-yes">170×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">170×</span> <span class="cline-any cline-yes">170×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">170×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-yes">308×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1309×</span> <span class="cline-any cline-yes">1155×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1309×</span> <span class="cline-any cline-yes">385×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1617×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-yes">34×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">34×</span> <span class="cline-any cline-yes">30×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">42×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">11439×</span> <span class="cline-any cline-yes">4663×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6776×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">176×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">176×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">400×</span> <span class="cline-any cline-yes">399×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-yes">13×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2515×</span> <span class="cline-any cline-yes">2514×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-yes">14×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-yes">873×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">869×</span> <span class="cline-any cline-yes">869×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import func from './core/func'; import lists from './core/lists'; import dom from './core/dom'; export default class Context { /** * @param {jQuery} $note * @param {Object} options */ constructor($note, options) { this.ui = $.summernote.ui; this.$note = $note; this.memos = {}; this.modules = {}; this.layoutInfo = {}; this.options = options; this.initialize(); } /** * create layout and initialize modules and other resources */ initialize() { this.layoutInfo = this.ui.createLayout(this.$note, this.options); this._initialize(); this.$note.hide(); return this; } /** * destroy modules and other resources and remove layout */ destroy() { this._destroy(); this.$note.removeData('summernote'); this.ui.removeLayout(this.$note, this.layoutInfo); } /** * destory modules and other resources and initialize it again */ reset() { const disabled = this.isDisabled(); this.code(dom.emptyPara); this._destroy(); this._initialize(); <span class="missing-if-branch" title="else path not taken" >E</span>if (disabled) { this.disable(); } } _initialize() { // add optional buttons const buttons = $.extend({}, this.options.buttons); Object.keys(buttons).forEach(<span class="fstat-no" title="function not covered" >(key)</span> => { <span class="cstat-no" title="statement not covered" > this.memo('button.' + key, buttons[key]);</span> }); const modules = $.extend({}, this.options.modules, $.summernote.plugins || <span class="branch-1 cbranch-no" title="branch not covered" >{})</span>; // add and initialize modules Object.keys(modules).forEach((key) => { this.module(key, modules[key], true); }); Object.keys(this.modules).forEach((key) => { this.initializeModule(key); }); } _destroy() { // destroy modules with reversed order Object.keys(this.modules).reverse().forEach((key) => { this.removeModule(key); }); Object.keys(this.memos).forEach((key) => { this.removeMemo(key); }); // trigger custom onDestroy callback this.triggerEvent('destroy', this); } code(html) { const isActivated = this.invoke('codeview.isActivated'); if (html === undefined) { this.invoke('codeview.sync'); return isActivated ? <span class="branch-0 cbranch-no" title="branch not covered" >this.layoutInfo.codable.val() </span>: this.layoutInfo.editable.html(); } else { <span class="missing-if-branch" title="if path not taken" >I</span>if (isActivated) { <span class="cstat-no" title="statement not covered" > this.layoutInfo.codable.val(html);</span> } else { this.layoutInfo.editable.html(html); } this.$note.val(html); this.triggerEvent('change', html); } } isDisabled() { return this.layoutInfo.editable.attr('contenteditable') === 'false'; } enable() { this.layoutInfo.editable.attr('contenteditable', true); this.invoke('toolbar.activate', true); this.triggerEvent('disable', false); } disable() { // close codeview if codeview is opend <span class="missing-if-branch" title="if path not taken" >I</span>if (this.invoke('codeview.isActivated')) { <span class="cstat-no" title="statement not covered" > this.invoke('codeview.deactivate');</span> } this.layoutInfo.editable.attr('contenteditable', false); this.invoke('toolbar.deactivate', true); this.triggerEvent('disable', true); } triggerEvent() { const namespace = lists.head(arguments); const args = lists.tail(lists.from(arguments)); const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')]; <span class="missing-if-branch" title="if path not taken" >I</span>if (callback) { <span class="cstat-no" title="statement not covered" > callback.apply(this.$note[0], args);</span> } this.$note.trigger('summernote.' + namespace, args); } initializeModule(key) { const module = this.modules[key]; module.shouldInitialize = module.shouldInitialize || func.ok; if (!module.shouldInitialize()) { return; } // initialize module if (module.initialize) { module.initialize(); } // attach events if (module.events) { dom.attachEvents(this.$note, module.events); } } module(key, ModuleClass, withoutIntialize) { <span class="missing-if-branch" title="if path not taken" >I</span>if (arguments.length === 1) { <span class="cstat-no" title="statement not covered" > return this.modules[key];</span> } this.modules[key] = new ModuleClass(this); <span class="missing-if-branch" title="if path not taken" >I</span>if (!withoutIntialize) { <span class="cstat-no" title="statement not covered" > this.initializeModule(key);</span> } } removeModule(key) { const module = this.modules[key]; if (module.shouldInitialize()) { if (module.events) { dom.detachEvents(this.$note, module.events); } if (module.destroy) { module.destroy(); } } delete this.modules[key]; } memo(key, obj) { if (arguments.length === 1) { return this.memos[key]; } this.memos[key] = obj; } removeMemo(key) { <span class="missing-if-branch" title="if path not taken" >I</span>if (this.memos[key] && this.memos[key].destroy) { <span class="cstat-no" title="statement not covered" > this.memos[key].destroy();</span> } delete this.memos[key]; } /** * Some buttons need to change their visual style immediately once they get pressed */ createInvokeHandlerAndUpdateState(namespace, value) { return (event) => { this.createInvokeHandler(namespace, value)(event); this.invoke('buttons.updateCurrentStyle'); }; } createInvokeHandler(namespace, value) { return (event) => { event.preventDefault(); const $target = $(event.target); this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target); }; } invoke() { const namespace = lists.head(arguments); const args = lists.tail(lists.from(arguments)); const splits = namespace.split('.'); const hasSeparator = splits.length > 1; const moduleName = hasSeparator && lists.head(splits); const methodName = hasSeparator ? lists.last(splits) : lists.head(splits); const module = this.modules[moduleName || 'editor']; if (!moduleName && this[methodName]) { return this[methodName].apply(this, args); } else <span class="missing-if-branch" title="else path not taken" >E</span>if (module && module[methodName] && module.shouldInitialize()) { return module[methodName].apply(module, args); } } } </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\��| llKcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/renderer.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/base/renderer.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/base/</a> renderer.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>37/37</span> </div> <div class='fl pad1y space-right2'> <span class="strong">94.44% </span> <span class="quiet">Branches</span> <span class='fraction'>34/36</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>7/7</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>37/37</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">3095×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">3281×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">401×</span> <span class="cline-any cline-yes">401×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">2949×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">1839×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">4258×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">373×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-yes">1839×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6311×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3134×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-yes">219×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6335×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; class Renderer { constructor(markup, children, options, callback) { this.markup = markup; this.children = children; this.options = options; this.callback = callback; } render($parent) { const $node = $(this.markup); if (this.options && this.options.contents) { $node.html(this.options.contents); } if (this.options && this.options.className) { $node.addClass(this.options.className); } if (this.options && this.options.data) { $.each(this.options.data, (k, v) => { $node.attr('data-' + k, v); }); } if (this.options && this.options.click) { $node.on('click', this.options.click); } <span class="missing-if-branch" title="else path not taken" >E</span>if (this.children) { const $container = $node.find('.note-children-container'); this.children.forEach((child) => { child.render($container.length ? <span class="branch-0 cbranch-no" title="branch not covered" >$container </span>: $node); }); } if (this.callback) { this.callback($node, this.options); } if (this.options && this.options.callback) { this.options.callback($node); } if ($parent) { $parent.append($node); } return $node; } } export default { create: (markup, callback) => { return () => { const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0]; let children = $.isArray(arguments[0]) ? arguments[0] : []; if (options && options.children) { children = options.children; } return new Renderer(markup, children, options, callback); }; } }; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\�/�==@coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">all files</a> src/js/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">19.23% </span> <span class="quiet">Statements</span> <span class='fraction'>5/26</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">19.23% </span> <span class="quiet">Lines</span> <span class='fraction'>5/26</span> </div> </div> </div> <div class='status-line low'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file low" data-value="summernote.js"><a href="summernote.js.html">summernote.js</a></td> <td data-value="19.23" class="pic low"><div class="chart"><div class="cover-fill" style="width: 19%;"></div><div class="cover-empty" style="width:81%;"></div></div></td> <td data-value="19.23" class="pct low">19.23%</td> <td data-value="26" class="abs low">5/26</td> <td data-value="0" class="pct low">0%</td> <td data-value="12" class="abs low">0/12</td> <td data-value="0" class="pct low">0%</td> <td data-value="2" class="abs low">0/2</td> <td data-value="19.23" class="pct low">19.23%</td> <td data-value="26" class="abs low">5/26</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html> PKf[�\�L��Hcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/summernote.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/summernote.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">all files</a> / <a href="index.html">src/js/</a> summernote.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">19.23% </span> <span class="quiet">Statements</span> <span class='fraction'>5/26</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">19.23% </span> <span class="quiet">Lines</span> <span class='fraction'>5/26</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import env from './base/core/env'; import lists from './base/core/lists'; import Context from './base/Context'; $.fn.extend({ /** * Summernote API * * @param {Object|String} * @return {this} */ summernote: <span class="fstat-no" title="function not covered" >function() {</span> <span class="cstat-no" title="statement not covered" > const type = $.type(lists.head(arguments));</span> <span class="cstat-no" title="statement not covered" > const isExternalAPICalled = type === 'string';</span> <span class="cstat-no" title="statement not covered" > const hasInitOptions = type === 'object';</span> <span class="cstat-no" title="statement not covered" > const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {});</span> // Update options <span class="cstat-no" title="statement not covered" > options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);</span> <span class="cstat-no" title="statement not covered" > options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);</span> <span class="cstat-no" title="statement not covered" > options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;</span> <span class="cstat-no" title="statement not covered" > this.each(<span class="fstat-no" title="function not covered" >(idx, note)</span> => {</span> <span class="cstat-no" title="statement not covered" > const $note = $(note);</span> <span class="cstat-no" title="statement not covered" > if (!$note.data('summernote')) {</span> <span class="cstat-no" title="statement not covered" > const context = new Context($note, options);</span> <span class="cstat-no" title="statement not covered" > $note.data('summernote', context);</span> <span class="cstat-no" title="statement not covered" > $note.data('summernote').triggerEvent('init', context.layoutInfo);</span> } }); <span class="cstat-no" title="statement not covered" > const $note = this.first();</span> <span class="cstat-no" title="statement not covered" > if ($note.length) {</span> <span class="cstat-no" title="statement not covered" > const context = $note.data('summernote');</span> <span class="cstat-no" title="statement not covered" > if (isExternalAPICalled) {</span> <span class="cstat-no" title="statement not covered" > return context.invoke.apply(context, lists.from(arguments));</span> } else <span class="cstat-no" title="statement not covered" >if (options.focus) {</span> <span class="cstat-no" title="statement not covered" > context.invoke('editor.focus');</span> } } <span class="cstat-no" title="statement not covered" > return this;</span> } }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html> PKf[�\�\��Ecoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/ui.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/lite/</a> ui.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/178</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/91</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/40</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/178</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import renderer from '../base/renderer';</span> <span class="cstat-no" title="statement not covered" >import TooltipUI from './ui/TooltipUI';</span> <span class="cstat-no" title="statement not covered" >import DropdownUI from './ui/DropdownUI';</span> <span class="cstat-no" title="statement not covered" >import ModalUI from './ui/ModalUI';</span> <span class="cstat-no" title="statement not covered" >const editor = renderer.create('<div class="note-editor note-frame"/>');</span> <span class="cstat-no" title="statement not covered" >const toolbar = renderer.create('<div class="note-toolbar" role="toolbar"/>');</span> <span class="cstat-no" title="statement not covered" >const editingArea = renderer.create('<div class="note-editing-area"/>');</span> <span class="cstat-no" title="statement not covered" >const codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>');</span> <span class="cstat-no" title="statement not covered" >const editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>');</span> <span class="cstat-no" title="statement not covered" >const statusbar = renderer.create([</span> '<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-statusbar" role="resize">', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); <span class="cstat-no" title="statement not covered" >const airEditor = renderer.create('<div class="note-editor"/>');</span> <span class="cstat-no" title="statement not covered" >const airEditable = renderer.create([</span> '<output class="note-status-output" role="status" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); <span class="cstat-no" title="statement not covered" >const buttonGroup = renderer.create('<div class="note-btn-group">');</span> <span class="cstat-no" title="statement not covered" >const button = renderer.create('<button type="button" class="note-btn" role="button" tabindex="-1">', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> // set button type <span class="cstat-no" title="statement not covered" > if (options && options.tooltip) {</span> <span class="cstat-no" title="statement not covered" > $node.attr({</span> 'aria-label': options.tooltip }); <span class="cstat-no" title="statement not covered" > $node.data('_lite_tooltip', new TooltipUI($node, {</span> title: options.tooltip, container: options.container })); } <span class="cstat-no" title="statement not covered" > if (options.contents) {</span> <span class="cstat-no" title="statement not covered" > $node.html(options.contents);</span> } <span class="cstat-no" title="statement not covered" > if (options && options.data && options.data.toggle === 'dropdown') {</span> <span class="cstat-no" title="statement not covered" > $node.data('_lite_dropdown', new DropdownUI($node, {</span> container: options.container })); } }); <span class="cstat-no" title="statement not covered" >const dropdown = renderer.create('<div class="note-dropdown-menu" role="list">', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > const markup = $.isArray(options.items) ? options.items.map(<span class="fstat-no" title="function not covered" >function(item)</span> {</span> <span class="cstat-no" title="statement not covered" > const value = (typeof item === 'string') ? item : (item.value || '');</span> <span class="cstat-no" title="statement not covered" > const content = options.template ? options.template(item) : item;</span> <span class="cstat-no" title="statement not covered" > const $temp = $('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>');</span> <span class="cstat-no" title="statement not covered" > $temp.html(content).data('item', item);</span> <span class="cstat-no" title="statement not covered" > return $temp;</span> }) : options.items; <span class="cstat-no" title="statement not covered" > $node.html(markup).attr({'aria-label': options.title});</span> <span class="cstat-no" title="statement not covered" > $node.on('click', '> .note-dropdown-item', <span class="fstat-no" title="function not covered" >function(e)</span> {</span> <span class="cstat-no" title="statement not covered" > const $a = $(this);</span> <span class="cstat-no" title="statement not covered" > const item = $a.data('item');</span> <span class="cstat-no" title="statement not covered" > const value = $a.data('value');</span> <span class="cstat-no" title="statement not covered" > if (item.click) {</span> <span class="cstat-no" title="statement not covered" > item.click($a);</span> } else <span class="cstat-no" title="statement not covered" >if (options.itemClick) {</span> <span class="cstat-no" title="statement not covered" > options.itemClick(e, item, value);</span> } }); }); <span class="cstat-no" title="statement not covered" >const dropdownCheck = renderer.create('<div class="note-dropdown-menu note-check" role="list">', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > const markup = $.isArray(options.items) ? options.items.map(<span class="fstat-no" title="function not covered" >function(item)</span> {</span> <span class="cstat-no" title="statement not covered" > const value = (typeof item === 'string') ? item : (item.value || '');</span> <span class="cstat-no" title="statement not covered" > const content = options.template ? options.template(item) : item;</span> <span class="cstat-no" title="statement not covered" > const $temp = $('<a class="note-dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '"></a>');</span> <span class="cstat-no" title="statement not covered" > $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);</span> <span class="cstat-no" title="statement not covered" > return $temp;</span> }) : options.items; <span class="cstat-no" title="statement not covered" > $node.html(markup).attr({'aria-label': options.title});</span> <span class="cstat-no" title="statement not covered" > $node.on('click', '> .note-dropdown-item', <span class="fstat-no" title="function not covered" >function(e)</span> {</span> <span class="cstat-no" title="statement not covered" > const $a = $(this);</span> <span class="cstat-no" title="statement not covered" > const item = $a.data('item');</span> <span class="cstat-no" title="statement not covered" > const value = $a.data('value');</span> <span class="cstat-no" title="statement not covered" > if (item.click) {</span> <span class="cstat-no" title="statement not covered" > item.click($a);</span> } else <span class="cstat-no" title="statement not covered" >if (options.itemClick) {</span> <span class="cstat-no" title="statement not covered" > options.itemClick(e, item, value);</span> } }); }); <span class="cstat-no" title="statement not covered" >const dropdownButtonContents = <span class="fstat-no" title="function not covered" >function(contents, options)</span> {</span> <span class="cstat-no" title="statement not covered" > return contents + ' ' + icon(options.icons.caret, 'span');</span> }; <span class="cstat-no" title="statement not covered" >const dropdownButton = <span class="fstat-no" title="function not covered" >function(opt, callback)</span> {</span> <span class="cstat-no" title="statement not covered" > return buttonGroup([</span> button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown({ className: opt.className, items: opt.items, template: opt.template, itemClick: opt.itemClick }) ], { callback: callback }).render(); }; <span class="cstat-no" title="statement not covered" >const dropdownCheckButton = <span class="fstat-no" title="function not covered" >function(opt, callback)</span> {</span> <span class="cstat-no" title="statement not covered" > return buttonGroup([</span> button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdownCheck({ className: opt.className, checkClassName: opt.checkClassName, items: opt.items, template: opt.template, itemClick: opt.itemClick }) ], { callback: callback }).render(); }; <span class="cstat-no" title="statement not covered" >const paragraphDropdownButton = <span class="fstat-no" title="function not covered" >function(opt)</span> {</span> <span class="cstat-no" title="statement not covered" > return buttonGroup([</span> button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown([ buttonGroup({ className: 'note-align', children: opt.items[0] }), buttonGroup({ className: 'note-list', children: opt.items[1] }) ]) ]).render(); }; <span class="cstat-no" title="statement not covered" >const tableMoveHandler = <span class="fstat-no" title="function not covered" >function(event, col, row)</span> {</span> <span class="cstat-no" title="statement not covered" > const PX_PER_EM = 18;</span> <span class="cstat-no" title="statement not covered" > const $picker = $(event.target.parentNode); </span>// target is mousecatcher <span class="cstat-no" title="statement not covered" > const $dimensionDisplay = $picker.next();</span> <span class="cstat-no" title="statement not covered" > const $catcher = $picker.find('.note-dimension-picker-mousecatcher');</span> <span class="cstat-no" title="statement not covered" > const $highlighted = $picker.find('.note-dimension-picker-highlighted');</span> <span class="cstat-no" title="statement not covered" > const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');</span> <span class="cstat-no" title="statement not covered" > let posOffset;</span> // HTML5 with jQuery - e.offsetX is undefined in Firefox <span class="cstat-no" title="statement not covered" > if (event.offsetX === undefined) {</span> <span class="cstat-no" title="statement not covered" > const posCatcher = $(event.target).offset();</span> <span class="cstat-no" title="statement not covered" > posOffset = {</span> x: event.pageX - posCatcher.left, y: event.pageY - posCatcher.top }; } else { <span class="cstat-no" title="statement not covered" > posOffset = {</span> x: event.offsetX, y: event.offsetY }; } <span class="cstat-no" title="statement not covered" > const dim = {</span> c: Math.ceil(posOffset.x / PX_PER_EM) || 1, r: Math.ceil(posOffset.y / PX_PER_EM) || 1 }; <span class="cstat-no" title="statement not covered" > $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });</span> <span class="cstat-no" title="statement not covered" > $catcher.data('value', dim.c + 'x' + dim.r);</span> <span class="cstat-no" title="statement not covered" > if (dim.c > 3 && dim.c < col) {</span> <span class="cstat-no" title="statement not covered" > $unhighlighted.css({ width: dim.c + 1 + 'em' });</span> } <span class="cstat-no" title="statement not covered" > if (dim.r > 3 && dim.r < row) {</span> <span class="cstat-no" title="statement not covered" > $unhighlighted.css({ height: dim.r + 1 + 'em' });</span> } <span class="cstat-no" title="statement not covered" > $dimensionDisplay.html(dim.c + ' x ' + dim.r);</span> }; <span class="cstat-no" title="statement not covered" >const tableDropdownButton = <span class="fstat-no" title="function not covered" >function(opt)</span> {</span> <span class="cstat-no" title="statement not covered" > return buttonGroup([</span> button({ className: 'dropdown-toggle', contents: opt.title + ' ' + icon('note-icon-caret'), tooltip: opt.tooltip, data: { toggle: 'dropdown' } }), dropdown({ className: 'note-table', items: [ '<div class="note-dimension-picker">', ' <div class="note-dimension-picker-mousecatcher" data-event="insertTable" data-value="1x1"/>', ' <div class="note-dimension-picker-highlighted"/>', ' <div class="note-dimension-picker-unhighlighted"/>', '</div>', '<div class="note-dimension-display">1 x 1</div>' ].join('') }) ], { callback: <span class="fstat-no" title="function not covered" >function($node)</span> { <span class="cstat-no" title="statement not covered" > const $catcher = $node.find('.note-dimension-picker-mousecatcher');</span> <span class="cstat-no" title="statement not covered" > $catcher.css({</span> width: opt.col + 'em', height: opt.row + 'em' }) .mousedown(opt.itemClick) .mousemove(<span class="fstat-no" title="function not covered" >function(e)</span> { <span class="cstat-no" title="statement not covered" > tableMoveHandler(e, opt.col, opt.row);</span> }); } }).render(); }; <span class="cstat-no" title="statement not covered" >const palette = renderer.create('<div class="note-color-palette"/>', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > const contents = [];</span> <span class="cstat-no" title="statement not covered" > for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {</span> <span class="cstat-no" title="statement not covered" > const eventName = options.eventName;</span> <span class="cstat-no" title="statement not covered" > const colors = options.colors[row];</span> <span class="cstat-no" title="statement not covered" > const colorsName = options.colorsName[row];</span> <span class="cstat-no" title="statement not covered" > const buttons = [];</span> <span class="cstat-no" title="statement not covered" > for (let col = 0, colSize = colors.length; col < colSize; col++) {</span> <span class="cstat-no" title="statement not covered" > const color = colors[col];</span> <span class="cstat-no" title="statement not covered" > const colorName = colorsName[col];</span> <span class="cstat-no" title="statement not covered" > buttons.push([</span> '<button type="button" class="note-btn note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } <span class="cstat-no" title="statement not covered" > contents.push('<div class="note-color-row">' + buttons.join('') + '</div>');</span> } <span class="cstat-no" title="statement not covered" > $node.html(contents.join(''));</span> <span class="cstat-no" title="statement not covered" > $node.find('.note-color-btn').each(<span class="fstat-no" title="function not covered" >function() {</span></span> <span class="cstat-no" title="statement not covered" > $(this).data('_lite_tooltip', new TooltipUI($(this), {</span> container: options.container })); }); }); <span class="cstat-no" title="statement not covered" >const colorDropdownButton = <span class="fstat-no" title="function not covered" >function(opt, type)</span> {</span> <span class="cstat-no" title="statement not covered" > return buttonGroup({</span> className: 'note-color', children: [ button({ className: 'note-current-color-button', contents: opt.title, tooltip: opt.lang.color.recent, click: opt.currentClick, callback: <span class="fstat-no" title="function not covered" >function($button)</span> { <span class="cstat-no" title="statement not covered" > const $recentColor = $button.find('.note-recent-color');</span> <span class="cstat-no" title="statement not covered" > if (type !== 'foreColor') {</span> <span class="cstat-no" title="statement not covered" > $recentColor.css('background-color', '#FFFF00');</span> <span class="cstat-no" title="statement not covered" > $button.attr('data-backColor', '#FFFF00');</span> } } }), button({ className: 'dropdown-toggle', contents: icon('note-icon-caret'), tooltip: opt.lang.color.more, data: { toggle: 'dropdown' } }), dropdown({ items: [ '<div>', '<div class="note-btn-group btn-background-color">', ' <div class="note-palette-title">' + opt.lang.color.background + '</div>', ' <div>', '<button type="button" class="note-color-reset note-btn note-btn-block" ' + ' data-event="backColor" data-value="inherit">', opt.lang.color.transparent, ' </button>', ' </div>', ' <div class="note-holder" data-event="backColor"/>', '</div>', '<div class="note-btn-group btn-foreground-color">', ' <div class="note-palette-title">' + opt.lang.color.foreground + '</div>', ' <div>', '<button type="button" class="note-color-reset note-btn note-btn-block" ' + ' data-event="removeFormat" data-value="foreColor">', opt.lang.color.resetToDefault, ' </button>', ' </div>', ' <div class="note-holder" data-event="foreColor"/>', '</div>', '</div>' ].join(''), callback: <span class="fstat-no" title="function not covered" >function($dropdown)</span> { <span class="cstat-no" title="statement not covered" > $dropdown.find('.note-holder').each(<span class="fstat-no" title="function not covered" >function() {</span></span> <span class="cstat-no" title="statement not covered" > const $holder = $(this);</span> <span class="cstat-no" title="statement not covered" > $holder.append(palette({</span> colors: opt.colors, eventName: $holder.data('event') }).render()); }); <span class="cstat-no" title="statement not covered" > if (type === 'fore') {</span> <span class="cstat-no" title="statement not covered" > $dropdown.find('.btn-background-color').hide();</span> <span class="cstat-no" title="statement not covered" > $dropdown.css({ 'min-width': '210px' });</span> } else <span class="cstat-no" title="statement not covered" >if (type === 'back') {</span> <span class="cstat-no" title="statement not covered" > $dropdown.find('.btn-foreground-color').hide();</span> <span class="cstat-no" title="statement not covered" > $dropdown.css({ 'min-width': '210px' });</span> } }, click: <span class="fstat-no" title="function not covered" >function(event)</span> { <span class="cstat-no" title="statement not covered" > const $button = $(event.target);</span> <span class="cstat-no" title="statement not covered" > const eventName = $button.data('event');</span> <span class="cstat-no" title="statement not covered" > const value = $button.data('value');</span> <span class="cstat-no" title="statement not covered" > if (eventName && value) {</span> <span class="cstat-no" title="statement not covered" > const key = eventName === 'backColor' ? 'background-color' : 'color';</span> <span class="cstat-no" title="statement not covered" > const $color = $button.closest('.note-color').find('.note-recent-color');</span> <span class="cstat-no" title="statement not covered" > const $currentButton = $button.closest('.note-color').find('.note-current-color-button');</span> <span class="cstat-no" title="statement not covered" > $color.css(key, value);</span> <span class="cstat-no" title="statement not covered" > $currentButton.attr('data-' + eventName, value);</span> <span class="cstat-no" title="statement not covered" > if (type === 'fore') {</span> <span class="cstat-no" title="statement not covered" > opt.itemClick('foreColor', value);</span> } else <span class="cstat-no" title="statement not covered" >if (type === 'back') {</span> <span class="cstat-no" title="statement not covered" > opt.itemClick('backColor', value);</span> } else { <span class="cstat-no" title="statement not covered" > opt.itemClick(eventName, value);</span> } } } }) ] }).render(); }; <span class="cstat-no" title="statement not covered" >const dialog = renderer.create('<div class="note-modal" aria-hidden="false" tabindex="-1" role="dialog"/>', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > if (options.fade) {</span> <span class="cstat-no" title="statement not covered" > $node.addClass('fade');</span> } <span class="cstat-no" title="statement not covered" > $node.attr({</span> 'aria-label': options.title }); <span class="cstat-no" title="statement not covered" > $node.html([</span> ' <div class="note-modal-content">', (options.title ? ' <div class="note-modal-header">' + ' <button type="button" class="close" aria-label="Close" aria-hidden="true"><i class="note-icon-close"></i></button>' + ' <h4 class="note-modal-title">' + options.title + '</h4>' + ' </div>' : '' ), ' <div class="note-modal-body">' + options.body + '</div>', (options.footer ? ' <div class="note-modal-footer">' + options.footer + '</div>' : '' ), ' </div>' ].join('')); <span class="cstat-no" title="statement not covered" > $node.data('modal', new ModalUI($node, options));</span> }); <span class="cstat-no" title="statement not covered" >const videoDialog = <span class="fstat-no" title="function not covered" >function(opt)</span> {</span> <span class="cstat-no" title="statement not covered" > const body = '<div class="note-form-group">' +</span> '<label class="note-form-label">' + opt.lang.video.url + ' <small class="text-muted">' + opt.lang.video.providers + '</small>' + '</label>' + '<input class="note-video-url note-input" type="text" />' + '</div>'; <span class="cstat-no" title="statement not covered" > const footer = [</span> '<button type="button" href="#" class="note-btn note-btn-primary note-video-btn disabled" disabled>', opt.lang.video.insert, '</button>' ].join(''); <span class="cstat-no" title="statement not covered" > return dialog({</span> title: opt.lang.video.insert, fade: opt.fade, body: body, footer: footer }).render(); }; <span class="cstat-no" title="statement not covered" >const imageDialog = <span class="fstat-no" title="function not covered" >function(opt)</span> {</span> <span class="cstat-no" title="statement not covered" > const body = '<div class="note-form-group note-group-select-from-files">' +</span> '<label class="note-form-label">' + opt.lang.image.selectFromFiles + '</label>' + '<input class="note-note-image-input note-input" type="file" name="files" accept="image/*" multiple="multiple" />' + opt.imageLimitation + '</div>' + '<div class="note-form-group" style="overflow:auto;">' + '<label class="note-form-label">' + opt.lang.image.url + '</label>' + '<input class="note-image-url note-input" type="text" />' + '</div>'; <span class="cstat-no" title="statement not covered" > const footer = [</span> '<button href="#" type="button" class="note-btn note-btn-primary note-btn-large note-image-btn disabled" disabled>', opt.lang.image.insert, '</button>' ].join(''); <span class="cstat-no" title="statement not covered" > return dialog({</span> title: opt.lang.image.insert, fade: opt.fade, body: body, footer: footer }).render(); }; <span class="cstat-no" title="statement not covered" >const linkDialog = <span class="fstat-no" title="function not covered" >function(opt)</span> {</span> <span class="cstat-no" title="statement not covered" > const body = '<div class="note-form-group">' +</span> '<label class="note-form-label">' + opt.lang.link.textToDisplay + '</label>' + '<input class="note-link-text note-input" type="text" />' + '</div>' + '<div class="note-form-group">' + '<label class="note-form-label">' + opt.lang.link.url + '</label>' + '<input class="note-link-url note-input" type="text" value="http://" />' + '</div>' + (!opt.disableLinkTarget ? '<div class="checkbox">' + '<label>' + '<input type="checkbox" checked> ' + opt.lang.link.openInNewWindow + '</label>' + '</div>' : '' ); <span class="cstat-no" title="statement not covered" > const footer = [</span> '<button href="#" type="button" class="note-btn note-btn-primary note-link-btn disabled" disabled>', opt.lang.link.insert, '</button>' ].join(''); <span class="cstat-no" title="statement not covered" > return dialog({</span> className: 'link-dialog', title: opt.lang.link.insert, fade: opt.fade, body: body, footer: footer }).render(); }; <span class="cstat-no" title="statement not covered" >const popover = renderer.create([</span> '<div class="note-popover bottom">', ' <div class="note-popover-arrow"/>', ' <div class="note-popover-content note-children-container"/>', '</div>' ].join(''), <span class="fstat-no" title="function not covered" >function($node, options)</span> { <span class="cstat-no" title="statement not covered" > const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';</span> <span class="cstat-no" title="statement not covered" > $node.addClass(direction).hide();</span> <span class="cstat-no" title="statement not covered" > if (options.hideArrow) {</span> <span class="cstat-no" title="statement not covered" > $node.find('.note-popover-arrow').hide();</span> } }); <span class="cstat-no" title="statement not covered" >const checkbox = renderer.create('<div class="checkbox"></div>', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > $node.html([</span> ' <label' + (options.id ? ' for="' + options.id + '"' : '') + '>', ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', (options.text ? options.text : ''), '</label>' ].join('')); }); <span class="cstat-no" title="statement not covered" >const icon = <span class="fstat-no" title="function not covered" >function(iconClassName, tagName)</span> {</span> <span class="cstat-no" title="statement not covered" > tagName = tagName || 'i';</span> <span class="cstat-no" title="statement not covered" > return '<' + tagName + ' class="' + iconClassName + '"/>';</span> }; <span class="cstat-no" title="statement not covered" >const ui = {</span> editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, button: button, dropdown: dropdown, dropdownCheck: dropdownCheck, dropdownButton: dropdownButton, dropdownButtonContents: dropdownButtonContents, dropdownCheckButton: dropdownCheckButton, paragraphDropdownButton: paragraphDropdownButton, tableDropdownButton: tableDropdownButton, colorDropdownButton: colorDropdownButton, palette: palette, dialog: dialog, videoDialog: videoDialog, imageDialog: imageDialog, linkDialog: linkDialog, popover: popover, checkbox: checkbox, icon: icon, toggleBtn: <span class="fstat-no" title="function not covered" >function($btn, isEnable)</span> { <span class="cstat-no" title="statement not covered" > $btn.toggleClass('disabled', !isEnable);</span> <span class="cstat-no" title="statement not covered" > $btn.attr('disabled', !isEnable);</span> }, toggleBtnActive: <span class="fstat-no" title="function not covered" >function($btn, isActive)</span> { <span class="cstat-no" title="statement not covered" > $btn.toggleClass('active', isActive);</span> }, check: <span class="fstat-no" title="function not covered" >function($dom, value)</span> { <span class="cstat-no" title="statement not covered" > $dom.find('.checked').removeClass('checked');</span> <span class="cstat-no" title="statement not covered" > $dom.find('[data-value="' + value + '"]').addClass('checked');</span> }, onDialogShown: <span class="fstat-no" title="function not covered" >function($dialog, handler)</span> { <span class="cstat-no" title="statement not covered" > $dialog.one('note.modal.show', handler);</span> }, onDialogHidden: <span class="fstat-no" title="function not covered" >function($dialog, handler)</span> { <span class="cstat-no" title="statement not covered" > $dialog.one('note.modal.hide', handler);</span> }, showDialog: <span class="fstat-no" title="function not covered" >function($dialog)</span> { <span class="cstat-no" title="statement not covered" > $dialog.data('modal').show();</span> }, hideDialog: <span class="fstat-no" title="function not covered" >function($dialog)</span> { <span class="cstat-no" title="statement not covered" > $dialog.data('modal').hide();</span> }, /** * get popover content area * * @param $popover * @returns {*} */ getPopoverContent: <span class="fstat-no" title="function not covered" >function($popover)</span> { <span class="cstat-no" title="statement not covered" > return $popover.find('.note-popover-content');</span> }, /** * get dialog's body area * * @param $dialog * @returns {*} */ getDialogBody: <span class="fstat-no" title="function not covered" >function($dialog)</span> { <span class="cstat-no" title="statement not covered" > return $dialog.find('.note-modal-body');</span> }, createLayout: <span class="fstat-no" title="function not covered" >function($note, options)</span> { <span class="cstat-no" title="statement not covered" > const $editor = (options.airMode ? ui.airEditor([</span> ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); <span class="cstat-no" title="statement not covered" > $editor.insertAfter($note);</span> <span class="cstat-no" title="statement not covered" > return {</span> note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: <span class="fstat-no" title="function not covered" >function($note, layoutInfo)</span> { <span class="cstat-no" title="statement not covered" > $note.html(layoutInfo.editable.html());</span> <span class="cstat-no" title="statement not covered" > layoutInfo.editor.remove();</span> <span class="cstat-no" title="statement not covered" > $note.off('summernote'); </span>// remove summernote custom event <span class="cstat-no" title="statement not covered" > $note.show();</span> } }; <span class="cstat-no" title="statement not covered" >export default ui;</span> </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\+J���Ecoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> src/js/lite/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/204</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/91</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/40</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/204</span> </div> </div> </div> <div class='status-line low'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file low" data-value="settings.js"><a href="settings.js.html">settings.js</a></td> <td data-value="0" class="pic low"><div class="chart"><div class="cover-fill" style="width: 0%;"></div><div class="cover-empty" style="width:100%;"></div></div></td> <td data-value="0" class="pct low">0%</td> <td data-value="26" class="abs low">0/26</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="0" class="pct low">0%</td> <td data-value="26" class="abs low">0/26</td> </tr> <tr> <td class="file low" data-value="ui.js"><a href="ui.js.html">ui.js</a></td> <td data-value="0" class="pic low"><div class="chart"><div class="cover-fill" style="width: 0%;"></div><div class="cover-empty" style="width:100%;"></div></div></td> <td data-value="0" class="pct low">0%</td> <td data-value="178" class="abs low">0/178</td> <td data-value="0" class="pct low">0%</td> <td data-value="91" class="abs low">0/91</td> <td data-value="0" class="pct low">0%</td> <td data-value="40" class="abs low">0/40</td> <td data-value="0" class="pct low">0%</td> <td data-value="178" class="abs low">0/178</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\�dI�4�4Ocoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/TooltipUI.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/ui/TooltipUI.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/lite/ui/</a> TooltipUI.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">2.08% </span> <span class="quiet">Statements</span> <span class='fraction'>1/48</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/23</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">2.08% </span> <span class="quiet">Lines</span> <span class='fraction'>1/48</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >class TooltipUI {</span></span> <span class="fstat-no" title="function not covered" > constructor($node, options)</span> { <span class="cstat-no" title="statement not covered" > this.$node = $node;</span> <span class="cstat-no" title="statement not covered" > this.options = $.extend({}, {</span> title: '', target: options.container, trigger: 'hover focus', placement: 'bottom' }, options); // create tooltip node <span class="cstat-no" title="statement not covered" > this.$tooltip = $([</span> '<div class="note-tooltip in">', ' <div class="note-tooltip-arrow"/>', ' <div class="note-tooltip-content"/>', '</div>' ].join('')); // define event <span class="cstat-no" title="statement not covered" > if (this.options.trigger !== 'manual') {</span> <span class="cstat-no" title="statement not covered" > const showCallback = this.show.bind(this);</span> <span class="cstat-no" title="statement not covered" > const hideCallback = this.hide.bind(this);</span> <span class="cstat-no" title="statement not covered" > const toggleCallback = this.toggle.bind(this);</span> <span class="cstat-no" title="statement not covered" > this.options.trigger.split(' ').forEach(<span class="fstat-no" title="function not covered" >function(eventName)</span> {</span> <span class="cstat-no" title="statement not covered" > if (eventName === 'hover') {</span> <span class="cstat-no" title="statement not covered" > $node.off('mouseenter mouseleave');</span> <span class="cstat-no" title="statement not covered" > $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);</span> } else <span class="cstat-no" title="statement not covered" >if (eventName === 'click') {</span> <span class="cstat-no" title="statement not covered" > $node.on('click', toggleCallback);</span> } else <span class="cstat-no" title="statement not covered" >if (eventName === 'focus') {</span> <span class="cstat-no" title="statement not covered" > $node.on('focus', showCallback).on('blur', hideCallback);</span> } }); } } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > show() {</span></span> <span class="cstat-no" title="statement not covered" > const $node = this.$node;</span> <span class="cstat-no" title="statement not covered" > const offset = $node.offset();</span> <span class="cstat-no" title="statement not covered" > const $tooltip = this.$tooltip;</span> <span class="cstat-no" title="statement not covered" > const title = this.options.title || $node.attr('title') || $node.data('title');</span> <span class="cstat-no" title="statement not covered" > const placement = this.options.placement || $node.data('placement');</span> <span class="cstat-no" title="statement not covered" > $tooltip.addClass(placement);</span> <span class="cstat-no" title="statement not covered" > $tooltip.addClass('in');</span> <span class="cstat-no" title="statement not covered" > $tooltip.find('.note-tooltip-content').text(title);</span> <span class="cstat-no" title="statement not covered" > $tooltip.appendTo(this.options.target);</span> <span class="cstat-no" title="statement not covered" > const nodeWidth = $node.outerWidth();</span> <span class="cstat-no" title="statement not covered" > const nodeHeight = $node.outerHeight();</span> <span class="cstat-no" title="statement not covered" > const tooltipWidth = $tooltip.outerWidth();</span> <span class="cstat-no" title="statement not covered" > const tooltipHeight = $tooltip.outerHeight();</span> <span class="cstat-no" title="statement not covered" > if (placement === 'bottom') {</span> <span class="cstat-no" title="statement not covered" > $tooltip.css({</span> top: offset.top + nodeHeight, left: offset.left + (nodeWidth / 2 - tooltipWidth / 2) }); } else <span class="cstat-no" title="statement not covered" >if (placement === 'top') {</span> <span class="cstat-no" title="statement not covered" > $tooltip.css({</span> top: offset.top - tooltipHeight, left: offset.left + (nodeWidth / 2 - tooltipWidth / 2) }); } else <span class="cstat-no" title="statement not covered" >if (placement === 'left') {</span> <span class="cstat-no" title="statement not covered" > $tooltip.css({</span> top: offset.top + (nodeHeight / 2 - tooltipHeight / 2), left: offset.left - tooltipWidth }); } else <span class="cstat-no" title="statement not covered" >if (placement === 'right') {</span> <span class="cstat-no" title="statement not covered" > $tooltip.css({</span> top: offset.top + (nodeHeight / 2 - tooltipHeight / 2), left: offset.left + nodeWidth }); } } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > hide() {</span></span> <span class="cstat-no" title="statement not covered" > this.$tooltip.removeClass('in');</span> <span class="cstat-no" title="statement not covered" > this.$tooltip.remove();</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > toggle() {</span></span> <span class="cstat-no" title="statement not covered" > if (this.$tooltip.hasClass('in')) {</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> } else { <span class="cstat-no" title="statement not covered" > this.show();</span> } } <span class="cstat-no" title="statement not covered" >}</span> <span class="cstat-no" title="statement not covered" >export default TooltipUI;</span> </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\h���Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/ModalUI.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/ui/ModalUI.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/lite/ui/</a> ModalUI.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">4.76% </span> <span class="quiet">Statements</span> <span class='fraction'>1/21</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/4</span> </div> <div class='fl pad1y space-right2'> <span class="strong">4.76% </span> <span class="quiet">Lines</span> <span class='fraction'>1/21</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >class ModalUI {</span></span> <span class="fstat-no" title="function not covered" > constructor($node, options)</span> { <span class="cstat-no" title="statement not covered" > this.options = $.extend({}, {</span> target: options.container || 'body' }, options); <span class="cstat-no" title="statement not covered" > this.$modal = $node;</span> <span class="cstat-no" title="statement not covered" > this.$backdrop = $('<div class="note-modal-backdrop" />');</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > show() {</span></span> <span class="cstat-no" title="statement not covered" > if (this.options.target === 'body') {</span> <span class="cstat-no" title="statement not covered" > this.$backdrop.css('position', 'fixed');</span> <span class="cstat-no" title="statement not covered" > this.$modal.css('position', 'fixed');</span> } else { <span class="cstat-no" title="statement not covered" > this.$backdrop.css('position', 'absolute');</span> <span class="cstat-no" title="statement not covered" > this.$modal.css('position', 'absolute');</span> } <span class="cstat-no" title="statement not covered" > this.$backdrop.appendTo(this.options.target).show();</span> <span class="cstat-no" title="statement not covered" > this.$modal.appendTo(this.options.target).addClass('open').show();</span> <span class="cstat-no" title="statement not covered" > this.$modal.trigger('note.modal.show');</span> <span class="cstat-no" title="statement not covered" > this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > hide() {</span></span> <span class="cstat-no" title="statement not covered" > this.$modal.removeClass('open').hide();</span> <span class="cstat-no" title="statement not covered" > this.$backdrop.hide();</span> <span class="cstat-no" title="statement not covered" > this.$modal.trigger('note.modal.hide');</span> } <span class="cstat-no" title="statement not covered" >}</span> <span class="cstat-no" title="statement not covered" >export default ModalUI;</span> </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�t��z5z5Ocoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/PopoverUI.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/ui/PopoverUI.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/lite/ui/</a> PopoverUI.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">2% </span> <span class="quiet">Statements</span> <span class='fraction'>1/50</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/22</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">2% </span> <span class="quiet">Lines</span> <span class='fraction'>1/50</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >class PopoverUI {</span></span> <span class="fstat-no" title="function not covered" > constructor($node, options)</span> { <span class="cstat-no" title="statement not covered" > this.$node = $node;</span> <span class="cstat-no" title="statement not covered" > this.options = $.extend({}, {</span> title: '', content: '', target: options.container, trigger: 'hover focus', placement: 'bottom' }, options); // create popover node <span class="cstat-no" title="statement not covered" > this.$popover = $([</span> '<div class="note-popover in">', ' <div class="note-popover-arrow" />', ' <div class="note-popover-content" />', '</div>' ].join('')); // define event <span class="cstat-no" title="statement not covered" > if (this.options.trigger !== 'manual') {</span> <span class="cstat-no" title="statement not covered" > const showCallback = this.show.bind(this);</span> <span class="cstat-no" title="statement not covered" > const hideCallback = this.hide.bind(this);</span> <span class="cstat-no" title="statement not covered" > const toggleCallback = this.toggle.bind(this);</span> <span class="cstat-no" title="statement not covered" > this.options.trigger.split(' ').forEach(<span class="fstat-no" title="function not covered" >function(eventName)</span> {</span> <span class="cstat-no" title="statement not covered" > if (eventName === 'hover') {</span> <span class="cstat-no" title="statement not covered" > $node.off('mouseenter').on('mouseenter', showCallback);</span> <span class="cstat-no" title="statement not covered" > $node.off('mouseleave').on('mouseleave', hideCallback);</span> } else <span class="cstat-no" title="statement not covered" >if (eventName === 'click') {</span> <span class="cstat-no" title="statement not covered" > $node.on('click', toggleCallback);</span> } else <span class="cstat-no" title="statement not covered" >if (eventName === 'focus') {</span> <span class="cstat-no" title="statement not covered" > $node.on('focus', showCallback);</span> <span class="cstat-no" title="statement not covered" > $node.on('blur', hideCallback);</span> } }); } } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > show() {</span></span> <span class="cstat-no" title="statement not covered" > const $node = this.$node;</span> <span class="cstat-no" title="statement not covered" > const offset = $node.offset();</span> <span class="cstat-no" title="statement not covered" > const $popover = this.$popover;</span> <span class="cstat-no" title="statement not covered" > const content = this.options.content || $node.data('content');</span> <span class="cstat-no" title="statement not covered" > const placement = $node.data('placement') || this.options.placement;</span> <span class="cstat-no" title="statement not covered" > const dist = 6;</span> <span class="cstat-no" title="statement not covered" > $popover.addClass(placement);</span> <span class="cstat-no" title="statement not covered" > $popover.addClass('in');</span> <span class="cstat-no" title="statement not covered" > $popover.find('.note-popover-content').html(content);</span> <span class="cstat-no" title="statement not covered" > $popover.appendTo(this.options.target);</span> <span class="cstat-no" title="statement not covered" > const nodeWidth = $node.outerWidth();</span> <span class="cstat-no" title="statement not covered" > const nodeHeight = $node.outerHeight();</span> <span class="cstat-no" title="statement not covered" > const popoverWidth = $popover.outerWidth();</span> <span class="cstat-no" title="statement not covered" > const popoverHeight = $popover.outerHeight();</span> <span class="cstat-no" title="statement not covered" > if (placement === 'bottom') {</span> <span class="cstat-no" title="statement not covered" > $popover.css({</span> top: offset.top + nodeHeight + dist, left: offset.left + (nodeWidth / 2 - popoverWidth / 2) }); } else <span class="cstat-no" title="statement not covered" >if (placement === 'top') {</span> <span class="cstat-no" title="statement not covered" > $popover.css({</span> top: offset.top - popoverHeight - dist, left: offset.left + (nodeWidth / 2 - popoverWidth / 2) }); } else <span class="cstat-no" title="statement not covered" >if (placement === 'left') {</span> <span class="cstat-no" title="statement not covered" > $popover.css({</span> top: offset.top + (nodeHeight / 2 - popoverHeight / 2), left: offset.left - popoverWidth - dist }); } else <span class="cstat-no" title="statement not covered" >if (placement === 'right') {</span> <span class="cstat-no" title="statement not covered" > $popover.css({</span> top: offset.top + (nodeHeight / 2 - popoverHeight / 2), left: offset.left + nodeWidth + dist }); } } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > hide() {</span></span> <span class="cstat-no" title="statement not covered" > this.$popover.removeClass('in');</span> <span class="cstat-no" title="statement not covered" > this.$popover.remove();</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > toggle() {</span></span> <span class="cstat-no" title="statement not covered" > if (this.$popover.hasClass('in')) {</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> } else { <span class="cstat-no" title="statement not covered" > this.show();</span> } } <span class="cstat-no" title="statement not covered" >}</span> <span class="cstat-no" title="statement not covered" >export default PopoverUI;</span> </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�i�$$Hcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/ui/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> src/js/lite/ui/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">2.55% </span> <span class="quiet">Statements</span> <span class='fraction'>4/157</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/55</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/25</span> </div> <div class='fl pad1y space-right2'> <span class="strong">2.55% </span> <span class="quiet">Lines</span> <span class='fraction'>4/157</span> </div> </div> </div> <div class='status-line low'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file low" data-value="DropdownUI.js"><a href="DropdownUI.js.html">DropdownUI.js</a></td> <td data-value="2.63" class="pic low"><div class="chart"><div class="cover-fill" style="width: 2%;"></div><div class="cover-empty" style="width:98%;"></div></div></td> <td data-value="2.63" class="pct low">2.63%</td> <td data-value="38" class="abs low">1/38</td> <td data-value="0" class="pct low">0%</td> <td data-value="6" class="abs low">0/6</td> <td data-value="0" class="pct low">0%</td> <td data-value="9" class="abs low">0/9</td> <td data-value="2.63" class="pct low">2.63%</td> <td data-value="38" class="abs low">1/38</td> </tr> <tr> <td class="file low" data-value="ModalUI.js"><a href="ModalUI.js.html">ModalUI.js</a></td> <td data-value="4.76" class="pic low"><div class="chart"><div class="cover-fill" style="width: 4%;"></div><div class="cover-empty" style="width:96%;"></div></div></td> <td data-value="4.76" class="pct low">4.76%</td> <td data-value="21" class="abs low">1/21</td> <td data-value="0" class="pct low">0%</td> <td data-value="4" class="abs low">0/4</td> <td data-value="0" class="pct low">0%</td> <td data-value="4" class="abs low">0/4</td> <td data-value="4.76" class="pct low">4.76%</td> <td data-value="21" class="abs low">1/21</td> </tr> <tr> <td class="file low" data-value="PopoverUI.js"><a href="PopoverUI.js.html">PopoverUI.js</a></td> <td data-value="2" class="pic low"><div class="chart"><div class="cover-fill" style="width: 2%;"></div><div class="cover-empty" style="width:98%;"></div></div></td> <td data-value="2" class="pct low">2%</td> <td data-value="50" class="abs low">1/50</td> <td data-value="0" class="pct low">0%</td> <td data-value="22" class="abs low">0/22</td> <td data-value="0" class="pct low">0%</td> <td data-value="6" class="abs low">0/6</td> <td data-value="2" class="pct low">2%</td> <td data-value="50" class="abs low">1/50</td> </tr> <tr> <td class="file low" data-value="TooltipUI.js"><a href="TooltipUI.js.html">TooltipUI.js</a></td> <td data-value="2.08" class="pic low"><div class="chart"><div class="cover-fill" style="width: 2%;"></div><div class="cover-empty" style="width:98%;"></div></div></td> <td data-value="2.08" class="pct low">2.08%</td> <td data-value="48" class="abs low">1/48</td> <td data-value="0" class="pct low">0%</td> <td data-value="23" class="abs low">0/23</td> <td data-value="0" class="pct low">0%</td> <td data-value="6" class="abs low">0/6</td> <td data-value="2.08" class="pct low">2.08%</td> <td data-value="48" class="abs low">1/48</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�^�ym(m(Pcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/DropdownUI.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/ui/DropdownUI.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">src/js/lite/ui/</a> DropdownUI.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">2.63% </span> <span class="quiet">Statements</span> <span class='fraction'>1/38</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/9</span> </div> <div class='fl pad1y space-right2'> <span class="strong">2.63% </span> <span class="quiet">Lines</span> <span class='fraction'>1/38</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >class DropdownUI {</span></span> <span class="fstat-no" title="function not covered" > constructor($node, options)</span> { <span class="cstat-no" title="statement not covered" > this.$button = $node;</span> <span class="cstat-no" title="statement not covered" > this.options = $.extend({}, {</span> target: options.container }, options); <span class="cstat-no" title="statement not covered" > this.setEvent();</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > setEvent() {</span></span> <span class="cstat-no" title="statement not covered" > this.$button.on('click', this.toggle.bind(this));</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > clear() {</span></span> <span class="cstat-no" title="statement not covered" > var $parent = $('.note-btn-group.open');</span> <span class="cstat-no" title="statement not covered" > $parent.find('.note-btn.active').removeClass('active');</span> <span class="cstat-no" title="statement not covered" > $parent.removeClass('open');</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > show() {</span></span> <span class="cstat-no" title="statement not covered" > this.$button.addClass('active');</span> <span class="cstat-no" title="statement not covered" > this.$button.parent().addClass('open');</span> <span class="cstat-no" title="statement not covered" > var $dropdown = this.$button.next();</span> <span class="cstat-no" title="statement not covered" > var offset = $dropdown.offset();</span> <span class="cstat-no" title="statement not covered" > var width = $dropdown.outerWidth();</span> <span class="cstat-no" title="statement not covered" > var windowWidth = $(window).width();</span> <span class="cstat-no" title="statement not covered" > var targetMarginRight = parseFloat($(this.options.target).css('margin-right'));</span> <span class="cstat-no" title="statement not covered" > if (offset.left + width > windowWidth - targetMarginRight) {</span> <span class="cstat-no" title="statement not covered" > $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));</span> } else { <span class="cstat-no" title="statement not covered" > $dropdown.css('margin-left', '');</span> } } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > hide() {</span></span> <span class="cstat-no" title="statement not covered" > this.$button.removeClass('active');</span> <span class="cstat-no" title="statement not covered" > this.$button.parent().removeClass('open');</span> } <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" > toggle() {</span></span> <span class="cstat-no" title="statement not covered" > var isOpened = this.$button.parent().hasClass('open');</span> <span class="cstat-no" title="statement not covered" > this.clear();</span> <span class="cstat-no" title="statement not covered" > if (isOpened) {</span> <span class="cstat-no" title="statement not covered" > this.hide();</span> } else { <span class="cstat-no" title="statement not covered" > this.show();</span> } } <span class="cstat-no" title="statement not covered" >}</span> <span class="cstat-no" title="statement not covered" >$(document).on('click', <span class="fstat-no" title="function not covered" >function(e)</span> {</span> <span class="cstat-no" title="statement not covered" > if (!$(e.target).closest('.note-btn-group').length) {</span> <span class="cstat-no" title="statement not covered" > $('.note-btn-group.open').removeClass('open');</span> } }); <span class="cstat-no" title="statement not covered" >$(document).on('click.note-dropdown-menu', <span class="fstat-no" title="function not covered" >function(e)</span> {</span> <span class="cstat-no" title="statement not covered" > $(e.target).closest('.note-dropdown-menu').parent().removeClass('open');</span> }); <span class="cstat-no" title="statement not covered" >export default DropdownUI;</span> </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�� z zKcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/settings.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/lite/settings.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/lite/</a> settings.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/26</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/26</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import $ from 'jquery';</span> <span class="cstat-no" title="statement not covered" >import ui from './ui';</span> <span class="cstat-no" title="statement not covered" >import '../base/summernote-en-US';</span> <span class="cstat-no" title="statement not covered" >import Editor from '../base/module/Editor';</span> <span class="cstat-no" title="statement not covered" >import Clipboard from '../base/module/Clipboard';</span> <span class="cstat-no" title="statement not covered" >import Dropzone from '../base/module/Dropzone';</span> <span class="cstat-no" title="statement not covered" >import Codeview from '../base/module/Codeview';</span> <span class="cstat-no" title="statement not covered" >import Statusbar from '../base/module/Statusbar';</span> <span class="cstat-no" title="statement not covered" >import Fullscreen from '../base/module/Fullscreen';</span> <span class="cstat-no" title="statement not covered" >import Handle from '../base/module/Handle';</span> <span class="cstat-no" title="statement not covered" >import AutoLink from '../base/module/AutoLink';</span> <span class="cstat-no" title="statement not covered" >import AutoSync from '../base/module/AutoSync';</span> <span class="cstat-no" title="statement not covered" >import Placeholder from '../base/module/Placeholder';</span> <span class="cstat-no" title="statement not covered" >import Buttons from '../base/module/Buttons';</span> <span class="cstat-no" title="statement not covered" >import Toolbar from '../base/module/Toolbar';</span> <span class="cstat-no" title="statement not covered" >import LinkDialog from '../base/module/LinkDialog';</span> <span class="cstat-no" title="statement not covered" >import LinkPopover from '../base/module/LinkPopover';</span> <span class="cstat-no" title="statement not covered" >import ImageDialog from '../base/module/ImageDialog';</span> <span class="cstat-no" title="statement not covered" >import ImagePopover from '../base/module/ImagePopover';</span> <span class="cstat-no" title="statement not covered" >import TablePopover from '../base/module/TablePopover';</span> <span class="cstat-no" title="statement not covered" >import VideoDialog from '../base/module/VideoDialog';</span> <span class="cstat-no" title="statement not covered" >import HelpDialog from '../base/module/HelpDialog';</span> <span class="cstat-no" title="statement not covered" >import AirPopover from '../base/module/AirPopover';</span> <span class="cstat-no" title="statement not covered" >import HintPopover from '../base/module/HintPopover';</span> <span class="cstat-no" title="statement not covered" >$.summernote = $.extend($.summernote, {</span> version: '@@VERSION@@', ui: ui, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': Codeview, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['fontsize', ['fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: ['p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onSubmit: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); <span class="cstat-no" title="statement not covered" >import '../summernote'; </span>// eslint-disable-line </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\C��mfmfDcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/ui.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/bs3/ui.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/bs3/</a> ui.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">93.42% </span> <span class="quiet">Statements</span> <span class='fraction'>71/76</span> </div> <div class='fl pad1y space-right2'> <span class="strong">54% </span> <span class="quiet">Branches</span> <span class='fraction'>27/50</span> </div> <div class='fl pad1y space-right2'> <span class="strong">85% </span> <span class="quiet">Functions</span> <span class='fraction'>17/20</span> </div> <div class='fl pad1y space-right2'> <span class="strong">93.42% </span> <span class="quiet">Lines</span> <span class='fraction'>71/76</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">292×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-yes">657×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">292×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">401×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">109×</span> <span class="cline-any cline-yes">1171×</span> <span class="cline-any cline-yes">1171×</span> <span class="cline-any cline-yes">1171×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">109×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-yes">1168×</span> <span class="cline-any cline-yes">1168×</span> <span class="cline-any cline-yes">1168×</span> <span class="cline-any cline-yes">1168×</span> <span class="cline-any cline-yes">1168×</span> <span class="cline-any cline-yes">9344×</span> <span class="cline-any cline-yes">9344×</span> <span class="cline-any cline-yes">9344×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1168×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-yes">146×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">308×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">308×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">308×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">231×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">231×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">231×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">77×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4278×</span> <span class="cline-any cline-yes">4278×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3119×</span> <span class="cline-any cline-yes">3095×</span> <span class="cline-any cline-yes">3095×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-yes">6×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">856×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">76×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import renderer from '../base/renderer'; const editor = renderer.create('<div class="note-editor note-frame panel"/>'); const toolbar = renderer.create('<div class="note-toolbar-wrapper panel-default"><div class="note-toolbar panel-heading" role="toolbar"></div></div>'); const editingArea = renderer.create('<div class="note-editing-area"/>'); const codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>'); const editable = renderer.create('<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>'); const statusbar = renderer.create([ '<output class="note-status-output" aria-live="polite"/>', '<div class="note-statusbar" role="status">', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); const airEditor = renderer.create('<div class="note-editor"/>'); const airEditable = renderer.create([ ' <output class="note-status-output" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); const buttonGroup = renderer.create('<div class="note-btn-group btn-group">'); const dropdown = renderer.create('<ul class="dropdown-menu" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (<span class="branch-1 cbranch-no" title="branch not covered" >item.value || '')</span>; const content = options.template ? options.template(item) : <span class="branch-1 cbranch-no" title="branch not covered" >item;</span> const option = (typeof item === 'object') ? <span class="branch-0 cbranch-no" title="branch not covered" >item.option </span>: undefined; const dataValue = 'data-value="' + value + '"'; const dataOption = (option !== undefined) ? <span class="branch-0 cbranch-no" title="branch not covered" >' data-option="' + option + '"' </span>: ''; return '<li role="listitem" aria-label="' + item + '"><a href="#" ' + (dataValue + dataOption) + '>' + content + '</a></li>'; }).join('') : options.items; $node.html(markup).attr({'aria-label': options.title}); }); const dropdownButtonContents = function(contents, options) { return contents + ' ' + icon(options.icons.caret, 'span'); }; const dropdownCheck = renderer.create('<ul class="dropdown-menu note-check" role="list">', function($node, options) { const markup = $.isArray(options.items) ? options.items.map(function(item) { const value = (typeof item === 'string') ? item : (<span class="branch-1 cbranch-no" title="branch not covered" >item.value || '')</span>; const content = options.template ? options.template(item) : item; return '<li role="listitem" aria-label="' + item + '"><a href="#" data-value="' + value + '">' + icon(options.checkClassName) + ' ' + content + '</a></li>'; }).join('') : <span class="branch-1 cbranch-no" title="branch not covered" >options.items;</span> $node.html(markup).attr({'aria-label': options.title}); }); const palette = renderer.create('<div class="note-color-palette"/>', function($node, options) { const contents = []; for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) { const eventName = options.eventName; const colors = options.colors[row]; const colorsName = options.colorsName[row]; const buttons = []; for (let col = 0, colSize = colors.length; col < colSize; col++) { const color = colors[col]; const colorName = colorsName[col]; buttons.push([ '<button type="button" class="note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } contents.push('<div class="note-color-row">' + buttons.join('') + '</div>'); } $node.html(contents.join('')); <span class="missing-if-branch" title="else path not taken" >E</span>if (options.tooltip) { $node.find('.note-color-btn').tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } }); const dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', function($node, options) { <span class="missing-if-branch" title="if path not taken" >I</span>if (options.fade) { <span class="cstat-no" title="statement not covered" > $node.addClass('fade');</span> } $node.attr({ 'aria-label': options.title }); $node.html([ '<div class="modal-dialog">', ' <div class="modal-content">', (options.title ? ' <div class="modal-header">' + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">&times;</button>' + ' <h4 class="modal-title">' + options.title + '</h4>' + ' </div>' : <span class="branch-1 cbranch-no" title="branch not covered" >''</span> ), ' <div class="modal-body">' + options.body + '</div>', (options.footer ? ' <div class="modal-footer">' + options.footer + '</div>' : <span class="branch-1 cbranch-no" title="branch not covered" >''</span> ), ' </div>', '</div>' ].join('')); }); const popover = renderer.create([ '<div class="note-popover popover in">', ' <div class="arrow"/>', ' <div class="popover-content note-children-container"/>', '</div>' ].join(''), function($node, options) { const direction = typeof options.direction !== 'undefined' ? <span class="branch-0 cbranch-no" title="branch not covered" >options.direction </span>: 'bottom'; $node.addClass(direction); <span class="missing-if-branch" title="if path not taken" >I</span>if (options.hideArrow) { <span class="cstat-no" title="statement not covered" > $node.find('.arrow').hide();</span> } }); const checkbox = renderer.create('<div class="checkbox"></div>', function($node, options) { $node.html([ ' <label' + (options.id ? ' for="' + options.id + '"' : <span class="branch-1 cbranch-no" title="branch not covered" >'')</span> + '>', ' <input role="checkbox" type="checkbox"' + (options.id ? ' id="' + options.id + '"' : <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>, (options.checked ? ' checked' : <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>, ' aria-checked="' + (options.checked ? 'true' : <span class="branch-1 cbranch-no" title="branch not covered" >'false')</span> + '"/>', (options.text ? options.text : <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>, '</label>' ].join('')); }); const icon = function(iconClassName, tagName) { tagName = tagName || 'i'; return '<' + tagName + ' class="' + iconClassName + '"/>'; }; const ui = { editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, dropdown: dropdown, dropdownButtonContents: dropdownButtonContents, dropdownCheck: dropdownCheck, palette: palette, dialog: dialog, popover: popover, checkbox: checkbox, icon: icon, options: {}, button: function($node, options) { return renderer.create('<button type="button" class="note-btn btn btn-default btn-sm" role="button" tabindex="-1">', function($node, options) { <span class="missing-if-branch" title="else path not taken" >E</span>if (options && options.tooltip) { $node.attr({ title: options.tooltip, 'aria-label': options.tooltip }).tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } })($node, options); }, toggleBtn: function($btn, isEnable) { $btn.toggleClass('disabled', !isEnable); $btn.attr('disabled', !isEnable); }, toggleBtnActive: function($btn, isActive) { $btn.toggleClass('active', isActive); }, onDialogShown: <span class="fstat-no" title="function not covered" >function($dialog, handler)</span> { <span class="cstat-no" title="statement not covered" > $dialog.one('shown.bs.modal', handler);</span> }, onDialogHidden: <span class="fstat-no" title="function not covered" >function($dialog, handler)</span> { <span class="cstat-no" title="statement not covered" > $dialog.one('hidden.bs.modal', handler);</span> }, showDialog: <span class="fstat-no" title="function not covered" >function($dialog)</span> { <span class="cstat-no" title="statement not covered" > $dialog.modal('show');</span> }, hideDialog: function($dialog) { $dialog.modal('hide'); }, createLayout: function($note, options) { const $editor = (options.airMode ? <span class="branch-0 cbranch-no" title="branch not covered" >ui.airEditor([</span> ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); $editor.insertAfter($note); return { note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: function($note, layoutInfo) { $note.html(layoutInfo.editable.html()); layoutInfo.editor.remove(); $note.show(); } }; export default ui; </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\��;Dcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/bs3/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> src/js/bs3/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">95.15% </span> <span class="quiet">Statements</span> <span class='fraction'>98/103</span> </div> <div class='fl pad1y space-right2'> <span class="strong">54% </span> <span class="quiet">Branches</span> <span class='fraction'>27/50</span> </div> <div class='fl pad1y space-right2'> <span class="strong">85% </span> <span class="quiet">Functions</span> <span class='fraction'>17/20</span> </div> <div class='fl pad1y space-right2'> <span class="strong">95.15% </span> <span class="quiet">Lines</span> <span class='fraction'>98/103</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="settings.js"><a href="settings.js.html">settings.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="27" class="abs high">27/27</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="27" class="abs high">27/27</td> </tr> <tr> <td class="file high" data-value="ui.js"><a href="ui.js.html">ui.js</a></td> <td data-value="93.42" class="pic high"><div class="chart"><div class="cover-fill" style="width: 93%;"></div><div class="cover-empty" style="width:7%;"></div></div></td> <td data-value="93.42" class="pct high">93.42%</td> <td data-value="76" class="abs high">71/76</td> <td data-value="54" class="pct medium">54%</td> <td data-value="50" class="abs medium">27/50</td> <td data-value="85" class="pct high">85%</td> <td data-value="20" class="abs high">17/20</td> <td data-value="93.42" class="pct high">93.42%</td> <td data-value="76" class="abs high">71/76</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\�u�cttJcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/settings.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/bs3/settings.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/bs3/</a> settings.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>27/27</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>27/27</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import $ from 'jquery'; import ui from '../bs3/ui'; import dom from '../base/core/dom'; import '../base/summernote-en-US'; import Editor from '../base/module/Editor'; import Clipboard from '../base/module/Clipboard'; import Dropzone from '../base/module/Dropzone'; import Codeview from '../base/module/Codeview'; import Statusbar from '../base/module/Statusbar'; import Fullscreen from '../base/module/Fullscreen'; import Handle from '../base/module/Handle'; import AutoLink from '../base/module/AutoLink'; import AutoSync from '../base/module/AutoSync'; import Placeholder from '../base/module/Placeholder'; import Buttons from '../base/module/Buttons'; import Toolbar from '../base/module/Toolbar'; import LinkDialog from '../base/module/LinkDialog'; import LinkPopover from '../base/module/LinkPopover'; import ImageDialog from '../base/module/ImageDialog'; import ImagePopover from '../base/module/ImagePopover'; import TablePopover from '../base/module/TablePopover'; import VideoDialog from '../base/module/VideoDialog'; import HelpDialog from '../base/module/HelpDialog'; import AirPopover from '../base/module/AirPopover'; import HintPopover from '../base/module/HintPopover'; $.summernote = $.extend($.summernote, { version: '@@VERSION@@', ui: ui, dom: dom, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': Codeview, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, linkTargetBlank: true, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); import '../summernote'; // eslint-disable-line </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\Ʉ�d�x�xDcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/ui.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/bs4/ui.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/bs4/</a> ui.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/78</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/50</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/20</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/78</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import $ from 'jquery';</span> <span class="cstat-no" title="statement not covered" >import renderer from '../base/renderer';</span> <span class="cstat-no" title="statement not covered" >const editor = renderer.create('<div class="note-editor note-frame card"/>');</span> <span class="cstat-no" title="statement not covered" >const toolbar = renderer.create('<div class="note-toolbar-wrapper"><div class="note-toolbar card-header" role="toolbar"></div></div>');</span> <span class="cstat-no" title="statement not covered" >const editingArea = renderer.create('<div class="note-editing-area"/>');</span> <span class="cstat-no" title="statement not covered" >const codable = renderer.create('<textarea class="note-codable" role="textbox" aria-multiline="true"/>');</span> <span class="cstat-no" title="statement not covered" >const editable = renderer.create('<div class="note-editable card-block" contentEditable="true" role="textbox" aria-multiline="true"/>');</span> <span class="cstat-no" title="statement not covered" >const statusbar = renderer.create([</span> '<output class="note-status-output" aria-live="polite"/>', '<div class="note-statusbar" role="status">', ' <output class="note-status-output" aria-live="polite"></output>', ' <div class="note-resizebar" role="seperator" aria-orientation="horizontal" aria-label="Resize">', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' <div class="note-icon-bar"/>', ' </div>', '</div>' ].join('')); <span class="cstat-no" title="statement not covered" >const airEditor = renderer.create('<div class="note-editor"/>');</span> <span class="cstat-no" title="statement not covered" >const airEditable = renderer.create([</span> '<output class="note-status-output" aria-live="polite"/>', '<div class="note-editable" contentEditable="true" role="textbox" aria-multiline="true"/>' ].join('')); <span class="cstat-no" title="statement not covered" >const buttonGroup = renderer.create('<div class="note-btn-group btn-group">');</span> <span class="cstat-no" title="statement not covered" >const dropdown = renderer.create('<div class="dropdown-menu" role="list">', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > const markup = $.isArray(options.items) ? options.items.map(<span class="fstat-no" title="function not covered" >function(item)</span> {</span> <span class="cstat-no" title="statement not covered" > const value = (typeof item === 'string') ? item : (item.value || '');</span> <span class="cstat-no" title="statement not covered" > const content = options.template ? options.template(item) : item;</span> <span class="cstat-no" title="statement not covered" > const option = (typeof item === 'object') ? item.option : undefined;</span> <span class="cstat-no" title="statement not covered" > const dataValue = 'data-value="' + value + '"';</span> <span class="cstat-no" title="statement not covered" > const dataOption = (option !== undefined) ? ' data-option="' + option + '"' : '';</span> <span class="cstat-no" title="statement not covered" > return '<a class="dropdown-item" href="#" ' + (dataValue + dataOption) + ' role="listitem" aria-label="' + item + '">' + content + '</a>';</span> }).join('') : options.items; <span class="cstat-no" title="statement not covered" > $node.html(markup).attr({'aria-label': options.title});</span> }); <span class="cstat-no" title="statement not covered" >const dropdownButtonContents = <span class="fstat-no" title="function not covered" >function(contents)</span> {</span> <span class="cstat-no" title="statement not covered" > return contents;</span> }; <span class="cstat-no" title="statement not covered" >const dropdownCheck = renderer.create('<div class="dropdown-menu note-check" role="list">', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > const markup = $.isArray(options.items) ? options.items.map(<span class="fstat-no" title="function not covered" >function(item)</span> {</span> <span class="cstat-no" title="statement not covered" > const value = (typeof item === 'string') ? item : (item.value || '');</span> <span class="cstat-no" title="statement not covered" > const content = options.template ? options.template(item) : item;</span> <span class="cstat-no" title="statement not covered" > return '<a class="dropdown-item" href="#" data-value="' + value + '" role="listitem" aria-label="' + item + '">' + icon(options.checkClassName) + ' ' + content + '</a>';</span> }).join('') : options.items; <span class="cstat-no" title="statement not covered" > $node.html(markup).attr({'aria-label': options.title});</span> }); <span class="cstat-no" title="statement not covered" >const palette = renderer.create('<div class="note-color-palette"/>', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > const contents = [];</span> <span class="cstat-no" title="statement not covered" > for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {</span> <span class="cstat-no" title="statement not covered" > const eventName = options.eventName;</span> <span class="cstat-no" title="statement not covered" > const colors = options.colors[row];</span> <span class="cstat-no" title="statement not covered" > const colorsName = options.colorsName[row];</span> <span class="cstat-no" title="statement not covered" > const buttons = [];</span> <span class="cstat-no" title="statement not covered" > for (let col = 0, colSize = colors.length; col < colSize; col++) {</span> <span class="cstat-no" title="statement not covered" > const color = colors[col];</span> <span class="cstat-no" title="statement not covered" > const colorName = colorsName[col];</span> <span class="cstat-no" title="statement not covered" > buttons.push([</span> '<button type="button" class="note-color-btn"', 'style="background-color:', color, '" ', 'data-event="', eventName, '" ', 'data-value="', color, '" ', 'title="', colorName, '" ', 'aria-label="', colorName, '" ', 'data-toggle="button" tabindex="-1"></button>' ].join('')); } <span class="cstat-no" title="statement not covered" > contents.push('<div class="note-color-row">' + buttons.join('') + '</div>');</span> } <span class="cstat-no" title="statement not covered" > $node.html(contents.join(''));</span> <span class="cstat-no" title="statement not covered" > if (options.tooltip) {</span> <span class="cstat-no" title="statement not covered" > $node.find('.note-color-btn').tooltip({</span> container: options.container, trigger: 'hover', placement: 'bottom' }); } }); <span class="cstat-no" title="statement not covered" >const dialog = renderer.create('<div class="modal" aria-hidden="false" tabindex="-1" role="dialog"/>', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > if (options.fade) {</span> <span class="cstat-no" title="statement not covered" > $node.addClass('fade');</span> } <span class="cstat-no" title="statement not covered" > $node.attr({</span> 'aria-label': options.title }); <span class="cstat-no" title="statement not covered" > $node.html([</span> '<div class="modal-dialog">', ' <div class="modal-content">', (options.title ? ' <div class="modal-header">' + ' <h4 class="modal-title">' + options.title + '</h4>' + ' <button type="button" class="close" data-dismiss="modal" aria-label="Close" aria-hidden="true">&times;</button>' + ' </div>' : '' ), ' <div class="modal-body">' + options.body + '</div>', (options.footer ? ' <div class="modal-footer">' + options.footer + '</div>' : '' ), ' </div>', '</div>' ].join('')); }); <span class="cstat-no" title="statement not covered" >const popover = renderer.create([</span> '<div class="note-popover popover in">', ' <div class="arrow"/>', ' <div class="popover-content note-children-container"/>', '</div>' ].join(''), <span class="fstat-no" title="function not covered" >function($node, options)</span> { <span class="cstat-no" title="statement not covered" > const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';</span> <span class="cstat-no" title="statement not covered" > $node.addClass(direction);</span> <span class="cstat-no" title="statement not covered" > if (options.hideArrow) {</span> <span class="cstat-no" title="statement not covered" > $node.find('.arrow').hide();</span> } }); <span class="cstat-no" title="statement not covered" >const checkbox = renderer.create('<label class="custom-control custom-checkbox"></label>', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > if (options.id) {</span> <span class="cstat-no" title="statement not covered" > $node.attr('for', options.id);</span> } <span class="cstat-no" title="statement not covered" > $node.html([</span> ' <input role="checkbox" type="checkbox" class="custom-control-input"' + (options.id ? ' id="' + options.id + '"' : ''), (options.checked ? ' checked' : ''), ' aria-checked="' + (options.checked ? 'true' : 'false') + '"/>', ' <span class="custom-control-indicator"></span>', ' <span class="custom-control-description">' + (options.text ? options.text : '') + '</span>', '</label>' ].join('')); }); <span class="cstat-no" title="statement not covered" >const icon = <span class="fstat-no" title="function not covered" >function(iconClassName, tagName)</span> {</span> <span class="cstat-no" title="statement not covered" > tagName = tagName || 'i';</span> <span class="cstat-no" title="statement not covered" > return '<' + tagName + ' class="' + iconClassName + '"/>';</span> }; <span class="cstat-no" title="statement not covered" >const ui = {</span> editor: editor, toolbar: toolbar, editingArea: editingArea, codable: codable, editable: editable, statusbar: statusbar, airEditor: airEditor, airEditable: airEditable, buttonGroup: buttonGroup, dropdown: dropdown, dropdownButtonContents: dropdownButtonContents, dropdownCheck: dropdownCheck, palette: palette, dialog: dialog, popover: popover, icon: icon, checkbox: checkbox, options: {}, button: <span class="fstat-no" title="function not covered" >function($node, options)</span> { <span class="cstat-no" title="statement not covered" > return renderer.create('<button type="button" class="note-btn btn btn-light btn-sm" role="button" tabindex="-1">', <span class="fstat-no" title="function not covered" >function($node, options)</span> {</span> <span class="cstat-no" title="statement not covered" > if (options && options.tooltip) {</span> <span class="cstat-no" title="statement not covered" > $node.attr({</span> title: options.tooltip, 'aria-label': options.tooltip }).tooltip({ container: options.container, trigger: 'hover', placement: 'bottom' }); } })($node, options); }, toggleBtn: <span class="fstat-no" title="function not covered" >function($btn, isEnable)</span> { <span class="cstat-no" title="statement not covered" > $btn.toggleClass('disabled', !isEnable);</span> <span class="cstat-no" title="statement not covered" > $btn.attr('disabled', !isEnable);</span> }, toggleBtnActive: <span class="fstat-no" title="function not covered" >function($btn, isActive)</span> { <span class="cstat-no" title="statement not covered" > $btn.toggleClass('active', isActive);</span> }, onDialogShown: <span class="fstat-no" title="function not covered" >function($dialog, handler)</span> { <span class="cstat-no" title="statement not covered" > $dialog.one('shown.bs.modal', handler);</span> }, onDialogHidden: <span class="fstat-no" title="function not covered" >function($dialog, handler)</span> { <span class="cstat-no" title="statement not covered" > $dialog.one('hidden.bs.modal', handler);</span> }, showDialog: <span class="fstat-no" title="function not covered" >function($dialog)</span> { <span class="cstat-no" title="statement not covered" > $dialog.modal('show');</span> }, hideDialog: <span class="fstat-no" title="function not covered" >function($dialog)</span> { <span class="cstat-no" title="statement not covered" > $dialog.modal('hide');</span> }, createLayout: <span class="fstat-no" title="function not covered" >function($note, options)</span> { <span class="cstat-no" title="statement not covered" > const $editor = (options.airMode ? ui.airEditor([</span> ui.editingArea([ ui.airEditable() ]) ]) : ui.editor([ ui.toolbar(), ui.editingArea([ ui.codable(), ui.editable() ]), ui.statusbar() ])).render(); <span class="cstat-no" title="statement not covered" > $editor.insertAfter($note);</span> <span class="cstat-no" title="statement not covered" > return {</span> note: $note, editor: $editor, toolbar: $editor.find('.note-toolbar'), editingArea: $editor.find('.note-editing-area'), editable: $editor.find('.note-editable'), codable: $editor.find('.note-codable'), statusbar: $editor.find('.note-statusbar') }; }, removeLayout: <span class="fstat-no" title="function not covered" >function($note, layoutInfo)</span> { <span class="cstat-no" title="statement not covered" > $note.html(layoutInfo.editable.html());</span> <span class="cstat-no" title="statement not covered" > layoutInfo.editor.remove();</span> <span class="cstat-no" title="statement not covered" > $note.show();</span> } }; <span class="cstat-no" title="statement not covered" >export default ui;</span> </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\� ���Dcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/bs4/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> src/js/bs4/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/105</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Branches</span> <span class='fraction'>0/50</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/20</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/105</span> </div> </div> </div> <div class='status-line low'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file low" data-value="settings.js"><a href="settings.js.html">settings.js</a></td> <td data-value="0" class="pic low"><div class="chart"><div class="cover-fill" style="width: 0%;"></div><div class="cover-empty" style="width:100%;"></div></div></td> <td data-value="0" class="pct low">0%</td> <td data-value="27" class="abs low">0/27</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="0" class="pct low">0%</td> <td data-value="27" class="abs low">0/27</td> </tr> <tr> <td class="file low" data-value="ui.js"><a href="ui.js.html">ui.js</a></td> <td data-value="0" class="pic low"><div class="chart"><div class="cover-fill" style="width: 0%;"></div><div class="cover-empty" style="width:100%;"></div></div></td> <td data-value="0" class="pct low">0%</td> <td data-value="78" class="abs low">0/78</td> <td data-value="0" class="pct low">0%</td> <td data-value="50" class="abs low">0/50</td> <td data-value="0" class="pct low">0%</td> <td data-value="20" class="abs low">0/20</td> <td data-value="0" class="pct low">0%</td> <td data-value="78" class="abs low">0/78</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\�s]��{�{Jcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/settings.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/js/bs4/settings.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">src/js/bs4/</a> settings.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Statements</span> <span class='fraction'>0/27</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Lines</span> <span class='fraction'>0/27</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302</td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import $ from 'jquery';</span> <span class="cstat-no" title="statement not covered" >import ui from '../bs4/ui';</span> <span class="cstat-no" title="statement not covered" >import dom from '../base/core/dom';</span> <span class="cstat-no" title="statement not covered" >import '../base/summernote-en-US';</span> <span class="cstat-no" title="statement not covered" >import Editor from '../base/module/Editor';</span> <span class="cstat-no" title="statement not covered" >import Clipboard from '../base/module/Clipboard';</span> <span class="cstat-no" title="statement not covered" >import Dropzone from '../base/module/Dropzone';</span> <span class="cstat-no" title="statement not covered" >import Codeview from '../base/module/Codeview';</span> <span class="cstat-no" title="statement not covered" >import Statusbar from '../base/module/Statusbar';</span> <span class="cstat-no" title="statement not covered" >import Fullscreen from '../base/module/Fullscreen';</span> <span class="cstat-no" title="statement not covered" >import Handle from '../base/module/Handle';</span> <span class="cstat-no" title="statement not covered" >import AutoLink from '../base/module/AutoLink';</span> <span class="cstat-no" title="statement not covered" >import AutoSync from '../base/module/AutoSync';</span> <span class="cstat-no" title="statement not covered" >import Placeholder from '../base/module/Placeholder';</span> <span class="cstat-no" title="statement not covered" >import Buttons from '../base/module/Buttons';</span> <span class="cstat-no" title="statement not covered" >import Toolbar from '../base/module/Toolbar';</span> <span class="cstat-no" title="statement not covered" >import LinkDialog from '../base/module/LinkDialog';</span> <span class="cstat-no" title="statement not covered" >import LinkPopover from '../base/module/LinkPopover';</span> <span class="cstat-no" title="statement not covered" >import ImageDialog from '../base/module/ImageDialog';</span> <span class="cstat-no" title="statement not covered" >import ImagePopover from '../base/module/ImagePopover';</span> <span class="cstat-no" title="statement not covered" >import TablePopover from '../base/module/TablePopover';</span> <span class="cstat-no" title="statement not covered" >import VideoDialog from '../base/module/VideoDialog';</span> <span class="cstat-no" title="statement not covered" >import HelpDialog from '../base/module/HelpDialog';</span> <span class="cstat-no" title="statement not covered" >import AirPopover from '../base/module/AirPopover';</span> <span class="cstat-no" title="statement not covered" >import HintPopover from '../base/module/HintPopover';</span> <span class="cstat-no" title="statement not covered" >$.summernote = $.extend($.summernote, {</span> version: '@@VERSION@@', ui: ui, dom: dom, plugins: {}, options: { modules: { 'editor': Editor, 'clipboard': Clipboard, 'dropzone': Dropzone, 'codeview': Codeview, 'statusbar': Statusbar, 'fullscreen': Fullscreen, 'handle': Handle, // FIXME: HintPopover must be front of autolink // - Script error about range when Enter key is pressed on hint popover 'hintPopover': HintPopover, 'autoLink': AutoLink, 'autoSync': AutoSync, 'placeholder': Placeholder, 'buttons': Buttons, 'toolbar': Toolbar, 'linkDialog': LinkDialog, 'linkPopover': LinkPopover, 'imageDialog': ImageDialog, 'imagePopover': ImagePopover, 'tablePopover': TablePopover, 'videoDialog': VideoDialog, 'helpDialog': HelpDialog, 'airPopover': AirPopover }, buttons: {}, lang: 'en-US', followingToolbar: true, otherStaticBar: '', // toolbar toolbar: [ ['style', ['style']], ['font', ['bold', 'underline', 'clear']], ['fontname', ['fontname']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ], // popover popatmouse: true, popover: { image: [ ['imagesize', ['imageSize100', 'imageSize50', 'imageSize25']], ['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']] ] }, // air mode: inline editor airMode: false, width: null, height: null, linkTargetBlank: true, focus: false, tabSize: 4, styleWithSpan: true, shortcuts: true, textareaAutoSync: true, hintDirection: 'bottom', tooltip: 'auto', container: 'body', maxTextLength: 0, styleTags: [ 'p', { title: 'Blockquote', tag: 'blockquote', className: 'blockquote', value: 'blockquote' }, 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' ], fontNames: [ 'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New', 'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande', 'Tahoma', 'Times New Roman', 'Verdana' ], fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'], // pallete colors(n x n) colors: [ ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'], ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'], ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'], ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'], ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'], ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'], ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'], ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'] ], // http://chir.ag/projects/name-that-color/ colorsName: [ ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'], ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'], ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'], ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'], ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'], ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'], ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'], ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'] ], 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: false, dialogsFade: false, maximumImageFileSize: null, callbacks: { onInit: null, onFocus: null, onBlur: null, onBlurCodeview: null, onEnter: null, onKeyup: null, onKeydown: null, onImageUpload: null, onImageUploadError: null }, codemirror: { mode: 'text/html', htmlMode: true, lineNumbers: true }, 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', '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', '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' } } }); <span class="cstat-no" title="statement not covered" >import '../summernote'; </span>// eslint-disable-line </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\����--Xcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/style.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/editing/style.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/editing/</a> style.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>58/58</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>10/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>58/58</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Style.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import range from '../../../../src/js/base/core/range'; import Style from '../../../../src/js/base/editing/Style'; var expect = chai.expect; describe('base:editing.Style', () => { var style = new Style(); describe('styleNodes', () => { it('should wrap selected text with span', () => { var $cont = $('<div class="note-editable"><p>text</p></div>'); var $p = $cont.find('p'); var rng = range.create($p[0].firstChild, 0, $p[0].firstChild, 4); style.styleNodes(rng); expect($cont.html()).to.deep.equal('<p><span>text</span></p>'); }); it('should split text and wrap selected text with span', () => { var $cont = $('<div class="note-editable"><p>text</p></div>'); var $p = $cont.find('p'); var rng = range.create($p[0].firstChild, 1, $p[0].firstChild, 3); style.styleNodes(rng); expect($cont.html()).to.deep.equal('<p>t<span>ex</span>t</p>'); }); it('should split text and insert span', () => { var $cont = $('<div class="note-editable"><p>text</p></div>'); var $p = $cont.find('p'); var rng = range.create($p[0].firstChild, 2, $p[0].firstChild, 2); style.styleNodes(rng); expect($cont.html()).to.deep.equal('<p>te<span></span>xt</p>'); }); it('should just return a parent span', () => { var $cont = $('<div class="note-editable"><p><span>text</span></p></div>'); var $span = $cont.find('span'); var rng = range.create($span[0].firstChild, 0, $span[0].firstChild, 4); style.styleNodes(rng); expect($cont.html()).to.deep.equal('<p><span>text</span></p>'); }); it('should wrap each texts with span', () => { var $cont = $('<div class="note-editable"><p><b>bold</b><span>span</span></p></div>'); var $b = $cont.find('b'); var $span = $cont.find('span'); var rng = range.create($b[0].firstChild, 2, $span[0].firstChild, 2); style.styleNodes(rng); expect($cont.html()).to.deep.equal('<p><b>bo<span>ld</span></b><span><span>sp</span>an</span></p>'); }); it('should wrap each texts with span except not a single blood line', () => { var $cont = $('<div class="note-editable"><p><b>bold</b><span>span</span></p></div>'); var $b = $cont.find('b'); var $span = $cont.find('span'); var rng = range.create($b[0].firstChild, 2, $span[0].firstChild, 4); style.styleNodes(rng); expect($cont.html()).to.deep.equal('<p><b>bo<span>ld</span></b><span>span</span></p>'); }); it('should expand b tag when providing the expandClosestSibling option', () => { var $cont = $('<div class="note-editable"><p>text<b>bold</b></p></div>'); var $p = $cont.find('p'); var rng = range.create($p[0].firstChild, 0, $p[0].firstChild, 4); style.styleNodes(rng, { nodeName: 'B', expandClosestSibling: true }); expect($cont.html()).to.deep.equal('<p><b>textbold</b></p>'); }); it('should not expand b tag when providing the onlyPartialContains option', () => { var $cont = $('<div class="note-editable"><p>text<b>bold</b></p></div>'); var $p = $cont.find('p'); var rng = range.create($p[0].firstChild, 0, $p[0].firstChild, 4); style.styleNodes(rng, { nodeName: 'B', expandClosestSibling: true, onlyPartialContains: true }); expect($cont.html()).to.deep.equal('<p><b>text</b><b>bold</b></p>'); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\sMޢ__Pcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/editing/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> test/unit/base/editing/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>493/493</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>38/38</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>493/493</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="Table.spec.js"><a href="Table.spec.js.html">Table.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="435" class="abs high">435/435</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="28" class="abs high">28/28</td> <td data-value="100" class="pct high">100%</td> <td data-value="435" class="abs high">435/435</td> </tr> <tr> <td class="file high" data-value="style.spec.js"><a href="style.spec.js.html">style.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="58" class="abs high">58/58</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="10" class="abs high">10/10</td> <td data-value="100" class="pct high">100%</td> <td data-value="58" class="abs high">58/58</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�8%��Xcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/Table.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/editing/Table.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/editing/</a> Table.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>435/435</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>28/28</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>435/435</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Table.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import range from '../../../../src/js/base/core/range'; import Table from '../../../../src/js/base/editing/Table'; var expect = chai.expect; describe('base:editing.Table', () => { var table = new Table(); describe('tableWorker', () => { it('should create simple 1x1 table', () => { var resultTable = table.createTable(1, 1); expect(1).to.deep.equal(resultTable.rows.length); expect(1).to.deep.equal(resultTable.rows[0].cells.length); }); it('should delete simple 1x1 table', () => { var $cont = $('<div class="note-editable"><table><tr><td>content</td></tr></table></div>'); var $cell = $cont.find('td'); var rng = range.create($cell[0].firstChild, 1); table.deleteTable(rng); expect('').to.deep.equal($cont.html()); }); it('should add simple row to table on top', () => { var $cont = $('<div class="note-editable"><table><tr><td>content</td></tr></table></div>'); var $cell = $cont.find('td'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'top'); expect('<table><tbody><tr><td><br></td></tr><tr><td>content</td></tr></tbody></table>').to.equalsIgnoreCase($cont.html()); }); it('should add simple row to table on bottom', () => { var $cont = $('<div class="note-editable"><table><tr><td>content</td></tr></table></div>'); var $cell = $cont.find('td'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); expect('<table><tbody><tr><td>content</td></tr><tr><td><br></td></tr></tbody></table>').to.equalsIgnoreCase($cont.html()); }); it('should add simple row to table on top between two rows', () => { var htmlContent = '<div class="note-editable"><table><tr><td>content1</td></tr><tr><td id="td2">content2</td></tr></table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'top'); var resultTable = $('<table><tbody><tr><td>content1</td></tr></tbody></table>'); $(resultTable).append('<tr><td><br/></td></tr>'); $(resultTable).append('<tr><td id="td2">content2</td></tr>'); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add simple row to table on bottom between two rows', () => { var baseTable = $('<table><tbody><tr><td id="td1">content1</td></tr></tbody></table>'); $(baseTable).append('<tr><td id="td2">content2</td></tr>'); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); var resultTable = $('<table><tbody><tr><td id="td1">content1</td></tr></tbody></table>'); $(resultTable).append('<tr><td><br/></td></tr>'); $(resultTable).append('<tr><td id="td2">content2</td></tr>'); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add simple col to table on left between two cols', () => { var baseTable = $('<table><tbody></tbody></table>'); var baseTr = '<tr><td id="td1">content1</td><td id="td2">content2</td></tr>'; baseTable.append(baseTr); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'left'); var resultTable = $('<table><tbody></tbody></table>'); $(resultTable).append('<tr><td id="td1">content1</td><td><br/></td><td id="td2">content2</td></tr>'); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add simple col to table on right between two cols', () => { var baseTable = $('<table><tbody></tbody></table>'); var baseTr = '<tr><td id="td1">content1</td><td id="td2">content2</td></tr>'; baseTable.append(baseTr); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#td1'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('<table><tbody></tbody></table>'); $(resultTable).append('<tr><td id="td1">content1</td><td><br/></td><td id="td2">content2</td></tr>'); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete row to table between two other rows', () => { var baseTable = $('<table><tbody></tbody></table>'); var baseTr = '<tr><td id="td1">content1</td></tr>'; baseTr += '<td id="td2">content2</td></tr>'; baseTr += '<td id="td3">content3</td></tr>'; baseTable.append(baseTr); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteRow(rng); var resultTable = $('<table><tbody></tbody></table>'); $(resultTable).append('<tr><td id="td1">content1</td></tr><tr><td id="td3">content3</td></tr>'); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete col to table between two other cols', () => { var baseTable = $('<table><tbody></tbody></table>'); var baseTr = '<tr><td id="td1">content1</td><td id="td2">content2</td><td id="td3">content3</td></tr>'; baseTable.append(baseTr); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table>'); $(resultTable).append('<tr><td id="td1">content1</td><td id="td3">content3</td></tr>'); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete first col to table with colspan in column with colspan', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td colspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td><td id="tr2td3">Col3</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td id="tr1td1"></td><td id="tr1td2">Col2</td></tr>'; var resultTr2 = '<tr><td id="tr2td2">Col2</td><td id="tr2td3">Col3</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with colspan in column', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td colspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td><td id="tr2td3">Col3</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var resultTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td3">Col3</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with colspan in 3 columns', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td colspan="3" id="tr1td1">Col1-Span</td><td id="tr1td4">Col4</td></tr>'; var baseTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td><td id="tr2td3">Col3</td><td id="tr2td4">Col4</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td colspan="2" id="tr1td1">Col1-Span</td><td id="tr1td4">Col4</td></tr>'; var resultTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td3">Col3</td><td id="tr2td4">Col4</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete first row to table with rowspan in line with rowspan', () => { var baseTable = $('<table><tbody></tbody></table>'); var baseTr1 = '<tr><td class="test" rowspan="2" id="tr1td1">Row1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col2</td></tr>'; var baseTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.deleteRow(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1AndTr2 = '<tr><td class="test" id="tr1td1"></td><td id="tr2td2">Col2</td></tr>'; var resultTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; resultTable.append(resultTr1AndTr2); resultTable.append(resultTr3); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second row to table with rowspan in line without rowspan', () => { var baseTable = $('<table><tbody></tbody></table>'); var baseTr1 = '<tr><td rowspan="3" id="tr1td1">Row1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col2</td></tr>'; var baseTr3 = '<tr><td id="tr3td2">Col2</td></tr>'; var baseTr4 = '<tr><td id="tr4td1">Col1</td><td id="tr4td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); baseTable.append(baseTr4); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteRow(rng); var resultTable = $('<table><tbody></tbody></table>'); var resultTr1 = '<tr><td rowspan="2" id="tr1td1">Row1-Span</td><td id="tr1td2">Col2</td></tr>'; var resultTr3 = '<tr><td id="tr3td2">Col2</td></tr>'; var resultTr4 = '<tr><td id="tr4td1">Col1</td><td id="tr4td2">Col2</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with rowspan in 2 rows', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col2</td></tr>'; var baseTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td></tr>'; var resultTr2 = '<tr></tr>'; var resultTr3 = '<tr><td id="tr3td1">Col1</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should delete second col to table with rowspan in 2 rows on second row', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col2</td></tr>'; var baseTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td></tr>'; var resultTr2 = '<tr></tr>'; var resultTr3 = '<tr><td id="tr3td1">Col1</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row on bottom rowspan cell.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col2</td></tr>'; var baseTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr2td2'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td rowspan="3" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var resultTr2 = '<tr><td id="tr2td2">Col2</td></tr>'; var resultTr3 = '<tr><td><br></td></tr>'; var resultTr4 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row on bottom colspan cell.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td colspan="2" id="tr1td1">Col1-Span</td></tr>'; var baseTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td></tr>'; var baseTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td colspan="2" id="tr1td1">Col1-Span</td></tr>'; var resultTr2 = '<tr><td colspan="2"><br></td></tr>'; var resultTr3 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td></tr>'; var resultTr4 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row above rowspan cell.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col1</td></tr>'; var baseTr3 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); baseTable.append(baseTr3); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'top'); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td><br></td><td><br></td></tr>'; var resultTr2 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var resultTr3 = '<tr><td id="tr2td2">Col1</td></tr>'; var resultTr4 = '<tr><td id="tr3td1">Col1</td><td id="tr3td2">Col2</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); resultTable.append(resultTr4); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add row on bottom rowspan cell and with aditional column.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col1</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addRow(rng, 'bottom'); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td rowspan="3" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var resultTr2 = '<tr><td id="tr2td2">Col1</td></tr>'; var resultTr3 = '<tr><td><br></td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); resultTable.append(resultTr3); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add column on right having rowspan cell and with aditional column.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col1</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td2'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td><td><br></td></tr>'; var resultTr2 = '<tr><td id="tr2td2">Col1</td><td><br></td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add column on right having rowspan cell and with aditional column with focus on rowspan column.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td id="tr1td2">Col2</td></tr>'; var baseTr2 = '<tr><td id="tr2td2">Col1</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td rowspan="2" id="tr1td1">Col1-Span</td><td rowspan="2"><br></td><td id="tr1td2">Col2</td></tr>'; var resultTr2 = '<tr><td id="tr2td2">Col1</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should remove column after colspan column.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td id="tr1td1">Col1</td><td colspan="2" id="tr1td2">Col2-Span</td><td id="tr1td4">Col4</td></tr>'; var baseTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td><td id="tr2td3">Col3</td><td id="tr2td4">Col4</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td4'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td id="tr1td1">Col1</td><td colspan="2" id="tr1td2">Col2-Span</td></tr>'; var resultTr2 = '<tr><td id="tr2td1">Col1</td><td id="tr2td2">Col2</td><td id="tr2td3">Col3</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should remove column before colspan column.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td id="tr1td1">TR1TD1</td><td id="tr1td2" colspan="2">TR1TD2-COLSPAN</td>'; baseTr1 += '<td id="tr1td4">TR1TD4</td></tr>'; var baseTr2 = '<tr><td id="tr2td1">TR2TD1</td><td id="tr2td2">TR2TD2</td><td id="tr2td3">TR2TD3</td>'; baseTr2 += '<td id="tr2td4">TR2TD4</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.deleteCol(rng); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td id="tr1td2" colspan="2">TR1TD2-COLSPAN</td>'; resultTr1 += '<td id="tr1td4">TR1TD4</td></tr>'; var resultTr2 = '<tr><td id="tr2td2">TR2TD2</td><td id="tr2td3">TR2TD3</td><td id="tr2td4">TR2TD4</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); it('should add column before colspan column.', () => { var baseTable = $('<table><tbody></tbody></table> '); var baseTr1 = '<tr><td id="tr1td1">TR1TD1</td><td id="tr1td2">TR1TD2</td></tr>'; var baseTr2 = '<tr><td id="tr2td1" colspan="2">TR2TD1</td></tr>'; baseTable.append(baseTr1); baseTable.append(baseTr2); var htmlContent = '<div class="note-editable"><table>' + $(baseTable).html() + '</table></div>'; var $cont = $(htmlContent); var $cell = $cont.find('#tr1td1'); var rng = range.create($cell[0].firstChild, 1); table.addCol(rng, 'right'); var resultTable = $('<table><tbody></tbody></table> '); var resultTr1 = '<tr><td id="tr1td1">TR1TD1</td><td><br></td><td id="tr1td2">TR1TD2</td></tr>'; var resultTr2 = '<tr><td id="tr2td1" colspan="3">TR2TD1</td></tr>'; resultTable.append(resultTr1); resultTable.append(resultTr2); var expectedResult = '<table>' + $(resultTable).html() + '</table>'; expect(expectedResult).to.equalsIgnoreCase($cont.html()); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\[O�N&&Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/key.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/core/key.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/core/</a> key.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>12/12</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>6/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>12/12</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * key.spec.js * (c) 2013~ Alan Hong * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import key from '../../../../src/js/base/core/key'; var expect = chai.expect; describe('base:core.key', () => { describe('isEdit', () => { it('should return true for BACKSPACE', () => { expect(key.isEdit(key.code.BACKSPACE)).to.be.true; }); it('should return true for DELETE', () => { expect(key.isEdit(key.code.DELETE)).to.be.true; }); }); describe('isMove', () => { it('should return true for LEFT', () => { expect(key.isMove(key.code.LEFT)).to.be.true; }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\Lg�d!0!0Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/lists.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/core/lists.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/core/</a> lists.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>63/63</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>33/33</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>62/62</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">5×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * lists.spec.js * (c) 2013~ Alan Hong * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import lists from '../../../../src/js/base/core/lists'; var expect = chai.expect; describe('base:core.lists', () => { describe('head', () => { it('should return the first element', () => { expect(lists.head([1, 2, 3])).to.be.equal(1); }); }); describe('last', () => { it('should return the last element', () => { expect(lists.last([1, 2, 3])).to.be.equal(3); }); }); describe('initial', () => { it('should exclude last element', () => { expect(lists.initial([1, 2, 3])).to.deep.equal([1, 2]); }); }); describe('tail', () => { it('should exclude first element', () => { expect(lists.tail([1, 2, 3])).to.deep.equal([2, 3]); }); }); function isEven(num) { return num % 2 === 0; } describe('find', () => { it('should return first matched element', () => { expect(lists.find([1, 2, 3], isEven)).to.be.equal(2); }); }); describe('all', () => { it('should return false if all elements are not even', () => { expect(lists.all([1, 2, 3], isEven)).to.be.false; }); it('should return true if all elements are even', () => { expect(lists.all([2, 4], isEven)).to.be.true; }); }); describe('all', () => { it('should return false if the element is not contained', () => { expect(lists.contains([1, 2, 3], 4)).to.be.false; }); it('should return true if the element is contained', () => { expect(lists.contains([1, 2, 4], 4)).to.be.true; }); }); describe('sum', () => { it('should return sum of all elements', () => { expect(lists.sum([1, 2, 3])).to.be.equal(6); }); it('should return sum of all elements iterated', () => { var result = lists.sum([1, 2, 3], (v) => { return v * 2; }); expect(result).to.be.equal(12); }); }); describe('from', () => { it('should return an array of childNodes', () => { var $cont, $b, $u, $s, $i; $cont = $('<div><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); expect(lists.from($cont[0].childNodes)).to.deep.equal([$b[0], $u[0], $s[0], $i[0]]); }); }); describe('clusterBy', () => { it('should cluster by equality 1', () => { var aaClustered = lists.clusterBy([1, 1, 2, 2, 3], (itemA, itemB) => { return itemA === itemB; }); expect(aaClustered).to.deep.equal([[1, 1], [2, 2], [3]]); }); it('should cluster by equality 2', () => { var aaClustered = lists.clusterBy([1, 2, 2, 1, 3], (itemA, itemB) => { return itemA === itemB; }); expect(aaClustered).to.deep.equal([[1], [2, 2], [1], [3]]); }); }); describe('compact', () => { it('should remove all elements has false value', () => { expect(lists.compact([0, 1, false, 2, '', 3])).to.deep.equal([1, 2, 3]); }); }); describe('unique', () => { it('should return duplicate-free version of array', () => { expect(lists.unique([1, 2, 3, 3, 2, 1])).to.deep.equal([1, 2, 3]); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\òT֘���Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/dom.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/core/dom.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/core/</a> dom.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>205/205</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>2/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>63/63</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>203/203</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-yes">4×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-yes">10×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * dom.spec.js * (c) 2013~ Alan Hong * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import chaidom from '../../../chaidom'; import $ from 'jquery'; import dom from '../../../../src/js/base/core/dom'; import func from '../../../../src/js/base/core/func'; let expect = chai.expect; chai.use(chaidom); describe('base:core.dom', () => { describe('ancestor', () => { let $cont, $b, txtB; before(() => { // basic case $cont = $('<div class="note-editable"><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $b = $cont.find('b'); txtB = $b[0].firstChild; }); it('should find ancestor B', () => { expect(dom.ancestor(txtB, dom.isB)).to.deep.equal($b[0]); }); it('should find ancestor DIV', () => { expect(dom.ancestor(txtB, dom.isDiv)).to.deep.equal($cont[0]); }); it('should return null when finding ancestor U does not exist', () => { expect(dom.ancestor(txtB, dom.isU)).to.be.null; }); it('should return null when finding paragraph ancestor outsider note-editable', () => { expect(dom.ancestor(txtB, dom.isLi)).to.be.null; }); }); describe('listAncestor', () => { let $cont, $b, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><i><s><u><b>b</b></u></s></i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return [$b, $u, $s, $i] from b to i', () => { let result = dom.listAncestor($b[0], (node) => { return node === $i[0]; }); expect(result).to.deep.equal([$b[0], $u[0], $s[0], $i[0]]); }); it('should return [$u, $s] from u to s', () => { let result = dom.listAncestor($u[0], (node) => { return node === $s[0]; }); expect(result).to.deep.equal([$u[0], $s[0]]); }); }); describe('listDescendant', () => { let $cont, $b, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><b></b><u></u><s></s><i></i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return an array of descendant elements', () => { expect(dom.listDescendant($cont[0])).to.deep.equal([$b[0], $u[0], $s[0], $i[0]]); }); it('should filter an array of descendant elements', () => { let result = dom.listDescendant($cont[0], (node) => { return node.nodeName === 'B' || node.nodeName === 'S'; }); expect(result).to.deep.equal([$b[0], $s[0]]); }); }); describe('commonAncestor', () => { let $cont, $span, $div, $b, $u, $s; before(() => { $cont = $('<div class="note-editable"><div><span><b>b</b><u>u</u></span><span><s>s</s><i>i</i></span></div></div>'); $span = $cont.find('span'); $div = $cont.find('div'); $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); }); it('should return a common element in ancestors', () => { expect(dom.commonAncestor($b[0], $u[0])).to.deep.equal($span[0]); }); it('should return a common element in ancestors even if they have same nodeName', () => { expect(dom.commonAncestor($b[0], $s[0])).to.deep.equal($div[0]); }); }); describe('listNext', () => { let $cont, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return an array of next sibling elements including itself', () => { expect(dom.listNext($u[0])).to.deep.equal([$u[0], $s[0], $i[0]]); }); it('should return itself if there are no next sibling', () => { expect(dom.listNext($i[0])).to.deep.equal([$i[0]]); }); it('should return an array of next sibling elements before predicate is true', () => { expect(dom.listNext($s[0], func.eq($i[0]))).to.deep.equal([$s[0]]); }); }); describe('listPrev', () => { let $cont, $b, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return an array of previous sibling elements including itself', () => { expect(dom.listPrev($s[0])).to.deep.equal([$s[0], $u[0], $b[0]]); }); it('should return itself if there are no previous sibling', () => { expect(dom.listPrev($b[0])).to.deep.equal([$b[0]]); }); it('should return an array of previous sibling elements before predicate is true', () => { expect(dom.listPrev($i[0], func.eq($s[0]))).to.deep.equal([$i[0]]); }); }); describe('position', () => { let $cont, $b, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return the position of element', () => { expect(dom.position($b[0])).to.be.equal(0); expect(dom.position($u[0])).to.be.equal(1); expect(dom.position($s[0])).to.be.equal(2); expect(dom.position($i[0])).to.be.equal(3); }); it('should return position 0 for text node in b', () => { expect(dom.position($b[0].firstChild)).to.be.equal(0); }); }); describe('makeOffsetPath', () => { let $cont, $b, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return empty array if two elements are same', () => { expect(dom.makeOffsetPath($cont[0], $cont[0])).to.deep.equal([]); }); it('should return offset path array between two elements #1', () => { expect(dom.makeOffsetPath($cont[0], $b[0])).to.deep.equal([0]); expect(dom.makeOffsetPath($cont[0], $b[0].firstChild)).to.deep.equal([0, 0]); }); it('should return offset path array between two elements #2', () => { expect(dom.makeOffsetPath($cont[0], $u[0])).to.deep.equal([1]); expect(dom.makeOffsetPath($cont[0], $u[0].firstChild)).to.deep.equal([1, 0]); }); it('should return offset path array between two elements #3', () => { expect(dom.makeOffsetPath($cont[0], $s[0])).to.deep.equal([2]); expect(dom.makeOffsetPath($cont[0], $s[0].firstChild)).to.deep.equal([2, 0]); }); it('should return offset path array between two elements #2', () => { expect(dom.makeOffsetPath($cont[0], $i[0])).to.deep.equal([3]); expect(dom.makeOffsetPath($cont[0], $i[0].firstChild)).to.deep.equal([3, 0]); }); }); describe('fromOffsetPath', () => { let $cont, $b, $u, $s, $i; before(() => { $cont = $('<div class="note-editable"><b>b</b><u>u</u><s>s</s><i>i</i></div>'); // busi $b = $cont.find('b'); $u = $cont.find('u'); $s = $cont.find('s'); $i = $cont.find('i'); }); it('should return the element by offsetPath', () => { let cont = $cont[0]; $.each([$b[0], $u[0], $s[0], $i[0]], (idx, node) => { expect(dom.fromOffsetPath(cont, dom.makeOffsetPath(cont, node))).to.deep.equal(node); let child = node.firstChild; expect(dom.fromOffsetPath(cont, dom.makeOffsetPath(cont, child))).to.deep.equal(child); }); }); }); describe('splitTree', () => { let $para; beforeEach(() => { let $busi = $('<div class="note-editable"><p><b>b</b><u>u</u><s>strike</s><i>i</i></p></div>'); // busi $para = $busi.clone().find('p'); }); describe('element pivot case', () => { it('should be split by u tag with offset 0', () => { let $u = $para.find('u'); dom.splitTree($para[0], { node: $u[0], offset: 0 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u><br></u>'); expect($para.next().html()).to.equalsIgnoreCase('<u>u</u><s>strike</s><i>i</i>'); }); it('should be split by u tag with offset 1', () => { let $u = $para.find('u'); dom.splitTree($para[0], { node: $u[0], offset: 1 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u>'); expect($para.next().html()).to.equalsIgnoreCase('<u><br></u><s>strike</s><i>i</i>'); }); it('should be split by b tag with offset 0 (left edge case)', () => { let $b = $para.find('b'); dom.splitTree($para[0], { node: $b[0], offset: 0 }); expect($para.html()).to.equalsIgnoreCase('<b><br></b>'); expect($para.next().html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s>strike</s><i>i</i>'); }); it('should be split by i tag with offset 1 (right edge case)', () => { let $i = $para.find('i'); dom.splitTree($para[0], { node: $i[0], offset: 1 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s>strike</s><i>i</i>'); expect($para.next().html()).to.equalsIgnoreCase('<i><br></i>'); }); }); describe('textNode case', () => { it('should be split by s tag with offset 3 (middle case)', () => { let $s = $para.find('s'); dom.splitTree($para[0], { node: $s[0].firstChild, offset: 3 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s>str</s>'); expect($para.next().html()).to.equalsIgnoreCase('<s>ike</s><i>i</i>'); }); it('should be split by s tag with offset 0 (left edge case)', () => { let $s = $para.find('s'); dom.splitTree($para[0], { node: $s[0].firstChild, offset: 0 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s><br></s>'); expect($para.next().html()).to.equalsIgnoreCase('<s>strike</s><i>i</i>'); }); it('should be split by s tag with offset 6 (right edge case)', () => { let $s = $para.find('s'); dom.splitTree($para[0], { node: $s[0].firstChild, offset: 6 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s>strike</s>'); expect($para.next().html()).to.equalsIgnoreCase('<s><br></s><i>i</i>'); }); it('should be split by s tag with offset 3 (2 depth case)', () => { let $s = $para.find('s'); dom.splitTree($s[0], { node: $s[0].firstChild, offset: 3 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s>str</s><s>ike</s><i>i</i>'); }); it('should be split by s tag with offset 3 (1 depth and textNode case)', () => { let $s = $para.find('s'); dom.splitTree($s[0].firstChild, { node: $s[0].firstChild, offset: 3 }); expect($para.html()).to.equalsIgnoreCase('<b>b</b><u>u</u><s>strike</s><i>i</i>'); }); it('should be split by span tag with offset 2 (1 depth and element case)', () => { let $cont = $('<div class="note-editable"><p><span><b>b</b><u>u</u><s>s</s><i>i</i></span></p></div>'); // busi let $span = $cont.find('span'); dom.splitTree($span[0], { node: $span[0], offset: 2 }); expect($cont.html()).to.equalsIgnoreCase('<p><span><b>b</b><u>u</u></span><span><s>s</s><i>i</i></span></p>'); }); }); }); describe('splitPoint', () => { it('should return rightNode and container for empty paragraph with inline', () => { let $editable = $('<div class="note-editable"><p><br></p></div>'); let $para = $editable.clone().find('p'); let $br = $para.find('br'); let result = dom.splitPoint({ node: $para[0], offset: 0 }, true); expect(result).to.deep.equal({ rightNode: $br[0], container: $para[0] }); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��i)}}Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/core/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> test/unit/base/core/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>616/616</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>2/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>193/193</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>613/613</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="dom.spec.js"><a href="dom.spec.js.html">dom.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="205" class="abs high">205/205</td> <td data-value="100" class="pct high">100%</td> <td data-value="2" class="abs high">2/2</td> <td data-value="100" class="pct high">100%</td> <td data-value="63" class="abs high">63/63</td> <td data-value="100" class="pct high">100%</td> <td data-value="203" class="abs high">203/203</td> </tr> <tr> <td class="file high" data-value="func.spec.js"><a href="func.spec.js.html">func.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="75" class="abs high">75/75</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="35" class="abs high">35/35</td> <td data-value="100" class="pct high">100%</td> <td data-value="75" class="abs high">75/75</td> </tr> <tr> <td class="file high" data-value="key.spec.js"><a href="key.spec.js.html">key.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="12" class="abs high">12/12</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="6" class="abs high">6/6</td> <td data-value="100" class="pct high">100%</td> <td data-value="12" class="abs high">12/12</td> </tr> <tr> <td class="file high" data-value="lists.spec.js"><a href="lists.spec.js.html">lists.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="63" class="abs high">63/63</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="33" class="abs high">33/33</td> <td data-value="100" class="pct high">100%</td> <td data-value="62" class="abs high">62/62</td> </tr> <tr> <td class="file high" data-value="range.spec.js"><a href="range.spec.js.html">range.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="261" class="abs high">261/261</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="56" class="abs high">56/56</td> <td data-value="100" class="pct high">100%</td> <td data-value="261" class="abs high">261/261</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\���Pr�r�Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/range.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/core/range.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/core/</a> range.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>261/261</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>56/56</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>261/261</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * range.spec.js * (c) 2013~ Alan Hong * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import chaidom from '../../../chaidom'; import $ from 'jquery'; import dom from '../../../../src/js/base/core/dom'; import range from '../../../../src/js/base/core/range'; var expect = chai.expect; chai.use(chaidom); describe('base:core.range', () => { describe('nodes', () => { describe('1 depth', () => { var $para; before(() => { var $cont = $('<div class="note-editable"><p>para1</p><p>para2</p></div>'); $para = $cont.find('p'); }); it('should return array of two paragraphs', () => { var rng = range.create($para[0].firstChild, 0, $para[1].firstChild, 1); expect(rng.nodes(dom.isPara, {includeAncestor: true})).to.have.length(2); }); it('should return array of a paragraph', () => { var rng = range.create($para[0].firstChild, 0, $para[0].firstChild, 0); expect(rng.nodes(dom.isPara, { includeAncestor: true })).to.have.length(1); }); }); describe('multi depth', () => { it('should return array of a paragraph', () => { var $cont = $('<div class="note-editable"><p>p<b>ar</b>a1</p><p>para2</p></div>'); var $b = $cont.find('b'); var rng = range.create($b[0].firstChild, 0, $b[0].firstChild, 0); expect(rng.nodes(dom.isPara, { includeAncestor: true })).to.have.length(1); }); }); describe('on list, on heading', () => { it('should return array of list paragraphs', () => { var $cont = $('<div class="note-editable"><ul><li>para1</li><li>para2</li></ul></div>'); var $li = $cont.find('li'); var rng = range.create($li[0].firstChild, 0, $li[1].firstChild, 1); expect(rng.nodes(dom.isPara, { includeAncestor: true })).to.have.length(2); }); it('should return array of list paragraphs', () => { var $cont = $('<div class="note-editable"><h1>heading1</h1><h2>heading2</h2></div>'); var $h1 = $cont.find('h1'); var $h2 = $cont.find('h2'); var rng = range.create($h1[0].firstChild, 0, $h2[0].firstChild, 1); expect(rng.nodes(dom.isPara, { includeAncestor: true })).to.have.length(2); }); }); }); describe('commonAncestor', () => { var $cont; before(() => { $cont = $('<div><span><b>b</b><u>u</u></span></div>'); }); it('should return <span> for <b>|b</b> and <u>u|</u>', () => { var $span = $cont.find('span'); var $b = $cont.find('b'); var $u = $cont.find('u'); var rng = range.create($b[0].firstChild, 0, $u[0].firstChild, 1); expect(rng.commonAncestor()).to.deep.equal($span[0]); }); it('should return b(#textNode) for <b>|b|</b>', () => { var $b = $cont.find('b'); var rng = range.create($b[0].firstChild, 0, $b[0].firstChild, 1); expect(rng.commonAncestor()).to.deep.equal($b[0].firstChild); }); }); describe('expand', () => { it('should return <b>|b</b> ~ <u>u|</u> for <b>|b</b> with isAnchor', () => { var $cont = $('<div><a><b>b</b><u>u</u></a></div>'); var $anchor = $cont.find('a'); var $b = $cont.find('b'); var rng = range.create($b[0].firstChild, 0, $b[0].firstChild, 0).expand(dom.isAnchor); expect(rng.sc).to.deep.equal($anchor[0]); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($anchor[0]); expect(rng.eo).to.equal(2); }); }); describe('collapse', () => { it('should return <u>u|</u> for <b>|b</b> ~ <u>u|</u>', () => { var $cont = $('<div><b>b</b><u>u</u></div>'); var $b = $cont.find('b'); var $u = $cont.find('u'); var rng = range.create($b[0].firstChild, 0, $u[0].firstChild, 1).collapse(); expect(rng.sc).to.deep.equal($u[0].firstChild); expect(rng.so).to.equal(1); expect(rng.ec).to.deep.equal($u[0].firstChild); expect(rng.eo).to.equal(1); }); }); describe('normalize', () => { var $cont; before(() => { $cont = $('<div><p><b>b</b><u>u</u><s>s</s></p></div>'); }); it('should return <b>|b</b> ~ <u>u|</u> for |<b>b</b> ~ <u>u</u>|', () => { var $p = $cont.find('p'); var $b = $cont.find('b'); var $u = $cont.find('u'); var rng = range.create($p[0], 0, $p[0], 2).normalize(); expect(rng.sc).to.deep.equal($b[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($u[0].firstChild); expect(rng.eo).to.equal(1); }); it('should return <b>b|</b><u>u</u> for <b>b</b>|<u>u</u>', () => { var $p = $cont.find('p'); var $b = $cont.find('b'); var rng = range.create($p[0], 1, $p[0], 1).normalize(); expect(rng.sc).to.deep.equal($b[0].firstChild); expect(rng.so).to.equal(1); expect(rng.ec).to.deep.equal($b[0].firstChild); expect(rng.eo).to.equal(1); }); it('should return <b>b</b><u>|u|</u><s>s</s> for <b>b|</b><u>u</u><s>|s</s>', () => { var $b = $cont.find('b'); var $u = $cont.find('u'); var $s = $cont.find('s'); var rng = range.create($b[0].firstChild, 1, $s[0].firstChild, 0).normalize(); expect(rng.sc).to.deep.equal($u[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($u[0].firstChild); expect(rng.eo).to.equal(1); }); it('should return <b>b|</b><u>u</u><s>s</s> for <b>b|</b><u>u</u><s>s</s>', () => { var $b = $cont.find('b'); var rng = range.create($b[0].firstChild, 1, $b[0].firstChild, 1).normalize(); expect(rng.sc).to.deep.equal($b[0].firstChild); expect(rng.so).to.equal(1); expect(rng.ec).to.deep.equal($b[0].firstChild); expect(rng.eo).to.equal(1); }); }); describe('normalize (block mode)', () => { it('should return <p>text</p><p>|<br></p> for <p>text</p><p>|<br></p>', () => { var $cont = $('<div><p>text</p><p><br></p></div>'); var $p = $cont.find('p'); var rng = range.create($p[1], 0, $p[1], 0).normalize(); expect(rng.sc).to.deep.equal($p[1]); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($p[1]); expect(rng.eo).to.equal(0); }); it('should return <p>text</p><p>|text</b></p> for <p>text</p><p>|text</p>', () => { var $cont = $('<div><p>text</p><p>text</p></div>'); var $p = $cont.find('p'); var rng = range.create($p[1], 0, $p[1], 0).normalize(); expect(rng.sc).to.deep.equal($p[1].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($p[1].firstChild); expect(rng.eo).to.equal(0); }); it('should return <p>|text</p><p>text|</b></p> for |<p>text</p><p>text</p>|', () => { var $cont = $('<div class="note-editable"><p>text</p><p>text</p></div>'); var $p = $cont.find('p'); var rng = range.create($cont[0], 0, $cont[0], 2).normalize(); expect(rng.sc).to.deep.equal($p[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($p[1].firstChild); expect(rng.eo).to.equal(4); }); }); describe('normalize (void element)', () => { it('should return <p><img>|<b>bold</b></p> for <p><img>|<b>bold</b></p>', () => { var $cont = $('<div><p><img><b>bold</b></p></div>'); var $p = $cont.find('p'); var $b = $cont.find('b'); var rng = range.create($p[0], 1, $p[0], 1).normalize(); expect(rng.sc).to.deep.equal($b[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($b[0].firstChild); expect(rng.eo).to.equal(0); }); }); describe('insertNode', () => { it('should split paragraph when inserting a block element', () => { var $cont = $('<div class="note-editable"><p><b>bold</b></p></div>'); var $b = $cont.find('b'); var $p2 = $('<p>p</p>'); var rng = range.create($b[0].firstChild, 2, $b[0].firstChild, 2); rng.insertNode($p2[0]); expect($cont.html()).to.equalsIgnoreCase('<p><b>bo</b></p><p>p</p><p><b>ld</b></p>'); }); it('should not split paragraph when inserting an inline element', () => { var $cont = $('<div class="note-editable"><p>text</p></div>'); var $p = $cont.find('p'); var $u = $('<u>u</u>'); var rng = range.create($p[0].firstChild, 2, $p[0].firstChild, 2); rng.insertNode($u[0]); expect($cont.html()).to.equalsIgnoreCase('<p>te<u>u</u>xt</p>'); }); it('should not split paragraph when inserting an inline element case 2', () => { var $cont = $('<div class="note-editable"><p><b>bold</b></p></div>'); var $b = $cont.find('b'); var $u = $('<u>u</u>'); var rng = range.create($b[0].firstChild, 2, $b[0].firstChild, 2); rng.insertNode($u[0]); expect($cont.html()).to.equalsIgnoreCase('<p><b>bo</b><u>u</u><b>ld</b></p>'); }); }); describe('pasteHTML', () => { it('should not split a block element when inserting inline elements into it', () => { var $cont = $('<div class="note-editable"><p>text</p></div>'); var $p = $cont.find('p'); var markup = '<span>span</span><i>italic</i>'; var rng = range.create($p[0].firstChild, 2); rng.pasteHTML(markup); expect($cont.html()).to.equalsIgnoreCase('<p>te<span>span</span><i>italic</i>xt</p>'); }); it('should split an inline element when pasting inline elements into it', () => { var $cont = $('<div class="note-editable"><p><b>bold</b></p></div>'); var $b = $cont.find('b'); var markup = '<span>span</span><i>italic</i>'; var rng = range.create($b[0].firstChild, 2); rng.pasteHTML(markup); expect($cont.html()).to.equalsIgnoreCase('<p><b>bo</b><span>span</span><i>italic</i><b>ld</b></p>'); }); it('should split inline node when pasting an inline node and a block node into it', () => { var $cont = $('<div class="note-editable"><p><b>bold</b></p></div>'); var $b = $cont.find('b'); var markup = '<span>span</span><p><i>italic</i></p>'; var rng = range.create($b[0].firstChild, 2); rng.pasteHTML(markup); expect($cont.html()).to.equalsIgnoreCase('<p><b>bo</b><span>span</span></p><p><i>italic</i></p><p><b>ld</b></p>'); }); }); describe('deleteContents', () => { var $cont, $b; beforeEach(() => { $cont = $('<div class="note-editable"><p><b>bold</b><u>u</u></p></div>'); $b = $cont.find('b'); }); it('should remove text only for partial text', () => { var rng = range.create($b[0].firstChild, 1, $b[0].firstChild, 3); rng.deleteContents(); expect($cont.html()).to.equalsIgnoreCase('<p><b>bd</b><u>u</u></p>'); }); it('should remove text for entire text', () => { var rng = range.create($b[0].firstChild, 0, $b[0].firstChild, 4); rng.deleteContents(); expect($cont.html()).to.equalsIgnoreCase('<p><b></b><u>u</u></p>'); }); }); describe('wrapBodyInlineWithPara', () => { it('should insert an empty paragraph when there is no contents', () => { var $cont = $('<div class="note-editable"></div>'); var rng = range.create($cont[0], 0); rng.wrapBodyInlineWithPara(); expect($cont.html()).to.equalsIgnoreCase('<p><br></p>'); }); it('should wrap text with paragraph for text', () => { var $cont = $('<div class="note-editable">text</div>'); var rng = range.create($cont[0].firstChild, 2); rng.wrapBodyInlineWithPara(); expect($cont.html()).to.equalsIgnoreCase('<p>text</p>'); }); it('should wrap an inline node with paragraph when selecting text in the inline node', () => { var $cont = $('<div class="note-editable"><b>bold</b></div>'); var $b = $cont.find('b'); var rng = range.create($b[0].firstChild, 2); rng.wrapBodyInlineWithPara(); expect($cont.html()).to.equalsIgnoreCase('<p><b>bold</b></p>'); }); it('should wrap inline nodes with paragraph when selecting text in the inline nodes', () => { var $cont = $('<div class="note-editable"><b>b</b><i>i</i></div>'); var rng = range.create($cont[0], 0); rng.wrapBodyInlineWithPara(); expect($cont.html()).to.equalsIgnoreCase('<p><b>b</b><i>i</i></p>'); }); it('should wrap inline nodes with paragraph when selection some of text in the inline nodes #1', () => { var $cont = $('<div class="note-editable"><b>b</b><i>i</i></div>'); var rng = range.create($cont[0], 1); rng.wrapBodyInlineWithPara(); expect($cont.html()).to.equalsIgnoreCase('<p><b>b</b><i>i</i></p>'); }); it('should wrap inline nodes with paragraph when selection some of text in the inline nodes #2', () => { var $cont = $('<div class="note-editable"><b>b</b><i>i</i></div>'); var rng = range.create($cont[0], 2); rng.wrapBodyInlineWithPara(); expect($cont.html()).to.equalsIgnoreCase('<p><b>b</b><i>i</i></p>'); }); }); describe('getWordRange', () => { var $cont; before(() => { $cont = $('<div class="note-editable">super simple wysiwyg editor</div>'); }); it('should return the range itself when there is no word before cursor', () => { var rng = range.create($cont[0].firstChild, 0).getWordRange(); expect(rng.sc).to.deep.equal($cont[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($cont[0].firstChild); expect(rng.eo).to.equal(0); }); it('should return expanded range when there is a word before cursor', () => { var rng = range.create($cont[0].firstChild, 5).getWordRange(); expect(rng.sc).to.deep.equal($cont[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($cont[0].firstChild); expect(rng.eo).to.equal(5); }); it('should return expanded range when there is a half word before cursor', () => { var rng = range.create($cont[0].firstChild, 3).getWordRange(); expect(rng.sc).to.deep.equal($cont[0].firstChild); expect(rng.so).to.equal(0); expect(rng.ec).to.deep.equal($cont[0].firstChild); expect(rng.eo).to.equal(3); }); it('should return expanded range when there are words before cursor', () => { var rng = range.create($cont[0].firstChild, 12).getWordRange(); expect(rng.sc).to.deep.equal($cont[0].firstChild); expect(rng.so).to.equal(6); expect(rng.ec).to.deep.equal($cont[0].firstChild); expect(rng.eo).to.equal(12); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\ʗ�5�5Tcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/func.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/core/func.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/core/</a> func.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>75/75</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>35/35</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>75/75</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * func.spec.js * (c) 2013~ Alan Hong * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import func from '../../../../src/js/base/core/func'; var expect = chai.expect; describe('base:core.func', () => { describe('eq', () => { it('should return true if two values are same', () => { expect(func.eq(1)(1)).to.be.ok; }); }); describe('eq2', () => { it('should return true if two values are same', () => { expect(func.eq2(1, 1)).to.be.ok; }); it('should return false if two values are not same', () => { expect(func.eq2(1, '1')).to.be.not.ok; }); }); describe('peq2', () => { it('should return true when two properties are same', () => { expect(func.peq2('prop')({ prop: 'hello' }, { prop: 'hello' })).to.be.ok; }); it('should return false when two properties are not same', () => { expect(func.peq2('prop')({ prop: 'hello' }, { prop: 'world' })).to.be.not.ok; }); }); describe('ok', () => { it('should return true', () => { expect(func.ok()).to.be.ok; }); }); describe('fail', () => { it('should return false', () => { expect(func.fail()).to.be.not.ok; }); }); describe('not', () => { it('should return opposite function', () => { expect(func.not(func.ok)()).to.be.not.ok; expect(func.not(func.fail)()).to.be.ok; }); }); describe('and', () => { it('should return composite function', () => { expect(func.and(func.ok, func.ok)()).to.be.ok; expect(func.and(func.fail, func.ok)()).to.be.not.ok; expect(func.and(func.fail, func.fail)()).to.be.not.ok; }); }); describe('invoke', () => { it('should return function which invoke the method', () => { expect(func.invoke(func, 'ok')()).to.be.ok; expect(func.invoke(func, 'fail')()).to.be.not.ok; }); }); describe('uniqueId', () => { it('should return uniqueId with the prefix as a parameter', () => { expect(func.uniqueId('note-')).to.be.equal('note-1'); expect(func.uniqueId('note-')).to.be.equal('note-2'); expect(func.uniqueId('note-')).to.be.equal('note-3'); }); }); describe('invertObject', () => { it('should return inverted object between keys and values', () => { expect(func.invertObject({ keyA: 'valueA', keyB: 'valueB' })) .to.deep.equal({ valueA: 'keyA', valueB: 'keyB' }); }); }); describe('namespaceToCamel', () => { it('should return camelcase text', () => { expect(func.namespaceToCamel('upload.image')).to.be.equal('UploadImage'); }); it('should return prefixed camelcase text', () => { expect(func.namespaceToCamel('upload.image', 'summernote')).to.be.equal('summernoteUploadImage'); }); }); describe('debounce', () => { it('shouldnt execute immediately', () => { var hasHappened = false; var fn = func.debounce(() => { hasHappened = true; }, 100); expect(hasHappened).to.be.false; fn(); expect(hasHappened).to.be.false; }); it('should execute after delay', (done) => { var hasHappened = false; var fn = func.debounce(() => { hasHappened = true; }, 100); fn(); setTimeout(() => { expect(hasHappened).to.be.true; done(); }, 101); }); it('should only happen once', (done) => { var count = 0; var fn = func.debounce(() => { count += 1; }, 100); fn(); fn(); fn(); setTimeout(() => { expect(count).to.be.equal(1); done(); }, 101); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\S����Xcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Editor.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/module/Editor.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/module/</a> Editor.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">99.53% </span> <span class="quiet">Statements</span> <span class='fraction'>210/211</span> </div> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Branches</span> <span class='fraction'>5/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>50/50</span> </div> <div class='fl pad1y space-right2'> <span class="strong">99.53% </span> <span class="quiet">Lines</span> <span class='fraction'>210/211</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">29×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-yes">9×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">26×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-yes">8×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1000×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Editor.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import spies from 'chai-spies'; import chaidom from '../../../chaidom'; import $ from 'jquery'; import env from '../../../../src/js/base/core/env'; import range from '../../../../src/js/base/core/range'; import Context from '../../../../src/js/base/Context'; const expect = chai.expect; chai.use(spies); chai.use(chaidom); function expectContents(context, markup) { expect(context.layoutInfo.editable.html()).to.equalsIgnoreCase(markup); } function expectToHaveBeenCalled(context, customEvent, handler) { const $note = context.layoutInfo.note; const spy = chai.spy(); $note.on(customEvent, spy); handler(); expect(spy).to.have.been.called(); } describe('Editor', () => { var editor, context; beforeEach(function() { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); context = new Context($('<div><p>hello</p></div>'), options); editor = context.modules.editor; // [workaround] // - Firefox need setTimeout for applying contents // - IE8-11 can't create range in headless mode <span class="missing-if-branch" title="if path not taken" >I</span>if (!(env.isWebkit || <span class="branch-1 cbranch-no" title="branch not covered" >env.isEdge)</span>) { <span class="cstat-no" title="statement not covered" > this.skip();</span> } }); describe('initialize', () => { it('should bind custom events', () => { [ 'keydown', 'keyup', 'blur', 'mousedown', 'mouseup', 'scroll', 'focusin', 'focusout' ].forEach((eventName) => { expectToHaveBeenCalled(context, 'summernote.' + eventName, () => { context.layoutInfo.editable.trigger(eventName); }); }); expectToHaveBeenCalled(context, 'summernote.change', () => { editor.insertText('hello'); }); }); }); <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isWebkit) { describe('undo and redo', () => { it('should control history', () => { editor.insertText(' world'); expectContents(context, '<p>hello world</p>'); editor.undo(); expectContents(context, '<p>hello</p>'); editor.redo(); expectContents(context, '<p>hello world</p>'); }); }); } describe('tab', () => { it('should insert tab', () => { editor.tab(); expectContents(context, '<p>hello&nbsp;&nbsp;&nbsp;&nbsp;</p>'); }); }); describe('insertParagraph', () => { it('should insert paragraph', () => { editor.insertParagraph(); expectContents(context, '<p>hello</p><p><br></p>'); editor.insertParagraph(); expectContents(context, '<p>hello</p><p><br></p><p><br></p>'); }); }); <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isWebkit) { describe('insertImage', () => { it('should insert image', () => { var source = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAF0lEQVQYGWP8////fwYsgAmLGFiIHhIAT+oECGHuN2UAAAAASUVORK5CYII='; return editor.insertImage(source, 'image').then(() => { expectContents(context, '<p>hello<img src="' + source + '" data-filename="image" style="width: 0px;"></p>'); }); }); }); } describe('insertOrderedList and insertUnorderedList', () => { it('should toggle paragraph to list', () => { editor.insertOrderedList(); expectContents(context, '<ol><li>hello</li></ol>'); editor.insertUnorderedList(); expectContents(context, '<ul><li>hello</li></ul>'); editor.insertUnorderedList(); expectContents(context, '<p>hello</p>'); }); }); describe('indent and outdent', () => { // [workaround] style is different by browser <span class="missing-if-branch" title="else path not taken" >E</span>if (env.isPhantom) { it('should indent and outdent paragraph', () => { editor.indent(); expectContents(context, '<p style="margin-left: 25px;">hello</p>'); editor.outdent(); expectContents(context, '<p style="">hello</p>'); }); } it('should indent and outdent list', () => { editor.insertOrderedList(); expectContents(context, '<ol><li>hello</li></ol>'); editor.indent(); expectContents(context, '<ol><ol><li>hello</li></ol></ol>'); editor.outdent(); expectContents(context, '<ol><li>hello</li></ol>'); }); }); describe('insertNode', () => { it('should insert node', () => { editor.insertNode($('<span> world</span>')[0]); expectContents(context, '<p>hello<span> world</span></p>'); }); it('should be limited', () => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); options.maxTextLength = 5; context = new Context($('<div><p>hello</p></div>'), options); editor = context.modules.editor; editor.insertNode($('<span> world</span>')[0]); expectContents(context, '<p>hello</p>'); }); }); describe('insertText', () => { it('should insert text', () => { editor.insertText(' world'); expectContents(context, '<p>hello world</p>'); }); it('should be limited', () => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); options.maxTextLength = 5; context = new Context($('<div><p>hello</p></div>'), options); editor = context.modules.editor; editor.insertText(' world'); expectContents(context, '<p>hello</p>'); }); }); describe('pasteHTML', () => { it('should paste html', () => { editor.pasteHTML('<span> world</span>'); expectContents(context, '<p>hello<span> world</span></p>'); }); it('should not call change change event more than once per paste event', () => { var generateLargeHtml = () => { var html = '<div>'; for (var i = 0; i < 1000; i++) { html += '<p>HTML element #' + i + '</p>'; } html += '</div>'; return html; }; var $note = context.layoutInfo.note; var spy = chai.spy(); $note.on('summernote.change', spy); var html = generateLargeHtml(); editor.pasteHTML(html); expect(spy).to.have.been.called.once; }); it('should be limited', () => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); options.maxTextLength = 5; context = new Context($('<div><p>hello</p></div>'), options); editor = context.modules.editor; editor.pasteHTML('<span> world</span>'); expectContents(context, '<p>hello</p>'); }); }); describe('insertHorizontalRule', () => { it('should insert horizontal rule', () => { editor.insertHorizontalRule(); expectContents(context, '<p>hello</p><hr><p><br></p>'); }); }); describe('insertTable', () => { it('should insert table', () => { var markup = [ '<p>hello</p>', '<table class="table table-bordered"><tbody>', '<tr><td><br></td><td><br></td></tr>', '<tr><td><br></td><td><br></td></tr>', '</tbody></table>', '<p><br></p>' ].join(''); editor.insertTable('2x2'); expectContents(context, markup); }); }); describe('empty', () => { it('should make contents empty', () => { editor.empty(); expect(editor.isEmpty()).to.be.true; }); }); describe('formatBlock', () => { it('should apply formatBlock', () => { context.layoutInfo.editable.appendTo('body'); editor.formatBlock('blockquote'); // start <p>hello</p> => <blockquote>hello</blockquote> expectContents(context, '<blockquote>hello</blockquote>'); }); it('should apply multi formatBlock', () => { // set multi block html var codes = [ '<p><a href="http://summernote.org">hello world</a></p>', '<p><a href="http://summernote.org">hello world</a></p>', '<p><a href="http://summernote.org">hello world</a></p>' ]; context.invoke('code', codes.join('')); // append to body var editable = context.layoutInfo.editable; editable.appendTo('body'); // run formatBlock editor.formatBlock('blockquote'); // check current range position in blockquote element var nodeName = editable.children()[0].nodeName; expect(nodeName).to.equalsIgnoreCase('blockquote'); }); it('should apply multi test 2 - formatBlock', () => { var codes = [ '<p><a href="http://summernote.org">hello world</a></p>', '<p><a href="http://summernote.org">hello world</a></p>', '<p><a href="http://summernote.org">hello world</a></p>' ]; context.invoke('code', codes.join('')); var editable = context.layoutInfo.editable; editable.appendTo('body'); var startNode = editable.find('p').first()[0]; var endNode = editable.find('p').last()[0]; // all p tags is wrapped range.create(startNode, 1, endNode, 1).normalize().select(); editor.formatBlock('blockquote'); var nodeName = editable.children()[0].nodeName; expect(nodeName).to.equalsIgnoreCase('blockquote'); // p -> blockquote, p is none expect(editable.find('p').length).to.equals(0); }); it('should apply custom className in formatBlock', () => { context.layoutInfo.editable.appendTo('body'); var $target = $('<blockquote class="blockquote" />'); editor.formatBlock('blockquote', $target); // start <p>hello</p> => <blockquote class="blockquote">hello</blockquote> expectContents(context, '<blockquote class="blockquote">hello</blockquote>'); }); }); describe('createLink', () => { it('should create normal link', () => { var text = 'hello'; var editable = context.layoutInfo.editable; var pNode = editable.find('p')[0]; var textNode = pNode.childNodes[0]; var startIndex = textNode.wholeText.indexOf(text); var endIndex = startIndex + text.length; range.create(textNode, startIndex, textNode, endIndex).normalize().select(); // check creation normal link editor.createLink({ url: 'http://summernote.org', text: 'summernote' }); expectContents(context, '<p>hello<a href="http://summernote.org">summernote</a></p>'); }); it('should create a link with range', () => { var text = 'hello'; var editable = context.layoutInfo.editable; var pNode = editable.find('p')[0]; var textNode = pNode.childNodes[0]; var startIndex = textNode.wholeText.indexOf(text); var endIndex = startIndex + text.length; var rng = range.create(textNode, startIndex, textNode, endIndex); editor.createLink({ url: 'http://summernote.org', text: 'summernote', range: rng }); expectContents(context, '<p><a href="http://summernote.org">summernote</a></p>'); }); it('should create a link with isNewWindow', () => { var text = 'hello'; var editable = context.layoutInfo.editable; var pNode = editable.find('p')[0]; var textNode = pNode.childNodes[0]; var startIndex = textNode.wholeText.indexOf(text); var endIndex = startIndex + text.length; var rng = range.create(textNode, startIndex, textNode, endIndex); editor.createLink({ url: 'http://summernote.org', text: 'summernote', range: rng, isNewWindow: true }); expectContents(context, '<p><a href="http://summernote.org" target="_blank">summernote</a></p>'); }); it('should modify a link', () => { context.invoke('code', '<p><a href="http://summernote.org">hello world</a></p>'); var editable = context.layoutInfo.editable; var anchorNode = editable.find('a')[0]; var rng = range.createFromNode(anchorNode); editor.createLink({ url: 'http://wow.summernote.org', text: 'summernote wow', range: rng }); expectContents(context, '<p><a href="http://wow.summernote.org">summernote wow</a></p>'); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�ݬ0��\coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Fullscreen.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/module/Fullscreen.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/module/</a> Fullscreen.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>18/18</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>3/3</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>18/18</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Fullscreen.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import Context from '../../../../src/js/base/Context'; import Fullscreen from '../../../../src/js/base/module/Fullscreen'; var expect = chai.expect; describe('Fullscreen', () => { var fullscreen, context; beforeEach(() => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, { }, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); context = new Context($('<div><p>hello</p></div>'), options); fullscreen = new Fullscreen(context); }); it('should toggle fullscreen mode', () => { expect(fullscreen.isFullscreen()).to.be.false; fullscreen.toggle(); expect(fullscreen.isFullscreen()).to.be.true; fullscreen.toggle(); expect(fullscreen.isFullscreen()).to.be.false; }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\k����Zcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Codeview.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/module/Codeview.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/base/module/</a> Codeview.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>19/19</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>3/3</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>19/19</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Codeview.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import '../../../../src/js/bs3/settings'; import $ from 'jquery'; import chai from 'chai'; import Context from '../../../../src/js/base/Context'; import Codeview from '../../../../src/js/base/module/Codeview'; var expect = chai.expect; describe('Codeview', () => { var codeview, context; beforeEach(() => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, { }, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); context = new Context($('<div><p>hello</p></div>'), options); codeview = new Codeview(context); }); it('should toggle codeview mode', () => { expect(codeview.isActivated()).to.be.false; codeview.toggle(); expect(codeview.isActivated()).to.be.true; codeview.toggle(); expect(codeview.isActivated()).to.be.false; }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��`00Ocoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/module/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> test/unit/base/module/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">99.6% </span> <span class="quiet">Statements</span> <span class='fraction'>247/248</span> </div> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Branches</span> <span class='fraction'>5/10</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>56/56</span> </div> <div class='fl pad1y space-right2'> <span class="strong">99.6% </span> <span class="quiet">Lines</span> <span class='fraction'>247/248</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="Codeview.spec.js"><a href="Codeview.spec.js.html">Codeview.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="19" class="abs high">19/19</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="3" class="abs high">3/3</td> <td data-value="100" class="pct high">100%</td> <td data-value="19" class="abs high">19/19</td> </tr> <tr> <td class="file high" data-value="Editor.spec.js"><a href="Editor.spec.js.html">Editor.spec.js</a></td> <td data-value="99.53" class="pic high"><div class="chart"><div class="cover-fill" style="width: 99%;"></div><div class="cover-empty" style="width:1%;"></div></div></td> <td data-value="99.53" class="pct high">99.53%</td> <td data-value="211" class="abs high">210/211</td> <td data-value="50" class="pct medium">50%</td> <td data-value="10" class="abs medium">5/10</td> <td data-value="100" class="pct high">100%</td> <td data-value="50" class="abs high">50/50</td> <td data-value="99.53" class="pct high">99.53%</td> <td data-value="211" class="abs high">210/211</td> </tr> <tr> <td class="file high" data-value="Fullscreen.spec.js"><a href="Fullscreen.spec.js.html">Fullscreen.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="18" class="abs high">18/18</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="3" class="abs high">3/3</td> <td data-value="100" class="pct high">100%</td> <td data-value="18" class="abs high">18/18</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\�.���&�&Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/Context.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/Context.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> / <a href="index.html">test/unit/base/</a> Context.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>55/55</span> </div> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Branches</span> <span class='fraction'>1/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>8/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>54/54</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-yes">3×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Context.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import spies from 'chai-spies'; /* eslint-disable import/first */ import $ from 'jquery'; window.jQuery = $; import 'bootstrap'; import chaidom from '../../chaidom'; import env from '../../../src/js/base/core/env'; import Context from '../../../src/js/base/Context'; /* eslint-enable import/first */ var expect = chai.expect; chai.use(spies); chai.use(chaidom); describe('Context lifecycle', () => { it('should be initialized without calling callback', () => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); var spy = chai.spy(); var $note = $('<div><p>hello</p></div>'); $note.on('summernote.change', spy); var context = new Context($note, options); expect(spy).to.have.not.been.called(); // [workaround] // - IE8-11 can't create range in headless mode <span class="missing-if-branch" title="else path not taken" >E</span>if (!env.isMSIE) { context.invoke('insertText', 'hello'); expect(spy).to.have.been.called(); } }); it('should preserve user events handler after destroy', () => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); var spy = chai.spy(); var $note = $('<div><p>hello</p></div>'); $note.on('click', spy); var context = new Context($note, options); context.destroy(); $note.trigger('click'); expect(spy).to.have.been.called(); }); }); describe('Context', () => { var context; beforeEach(() => { var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); context = new Context($('<div><p>hello</p></div>'), options); }); it('should get or set contents with code', () => { expect(context.code()).to.equalsIgnoreCase('<p>hello</p>'); context.code('<p>hello2</p>'); expect(context.code()).to.equalsIgnoreCase('<p>hello2</p>'); }); it('should enable or disable editor', () => { expect(context.isDisabled()).to.be.false; context.disable(); expect(context.isDisabled()).to.be.true; context.enable(); expect(context.isDisabled()).to.be.false; }); it('should preserve disabled status after reset', () => { expect(context.isDisabled()).to.be.false; context.disable(); expect(context.isDisabled()).to.be.true; context.reset(); expect(context.isDisabled()).to.be.true; }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\��{{Hcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/base/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../index.html">all files</a> test/unit/base/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>55/55</span> </div> <div class='fl pad1y space-right2'> <span class="strong">50% </span> <span class="quiet">Branches</span> <span class='fraction'>1/2</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>8/8</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>54/54</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="Context.spec.js"><a href="Context.spec.js.html">Context.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="55" class="abs high">55/55</td> <td data-value="50" class="pct medium">50%</td> <td data-value="2" class="abs medium">1/2</td> <td data-value="100" class="pct high">100%</td> <td data-value="8" class="abs high">8/8</td> <td data-value="100" class="pct high">100%</td> <td data-value="54" class="abs high">54/54</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../sorter.js"></script> </body> </html> PKf[�\'tBEE[coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/VideoDialog.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/bs/module/VideoDialog.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/bs/module/</a> VideoDialog.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Statements</span> <span class='fraction'>28/28</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Branches</span> <span class='fraction'>0/0</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>6/6</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Lines</span> <span class='fraction'>28/28</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * VideoDialog.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import Context from '../../../../src/js/base/Context'; import VideoDialog from '../../../../src/js/base/module/VideoDialog'; var expect = chai.expect; describe('bs:module.VideoDialog', () => { function expectUrl(source, target) { var iframe = $video.createVideoNode(source); expect(iframe).to.not.equal(false); expect(iframe.tagName).to.equal('IFRAME'); expect(iframe.src).to.equal(target); } var context, $video; beforeEach(() => { var $note = $('<div></div>').appendTo('body'); var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); options.toolbar = [ ['video', ['video']] ]; context = new Context($note, options); context.initialize(); $video = new VideoDialog(context); }); describe('#createVideoNode', () => { it('should execute when insert other url', () => { expect($video.createVideoNode('http://www.google.com')).to.equal(false); expect($video.createVideoNode('http://www.youtube.com')).to.equal(false); expect($video.createVideoNode('http://www.facebook.com')).to.equal(false); }); it('should execute when insert v.qq.com', () => { expectUrl('http://v.qq.com/cover/6/640ewqy2v071ppd.html?vid=f0196y2b2cx', 'http://v.qq.com/iframe/player.html?vid=f0196y2b2cx&amp;auto=0'); expectUrl('http://v.qq.com/x/page/p0330y279lm.html', 'http://v.qq.com/iframe/player.html?vid=p0330y279lm&amp;auto=0'); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\*S�Y _ _Wcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/Buttons.spec.js.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/bs/module/Buttons.spec.js</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> / <a href="index.html">test/unit/bs/module/</a> Buttons.spec.js </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">99.24% </span> <span class="quiet">Statements</span> <span class='fraction'>130/131</span> </div> <div class='fl pad1y space-right2'> <span class="strong">80% </span> <span class="quiet">Branches</span> <span class='fraction'>4/5</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>38/38</span> </div> <div class='fl pad1y space-right2'> <span class="strong">99.24% </span> <span class="quiet">Lines</span> <span class='fraction'>130/131</span> </div> </div> </div> <div class='status-line high'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">18×</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1×</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/** * Buttons.spec.js * (c) 2015~ Summernote Team * summernote may be freely distributed under the MIT license./ */ import chai from 'chai'; import $ from 'jquery'; import env from '../../../../src/js/base/core/env'; import range from '../../../../src/js/base/core/range'; import Context from '../../../../src/js/base/Context'; const expect = chai.expect; const assert = chai.assert; describe('Buttons', () => { var context, $toolbar, $editable; beforeEach(function() { $('body').empty(); // important ! var $note = $('<div><p>hello</p></div>').appendTo('body'); var options = $.extend({}, $.summernote.options); options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]); options.toolbar = [ ['font1', ['style', 'clear']], ['font2', ['bold', 'underline', 'italic', 'superscript', 'subscript', 'strikethrough']], ['font3', ['fontname', 'fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['table', ['table']], ['insert', ['link', 'picture', 'video']], ['view', ['fullscreen', 'codeview', 'help']] ]; context = new Context($note, options); context.initialize(); $toolbar = context.layoutInfo.toolbar; $editable = context.layoutInfo.editable; // [workaround] // - Firefox need setTimeout for applying contents // - IE8~11 can't create range in headless mode <span class="missing-if-branch" title="if path not taken" >I</span>if (env.isFF || env.isMSIE || env.isEdge) { <span class="cstat-no" title="statement not covered" > this.skip();</span> } }); describe('bold button', () => { it('should execute bold command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-btn-bold').click(); expect($editable.html()).to.equalsIgnoreCase('<p><b>hello</b></p>'); }); }); describe('bold button state updated', () => { it('should look toggled immediately when clicked', () => { var $button = $toolbar.find('.note-btn-bold'); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isTrue($button.hasClass('active'), 'button is now active'); }); }); describe('italic button', () => { it('should execute italic command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-btn-italic').click(); expect($editable.html()).to.equalsIgnoreCase('<p><i>hello</i></p>'); }); }); describe('italic button state updated', () => { it('should look toggled immediately when clicked', () => { var $button = $toolbar.find('.note-btn-italic'); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isTrue($button.hasClass('active'), 'button is now active'); }); }); describe('underline button', () => { it('should execute underline command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-btn-underline').click(); expect($editable.html()).to.equalsIgnoreCase('<p><u>hello</u></p>'); }); }); describe('underline button state updated', () => { it('should look toggled immediately when clicked', () => { var $button = $toolbar.find('.note-btn-underline'); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isTrue($button.hasClass('active'), 'button is now active'); }); }); describe('superscript button', () => { it('should execute superscript command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-btn-superscript').click(); expect($editable.html()).to.equalsIgnoreCase('<p><sup>hello</sup></p>'); }); }); describe('superscript button state updated', () => { it('should look toggled immediately when clicked', () => { var $button = $toolbar.find('.note-btn-superscript'); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isTrue($button.hasClass('active'), 'button is now active'); }); }); describe('subscript button', () => { it('should execute subscript command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-btn-subscript').click(); expect($editable.html()).to.equalsIgnoreCase('<p><sub>hello</sub></p>'); }); }); describe('subscript button state updated', () => { it('should look toggled immediately when clicked', () => { var $button = $toolbar.find('.note-btn-subscript'); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isTrue($button.hasClass('active'), 'button is now active'); }); }); describe('strikethrough button', () => { it('should execute strikethrough command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-btn-strikethrough').click(); expect($editable.html()).to.equalsIgnoreCase('<p><strike>hello</strike></p>'); }); }); describe('strikethrough button state updated', () => { it('should look toggled immediately when clicked', () => { var $button = $toolbar.find('.note-btn-strikethrough'); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isTrue($button.hasClass('active'), 'button is now active'); }); }); describe('clear button state not updated when clicked', () => { it('should never look toggled when clicked', () => { var $button = $toolbar.find('i.note-icon-eraser').parent(); assert.isTrue($button.length === 1); assert.isFalse($button.hasClass('active')); $button.click(); assert.isFalse($button.hasClass('active'), 'button is now active'); }); }); describe('font family button', () => { it('should select the right font family name in the dropdown list when it is clicked', () => { // XXX: skip assertions for passing test on travis. // var $li = $toolbar.find('.dropdown-fontname li>a[data-value="Comic Sans MS"]'); // var $span = $toolbar.find('span.note-current-fontname'); // assert.isTrue($li.length === 1); // assert.isTrue($span.text() !== 'Comic Sans MS'); // $li.click(); // assert.isTrue($span.text() === 'Comic Sans MS'); }); }); describe('recent color button', () => { it('should execute color command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); $toolbar.find('.note-current-color-button').click(); var $span = $editable.find('span'); expect($span).to.be.equalsStyle('#FFFF00', 'background-color'); }); }); describe('fore color button', () => { it('should execute fore color command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); var $button = $toolbar.find('[data-event=foreColor]').eq(10); $button.click(); var $span = $editable.find('span'); expect($span).to.be.equalsStyle('#FF9C00', 'color'); }); }); describe('back color button', () => { it('should execute back color command when it is clicked', () => { range.createFromNode($editable.find('p')[0]).normalize().select(); var $button = $toolbar.find('[data-event=backColor]').eq(10); $button.click(); var $span = $editable.find('span'); expect($span).to.be.equalsStyle($button.data('value'), 'background-color'); }); }); describe('font size button with empty content', () => { it('should update font size button value when changing font size', () => { var $fontSizeDropdown = $toolbar.find('.dropdown-fontsize'); var $fontSizeButton = $fontSizeDropdown.siblings('button'); var $fontSizeList = $fontSizeDropdown.find('a'); var selectedSize = '36'; // click on dropdown button $fontSizeButton.trigger('click'); // select a font size $fontSizeList.filter('[data-value="' + selectedSize + '"]').trigger('click'); expect($fontSizeButton.text().trim()).to.equal(selectedSize); }); }); }); </pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\<�\mmMcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for test/unit/bs/module/</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../../../prettify.css" /> <link rel="stylesheet" href="../../../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../../../index.html">all files</a> test/unit/bs/module/ </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">99.37% </span> <span class="quiet">Statements</span> <span class='fraction'>158/159</span> </div> <div class='fl pad1y space-right2'> <span class="strong">80% </span> <span class="quiet">Branches</span> <span class='fraction'>4/5</span> </div> <div class='fl pad1y space-right2'> <span class="strong">100% </span> <span class="quiet">Functions</span> <span class='fraction'>44/44</span> </div> <div class='fl pad1y space-right2'> <span class="strong">99.37% </span> <span class="quiet">Lines</span> <span class='fraction'>158/159</span> </div> </div> </div> <div class='status-line high'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file high" data-value="Buttons.spec.js"><a href="Buttons.spec.js.html">Buttons.spec.js</a></td> <td data-value="99.24" class="pic high"><div class="chart"><div class="cover-fill" style="width: 99%;"></div><div class="cover-empty" style="width:1%;"></div></div></td> <td data-value="99.24" class="pct high">99.24%</td> <td data-value="131" class="abs high">130/131</td> <td data-value="80" class="pct high">80%</td> <td data-value="5" class="abs high">4/5</td> <td data-value="100" class="pct high">100%</td> <td data-value="38" class="abs high">38/38</td> <td data-value="99.24" class="pct high">99.24%</td> <td data-value="131" class="abs high">130/131</td> </tr> <tr> <td class="file high" data-value="VideoDialog.spec.js"><a href="VideoDialog.spec.js.html">VideoDialog.spec.js</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="28" class="abs high">28/28</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="6" class="abs high">6/6</td> <td data-value="100" class="pct high">100%</td> <td data-value="28" class="abs high">28/28</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="../../../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../../../sorter.js"></script> </body> </html> PKf[�\��X�^2^29coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/index.htmlnu�[���<!doctype html> <html lang="en"> <head> <title>Code coverage report for All files</title> <meta charset="utf-8" /> <link rel="stylesheet" href="prettify.css" /> <link rel="stylesheet" href="base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> / </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">76.37% </span> <span class="quiet">Statements</span> <span class='fraction'>4037/5286</span> </div> <div class='fl pad1y space-right2'> <span class="strong">54.01% </span> <span class="quiet">Branches</span> <span class='fraction'>902/1670</span> </div> <div class='fl pad1y space-right2'> <span class="strong">76.75% </span> <span class="quiet">Functions</span> <span class='fraction'>842/1097</span> </div> <div class='fl pad1y space-right2'> <span class="strong">76.47% </span> <span class="quiet">Lines</span> <span class='fraction'>4021/5258</span> </div> </div> </div> <div class='status-line medium'></div> <div class="pad1"> <table class="coverage-summary"> <thead> <tr> <th data-col="file" data-fmt="html" data-html="true" class="file">File</th> <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th> <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> </tr> </thead> <tbody><tr> <td class="file low" data-value="src/js/"><a href="src/js/index.html">src/js/</a></td> <td data-value="19.23" class="pic low"><div class="chart"><div class="cover-fill" style="width: 19%;"></div><div class="cover-empty" style="width:81%;"></div></div></td> <td data-value="19.23" class="pct low">19.23%</td> <td data-value="26" class="abs low">5/26</td> <td data-value="0" class="pct low">0%</td> <td data-value="12" class="abs low">0/12</td> <td data-value="0" class="pct low">0%</td> <td data-value="2" class="abs low">0/2</td> <td data-value="19.23" class="pct low">19.23%</td> <td data-value="26" class="abs low">5/26</td> </tr> <tr> <td class="file high" data-value="src/js/base/"><a href="src/js/base/index.html">src/js/base/</a></td> <td data-value="95.78" class="pic high"><div class="chart"><div class="cover-fill" style="width: 95%;"></div><div class="cover-empty" style="width:5%;"></div></div></td> <td data-value="95.78" class="pct high">95.78%</td> <td data-value="166" class="abs high">159/166</td> <td data-value="87.1" class="pct high">87.1%</td> <td data-value="93" class="abs high">81/93</td> <td data-value="97.06" class="pct high">97.06%</td> <td data-value="34" class="abs high">33/34</td> <td data-value="95.78" class="pct high">95.78%</td> <td data-value="166" class="abs high">159/166</td> </tr> <tr> <td class="file high" data-value="src/js/base/core/"><a href="src/js/base/core/index.html">src/js/base/core/</a></td> <td data-value="82.09" class="pic high"><div class="chart"><div class="cover-fill" style="width: 82%;"></div><div class="cover-empty" style="width:18%;"></div></div></td> <td data-value="82.09" class="pct high">82.09%</td> <td data-value="860" class="abs high">706/860</td> <td data-value="75.62" class="pct medium">75.62%</td> <td data-value="484" class="abs medium">366/484</td> <td data-value="88.1" class="pct high">88.1%</td> <td data-value="168" class="abs high">148/168</td> <td data-value="82.27" class="pct high">82.27%</td> <td data-value="846" class="abs high">696/846</td> </tr> <tr> <td class="file high" data-value="src/js/base/editing/"><a href="src/js/base/editing/index.html">src/js/base/editing/</a></td> <td data-value="88.13" class="pic high"><div class="chart"><div class="cover-fill" style="width: 88%;"></div><div class="cover-empty" style="width:12%;"></div></div></td> <td data-value="88.13" class="pct high">88.13%</td> <td data-value="514" class="abs high">453/514</td> <td data-value="76.09" class="pct medium">76.09%</td> <td data-value="276" class="abs medium">210/276</td> <td data-value="90" class="pct high">90%</td> <td data-value="70" class="abs high">63/70</td> <td data-value="88.8" class="pct high">88.8%</td> <td data-value="509" class="abs high">452/509</td> </tr> <tr> <td class="file medium" data-value="src/js/base/module/"><a href="src/js/base/module/index.html">src/js/base/module/</a></td> <td data-value="66.01" class="pic medium"><div class="chart"><div class="cover-fill" style="width: 66%;"></div><div class="cover-empty" style="width:34%;"></div></div></td> <td data-value="66.01" class="pct medium">66.01%</td> <td data-value="1580" class="abs medium">1043/1580</td> <td data-value="38.15" class="pct low">38.15%</td> <td data-value="540" class="abs low">206/540</td> <td data-value="63.85" class="pct medium">63.85%</td> <td data-value="379" class="abs medium">242/379</td> <td data-value="66.16" class="pct medium">66.16%</td> <td data-value="1575" class="abs medium">1042/1575</td> </tr> <tr> <td class="file high" data-value="src/js/bs3/"><a href="src/js/bs3/index.html">src/js/bs3/</a></td> <td data-value="95.15" class="pic high"><div class="chart"><div class="cover-fill" style="width: 95%;"></div><div class="cover-empty" style="width:5%;"></div></div></td> <td data-value="95.15" class="pct high">95.15%</td> <td data-value="103" class="abs high">98/103</td> <td data-value="54" class="pct medium">54%</td> <td data-value="50" class="abs medium">27/50</td> <td data-value="85" class="pct high">85%</td> <td data-value="20" class="abs high">17/20</td> <td data-value="95.15" class="pct high">95.15%</td> <td data-value="103" class="abs high">98/103</td> </tr> <tr> <td class="file low" data-value="src/js/bs4/"><a href="src/js/bs4/index.html">src/js/bs4/</a></td> <td data-value="0" class="pic low"><div class="chart"><div class="cover-fill" style="width: 0%;"></div><div class="cover-empty" style="width:100%;"></div></div></td> <td data-value="0" class="pct low">0%</td> <td data-value="105" class="abs low">0/105</td> <td data-value="0" class="pct low">0%</td> <td data-value="50" class="abs low">0/50</td> <td data-value="0" class="pct low">0%</td> <td data-value="20" class="abs low">0/20</td> <td data-value="0" class="pct low">0%</td> <td data-value="105" class="abs low">0/105</td> </tr> <tr> <td class="file low" data-value="src/js/lite/"><a href="src/js/lite/index.html">src/js/lite/</a></td> <td data-value="0" class="pic low"><div class="chart"><div class="cover-fill" style="width: 0%;"></div><div class="cover-empty" style="width:100%;"></div></div></td> <td data-value="0" class="pct low">0%</td> <td data-value="204" class="abs low">0/204</td> <td data-value="0" class="pct low">0%</td> <td data-value="91" class="abs low">0/91</td> <td data-value="0" class="pct low">0%</td> <td data-value="40" class="abs low">0/40</td> <td data-value="0" class="pct low">0%</td> <td data-value="204" class="abs low">0/204</td> </tr> <tr> <td class="file low" data-value="src/js/lite/ui/"><a href="src/js/lite/ui/index.html">src/js/lite/ui/</a></td> <td data-value="2.55" class="pic low"><div class="chart"><div class="cover-fill" style="width: 2%;"></div><div class="cover-empty" style="width:98%;"></div></div></td> <td data-value="2.55" class="pct low">2.55%</td> <td data-value="157" class="abs low">4/157</td> <td data-value="0" class="pct low">0%</td> <td data-value="55" class="abs low">0/55</td> <td data-value="0" class="pct low">0%</td> <td data-value="25" class="abs low">0/25</td> <td data-value="2.55" class="pct low">2.55%</td> <td data-value="157" class="abs low">4/157</td> </tr> <tr> <td class="file high" data-value="test/unit/base/"><a href="test/unit/base/index.html">test/unit/base/</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="55" class="abs high">55/55</td> <td data-value="50" class="pct medium">50%</td> <td data-value="2" class="abs medium">1/2</td> <td data-value="100" class="pct high">100%</td> <td data-value="8" class="abs high">8/8</td> <td data-value="100" class="pct high">100%</td> <td data-value="54" class="abs high">54/54</td> </tr> <tr> <td class="file high" data-value="test/unit/base/core/"><a href="test/unit/base/core/index.html">test/unit/base/core/</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="616" class="abs high">616/616</td> <td data-value="100" class="pct high">100%</td> <td data-value="2" class="abs high">2/2</td> <td data-value="100" class="pct high">100%</td> <td data-value="193" class="abs high">193/193</td> <td data-value="100" class="pct high">100%</td> <td data-value="613" class="abs high">613/613</td> </tr> <tr> <td class="file high" data-value="test/unit/base/editing/"><a href="test/unit/base/editing/index.html">test/unit/base/editing/</a></td> <td data-value="100" class="pic high"><div class="chart"><div class="cover-fill cover-full" style="width: 100%;"></div><div class="cover-empty" style="width:0%;"></div></div></td> <td data-value="100" class="pct high">100%</td> <td data-value="493" class="abs high">493/493</td> <td data-value="100" class="pct high">100%</td> <td data-value="0" class="abs high">0/0</td> <td data-value="100" class="pct high">100%</td> <td data-value="38" class="abs high">38/38</td> <td data-value="100" class="pct high">100%</td> <td data-value="493" class="abs high">493/493</td> </tr> <tr> <td class="file high" data-value="test/unit/base/module/"><a href="test/unit/base/module/index.html">test/unit/base/module/</a></td> <td data-value="99.6" class="pic high"><div class="chart"><div class="cover-fill" style="width: 99%;"></div><div class="cover-empty" style="width:1%;"></div></div></td> <td data-value="99.6" class="pct high">99.6%</td> <td data-value="248" class="abs high">247/248</td> <td data-value="50" class="pct medium">50%</td> <td data-value="10" class="abs medium">5/10</td> <td data-value="100" class="pct high">100%</td> <td data-value="56" class="abs high">56/56</td> <td data-value="99.6" class="pct high">99.6%</td> <td data-value="248" class="abs high">247/248</td> </tr> <tr> <td class="file high" data-value="test/unit/bs/module/"><a href="test/unit/bs/module/index.html">test/unit/bs/module/</a></td> <td data-value="99.37" class="pic high"><div class="chart"><div class="cover-fill" style="width: 99%;"></div><div class="cover-empty" style="width:1%;"></div></div></td> <td data-value="99.37" class="pct high">99.37%</td> <td data-value="159" class="abs high">158/159</td> <td data-value="80" class="pct high">80%</td> <td data-value="5" class="abs high">4/5</td> <td data-value="100" class="pct high">100%</td> <td data-value="44" class="abs high">44/44</td> <td data-value="99.37" class="pct high">99.37%</td> <td data-value="159" class="abs high">158/159</td> </tr> </tbody> </table> </div><div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 20 2018 09:36:40 GMT+0900 (KST) </div> </div> <script src="prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="sorter.js"></script> </body> </html> PKf[�\U�5���;coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.cssnu�[���.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} PKf[�\Ē���7coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/base.cssnu�[���body, html { margin:0; padding: 0; height: 100%; } body { font-family: Helvetica Neue, Helvetica, Arial; font-size: 14px; color:#333; } .small { font-size: 12px; } *, *:after, *:before { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; } h1 { font-size: 20px; margin: 0;} h2 { font-size: 14px; } pre { font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; margin: 0; padding: 0; -moz-tab-size: 2; -o-tab-size: 2; tab-size: 2; } a { color:#0074D9; text-decoration:none; } a:hover { text-decoration:underline; } .strong { font-weight: bold; } .space-top1 { padding: 10px 0 0 0; } .pad2y { padding: 20px 0; } .pad1y { padding: 10px 0; } .pad2x { padding: 0 20px; } .pad2 { padding: 20px; } .pad1 { padding: 10px; } .space-left2 { padding-left:55px; } .space-right2 { padding-right:20px; } .center { text-align:center; } .clearfix { display:block; } .clearfix:after { content:''; display:block; height:0; clear:both; visibility:hidden; } .fl { float: left; } @media only screen and (max-width:640px) { .col3 { width:100%; max-width:100%; } .hide-mobile { display:none!important; } } .quiet { color: #7f7f7f; color: rgba(0,0,0,0.5); } .quiet a { opacity: 0.7; } .fraction { font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 10px; color: #555; background: #E8E8E8; padding: 4px 5px; border-radius: 3px; vertical-align: middle; } div.path a:link, div.path a:visited { color: #333; } table.coverage { border-collapse: collapse; margin: 10px 0 0 0; padding: 0; } table.coverage td { margin: 0; padding: 0; vertical-align: top; } table.coverage td.line-count { text-align: right; padding: 0 5px 0 20px; } table.coverage td.line-coverage { text-align: right; padding-right: 10px; min-width:20px; } table.coverage td span.cline-any { display: inline-block; padding: 0 5px; width: 100%; } .missing-if-branch { display: inline-block; margin-right: 5px; border-radius: 3px; position: relative; padding: 0 4px; background: #333; color: yellow; } .skip-if-branch { display: none; margin-right: 10px; position: relative; padding: 0 4px; background: #ccc; color: white; } .missing-if-branch .typ, .skip-if-branch .typ { color: inherit !important; } .coverage-summary { border-collapse: collapse; width: 100%; } .coverage-summary tr { border-bottom: 1px solid #bbb; } .keyline-all { border: 1px solid #ddd; } .coverage-summary td, .coverage-summary th { padding: 10px; } .coverage-summary tbody { border: 1px solid #bbb; } .coverage-summary td { border-right: 1px solid #bbb; } .coverage-summary td:last-child { border-right: none; } .coverage-summary th { text-align: left; font-weight: normal; white-space: nowrap; } .coverage-summary th.file { border-right: none !important; } .coverage-summary th.pct { } .coverage-summary th.pic, .coverage-summary th.abs, .coverage-summary td.pct, .coverage-summary td.abs { text-align: right; } .coverage-summary td.file { white-space: nowrap; } .coverage-summary td.pic { min-width: 120px !important; } .coverage-summary tfoot td { } .coverage-summary .sorter { height: 10px; width: 7px; display: inline-block; margin-left: 0.5em; background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; } .coverage-summary .sorted .sorter { background-position: 0 -20px; } .coverage-summary .sorted-desc .sorter { background-position: 0 -10px; } .status-line { height: 10px; } /* dark red */ .red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } .low .chart { border:1px solid #C21F39 } /* medium red */ .cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } /* light red */ .low, .cline-no { background:#FCE1E5 } /* light green */ .high, .cline-yes { background:rgb(230,245,208) } /* medium green */ .cstat-yes { background:rgb(161,215,106) } /* dark green */ .status-line.high, .high .cover-fill { background:rgb(77,146,33) } .high .chart { border:1px solid rgb(77,146,33) } /* dark yellow (gold) */ .medium .chart { border:1px solid #f9cd0b; } .status-line.medium, .medium .cover-fill { background: #f9cd0b; } /* light yellow */ .medium { background: #fff4c2; } /* light gray */ span.cline-neutral { background: #eaeaea; } .cbranch-no { background: yellow !important; color: #111; } .cstat-skip { background: #ddd; color: #111; } .fstat-skip { background: #ddd; color: #111 !important; } .cbranch-skip { background: #ddd !important; color: #111; } .cover-fill, .cover-empty { display:inline-block; height: 12px; } .chart { line-height: 0; } .cover-empty { background: white; } .cover-full { border-right: none !important; } pre.prettyprint { border: none !important; padding: 0 !important; margin: 0 !important; } .com { color: #999 !important; } .ignore-none { color: #999; font-weight: normal; } .wrapper { min-height: 100%; height: auto !important; height: 100%; margin: 0 auto -48px; } .footer, .push { height: 48px; } PKf[�\> �=�D�D:coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.jsnu�[���window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); PKf[�\��zS��Dcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sort-arrow-sprite.pngnu�[����PNG IHDR�F�3tEXtSoftwareAdobe ImageReadyq�e<sIDATxڼRA� ����D���e[ � �HfFX� g�f���3�DdF�w�-˘�� � n�g�M+OVں�=�""/�ĥ'Y���?H�hV� �@��p��Y�8Bwc,�IEND�B`�PKf[�\4 ����8coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sorter.jsnu�[���var addSorting = (function () { "use strict"; var cols, currentSort = { index: 0, desc: false }; // returns the summary table element function getTable() { return document.querySelector('.coverage-summary'); } // returns the thead element of the summary table function getTableHeader() { return getTable().querySelector('thead tr'); } // returns the tbody element of the summary table function getTableBody() { return getTable().querySelector('tbody'); } // returns the th element for nth column function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; } // loads all columns function loadColumns() { var colNodes = getTableHeader().querySelectorAll('th'), colNode, cols = [], col, i; for (i = 0; i < colNodes.length; i += 1) { colNode = colNodes[i]; col = { key: colNode.getAttribute('data-col'), sortable: !colNode.getAttribute('data-nosort'), type: colNode.getAttribute('data-type') || 'string' }; cols.push(col); if (col.sortable) { col.defaultDescSort = col.type === 'number'; colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>'; } } return cols; } // attaches a data attribute to every tr element with an object // of data values keyed by column name function loadRowData(tableRow) { var tableCols = tableRow.querySelectorAll('td'), colNode, col, data = {}, i, val; for (i = 0; i < tableCols.length; i += 1) { colNode = tableCols[i]; col = cols[i]; val = colNode.getAttribute('data-value'); if (col.type === 'number') { val = Number(val); } data[col.key] = val; } return data; } // loads all row data function loadData() { var rows = getTableBody().querySelectorAll('tr'), i; for (i = 0; i < rows.length; i += 1) { rows[i].data = loadRowData(rows[i]); } } // sorts the table using the data for the ith column function sortByIndex(index, desc) { var key = cols[index].key, sorter = function (a, b) { a = a.data[key]; b = b.data[key]; return a < b ? -1 : a > b ? 1 : 0; }, finalSorter = sorter, tableBody = document.querySelector('.coverage-summary tbody'), rowNodes = tableBody.querySelectorAll('tr'), rows = [], i; if (desc) { finalSorter = function (a, b) { return -1 * sorter(a, b); }; } for (i = 0; i < rowNodes.length; i += 1) { rows.push(rowNodes[i]); tableBody.removeChild(rowNodes[i]); } rows.sort(finalSorter); for (i = 0; i < rows.length; i += 1) { tableBody.appendChild(rows[i]); } } // removes sort indicators for current column being sorted function removeSortIndicators() { var col = getNthColumn(currentSort.index), cls = col.className; cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); col.className = cls; } // adds sort indicators for current column being sorted function addSortIndicators() { getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; } // adds event listeners for all sorter widgets function enableUI() { var i, el, ithSorter = function ithSorter(i) { var col = cols[i]; return function () { var desc = col.defaultDescSort; if (currentSort.index === i) { desc = !currentSort.desc; } sortByIndex(i, desc); removeSortIndicators(); currentSort.index = i; currentSort.desc = desc; addSortIndicators(); }; }; for (i =0 ; i < cols.length; i += 1) { if (cols[i].sortable) { // add the click event handler on the th so users // dont have to click on those tiny arrows el = getNthColumn(i).querySelector('.sorter').parentElement; if (el.addEventListener) { el.addEventListener('click', ithSorter(i)); } else { el.attachEvent('onclick', ithSorter(i)); } } } } // adds sorting functionality to the UI return function () { if (!getTable()) { return; } cols = loadColumns(); loadData(cols); addSortIndicators(); enableUI(); }; })(); window.addEventListener('load', addSorting); PKf[�\���/��PULL_REQUEST_TEMPLATE.mdnu�[���#### What does this PR do? - awesome stuff - really cool feature - refactor X #### Where should the reviewer start? - start on the src/summernote.js #### How should this be manually tested? - click here and here #### Any background context you want to provide? - the gem needed to be updated... #### What are the relevant tickets? #### Screenshot (if for frontend) ### Checklist - [ ] added relevant tests - [ ] didn't break anything - [ ] ... PKe[�\��[ll karma.conf.jsnu�[���PKe[�\�J���src/icons/subscript.svgnu�[���PKe[�\D�?�SS src/icons/minus.svgnu�[���PKe[�\ȴ�s�src/icons/circle.svgnu�[���PKe[�\a�q����src/icons/italic.svgnu�[���PKe[�\��AŶ�(src/icons/code.svgnu�[���PKe[�\������ src/icons/text-height.svgnu�[���PKe[�\�g�`��*src/icons/arrows-alt.svgnu�[���PKe[�\`�c�_src/icons/align-outdent.svgnu�[���PKe[�\J#A�cc)"src/icons/close.svgnu�[���PKe[�\��S���&src/icons/menu-check.svgnu�[���PKe[�\ \Y�HH�)src/icons/trash.svgnu�[���PKe[�\�#1,(/src/icons/question.svgnu�[���PKe[�\� >���o2src/icons/undo.svgnu�[���PKe[�\��ff|4src/icons/col-remove.svgnu�[���PKe[�\t��� � *<src/icons/chain-broken.svgnu�[���PKe[�\'�¥<<HFsrc/icons/link.svgnu�[���PKe[�\ ���Lsrc/icons/video.svgnu�[���PKe[�\��&?� � Psrc/icons/summernote.svgnu�[���PKe[�\!#gJJ�Zsrc/icons/align-center.svgnu�[���PKe[�\G�v�66�]src/icons/font.svgnu�[���PKe[�\/rr�asrc/icons/magic.svgnu�[���PKe[�\�m�B���dsrc/icons/redo.svgnu�[���PKe[�\�B�AA�fsrc/icons/arrows-h.svgnu�[���PKe[�\@���-hsrc/icons/picture.svgnu�[���PKe[�\Z��4))�msrc/icons/special-character.svgnu�[���PKe[�\�����mssrc/icons/arrow-circle-left.svgnu�[���PKe[�\s� ���usrc/icons/pencil.svgnu�[���PKe[�\�� NN�xsrc/icons/row-below.svgnu�[���PKe[�\�$���&�src/icons/bold.svgnu�[���PKe[�\��TKKN�src/icons/row-above.svgnu�[���PKe[�\�Hl���src/icons/arrow-circle-down.svgnu�[���PKe[�\��r���src/icons/table.svgnu�[���PKe[�\vzyJ||-�src/icons/align-indent.svgnu�[���PKe[�\�q ��� �src/icons/arrow-circle-right.svgnu�[���PKe[�\�x6�KK�src/icons/align-justify.svgnu�[���PKe[�\�"�� � ��src/icons/strikethrough.svgnu�[���PKe[�\k��CC�src/icons/arrows-v.svgnu�[���PKe[�\TG���r�src/icons/align-left.svgnu�[���PKe[�\/�RR��src/icons/dist/summernote.lessnu�[���PKe[�\@�h��.�.%�src/icons/dist/summernote.htmlnu�[���PKe[�\SԫA�"�""J�src/icons/dist/font/summernote.ttfnu�[���PKe[�\��D�z#z#"\src/icons/dist/font/summernote.eotnu�[���PKe[�\�`ƼL=L=#(;src/icons/dist/font/summernote.woffnu�[���PKe[�\#õ����xsrc/icons/col-after.svgnu�[���PKe[�\ 3�;;Ɉsrc/icons/square.svgnu�[���PKe[�\���PPH�src/icons/eraser.svgnu�[���PKe[�\A����src/icons/arrow-circle-up.svgnu�[���PKe[�\ �}�RR��src/icons/col-before.svgnu�[���PKe[�\.ȏ�JJ��src/icons/align-right.svgnu�[���PKe[�\!�&�src/icons/superscript.svgnu�[���PKe[�\��VV#��src/icons/templates/summernote.jsonnu�[���PKe[�\�I�~� � "-�src/icons/templates/summernote.cssnu�[���PKe[�\9�i��q�src/icons/caret.svgnu�[���PKe[�\ ��VV��src/icons/orderedlist.svgnu�[���PKe[�\�;R0��P�src/icons/underline.svgnu�[���PKe[�\<\�$$1�src/icons/frame.svgnu�[���PKe[�\�|__��src/icons/row-remove.svgnu�[���PKe[�\6�GG?�src/icons/unorderedlist.svgnu�[���PKe[�\;:����src/icons/align.svgnu�[���PKe[�\"z^=` ` ��src/js/base/editing/Typing.jsnu�[���PKe[�\� xPLPLI�src/js/base/editing/Table.jsnu�[���PKe[�\�z빼��)src/js/base/editing/Bullet.jsnu�[���PKe[�\?�����?src/js/base/editing/Style.jsnu�[���PKe[�\:ƣ-� � �Tsrc/js/base/editing/History.jsnu�[���PKe[�\"�2_src/js/base/Context.jsnu�[���PKe[�\$1̝��hvsrc/js/base/core/key.jsnu�[���PKe[�\�Ç�S�Sy|src/js/base/core/range.jsnu�[���PKe[�\�^~�..��src/js/base/core/async.jsnu�[���PKe[�\8W�B��3�src/js/base/core/env.jsnu�[���PKe[�\ஸ���src/js/base/core/func.jsnu�[���PKe[�\���LL��src/js/base/core/lists.jsnu�[���PKe[�\��O�^�^��src/js/base/core/dom.jsnu�[���PKe[�\����QQ�]src/js/base/renderer.jsnu�[���PKe[�\-�a�� !dsrc/js/base/module/Fullscreen.jsnu�[���PKe[�\�b����!�isrc/js/base/module/Placeholder.jsnu�[���PKe[�\�G.�bb"nsrc/js/base/module/TablePopover.jsnu�[���PKe[�\�;��!�tsrc/js/base/module/ImageDialog.jsnu�[���PKe[�\9)^~��"�src/js/base/module/ImagePopover.jsnu�[���PKe[�\W���OO!b�src/js/base/module/LinkPopover.jsnu�[���PKe[�\�T �`v`v�src/js/base/module/Buttons.jsnu�[���PKe[�\ >Www� src/js/base/module/AutoSync.jsnu�[���PKe[�\m��h��tsrc/js/base/module/Handle.jsnu�[���PKe[�\ye��q[q[Xsrc/js/base/module/Editor.jsnu�[���PKe[�\䧉=��!ysrc/js/base/module/VideoDialog.jsnu�[���PKe[�\0�V0���src/js/base/module/Toolbar.jsnu�[���PKe[�\��"PP�src/js/base/module/Dropzone.jsnu�[���PKe[�\b6,�pp!��src/js/base/module/HintPopover.jsnu�[���PKe[�\�`���� j�src/js/base/module/HelpDialog.jsnu�[���PKe[�\۩��!!��src/js/base/module/Clipboard.jsnu�[���PKe[�\U�E!``(�src/js/base/module/Codeview.jsnu�[���PKe[�\[G@R ��src/js/base/module/AirPopover.jsnu�[���PKe[�\ ���C�src/js/base/module/AutoLink.jsnu�[���PKe[�\ Q�����src/js/base/module/Statusbar.jsnu�[���PKe[�\L��ff ��src/js/base/module/LinkDialog.jsnu�[���PKe[�\$����psrc/js/base/summernote-en-US.jsnu�[���PKe[�\��P��\"src/js/summernote.jsnu�[���PKe[�\�i��X(src/js/lite/ui/PopoverUI.jsnu�[���PKe[�\3�o���3src/js/lite/ui/ModalUI.jsnu�[���PKe[�\<N7D� � �7src/js/lite/ui/TooltipUI.jsnu�[���PKe[�\�?T5dd�Bsrc/js/lite/ui/DropdownUI.jsnu�[���PKe[�\R�%((yIsrc/js/lite/settings.jsnu�[���PKe[�\m� LNN�qsrc/js/lite/ui.jsnu�[���PKe[�\K��@(@(%�src/js/bs3/settings.jsnu�[���PKe[�\Dѯj� � ��src/js/bs3/ui.jsnu�[���PKe[�\CK)V�(�(� src/js/bs4/settings.jsnu�[���PKe[�\�#Zj!j!s2src/js/bs4/ui.jsnu�[���PKe[�\!-b�?.?.Tsrc/less/summernote.scssnu�[���PKe[�\�s�s././��src/less/summernote.lessnu�[���PKe[�\Dp�+���src/less/elements.lessnu�[���PKe[�\��q0�0�05�src/less/summernote-lite.lessnu�[���PKe[�\~�W^^_�src/less/lite-ui/tooltip.lessnu�[���PKf[�\�=�9�� src/less/lite-ui/dropdown.lessnu�[���PKf[�\~j����src/less/lite-ui/form.lessnu�[���PKf[�\I�| @@-src/less/lite-ui/modal.lessnu�[���PKf[�\�j�pp�src/less/lite-ui/btn-group.lessnu�[���PKf[�\�`ԝ��$wsrc/less/lite-ui/mixins/buttons.lessnu�[���PKf[�\�c��MM�src/less/lite-ui/toolbar.lessnu�[���PKf[�\��ӷ88,src/less/lite-ui/popover.lessnu�[���PKf[�\�J�PP�"src/less/lite-ui/all.lessnu�[���PKf[�\.����J$src/less/lite-ui/buttons.lessnu�[���PKf[�\�e�NNl,src/less/lite-ui/common.lessnu�[���PKf[�\(Mj�2 2 .src/less/lite-ui/variables.lessnu�[���PKf[�\���7src/less/lite-ui/mixins.lessnu�[���PKf[�\ ��;=/=/�7src/less/summernote-bs4.lessnu�[���PKf[�\*���B.B.zgsrc/less/summernote-bs4.scssnu�[���PKf[�\4���src/less/elements.scssnu�[���PKf[�\�ڭCONTRIBUTING.mdnu�[���PKf[�\~�a*ZZ.�package.jsonnu�[���PKf[�\�1P ��.editorconfignu�[���PKf[�\?�Z�||�LICENSEnu�[���PKf[�\��Z��� ��.eslintrcnu�[���PKf[�\� �c����ISSUE_TEMPLATE.mdnu�[���PKf[�\�u�#�� r�index.htmlnu�[���PKf[�\�l���D�CODE_OF_CONDUCT.mdnu�[���PKf[�\�%�ssK�dist/summernote-lite.jsnu�[���PKf[�\ ]Q�Q�Q�Udist/summernote-lite.js.mapnu�[���PKf[�\���]�]�y�dist/summernote-bs4.min.jsnu�[���PKf[�\�Í)')' wdist/summernote-bs4.jsnu�[���PKf[�\�Ҝ�%�%��dist/summernote.jsnu�[���PKf[�\�~�EE��dist/summernote-bs4.cssnu�[���PKf[�\�xf�W�W� dist/summernote.min.jsnu�[���PKf[�\*�O�������dist/summernote-bs4.js.mapnu�[���PKf[�\SԫA�"�"��&dist/font/summernote.ttfnu�[���PKf[�\��D�z#z#��&dist/font/summernote.eotnu�[���PKf[�\�`ƼL=L=��&dist/font/summernote.woffnu�[���PKf[�\R^s�#k#k.'dist/summernote-lite.cssnu�[���PKf[�\�P�WMEME��'dist/summernote.cssnu�[���PKf[�\9���O�O�'dist/summernote-0.8.10-dist.zipnu�[���PKf[�\��=h�h�7/.dist/summernote.js.mapnu�[���PKf[�\.��p� � !�4dist/lang/summernote-cs-CZ.min.jsnu�[���PKf[�\����5dist/lang/summernote-ja-JP.jsnu�[���PKf[�\�j�� � '� 5dist/lang/summernote-sr-RS-Latin.min.jsnu�[���PKf[�\������!�.5dist/lang/summernote-ta-IN.min.jsnu�[���PKf[�\AtS���C5dist/lang/summernote-mn-MN.jsnu�[���PKf[�\A�v���[5dist/lang/summernote-ta-IN.jsnu�[���PKf[�\S>��!�v5dist/lang/summernote-uz-UZ.min.jsnu�[���PKf[�\�E)��5dist/lang/summernote-da-DK.jsnu�[���PKf[�\* ����#�5dist/lang/summernote-vi-VN.jsnu�[���PKf[�\<�����!<�5dist/lang/summernote-hu-HU.min.jsnu�[���PKf[�\��1ZZ{�5dist/lang/summernote-es-EU.jsnu�[���PKf[�\�ft"�5dist/lang/summernote-hu-HU.jsnu�[���PKf[�\W���++!r�5dist/lang/summernote-bg-BG.min.jsnu�[���PKf[�\N�2����5dist/lang/summernote-fr-FR.jsnu�[���PKf[�\a��Έ�!4 6dist/lang/summernote-ko-KR.min.jsnu�[���PKf[�\S��ˤ� 6dist/lang/summernote-ko-KR.jsnu�[���PKf[�\�E���06dist/lang/summernote-it-IT.jsnu�[���PKf[�\zJ���eF6dist/lang/summernote-pl-PL.jsnu�[���PKf[�\T��S\\M[6dist/lang/summernote-ro-RO.jsnu�[���PKf[�\��Z���p6dist/lang/summernote-uz-UZ.jsnu�[���PKf[�\q:sZ !�6dist/lang/summernote-lt-LV.min.jsnu�[���PKf[�\�8!�� � !G�6dist/lang/summernote-da-DK.min.jsnu�[���PKf[�\C�Л�!��6dist/lang/summernote-mn-MN.min.jsnu�[���PKf[�\{�A^qq~�6dist/lang/summernote-zh-CN.jsnu�[���PKf[�\���mm!<�6dist/lang/summernote-de-DE.min.jsnu�[���PKf[�\7�%YY!��6dist/lang/summernote-pt-BR.min.jsnu�[���PKf[�\���1GG��6dist/lang/summernote-bg-BG.jsnu�[���PKf[�\�"r�OO8�6dist/lang/summernote-sk-SK.jsnu�[���PKf[�\z ޚ��!� 7dist/lang/summernote-fr-FR.min.jsnu�[���PKf[�\T!�^��!7dist/lang/summernote-it-IT.min.jsnu�[���PKf[�\��&k k !Q-7dist/lang/summernote-ja-JP.min.jsnu�[���PKf[�\rI=�! ;7dist/lang/summernote-nl-NL.min.jsnu�[���PKf[�\q��2��!vI7dist/lang/summernote-sr-RS.min.jsnu�[���PKf[�\Dǚ�II!�Z7dist/lang/summernote-es-EU.min.jsnu�[���PKf[�\���e44i7dist/lang/summernote-nl-NL.jsnu�[���PKf[�\W9�Z//!�}7dist/lang/summernote-fa-IR.min.jsnu�[���PKf[�\r A�� � !�7dist/lang/summernote-nb-NO.min.jsnu�[���PKf[�\�~J<� � !5�7dist/lang/summernote-fi-FI.min.jsnu�[���PKf[�\I��| | !_�7dist/lang/summernote-id-ID.min.jsnu�[���PKf[�\�N� � !,�7dist/lang/summernote-hr-HR.min.jsnu�[���PKf[�\J�а � !U�7dist/lang/summernote-vi-VN.min.jsnu�[���PKf[�\�La�zzV�7dist/lang/summernote-cs-CZ.jsnu�[���PKf[�\*���!�7dist/lang/summernote-gl-ES.min.jsnu�[���PKf[�\�7��TT!,�7dist/lang/summernote-sl-SI.min.jsnu�[���PKf[�\�!����!�8dist/lang/summernote-zh-CN.min.jsnu�[���PKf[�\�C_���8dist/lang/summernote-fi-FI.jsnu�[���PKf[�\�"+�> > !�&8dist/lang/summernote-zh-TW.min.jsnu�[���PKf[�\D�jKm48dist/lang/summernote-ca-ES.jsnu�[���PKf[�\B�bnn�I8dist/lang/summernote-th-TH.jsnu�[���PKf[�\m��ppzd8dist/lang/summernote-sl-SI.jsnu�[���PKf[�\v?!b''7y8dist/lang/summernote-he-IL.jsnu�[���PKf[�\FbJ6CC!��8dist/lang/summernote-el-GR.min.jsnu�[���PKf[�\�n2m33!?�8dist/lang/summernote-pt-PT.min.jsnu�[���PKf[�\[܂}ò8dist/lang/summernote-es-ES.jsnu�[���PKf[�\ӹ@&��!/�8dist/lang/summernote-ar-AR.min.jsnu�[���PKf[�\&\] !i�8dist/lang/summernote-es-ES.min.jsnu�[���PKf[�\ݕو����8dist/lang/summernote-nb-NO.jsnu�[���PKf[�\�5H�++!�8dist/lang/summernote-ru-RU.min.jsnu�[���PKf[�\5r���f9dist/lang/summernote-sr-RS.jsnu�[���PKf[�\[�^^!�)9dist/lang/summernote-tr-TR.min.jsnu�[���PKf[�\��RR!899dist/lang/summernote-th-TH.min.jsnu�[���PKf[�\uS)�OO!�M9dist/lang/summernote-uk-UA.min.jsnu�[���PKf[�\��+�ZZ{`9dist/lang/summernote-zh-TW.jsnu�[���PKf[�\8N�kk"t9dist/lang/summernote-uk-UA.jsnu�[���PKf[�\@�T;!ڌ9dist/lang/summernote-pl-PL.min.jsnu�[���PKf[�\$����#��9dist/lang/summernote-sr-RS-Latin.jsnu�[���PKf[�\�k-�II!��9dist/lang/summernote-sk-SK.min.jsnu�[���PKf[�\�{�� !��9dist/lang/summernote-lt-LT.min.jsnu�[���PKf[�\1��(nn�9dist/lang/summernote-pt-BR.jsnu�[���PKf[�\%J�����9dist/lang/summernote-hr-HR.jsnu�[���PKf[�\��0v!�9dist/lang/summernote-he-IL.min.jsnu�[���PKf[�\0����!^:dist/lang/summernote-ca-ES.min.jsnu�[���PKf[�\�MHy���:dist/lang/summernote-id-ID.jsnu�[���PKf[�\?�l�~~s):dist/lang/summernote-de-DE.jsnu�[���PKf[�\���Z��>>:dist/lang/summernote-lt-LV.jsnu�[���PKf[�\d�[���yS:dist/lang/summernote-gl-ES.jsnu�[���PKf[�\Q~�@@�h:dist/lang/summernote-ru-RU.jsnu�[���PKf[�\���DD&�:dist/lang/summernote-pt-PT.jsnu�[���PKf[�\y�[��:dist/lang/summernote-ar-AR.jsnu�[���PKf[�\��d�KK �:dist/lang/summernote-fa-IR.jsnu�[���PKf[�\�9pRss��:dist/lang/summernote-tr-TR.jsnu�[���PKf[�\���p� � !a�:dist/lang/summernote-sv-SE.min.jsnu�[���PKf[�\߂�XX��:dist/lang/summernote-el-GR.jsnu�[���PKf[�\{ �O;dist/lang/summernote-sv-SE.jsnu�[���PKf[�\�X��GG!�;dist/lang/summernote-ro-RO.min.jsnu�[���PKf[�\m�v'<<H*;dist/lang/summernote-lt-LT.jsnu�[���PKf[�\ˈ��?;examples/hint-userdefine.htmlnu�[���PKf[�\,2����F;examples/ondialog-multitab.htmlnu�[���PKf[�\�r����R;examples/bs3.htmlnu�[���PKf[�\�뻒��Y;examples/link-blank.htmlnu�[���PKf[�\侈�--_^;examples/textarea.htmlnu�[���PKf[�\���j���d;examples/lite.htmlnu�[���PKf[�\oi~DD�g;examples/plugin-hello.htmlnu�[���PKf[�\9�7�ssym;examples/codemirror.htmlnu�[���PKf[�\c�ɟ%%4u;examples/ie8.htmlnu�[���PKf[�\�f����y;examples/airmode.htmlnu�[���PKf[�\q�#���;examples/bs4.htmlnu�[���PKf[�\;}{,^^�;examples/nativestyle.htmlnu�[���PKf[�\�S�DcDc8��;examples/symbols_mathematical-symbols_Greek-letters.jsonnu�[���PKf[�\�65�rrT�;examples/hint-emoji.htmlnu�[���PKf[�\� �� �;examples/external-api.htmlnu�[���PKf[�\ 48i��x<examples/with-google-font.htmlnu�[���PKf[�\�S"%GG�<examples/toolbar-container.htmlnu�[���PKf[�\�-֥�@<examples/lang.htmlnu�[���PKf[�\!�z���!'<examples/jquery-custom-event.htmlnu�[���PKf[�\~ ��AAg5<examples/ondialog.htmlnu�[���PKf[�\��.���=�=<examples/hint-symbols_mathematical-symbols_Greek-letters.htmlnu�[���PKf[�\&�9���E<examples/jquery19lt.htmlnu�[���PKf[�\��qZZ0I<examples/rtl.htmlnu�[���PKf[�\T�� �M<README.mdnu�[���PKf[�\���[<lang/summernote-ja-JP.jsnu�[���PKf[�\AtS���n<lang/summernote-mn-MN.jsnu�[���PKf[�\A�v���<lang/summernote-ta-IN.jsnu�[���PKf[�\�E)�<lang/summernote-da-DK.jsnu�[���PKf[�\* ����_�<lang/summernote-vi-VN.jsnu�[���PKf[�\��1ZZs�<lang/summernote-es-EU.jsnu�[���PKf[�\�ft�<lang/summernote-hu-HU.jsnu�[���PKf[�\N�2���`�<lang/summernote-fr-FR.jsnu�[���PKf[�\S��ˤ�� =lang/summernote-ko-KR.jsnu�[���PKf[�\�E���=lang/summernote-it-IT.jsnu�[���PKf[�\zJ����4=lang/summernote-pl-PL.jsnu�[���PKf[�\T��S\\�I=lang/summernote-ro-RO.jsnu�[���PKf[�\��Z��v_=lang/summernote-uz-UZ.jsnu�[���PKf[�\{�A^qqdp=lang/summernote-zh-CN.jsnu�[���PKf[�\���1GG�=lang/summernote-bg-BG.jsnu�[���PKf[�\�"r�OO��=lang/summernote-sk-SK.jsnu�[���PKf[�\���e44C�=lang/summernote-nl-NL.jsnu�[���PKf[�\�La�zz��=lang/summernote-cs-CZ.jsnu�[���PKf[�\�C_����=lang/summernote-fi-FI.jsnu�[���PKf[�\D�jK��=lang/summernote-ca-ES.jsnu�[���PKf[�\B�bnn�>lang/summernote-th-TH.jsnu�[���PKf[�\m��pp�>lang/summernote-sl-SI.jsnu�[���PKf[�\v?!b''c0>lang/summernote-he-IL.jsnu�[���PKf[�\[܂}�E>lang/summernote-es-ES.jsnu�[���PKf[�\ݕو��9[>lang/summernote-nb-NO.jsnu�[���PKf[�\5r���Zo>lang/summernote-sr-RS.jsnu�[���PKf[�\��+�ZZx�>lang/summernote-zh-TW.jsnu�[���PKf[�\8N�kk�>lang/summernote-uk-UA.jsnu�[���PKf[�\$����Ͳ>lang/summernote-sr-RS-Latin.jsnu�[���PKf[�\1��(nn�>lang/summernote-pt-BR.jsnu�[���PKf[�\%J�����>lang/summernote-hr-HR.jsnu�[���PKf[�\�MHy���>lang/summernote-id-ID.jsnu�[���PKf[�\?�l�~~�?lang/summernote-de-DE.jsnu�[���PKf[�\���Z���?lang/summernote-lt-LV.jsnu�[���PKf[�\d�[����-?lang/summernote-gl-ES.jsnu�[���PKf[�\Q~�@@C?lang/summernote-ru-RU.jsnu�[���PKf[�\���DD�_?lang/summernote-pt-PT.jsnu�[���PKf[�\y�[t?lang/summernote-ar-AR.jsnu�[���PKf[�\��d�KKc�?lang/summernote-fa-IR.jsnu�[���PKf[�\�9pRss��?lang/summernote-tr-TR.jsnu�[���PKf[�\߂�XX��?lang/summernote-el-GR.jsnu�[���PKf[�\{ �Q�?lang/summernote-sv-SE.jsnu�[���PKf[�\m�v'<<��?lang/summernote-lt-LT.jsnu�[���PKf[�\�Z�**21�?plugin/specialchars/summernote-ext-specialchars.jsnu�[���PKf[�\x�#-�&@plugin/databasic/summernote-ext-databasic.cssnu�[���PKf[�\���M!M!,(@plugin/databasic/summernote-ext-databasic.jsnu�[���PKf[�\X$Q�; ; $�I@plugin/hello/summernote-ext-hello.jsnu�[���PKf[�\둋��� NT@tsconfig.jsonnu�[���PKf[�\�߹��.�.R[U@coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/History.js.htmlnu�[���PKf[�\ɋ��M^�@coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/index.htmlnu�[���PKf[�\� ��XMXMQl�@coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Bullet.js.htmlnu�[���PKf[�\KWtn����PE�@coverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Table.js.htmlnu�[���PKf[�\M->EEP��Acoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Style.js.htmlnu�[���PKf[�\���(+(+QBcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/editing/Typing.js.htmlnu�[���PKf[�\�z�J�$�$M�=Bcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/range.js.htmlnu�[���PKf[�\����mmM�bCcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/async.js.htmlnu�[���PKf[�\��U#U#K�}Ccoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/key.js.htmlnu�[���PKf[�\��Rd~I~IM��Ccoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/lists.js.htmlnu�[���PKf[�\79^�2�2K��Ccoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/env.js.htmlnu�[���PKf[�\.���JDcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/index.htmlnu�[���PKf[�\�m��;�;LS>Dcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/func.js.htmlnu�[���PKf[�\�2ӌkkK^zDcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/core/dom.js.htmlnu�[���PKf[�\��VP8P8R��Ecoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Codeview.js.htmlnu�[���PKf[�\���� V�Fcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/TablePopover.js.htmlnu�[���PKf[�\_ϒ�C�CUQ?Fcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/ImageDialog.js.htmlnu�[���PKf[�\�<�fCBCBQ\�Fcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Buttons.js.htmlnu�[���PKf[�\V$�YO O R �Gcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AutoLink.js.htmlnu�[���PKf[�\'h�f'f'T��Gcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AirPopover.js.htmlnu�[���PKf[�\w�X���S�Hcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Clipboard.js.htmlnu�[���PKf[�\�q���N�NPS#Hcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Editor.js.htmlnu�[���PKf[�\�aC�EELrrIcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/index.htmlnu�[���PKf[�\�g&:��Sm�Icoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Statusbar.js.htmlnu�[���PKf[�\ǻJUUT��Icoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/LinkDialog.js.htmlnu�[���PKf[�\�̅+BBPg)Jcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Handle.js.htmlnu�[���PKf[�\�,�gw'w'T�kJcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/HelpDialog.js.htmlnu�[���PKf[�\x]��8�8Q�Jcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Toolbar.js.htmlnu�[���PKf[�\'1G��V�Jcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/ImagePopover.js.htmlnu�[���PKf[�\Bj)�;�;R,�Jcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Dropzone.js.htmlnu�[���PKf[�\o���T3&Kcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Fullscreen.js.htmlnu�[���PKf[�\��V�!�!U�@Kcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/LinkPopover.js.htmlnu�[���PKf[�\�f�nbbU�bKcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/VideoDialog.js.htmlnu�[���PKf[�\�^I�n�nUU�Kcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/HintPopover.js.htmlnu�[���PKf[�\|����U�4Lcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/Placeholder.js.htmlnu�[���PKf[�\1�!!RNLcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/module/AutoSync.js.htmlnu�[���PKf[�\�#�vE?E?S�]Lcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/summernote-en-US.js.htmlnu�[���PKf[�\2�TH��E�Lcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/index.htmlnu�[���PKf[�\v^@��V�VJ�Lcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/Context.js.htmlnu�[���PKf[�\��| llKL Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/base/renderer.js.htmlnu�[���PKf[�\�/�==@3(Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/index.htmlnu�[���PKf[�\�L��H�6Mcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/summernote.js.htmlnu�[���PKf[�\�\��EIUMcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui.js.htmlnu�[���PKf[�\+J���EAmNcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/index.htmlnu�[���PKf[�\�dI�4�4Ox~Ncoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/TooltipUI.js.htmlnu�[���PKf[�\h���M��Ncoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/ModalUI.js.htmlnu�[���PKf[�\�t��z5z5O��Ncoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/PopoverUI.js.htmlnu�[���PKf[�\�i�$$H�Ocoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/index.htmlnu�[���PKf[�\�^�ym(m(PmOcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/ui/DropdownUI.js.htmlnu�[���PKf[�\�� z zKZCOcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/lite/settings.js.htmlnu�[���PKf[�\C��mfmfD�Ocoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/ui.js.htmlnu�[���PKf[�\��;D�$Pcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/index.htmlnu�[���PKf[�\�u�cttJH6Pcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs3/settings.js.htmlnu�[���PKf[�\Ʉ�d�x�xDȪPcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/ui.js.htmlnu�[���PKf[�\� ���D�#Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/index.htmlnu�[���PKf[�\�s]��{�{J&5Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/src/js/bs4/settings.js.htmlnu�[���PKf[�\����--X��Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/style.spec.js.htmlnu�[���PKf[�\sMޢ__P$�Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/index.htmlnu�[���PKf[�\�8%��X�Qcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/editing/Table.spec.js.htmlnu�[���PKf[�\[O�N&&S��Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/key.spec.js.htmlnu�[���PKf[�\Lg�d!0!0UN�Rcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/lists.spec.js.htmlnu�[���PKf[�\òT֘���S�/Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/dom.spec.js.htmlnu�[���PKf[�\��i)}}M�Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/index.htmlnu�[���PKf[�\���Pr�r�U �Scoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/range.spec.js.htmlnu�[���PKf[�\ʗ�5�5TsTcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/core/func.spec.js.htmlnu�[���PKf[�\S����X}�Tcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Editor.spec.js.htmlnu�[���PKf[�\�ݬ0��\�>Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Fullscreen.spec.js.htmlnu�[���PKf[�\k����ZZSUcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/Codeview.spec.js.htmlnu�[���PKf[�\��`00O�gUcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/module/index.htmlnu�[���PKf[�\�.���&�&Rp|Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/Context.spec.js.htmlnu�[���PKf[�\��{{Hy�Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/base/index.htmlnu�[���PKf[�\'tBEE[l�Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/VideoDialog.spec.js.htmlnu�[���PKf[�\*S�Y _ _W<�Ucoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/Buttons.spec.js.htmlnu�[���PKf[�\<�\mmM�,Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/test/unit/bs/module/index.htmlnu�[���PKf[�\��X�^2^29�>Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/index.htmlnu�[���PKf[�\U�5���;�qVcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.cssnu�[���PKf[�\Ē���7�tVcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/base.cssnu�[���PKf[�\> �=�D�D:��Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/prettify.jsnu�[���PKf[�\��zS��D�Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sort-arrow-sprite.pngnu�[���PKf[�\4 ����8H�Vcoverage/PhantomJS 2.1.1 (Mac OS X 0.0.0)/html/sorter.jsnu�[���PKf[�\���/����VPULL_REQUEST_TEMPLATE.mdnu�[���PK������V
/home/emeraadmin/.razor/.././www/node_modules/parse-filepath/../../4d695/summernote.zip