@launchmenu/applet-notes
Version:
An applet to make short notes
144 lines • 11.8 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");
const color_1 = __importDefault(require("color"));
/**
* 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
* @param getName The name for the matcher
* @returns The search pattern matcher
*/
function createCustomSearchPatternMatcher(getPattern, getName) {
const searchPatternMatcher = new model_react_1.DataCacher((hook, prev) => {
var _a;
// 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 }, hook) => {
var _a;
// 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.index + match[0].length,
text: match[0],
tags: [core_1.highlightTags.patternMatch],
},
];
let searchText = search.substring(0, match.index) +
search.substring(match.index + match[0].length);
if (groups) {
const result = getNodesFromGroups(groups, highlight, search);
highlight = result.highlight;
searchText = result.searchText + searchText;
}
// Return the selection and text
return {
name: (_a = getName === null || getName === void 0 ? void 0 : getName(hook)) !== null && _a !== void 0 ? _a : pattern,
id: pattern,
searchText,
highlight,
};
},
};
}
catch (e) { }
// Create a literal text matcher
return {
pattern,
matcher: core_1.createStandardSearchPatternMatcher({
name: (_a = getName === null || getName === void 0 ? void 0 : getName(hook)) !== null && _a !== void 0 ? _a : pattern,
id: pattern,
matcher: ({ search }) => search.slice(0, pattern.length) == pattern
? [{ 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)
.filter(([, range]) => range)
.reduce(({ nodes, textItems }, [key, [start, end]]) => {
if (start != end) {
const colorMatch = key.match(/c.*_(.+)/);
if (colorMatch) {
// Add a highlight node
const colorString = colorMatch[1];
let color;
try {
new color_1.default("#" + colorString);
color = "#" + colorString;
}
catch (e) {
color = colorString;
}
const node = {
start,
end,
text: search.substring(start, end),
tags: [],
style: { color },
};
return {
nodes: core_1.mergeHighlightNodes([node], nodes),
textItems,
};
}
else if (key.slice(0, 2) == "t_") {
// Add a text range
return {
nodes,
textItems: [
{ index: start, text: search.substring(start, end) },
...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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tU2VhcmNoUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YU1vZGVsL3Rvb2xzL2NyZWF0ZUN1c3RvbVNlYXJjaFBhdHRlcm5NYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdGQUFtRDtBQUNuRCwyQ0FNMEI7QUFDMUIsNkNBQXVEO0FBQ3ZELGtEQUEwQjtBQUUxQjs7Ozs7R0FLRztBQUNILFNBQWdCLGdDQUFnQyxDQUM1QyxVQUE4QyxFQUM5QyxPQUFnQztJQUVoQyxNQUFNLG9CQUFvQixHQUFHLElBQUksd0JBQVUsQ0FHeEMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7O1FBQ2Qsd0RBQXdEO1FBQ3hELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2xELElBQUksT0FBTyxJQUFJLFNBQVM7WUFBRSxPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7UUFFM0MsZ0NBQWdDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSztZQUNMLElBQUk7Z0JBQ0EsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPO29CQUNILE9BQU87b0JBQ1AsT0FBTyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRTs7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsTUFBTSxLQUFLLEdBQUcs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
;