import {search} from './search' let NO_DATA_TEXT = '' let options function style() { const code = ` .sidebar { padding-top: 0; } .search { margin-bottom: 20px; padding: 6px; border-bottom: 1px solid #eee; } .search .input-wrap { display: flex; align-items: center; } .search .results-panel { display: none; } .search .results-panel.show { display: block; } .search input { outline: none; border: none; width: 100%; padding: 0 7px; line-height: 36px; font-size: 14px; } .search input::-webkit-search-decoration, .search input::-webkit-search-cancel-button, .search input { -webkit-appearance: none; -moz-appearance: none; appearance: none; } .search .clear-button { width: 36px; text-align: right; display: none; } .search .clear-button.show { display: block; } .search .clear-button svg { transform: scale(.5); } .search h2 { font-size: 17px; margin: 10px 0; } .search a { text-decoration: none; color: inherit; } .search .matching-post { border-bottom: 1px solid #eee; } .search .matching-post:last-child { border-bottom: 0; } .search p { font-size: 14px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .search p.empty { text-align: center; } .app-name.hide, .sidebar-nav.hide { display: none; }` Docsify.dom.style(code) } function tpl(defaultValue = '') { const html = `
${NO_DATA_TEXT}
` if (options.hideOtherSidebarContent) { $sidebarNav.classList.add('hide') $appName.classList.add('hide') } } function bindEvents() { const $search = Docsify.dom.find('div.search') const $input = Docsify.dom.find($search, 'input') const $inputWrap = Docsify.dom.find($search, '.input-wrap') let timeId // Prevent to Fold sidebar Docsify.dom.on( $search, 'click', e => e.target.tagName !== 'A' && e.stopPropagation() ) Docsify.dom.on($input, 'input', e => { clearTimeout(timeId) timeId = setTimeout(_ => doSearch(e.target.value.trim()), 100) }) Docsify.dom.on($inputWrap, 'click', e => { // Click input outside if (e.target.tagName !== 'INPUT') { $input.value = '' doSearch() } }) } function updatePlaceholder(text, path) { const $input = Docsify.dom.getNode('.search input[type="search"]') if (!$input) { return } if (typeof text === 'string') { $input.placeholder = text } else { const match = Object.keys(text).filter(key => path.indexOf(key) > -1)[0] $input.placeholder = text[match] } } function updateNoData(text, path) { if (typeof text === 'string') { NO_DATA_TEXT = text } else { const match = Object.keys(text).filter(key => path.indexOf(key) > -1)[0] NO_DATA_TEXT = text[match] } } function updateOptions(opts) { options = opts } export function init(opts, vm) { const keywords = vm.router.parse().query.s updateOptions(opts) style() tpl(keywords) bindEvents() keywords && setTimeout(_ => doSearch(keywords), 500) } export function update(opts, vm) { updateOptions(opts) updatePlaceholder(opts.placeholder, vm.route.path) updateNoData(opts.noData, vm.route.path) }