@difizen/libro-search 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.less +2 -2
- package/es/libro-search-generic-provider.d.ts +1 -0
- package/es/libro-search-generic-provider.d.ts.map +1 -1
- package/es/libro-search-generic-provider.js +48 -14
- package/es/libro-search-provider.d.ts.map +1 -1
- package/es/libro-search-provider.js +1 -1
- package/es/libro-search-view.d.ts +6 -5
- package/es/libro-search-view.d.ts.map +1 -1
- package/es/libro-search-view.js +87 -37
- package/package.json +4 -4
- package/src/index.less +2 -2
- package/src/libro-search-generic-provider.ts +26 -2
- package/src/libro-search-provider.ts +1 -1
- package/src/libro-search-view.tsx +23 -20
package/es/index.less
CHANGED
|
@@ -97,10 +97,10 @@
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
.libro-selectedtext {
|
|
100
|
-
background-color: rgb(
|
|
100
|
+
background-color: rgb(168, 172, 149) !important;
|
|
101
101
|
|
|
102
102
|
span {
|
|
103
|
-
background-color: rgb(
|
|
103
|
+
background-color: rgb(168, 172, 149) !important;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -89,6 +89,7 @@ export declare class GenericSearchProvider extends AbstractSearchProvider {
|
|
|
89
89
|
* @returns A promise that resolves with a boolean indicating whether a replace occurred.
|
|
90
90
|
*/
|
|
91
91
|
replaceAllMatches(newText: string): Promise<boolean>;
|
|
92
|
+
isMatchChanged(matches: HTMLSearchMatch[], newMatches: HTMLSearchMatch[]): boolean;
|
|
92
93
|
/**
|
|
93
94
|
* Initialize the search using the provided options. Should update the UI
|
|
94
95
|
* to highlight all matches and "select" whatever the first match should be.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libro-search-generic-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-generic-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAGL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,4BAA4B,GAAG,CACzC,MAAM,EAAE,oBAAoB,KACzB,qBAAqB,CAAC;AAC3B,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF;;GAEG;AACH,qBACa,qBAAsB,SAAQ,sBAAsB;IAC/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"libro-search-generic-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-generic-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAGL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,4BAA4B,GAAG,CACzC,MAAM,EAAE,oBAAoB,KACzB,qBAAqB,CAAC;AAC3B,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF;;GAEG;AACH,qBACa,qBAAsB,SAAQ,sBAAsB;IAC/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAM;IACnD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAE3C;IACF,SAAS,CAAC,UAAU,oBAAgC;IACpD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAI1C;;OAEG;IACH,IAAa,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEnD;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,eAAe,GAAG,SAAS,CAE9C;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,eAAe,EAAE,CAM/B;IAED;;OAEG;IACH,IAAa,YAAY,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED;;;;OAIG;IACH,QAAQ,CAAC,UAAU,QAAQ;gBAEe,MAAM,EAAE,oBAAoB;IAGtE;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;;;;;;;;OAUG;IACM,OAAO,IAAI,IAAI;IAWxB;;;;;;OAMG;IACG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAIzE;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI7E;;;;;;;OAOG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5E;;;;;;OAMG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO;IAkBlF;;;;;;OAMG;IACH,UAAU,UAAiB,MAAM,GAAG,IAAI,mBAAiB,QAAQ,IAAI,CAAC,CA6DpE;IAEF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI;cA0CjE,gBAAgB,CAC9B,SAAS,EAAE,cAAc,EAAE,EAC3B,QAAQ,EAAE,gBAAgB;CAO7B;AACD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAU1D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
var _dec, _dec2, _class, _class2, _descriptor;
|
|
2
|
+
var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
|
|
3
3
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
4
4
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
5
5
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -38,14 +38,15 @@ export var GenericSearchProviderFactory = Symbol('GenericSearchProviderFactory')
|
|
|
38
38
|
/**
|
|
39
39
|
* Generic DOM tree search provider.
|
|
40
40
|
*/
|
|
41
|
-
export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractSearchProvid) {
|
|
41
|
+
export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec3 = prop(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractSearchProvid) {
|
|
42
42
|
_inherits(GenericSearchProvider, _AbstractSearchProvid);
|
|
43
43
|
var _super = _createSuper(GenericSearchProvider);
|
|
44
44
|
function GenericSearchProvider(option) {
|
|
45
45
|
var _this;
|
|
46
46
|
_classCallCheck(this, GenericSearchProvider);
|
|
47
47
|
_this = _super.call(this, option);
|
|
48
|
-
_initializerDefineProperty(_this, "
|
|
48
|
+
_initializerDefineProperty(_this, "_currentMatchIndex", _descriptor, _assertThisInitialized(_this));
|
|
49
|
+
_initializerDefineProperty(_this, "_matches", _descriptor2, _assertThisInitialized(_this));
|
|
49
50
|
_this._mutationObserver = new MutationObserver(_this._onWidgetChanged.bind(_assertThisInitialized(_this)));
|
|
50
51
|
_this._markNodes = new Array();
|
|
51
52
|
/**
|
|
@@ -74,14 +75,14 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
|
|
|
74
75
|
while (1) switch (_context2.prev = _context2.next) {
|
|
75
76
|
case 0:
|
|
76
77
|
filters = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
|
|
77
|
-
_context2.next = 3;
|
|
78
|
-
return _this.endQuery();
|
|
79
|
-
case 3:
|
|
80
78
|
_this._query = query;
|
|
81
79
|
if (!(query === null)) {
|
|
82
80
|
_context2.next = 6;
|
|
83
81
|
break;
|
|
84
82
|
}
|
|
83
|
+
_context2.next = 5;
|
|
84
|
+
return _this.endQuery();
|
|
85
|
+
case 5:
|
|
85
86
|
return _context2.abrupt("return", Promise.resolve());
|
|
86
87
|
case 6:
|
|
87
88
|
if (!((_this$view$container = _this.view.container) !== null && _this$view$container !== void 0 && _this$view$container.current)) {
|
|
@@ -98,6 +99,15 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
|
|
|
98
99
|
_context2.t0 = [];
|
|
99
100
|
case 13:
|
|
100
101
|
matches = _context2.t0;
|
|
102
|
+
if (_this.isMatchChanged(_this.matches, matches)) {
|
|
103
|
+
_context2.next = 16;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
return _context2.abrupt("return", Promise.resolve());
|
|
107
|
+
case 16:
|
|
108
|
+
_context2.next = 18;
|
|
109
|
+
return _this.endQuery();
|
|
110
|
+
case 18:
|
|
101
111
|
// Transform the DOM
|
|
102
112
|
nodeIdx = 0;
|
|
103
113
|
_loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
|
|
@@ -132,16 +142,16 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
|
|
|
132
142
|
}
|
|
133
143
|
}, _loop);
|
|
134
144
|
});
|
|
135
|
-
case
|
|
145
|
+
case 20:
|
|
136
146
|
if (!(nodeIdx < matches.length)) {
|
|
137
|
-
_context2.next =
|
|
147
|
+
_context2.next = 24;
|
|
138
148
|
break;
|
|
139
149
|
}
|
|
140
|
-
return _context2.delegateYield(_loop(), "t1",
|
|
141
|
-
case
|
|
142
|
-
_context2.next =
|
|
150
|
+
return _context2.delegateYield(_loop(), "t1", 22);
|
|
151
|
+
case 22:
|
|
152
|
+
_context2.next = 20;
|
|
143
153
|
break;
|
|
144
|
-
case
|
|
154
|
+
case 24:
|
|
145
155
|
if ((_this$view$container3 = _this.view.container) !== null && _this$view$container3 !== void 0 && _this$view$container3.current) {
|
|
146
156
|
// Watch for future changes:
|
|
147
157
|
_this._mutationObserver.observe((_this$view$container4 = _this.view.container) === null || _this$view$container4 === void 0 ? void 0 : _this$view$container4.current,
|
|
@@ -154,7 +164,7 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
|
|
|
154
164
|
});
|
|
155
165
|
}
|
|
156
166
|
_this._matches = matches;
|
|
157
|
-
case
|
|
167
|
+
case 26:
|
|
158
168
|
case "end":
|
|
159
169
|
return _context2.stop();
|
|
160
170
|
}
|
|
@@ -356,6 +366,25 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
|
|
|
356
366
|
}
|
|
357
367
|
return replaceAllMatches;
|
|
358
368
|
}())
|
|
369
|
+
}, {
|
|
370
|
+
key: "isMatchChanged",
|
|
371
|
+
value: function isMatchChanged(matches, newMatches) {
|
|
372
|
+
if (matches.length !== newMatches.length) {
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
for (var i = 0; i < matches.length; i++) {
|
|
376
|
+
if (matches[i].text !== newMatches[i].text) {
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
if (matches[i].position !== newMatches[i].position) {
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
if (matches[i].node !== newMatches[i].node) {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
359
388
|
}, {
|
|
360
389
|
key: "endQuery",
|
|
361
390
|
value: (
|
|
@@ -456,7 +485,12 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
|
|
|
456
485
|
}
|
|
457
486
|
}]);
|
|
458
487
|
return GenericSearchProvider;
|
|
459
|
-
}(AbstractSearchProvider), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "
|
|
488
|
+
}(AbstractSearchProvider), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "_currentMatchIndex", [_dec2], {
|
|
489
|
+
configurable: true,
|
|
490
|
+
enumerable: true,
|
|
491
|
+
writable: true,
|
|
492
|
+
initializer: null
|
|
493
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_matches", [_dec3], {
|
|
460
494
|
configurable: true,
|
|
461
495
|
enumerable: true,
|
|
462
496
|
writable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libro-search-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAEL,SAAS,EACT,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACd,MAAM,4BAA4B,CAAC;AAEpC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAU1D;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,MAAM,EAAE,oBAAoB,KACzB,mBAAmB,CAAC;AACzB,eAAO,MAAM,0BAA0B,eAAuC,CAAC;AAC/E;;GAEG;AACH,qBACa,mBAAoB,SAAQ,sBAAsB;IAC5B,uBAAuB,EAAE,uBAAuB,CAAC;IAClF,SAAS,CAAC,mBAAmB,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAE1D,SAAS,CAAC,SAAS,uBAA8B;IACzC,SAAS,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAa;IAC/D,gBAAgB,
|
|
1
|
+
{"version":3,"file":"libro-search-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -783,7 +783,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
783
783
|
enumerable: true,
|
|
784
784
|
writable: true,
|
|
785
785
|
initializer: function initializer() {
|
|
786
|
-
return
|
|
786
|
+
return false;
|
|
787
787
|
}
|
|
788
788
|
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "onlySearchSelectedCells", [_dec5], {
|
|
789
789
|
configurable: true,
|
|
@@ -8,7 +8,8 @@ import type { LibroSearchProvider } from './libro-search-provider.js';
|
|
|
8
8
|
import { LibroSearchProviderFactory } from './libro-search-provider.js';
|
|
9
9
|
import { LibroSearchUtils } from './libro-search-utils.js';
|
|
10
10
|
export declare const ReplaceToggle: () => import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
export declare const SearchIndex:
|
|
11
|
+
export declare const SearchIndex: React.FC;
|
|
12
|
+
export declare const SearchIndexMemo: import("react").NamedExoticComponent<{}>;
|
|
12
13
|
export declare const SearchContent: () => import("react/jsx-runtime").JSX.Element;
|
|
13
14
|
export declare const SearchComponent: import("react").ForwardRefExoticComponent<import("react").RefAttributes<HTMLDivElement>>;
|
|
14
15
|
export declare class LibroSearchView extends BaseView {
|
|
@@ -26,6 +27,7 @@ export declare class LibroSearchView extends BaseView {
|
|
|
26
27
|
replaceStr: string;
|
|
27
28
|
caseSensitive: boolean;
|
|
28
29
|
useRegex: boolean;
|
|
30
|
+
isSearching: boolean;
|
|
29
31
|
view: import("react").ForwardRefExoticComponent<import("react").RefAttributes<HTMLDivElement>>;
|
|
30
32
|
get contentHeight(): number;
|
|
31
33
|
get currentMatchIndex(): number | undefined;
|
|
@@ -33,12 +35,12 @@ export declare class LibroSearchView extends BaseView {
|
|
|
33
35
|
onViewMount: () => void;
|
|
34
36
|
onActiveCellChanged: () => void;
|
|
35
37
|
onCellsChanged: () => void;
|
|
36
|
-
|
|
38
|
+
onViewWillUnmount: () => Promise<void>;
|
|
37
39
|
show: () => void;
|
|
38
40
|
hide: () => void;
|
|
39
41
|
onFocus: () => void;
|
|
40
42
|
onBlur: (e: React.FocusEvent<HTMLDivElement>) => void;
|
|
41
|
-
search: (hightlightNext?: boolean) => void
|
|
43
|
+
search: (hightlightNext?: boolean) => Promise<void>;
|
|
42
44
|
toggleReplace: () => void;
|
|
43
45
|
toggleSetting: () => void;
|
|
44
46
|
toggleCaseSensitive: () => void;
|
|
@@ -50,9 +52,8 @@ export declare class LibroSearchView extends BaseView {
|
|
|
50
52
|
replaceAll: () => void;
|
|
51
53
|
initialQuery: () => void;
|
|
52
54
|
getHeaderHeight: () => number;
|
|
53
|
-
nextMatch: (reverse: boolean) => void
|
|
55
|
+
nextMatch: (reverse: boolean) => Promise<void>;
|
|
54
56
|
handleKeydown: (e: KeyboardEvent) => void;
|
|
55
|
-
protected doHandleFindChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
56
57
|
handleFindChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
57
58
|
handleReplaceChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
58
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libro-search-view.d.ts","sourceRoot":"","sources":["../src/libro-search-view.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAIjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM3D,eAAO,MAAM,aAAa,+CAYzB,CAAC;AAEF,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"libro-search-view.d.ts","sourceRoot":"","sources":["../src/libro-search-view.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAIjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM3D,eAAO,MAAM,aAAa,+CAYzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAgB/B,CAAC;AAEF,eAAO,MAAM,eAAe,0CAAoB,CAAC;AAEjD,eAAO,MAAM,aAAa,+CA+HzB,CAAC;AAEF,eAAO,MAAM,eAAe,0FAiB1B,CAAC;AAEH,qBAEa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACd,qBAAqB,EAAE,0BAA0B,CAAC;IACtF,KAAK,CAAC,EAAE,SAAS,CAAC;IACV,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,aAAa,UAAS;IAC9B,IAAI,cAAc,IAAI,OAAO,CAE5B;IACO,cAAc,UAAS;IACvB,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAa;IAChC,UAAU,SAAM;IAChB,aAAa,UAAS;IACtB,QAAQ,UAAS;IACjB,WAAW,UAAS;IAEnB,IAAI,2FAAmB;IAEhC,IAAI,aAAa,WAShB;IACD,IAAI,iBAAiB,uBAMpB;IACD,IAAI,YAAY,uBAEf;IAEQ,WAAW,aAQlB;IAEF,mBAAmB,aAIjB;IAEF,cAAc,aAIZ;IAEF,iBAAiB,sBAGf;IAEF,IAAI,aAKF;IACF,IAAI,aAQF;IAEF,OAAO,aAEL;IAEF,MAAM,MAAO,gBAAgB,CAAC,cAAc,CAAC,UAI3C;IAEF,MAAM,8CAgBJ;IACF,aAAa,aAKX;IAEF,aAAa,aAGX;IAEF,mBAAmB,aAGjB;IAEF,cAAc,aAGZ;IAEF,IAAI,aAEF;IAEF,QAAQ,aAEN;IAEF,sBAAsB,MAAO,mBAAmB,UAI9C;IAEF,OAAO,aAEL;IACF,UAAU,aAER;IACF,YAAY,aAMV;IACF,eAAe,eAUb;IAEF,SAAS,YAAmB,OAAO,mBAMjC;IAEF,aAAa,MAAO,aAAa,UAqB/B;IAEF,gBAAgB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAKxD;IAEF,mBAAmB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAE3D;CACH"}
|
package/es/libro-search-view.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11;
|
|
2
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12;
|
|
3
3
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
4
4
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
5
5
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
@@ -20,16 +20,17 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con
|
|
|
20
20
|
function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); }
|
|
21
21
|
import { ArrowDownOutlined, ArrowUpOutlined, CloseOutlined, createFromIconfontCN, EllipsisOutlined, RightOutlined } from '@ant-design/icons';
|
|
22
22
|
import { LirboContextKey } from '@difizen/libro-core';
|
|
23
|
-
import { prop, useInject, watch } from '@difizen/mana-app';
|
|
23
|
+
import { prop, useInject, useObserve, watch } from '@difizen/mana-app';
|
|
24
24
|
import { BaseView, view, ViewInstance } from '@difizen/mana-app';
|
|
25
25
|
import { inject, transient } from '@difizen/mana-app';
|
|
26
26
|
import { l10n } from '@difizen/mana-l10n';
|
|
27
27
|
import { Button, Checkbox, Input, Tag } from 'antd';
|
|
28
28
|
import classnames from 'classnames';
|
|
29
|
-
import { forwardRef, useEffect, useRef } from 'react';
|
|
29
|
+
import { forwardRef, memo, useEffect, useRef } from 'react';
|
|
30
30
|
import { LibroSearchProviderFactory } from "./libro-search-provider.js";
|
|
31
31
|
import { LibroSearchUtils } from "./libro-search-utils.js";
|
|
32
32
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
33
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
33
34
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
34
35
|
var IconFont = createFromIconfontCN({
|
|
35
36
|
scriptUrl: '//at.alicdn.com/t/a/font_3381673_65wfctnq7rt.js'
|
|
@@ -49,16 +50,19 @@ export var ReplaceToggle = function ReplaceToggle() {
|
|
|
49
50
|
};
|
|
50
51
|
export var SearchIndex = function SearchIndex() {
|
|
51
52
|
var instance = useInject(ViewInstance);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
var currentMatchIndex = useObserve(instance.currentMatchIndex);
|
|
54
|
+
var matchesCount = useObserve(instance.matchesCount);
|
|
55
|
+
if (instance.isSearching) {
|
|
56
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
57
|
+
children: "searching..."
|
|
58
|
+
});
|
|
59
|
+
}
|
|
57
60
|
return /*#__PURE__*/_jsx("div", {
|
|
58
61
|
className: "libro-search-index",
|
|
59
|
-
children: instance.matchesCount !== undefined ? "".concat(
|
|
62
|
+
children: instance.matchesCount !== undefined ? "".concat(currentMatchIndex !== null && currentMatchIndex !== void 0 ? currentMatchIndex : '-', "/").concat(matchesCount !== null && matchesCount !== void 0 ? matchesCount : ' -') : '无结果'
|
|
60
63
|
});
|
|
61
64
|
};
|
|
65
|
+
export var SearchIndexMemo = /*#__PURE__*/memo(SearchIndex);
|
|
62
66
|
export var SearchContent = function SearchContent() {
|
|
63
67
|
var _instance$searchProvi;
|
|
64
68
|
var instance = useInject(ViewInstance);
|
|
@@ -116,7 +120,7 @@ export var SearchContent = function SearchContent() {
|
|
|
116
120
|
})
|
|
117
121
|
}), /*#__PURE__*/_jsxs("td", {
|
|
118
122
|
className: "libro-search-action",
|
|
119
|
-
children: [/*#__PURE__*/_jsx(
|
|
123
|
+
children: [/*#__PURE__*/_jsx(SearchIndexMemo, {}), /*#__PURE__*/_jsxs("div", {
|
|
120
124
|
children: [/*#__PURE__*/_jsx(Button, {
|
|
121
125
|
title: "Previous Match",
|
|
122
126
|
onClick: instance.previous,
|
|
@@ -200,7 +204,7 @@ export var SearchComponent = /*#__PURE__*/forwardRef(function SearchComponent(pr
|
|
|
200
204
|
children: instance.searchVisible && /*#__PURE__*/_jsx(SearchContent, {})
|
|
201
205
|
});
|
|
202
206
|
});
|
|
203
|
-
export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-view'), _dec3 = inject(LirboContextKey), _dec4 = inject(LibroSearchUtils), _dec5 = inject(LibroSearchProviderFactory), _dec6 = prop(), _dec7 = prop(), _dec8 = prop(), _dec9 = prop(), _dec10 = prop(), _dec11 = prop(), _dec12 = prop(), _dec13 = prop(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_BaseView) {
|
|
207
|
+
export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-view'), _dec3 = inject(LirboContextKey), _dec4 = inject(LibroSearchUtils), _dec5 = inject(LibroSearchProviderFactory), _dec6 = prop(), _dec7 = prop(), _dec8 = prop(), _dec9 = prop(), _dec10 = prop(), _dec11 = prop(), _dec12 = prop(), _dec13 = prop(), _dec14 = prop(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_BaseView) {
|
|
204
208
|
_inherits(LibroSearchView, _BaseView);
|
|
205
209
|
var _super = _createSuper(LibroSearchView);
|
|
206
210
|
function LibroSearchView() {
|
|
@@ -221,6 +225,7 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
|
|
|
221
225
|
_initializerDefineProperty(_this, "replaceStr", _descriptor9, _assertThisInitialized(_this));
|
|
222
226
|
_initializerDefineProperty(_this, "caseSensitive", _descriptor10, _assertThisInitialized(_this));
|
|
223
227
|
_initializerDefineProperty(_this, "useRegex", _descriptor11, _assertThisInitialized(_this));
|
|
228
|
+
_initializerDefineProperty(_this, "isSearching", _descriptor12, _assertThisInitialized(_this));
|
|
224
229
|
_this.view = SearchComponent;
|
|
225
230
|
_this.onViewMount = function () {
|
|
226
231
|
if (!_this.searchProvider && _this.libro) {
|
|
@@ -245,7 +250,7 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
|
|
|
245
250
|
(_this$searchProvider2 = _this.searchProvider) === null || _this$searchProvider2 === void 0 || _this$searchProvider2.onCellsChanged();
|
|
246
251
|
}
|
|
247
252
|
};
|
|
248
|
-
_this.
|
|
253
|
+
_this.onViewWillUnmount = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
249
254
|
var _this$searchProvider3, _this$searchProvider4;
|
|
250
255
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
251
256
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -286,20 +291,42 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
|
|
|
286
291
|
_this.contextKey.enableCommandMode();
|
|
287
292
|
}
|
|
288
293
|
};
|
|
289
|
-
_this.search = function () {
|
|
290
|
-
var hightlightNext
|
|
291
|
-
|
|
292
|
-
_this
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
294
|
+
_this.search = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
295
|
+
var hightlightNext,
|
|
296
|
+
query,
|
|
297
|
+
_this$searchProvider6,
|
|
298
|
+
_this$searchProvider7,
|
|
299
|
+
_args2 = arguments;
|
|
300
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
301
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
302
|
+
case 0:
|
|
303
|
+
hightlightNext = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : true;
|
|
304
|
+
if (!_this.searchProvider) {
|
|
305
|
+
_context2.next = 13;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
_this.lastSearch = _this.findStr;
|
|
309
|
+
query = _this.utils.parseQuery(_this.findStr || '', _this.caseSensitive, _this.useRegex);
|
|
310
|
+
if (!query) {
|
|
311
|
+
_context2.next = 11;
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
_this.isSearching = true;
|
|
315
|
+
_context2.next = 8;
|
|
316
|
+
return (_this$searchProvider6 = _this.searchProvider) === null || _this$searchProvider6 === void 0 ? void 0 : _this$searchProvider6.startQuery(query, undefined, hightlightNext);
|
|
317
|
+
case 8:
|
|
318
|
+
_this.isSearching = false;
|
|
319
|
+
_context2.next = 13;
|
|
320
|
+
break;
|
|
321
|
+
case 11:
|
|
322
|
+
_context2.next = 13;
|
|
323
|
+
return (_this$searchProvider7 = _this.searchProvider) === null || _this$searchProvider7 === void 0 ? void 0 : _this$searchProvider7.endQuery();
|
|
324
|
+
case 13:
|
|
325
|
+
case "end":
|
|
326
|
+
return _context2.stop();
|
|
300
327
|
}
|
|
301
|
-
}
|
|
302
|
-
};
|
|
328
|
+
}, _callee2);
|
|
329
|
+
}));
|
|
303
330
|
_this.toggleReplace = function () {
|
|
304
331
|
if (_this.searchProvider) {
|
|
305
332
|
_this.searchProvider.replaceMode = !_this.replaceVisible;
|
|
@@ -359,15 +386,34 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
|
|
|
359
386
|
}
|
|
360
387
|
return height;
|
|
361
388
|
};
|
|
362
|
-
_this.nextMatch = function (
|
|
363
|
-
|
|
364
|
-
var _this$searchProvider13;
|
|
365
|
-
(
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
389
|
+
_this.nextMatch = /*#__PURE__*/function () {
|
|
390
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(reverse) {
|
|
391
|
+
var _this$searchProvider13, _this$searchProvider14;
|
|
392
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
393
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
394
|
+
case 0:
|
|
395
|
+
if (!reverse) {
|
|
396
|
+
_context3.next = 5;
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
399
|
+
_context3.next = 3;
|
|
400
|
+
return (_this$searchProvider13 = _this.searchProvider) === null || _this$searchProvider13 === void 0 ? void 0 : _this$searchProvider13.highlightPrevious();
|
|
401
|
+
case 3:
|
|
402
|
+
_context3.next = 7;
|
|
403
|
+
break;
|
|
404
|
+
case 5:
|
|
405
|
+
_context3.next = 7;
|
|
406
|
+
return (_this$searchProvider14 = _this.searchProvider) === null || _this$searchProvider14 === void 0 ? void 0 : _this$searchProvider14.highlightNext();
|
|
407
|
+
case 7:
|
|
408
|
+
case "end":
|
|
409
|
+
return _context3.stop();
|
|
410
|
+
}
|
|
411
|
+
}, _callee3);
|
|
412
|
+
}));
|
|
413
|
+
return function (_x) {
|
|
414
|
+
return _ref3.apply(this, arguments);
|
|
415
|
+
};
|
|
416
|
+
}();
|
|
371
417
|
_this.handleKeydown = function (e) {
|
|
372
418
|
if (e.key === 'Escape') {
|
|
373
419
|
e.stopPropagation();
|
|
@@ -390,9 +436,6 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
|
|
|
390
436
|
return;
|
|
391
437
|
}
|
|
392
438
|
};
|
|
393
|
-
_this.doHandleFindChange = function (e) {
|
|
394
|
-
_this.findStr = e.target.value;
|
|
395
|
-
};
|
|
396
439
|
_this.handleFindChange = function (e) {
|
|
397
440
|
_this.findStr = e.target.value;
|
|
398
441
|
if (_this.findStr !== _this.lastSearch) {
|
|
@@ -509,4 +552,11 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
|
|
|
509
552
|
initializer: function initializer() {
|
|
510
553
|
return false;
|
|
511
554
|
}
|
|
555
|
+
}), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "isSearching", [_dec14], {
|
|
556
|
+
configurable: true,
|
|
557
|
+
enumerable: true,
|
|
558
|
+
writable: true,
|
|
559
|
+
initializer: function initializer() {
|
|
560
|
+
return false;
|
|
561
|
+
}
|
|
512
562
|
})), _class2)) || _class) || _class);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@difizen/libro-search",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"libro",
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"@difizen/mana-app": "latest",
|
|
37
37
|
"@difizen/mana-l10n": "latest",
|
|
38
38
|
"@ant-design/icons": "^5.1.0",
|
|
39
|
-
"@difizen/libro-common": "^0.1.
|
|
40
|
-
"@difizen/libro-core": "^0.1.
|
|
41
|
-
"@difizen/libro-code-editor": "^0.1.
|
|
39
|
+
"@difizen/libro-common": "^0.1.15",
|
|
40
|
+
"@difizen/libro-core": "^0.1.15",
|
|
41
|
+
"@difizen/libro-code-editor": "^0.1.15",
|
|
42
42
|
"@types/lodash.debounce": "^4.0.7",
|
|
43
43
|
"classnames": "^2.3.2",
|
|
44
44
|
"lodash.debounce": "^4.0.8",
|
package/src/index.less
CHANGED
|
@@ -97,10 +97,10 @@
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
.libro-selectedtext {
|
|
100
|
-
background-color: rgb(
|
|
100
|
+
background-color: rgb(168, 172, 149) !important;
|
|
101
101
|
|
|
102
102
|
span {
|
|
103
|
-
background-color: rgb(
|
|
103
|
+
background-color: rgb(168, 172, 149) !important;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -23,7 +23,7 @@ export const GenericSearchProviderFactory = Symbol('GenericSearchProviderFactory
|
|
|
23
23
|
@transient()
|
|
24
24
|
export class GenericSearchProvider extends AbstractSearchProvider {
|
|
25
25
|
protected _query: RegExp | null;
|
|
26
|
-
protected _currentMatchIndex: number;
|
|
26
|
+
@prop() protected _currentMatchIndex: number;
|
|
27
27
|
@prop() protected _matches: HTMLSearchMatch[] = [];
|
|
28
28
|
protected _mutationObserver: MutationObserver = new MutationObserver(
|
|
29
29
|
this._onWidgetChanged.bind(this),
|
|
@@ -159,6 +159,24 @@ export class GenericSearchProvider extends AbstractSearchProvider {
|
|
|
159
159
|
return Promise.resolve(false);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
isMatchChanged(matches: HTMLSearchMatch[], newMatches: HTMLSearchMatch[]): boolean {
|
|
163
|
+
if (matches.length !== newMatches.length) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
for (let i = 0; i < matches.length; i++) {
|
|
167
|
+
if (matches[i].text !== newMatches[i].text) {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (matches[i].position !== newMatches[i].position) {
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
if (matches[i].node !== newMatches[i].node) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
|
|
162
180
|
/**
|
|
163
181
|
* Initialize the search using the provided options. Should update the UI
|
|
164
182
|
* to highlight all matches and "select" whatever the first match should be.
|
|
@@ -167,10 +185,10 @@ export class GenericSearchProvider extends AbstractSearchProvider {
|
|
|
167
185
|
* @param filters Filter parameters to pass to provider
|
|
168
186
|
*/
|
|
169
187
|
startQuery = async (query: RegExp | null, filters = {}): Promise<void> => {
|
|
170
|
-
await this.endQuery();
|
|
171
188
|
this._query = query;
|
|
172
189
|
|
|
173
190
|
if (query === null) {
|
|
191
|
+
await this.endQuery();
|
|
174
192
|
return Promise.resolve();
|
|
175
193
|
}
|
|
176
194
|
|
|
@@ -178,6 +196,12 @@ export class GenericSearchProvider extends AbstractSearchProvider {
|
|
|
178
196
|
? await searchInHTML(query, this.view.container?.current)
|
|
179
197
|
: [];
|
|
180
198
|
|
|
199
|
+
if (!this.isMatchChanged(this.matches, matches)) {
|
|
200
|
+
return Promise.resolve();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
await this.endQuery();
|
|
204
|
+
|
|
181
205
|
// Transform the DOM
|
|
182
206
|
let nodeIdx = 0;
|
|
183
207
|
while (nodeIdx < matches.length) {
|
|
@@ -44,7 +44,7 @@ export class LibroSearchProvider extends AbstractSearchProvider {
|
|
|
44
44
|
|
|
45
45
|
protected toDispose = new DisposableCollection();
|
|
46
46
|
@prop() protected currentProviderIndex: number | undefined = undefined;
|
|
47
|
-
@prop() searchCellOutput =
|
|
47
|
+
@prop() searchCellOutput = false;
|
|
48
48
|
@prop() protected onlySearchSelectedCells = false;
|
|
49
49
|
@prop() replaceMode = false;
|
|
50
50
|
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from '@ant-design/icons';
|
|
9
9
|
import type { LibroView } from '@difizen/libro-core';
|
|
10
10
|
import { LirboContextKey } from '@difizen/libro-core';
|
|
11
|
-
import { prop, useInject, watch } from '@difizen/mana-app';
|
|
11
|
+
import { prop, useInject, useObserve, watch } from '@difizen/mana-app';
|
|
12
12
|
import { BaseView, view, ViewInstance } from '@difizen/mana-app';
|
|
13
13
|
import { inject, transient } from '@difizen/mana-app';
|
|
14
14
|
import { l10n } from '@difizen/mana-l10n';
|
|
@@ -16,7 +16,7 @@ import { Button, Checkbox, Input, Tag } from 'antd';
|
|
|
16
16
|
import type { CheckboxChangeEvent } from 'antd/es/checkbox';
|
|
17
17
|
import type { InputRef } from 'antd/es/input';
|
|
18
18
|
import classnames from 'classnames';
|
|
19
|
-
import { forwardRef, useEffect, useRef } from 'react';
|
|
19
|
+
import { forwardRef, memo, useEffect, useRef } from 'react';
|
|
20
20
|
|
|
21
21
|
import type { LibroSearchProvider } from './libro-search-provider.js';
|
|
22
22
|
import { LibroSearchProviderFactory } from './libro-search-provider.js';
|
|
@@ -40,23 +40,26 @@ export const ReplaceToggle = () => {
|
|
|
40
40
|
);
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
export const SearchIndex = () => {
|
|
43
|
+
export const SearchIndex: React.FC = () => {
|
|
44
44
|
const instance = useInject<LibroSearchView>(ViewInstance);
|
|
45
|
+
const currentMatchIndex = useObserve(instance.currentMatchIndex);
|
|
46
|
+
const matchesCount = useObserve(instance.matchesCount);
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}, [instance.currentMatchIndex]);
|
|
48
|
+
if (instance.isSearching) {
|
|
49
|
+
return <>searching...</>;
|
|
50
|
+
}
|
|
50
51
|
|
|
51
52
|
return (
|
|
52
53
|
<div className="libro-search-index">
|
|
53
54
|
{instance.matchesCount !== undefined
|
|
54
|
-
? `${
|
|
55
|
+
? `${currentMatchIndex ?? '-'}/${matchesCount ?? ' -'}`
|
|
55
56
|
: '无结果'}
|
|
56
57
|
</div>
|
|
57
58
|
);
|
|
58
59
|
};
|
|
59
60
|
|
|
61
|
+
export const SearchIndexMemo = memo(SearchIndex);
|
|
62
|
+
|
|
60
63
|
export const SearchContent = () => {
|
|
61
64
|
const instance = useInject<LibroSearchView>(ViewInstance);
|
|
62
65
|
const findInputRef = useRef<InputRef>(null);
|
|
@@ -114,7 +117,7 @@ export const SearchContent = () => {
|
|
|
114
117
|
/>
|
|
115
118
|
</td>
|
|
116
119
|
<td className="libro-search-action">
|
|
117
|
-
<
|
|
120
|
+
<SearchIndexMemo />
|
|
118
121
|
<div>
|
|
119
122
|
<Button
|
|
120
123
|
title="Previous Match"
|
|
@@ -224,6 +227,7 @@ export class LibroSearchView extends BaseView {
|
|
|
224
227
|
@prop() replaceStr = '';
|
|
225
228
|
@prop() caseSensitive = false;
|
|
226
229
|
@prop() useRegex = false;
|
|
230
|
+
@prop() isSearching = false;
|
|
227
231
|
|
|
228
232
|
override view = SearchComponent;
|
|
229
233
|
|
|
@@ -270,7 +274,7 @@ export class LibroSearchView extends BaseView {
|
|
|
270
274
|
}
|
|
271
275
|
};
|
|
272
276
|
|
|
273
|
-
|
|
277
|
+
onViewWillUnmount = async () => {
|
|
274
278
|
await this.searchProvider?.endQuery();
|
|
275
279
|
this.searchProvider?.dispose();
|
|
276
280
|
};
|
|
@@ -301,7 +305,7 @@ export class LibroSearchView extends BaseView {
|
|
|
301
305
|
}
|
|
302
306
|
};
|
|
303
307
|
|
|
304
|
-
search = (hightlightNext = true) => {
|
|
308
|
+
search = async (hightlightNext = true) => {
|
|
305
309
|
if (this.searchProvider) {
|
|
306
310
|
this.lastSearch = this.findStr;
|
|
307
311
|
const query = this.utils.parseQuery(
|
|
@@ -310,9 +314,11 @@ export class LibroSearchView extends BaseView {
|
|
|
310
314
|
this.useRegex,
|
|
311
315
|
);
|
|
312
316
|
if (query) {
|
|
313
|
-
this.
|
|
317
|
+
this.isSearching = true;
|
|
318
|
+
await this.searchProvider?.startQuery(query, undefined, hightlightNext);
|
|
319
|
+
this.isSearching = false;
|
|
314
320
|
} else {
|
|
315
|
-
this.searchProvider?.endQuery();
|
|
321
|
+
await this.searchProvider?.endQuery();
|
|
316
322
|
}
|
|
317
323
|
}
|
|
318
324
|
};
|
|
@@ -377,11 +383,11 @@ export class LibroSearchView extends BaseView {
|
|
|
377
383
|
return height;
|
|
378
384
|
};
|
|
379
385
|
|
|
380
|
-
nextMatch = (reverse: boolean) => {
|
|
386
|
+
nextMatch = async (reverse: boolean) => {
|
|
381
387
|
if (reverse) {
|
|
382
|
-
this.searchProvider?.highlightPrevious();
|
|
388
|
+
await this.searchProvider?.highlightPrevious();
|
|
383
389
|
} else {
|
|
384
|
-
this.searchProvider?.highlightNext();
|
|
390
|
+
await this.searchProvider?.highlightNext();
|
|
385
391
|
}
|
|
386
392
|
};
|
|
387
393
|
|
|
@@ -408,16 +414,13 @@ export class LibroSearchView extends BaseView {
|
|
|
408
414
|
}
|
|
409
415
|
};
|
|
410
416
|
|
|
411
|
-
protected doHandleFindChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
412
|
-
this.findStr = e.target.value;
|
|
413
|
-
};
|
|
414
|
-
|
|
415
417
|
handleFindChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
416
418
|
this.findStr = e.target.value;
|
|
417
419
|
if (this.findStr !== this.lastSearch) {
|
|
418
420
|
this.search(false);
|
|
419
421
|
}
|
|
420
422
|
};
|
|
423
|
+
|
|
421
424
|
handleReplaceChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
422
425
|
this.replaceStr = e.target.value;
|
|
423
426
|
};
|