@codedoc/core
Version:
Create beautiful modern documentation websites.
87 lines • 4.26 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.postNavSearch$ = exports.postNavSearch = void 0;
var color_1 = __importDefault(require("color"));
var transport_1 = require("@connectv/sdh/transport");
var renderer_1 = require("../../../../../transport/renderer");
var switcher_1 = require("./switcher");
function postNavSearch() {
var query = undefined;
var switcher$;
window.addEventListener('on-navigation-search', function (event) {
query = event.detail.query;
});
window.addEventListener('navigation', function () {
if (query)
setTimeout(function () {
search(query || '');
query = undefined;
}, 300);
});
window.addEventListener('same-page-navigation', function () {
if (query)
search(query);
query = undefined;
});
var renderer = renderer_1.getRenderer();
function search(query) {
var q = query.toLowerCase();
var highlights$ = [];
var container$ = document.getElementById('-codedoc-container');
if (container$) {
var _scan_1 = function (el$, query) {
if (el$ instanceof Text) {
var text = el$.textContent;
var _match = query.exec((text === null || text === void 0 ? void 0 : text.toLowerCase()) || '');
if (text && _match) {
var matched = _match[0];
var before = text.substr(0, _match.index);
var match = text.substr(_match.index, matched.length);
var after = text.substr(_match.index + matched.length);
var color = color_1.default(window.getComputedStyle(el$.parentElement).color);
if (color.saturationv() < .2) {
color = color.isLight() ? 'teal' : 'yellow';
}
else
color = color.rotate(90).alpha(.35);
el$.textContent = after;
var before$ = document.createTextNode(before);
var match$ = renderer.create("span", { "data-no-search": true, style: "\n background: " + color.toString() + "; \n display: inline-block; \n vertical-align: middle;\n transform-origin: center;\n transition: transform .15s\n " }, match);
highlights$.push(match$);
renderer.render(renderer.create("fragment", null,
before$,
match$)).before(el$);
_scan_1(before$, query);
_scan_1(el$, query);
}
}
else {
if (el$ instanceof HTMLElement && (el$.hasAttribute('data-no-search') || el$.classList.contains('icon-font')))
return;
el$.childNodes.forEach(function (n) { return _scan_1(n, query); });
}
};
_scan_1(container$, new RegExp(q));
if (highlights$.length == 0) {
var split = q.split(' ');
if (split.length > 0) {
_scan_1(container$, new RegExp(split.join('\\s+.*\\s+')));
if (highlights$.length == 0) {
split.forEach(function (part) { return _scan_1(container$, new RegExp(part)); });
}
}
}
}
if (switcher$)
switcher$.remove();
switcher$ = renderer.create(switcher_1.SearchSwitcher, { elements: highlights$, query: query });
renderer.render(switcher$).on(document.body);
}
window._find = search;
}
exports.postNavSearch = postNavSearch;
exports.postNavSearch$ = transport_1.funcTransport(postNavSearch);
//# sourceMappingURL=index.js.map