123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872 |
- /**
- * Copyright (c) Tiny Technologies, Inc. All rights reserved.
- * Licensed under the LGPL or a commercial license.
- * For LGPL see License.txt in the project root for license information.
- * For commercial licenses see https://www.tiny.cloud/
- *
- * Version: 5.2.0 (2020-02-13)
- */
- (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 __assign = function () {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s)
- if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- function isContentEditableFalse(node) {
- return node && node.nodeType === 1 && node.contentEditable === 'false';
- }
- function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) {
- var m;
- var matches = [];
- var text, count = 0, doc;
- var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap;
- doc = node.ownerDocument;
- blockElementsMap = schema.getBlockElements();
- hiddenTextElementsMap = schema.getWhiteSpaceElements();
- shortEndedElementsMap = schema.getShortEndedElements();
- function getMatchIndexes(m, captureGroup) {
- captureGroup = captureGroup || 0;
- if (!m[0]) {
- throw new Error('findAndReplaceDOMText cannot handle zero-length matches');
- }
- var index = m.index;
- if (captureGroup > 0) {
- var cg = m[captureGroup];
- if (!cg) {
- throw new Error('Invalid capture group');
- }
- index += m[0].indexOf(cg);
- m[0] = cg;
- }
- return [
- index,
- index + m[0].length,
- [m[0]]
- ];
- }
- function getText(node) {
- var txt;
- if (node.nodeType === 3) {
- return node.data;
- }
- if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) {
- return '';
- }
- txt = '';
- if (isContentEditableFalse(node)) {
- return '\n';
- }
- if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) {
- txt += '\n';
- }
- if (node = node.firstChild) {
- do {
- txt += getText(node);
- } while (node = node.nextSibling);
- }
- return txt;
- }
- function stepThroughMatches(node, matches, replaceFn) {
- var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0;
- out:
- while (true) {
- if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) {
- atIndex++;
- }
- if (curNode.nodeType === 3) {
- if (!endNode && curNode.length + atIndex >= matchLocation[1]) {
- endNode = curNode;
- endNodeIndex = matchLocation[1] - atIndex;
- } else if (startNode) {
- innerNodes.push(curNode);
- }
- if (!startNode && curNode.length + atIndex > matchLocation[0]) {
- startNode = curNode;
- startNodeIndex = matchLocation[0] - atIndex;
- }
- atIndex += curNode.length;
- }
- if (startNode && endNode) {
- curNode = replaceFn({
- startNode: startNode,
- startNodeIndex: startNodeIndex,
- endNode: endNode,
- endNodeIndex: endNodeIndex,
- innerNodes: innerNodes,
- match: matchLocation[2],
- matchIndex: matchIndex
- });
- atIndex -= endNode.length - endNodeIndex;
- startNode = null;
- endNode = null;
- innerNodes = [];
- matchLocation = matches.shift();
- matchIndex++;
- if (!matchLocation) {
- break;
- }
- } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) {
- if (!isContentEditableFalse(curNode)) {
- curNode = curNode.firstChild;
- continue;
- }
- } else if (curNode.nextSibling) {
- curNode = curNode.nextSibling;
- continue;
- }
- while (true) {
- if (curNode.nextSibling) {
- curNode = curNode.nextSibling;
- break;
- } else if (curNode.parentNode !== node) {
- curNode = curNode.parentNode;
- } else {
- break out;
- }
- }
- }
- }
- function genReplacer(nodeName) {
- var makeReplacementNode;
- if (typeof nodeName !== 'function') {
- var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName);
- makeReplacementNode = function (fill, matchIndex) {
- var clone = stencilNode_1.cloneNode(false);
- clone.setAttribute('data-mce-index', matchIndex);
- if (fill) {
- clone.appendChild(doc.createTextNode(fill));
- }
- return clone;
- };
- } else {
- makeReplacementNode = nodeName;
- }
- return function (range) {
- var before;
- var after;
- var parentNode;
- var startNode = range.startNode;
- var endNode = range.endNode;
- var matchIndex = range.matchIndex;
- if (startNode === endNode) {
- var node_1 = startNode;
- parentNode = node_1.parentNode;
- if (range.startNodeIndex > 0) {
- before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex));
- parentNode.insertBefore(before, node_1);
- }
- var el = makeReplacementNode(range.match[0], matchIndex);
- parentNode.insertBefore(el, node_1);
- if (range.endNodeIndex < node_1.length) {
- after = doc.createTextNode(node_1.data.substring(range.endNodeIndex));
- parentNode.insertBefore(after, node_1);
- }
- node_1.parentNode.removeChild(node_1);
- return el;
- }
- before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex));
- after = doc.createTextNode(endNode.data.substring(range.endNodeIndex));
- var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex);
- for (var i = 0, l = range.innerNodes.length; i < l; ++i) {
- var innerNode = range.innerNodes[i];
- var innerEl = makeReplacementNode(innerNode.data, matchIndex);
- innerNode.parentNode.replaceChild(innerEl, innerNode);
- }
- var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex);
- parentNode = startNode.parentNode;
- parentNode.insertBefore(before, startNode);
- parentNode.insertBefore(elA, startNode);
- parentNode.removeChild(startNode);
- parentNode = endNode.parentNode;
- parentNode.insertBefore(elB, endNode);
- parentNode.insertBefore(after, endNode);
- parentNode.removeChild(endNode);
- return elB;
- };
- }
- text = getText(node);
- if (!text) {
- return;
- }
- if (regex.global) {
- while (m = regex.exec(text)) {
- matches.push(getMatchIndexes(m, captureGroup));
- }
- } else {
- m = text.match(regex);
- matches.push(getMatchIndexes(m, captureGroup));
- }
- if (matches.length) {
- count = matches.length;
- stepThroughMatches(node, matches, genReplacer(replacementNode));
- }
- return count;
- }
- var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText };
- var getElmIndex = function (elm) {
- var value = elm.getAttribute('data-mce-index');
- if (typeof value === 'number') {
- return '' + value;
- }
- return value;
- };
- var markAllMatches = function (editor, currentSearchState, regex) {
- var node, marker;
- marker = editor.dom.create('span', { 'data-mce-bogus': 1 });
- marker.className = 'mce-match-marker';
- node = editor.getBody();
- done(editor, currentSearchState, false);
- return FindReplaceText.findAndReplaceDOMText(regex, node, marker, false, editor.schema);
- };
- var unwrap = function (node) {
- var parentNode = node.parentNode;
- if (node.firstChild) {
- parentNode.insertBefore(node.firstChild, node);
- }
- node.parentNode.removeChild(node);
- };
- var findSpansByIndex = function (editor, index) {
- var nodes;
- var spans = [];
- nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));
- if (nodes.length) {
- for (var i = 0; i < nodes.length; i++) {
- var nodeIndex = getElmIndex(nodes[i]);
- if (nodeIndex === null || !nodeIndex.length) {
- continue;
- }
- if (nodeIndex === index.toString()) {
- spans.push(nodes[i]);
- }
- }
- }
- return spans;
- };
- var moveSelection = function (editor, currentSearchState, forward) {
- var searchState = currentSearchState.get();
- var testIndex = searchState.index;
- var dom = editor.dom;
- forward = forward !== false;
- if (forward) {
- if (testIndex + 1 === searchState.count) {
- testIndex = 0;
- } else {
- testIndex++;
- }
- } else {
- if (testIndex - 1 === -1) {
- testIndex = searchState.count - 1;
- } else {
- testIndex--;
- }
- }
- dom.removeClass(findSpansByIndex(editor, searchState.index), 'mce-match-marker-selected');
- var spans = findSpansByIndex(editor, testIndex);
- if (spans.length) {
- dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');
- editor.selection.scrollIntoView(spans[0]);
- return testIndex;
- }
- return -1;
- };
- var removeNode = function (dom, node) {
- var parent = node.parentNode;
- dom.remove(node);
- if (dom.isEmpty(parent)) {
- dom.remove(parent);
- }
- };
- var escapeSearchText = function (text, wholeWord) {
- var escapedText = text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&').replace(/\s/g, '[^\\S\\r\\n]');
- return wholeWord ? '\\b' + escapedText + '\\b' : escapedText;
- };
- var find = function (editor, currentSearchState, text, matchCase, wholeWord) {
- var escapedText = escapeSearchText(text, wholeWord);
- var count = markAllMatches(editor, currentSearchState, new RegExp(escapedText, matchCase ? 'g' : 'gi'));
- if (count) {
- var newIndex = moveSelection(editor, currentSearchState, true);
- currentSearchState.set({
- index: newIndex,
- count: count,
- text: text,
- matchCase: matchCase,
- wholeWord: wholeWord
- });
- }
- return count;
- };
- var next = function (editor, currentSearchState) {
- var index = moveSelection(editor, currentSearchState, true);
- currentSearchState.set(__assign(__assign({}, currentSearchState.get()), { index: index }));
- };
- var prev = function (editor, currentSearchState) {
- var index = moveSelection(editor, currentSearchState, false);
- currentSearchState.set(__assign(__assign({}, currentSearchState.get()), { index: index }));
- };
- var isMatchSpan = function (node) {
- var matchIndex = getElmIndex(node);
- return matchIndex !== null && matchIndex.length > 0;
- };
- var replace = function (editor, currentSearchState, text, forward, all) {
- var searchState = currentSearchState.get();
- var currentIndex = searchState.index;
- var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndex;
- forward = forward !== false;
- node = editor.getBody();
- nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);
- for (i = 0; i < nodes.length; i++) {
- var nodeIndex = getElmIndex(nodes[i]);
- matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);
- if (all || matchIndex === searchState.index) {
- if (text.length) {
- nodes[i].firstChild.nodeValue = text;
- unwrap(nodes[i]);
- } else {
- removeNode(editor.dom, nodes[i]);
- }
- while (nodes[++i]) {
- matchIndex = parseInt(getElmIndex(nodes[i]), 10);
- if (matchIndex === currentMatchIndex) {
- removeNode(editor.dom, nodes[i]);
- } else {
- i--;
- break;
- }
- }
- if (forward) {
- nextIndex--;
- }
- } else if (currentMatchIndex > currentIndex) {
- nodes[i].setAttribute('data-mce-index', String(currentMatchIndex - 1));
- }
- }
- currentSearchState.set(__assign(__assign({}, searchState), {
- count: all ? 0 : searchState.count - 1,
- index: nextIndex
- }));
- if (forward) {
- next(editor, currentSearchState);
- } else {
- prev(editor, currentSearchState);
- }
- return !all && currentSearchState.get().count > 0;
- };
- var done = function (editor, currentSearchState, keepEditorSelection) {
- var i, nodes, startContainer, endContainer;
- var searchState = currentSearchState.get();
- nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));
- for (i = 0; i < nodes.length; i++) {
- var nodeIndex = getElmIndex(nodes[i]);
- if (nodeIndex !== null && nodeIndex.length) {
- if (nodeIndex === searchState.index.toString()) {
- if (!startContainer) {
- startContainer = nodes[i].firstChild;
- }
- endContainer = nodes[i].firstChild;
- }
- unwrap(nodes[i]);
- }
- }
- currentSearchState.set(__assign(__assign({}, searchState), {
- index: -1,
- count: 0,
- text: ''
- }));
- if (startContainer && endContainer) {
- var rng = editor.dom.createRng();
- rng.setStart(startContainer, 0);
- rng.setEnd(endContainer, endContainer.data.length);
- if (keepEditorSelection !== false) {
- editor.selection.setRng(rng);
- }
- return rng;
- }
- };
- var hasNext = function (editor, currentSearchState) {
- return currentSearchState.get().count > 1;
- };
- var hasPrev = function (editor, currentSearchState) {
- return currentSearchState.get().count > 1;
- };
- var get = function (editor, currentState) {
- var done$1 = function (keepEditorSelection) {
- return done(editor, currentState, keepEditorSelection);
- };
- var find$1 = function (text, matchCase, wholeWord) {
- return find(editor, currentState, text, matchCase, wholeWord);
- };
- var next$1 = function () {
- return next(editor, currentState);
- };
- var prev$1 = function () {
- return prev(editor, currentState);
- };
- var replace$1 = function (text, forward, all) {
- return replace(editor, currentState, text, forward, all);
- };
- return {
- done: done$1,
- find: find$1,
- next: next$1,
- prev: prev$1,
- replace: replace$1
- };
- };
- var Api = { get: get };
- var noop = function () {
- };
- var constant = function (value) {
- return function () {
- return value;
- };
- };
- var never = constant(false);
- var always = constant(true);
- var none = function () {
- return NONE;
- };
- var NONE = function () {
- var eq = function (o) {
- return o.isNone();
- };
- var call = function (thunk) {
- return thunk();
- };
- var id = function (n) {
- return n;
- };
- var me = {
- fold: function (n, s) {
- return n();
- },
- is: never,
- isSome: never,
- isNone: always,
- getOr: id,
- getOrThunk: call,
- getOrDie: function (msg) {
- throw new Error(msg || 'error: getOrDie called on none.');
- },
- getOrNull: constant(null),
- getOrUndefined: constant(undefined),
- or: id,
- orThunk: call,
- map: none,
- each: noop,
- bind: none,
- exists: never,
- forall: always,
- filter: none,
- equals: eq,
- equals_: eq,
- toArray: function () {
- return [];
- },
- toString: constant('none()')
- };
- if (Object.freeze) {
- Object.freeze(me);
- }
- return me;
- }();
- var some = function (a) {
- var constant_a = constant(a);
- var self = function () {
- return me;
- };
- var bind = function (f) {
- return f(a);
- };
- var me = {
- fold: function (n, s) {
- return s(a);
- },
- is: function (v) {
- return a === v;
- },
- isSome: always,
- isNone: never,
- getOr: constant_a,
- getOrThunk: constant_a,
- getOrDie: constant_a,
- getOrNull: constant_a,
- getOrUndefined: constant_a,
- or: self,
- orThunk: self,
- map: function (f) {
- return some(f(a));
- },
- each: function (f) {
- f(a);
- },
- bind: bind,
- exists: bind,
- forall: bind,
- filter: function (f) {
- return f(a) ? me : NONE;
- },
- toArray: function () {
- return [a];
- },
- toString: function () {
- return 'some(' + a + ')';
- },
- equals: function (o) {
- return o.is(a);
- },
- equals_: function (o, elementEq) {
- return o.fold(never, function (b) {
- return elementEq(a, b);
- });
- }
- };
- return me;
- };
- var from = function (value) {
- return value === null || value === undefined ? NONE : some(value);
- };
- var Option = {
- some: some,
- none: none,
- from: from
- };
- var typeOf = function (x) {
- if (x === null) {
- return 'null';
- }
- var t = typeof x;
- if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
- return 'array';
- }
- if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
- return 'string';
- }
- return t;
- };
- var isType = function (type) {
- return function (value) {
- return typeOf(value) === type;
- };
- };
- var isFunction = isType('function');
- var nativeSlice = Array.prototype.slice;
- var each = function (xs, f) {
- for (var i = 0, len = xs.length; i < len; i++) {
- var x = xs[i];
- f(x, i);
- }
- };
- var from$1 = isFunction(Array.from) ? Array.from : function (x) {
- return nativeSlice.call(x);
- };
- var value = function () {
- var subject = Cell(Option.none());
- var clear = function () {
- subject.set(Option.none());
- };
- var set = function (s) {
- subject.set(Option.some(s));
- };
- var on = function (f) {
- subject.get().each(f);
- };
- var isSet = function () {
- return subject.get().isSome();
- };
- return {
- clear: clear,
- set: set,
- isSet: isSet,
- on: on
- };
- };
- var global$2 = tinymce.util.Tools.resolve('tinymce.Env');
- var open = function (editor, currentSearchState) {
- var dialogApi = value();
- editor.undoManager.add();
- var selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));
- function updateButtonStates(api) {
- var updateNext = hasNext(editor, currentSearchState) ? api.enable : api.disable;
- updateNext('next');
- var updatePrev = hasPrev(editor, currentSearchState) ? api.enable : api.disable;
- updatePrev('prev');
- }
- var updateSearchState = function (api) {
- var data = api.getData();
- var current = currentSearchState.get();
- currentSearchState.set(__assign(__assign({}, current), {
- matchCase: data.matchcase,
- wholeWord: data.wholewords
- }));
- };
- var disableAll = function (api, disable) {
- var buttons = [
- 'replace',
- 'replaceall',
- 'prev',
- 'next'
- ];
- var toggle = disable ? api.disable : api.enable;
- each(buttons, toggle);
- };
- function notFoundAlert(api) {
- editor.windowManager.alert('Could not find the specified string.', function () {
- api.focus('findtext');
- });
- }
- var focusButtonIfRequired = function (api, name) {
- if (global$2.browser.isSafari() && global$2.deviceType.isTouch() && (name === 'find' || name === 'replace' || name === 'replaceall')) {
- api.focus(name);
- }
- };
- var reset = function (api) {
- done(editor, currentSearchState, false);
- disableAll(api, true);
- updateButtonStates(api);
- };
- var doFind = function (api) {
- var data = api.getData();
- var last = currentSearchState.get();
- if (!data.findtext.length) {
- reset(api);
- return;
- }
- if (last.text === data.findtext && last.matchCase === data.matchcase && last.wholeWord === data.wholewords) {
- next(editor, currentSearchState);
- } else {
- var count = find(editor, currentSearchState, data.findtext, data.matchcase, data.wholewords);
- if (count <= 0) {
- notFoundAlert(api);
- }
- disableAll(api, count === 0);
- }
- updateButtonStates(api);
- };
- var initialState = currentSearchState.get();
- var initialData = {
- findtext: selectedText,
- replacetext: '',
- wholewords: initialState.wholeWord,
- matchcase: initialState.matchCase
- };
- var spec = {
- title: 'Find and Replace',
- size: 'normal',
- body: {
- type: 'panel',
- items: [
- {
- type: 'bar',
- items: [
- {
- type: 'input',
- name: 'findtext',
- placeholder: 'Find',
- maximized: true,
- inputMode: 'search'
- },
- {
- type: 'button',
- name: 'prev',
- text: 'Previous',
- icon: 'action-prev',
- disabled: true,
- borderless: true
- },
- {
- type: 'button',
- name: 'next',
- text: 'Next',
- icon: 'action-next',
- disabled: true,
- borderless: true
- }
- ]
- },
- {
- type: 'input',
- name: 'replacetext',
- placeholder: 'Replace with',
- inputMode: 'search'
- }
- ]
- },
- buttons: [
- {
- type: 'menu',
- name: 'options',
- icon: 'preferences',
- tooltip: 'Preferences',
- align: 'start',
- items: [
- {
- type: 'togglemenuitem',
- name: 'matchcase',
- text: 'Match case'
- },
- {
- type: 'togglemenuitem',
- name: 'wholewords',
- text: 'Find whole words only'
- }
- ]
- },
- {
- type: 'custom',
- name: 'find',
- text: 'Find',
- primary: true
- },
- {
- type: 'custom',
- name: 'replace',
- text: 'Replace',
- disabled: true
- },
- {
- type: 'custom',
- name: 'replaceall',
- text: 'Replace All',
- disabled: true
- }
- ],
- initialData: initialData,
- onChange: function (api, details) {
- if (details.name === 'findtext' && currentSearchState.get().count > 0) {
- reset(api);
- }
- },
- onAction: function (api, details) {
- var data = api.getData();
- switch (details.name) {
- case 'find':
- doFind(api);
- break;
- case 'replace':
- if (!replace(editor, currentSearchState, data.replacetext)) {
- reset(api);
- } else {
- updateButtonStates(api);
- }
- break;
- case 'replaceall':
- replace(editor, currentSearchState, data.replacetext, true, true);
- reset(api);
- break;
- case 'prev':
- prev(editor, currentSearchState);
- updateButtonStates(api);
- break;
- case 'next':
- next(editor, currentSearchState);
- updateButtonStates(api);
- break;
- case 'matchcase':
- case 'wholewords':
- updateSearchState(api);
- reset(api);
- break;
- }
- focusButtonIfRequired(api, details.name);
- },
- onSubmit: function (api) {
- doFind(api);
- focusButtonIfRequired(api, 'find');
- },
- onClose: function () {
- editor.focus();
- done(editor, currentSearchState);
- editor.undoManager.add();
- }
- };
- dialogApi.set(editor.windowManager.open(spec, { inline: 'toolbar' }));
- };
- var Dialog = { open: open };
- var register = function (editor, currentSearchState) {
- editor.addCommand('SearchReplace', function () {
- Dialog.open(editor, currentSearchState);
- });
- };
- var Commands = { register: register };
- var showDialog = function (editor, currentSearchState) {
- return function () {
- Dialog.open(editor, currentSearchState);
- };
- };
- var register$1 = function (editor, currentSearchState) {
- editor.ui.registry.addMenuItem('searchreplace', {
- text: 'Find and replace...',
- shortcut: 'Meta+F',
- onAction: showDialog(editor, currentSearchState),
- icon: 'search'
- });
- editor.ui.registry.addButton('searchreplace', {
- tooltip: 'Find and replace',
- onAction: showDialog(editor, currentSearchState),
- icon: 'search'
- });
- editor.shortcuts.add('Meta+F', '', showDialog(editor, currentSearchState));
- };
- var Buttons = { register: register$1 };
- function Plugin () {
- global.add('searchreplace', function (editor) {
- var currentSearchState = Cell({
- index: -1,
- count: 0,
- text: '',
- matchCase: false,
- wholeWord: false
- });
- Commands.register(editor, currentSearchState);
- Buttons.register(editor, currentSearchState);
- return Api.get(editor, currentSearchState);
- });
- }
- Plugin();
- }());
|