UNPKG

alpaca

Version:

Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide

94 lines (79 loc) 2.69 kB
define([ 'summernote/base/core/dom', 'summernote/base/core/range', 'summernote/base/editing/Bullet' ], function (dom, range, Bullet) { /** * @class editing.Typing * * Typing * */ var Typing = function () { // a Bullet instance to toggle lists off var bullet = new Bullet(); /** * insert tab * * @param {WrappedRange} rng * @param {Number} tabsize */ this.insertTab = function (rng, tabsize) { var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR)); rng = rng.deleteContents(); rng.insertNode(tab, true); rng = range.create(tab, tabsize); rng.select(); }; /** * insert paragraph */ this.insertParagraph = function (editable) { var rng = range.create(editable); // deleteContents on range. rng = rng.deleteContents(); // Wrap range if it needs to be wrapped by paragraph rng = rng.wrapBodyInlineWithPara(); // finding paragraph var splitRoot = dom.ancestor(rng.sc, dom.isPara); var nextPara; // on paragraph: split paragraph if (splitRoot) { // if it is an empty line with li if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) { // toogle UL/OL and escape bullet.toggleList(splitRoot.parentNode.nodeName); return; // if it is an empty line with para on blockquote } else if (dom.isEmpty(splitRoot) && dom.isPara(splitRoot) && dom.isBlockquote(splitRoot.parentNode)) { // escape blockquote dom.insertAfter(splitRoot, splitRoot.parentNode); nextPara = splitRoot; // if new line has content (not a line break) } else { nextPara = dom.splitTree(splitRoot, rng.getStartPoint()); var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor); emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor)); $.each(emptyAnchors, function (idx, anchor) { dom.remove(anchor); }); // replace empty heading or pre with P tag if ((dom.isHeading(nextPara) || dom.isPre(nextPara)) && dom.isEmpty(nextPara)) { nextPara = dom.replace(nextPara, 'p'); } } // no paragraph: insert empty paragraph } else { var next = rng.sc.childNodes[rng.so]; nextPara = $(dom.emptyPara)[0]; if (next) { rng.sc.insertBefore(nextPara, next); } else { rng.sc.appendChild(nextPara); } } range.create(nextPara, 0).normalize().select().scrollIntoView(editable); }; }; return Typing; });