@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
374 lines (279 loc) • 11.9 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ({
/***/ 0:
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(966);
/***/ }),
/***/ 3:
/***/ (function(module, exports) {
module.exports = function() { throw new Error("define cannot be used indirect"); };
/***/ }),
/***/ 962:
/***/ (function(module, exports) {
module.exports = require("./formatblock");
/***/ }),
/***/ 966:
/***/ (function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(962) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
})(function(){
(function($) {
// Imports ================================================================
var kendo = window.kendo,
extend = $.extend,
editorNS = kendo.ui.editor,
dom = editorNS.Dom,
Command = editorNS.Command,
Tool = editorNS.Tool,
BlockFormatter = editorNS.BlockFormatter,
normalize = dom.normalize,
RangeUtils = editorNS.RangeUtils,
registerTool = editorNS.EditorUtils.registerTool;
var ParagraphCommand = Command.extend({
init: function(options) {
this.options = options;
Command.fn.init.call(this, options);
},
_insertMarker: function(doc, range) {
var marker = dom.create(doc, 'a'), container;
marker.className = "k-marker";
range.insertNode(marker);
if (!marker.parentNode) {
// inserting paragraph in Firefox full body range
container = range.commonAncestorContainer;
container.innerHTML = "";
container.appendChild(marker);
}
normalize(marker.parentNode);
return marker;
},
_moveFocus: function(range, candidate) {
if (dom.isEmpty(candidate)) {
range.setStartBefore(candidate);
} else {
range.selectNodeContents(candidate);
var focusNode = RangeUtils.textNodes(range)[0];
if (!focusNode) {
while (candidate.childNodes.length && !dom.is(candidate.firstChild, "br")) {
candidate = candidate.firstChild;
}
focusNode = candidate;
}
if (dom.isEmpty(focusNode)) {
range.setStartBefore(focusNode);
} else {
if (dom.emptyNode(focusNode)) {
focusNode.innerHTML = "\ufeff";
}
var startNode = focusNode.firstChild || focusNode;
if (dom.isDataNode(startNode)) {
range.setStart(startNode, 0);
} else {
range.setStartBefore(startNode);
}
}
}
},
shouldTrim: function(range) {
var blocks = 'p,h1,h2,h3,h4,h5,h6'.split(','),
startInBlock = dom.parentOfType(range.startContainer, blocks),
endInBlock = dom.parentOfType(range.endContainer, blocks);
return (startInBlock && !endInBlock) || (!startInBlock && endInBlock);
},
_blankAfter: function (node) {
while (node && (dom.isMarker(node) || dom.stripBom(node.nodeValue) === "")) {
node = node.nextSibling;
}
return !node;
},
exec: function () {
var range = this.getRange(),
doc = RangeUtils.documentFromRange(range),
parent, previous, next,
emptyParagraphContent = editorNS.emptyElementContent,
paragraph, marker, li, heading, tableNode, rng,
shouldTrim;
this.expandImmutablesIn(range);
shouldTrim = this.shouldTrim(range);
range.deleteContents();
marker = this._insertMarker(doc, range);
dom.stripBomNode(marker.previousSibling);
dom.stripBomNode(marker.nextSibling);
li = dom.closestEditableOfType(marker, ['li']);
heading = dom.closestEditableOfType(marker, 'h1,h2,h3,h4,h5,h6'.split(','));
tableNode = dom.is(marker.parentNode, 'table') && marker.parentNode;
if (li) {
// hitting 'enter' in empty li
if (dom.emptyNode(li)) {
paragraph = dom.create(doc, 'p');
if (dom.next(li)) {
rng = range.cloneRange();
rng.selectNode(li);
RangeUtils.split(rng, li.parentNode);
}
var br = $("br", li);
if (br.length == 1) {
br.remove();
}
var parentNode = li.parentNode;
var parentChildrenLength = li.parentNode.children.length;
var firstChild = parentChildrenLength > 1 && li.childNodes.length == 1 && li.children[0];
dom.insertAfter(paragraph, parentNode);
dom.remove(parentChildrenLength == 1 ? li.parentNode : li);
if (firstChild && firstChild !== marker) {
paragraph.appendChild(firstChild);
paragraph.appendChild(marker);
} else {
paragraph.innerHTML = emptyParagraphContent;
}
next = paragraph;
}
} else if (heading && this._blankAfter(marker)) {
paragraph = this._insertParagraphAfter(heading);
dom.remove(marker);
next = paragraph;
} else if (tableNode) {
paragraph = this._insertParagraphAfter(tableNode);
dom.remove(marker);
next = paragraph;
}
if (!next) {
if (!(li || heading)) {
new BlockFormatter([{ tags: ['p']}]).apply([marker]);
}
range.selectNode(marker);
parent = dom.parentOfType(marker, [li ? 'li' : heading ? dom.name(heading) : 'p']);
RangeUtils.split(range, parent, shouldTrim);
previous = parent.previousSibling;
if (dom.is(previous, 'li') && previous.firstChild && !dom.is(previous.firstChild, 'br')) {
previous = previous.firstChild;
}
next = parent.nextSibling;
this.clean(previous, { links: true });
this.clean(next, { links: true });
if (dom.is(next, 'li') && next.firstChild && !dom.is(next.firstChild, 'br')) {
next = next.firstChild;
}
dom.remove(parent);
// normalize updates the caret display in Gecko
normalize(previous);
}
normalize(next);
this._moveFocus(range, next);
range.collapse(true);
dom.scrollTo(next, true);
RangeUtils.selectRange(range);
},
_insertParagraphAfter: function (node) {
var range = this.getRange();
var doc = RangeUtils.documentFromRange(range);
var emptyElementContent = editorNS.emptyElementContent;
var paragraph = dom.create(doc, 'p');
dom.insertAfter(paragraph, node);
paragraph.innerHTML = emptyElementContent;
return paragraph;
},
clean: function(node, options) {
var root = node;
if (node.firstChild && dom.is(node.firstChild, 'br')) {
dom.remove(node.firstChild);
}
if (dom.isDataNode(node) && !node.nodeValue) {
node = node.parentNode;
}
if (node) {
var siblings = false;
while (node.firstChild && node.firstChild.nodeType == 1) {
siblings = siblings || (dom.significantNodes(node.childNodes).length > 1);
node = node.firstChild;
}
if (!dom.isEmpty(node) && /^\s*$/.test(node.innerHTML) && !siblings) {
$(root).find(".k-br").remove();
node.innerHTML = editorNS.emptyElementContent;
}
if (options && options.links) {
while (node != root) {
if (dom.is(node, "a") && dom.emptyNode(node)) {
dom.unwrap(node);
break;
}
node = node.parentNode;
}
}
}
}
});
var NewLineCommand = Command.extend({
init: function(options) {
this.options = options;
Command.fn.init.call(this, options);
},
exec: function () {
var range = this.getRange();
this.expandImmutablesIn(range);
var br = dom.create(RangeUtils.documentFromRange(range), 'br');
var node = range.startContainer;
var filler;
var browser = kendo.support.browser;
var oldIE = browser.msie && browser.version < 11;
var tableNode = dom.is(node, 'table') && node;
range.deleteContents();
if (tableNode) {
dom.insertAfter(br, tableNode);
} else {
range.insertNode(br);
}
normalize(br.parentNode);
if (!oldIE && (!br.nextSibling || dom.isWhitespace(br.nextSibling))) {
// Gecko and WebKit cannot put the caret after only one br.
filler = br.cloneNode(true);
filler.className = 'k-br';
dom.insertAfter(filler, br);
}
range.setStartAfter(br);
range.collapse(true);
dom.scrollTo(br.nextSibling || br, true);
RangeUtils.selectRange(range);
}
});
extend(editorNS, {
ParagraphCommand: ParagraphCommand,
NewLineCommand: NewLineCommand
});
registerTool("insertLineBreak", new Tool({ key: 13, shift: true, command: NewLineCommand }));
registerTool("insertParagraph", new Tool({ key: 13, command: ParagraphCommand }));
})(window.kendo.jQuery);
}, __webpack_require__(3));
/***/ })
/******/ });