Skip to content

Commit

Permalink
Merge pull request #1351 from summernote/minor/reduce-duplication
Browse files Browse the repository at this point in the history
Reduce code with wrapCommand
  • Loading branch information
hackerwins committed Oct 1, 2015
2 parents ed192b4 + cff1034 commit 30ea820
Showing 1 changed file with 47 additions and 78 deletions.
125 changes: 47 additions & 78 deletions src/js/base/module/Editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -250,43 +250,46 @@ define([
}
};

/**
* wrapCommand
*
* run given function between beforeCommand and afterCommand
*/
this.wrapCommand = function (fn) {
return function () {
beforeCommand();
fn.apply(self, arguments);
afterCommand();
};
};

/**
* insertParagraph
*
* insert paragraph
*/
this.insertParagraph = function () {
beforeCommand();
this.insertParagraph = this.wrapCommand(function () {
typing.insertParagraph($editable);
afterCommand();
};
});

/**
* insertOrderedList
*/
this.insertOrderedList = function () {
beforeCommand();
this.insertOrderedList = this.wrapCommand(function () {
bullet.insertOrderedList($editable);
afterCommand();
};
});

this.insertUnorderedList = function () {
beforeCommand();
this.insertUnorderedList = this.wrapCommand(function () {
bullet.insertUnorderedList($editable);
afterCommand();
};
});

this.indent = function () {
beforeCommand();
this.indent = this.wrapCommand(function () {
bullet.indent($editable);
afterCommand();
};
});

this.outdent = function () {
beforeCommand();
this.outdent = this.wrapCommand(function () {
bullet.outdent($editable);
afterCommand();
};
});

/**
* insert image
Expand All @@ -313,52 +316,42 @@ define([
* insert node
* @param {Node} node
*/
this.insertNode = function (node) {
beforeCommand();
this.insertNode = this.wrapCommand(function (node) {
range.create().insertNode(node);
range.createFromNodeAfter(node).select();
afterCommand();
};
});

/**
* insert text
* @param {String} text
*/
this.insertText = function (text) {
beforeCommand();
this.insertText = this.wrapCommand(function (text) {
var textNode = range.create().insertNode(dom.createText(text));
range.create(textNode, dom.nodeLength(textNode)).select();
afterCommand();
};
});

/**
* paste HTML
* @param {String} markup
*/
this.pasteHTML = function (markup) {
beforeCommand();
this.pasteHTML = this.wrapCommand(function (markup) {
var contents = range.create().pasteHTML(markup);
range.createFromNodeAfter(list.last(contents)).select();
afterCommand();
};
});

/**
* formatBlock
*
* @param {String} tagName
*/
this.formatBlock = function (tagName) {
beforeCommand();
this.formatBlock = this.wrapCommand(function (tagName) {
// [workaround] for MSIE, IE need `<`
tagName = agent.isMSIE ? '<' + tagName + '>' : tagName;
document.execCommand('FormatBlock', false, tagName);
afterCommand();
};
});

this.formatPara = function () {
beforeCommand();
this.formatBlock('P');
afterCommand();
};

/* jshint ignore:start */
Expand Down Expand Up @@ -406,17 +399,13 @@ define([
/**
* insert horizontal rule
*/
this.insertHorizontalRule = function () {
beforeCommand();

this.insertHorizontalRule = this.wrapCommand(function () {
var rng = range.create();
var hrNode = rng.insertNode($('<HR/>')[0]);
if (hrNode.nextSibling) {
range.create(hrNode.nextSibling, 0).normalize().select();
}

afterCommand();
};
});

/**
* remove bogus node and character
Expand Down Expand Up @@ -445,13 +434,11 @@ define([
* lineHeight
* @param {String} value
*/
this.lineHeight = function (value) {
beforeCommand();
this.lineHeight = this.wrapCommand(function (value) {
style.stylePara(range.create(), {
lineHeight: value
});
afterCommand();
};
});

/**
* unlink
Expand All @@ -476,15 +463,13 @@ define([
*
* @param {Object} linkInfo
*/
this.createLink = function (linkInfo) {
this.createLink = this.wrapCommand(function (linkInfo) {
var linkUrl = linkInfo.url;
var linkText = linkInfo.text;
var isNewWindow = linkInfo.isNewWindow;
var rng = linkInfo.range || this.createRange();
var isTextChanged = rng.toString() !== linkText;

beforeCommand();

if (options.onCreateLink) {
linkUrl = options.onCreateLink(linkUrl);
}
Expand Down Expand Up @@ -522,9 +507,7 @@ define([
endPoint.node,
endPoint.offset
).select();

afterCommand();
};
});

/**
* returns link info
Expand Down Expand Up @@ -558,59 +541,47 @@ define([
* @param {String} sObjColor.foreColor foreground color
* @param {String} sObjColor.backColor background color
*/
this.color = function (colorInfo) {
this.color = this.wrapCommand(function (colorInfo) {
var foreColor = colorInfo.foreColor;
var backColor = colorInfo.backColor;

beforeCommand();

if (foreColor) { document.execCommand('foreColor', false, foreColor); }
if (backColor) { document.execCommand('backColor', false, backColor); }

afterCommand();
};
});

/**
* insert Table
*
* @param {String} sDim dimension of table (ex : "5x5")
*/
this.insertTable = function (sDim) {
this.insertTable = this.wrapCommand(function (sDim) {
var dimension = sDim.split('x');
beforeCommand();

var rng = range.create().deleteContents();
rng.insertNode(table.createTable(dimension[0], dimension[1], options));
afterCommand();
};
});

/**
* float me
*
* @param {String} value
*/
this.floatMe = function (value) {
beforeCommand();
this.floatMe = this.wrapCommand(function (value) {
var $target = $(this.restoreTarget());
$target.css('float', value);
afterCommand();
};
});

/**
* resize overlay element
* @param {String} value
*/
this.resize = function (value) {
beforeCommand();

this.resize = this.wrapCommand(function (value) {
var $target = $(this.restoreTarget());
$target.css({
width: value * 100 + '%',
height: ''
});

afterCommand();
};
});

/**
* @param {Position} pos
Expand Down Expand Up @@ -639,12 +610,10 @@ define([
/**
* remove media object
*/
this.removeMedia = function () {
beforeCommand();
this.removeMedia = this.wrapCommand(function () {
var $target = $(this.restoreTarget()).detach();
summernote.triggerEvent('media.delete', $target, $editable);
afterCommand();
};
});

/**
* set focus
Expand Down

0 comments on commit 30ea820

Please sign in to comment.