From c785027c5c23669702e6a917a6edb6477c867b93 Mon Sep 17 00:00:00 2001 From: hide_d Date: Thu, 30 Aug 2018 22:02:51 +0900 Subject: [PATCH] =?UTF-8?q?=EC=97=90=EB=94=94=ED=84=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- e_lib/summernote/font/summernote.eot | Bin 0 -> 9082 bytes e_lib/summernote/font/summernote.ttf | Bin 0 -> 8896 bytes e_lib/summernote/font/summernote.woff | Bin 0 -> 15692 bytes e_lib/summernote/lang/summernote-ko-KR.js | 155 + .../databasic/summernote-ext-databasic.css | 16 + .../databasic/summernote-ext-databasic.js | 292 + .../plugin/hello/summernote-ext-hello.js | 81 + .../summernote-ext-specialchars.js | 312 + e_lib/summernote/summernote-bs4.css | 1 + e_lib/summernote/summernote-bs4.js | 7323 +++++++++++++++++ e_lib/summernote/summernote-bs4.js.map | 1 + e_lib/summernote/summernote-bs4.min.js | 3 + e_lib/trumbowyg/langs/ko.min.js | 10 - .../trumbowyg.allowtagsfrompaste.js | 143 - .../trumbowyg.allowtagsfrompaste.min.js | 1 - .../plugins/base64/trumbowyg.base64.js | 129 - .../plugins/base64/trumbowyg.base64.min.js | 1 - .../cleanpaste/trumbowyg.cleanpaste.js | 112 - .../cleanpaste/trumbowyg.cleanpaste.min.js | 1 - .../plugins/colors/trumbowyg.colors.js | 185 - .../plugins/colors/trumbowyg.colors.min.js | 1 - .../colors/ui/sass/trumbowyg.colors.scss | 49 - .../plugins/colors/ui/trumbowyg.colors.css | 43 - .../colors/ui/trumbowyg.colors.min.css | 2 - .../plugins/emoji/trumbowyg.emoji.js | 968 --- .../plugins/emoji/trumbowyg.emoji.min.js | 1 - .../emoji/ui/sass/trumbowyg.emoji.scss | 56 - .../plugins/emoji/ui/trumbowyg.emoji.css | 47 - .../plugins/emoji/ui/trumbowyg.emoji.min.css | 2 - .../fontfamily/trumbowyg.fontfamily.js | 73 - .../fontfamily/trumbowyg.fontfamily.min.js | 1 - .../plugins/fontsize/trumbowyg.fontsize.js | 117 - .../fontsize/trumbowyg.fontsize.min.js | 1 - .../plugins/highlight/trumbowyg.highlight.js | 82 - .../highlight/trumbowyg.highlight.min.js | 1 - .../ui/sass/trumbowyg.highlight.scss | 25 - .../highlight/ui/trumbowyg.highlight.css | 20 - .../highlight/ui/trumbowyg.highlight.min.css | 2 - .../plugins/history/trumbowyg.history.js | 190 - .../plugins/history/trumbowyg.history.min.js | 1 - .../insertaudio/trumbowyg.insertaudio.js | 89 - .../insertaudio/trumbowyg.insertaudio.min.js | 1 - .../lineheight/trumbowyg.lineheight.js | 104 - .../lineheight/trumbowyg.lineheight.min.js | 1 - .../plugins/mathml/trumbowyg.mathml.js | 88 - .../plugins/mathml/trumbowyg.mathml.min.js | 1 - .../mathml/ui/sass/trumbowyg.mathml.scss | 36 - .../plugins/mathml/ui/trumbowyg.mathml.css | 29 - .../mathml/ui/trumbowyg.mathml.min.css | 2 - .../plugins/mention/trumbowyg.mention.js | 105 - .../plugins/mention/trumbowyg.mention.min.js | 1 - .../mention/ui/sass/trumbowyg.mention.scss | 39 - .../plugins/mention/ui/trumbowyg.mention.css | 32 - .../mention/ui/trumbowyg.mention.min.css | 2 - .../plugins/noembed/trumbowyg.noembed.js | 104 - .../plugins/noembed/trumbowyg.noembed.min.js | 1 - .../pasteembed/trumbowyg.pasteembed.js | 96 - .../pasteembed/trumbowyg.pasteembed.min.js | 1 - .../pasteimage/trumbowyg.pasteimage.js | 41 - .../pasteimage/trumbowyg.pasteimage.min.js | 1 - .../preformatted/trumbowyg.preformatted.js | 130 - .../trumbowyg.preformatted.min.js | 1 - .../plugins/resizimg/trumbowyg.resizimg.js | 69 - .../resizimg/trumbowyg.resizimg.min.js | 1 - .../trumbowyg/plugins/ruby/trumbowyg.ruby.js | 72 - .../plugins/ruby/trumbowyg.ruby.min.js | 1 - .../plugins/table/trumbowyg.table.js | 283 - .../plugins/table/trumbowyg.table.min.js | 1 - .../table/ui/sass/trumbowyg.table.scss | 41 - .../plugins/table/ui/trumbowyg.table.css | 32 - .../plugins/table/ui/trumbowyg.table.min.css | 2 - .../plugins/template/trumbowyg.template.js | 64 - .../template/trumbowyg.template.min.js | 1 - .../plugins/upload/trumbowyg.upload.js | 261 - .../plugins/upload/trumbowyg.upload.min.js | 1 - e_lib/trumbowyg/trumbowyg.fontsize.css | 27 - e_lib/trumbowyg/trumbowyg.fontsize.js | 118 - e_lib/trumbowyg/trumbowyg.js | 1823 ---- e_lib/trumbowyg/trumbowyg.min.js | 2 - e_lib/trumbowyg/ui/icons.svg | 1 - e_lib/trumbowyg/ui/sass/trumbowyg.scss | 809 -- e_lib/trumbowyg/ui/trumbowyg.css | 587 -- e_lib/trumbowyg/ui/trumbowyg.min.css | 2 - hwe/b_dipcenter.php | 12 +- hwe/css/dipcenter.css | 19 + hwe/js/dipcenter.js | 65 +- 86 files changed, 8228 insertions(+), 7419 deletions(-) create mode 100644 e_lib/summernote/font/summernote.eot create mode 100644 e_lib/summernote/font/summernote.ttf create mode 100644 e_lib/summernote/font/summernote.woff create mode 100644 e_lib/summernote/lang/summernote-ko-KR.js create mode 100644 e_lib/summernote/plugin/databasic/summernote-ext-databasic.css create mode 100644 e_lib/summernote/plugin/databasic/summernote-ext-databasic.js create mode 100644 e_lib/summernote/plugin/hello/summernote-ext-hello.js create mode 100644 e_lib/summernote/plugin/specialchars/summernote-ext-specialchars.js create mode 100644 e_lib/summernote/summernote-bs4.css create mode 100644 e_lib/summernote/summernote-bs4.js create mode 100644 e_lib/summernote/summernote-bs4.js.map create mode 100644 e_lib/summernote/summernote-bs4.min.js delete mode 100644 e_lib/trumbowyg/langs/ko.min.js delete mode 100644 e_lib/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js delete mode 100644 e_lib/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.min.js delete mode 100644 e_lib/trumbowyg/plugins/base64/trumbowyg.base64.js delete mode 100644 e_lib/trumbowyg/plugins/base64/trumbowyg.base64.min.js delete mode 100644 e_lib/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js delete mode 100644 e_lib/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js delete mode 100644 e_lib/trumbowyg/plugins/colors/trumbowyg.colors.js delete mode 100644 e_lib/trumbowyg/plugins/colors/trumbowyg.colors.min.js delete mode 100644 e_lib/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss delete mode 100644 e_lib/trumbowyg/plugins/colors/ui/trumbowyg.colors.css delete mode 100644 e_lib/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css delete mode 100644 e_lib/trumbowyg/plugins/emoji/trumbowyg.emoji.js delete mode 100644 e_lib/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js delete mode 100644 e_lib/trumbowyg/plugins/emoji/ui/sass/trumbowyg.emoji.scss delete mode 100644 e_lib/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.css delete mode 100644 e_lib/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.min.css delete mode 100644 e_lib/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js delete mode 100644 e_lib/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.min.js delete mode 100644 e_lib/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js delete mode 100644 e_lib/trumbowyg/plugins/fontsize/trumbowyg.fontsize.min.js delete mode 100644 e_lib/trumbowyg/plugins/highlight/trumbowyg.highlight.js delete mode 100644 e_lib/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js delete mode 100644 e_lib/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss delete mode 100644 e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css delete mode 100644 e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css delete mode 100644 e_lib/trumbowyg/plugins/history/trumbowyg.history.js delete mode 100644 e_lib/trumbowyg/plugins/history/trumbowyg.history.min.js delete mode 100644 e_lib/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js delete mode 100644 e_lib/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js delete mode 100644 e_lib/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js delete mode 100644 e_lib/trumbowyg/plugins/lineheight/trumbowyg.lineheight.min.js delete mode 100644 e_lib/trumbowyg/plugins/mathml/trumbowyg.mathml.js delete mode 100644 e_lib/trumbowyg/plugins/mathml/trumbowyg.mathml.min.js delete mode 100644 e_lib/trumbowyg/plugins/mathml/ui/sass/trumbowyg.mathml.scss delete mode 100644 e_lib/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.css delete mode 100644 e_lib/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.min.css delete mode 100644 e_lib/trumbowyg/plugins/mention/trumbowyg.mention.js delete mode 100644 e_lib/trumbowyg/plugins/mention/trumbowyg.mention.min.js delete mode 100644 e_lib/trumbowyg/plugins/mention/ui/sass/trumbowyg.mention.scss delete mode 100644 e_lib/trumbowyg/plugins/mention/ui/trumbowyg.mention.css delete mode 100644 e_lib/trumbowyg/plugins/mention/ui/trumbowyg.mention.min.css delete mode 100644 e_lib/trumbowyg/plugins/noembed/trumbowyg.noembed.js delete mode 100644 e_lib/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js delete mode 100644 e_lib/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js delete mode 100644 e_lib/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.min.js delete mode 100644 e_lib/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js delete mode 100644 e_lib/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.min.js delete mode 100644 e_lib/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js delete mode 100644 e_lib/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js delete mode 100644 e_lib/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js delete mode 100644 e_lib/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js delete mode 100644 e_lib/trumbowyg/plugins/ruby/trumbowyg.ruby.js delete mode 100644 e_lib/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js delete mode 100644 e_lib/trumbowyg/plugins/table/trumbowyg.table.js delete mode 100644 e_lib/trumbowyg/plugins/table/trumbowyg.table.min.js delete mode 100644 e_lib/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss delete mode 100644 e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.css delete mode 100644 e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.min.css delete mode 100644 e_lib/trumbowyg/plugins/template/trumbowyg.template.js delete mode 100644 e_lib/trumbowyg/plugins/template/trumbowyg.template.min.js delete mode 100644 e_lib/trumbowyg/plugins/upload/trumbowyg.upload.js delete mode 100644 e_lib/trumbowyg/plugins/upload/trumbowyg.upload.min.js delete mode 100644 e_lib/trumbowyg/trumbowyg.fontsize.css delete mode 100644 e_lib/trumbowyg/trumbowyg.fontsize.js delete mode 100644 e_lib/trumbowyg/trumbowyg.js delete mode 100644 e_lib/trumbowyg/trumbowyg.min.js delete mode 100644 e_lib/trumbowyg/ui/icons.svg delete mode 100644 e_lib/trumbowyg/ui/sass/trumbowyg.scss delete mode 100644 e_lib/trumbowyg/ui/trumbowyg.css delete mode 100644 e_lib/trumbowyg/ui/trumbowyg.min.css diff --git a/e_lib/summernote/font/summernote.eot b/e_lib/summernote/font/summernote.eot new file mode 100644 index 0000000000000000000000000000000000000000..4f5d02c2d3f13caf3b4b53703a25d143035805dc GIT binary patch literal 9082 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', + tooltip: lang.image.resizeFull, + click: context.createInvokeHandler('editor.resize', '1') + }).render(); + }); + context.memo('button.databasicSize50', function() { + return ui.button({ + contents: '50%', + tooltip: lang.image.resizeHalf, + click: context.createInvokeHandler('editor.resize', '0.5') + }).render(); + }); + context.memo('button.databasicSize25', function() { + return ui.button({ + contents: '25%', + 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 = '
' + + '' + + '' + + '
'; + var footer = ''; + + 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('

' + self.icon + ' ' + lang.databasic.name + ': ' + + $node.attr('data-test') + '

'); + }; + + self.updateNode = function(info) { + self.setContent(info.node + .attr('data-test', info.test)); + }; + + self.createNode = function(info) { + var $node = $(''); + + 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' + } + } + } + + }); +})); diff --git a/e_lib/summernote/plugin/hello/summernote-ext-hello.js b/e_lib/summernote/plugin/hello/summernote-ext-hello.js new file mode 100644 index 00000000..22e4f6ac --- /dev/null +++ b/e_lib/summernote/plugin/hello/summernote-ext-hello.js @@ -0,0 +1,81 @@ +(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: ' 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 = $('
').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; + }; + } + }); +})); diff --git a/e_lib/summernote/plugin/specialchars/summernote-ext-specialchars.js b/e_lib/summernote/plugin/specialchars/summernote-ext-specialchars.js new file mode 100644 index 00000000..2ee4e512 --- /dev/null +++ b/e_lib/summernote/plugin/specialchars/summernote-ext-specialchars.js @@ -0,0 +1,312 @@ +(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: '', + tooltip: lang.specialChar.specialChar, + click: function() { + self.show(); + } + }).render(); + }); + + /** + * Make Special Characters Table + * + * @member plugin.specialChar + * @private + * @return {jQuery} + */ + this.makeSpecialCharSetTable = function() { + var $table = $(''); + $.each(specialCharDataSet, function(idx, text) { + var $td = $('') : $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 = '
' + this.makeSpecialCharSetTable()[0].outerHTML + '
'; + + 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 = $('').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); + }); + }; + } + }); +})); diff --git a/e_lib/summernote/summernote-bs4.css b/e_lib/summernote/summernote-bs4.css new file mode 100644 index 00000000..b0520764 --- /dev/null +++ b/e_lib/summernote/summernote-bs4.css @@ -0,0 +1 @@ +@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} \ No newline at end of file diff --git a/e_lib/summernote/summernote-bs4.js b/e_lib/summernote/summernote-bs4.js new file mode 100644 index 00000000..22d0ef21 --- /dev/null +++ b/e_lib/summernote/summernote-bs4.js @@ -0,0 +1,7323 @@ +/** + * 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('
'); +var toolbar = renderer.create('
'); +var editingArea = renderer.create('
'); +var codable = renderer.create('', - '
', - ].join('\n')), - $language = $modal.find('.language'), - $code = $modal.find('.code'); - - // Listen clicks on modal box buttons - $modal.on('tbwconfirm', function () { - trumbowyg.restoreRange(); - trumbowyg.execCmd('insertHTML', highlightIt($code.val(), $language.val())); - trumbowyg.execCmd('insertHTML', '


'); - - trumbowyg.closeModal(); - }); - - $modal.on('tbwcancel', function () { - trumbowyg.closeModal(); - }); - } - }; - } - - $.extend(true, $.trumbowyg, { - // Add some translations - langs: { - en: { - highlight: 'Code syntax highlight' - } - }, - // Add our plugin to Trumbowyg registred plugins - plugins: { - highlight: { - init: function (trumbowyg) { - // Fill current Trumbowyg instance with my plugin default options - trumbowyg.o.plugins.highlight = $.extend(true, {}, - defaultOptions, - trumbowyg.o.plugins.highlight || {} - ); - - // If my plugin is a button - trumbowyg.addBtnDef('highlight', buildButtonDef(trumbowyg)); - } - } - } - }); -})(jQuery, Prism); diff --git a/e_lib/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js b/e_lib/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js deleted file mode 100644 index feca0eef..00000000 --- a/e_lib/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(n,i){"use strict";function e(n,e){return['
',''+i.highlight(n,i.languages[e])+"","
"].join("")}function o(n){return{fn:function(){var o=n.openModal("Code",['
',' ","
",'
',' ',"
"].join("\n")),t=o.find(".language"),g=o.find(".code");o.on("tbwconfirm",function(){n.restoreRange(),n.execCmd("insertHTML",e(g.val(),t.val())),n.execCmd("insertHTML","


"),n.closeModal()}),o.on("tbwcancel",function(){n.closeModal()})}}}var t={};n.extend(!0,n.trumbowyg,{langs:{en:{highlight:"Code syntax highlight"}},plugins:{highlight:{init:function(i){i.o.plugins.highlight=n.extend(!0,{},t,i.o.plugins.highlight||{}),i.addBtnDef("highlight",o(i))}}}})}(jQuery,Prism); \ No newline at end of file diff --git a/e_lib/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss b/e_lib/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss deleted file mode 100644 index 05dfb4a6..00000000 --- a/e_lib/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - * Default stylesheet for Trumbowyg editor plugin - * ------------------------ - * @link http://alex-d.github.io/Trumbowyg - * @license MIT - * @author Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - */ - -.trumbowyg-highlight-form-group { - margin: 15px 10px; - - .trumbowyg-highlight-form-control { - width: 100%; - border: 1px solid #DEDEDE; - font-size: 14px; - padding: 7px; - - &.code { - height: 200px; - } - } -} diff --git a/e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css b/e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css deleted file mode 100644 index 6cb61516..00000000 --- a/e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - * Trumbowyg plugin stylesheet - * ------------------------ - * @link http://alex-d.github.io/Trumbowyg - * @license MIT - * @author Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - */ - -.trumbowyg-highlight-form-group { - margin: 15px 10px; } - .trumbowyg-highlight-form-group .trumbowyg-highlight-form-control { - width: 100%; - border: 1px solid #DEDEDE; - font-size: 14px; - padding: 7px; } - .trumbowyg-highlight-form-group .trumbowyg-highlight-form-control.code { - height: 200px; } diff --git a/e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css b/e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css deleted file mode 100644 index 89fcd3df..00000000 --- a/e_lib/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ -.trumbowyg-highlight-form-group{margin:15px 10px}.trumbowyg-highlight-form-group .trumbowyg-highlight-form-control{width:100%;border:1px solid #DEDEDE;font-size:14px;padding:7px}.trumbowyg-highlight-form-group .trumbowyg-highlight-form-control.code{height:200px} \ No newline at end of file diff --git a/e_lib/trumbowyg/plugins/history/trumbowyg.history.js b/e_lib/trumbowyg/plugins/history/trumbowyg.history.js deleted file mode 100644 index 46f356f3..00000000 --- a/e_lib/trumbowyg/plugins/history/trumbowyg.history.js +++ /dev/null @@ -1,190 +0,0 @@ -/*/* =========================================================== - * trumbowyg.history.js v1.0 - * history plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Sven Dunemann [dunemann@forelabs.eu] - */ - -(function ($) { - 'use strict'; - $.extend(true, $.trumbowyg, { - langs: { - de: { - history: { - redo: 'Wiederholen', - undo: 'Rückgängig' - } - }, - en: { - history: { - redo: 'Redo', - undo: 'Undo' - } - }, - fr: { - history: { - redo: 'Annuler', - undo: 'Rétablir' - } - } - }, - plugins: { - history: { - init: function (t) { - t.o.plugins.history = $.extend(true, { - _stack: [], - _index: -1, - _focusEl: undefined - }, t.o.plugins.history || {}); - - var btnBuildDefRedo = { - title: t.lang.history.redo, - ico: 'redo', - key: 'Y', - fn: function () { - if (t.o.plugins.history._index < t.o.plugins.history._stack.length - 1) { - t.o.plugins.history._index += 1; - var index = t.o.plugins.history._index; - var newState = t.o.plugins.history._stack[index]; - - t.execCmd('html', newState); - // because of some semantic optimisations we have to save the state back - // to history - t.o.plugins.history._stack[index] = t.$ed.html(); - - carretToEnd(); - toggleButtonStates(); - } - } - }; - - var btnBuildDefUndo = { - title: t.lang.history.undo, - ico: 'undo', - key: 'Z', - fn: function () { - if (t.o.plugins.history._index > 0) { - t.o.plugins.history._index -= 1; - var index = t.o.plugins.history._index, - newState = t.o.plugins.history._stack[index]; - - t.execCmd('html', newState); - // because of some semantic optimisations we have to save the state back - // to history - t.o.plugins.history._stack[index] = t.$ed.html(); - - carretToEnd(); - toggleButtonStates(); - } - } - }; - - var pushToHistory = function () { - var index = t.o.plugins.history._index, - stack = t.o.plugins.history._stack, - latestState = stack.slice(-1)[0] || '

', - prevState = stack[index], - newState = t.$ed.html(), - focusEl = t.doc.getSelection().focusNode, - focusElText = '', - latestStateTagsList, - newStateTagsList, - prevFocusEl = t.o.plugins.history._focusEl; - - latestStateTagsList = $('
' + latestState + '
').find('*').map(function () { - return this.localName; - }); - newStateTagsList = $('
' + newState + '
').find('*').map(function () { - return this.localName; - }); - if (focusEl) { - t.o.plugins.history._focusEl = focusEl; - focusElText = focusEl.outerHTML || focusEl.textContent; - } - - if (newState !== prevState) { - // a new stack entry is defined when current insert ends on a whitespace character - // or count of node elements has been changed - // or focused element differs from previous one - if (focusElText.slice(-1).match(/\s/) || - !arraysAreIdentical(latestStateTagsList, newStateTagsList) || - t.o.plugins.history._index <= 0 || focusEl !== prevFocusEl) - { - t.o.plugins.history._index += 1; - // remove newer entries in history when something new was added - // because timeline was changes with interaction - t.o.plugins.history._stack = stack.slice( - 0, t.o.plugins.history._index - ); - // now add new state to modifed history - t.o.plugins.history._stack.push(newState); - } else { - // modify last stack entry - t.o.plugins.history._stack[index] = newState; - } - - toggleButtonStates(); - } - }; - - var toggleButtonStates = function () { - var index = t.o.plugins.history._index, - stackSize = t.o.plugins.history._stack.length, - undoState = (index > 0), - redoState = (stackSize !== 0 && index !== stackSize - 1); - - toggleButtonState('historyUndo', undoState); - toggleButtonState('historyRedo', redoState); - }; - - var toggleButtonState = function (btn, enable) { - var button = t.$box.find('.trumbowyg-' + btn + '-button'); - - if (enable) { - button.removeClass('trumbowyg-disable'); - } else if (!button.hasClass('trumbowyg-disable')) { - button.addClass('trumbowyg-disable'); - } - }; - - var arraysAreIdentical = function (a, b) { - if (a === b) { - return true; - } - if (a == null || b == null) { - return false; - } - if (a.length !== b.length) { - return false; - } - - for (var i = 0; i < a.length; i += 1) { - if (a[i] !== b[i]) { - return false; - } - } - return true; - }; - - var carretToEnd = function () { - var node = t.doc.getSelection().focusNode, - range = t.doc.createRange(); - - if (node.childNodes.length > 0) { - range.setStartAfter(node.childNodes[node.childNodes.length - 1]); - range.setEndAfter(node.childNodes[node.childNodes.length - 1]); - t.doc.getSelection().removeAllRanges(); - t.doc.getSelection().addRange(range); - } - }; - - t.$c.on('tbwinit tbwchange', pushToHistory); - - t.addBtnDef('historyRedo', btnBuildDefRedo); - t.addBtnDef('historyUndo', btnBuildDefUndo); - } - } - } - }); -})(jQuery); diff --git a/e_lib/trumbowyg/plugins/history/trumbowyg.history.min.js b/e_lib/trumbowyg/plugins/history/trumbowyg.history.min.js deleted file mode 100644 index 7d37a1d3..00000000 --- a/e_lib/trumbowyg/plugins/history/trumbowyg.history.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(i){"use strict";i.extend(!0,i.trumbowyg,{langs:{de:{history:{redo:"Wiederholen",undo:"Rückgängig"}},en:{history:{redo:"Redo",undo:"Undo"}},fr:{history:{redo:"Annuler",undo:"Rétablir"}}},plugins:{history:{init:function(o){o.o.plugins.history=i.extend(!0,{_stack:[],_index:-1,_focusEl:void 0},o.o.plugins.history||{});var t={title:o.lang.history.redo,ico:"redo",key:"Y",fn:function(){if(o.o.plugins.history._index0){o.o.plugins.history._index-=1;var i=o.o.plugins.history._index,t=o.o.plugins.history._stack[i];o.execCmd("html",t),o.o.plugins.history._stack[i]=o.$ed.html(),d(),e()}}},s=function(){var t,n,s=o.o.plugins.history._index,r=o.o.plugins.history._stack,d=r.slice(-1)[0]||"

",u=r[s],h=o.$ed.html(),c=o.doc.getSelection().focusNode,g="",a=o.o.plugins.history._focusEl;t=i("
"+d+"
").find("*").map(function(){return this.localName}),n=i("
"+h+"
").find("*").map(function(){return this.localName}),c&&(o.o.plugins.history._focusEl=c,g=c.outerHTML||c.textContent),h!==u&&(g.slice(-1).match(/\s/)||!l(t,n)||o.o.plugins.history._index<=0||c!==a?(o.o.plugins.history._index+=1,o.o.plugins.history._stack=r.slice(0,o.o.plugins.history._index),o.o.plugins.history._stack.push(h)):o.o.plugins.history._stack[s]=h,e())},e=function(){var i=o.o.plugins.history._index,t=o.o.plugins.history._stack.length,n=i>0,s=0!==t&&i!==t-1;r("historyUndo",n),r("historyRedo",s)},r=function(i,t){var n=o.$box.find(".trumbowyg-"+i+"-button");t?n.removeClass("trumbowyg-disable"):n.hasClass("trumbowyg-disable")||n.addClass("trumbowyg-disable")},l=function(i,o){if(i===o)return!0;if(null==i||null==o)return!1;if(i.length!==o.length)return!1;for(var t=0;t0&&(t.setStartAfter(i.childNodes[i.childNodes.length-1]),t.setEndAfter(i.childNodes[i.childNodes.length-1]),o.doc.getSelection().removeAllRanges(),o.doc.getSelection().addRange(t))};o.$c.on("tbwinit tbwchange",s),o.addBtnDef("historyRedo",t),o.addBtnDef("historyUndo",n)}}}})}(jQuery); \ No newline at end of file diff --git a/e_lib/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js b/e_lib/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js deleted file mode 100644 index 74bc31cd..00000000 --- a/e_lib/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js +++ /dev/null @@ -1,89 +0,0 @@ -/*/* =========================================================== - * trumbowyg.insertaudio.js v1.0 - * InsertAudio plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Adam Hess (AdamHess) - */ - -(function ($) { - 'use strict'; - - var insertAudioOptions = { - src: { - label: 'URL', - required: true - }, - autoplay: { - label: 'AutoPlay', - required: false, - type: 'checkbox' - }, - muted: { - label: 'Muted', - required: false, - type: 'checkbox' - }, - preload: { - label: 'preload options', - required: false - } - }; - - - $.extend(true, $.trumbowyg, { - langs: { - en: { - insertAudio: 'Insert Audio' - }, - fr: { - insertAudio: 'Insérer un son' - }, - ru: { - insertAudio: 'Вставить аудио' - }, - ja: { - insertAudio: '音声の挿入' - }, - tr: { - insertAudio: 'Ses Ekle' - } - }, - plugins: { - insertAudio: { - init: function (trumbowyg) { - var btnDef = { - fn: function () { - var insertAudioCallback = function (v) { - // controls should always be show otherwise the audio will - // be invisible defeating the point of a wysiwyg - var html = '
').addClass('note-specialchar-node'); + var $tr = (idx % COLUMN_LENGTH === 0) ? $('
'); - for (var i = 0; i < t.o.plugins.table.rows; i += 1) { - var row = $('').appendTo(tableSelect); - for (var j = 0; j < t.o.plugins.table.columns; j += 1) { - $('').appendTo(row); - } - } - tableSelect.find('td').on('mouseover', tableAnimate); - tableSelect.find('td').on('mousedown', tableBuild); - - $dropdown.append(tableSelect); - $dropdown.append($('
1x1
')); - } - - t.dropdown(btnName); - } - }; - - var tableAnimate = function(column_event) { - var column = $(column_event.target), - table = column.parents('table'), - colIndex = this.cellIndex, - rowIndex = this.parentNode.rowIndex; - - // reset all columns - table.find('td').removeClass('active'); - - for (var i = 0; i <= rowIndex; i += 1) { - for (var j = 0; j <= colIndex; j += 1) { - table.find("tr:nth-of-type("+(i+1)+")").find("td:nth-of-type("+(j+1)+")").addClass('active'); - } - } - - // set label - table.next('center').html((colIndex+1) + "x" + (rowIndex+1)); - }; - - var tableBuild = function(column_event) { - t.saveRange(); - - var tabler = $('
'); - if (t.o.plugins.table.styler) { - tabler.attr('class', t.o.plugins.table.styler); - } - - var column = $(column_event.target), - colIndex = this.cellIndex, - rowIndex = this.parentNode.rowIndex; - - for (var i = 0; i <= rowIndex; i += 1) { - var row = $('').appendTo(tabler); - for (var j = 0; j <= colIndex; j += 1) { - $('').appendTo(row); - } - } - - t.range.deleteContents(); - t.range.insertNode(tabler[0]); - t.$c.trigger('tbwchange'); - }; - - var addRow = { - title: t.lang['tableAddRow'], - text: t.lang['tableAddRow'], - ico: 'row-below', - - fn: function () { - t.saveRange(); - - var node = t.doc.getSelection().focusNode; - var table = $(node).closest('table'); - - if(table.length > 0) { - var row = $(''); - // add columns according to current columns count - for (var i = 0; i < table.find('tr')[0].childElementCount; i += 1) { - $('').appendTo(row); - } - // add row to table - row.appendTo(table); - } - - return true; - } - }; - - var addColumn = { - title: t.lang['tableAddColumn'], - text: t.lang['tableAddColumn'], - ico: 'col-right', - - fn: function () { - t.saveRange(); - - var node = t.doc.getSelection().focusNode; - var table = $(node).closest('table'); - - if(table.length > 0) { - $(table).find('tr').each(function() { - $(this).find('td:last').after(''); - }); - } - - return true; - } - }; - - var destroy = { - title: t.lang['tableDestroy'], - text: t.lang['tableDestroy'], - ico: 'table-delete', - - fn: function () { - t.saveRange(); - - var node = t.doc.getSelection().focusNode, - table = $(node).closest('table'); - - table.remove(); - - return true; - } - }; - - var deleteRow = { - title: t.lang['tableDeleteRow'], - text: t.lang['tableDeleteRow'], - ico: 'row-delete', - - fn: function () { - t.saveRange(); - - var node = t.doc.getSelection().focusNode, - row = $(node).closest('tr'); - - row.remove(); - - return true; - } - }; - - var deleteColumn = { - title: t.lang['tableDeleteColumn'], - text: t.lang['tableDeleteColumn'], - ico: 'col-delete', - - fn: function () { - t.saveRange(); - - var node = t.doc.getSelection().focusNode, - table = $(node).closest('table'), - td = $(node).closest('td'), - cellIndex = td.index(); - - $(table).find('tr').each(function() { - $(this).find('td:eq('+cellIndex+')').remove(); - }); - - return true; - } - }; - - t.addBtnDef('table', buildButtonDef); - t.addBtnDef('tableAddRow', addRow); - t.addBtnDef('tableAddColumn', addColumn); - t.addBtnDef('tableDeleteRow', deleteRow); - t.addBtnDef('tableDeleteColumn', deleteColumn); - t.addBtnDef('tableDestroy', destroy); - } - } - } - }); -})(jQuery); diff --git a/e_lib/trumbowyg/plugins/table/trumbowyg.table.min.js b/e_lib/trumbowyg/plugins/table/trumbowyg.table.min.js deleted file mode 100644 index cf721dd9..00000000 --- a/e_lib/trumbowyg/plugins/table/trumbowyg.table.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){"use strict";var t={rows:8,columns:8,styler:"table"};e.extend(!0,e.trumbowyg,{langs:{en:{table:"Insert table",tableAddRow:"Add row",tableAddColumn:"Add column",tableDeleteRow:"Delete row",tableDeleteColumn:"Delete column",tableDestroy:"Delete table",error:"Error"},de:{table:"Tabelle einfügen",tableAddRow:"Zeile hinzufügen",tableAddColumn:"Spalte hinzufügen",tableDeleteRow:"Zeile löschen",tableDeleteColumn:"Spalte löschen",tableDestroy:"Tabelle löschen",error:"Error"},sk:{table:"Vytvoriť tabuľky",tableAddRow:"Pridať riadok",tableAddColumn:"Pridať stĺpec",error:"Chyba"},fr:{table:"Insérer un tableau",tableAddRow:"Ajouter des lignes",tableAddColumn:"Ajouter des colonnes",error:"Erreur"},cs:{table:"Vytvořit příkaz Table",tableAddRow:"Přidat řádek",tableAddColumn:"Přidat sloupec",error:"Chyba"},ru:{table:"Вставить таблицу",tableAddRow:"Добавить строки",tableAddColumn:"Добавить столбцы",error:"Ошибка"},ja:{table:"表の挿入",tableAddRow:"行の追加",tableAddColumn:"列の追加",error:"エラー"},tr:{table:"Tablo ekle",tableAddRow:"Satır ekle",tableAddColumn:"Kolon ekle",error:"Hata"}},plugins:{table:{init:function(l){l.o.plugins.table=e.extend(!0,{},t,l.o.plugins.table||{});var a={fn:function(){l.saveRange();var t="table",a=l.o.prefix+"dropdown",d={"class":a+"-"+t+" "+a+" "+l.o.prefix+"fixed-top"};d["data-"+a]=t;var r=e("
",d);if(0===l.$box.find("."+a+"-"+t).length?l.$box.append(r.hide()):r=l.$box.find("."+a+"-"+t),r.html(""),l.$box.find("."+l.o.prefix+"table-button").hasClass(l.o.prefix+"active-button"))r.append(l.buildSubBtn("tableAddRow")),r.append(l.buildSubBtn("tableAddColumn")),r.append(l.buildSubBtn("tableDeleteRow")),r.append(l.buildSubBtn("tableDeleteColumn")),r.append(l.buildSubBtn("tableDestroy"));else{for(var b=e("
"),i=0;i").appendTo(b),u=0;u").appendTo(s);b.find("td").on("mouseover",n),b.find("td").on("mousedown",o),r.append(b),r.append(e("
1x1
"))}l.dropdown(t)}},n=function(t){var l=e(t.target),a=l.parents("table"),n=this.cellIndex,o=this.parentNode.rowIndex;a.find("td").removeClass("active");for(var d=0;d<=o;d+=1)for(var r=0;r<=n;r+=1)a.find("tr:nth-of-type("+(d+1)+")").find("td:nth-of-type("+(r+1)+")").addClass("active");a.next("center").html(n+1+"x"+(o+1))},o=function(t){l.saveRange();var a=e("
");l.o.plugins.table.styler&&a.attr("class",l.o.plugins.table.styler);for(var n=(e(t.target),this.cellIndex),o=this.parentNode.rowIndex,d=0;d<=o;d+=1)for(var r=e("").appendTo(a),b=0;b<=n;b+=1)e("").appendTo(r);l.range.deleteContents(),l.range.insertNode(a[0]),l.$c.trigger("tbwchange")},d={title:l.lang.tableAddRow,text:l.lang.tableAddRow,ico:"row-below",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");if(a.length>0){for(var n=e(""),o=0;o").appendTo(n);n.appendTo(a)}return!0}},r={title:l.lang.tableAddColumn,text:l.lang.tableAddColumn,ico:"col-right",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");return a.length>0&&e(a).find("tr").each(function(){e(this).find("td:last").after("")}),!0}},b={title:l.lang.tableDestroy,text:l.lang.tableDestroy,ico:"table-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");return a.remove(),!0}},i={title:l.lang.tableDeleteRow,text:l.lang.tableDeleteRow,ico:"row-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("tr");return a.remove(),!0}},s={title:l.lang.tableDeleteColumn,text:l.lang.tableDeleteColumn,ico:"col-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table"),n=e(t).closest("td"),o=n.index();return e(a).find("tr").each(function(){e(this).find("td:eq("+o+")").remove()}),!0}};l.addBtnDef("table",a),l.addBtnDef("tableAddRow",d),l.addBtnDef("tableAddColumn",r),l.addBtnDef("tableDeleteRow",i),l.addBtnDef("tableDeleteColumn",s),l.addBtnDef("tableDestroy",b)}}}})}(jQuery); \ No newline at end of file diff --git a/e_lib/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss b/e_lib/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss deleted file mode 100644 index 7f0dfbb0..00000000 --- a/e_lib/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - * Default stylesheet for Trumbowyg editor plugin - * ------------------------ - * @link http://alex-d.github.io/Trumbowyg - * @license MIT - * @author Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - */ - -.trumbowyg-editor table { - width: 100%; - - td { - border: 1px dotted #e7eaec; - padding: 8px; - } -} - -.trumbowyg-dropdown-table { - table { - margin: 10px; - display: inline-block; - } - - table td { - display: inline-block; - height: 20px; - width: 20px; - margin: 1px; - background-color: #fff; - box-shadow: 0 0 0 1px #cecece inset; - - &.active { - background-color: #00b393; - box-shadow: none; - cursor: pointer; - } - } -} diff --git a/e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.css b/e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.css deleted file mode 100644 index cc4a64df..00000000 --- a/e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.css +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - * Trumbowyg plugin stylesheet - * ------------------------ - * @link http://alex-d.github.io/Trumbowyg - * @license MIT - * @author Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - */ - -.trumbowyg-editor table { - width: 100%; } - .trumbowyg-editor table td { - border: 1px dotted #e7eaec; - padding: 8px; } - -.trumbowyg-dropdown-table table { - margin: 10px; - display: inline-block; } - -.trumbowyg-dropdown-table table td { - display: inline-block; - height: 20px; - width: 20px; - margin: 1px; - background-color: #fff; - box-shadow: 0 0 0 1px #cecece inset; } - .trumbowyg-dropdown-table table td.active { - background-color: #00b393; - box-shadow: none; - cursor: pointer; } diff --git a/e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.min.css b/e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.min.css deleted file mode 100644 index 15e2f3ea..00000000 --- a/e_lib/trumbowyg/plugins/table/ui/trumbowyg.table.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/** Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */ -.trumbowyg-editor table{width:100%}.trumbowyg-editor table td{border:1px dotted #e7eaec;padding:8px}.trumbowyg-dropdown-table table{margin:10px;display:inline-block}.trumbowyg-dropdown-table table td{display:inline-block;height:20px;width:20px;margin:1px;background-color:#fff;box-shadow:0 0 0 1px #cecece inset}.trumbowyg-dropdown-table table td.active{background-color:#00b393;box-shadow:none;cursor:pointer} \ No newline at end of file diff --git a/e_lib/trumbowyg/plugins/template/trumbowyg.template.js b/e_lib/trumbowyg/plugins/template/trumbowyg.template.js deleted file mode 100644 index 8d96058b..00000000 --- a/e_lib/trumbowyg/plugins/template/trumbowyg.template.js +++ /dev/null @@ -1,64 +0,0 @@ -(function ($) { - 'use strict'; - - // Adds the language variables - $.extend(true, $.trumbowyg, { - langs: { - en: { - template: 'Template' - }, - fr: { - template: 'Patron' - }, - nl: { - template: 'Sjabloon' - }, - ru: { - template: 'Шаблон' - }, - ja: { - template: 'テンプレート' - }, - tr: { - template: 'Şablon' - } - } - }); - - // Adds the extra button definition - $.extend(true, $.trumbowyg, { - plugins: { - template: { - shouldInit: function (trumbowyg) { - return trumbowyg.o.plugins.hasOwnProperty('templates'); - }, - init: function (trumbowyg) { - trumbowyg.addBtnDef('template', { - dropdown: templateSelector(trumbowyg), - hasIcon: false, - text: trumbowyg.lang.template - }); - } - } - } - }); - - // Creates the template-selector dropdown. - function templateSelector(trumbowyg) { - var available = trumbowyg.o.plugins.templates; - var templates = []; - - $.each(available, function (index, template) { - trumbowyg.addBtnDef('template_' + index, { - fn: function () { - trumbowyg.html(template.html); - }, - hasIcon: false, - title: template.name - }); - templates.push('template_' + index); - }); - - return templates; - } -})(jQuery); diff --git a/e_lib/trumbowyg/plugins/template/trumbowyg.template.min.js b/e_lib/trumbowyg/plugins/template/trumbowyg.template.min.js deleted file mode 100644 index 3ecc68a2..00000000 --- a/e_lib/trumbowyg/plugins/template/trumbowyg.template.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(t){"use strict";function e(e){var n=e.o.plugins.templates,a=[];return t.each(n,function(t,n){e.addBtnDef("template_"+t,{fn:function(){e.html(n.html)},hasIcon:!1,title:n.name}),a.push("template_"+t)}),a}t.extend(!0,t.trumbowyg,{langs:{en:{template:"Template"},fr:{template:"Patron"},nl:{template:"Sjabloon"},ru:{template:"Шаблон"},ja:{template:"テンプレート"},tr:{template:"Şablon"}}}),t.extend(!0,t.trumbowyg,{plugins:{template:{shouldInit:function(t){return t.o.plugins.hasOwnProperty("templates")},init:function(t){t.addBtnDef("template",{dropdown:e(t),hasIcon:!1,text:t.lang.template})}}}})}(jQuery); \ No newline at end of file diff --git a/e_lib/trumbowyg/plugins/upload/trumbowyg.upload.js b/e_lib/trumbowyg/plugins/upload/trumbowyg.upload.js deleted file mode 100644 index 580d2104..00000000 --- a/e_lib/trumbowyg/plugins/upload/trumbowyg.upload.js +++ /dev/null @@ -1,261 +0,0 @@ -/* =========================================================== - * trumbowyg.upload.js v1.2 - * Upload plugin for Trumbowyg - * http://alex-d.github.com/Trumbowyg - * =========================================================== - * Author : Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - * Mod by : Aleksandr-ru - * Twitter : @Aleksandr_ru - * Website : aleksandr.ru - */ - -(function ($) { - 'use strict'; - - var defaultOptions = { - serverPath: '', - fileFieldName: 'fileToUpload', - data: [], // Additional data for ajax [{name: 'key', value: 'value'}] - headers: {}, // Additional headers - xhrFields: {}, // Additional fields - urlPropertyName: 'file', // How to get url from the json response (for instance 'url' for {url: ....}) - statusPropertyName: 'success', // How to get status from the json response - success: undefined, // Success callback: function (data, trumbowyg, $modal, values) {} - error: undefined, // Error callback: function () {} - imageWidthModalEdit: false // Add ability to edit image width - }; - - function getDeep(object, propertyParts) { - var mainProperty = propertyParts.shift(), - otherProperties = propertyParts; - - if (object !== null) { - if (otherProperties.length === 0) { - return object[mainProperty]; - } - - if (typeof object === 'object') { - return getDeep(object[mainProperty], otherProperties); - } - } - return object; - } - - addXhrProgressEvent(); - - $.extend(true, $.trumbowyg, { - langs: { - // jshint camelcase:false - en: { - upload: 'Upload', - file: 'File', - uploadError: 'Error' - }, - sk: { - upload: 'Nahrať', - file: 'Súbor', - uploadError: 'Chyba' - }, - fr: { - upload: 'Envoi', - file: 'Fichier', - uploadError: 'Erreur' - }, - cs: { - upload: 'Nahrát obrázek', - file: 'Soubor', - uploadError: 'Chyba' - }, - zh_cn: { - upload: '上传', - file: '文件', - uploadError: '错误' - }, - zh_tw: { - upload: '上傳', - file: '文件', - uploadError: '錯誤' - }, - ru: { - upload: 'Загрузка', - file: 'Файл', - uploadError: 'Ошибка' - }, - ja: { - upload: 'アップロード', - file: 'ファイル', - uploadError: 'エラー' - }, - pt_br: { - upload: 'Enviar do local', - file: 'Arquivo', - uploadError: 'Erro' - }, - tr: { - upload: 'Yükle', - file: 'Dosya', - uploadError: 'Hata' - } - }, - // jshint camelcase:true - - plugins: { - upload: { - init: function (trumbowyg) { - trumbowyg.o.plugins.upload = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.upload || {}); - var btnDef = { - fn: function () { - trumbowyg.saveRange(); - - var file, - prefix = trumbowyg.o.prefix; - - var fields = { - file: { - type: 'file', - required: true, - attributes: { - accept: 'image/*' - } - }, - alt: { - label: 'description', - value: trumbowyg.getRangeText() - } - }; - - if (trumbowyg.o.plugins.upload.imageWidthModalEdit) { - fields.width = { - value: '' - }; - } - - var $modal = trumbowyg.openModalInsert( - // Title - trumbowyg.lang.upload, - - // Fields - fields, - - // Callback - function (values) { - var data = new FormData(); - data.append(trumbowyg.o.plugins.upload.fileFieldName, file); - - trumbowyg.o.plugins.upload.data.map(function (cur) { - data.append(cur.name, cur.value); - }); - - $.map(values, function (curr, key) { - if (key !== 'file') { - data.append(key, curr); - } - }); - - if ($('.' + prefix + 'progress', $modal).length === 0) { - $('.' + prefix + 'modal-title', $modal) - .after( - $('
', { - 'class': prefix + 'progress' - }).append( - $('
', { - 'class': prefix + 'progress-bar' - }) - ) - ); - } - - $.ajax({ - url: trumbowyg.o.plugins.upload.serverPath, - headers: trumbowyg.o.plugins.upload.headers, - xhrFields: trumbowyg.o.plugins.upload.xhrFields, - type: 'POST', - data: data, - cache: false, - dataType: 'json', - processData: false, - contentType: false, - - progressUpload: function (e) { - $('.' + prefix + 'progress-bar').css('width', Math.round(e.loaded * 100 / e.total) + '%'); - }, - - success: function (data) { - if (trumbowyg.o.plugins.upload.success) { - trumbowyg.o.plugins.upload.success(data, trumbowyg, $modal, values); - } else { - if (!!getDeep(data, trumbowyg.o.plugins.upload.statusPropertyName.split('.'))) { - var url = getDeep(data, trumbowyg.o.plugins.upload.urlPropertyName.split('.')); - trumbowyg.execCmd('insertImage', url); - var $img = $('img[src="' + url + '"]:not([alt])', trumbowyg.$box); - $img.attr('alt', values.alt); - if (trumbowyg.o.imageWidthModalEdit && parseInt(values.width) > 0) { - $img.attr({ - width: values.width - }); - } - setTimeout(function () { - trumbowyg.closeModal(); - }, 250); - trumbowyg.$c.trigger('tbwuploadsuccess', [trumbowyg, data, url]); - } else { - trumbowyg.addErrorOnModalField( - $('input[type=file]', $modal), - trumbowyg.lang[data.message] - ); - trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg, data]); - } - } - }, - - error: trumbowyg.o.plugins.upload.error || function () { - trumbowyg.addErrorOnModalField( - $('input[type=file]', $modal), - trumbowyg.lang.uploadError - ); - trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg]); - } - }); - } - ); - - $('input[type=file]').on('change', function (e) { - try { - // If multiple files allowed, we just get the first. - file = e.target.files[0]; - } catch (err) { - // In IE8, multiple files not allowed - file = e.target.value; - } - }); - } - }; - - trumbowyg.addBtnDef('upload', btnDef); - } - } - } - }); - - function addXhrProgressEvent() { - if (!$.trumbowyg.addedXhrProgressEvent) { // Avoid adding progress event multiple times - var originalXhr = $.ajaxSettings.xhr; - $.ajaxSetup({ - xhr: function () { - var req = originalXhr(), - that = this; - if (req && typeof req.upload === 'object' && that.progressUpload !== undefined) { - req.upload.addEventListener('progress', function (e) { - that.progressUpload(e); - }, false); - } - - return req; - } - }); - $.trumbowyg.addedXhrProgressEvent = true; - } - } -})(jQuery); diff --git a/e_lib/trumbowyg/plugins/upload/trumbowyg.upload.min.js b/e_lib/trumbowyg/plugins/upload/trumbowyg.upload.min.js deleted file mode 100644 index 06150480..00000000 --- a/e_lib/trumbowyg/plugins/upload/trumbowyg.upload.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(r){"use strict";function e(r,a){var o=a.shift(),l=a;if(null!==r){if(0===l.length)return r[o];if("object"==typeof r)return e(r[o],l)}return r}function a(){if(!r.trumbowyg.addedXhrProgressEvent){var e=r.ajaxSettings.xhr;r.ajaxSetup({xhr:function(){var r=e(),a=this;return r&&"object"==typeof r.upload&&void 0!==a.progressUpload&&r.upload.addEventListener("progress",function(r){a.progressUpload(r)},!1),r}}),r.trumbowyg.addedXhrProgressEvent=!0}}var o={serverPath:"",fileFieldName:"fileToUpload",data:[],headers:{},xhrFields:{},urlPropertyName:"file",statusPropertyName:"success",success:void 0,error:void 0,imageWidthModalEdit:!1};a(),r.extend(!0,r.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},sk:{upload:"Nahrať",file:"Súbor",uploadError:"Chyba"},fr:{upload:"Envoi",file:"Fichier",uploadError:"Erreur"},cs:{upload:"Nahrát obrázek",file:"Soubor",uploadError:"Chyba"},zh_cn:{upload:"上传",file:"文件",uploadError:"错误"},zh_tw:{upload:"上傳",file:"文件",uploadError:"錯誤"},ru:{upload:"Загрузка",file:"Файл",uploadError:"Ошибка"},ja:{upload:"アップロード",file:"ファイル",uploadError:"エラー"},pt_br:{upload:"Enviar do local",file:"Arquivo",uploadError:"Erro"},tr:{upload:"Yükle",file:"Dosya",uploadError:"Hata"}},plugins:{upload:{init:function(a){a.o.plugins.upload=r.extend(!0,{},o,a.o.plugins.upload||{});var l={fn:function(){a.saveRange();var o,l=a.o.prefix,t={file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:a.getRangeText()}};a.o.plugins.upload.imageWidthModalEdit&&(t.width={value:""});var i=a.openModalInsert(a.lang.upload,t,function(t){var d=new FormData;d.append(a.o.plugins.upload.fileFieldName,o),a.o.plugins.upload.data.map(function(r){d.append(r.name,r.value)}),r.map(t,function(r,e){"file"!==e&&d.append(e,r)}),0===r("."+l+"progress",i).length&&r("."+l+"modal-title",i).after(r("
",{"class":l+"progress"}).append(r("
",{"class":l+"progress-bar"}))),r.ajax({url:a.o.plugins.upload.serverPath,headers:a.o.plugins.upload.headers,xhrFields:a.o.plugins.upload.xhrFields,type:"POST",data:d,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(e){r("."+l+"progress-bar").css("width",Math.round(100*e.loaded/e.total)+"%")},success:function(o){if(a.o.plugins.upload.success)a.o.plugins.upload.success(o,a,i,t);else if(e(o,a.o.plugins.upload.statusPropertyName.split("."))){var l=e(o,a.o.plugins.upload.urlPropertyName.split("."));a.execCmd("insertImage",l);var d=r('img[src="'+l+'"]:not([alt])',a.$box);d.attr("alt",t.alt),a.o.imageWidthModalEdit&&parseInt(t.width)>0&&d.attr({width:t.width}),setTimeout(function(){a.closeModal()},250),a.$c.trigger("tbwuploadsuccess",[a,o,l])}else a.addErrorOnModalField(r("input[type=file]",i),a.lang[o.message]),a.$c.trigger("tbwuploaderror",[a,o])},error:a.o.plugins.upload.error||function(){a.addErrorOnModalField(r("input[type=file]",i),a.lang.uploadError),a.$c.trigger("tbwuploaderror",[a])}})});r("input[type=file]").on("change",function(r){try{o=r.target.files[0]}catch(e){o=r.target.value}})}};a.addBtnDef("upload",l)}}}})}(jQuery); \ No newline at end of file diff --git a/e_lib/trumbowyg/trumbowyg.fontsize.css b/e_lib/trumbowyg/trumbowyg.fontsize.css deleted file mode 100644 index e2eefb02..00000000 --- a/e_lib/trumbowyg/trumbowyg.fontsize.css +++ /dev/null @@ -1,27 +0,0 @@ -.trumbowyg-fontsize_24px-dropdown-button{ - min-height:25px; -} - -.trumbowyg-fontsize_28px-dropdown-button{ - min-height:29px; -} - -.trumbowyg-fontsize_32px-dropdown-button{ - min-height:33px; -} - -.trumbowyg-fontsize_40px-dropdown-button{ - min-height:41px; -} - -.trumbowyg-fontsize_46px-dropdown-button{ - min-height:47px; -} - -.trumbowyg-fontsize_52px-dropdown-button{ - min-height:53px; -} - -.trumbowyg-fontsize_60px-dropdown-button{ - min-height:61px; -} \ No newline at end of file diff --git a/e_lib/trumbowyg/trumbowyg.fontsize.js b/e_lib/trumbowyg/trumbowyg.fontsize.js deleted file mode 100644 index 7e2fcbe4..00000000 --- a/e_lib/trumbowyg/trumbowyg.fontsize.js +++ /dev/null @@ -1,118 +0,0 @@ -(function ($) { - 'use strict'; - - $.extend(true, $.trumbowyg, { - langs: { - // jshint camelcase:false - en: { - fontsize: 'Font size', - fontsizes: { - 'custom': 'Custom' - } - }, - ko: { - fontsize: '글자 크기', - fontsizes: { - 'custom': '사용자 정의' - } - }, - } - }); - // jshint camelcase:true - - // Add dropdown with font sizes - $.extend(true, $.trumbowyg, { - plugins: { - fontsize: { - init: function (trumbowyg) { - trumbowyg.addBtnDef('fontsize', { - dropdown: buildDropdown(trumbowyg) - }); - } - } - } - }); - - function buildDropdown(trumbowyg) { - var dropdown = []; - var sizes = [ - '8px', - '9px', - '10px', - '11px', - '12px', - '14px', - '16px', - '18px', - '20px', - '24px', - '28px', - '32px', - '40px', - '46px', - '52px', - '60px' - ]; - - $.each(sizes, function (index, size) { - trumbowyg.addBtnDef('fontsize_' + size, { - text: '' + size + '', - hasIcon: false, - fn: function () { - trumbowyg.saveRange(); - var text = trumbowyg.range.startContainer.parentElement; - var selectedText = trumbowyg.getRangeText(); - if ($(text).html() === selectedText) { - $(text).css('font-size', size); - } else { - trumbowyg.range.deleteContents(); - var html = '' + selectedText + ''; - var node = $(html)[0]; - trumbowyg.range.insertNode(node); - } - trumbowyg.saveRange(); - trumbowyg.syncCode(); - trumbowyg.$c.trigger('tbwchange'); - return true; - } - }); - dropdown.push('fontsize_' + size); - }); - - var freeSizeButtonName = 'fontsize_custom', - freeSizeBtnDef = { - fn: function () { - trumbowyg.openModalInsert('Custom Font Size', - { - size: { - label: 'Font Size', - value: '48px' - } - }, - function (values) { - var text = trumbowyg.range.startContainer.parentElement; - var selectedText = trumbowyg.getRangeText(); - if ($(text).html() === selectedText) { - $(text).css('font-size', values.size); - } else { - trumbowyg.range.deleteContents(); - var html = '' + selectedText + ''; - var node = $(html)[0]; - trumbowyg.range.insertNode(node); - } - trumbowyg.saveRange(); - trumbowyg.syncCode(); - trumbowyg.$c.trigger('tbwchange'); - return true; - } - ); - }, - text: '' + trumbowyg.lang.fontsizes.custom + '', - hasIcon: false - }; - trumbowyg.addBtnDef(freeSizeButtonName, freeSizeBtnDef); - dropdown.push(freeSizeButtonName); - - return dropdown; - } -})(jQuery); diff --git a/e_lib/trumbowyg/trumbowyg.js b/e_lib/trumbowyg/trumbowyg.js deleted file mode 100644 index 17d301ec..00000000 --- a/e_lib/trumbowyg/trumbowyg.js +++ /dev/null @@ -1,1823 +0,0 @@ -/** - * Trumbowyg v2.10.0 - A lightweight WYSIWYG editor - * Trumbowyg core file - * ------------------------ - * @link http://alex-d.github.io/Trumbowyg - * @license MIT - * @author Alexandre Demode (Alex-D) - * Twitter : @AlexandreDemode - * Website : alex-d.fr - */ - -jQuery.trumbowyg = { - langs: { - en: { - viewHTML: 'View HTML', - - undo: 'Undo', - redo: 'Redo', - - formatting: 'Formatting', - p: 'Paragraph', - blockquote: 'Quote', - code: 'Code', - header: 'Header', - - bold: 'Bold', - italic: 'Italic', - strikethrough: 'Stroke', - underline: 'Underline', - - strong: 'Strong', - em: 'Emphasis', - del: 'Deleted', - - superscript: 'Superscript', - subscript: 'Subscript', - - unorderedList: 'Unordered list', - orderedList: 'Ordered list', - - insertImage: 'Insert Image', - link: 'Link', - createLink: 'Insert link', - unlink: 'Remove link', - - justifyLeft: 'Align Left', - justifyCenter: 'Align Center', - justifyRight: 'Align Right', - justifyFull: 'Align Justify', - - horizontalRule: 'Insert horizontal rule', - removeformat: 'Remove format', - - fullscreen: 'Fullscreen', - - close: 'Close', - - submit: 'Confirm', - reset: 'Cancel', - - required: 'Required', - description: 'Description', - title: 'Title', - text: 'Text', - target: 'Target', - width: 'Width' - } - }, - - // Plugins - plugins: {}, - - // SVG Path globally - svgPath: null, - - hideButtonTexts: null -}; - -// Makes default options read-only -Object.defineProperty(jQuery.trumbowyg, 'defaultOptions', { - value: { - lang: 'en', - - fixedBtnPane: false, - fixedFullWidth: false, - autogrow: false, - autogrowOnEnter: false, - imageWidthModalEdit: false, - - prefix: 'trumbowyg-', - - semantic: true, - resetCss: false, - removeformatPasted: false, - tagsToRemove: [], - btns: [ - ['viewHTML'], - ['undo', 'redo'], // Only supported in Blink browsers - ['formatting'], - ['strong', 'em', 'del'], - ['superscript', 'subscript'], - ['link'], - ['insertImage'], - ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'], - ['unorderedList', 'orderedList'], - ['horizontalRule'], - ['removeformat'], - ['fullscreen'] - ], - // For custom button definitions - btnsDef: {}, - - inlineElementsSelector: 'a,abbr,acronym,b,caption,cite,code,col,dfn,dir,dt,dd,em,font,hr,i,kbd,li,q,span,strikeout,strong,sub,sup,u', - - pasteHandlers: [], - - // imgDblClickHandler: default is defined in constructor - - plugins: {}, - urlProtocol: false, - minimalLinks: false - }, - writable: false, - enumerable: true, - configurable: false -}); - - -(function (navigator, window, document, $) { - 'use strict'; - - var CONFIRM_EVENT = 'tbwconfirm', - CANCEL_EVENT = 'tbwcancel'; - - $.fn.trumbowyg = function (options, params) { - var trumbowygDataName = 'trumbowyg'; - if (options === Object(options) || !options) { - return this.each(function () { - if (!$(this).data(trumbowygDataName)) { - $(this).data(trumbowygDataName, new Trumbowyg(this, options)); - } - }); - } - if (this.length === 1) { - try { - var t = $(this).data(trumbowygDataName); - switch (options) { - // Exec command - case 'execCmd': - return t.execCmd(params.cmd, params.param, params.forceCss); - - // Modal box - case 'openModal': - return t.openModal(params.title, params.content); - case 'closeModal': - return t.closeModal(); - case 'openModalInsert': - return t.openModalInsert(params.title, params.fields, params.callback); - - // Range - case 'saveRange': - return t.saveRange(); - case 'getRange': - return t.range; - case 'getRangeText': - return t.getRangeText(); - case 'restoreRange': - return t.restoreRange(); - - // Enable/disable - case 'enable': - return t.setDisabled(false); - case 'disable': - return t.setDisabled(true); - - // Toggle - case 'toggle': - return t.toggle(); - - // Destroy - case 'destroy': - return t.destroy(); - - // Empty - case 'empty': - return t.empty(); - - // HTML - case 'html': - return t.html(params); - } - } catch (c) { - } - } - - return false; - }; - - // @param: editorElem is the DOM element - var Trumbowyg = function (editorElem, options) { - var t = this, - trumbowygIconsId = 'trumbowyg-icons', - $trumbowyg = $.trumbowyg; - - // Get the document of the element. It use to makes the plugin - // compatible on iframes. - t.doc = editorElem.ownerDocument || document; - - // jQuery object of the editor - t.$ta = $(editorElem); // $ta : Textarea - t.$c = $(editorElem); // $c : creator - - options = options || {}; - - // Localization management - if (options.lang != null || $trumbowyg.langs[options.lang] != null) { - t.lang = $.extend(true, {}, $trumbowyg.langs.en, $trumbowyg.langs[options.lang]); - } else { - t.lang = $trumbowyg.langs.en; - } - - t.hideButtonTexts = $trumbowyg.hideButtonTexts != null ? $trumbowyg.hideButtonTexts : options.hideButtonTexts; - - // SVG path - var svgPathOption = $trumbowyg.svgPath != null ? $trumbowyg.svgPath : options.svgPath; - t.hasSvg = svgPathOption !== false; - t.svgPath = !!t.doc.querySelector('base') ? window.location.href.split('#')[0] : ''; - if ($('#' + trumbowygIconsId, t.doc).length === 0 && svgPathOption !== false) { - if (svgPathOption == null) { - // Hack to get svgPathOption based on trumbowyg.js path - var scriptElements = document.getElementsByTagName('script'); - for (var i = 0; i < scriptElements.length; i += 1) { - var source = scriptElements[i].src; - var matches = source.match('trumbowyg(\.min)?\.js'); - if (matches != null) { - svgPathOption = source.substring(0, source.indexOf(matches[0])) + 'ui/icons.svg'; - } - } - if (svgPathOption == null) { - console.warn('You must define svgPath: https://goo.gl/CfTY9U'); // jshint ignore:line - } - } - - var div = t.doc.createElement('div'); - div.id = trumbowygIconsId; - t.doc.body.insertBefore(div, t.doc.body.childNodes[0]); - $.ajax({ - async: true, - type: 'GET', - contentType: 'application/x-www-form-urlencoded; charset=UTF-8', - dataType: 'xml', - crossDomain: true, - url: svgPathOption, - data: null, - beforeSend: null, - complete: null, - success: function (data) { - div.innerHTML = new XMLSerializer().serializeToString(data.documentElement); - } - }); - } - - - /** - * When the button is associated to a empty object - * fn and title attributs are defined from the button key value - * - * For example - * foo: {} - * is equivalent to : - * foo: { - * fn: 'foo', - * title: this.lang.foo - * } - */ - var h = t.lang.header, // Header translation - isBlinkFunction = function () { - return (window.chrome || (window.Intl && Intl.v8BreakIterator)) && 'CSS' in window; - }; - t.btnsDef = { - viewHTML: { - fn: 'toggle' - }, - - undo: { - isSupported: isBlinkFunction, - key: 'Z' - }, - redo: { - isSupported: isBlinkFunction, - key: 'Y' - }, - - p: { - fn: 'formatBlock' - }, - blockquote: { - fn: 'formatBlock' - }, - h1: { - fn: 'formatBlock', - title: h + ' 1' - }, - h2: { - fn: 'formatBlock', - title: h + ' 2' - }, - h3: { - fn: 'formatBlock', - title: h + ' 3' - }, - h4: { - fn: 'formatBlock', - title: h + ' 4' - }, - subscript: { - tag: 'sub' - }, - superscript: { - tag: 'sup' - }, - - bold: { - key: 'B', - tag: 'b' - }, - italic: { - key: 'I', - tag: 'i' - }, - underline: { - tag: 'u' - }, - strikethrough: { - tag: 'strike' - }, - - strong: { - fn: 'bold', - key: 'B' - }, - em: { - fn: 'italic', - key: 'I' - }, - del: { - fn: 'strikethrough' - }, - - createLink: { - key: 'K', - tag: 'a' - }, - unlink: {}, - - insertImage: {}, - - justifyLeft: { - tag: 'left', - forceCss: true - }, - justifyCenter: { - tag: 'center', - forceCss: true - }, - justifyRight: { - tag: 'right', - forceCss: true - }, - justifyFull: { - tag: 'justify', - forceCss: true - }, - - unorderedList: { - fn: 'insertUnorderedList', - tag: 'ul' - }, - orderedList: { - fn: 'insertOrderedList', - tag: 'ol' - }, - - horizontalRule: { - fn: 'insertHorizontalRule' - }, - - removeformat: {}, - - fullscreen: { - class: 'trumbowyg-not-disable' - }, - close: { - fn: 'destroy', - class: 'trumbowyg-not-disable' - }, - - // Dropdowns - formatting: { - dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4'], - ico: 'p' - }, - link: { - dropdown: ['createLink', 'unlink'] - } - }; - - // Defaults Options - t.o = $.extend(true, {}, $trumbowyg.defaultOptions, options); - if (!t.o.hasOwnProperty('imgDblClickHandler')) { - t.o.imgDblClickHandler = t.getDefaultImgDblClickHandler(); - } - - t.urlPrefix = t.setupUrlPrefix(); - - t.disabled = t.o.disabled || (editorElem.nodeName === 'TEXTAREA' && editorElem.disabled); - - if (options.btns) { - t.o.btns = options.btns; - } else if (!t.o.semantic) { - t.o.btns[3] = ['bold', 'italic', 'underline', 'strikethrough']; - } - - $.each(t.o.btnsDef, function (btnName, btnDef) { - t.addBtnDef(btnName, btnDef); - }); - - // put this here in the event it would be merged in with options - t.eventNamespace = 'trumbowyg-event'; - - // Keyboard shortcuts are load in this array - t.keys = []; - - // Tag to button dynamically hydrated - t.tagToButton = {}; - t.tagHandlers = []; - - // Admit multiple paste handlers - t.pasteHandlers = [].concat(t.o.pasteHandlers); - - // Check if browser is IE - t.isIE = (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') !== -1); - - t.init(); - }; - - Trumbowyg.prototype = { - DEFAULT_SEMANTIC_MAP: { - 'b': 'strong', - 'i': 'em', - 's': 'del', - 'strike': 'del', - 'div': 'p' - }, - - init: function () { - var t = this; - t.height = t.$ta.height(); - - t.initPlugins(); - - try { - // Disable image resize, try-catch for old IE - t.doc.execCommand('enableObjectResizing', false, false); - t.doc.execCommand('defaultParagraphSeparator', false, 'p'); - } catch (e) { - } - - t.buildEditor(); - t.buildBtnPane(); - - t.fixedBtnPaneEvents(); - - t.buildOverlay(); - - setTimeout(function () { - if (t.disabled) { - t.setDisabled(true); - } - t.$c.trigger('tbwinit'); - }); - }, - - addBtnDef: function (btnName, btnDef) { - this.btnsDef[btnName] = btnDef; - }, - - setupUrlPrefix: function () { - var protocol = this.o.urlProtocol; - if (!protocol) { - return; - } - - if (typeof(protocol) !== 'string') { - return 'https://'; - } - return /:\/\/$/.test(protocol) ? protocol : protocol + '://'; - }, - - buildEditor: function () { - var t = this, - prefix = t.o.prefix, - html = ''; - - t.$box = $('
', { - class: prefix + 'box ' + prefix + 'editor-visible ' + prefix + t.o.lang + ' trumbowyg' - }); - - // $ta = Textarea - // $ed = Editor - t.isTextarea = t.$ta.is('textarea'); - if (t.isTextarea) { - html = t.$ta.val(); - t.$ed = $('
'); - t.$box - .insertAfter(t.$ta) - .append(t.$ed, t.$ta); - } else { - t.$ed = t.$ta; - html = t.$ed.html(); - - t.$ta = $('