summaryrefslogtreecommitdiff
path: root/addons/website/static/lib/summernote/src/js/editing/Editor.js
diff options
context:
space:
mode:
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.js495
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;
-});