| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- (function () {
- var textpattern = (function () {
- 'use strict';
- var Cell = function (initial) {
- var value = initial;
- var get = function () {
- return value;
- };
- var set = function (v) {
- value = v;
- };
- var clone = function () {
- return Cell(get());
- };
- return {
- get: get,
- set: set,
- clone: clone
- };
- };
- var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
- var get = function (patternsState) {
- var setPatterns = function (newPatterns) {
- patternsState.set(newPatterns);
- };
- var getPatterns = function () {
- return patternsState.get();
- };
- return {
- setPatterns: setPatterns,
- getPatterns: getPatterns
- };
- };
- var $_fp2mq2rsjkmcws6f = { get: get };
- var defaultPatterns = [
- {
- start: '*',
- end: '*',
- format: 'italic'
- },
- {
- start: '**',
- end: '**',
- format: 'bold'
- },
- {
- start: '***',
- end: '***',
- format: [
- 'bold',
- 'italic'
- ]
- },
- {
- start: '#',
- format: 'h1'
- },
- {
- start: '##',
- format: 'h2'
- },
- {
- start: '###',
- format: 'h3'
- },
- {
- start: '####',
- format: 'h4'
- },
- {
- start: '#####',
- format: 'h5'
- },
- {
- start: '######',
- format: 'h6'
- },
- {
- start: '1. ',
- cmd: 'InsertOrderedList'
- },
- {
- start: '* ',
- cmd: 'InsertUnorderedList'
- },
- {
- start: '- ',
- cmd: 'InsertUnorderedList'
- }
- ];
- var getPatterns = function (editorSettings) {
- return editorSettings.textpattern_patterns !== undefined ? editorSettings.textpattern_patterns : defaultPatterns;
- };
- var $_1rurpvrtjkmcws6g = { getPatterns: getPatterns };
- var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');
- var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');
- var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
- var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- var sortPatterns = function (patterns) {
- return patterns.sort(function (a, b) {
- if (a.start.length > b.start.length) {
- return -1;
- }
- if (a.start.length < b.start.length) {
- return 1;
- }
- return 0;
- });
- };
- var findPattern = function (patterns, text) {
- for (var i = 0; i < patterns.length; i++) {
- if (text.indexOf(patterns[i].start) !== 0) {
- continue;
- }
- if (patterns[i].end && text.lastIndexOf(patterns[i].end) !== text.length - patterns[i].end.length) {
- continue;
- }
- return patterns[i];
- }
- };
- var isMatchingPattern = function (pattern, text, offset, delta) {
- var textEnd = text.substr(offset - pattern.end.length - delta, pattern.end.length);
- return textEnd === pattern.end;
- };
- var hasContent = function (offset, delta, pattern) {
- return offset - delta - pattern.end.length - pattern.start.length > 0;
- };
- var findEndPattern = function (patterns, text, offset, delta) {
- var pattern, i;
- var sortedPatterns = sortPatterns(patterns);
- for (i = 0; i < sortedPatterns.length; i++) {
- pattern = sortedPatterns[i];
- if (pattern.end !== undefined && isMatchingPattern(pattern, text, offset, delta) && hasContent(offset, delta, pattern)) {
- return pattern;
- }
- }
- };
- var $_beghvss1jkmcws6v = {
- findPattern: findPattern,
- findEndPattern: findEndPattern
- };
- var splitContainer = function (container, pattern, endOffset, startOffset, space) {
- container = startOffset > 0 ? container.splitText(startOffset) : container;
- container.splitText(endOffset - startOffset + pattern.end.length);
- container.deleteData(0, pattern.start.length);
- container.deleteData(container.data.length - pattern.end.length, pattern.end.length);
- return container;
- };
- var patternFromRng = function (patterns, rng, space) {
- if (rng.collapsed === false) {
- return;
- }
- var container = rng.startContainer;
- var text = container.data;
- var delta = space === true ? 1 : 0;
- if (container.nodeType !== 3) {
- return;
- }
- var endPattern = $_beghvss1jkmcws6v.findEndPattern(patterns, text, rng.startOffset, delta);
- if (endPattern === undefined) {
- return;
- }
- var endOffset = text.lastIndexOf(endPattern.end, rng.startOffset - delta);
- var startOffset = text.lastIndexOf(endPattern.start, endOffset - endPattern.end.length);
- endOffset = text.indexOf(endPattern.end, startOffset + endPattern.start.length);
- if (startOffset === -1) {
- return;
- }
- var patternRng = document.createRange();
- patternRng.setStart(container, startOffset);
- patternRng.setEnd(container, endOffset + endPattern.end.length);
- var startPattern = $_beghvss1jkmcws6v.findPattern(patterns, patternRng.toString());
- if (endPattern === undefined || startPattern !== endPattern || container.data.length <= endPattern.start.length + endPattern.end.length) {
- return;
- }
- return {
- pattern: endPattern,
- startOffset: startOffset,
- endOffset: endOffset
- };
- };
- var splitAndApply = function (editor, container, found, space) {
- var formatArray = global$4.isArray(found.pattern.format) ? found.pattern.format : [found.pattern.format];
- var validFormats = global$4.grep(formatArray, function (formatName) {
- var format = editor.formatter.get(formatName);
- return format && format[0].inline;
- });
- if (validFormats.length !== 0) {
- editor.undoManager.transact(function () {
- container = splitContainer(container, found.pattern, found.endOffset, found.startOffset, space);
- formatArray.forEach(function (format) {
- editor.formatter.apply(format, {}, container);
- });
- });
- return container;
- }
- };
- var doApplyInlineFormat = function (editor, patterns, space) {
- var rng = editor.selection.getRng(true);
- var foundPattern = patternFromRng(patterns, rng, space);
- if (foundPattern) {
- return splitAndApply(editor, rng.startContainer, foundPattern, space);
- }
- };
- var applyInlineFormatSpace = function (editor, patterns) {
- return doApplyInlineFormat(editor, patterns, true);
- };
- var applyInlineFormatEnter = function (editor, patterns) {
- return doApplyInlineFormat(editor, patterns, false);
- };
- var applyBlockFormat = function (editor, patterns) {
- var selection, dom, container, firstTextNode, node, format, textBlockElm, pattern, walker, rng, offset;
- selection = editor.selection;
- dom = editor.dom;
- if (!selection.isCollapsed()) {
- return;
- }
- textBlockElm = dom.getParent(selection.getStart(), 'p');
- if (textBlockElm) {
- walker = new global$3(textBlockElm, textBlockElm);
- while (node = walker.next()) {
- if (node.nodeType === 3) {
- firstTextNode = node;
- break;
- }
- }
- if (firstTextNode) {
- pattern = $_beghvss1jkmcws6v.findPattern(patterns, firstTextNode.data);
- if (!pattern) {
- return;
- }
- rng = selection.getRng(true);
- container = rng.startContainer;
- offset = rng.startOffset;
- if (firstTextNode === container) {
- offset = Math.max(0, offset - pattern.start.length);
- }
- if (global$4.trim(firstTextNode.data).length === pattern.start.length) {
- return;
- }
- if (pattern.format) {
- format = editor.formatter.get(pattern.format);
- if (format && format[0].block) {
- firstTextNode.deleteData(0, pattern.start.length);
- editor.formatter.apply(pattern.format, {}, firstTextNode);
- rng.setStart(container, offset);
- rng.collapse(true);
- selection.setRng(rng);
- }
- }
- if (pattern.cmd) {
- editor.undoManager.transact(function () {
- firstTextNode.deleteData(0, pattern.start.length);
- editor.execCommand(pattern.cmd);
- });
- }
- }
- }
- };
- var $_c3c0zdryjkmcws6m = {
- patternFromRng: patternFromRng,
- applyInlineFormatSpace: applyInlineFormatSpace,
- applyInlineFormatEnter: applyInlineFormatEnter,
- applyBlockFormat: applyBlockFormat
- };
- function handleEnter(editor, patterns) {
- var wrappedTextNode, rng;
- wrappedTextNode = $_c3c0zdryjkmcws6m.applyInlineFormatEnter(editor, patterns);
- if (wrappedTextNode) {
- rng = editor.dom.createRng();
- rng.setStart(wrappedTextNode, wrappedTextNode.data.length);
- rng.setEnd(wrappedTextNode, wrappedTextNode.data.length);
- editor.selection.setRng(rng);
- }
- $_c3c0zdryjkmcws6m.applyBlockFormat(editor, patterns);
- }
- function handleInlineKey(editor, patterns) {
- var wrappedTextNode, lastChar, lastCharNode, rng, dom;
- wrappedTextNode = $_c3c0zdryjkmcws6m.applyInlineFormatSpace(editor, patterns);
- if (wrappedTextNode) {
- dom = editor.dom;
- lastChar = wrappedTextNode.data.slice(-1);
- if (/[\u00a0 ]/.test(lastChar)) {
- wrappedTextNode.deleteData(wrappedTextNode.data.length - 1, 1);
- lastCharNode = dom.doc.createTextNode(lastChar);
- dom.insertAfter(lastCharNode, wrappedTextNode.parentNode);
- rng = dom.createRng();
- rng.setStart(lastCharNode, 1);
- rng.setEnd(lastCharNode, 1);
- editor.selection.setRng(rng);
- }
- }
- }
- var checkKeyEvent = function (codes, event, predicate) {
- for (var i = 0; i < codes.length; i++) {
- if (predicate(codes[i], event)) {
- return true;
- }
- }
- };
- var checkKeyCode = function (codes, event) {
- return checkKeyEvent(codes, event, function (code, event) {
- return code === event.keyCode && global$2.modifierPressed(event) === false;
- });
- };
- var checkCharCode = function (chars, event) {
- return checkKeyEvent(chars, event, function (chr, event) {
- return chr.charCodeAt(0) === event.charCode;
- });
- };
- var $_g4f2z3rxjkmcws6k = {
- handleEnter: handleEnter,
- handleInlineKey: handleInlineKey,
- checkCharCode: checkCharCode,
- checkKeyCode: checkKeyCode
- };
- var setup = function (editor, patternsState) {
- var charCodes = [
- ',',
- '.',
- ';',
- ':',
- '!',
- '?'
- ];
- var keyCodes = [32];
- editor.on('keydown', function (e) {
- if (e.keyCode === 13 && !global$2.modifierPressed(e)) {
- $_g4f2z3rxjkmcws6k.handleEnter(editor, patternsState.get());
- }
- }, true);
- editor.on('keyup', function (e) {
- if ($_g4f2z3rxjkmcws6k.checkKeyCode(keyCodes, e)) {
- $_g4f2z3rxjkmcws6k.handleInlineKey(editor, patternsState.get());
- }
- });
- editor.on('keypress', function (e) {
- if ($_g4f2z3rxjkmcws6k.checkCharCode(charCodes, e)) {
- global$1.setEditorTimeout(editor, function () {
- $_g4f2z3rxjkmcws6k.handleInlineKey(editor, patternsState.get());
- });
- }
- });
- };
- var $_6b0tfhrujkmcws6h = { setup: setup };
- global.add('textpattern', function (editor) {
- var patternsState = Cell($_1rurpvrtjkmcws6g.getPatterns(editor.settings));
- $_6b0tfhrujkmcws6h.setup(editor, patternsState);
- return $_fp2mq2rsjkmcws6f.get(patternsState);
- });
- function Plugin () {
- }
- return Plugin;
- }());
- })();
|