Files
talk/docs/themes/coral/source/js/plugins.js
T
Wyatt Johnson 0159918049 docs updates
2018-05-02 13:04:17 -06:00

87 lines
2.2 KiB
JavaScript

/* global lunr */
/* eslint-env browser */
// Sourced from https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
// Sourced from https://github.com/hexojs/site/blob/8e8ed4901769abbf76263125f82832df76ced58b/themes/navy/source/js/plugins.js.
(function() {
'use strict';
var elements = document.getElementsByClassName('plugin');
var $count = document.getElementById('plugin-list-count');
var $input = document.getElementById('plugin-search-input');
var elementLen = elements.length;
var index = lunr.Index.load(window.SEARCH_INDEX);
function updateCount(count) {
$count.innerHTML = count + (count === 1 ? ' plugin' : ' plugins');
}
function addClass(elem, className) {
var classList = elem.classList;
if (!classList.contains(className)) {
classList.add(className);
}
}
function removeClass(elem, className) {
var classList = elem.classList;
if (classList.contains(className)) {
classList.remove(className);
}
}
function search(value) {
var result = index.search('*' + value + '* ' + value);
var len = result.length;
var selected = {};
var i = 0;
for (i = 0; i < len; i++) {
selected[result[i].ref] = true;
}
for (i = 0; i < elementLen; i++) {
if (selected[i]) {
addClass(elements[i], 'd-block');
} else {
removeClass(elements[i], 'd-block');
}
}
updateCount(len);
}
function displayAll() {
for (var i = 0; i < elementLen; i++) {
addClass(elements[i], 'd-block');
}
updateCount(elements.length);
}
var searchParam = getParameterByName('q');
if (searchParam && searchParam.length > 0) {
$input.value = searchParam;
search(searchParam);
}
$input.addEventListener('input', function() {
var value = this.value;
if (!value) return displayAll();
search(value);
});
})();