Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
import $ from 'jquery'; import lists from '../core/lists'; import func from '../core/func'; import dom from '../core/dom'; import range from '../core/range'; export default class Bullet { /** * toggle ordered list */ insertOrderedList(editable) { this.toggleList('OL', editable); } /** * toggle unordered list */ insertUnorderedList(editable) { this.toggleList('UL', editable); } /** * indent */ indent(editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); const paras = rng.nodes(dom.isPara, { includeAncestor: true }); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $.each(clustereds, (idx, paras) => { const head = lists.head(paras); if (dom.isLi(head)) { const previousList = this.findList(head.previousSibling); if (previousList) { paras .map(para => previousList.appendChild(para)); } else { this.wrapList(paras, head.parentNode.nodeName); paras .map((para) => para.parentNode) .map((para) => this.appendToPrevious(para)); } } else { $.each(paras, (idx, para) => { $(para).css('marginLeft', (idx, val) => { return (parseInt(val, 10) || 0) + 25; }); }); } }); rng.select(); } /** * outdent */ outdent(editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); const paras = rng.nodes(dom.isPara, { includeAncestor: true }); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); $.each(clustereds, (idx, paras) => { const head = lists.head(paras); if (dom.isLi(head)) { this.releaseList([paras]); } else { $.each(paras, (idx, para) => { $(para).css('marginLeft', (idx, val) => { val = (parseInt(val, 10) || 0); return val > 25 ? val - 25 : ''; }); }); } }); rng.select(); } /** * toggle list * * @param {String} listName - OL or UL */ toggleList(listName, editable) { const rng = range.create(editable).wrapBodyInlineWithPara(); let paras = rng.nodes(dom.isPara, { includeAncestor: true }); const bookmark = rng.paraBookmark(paras); const clustereds = lists.clusterBy(paras, func.peq2('parentNode')); // paragraph to list if (lists.find(paras, dom.isPurePara)) { let wrappedParas = []; $.each(clustereds, (idx, paras) => { wrappedParas = wrappedParas.concat(this.wrapList(paras, listName)); }); paras = wrappedParas; // list to paragraph or change list style } else { const diffLists = rng.nodes(dom.isList, { includeAncestor: true, }).filter((listNode) => { return !$.nodeName(listNode, listName); }); if (diffLists.length) { $.each(diffLists, (idx, listNode) => { dom.replace(listNode, listName); }); } else { paras = this.releaseList(clustereds, true); } } range.createFromParaBookmark(bookmark, paras).select(); } /** * @param {Node[]} paras * @param {String} listName * @return {Node[]} */ wrapList(paras, listName) { const head = lists.head(paras); const last = lists.last(paras); const prevList = dom.isList(head.previousSibling) && head.previousSibling; const nextList = dom.isList(last.nextSibling) && last.nextSibling; const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last); // P to LI paras = paras.map((para) => { return dom.isPurePara(para) ? dom.replace(para, 'LI') : para; }); // append to list(