@launchmenu/applet-notes
Version:
An applet to make short notes
122 lines • 9.83 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCustomSearchPatternMatcher = void 0;
const regexp_match_indices_1 = __importDefault(require("regexp-match-indices"));
const core_1 = require("@launchmenu/core");
const model_react_1 = require("model-react");
/**
* Creates a custom search pattern matcher according to some user search pattern
* @param getPattern The pattern to use, may use capture groups prefixed with `$` for text to be included in the search, and capture groups `#fff` or similar hex patterns for highlighting
* @returns The search pattern matcher
*/
function createCustomSearchPatternMatcher(getPattern) {
const searchPatternMatcher = new model_react_1.DataCacher((hook, prev) => {
// Retrieve the updated pattern and make sure it changes
const pattern = getPattern(hook);
if (prev && pattern == (prev === null || prev === void 0 ? void 0 : prev.pattern))
return prev;
if (pattern == undefined)
return { pattern };
// Try to create a regex matcher
const regex = /\/(.*)\/(.*)/;
const match = regex.exec(pattern);
if (match)
try {
const regex = new RegExp(match[1], match[2]);
return {
pattern,
matcher: ({ search }) => {
// Try to match the regex
const match = regexp_match_indices_1.default(regex, search);
if (!match)
return;
// Compute the search text
const groups = match.indices.groups;
let highlight = [
{
start: match.index,
end: match[0].length,
text: match[0],
tags: [],
},
];
let searchText = search.substring(match[0].length);
if (groups) {
const result = getNodesFromGroups(groups, highlight, searchText);
highlight = result.highlight;
searchText = result.searchText + searchText;
}
// Return the selection and text
return {
name: this.getName(),
id: pattern,
searchText,
highlight,
};
},
};
}
catch (e) { }
// Create a literal text matcher
return {
pattern,
matcher: core_1.createStandardSearchPatternMatcher({
name: this.getName(),
id: pattern,
matcher: ({ search }) => search.slice(0, pattern.length)
? [{ start: 0, end: pattern.length }]
: undefined,
}),
};
});
/** Return the pattern matcher */
return (query, hook) => { var _a, _b; return (_b = (_a = searchPatternMatcher.get(hook)).matcher) === null || _b === void 0 ? void 0 : _b.call(_a, query, hook); };
}
exports.createCustomSearchPatternMatcher = createCustomSearchPatternMatcher;
/**
* Retrieves the highlight nodes and search text from the regex groups
* @param groups The regex groups
* @param highlight The highlight nodes
* @param search The search text
* @returns The search text and highlight nodes
*/
function getNodesFromGroups(groups, highlight, search) {
const { nodes, textItems } = Object.entries(groups).reduce(({ nodes, textItems }, [key, [start, end]]) => {
if (key[0] == "#") {
// Add a highlight node
const node = {
start,
end,
text: search.substring(start, end),
tags: [],
style: { color: key },
};
return {
nodes: core_1.mergeHighlightNodes([node], nodes),
textItems,
};
}
else if (key[0] == "$") {
// Add a text range
return {
nodes,
textItems: [{ index: start, text: key }, ...textItems],
};
}
return { nodes, textItems };
}, {
nodes: highlight,
textItems: [],
});
// Retrieve the search text and highlight nodes
return {
highlight: nodes,
searchText: textItems
.sort(({ index: a }, { index: b }) => a - b)
.reduce((allText, { text, index }, i, items) => { var _a; return allText + text.substr(0, (((_a = items[i + 1]) === null || _a === void 0 ? void 0 : _a.index) || Infinity) - index); }, ""),
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tU2VhcmNoUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YU1vZGVsL2NyZWF0ZUN1c3RvbVNlYXJjaFBhdHRlcm5NYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdGQUFtRDtBQUNuRCwyQ0FLMEI7QUFDMUIsNkNBQXVEO0FBRXZEOzs7O0dBSUc7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FDNUMsVUFBOEM7SUFFOUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLHdCQUFVLENBR3hDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2Qsd0RBQXdEO1FBQ3hELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2xELElBQUksT0FBTyxJQUFJLFNBQVM7WUFBRSxPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7UUFFM0MsZ0NBQWdDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSztZQUNMLElBQUk7Z0JBQ0EsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPO29CQUNILE9BQU87b0JBQ1AsT0FBTyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFO3dCQUNsQix5QkFBeUI7d0JBQ3pCLE1BQU0sS0FBSyxHQUFHLDhCQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUM3QyxJQUFJ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
;