diff options
Diffstat (limited to 'addons/website/static/lib/summernote/src/js/editing/Editor.js')
| -rw-r--r-- | addons/website/static/lib/summernote/src/js/editing/Editor.js | 495 |
1 files changed, 0 insertions, 495 deletions
diff --git a/addons/website/static/lib/summernote/src/js/editing/Editor.js b/addons/website/static/lib/summernote/src/js/editing/Editor.js deleted file mode 100644 index 1acd957096d..00000000000 --- a/addons/website/static/lib/summernote/src/js/editing/Editor.js +++ /dev/null @@ -1,495 +0,0 @@ -define([ - 'summernote/core/agent', - 'summernote/core/func', - 'summernote/core/list', - 'summernote/core/dom', - 'summernote/core/range', - 'summernote/core/async', - 'summernote/editing/Style', - 'summernote/editing/Typing', - 'summernote/editing/Table', - 'summernote/editing/Bullet' -], function (agent, func, list, dom, range, async, - Style, Typing, Table, Bullet) { - /** - * Editor - * @class - */ - var Editor = function () { - - var style = new Style(); - var table = new Table(); - var typing = new Typing(); - var bullet = new Bullet(); - - this.style = style; // odoo change for overwrite - this.table = table; // odoo change for overwrite - this.typing = typing; // odoo change for overwrite - this.bullet = bullet; // odoo change for overwrite - - /** - * create range - */ - this.createRange = function ($editable) { - $editable.focus(); - return range.create(); - }; - - /** - * save current range - * - * @param {jQuery} $editable - */ - this.saveRange = function ($editable, thenCollapse) { - var r = range.create(); - if (!r || ($editable[0] !== r.sc && !$.contains($editable[0], r.sc))) { - $editable.focus(); - } - $editable.data('range', range.create()); - if (thenCollapse) { - range.create().collapse().select(); - } - }; - - this.saveNode = function ($editable) { - // copy child node reference - var copy = []; - for (var key = 0, len = $editable[0].childNodes.length; key < len; key++) { - copy.push($editable[0].childNodes[key]); - } - $editable.data('childNodes', copy); - }; - - /** - * restore lately range - * - * @param {jQuery} $editable - */ - this.restoreRange = function ($editable) { - var rng = $editable.data('range'); - if (rng) { - rng.select(); - $editable.focus(); - } - }; - - this.restoreNode = function ($editable) { - $editable.html(''); - var child = $editable.data('childNodes'); - for (var index = 0, len = child.length; index < len; index++) { - $editable[0].appendChild(child[index]); - } - }; - /** - * current style - */ - this.currentStyle = function () { - var rng = range.create(); - return rng ? rng.isOnEditable() && style.current(rng) : false; - }; - - var triggerOnChange = this.triggerOnChange = function ($editable) { - var onChange = $editable.data('callbacks').onChange; - if (onChange) { - onChange($editable.html(), $editable); - } - }; - - /** - * undo - * @param {jQuery} $editable - */ - this.undo = function ($editable) { - $editable.data('NoteHistory').undo(); - triggerOnChange($editable); - }; - - /** - * redo - * @param {jQuery} $editable - */ - this.redo = function ($editable) { - $editable.data('NoteHistory').redo(); - triggerOnChange($editable); - }; - - /** - * after command - * @param {jQuery} $editable - */ - var afterCommand = this.afterCommand = function ($editable) { - $editable.data('NoteHistory').recordUndo(); - triggerOnChange($editable); - }; - - /* jshint ignore:start */ - // native commands(with execCommand), generate function for execCommand - var commands = ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', - 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', - 'formatBlock', 'removeFormat', - 'backColor', 'foreColor', 'insertHorizontalRule', 'fontName']; - - for (var idx = 0, len = commands.length; idx < len; idx ++) { - this[commands[idx]] = (function (sCmd) { - return function ($editable, value) { - document.execCommand(sCmd, false, value); - - afterCommand($editable); - }; - })(commands[idx]); - } - /* jshint ignore:end */ - - /** - * handle tab key - * - * @param {jQuery} $editable - * @param {Object} options - */ - this.tab = function ($editable, options) { - var rng = range.create(); - if (rng.isCollapsed() && rng.isOnCell()) { - table.tab(rng); - } else { - typing.insertTab($editable, rng, options.tabsize); - afterCommand($editable); - } - }; - - /** - * handle shift+tab key - */ - this.untab = function () { - var rng = range.create(); - if (rng.isCollapsed() && rng.isOnCell()) { - table.tab(rng, true); - } - }; - - /** - * insert paragraph - * - * @param {Node} $editable - */ - this.insertParagraph = function ($editable) { - typing.insertParagraph($editable); - afterCommand($editable); - }; - - /** - * @param {jQuery} $editable - */ - this.insertOrderedList = function ($editable) { - bullet.insertOrderedList($editable); - afterCommand($editable); - }; - - /** - * @param {jQuery} $editable - */ - this.insertUnorderedList = function ($editable) { - bullet.insertUnorderedList($editable); - afterCommand($editable); - }; - - /** - * @param {jQuery} $editable - */ - this.indent = function ($editable) { - bullet.indent($editable); - afterCommand($editable); - }; - - /** - * @param {jQuery} $editable - */ - this.outdent = function ($editable) { - bullet.outdent($editable); - afterCommand($editable); - }; - - /** - * insert image - * - * @param {jQuery} $editable - * @param {String} sUrl - */ - this.insertImage = function ($editable, sUrl, filename) { - async.createImage(sUrl, filename).then(function ($image) { - $image.css({ - display: '', - width: Math.min($editable.width(), $image.width()) - }); - range.create().insertNode($image[0]); - afterCommand($editable); - }).fail(function () { - var callbacks = $editable.data('callbacks'); - if (callbacks.onImageUploadError) { - callbacks.onImageUploadError(); - } - }); - }; - - /** - * insert node - * @param {Node} $editable - * @param {Node} node - * @param {Boolean} [isInline] - */ - this.insertNode = function ($editable, node, isInline) { - range.create().insertNode(node, isInline); - afterCommand($editable); - }; - - /** - * insert text - * @param {Node} $editable - * @param {String} text - */ - this.insertText = function ($editable, text) { - var textNode = this.createRange($editable).insertNode(dom.createText(text), true); - range.create(textNode, dom.nodeLength(textNode)).select(); - afterCommand($editable); - }; - - /** - * formatBlock - * - * @param {jQuery} $editable - * @param {String} tagName - */ - this.formatBlock = function ($editable, tagName) { - tagName = agent.isMSIE ? '<' + tagName + '>' : tagName; - document.execCommand('FormatBlock', false, tagName); - afterCommand($editable); - }; - - this.formatPara = function ($editable) { - this.formatBlock($editable, 'P'); - afterCommand($editable); - }; - - /* jshint ignore:start */ - for (var idx = 1; idx <= 6; idx ++) { - this['formatH' + idx] = function (idx) { - return function ($editable) { - this.formatBlock($editable, 'H' + idx); - }; - }(idx); - }; - /* jshint ignore:end */ - - /** - * fontsize - * FIXME: Still buggy - * - * @param {jQuery} $editable - * @param {String} value - px - */ - this.fontSize = function ($editable, value) { - document.execCommand('fontSize', false, 3); - if (agent.isFF) { - // firefox: <font size="3"> to <span style='font-size={value}px;'>, buggy - $editable.find('font[size=3]').removeAttr('size').css('font-size', value + 'px'); - } else { - // chrome: <span style="font-size: medium"> to <span style='font-size={value}px;'> - $editable.find('span').filter(function () { - return this.style.fontSize === 'medium'; - }).css('font-size', value + 'px'); - } - - afterCommand($editable); - }; - - /** - * lineHeight - * @param {jQuery} $editable - * @param {String} value - */ - this.lineHeight = function ($editable, value) { - style.stylePara(range.create(), { - lineHeight: value - }); - afterCommand($editable); - }; - - /** - * unlink - * - * @type command - * - * @param {jQuery} $editable - */ - this.unlink = function ($editable) { - var rng = range.create(); - if (rng.isOnAnchor()) { - var anchor = dom.ancestor(rng.sc, dom.isAnchor); - rng = range.createFromNode(anchor); - rng.select(); - document.execCommand('unlink'); - - afterCommand($editable); - } - }; - - /** - * create link - * - * @type command - * - * @param {jQuery} $editable - * @param {Object} linkInfo - * @param {Object} options - */ - this.createLink = function ($editable, linkInfo, options) { - var linkUrl = linkInfo.url; - var linkText = linkInfo.text; - var isNewWindow = linkInfo.newWindow; - var className = linkInfo.className || null; - var rng = linkInfo.range; - - if (options.onCreateLink) { - linkUrl = options.onCreateLink(linkUrl); - } - - rng = rng.deleteContents(true); - var anchor = dom.ancestor(rng.sc, dom.isAnchor); - - // Create a new link when there is no anchor on range. - if (!anchor) { - anchor = rng.insertNode($('<A>' + linkText + '</A>')[0], true); - } - $(anchor).html(linkText).attr({ - 'href': linkUrl, - 'target': isNewWindow ? '_blank' : null, - 'class': className - }); - - range.createFromNode(anchor).select(); - afterCommand($editable); - }; - - /** - * returns link info - * - * @return {Object} - */ - this.getLinkInfo = function ($editable) { - $editable.focus(); - - var rng = range.create().expand(dom.isAnchor); - - // Get the first anchor on range(for edit). - var $anchor = $(list.head(rng.nodes(dom.isAnchor))); - - return { - range: rng, - text: rng.toString(), - isNewWindow: $anchor.length ? $anchor.attr('target') === '_blank' : true, - url: $anchor.length ? $anchor.attr('href') : '' - }; - }; - - this.color = function ($editable, sObjColor) { - var oColor = JSON.parse(sObjColor); - var foreColor = oColor.foreColor, backColor = oColor.backColor; - - if (foreColor) { document.execCommand('foreColor', false, foreColor); } - if (backColor) { document.execCommand('backColor', false, backColor); } - - afterCommand($editable); - }; - - this.insertTable = function ($editable, sDim) { - var dimension = sDim.split('x'); - var rng = range.create(); - rng = rng.deleteContents(); - rng.insertNode(table.createTable(dimension[0], dimension[1])); - afterCommand($editable); - }; - - /** - * @return {Node} image from the current range selection - */ - function getImgTarget () { - var rng = range.create(); - var target = rng.sc.childNodes.length && rng.sc.childNodes[rng.so] || rng.sc; - return target; - } - - /** - * @param {jQuery} $editable - * @param {String} value - */ - this.floatMe = function ($editable, value) { - var $target = $( getImgTarget() ); - $target.css('float', value); - afterCommand($editable); - }; - - this.imageShape = function ($editable, value) { - var $target = $( getImgTarget() ); - $target.removeClass('img-rounded img-circle img-thumbnail'); - - if (value) { - $target.addClass(value); - } - - afterCommand($editable); - }; - - /** - * resize overlay element - * @param {jQuery} $editable - * @param {String} value - */ - this.resize = function ($editable, value) { - var $target = $( getImgTarget() ); - $target.css({ - width: value * 100 + '%', - height: '' - }); - - afterCommand($editable); - }; - - /** - * @param {Position} pos - * @param {jQuery} $target - target element - * @param {Boolean} [bKeepRatio] - keep ratio - */ - this.resizeTo = function (pos, $target, bKeepRatio) { - var imageSize; - if (bKeepRatio) { - var newRatio = pos.y / pos.x; - var ratio = $target.data('ratio'); - imageSize = { - width: ratio > newRatio ? pos.x : pos.y / ratio, - height: ratio > newRatio ? pos.x * ratio : pos.y - }; - } else { - imageSize = { - width: pos.x, - height: pos.y - }; - } - - $target.css(imageSize); - }; - - /** - * remove media object - * - * @param {jQuery} $editable - * @param {String} value - dummy argument (for keep interface) - */ - this.removeMedia = function ($editable, value) { - var $target = $( getImgTarget() ); - $target.detach(); - - afterCommand($editable); - }; - }; - - return Editor; -}); |
