UNPKG

@codedoc/core

Version:

Create beautiful modern documentation websites.

87 lines 4.26 kB
"use strict"; 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