jekyll-theme-systemhalted 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/LICENSE.md +9 -0
- data/README.md +155 -0
- data/_data/taxonomy.yml +11 -0
- data/_includes/comments.html +14 -0
- data/_includes/footer.html +46 -0
- data/_includes/head.html +76 -0
- data/_includes/share-buttons.html +39 -0
- data/_includes/sidebar.html +32 -0
- data/_layouts/category.html +21 -0
- data/_layouts/collections.html +34 -0
- data/_layouts/default.html +68 -0
- data/_layouts/page.html +8 -0
- data/_layouts/post.html +108 -0
- data/assets/android-chrome-192x192.png +0 -0
- data/assets/android-chrome-512x512.png +0 -0
- data/assets/apple-touch-icon-precomposed.png +0 -0
- data/assets/apple-touch-icon.png +0 -0
- data/assets/css/nord.css +1759 -0
- data/assets/favicon-16x16.png +0 -0
- data/assets/favicon-32x32.png +0 -0
- data/assets/favicon.ico +0 -0
- data/assets/images/404.jpg +0 -0
- data/assets/images/bg-arrow.png +0 -0
- data/assets/images/bgimage1.jpg +0 -0
- data/assets/images/bgimage2.jpg +0 -0
- data/assets/images/example.png +0 -0
- data/assets/images/example1.png +0 -0
- data/assets/js/elasticlunr.min.js +10 -0
- data/assets/js/script.js +416 -0
- data/assets/js/search-data.js +26 -0
- data/assets/js/search.js +72 -0
- data/assets/site.webmanifest +1 -0
- data/lib/jekyll-theme-systemhalted/version.rb +5 -0
- data/lib/jekyll-theme-systemhalted.rb +3 -0
- metadata +167 -0
|
Binary file
|
|
Binary file
|
data/assets/favicon.ico
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* elasticlunr - http://weixsong.github.io
|
|
3
|
+
* Lightweight full-text search engine in Javascript for browser search and offline search. - 0.8.8
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2016 Oliver Nightingale
|
|
6
|
+
* Copyright (C) 2016 Wei Song
|
|
7
|
+
* MIT Licensed
|
|
8
|
+
* @license
|
|
9
|
+
*/
|
|
10
|
+
!function(){var e=function(t){var n=new e.Index;return n.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),t&&t.call(n,n),n};e.version="0.8.8",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},e.EventEmitter=function(){this.events={}},e.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},e.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!=n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},e.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)})}},e.EventEmitter.prototype.hasHandler=function(e){return e in this.events},e.tokenizer=function(t){if(!arguments.length||null===t||void 0===t)return[];if(Array.isArray(t)){var n=t.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(t){return e.utils.toString(t).toLowerCase()});var i=[];return n.forEach(function(t){var n=t.split(e.tokenizer.seperator);i=i.concat(n)},this),i}return t.toString().trim().toLowerCase().split(e.tokenizer.seperator)},e.tokenizer.defaultSeperator=/[\s\-]+/,e.tokenizer.seperator=e.tokenizer.defaultSeperator,e.tokenizer.setSeperator=function(t){null!==t&&void 0!==t&&"object"==typeof t&&(e.tokenizer.seperator=t)},e.tokenizer.resetSeperator=function(){e.tokenizer.seperator=e.tokenizer.defaultSeperator},e.tokenizer.getSeperator=function(){return e.tokenizer.seperator},e.Pipeline=function(){this._queue=[]},e.Pipeline.registeredFunctions={},e.Pipeline.registerFunction=function(t,n){n in e.Pipeline.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+n),t.label=n,e.Pipeline.registeredFunctions[n]=t},e.Pipeline.getRegisteredFunction=function(t){return t in e.Pipeline.registeredFunctions!=!0?null:e.Pipeline.registeredFunctions[t]},e.Pipeline.warnIfFunctionNotRegistered=function(t){var n=t.label&&t.label in this.registeredFunctions;n||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var n=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.getRegisteredFunction(t);if(!i)throw new Error("Cannot load un-registered function: "+t);n.add(i)}),n},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._queue.push(t)},this)},e.Pipeline.prototype.after=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(t);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},e.Pipeline.prototype.before=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(t);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},e.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},e.Pipeline.prototype.reset=function(){this._queue=[]},e.Pipeline.prototype.get=function(){return this._queue},e.Pipeline.prototype.toJSON=function(){return this._queue.map(function(t){return e.Pipeline.warnIfFunctionNotRegistered(t),t.label})},e.Index=function(){this._fields=[],this._ref="id",this.pipeline=new e.Pipeline,this.documentStore=new e.DocumentStore,this.index={},this.eventEmitter=new e.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},e.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},e.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},e.Index.load=function(t){t.version!==e.version&&e.utils.warn("version mismatch: current "+e.version+" importing "+t.version);var n=new this;n._fields=t.fields,n._ref=t.ref,n.documentStore=e.DocumentStore.load(t.documentStore),n.pipeline=e.Pipeline.load(t.pipeline),n.index={};for(var i in t.index)n.index[i]=e.InvertedIndex.load(t.index[i]);return n},e.Index.prototype.addField=function(t){return this._fields.push(t),this.index[t]=new e.InvertedIndex,this},e.Index.prototype.setRef=function(e){return this._ref=e,this},e.Index.prototype.saveDocument=function(t){return this.documentStore=new e.DocumentStore(t),this},e.Index.prototype.addDoc=function(t,n){if(t){var n=void 0===n?!0:n,i=t[this._ref];this.documentStore.addDoc(i,t),this._fields.forEach(function(n){var o=this.pipeline.run(e.tokenizer(t[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",t,this)}},e.Index.prototype.removeDocByRef=function(t){if(t){if(0==this.documentStore.isDocStored())return void e.utils.warn("remove doc by ref is not allowed, because currectly not storing documents in DocumentStore");if(this.documentStore.hasDoc(t)){var n=this.documentStore.getDoc(t);this.removeDoc(n)}}},e.Index.prototype.removeDoc=function(t,n){if(t){var n=void 0===n?!0:n,i=t[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(e.tokenizer(t[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",t,this))}},e.Index.prototype.update=function(e,t){var t=void 0===t?!0:t;this.removeDoc(e,!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},e.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},e.Index.prototype.getFields=function(){return this._fields.slice()},e.Index.prototype.search=function(t,n){if(!t)return[];var i=null;null!=n&&(i=JSON.stringify(n));var o=new e.Configuration(i,this.getFields()).get(),r=this.pipeline.run(e.tokenizer(t)),s={};for(var u in o){var a=this.fieldSearch(r,u,o),l=o[u].boost;for(var d in a)a[d]=a[d]*l;for(var d in a)d in s?s[d]+=a[d]:s[d]=a[d]}var c=[];for(var d in s)c.push({ref:d,score:s[d]});return c.sort(function(e,t){return t.score-e.score}),c},e.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r={},s={};return e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e)),n.forEach(function(n){var i=this.index[t].getDocs(n),o=this.idf(n,t);for(var u in i){var a=this.index[t].getTermFrequency(n,u),l=this.documentStore.getFieldLength(u,t),d=1;0!=l&&(d=1/Math.sqrt(l));var c=1;n!=e?c=.15*(1-(n.length-e.length)/n.length):this.fieldSearchStats(s,n,i);var f=a*o*d*c;u in r?r[u]+=f:r[u]=f}},this)},this),"AND"==i&&(r=this.intersect(r,s,e.length)),r=this.coordNorm(r,s,e.length)},e.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},e.Index.prototype.intersect=function(e,t,n){var i={};for(var o in e)o in t&&t[o].length==n&&(i[o]=e[o]);return i},e.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},e.Index.prototype.toJSON=function(){var t={};return this._fields.forEach(function(e){t[e]=this.index[e].toJSON()},this),{version:e.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:t,pipeline:this.pipeline.toJSON()}},e.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},e.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},e.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},e.DocumentStore.prototype.isDocStored=function(){return this._save},e.DocumentStore.prototype.addDoc=function(e,t){this.hasDoc(e)||this.length++,this.docs[e]=this._save===!0?t:null},e.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},e.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},e.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},e.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},e.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},e.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},e.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},e.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,d=new RegExp(s),c=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,x=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),I=new RegExp("^"+o+i+"[^aeiouwxy]$"),S=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=d,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=x,a=w,l=I,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=S,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=d,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=d,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=c,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=c,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=c,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=c,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),e.Pipeline.registerFunction(e.stemmer,"stemmer"),e.stopWordFilter=function(t){return t&&e.stopWordFilter.stopWords[t]!==!0?t:void 0},e.clearStopWords=function(){e.stopWordFilter.stopWords={}},e.addStopWords=function(t){null!=t&&Array.isArray(t)!==!1&&t.forEach(function(t){e.stopWordFilter.stopWords[t]=!0},this)},e.resetStopWords=function(){e.stopWordFilter.stopWords=e.defaultStopWords},e.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},e.stopWordFilter.stopWords=e.defaultStopWords,e.Pipeline.registerFunction(e.stopWordFilter,"stopWordFilter"),e.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},e.Pipeline.registerFunction(e.trimmer,"trimmer"),e.InvertedIndex=function(){this.root={docs:{},df:0},this.length=0},e.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t.length=e.length,t},e.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1,this.length+=1)},e.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},e.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},e.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},e.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},e.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},e.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},e.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},e.InvertedIndex.prototype.toJSON=function(){return{root:this.root,length:this.length}},e.Configuration=function(t,n){var t=t||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(t),this.buildUserConfig(i,n)}catch(o){e.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},e.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},e.Configuration.prototype.buildUserConfig=function(t,n){var i="OR",o=!1;if(this.reset(),"bool"in t&&(i=t.bool||i),"expand"in t&&(o=t.expand||o),"fields"in t)for(var r in t.fields)if(n.indexOf(r)>-1){var s=t.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||1,bool:s.bool||i,expand:u}}else e.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},e.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},e.Configuration.prototype.get=function(){return this.config},e.Configuration.prototype.reset=function(){this.config={}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return e})}();
|
data/assets/js/script.js
ADDED
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
(function(document) {
|
|
2
|
+
var toggle = document.querySelector('.sidebar-toggle');
|
|
3
|
+
var sidebar = document.querySelector('#sidebar');
|
|
4
|
+
var checkbox = document.querySelector('#sidebar-checkbox');
|
|
5
|
+
var annotateToggle = document.querySelector('#annotate-toggle');
|
|
6
|
+
|
|
7
|
+
if (!toggle || !sidebar || !checkbox) return;
|
|
8
|
+
|
|
9
|
+
function setExpandedState() {
|
|
10
|
+
toggle.setAttribute('aria-expanded', checkbox.checked ? 'true' : 'false');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
document.addEventListener('click', function(e) {
|
|
14
|
+
var target = e.target;
|
|
15
|
+
|
|
16
|
+
if(!checkbox.checked ||
|
|
17
|
+
sidebar.contains(target) ||
|
|
18
|
+
(target === checkbox || target === toggle)) return;
|
|
19
|
+
|
|
20
|
+
checkbox.checked = false;
|
|
21
|
+
setExpandedState();
|
|
22
|
+
}, false);
|
|
23
|
+
|
|
24
|
+
checkbox.addEventListener('change', function() {
|
|
25
|
+
setExpandedState();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
toggle.addEventListener('keydown', function(event) {
|
|
29
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
checkbox.checked = !checkbox.checked;
|
|
32
|
+
setExpandedState();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
setExpandedState();
|
|
37
|
+
|
|
38
|
+
if (annotateToggle) {
|
|
39
|
+
annotateToggle.addEventListener('click', function() {
|
|
40
|
+
if (document.getElementById('hypothesis-script')) return;
|
|
41
|
+
var script = document.createElement('script');
|
|
42
|
+
script.src = 'https://hypothes.is/embed.js';
|
|
43
|
+
script.id = 'hypothesis-script';
|
|
44
|
+
document.head.appendChild(script);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
})(document);
|
|
48
|
+
|
|
49
|
+
(function(document) {
|
|
50
|
+
var root = document.documentElement;
|
|
51
|
+
var toggle = document.querySelector('#theme-toggle');
|
|
52
|
+
|
|
53
|
+
if (!toggle) return;
|
|
54
|
+
|
|
55
|
+
var storageKey = 'theme';
|
|
56
|
+
var lightClass = 'theme-nord-light';
|
|
57
|
+
var darkClass = 'theme-nord-dark';
|
|
58
|
+
var label = toggle.querySelector('.theme-toggle-label');
|
|
59
|
+
var mediaQuery = null;
|
|
60
|
+
var storedTheme = null;
|
|
61
|
+
|
|
62
|
+
function normalizeTheme(value) {
|
|
63
|
+
return value === 'dark' || value === 'light' ? value : null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function getStoredTheme() {
|
|
67
|
+
try {
|
|
68
|
+
return normalizeTheme(localStorage.getItem(storageKey));
|
|
69
|
+
} catch (e) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function getPreferredTheme() {
|
|
75
|
+
try {
|
|
76
|
+
return mediaQuery && mediaQuery.matches ? 'dark' : 'light';
|
|
77
|
+
} catch (e) {
|
|
78
|
+
return 'light';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function updateToggle(theme) {
|
|
83
|
+
var isDark = theme === 'dark';
|
|
84
|
+
toggle.setAttribute('aria-pressed', isDark ? 'true' : 'false');
|
|
85
|
+
toggle.setAttribute('aria-label', isDark ? 'Switch to light mode' : 'Switch to dark mode');
|
|
86
|
+
toggle.setAttribute('title', isDark ? 'Switch to light mode' : 'Switch to dark mode');
|
|
87
|
+
if (label) {
|
|
88
|
+
label.textContent = isDark ? 'Light mode' : 'Dark mode';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function applyTheme(theme, persist) {
|
|
93
|
+
root.classList.remove(lightClass, darkClass);
|
|
94
|
+
root.classList.add(theme === 'dark' ? darkClass : lightClass);
|
|
95
|
+
|
|
96
|
+
if (persist) {
|
|
97
|
+
storedTheme = theme;
|
|
98
|
+
try {
|
|
99
|
+
localStorage.setItem(storageKey, theme);
|
|
100
|
+
} catch (e) {
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
updateToggle(theme);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (window.matchMedia) {
|
|
108
|
+
mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
storedTheme = getStoredTheme();
|
|
112
|
+
var initialTheme = storedTheme || getPreferredTheme();
|
|
113
|
+
applyTheme(initialTheme, false);
|
|
114
|
+
|
|
115
|
+
if (mediaQuery) {
|
|
116
|
+
var handleSystemChange = function(event) {
|
|
117
|
+
if (storedTheme) return;
|
|
118
|
+
applyTheme(event.matches ? 'dark' : 'light', false);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
if (mediaQuery.addEventListener) {
|
|
122
|
+
mediaQuery.addEventListener('change', handleSystemChange);
|
|
123
|
+
} else if (mediaQuery.addListener) {
|
|
124
|
+
mediaQuery.addListener(handleSystemChange);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
toggle.addEventListener('click', function() {
|
|
129
|
+
var nextTheme = root.classList.contains(darkClass) ? 'light' : 'dark';
|
|
130
|
+
applyTheme(nextTheme, true);
|
|
131
|
+
});
|
|
132
|
+
})(document);
|
|
133
|
+
|
|
134
|
+
(function(document) {
|
|
135
|
+
var container = document.querySelector('#archive-years');
|
|
136
|
+
var sortSelect = document.querySelector('#archive-sort');
|
|
137
|
+
|
|
138
|
+
if (!container || !sortSelect) return;
|
|
139
|
+
|
|
140
|
+
var sections = Array.prototype.slice.call(container.querySelectorAll('.archive-year'));
|
|
141
|
+
|
|
142
|
+
function sortSections(mode) {
|
|
143
|
+
var sorted = sections.slice().sort(function(a, b) {
|
|
144
|
+
var yearA = parseInt(a.dataset.year, 10);
|
|
145
|
+
var yearB = parseInt(b.dataset.year, 10);
|
|
146
|
+
var countA = parseInt(a.dataset.count, 10);
|
|
147
|
+
var countB = parseInt(b.dataset.count, 10);
|
|
148
|
+
|
|
149
|
+
switch (mode) {
|
|
150
|
+
case 'year-asc':
|
|
151
|
+
return yearA - yearB;
|
|
152
|
+
case 'count-desc':
|
|
153
|
+
if (countB !== countA) return countB - countA;
|
|
154
|
+
return yearB - yearA;
|
|
155
|
+
case 'count-asc':
|
|
156
|
+
if (countA !== countB) return countA - countB;
|
|
157
|
+
return yearB - yearA;
|
|
158
|
+
case 'year-desc':
|
|
159
|
+
default:
|
|
160
|
+
return yearB - yearA;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
sorted.forEach(function(section) {
|
|
165
|
+
container.appendChild(section);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
sortSelect.addEventListener('change', function(event) {
|
|
170
|
+
sortSections(event.target.value);
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
sortSections(sortSelect.value);
|
|
174
|
+
})(document);
|
|
175
|
+
|
|
176
|
+
(function(document) {
|
|
177
|
+
var toggle = document.querySelector('#search-toggle');
|
|
178
|
+
var overlay = document.querySelector('#search-overlay');
|
|
179
|
+
var closeBtn = document.querySelector('#search-close');
|
|
180
|
+
var input = document.querySelector('#search-input');
|
|
181
|
+
var results = document.querySelector('#search-results');
|
|
182
|
+
var status = document.querySelector('#search-status');
|
|
183
|
+
var lastFocusedElement = null;
|
|
184
|
+
|
|
185
|
+
if (!toggle || !overlay || !closeBtn || !input || !results) return;
|
|
186
|
+
|
|
187
|
+
function isEditableTarget(target) {
|
|
188
|
+
if (!target) return false;
|
|
189
|
+
var tag = target.tagName ? target.tagName.toLowerCase() : '';
|
|
190
|
+
return tag === 'input' || tag === 'textarea' || target.isContentEditable;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function setOverlayState(isOpen) {
|
|
194
|
+
overlay.classList.toggle('is-open', isOpen);
|
|
195
|
+
overlay.setAttribute('aria-hidden', isOpen ? 'false' : 'true');
|
|
196
|
+
toggle.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
|
|
197
|
+
document.body.classList.toggle('search-open', isOpen);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function openSearch() {
|
|
201
|
+
lastFocusedElement = document.activeElement;
|
|
202
|
+
setOverlayState(true);
|
|
203
|
+
window.setTimeout(function() {
|
|
204
|
+
input.focus();
|
|
205
|
+
input.select();
|
|
206
|
+
}, 0);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function clearResults(message) {
|
|
210
|
+
results.innerHTML = '';
|
|
211
|
+
var msg = document.createElement('p');
|
|
212
|
+
msg.className = 'search-empty';
|
|
213
|
+
msg.textContent = message;
|
|
214
|
+
results.appendChild(msg);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function setStatus(message, options) {
|
|
218
|
+
if (!status) return;
|
|
219
|
+
var opts = options || {};
|
|
220
|
+
status.classList.remove('is-loading', 'is-error', 'is-hidden');
|
|
221
|
+
if (!message) {
|
|
222
|
+
status.textContent = '';
|
|
223
|
+
status.classList.add('is-hidden');
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
status.classList.toggle('is-loading', !!opts.loading);
|
|
227
|
+
status.classList.toggle('is-error', !!opts.error);
|
|
228
|
+
if (opts.html) {
|
|
229
|
+
status.innerHTML = message;
|
|
230
|
+
} else {
|
|
231
|
+
status.textContent = message;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function buildSearchIndex() {
|
|
236
|
+
if (window.siteIndex && window.siteStore) {
|
|
237
|
+
return { index: window.siteIndex, store: window.siteStore };
|
|
238
|
+
}
|
|
239
|
+
if (window.elasticlunr) {
|
|
240
|
+
var store = window.siteStore || window.siteDocs;
|
|
241
|
+
if (store) {
|
|
242
|
+
var idx = window.elasticlunr(function() {
|
|
243
|
+
this.addField('title');
|
|
244
|
+
this.addField('layout');
|
|
245
|
+
this.addField('content');
|
|
246
|
+
this.setRef('id');
|
|
247
|
+
});
|
|
248
|
+
for (var i = 0; i < store.length; i++) {
|
|
249
|
+
var doc = store[i];
|
|
250
|
+
if (!doc) continue;
|
|
251
|
+
idx.addDoc({
|
|
252
|
+
title: doc.title,
|
|
253
|
+
layout: doc.layout,
|
|
254
|
+
content: doc.content,
|
|
255
|
+
id: doc.id
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
window.siteIndex = idx;
|
|
259
|
+
window.siteStore = store;
|
|
260
|
+
return { index: idx, store: store };
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function findMatches(query, indexData) {
|
|
267
|
+
var matches = indexData.index.search(query, { expand: true });
|
|
268
|
+
if (matches.length === 0) {
|
|
269
|
+
var lowered = query.toLowerCase();
|
|
270
|
+
for (var i = 0; i < indexData.store.length; i++) {
|
|
271
|
+
var doc = indexData.store[i];
|
|
272
|
+
var haystack = (doc.title + ' ' + doc.content).toLowerCase();
|
|
273
|
+
if (haystack.indexOf(lowered) !== -1) {
|
|
274
|
+
matches.push({ ref: doc.id });
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return matches;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function renderResults(query) {
|
|
282
|
+
var trimmed = query.trim();
|
|
283
|
+
setStatus('');
|
|
284
|
+
if (!trimmed) {
|
|
285
|
+
clearResults('Type to search the archive.');
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (!(window.siteIndex && window.siteStore)) {
|
|
290
|
+
setStatus('Building search index...', { loading: true });
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
var indexData = buildSearchIndex();
|
|
294
|
+
if (!indexData) {
|
|
295
|
+
results.innerHTML = '';
|
|
296
|
+
var fallbackMessage = 'Search index not available. Try again in a moment.';
|
|
297
|
+
setStatus(fallbackMessage, { error: true });
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
setStatus('');
|
|
301
|
+
|
|
302
|
+
var matches = findMatches(trimmed, indexData);
|
|
303
|
+
results.innerHTML = '';
|
|
304
|
+
|
|
305
|
+
var count = document.createElement('div');
|
|
306
|
+
count.className = 'search-count';
|
|
307
|
+
count.textContent = matches.length + (matches.length === 1 ? ' result' : ' results');
|
|
308
|
+
results.appendChild(count);
|
|
309
|
+
|
|
310
|
+
if (matches.length === 0) {
|
|
311
|
+
clearResults('No results for "' + trimmed + '".');
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
var maxResults = 12;
|
|
316
|
+
for (var i = 0; i < matches.length && i < maxResults; i++) {
|
|
317
|
+
var ref = matches[i].ref;
|
|
318
|
+
var doc = indexData.store[ref];
|
|
319
|
+
if (!doc) continue;
|
|
320
|
+
|
|
321
|
+
var item = document.createElement('a');
|
|
322
|
+
item.className = 'search-result';
|
|
323
|
+
item.href = doc.link;
|
|
324
|
+
|
|
325
|
+
var title = document.createElement('div');
|
|
326
|
+
title.className = 'search-result-title';
|
|
327
|
+
title.textContent = doc.title || doc.link;
|
|
328
|
+
item.appendChild(title);
|
|
329
|
+
|
|
330
|
+
if (doc.layout) {
|
|
331
|
+
var meta = document.createElement('div');
|
|
332
|
+
meta.className = 'search-result-meta';
|
|
333
|
+
meta.textContent = doc.layout;
|
|
334
|
+
item.appendChild(meta);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (doc.snippet) {
|
|
338
|
+
var snippet = document.createElement('div');
|
|
339
|
+
snippet.className = 'search-result-snippet';
|
|
340
|
+
snippet.textContent = doc.snippet;
|
|
341
|
+
item.appendChild(snippet);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
results.appendChild(item);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (matches.length > maxResults) {
|
|
348
|
+
var more = document.createElement('div');
|
|
349
|
+
more.className = 'search-count';
|
|
350
|
+
more.textContent = '...and ' + (matches.length - maxResults) + ' more';
|
|
351
|
+
results.appendChild(more);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function closeSearch() {
|
|
356
|
+
setOverlayState(false);
|
|
357
|
+
input.value = '';
|
|
358
|
+
setStatus('');
|
|
359
|
+
clearResults('Type to search the archive.');
|
|
360
|
+
if (lastFocusedElement && lastFocusedElement.focus) {
|
|
361
|
+
lastFocusedElement.focus();
|
|
362
|
+
}
|
|
363
|
+
lastFocusedElement = null;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
function getFocusableElements() {
|
|
367
|
+
return Array.prototype.slice.call(
|
|
368
|
+
overlay.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')
|
|
369
|
+
).filter(function(el) {
|
|
370
|
+
return el.offsetWidth || el.offsetHeight || el === document.activeElement;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
toggle.addEventListener('click', function() {
|
|
375
|
+
openSearch();
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
closeBtn.addEventListener('click', function() {
|
|
379
|
+
closeSearch();
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
overlay.addEventListener('click', function(event) {
|
|
383
|
+
if (event.target === overlay) {
|
|
384
|
+
closeSearch();
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
overlay.addEventListener('keydown', function(event) {
|
|
389
|
+
if (event.key !== 'Tab' || !overlay.classList.contains('is-open')) return;
|
|
390
|
+
var focusable = getFocusableElements();
|
|
391
|
+
if (!focusable.length) return;
|
|
392
|
+
var first = focusable[0];
|
|
393
|
+
var last = focusable[focusable.length - 1];
|
|
394
|
+
if (event.shiftKey && document.activeElement === first) {
|
|
395
|
+
event.preventDefault();
|
|
396
|
+
last.focus();
|
|
397
|
+
} else if (!event.shiftKey && document.activeElement === last) {
|
|
398
|
+
event.preventDefault();
|
|
399
|
+
first.focus();
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
input.addEventListener('input', function(event) {
|
|
404
|
+
renderResults(event.target.value);
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
document.addEventListener('keydown', function(event) {
|
|
408
|
+
if (event.key === '/' && !overlay.classList.contains('is-open') && !isEditableTarget(event.target)) {
|
|
409
|
+
event.preventDefault();
|
|
410
|
+
openSearch();
|
|
411
|
+
} else if (event.key === 'Escape' && overlay.classList.contains('is-open')) {
|
|
412
|
+
event.preventDefault();
|
|
413
|
+
closeSearch();
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
})(document);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
---
|
|
3
|
+
(function() {
|
|
4
|
+
var docs = [];
|
|
5
|
+
{% assign search_docs = site.posts %}
|
|
6
|
+
{% for collection in site.collections %}
|
|
7
|
+
{% if collection.output == true and collection.label != "posts" %}
|
|
8
|
+
{% assign search_docs = search_docs | concat: collection.docs %}
|
|
9
|
+
{% endif %}
|
|
10
|
+
{% endfor %}
|
|
11
|
+
{% assign doc_index = 0 %}
|
|
12
|
+
{% for doc in search_docs %}
|
|
13
|
+
{% if doc.title and doc.search_exclude != true and doc.url != "/404.html" %}
|
|
14
|
+
docs.push({
|
|
15
|
+
id: {{ doc_index }},
|
|
16
|
+
title: {{ doc.title | jsonify }},
|
|
17
|
+
layout: {{ doc.layout | default: doc.collection | jsonify }},
|
|
18
|
+
content: {{ doc.content | strip_html | strip_newlines | jsonify }},
|
|
19
|
+
link: {{ doc.url | relative_url | jsonify }},
|
|
20
|
+
snippet: {{ doc.description | default: doc.excerpt | default: doc.content | strip_html | strip_newlines | truncate: 180 | jsonify }}
|
|
21
|
+
});
|
|
22
|
+
{% assign doc_index = doc_index | plus: 1 %}
|
|
23
|
+
{% endif %}
|
|
24
|
+
{% endfor %}
|
|
25
|
+
window.siteDocs = docs;
|
|
26
|
+
})();
|
data/assets/js/search.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
// Based on a script by Kathie Decora : katydecorah.com/code/lunr-and-jekyll/
|
|
5
|
+
|
|
6
|
+
// Create the lunr index for the search
|
|
7
|
+
var index = elasticlunr(function () {
|
|
8
|
+
this.addField('title')
|
|
9
|
+
this.addField('author')
|
|
10
|
+
this.addField('layout')
|
|
11
|
+
this.addField('content')
|
|
12
|
+
this.setRef('id')
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
// Add to this index the proper metadata from the Jekyll content
|
|
16
|
+
{% assign count = 0 %}{% for post in site.posts %}
|
|
17
|
+
index.addDoc({
|
|
18
|
+
title: {{post.title | jsonify}},
|
|
19
|
+
author: {{post.author | jsonify}},
|
|
20
|
+
layout: {{post.layout | jsonify}},
|
|
21
|
+
content: {{post.content | jsonify | strip_html}},
|
|
22
|
+
id: {{count}}
|
|
23
|
+
});{% assign count = count | plus: 1 %}{% endfor %}
|
|
24
|
+
console.log( jQuery.type(index) );
|
|
25
|
+
|
|
26
|
+
// Builds reference data (maybe not necessary for us, to check)
|
|
27
|
+
var store = [{% for post in site.posts %}{
|
|
28
|
+
"title": {{post.title | jsonify}},
|
|
29
|
+
"author": {{post.author | jsonify}},
|
|
30
|
+
"layout": {{ post.layout | jsonify }},
|
|
31
|
+
"link": {{post.url | jsonify}},
|
|
32
|
+
}
|
|
33
|
+
{% unless forloop.last %},{% endunless %}{% endfor %}]
|
|
34
|
+
|
|
35
|
+
// Query
|
|
36
|
+
var qd = {}; // Gets values from the URL
|
|
37
|
+
location.search.substr(1).split("&").forEach(function(item) {
|
|
38
|
+
var s = item.split("="),
|
|
39
|
+
k = s[0],
|
|
40
|
+
v = s[1] && decodeURIComponent(s[1]);
|
|
41
|
+
(k in qd) ? qd[k].push(v) : qd[k] = [v]
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
function doSearch() {
|
|
45
|
+
var resultdiv = $('#results');
|
|
46
|
+
var query = $('input#search').val();
|
|
47
|
+
|
|
48
|
+
// The search is then launched on the index built with Lunr
|
|
49
|
+
var result = index.search(query);
|
|
50
|
+
resultdiv.empty();
|
|
51
|
+
if (result.length == 0) {
|
|
52
|
+
resultdiv.append('<p class="">No results found.</p>');
|
|
53
|
+
} else if (result.length == 1) {
|
|
54
|
+
resultdiv.append('<p class="">Found '+result.length+' result</p>');
|
|
55
|
+
} else {
|
|
56
|
+
resultdiv.append('<p class="">Found '+result.length+' results</p>');
|
|
57
|
+
}
|
|
58
|
+
// Loop through, match, and add results
|
|
59
|
+
for (var item in result) {
|
|
60
|
+
var ref = result[item].ref;
|
|
61
|
+
var searchitem = '<div class="result"><p><a href="{{ site.baseurl }}'+store[ref].link+'?q='+query+'">'+store[ref].title+'</a></p></div>';
|
|
62
|
+
resultdiv.append(searchitem);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
$(document).ready(function() {
|
|
67
|
+
if (qd.q) {
|
|
68
|
+
$('input#search').val(qd.q[0]);
|
|
69
|
+
doSearch();
|
|
70
|
+
}
|
|
71
|
+
$('input#search').on('keyup', doSearch);
|
|
72
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"","short_name":"","icons":[{"src":"/assets/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/assets/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|