(function(){ function Commands(){ var $$ = this.$$; this.commands = linux_commands || []; this.elm_query = $$('query'); this.elm_btn = $$('search_btn'); this.elm_info = $$('commands_info'); this.elm_result = $$('result'); // 获取根路径 this.root_path = (function(){ var elm_path = $$('current_path'); var url = window.location.origin+window.location.pathname; return elm_path?url.replace(elm_path.value,''):''; })(); this.query = ''; // this.page_size = 10; //每页显示10条 this.elm_info.innerHTML = this.commands.length; this.init() this.goToIndex() } Commands.prototype = { $$:function(id){ return document.getElementById(id) }, goToIndex(){ var elma = document.getElementsByTagName('A'); for (var i = 0; i < elma.length; i++) { if(elma[i].pathname==='/') elma[i].href = this.root_path.replace(/\/$/,'')+'/'; } }, bindEvent:function(elm,type,handle){ if (elm.addEventListener) { elm.addEventListener(type, handle, false); } else if (elm.attachEvent) { elm.attachEvent('on'+type, handle); } }, isSreachIndexOF:function(oldstr,kw){ var istrue = false; if(oldstr&&toString.call(oldstr) === '[object Array]'){ for (var i = 0; i < oldstr.length; i++) { oldstr[i].toLowerCase()===kw.toLowerCase()?istrue=true:null; } return istrue; } if(!oldstr || !kw) return false; return oldstr.toLowerCase().indexOf(kw.toLowerCase()) > -1 ? true : false; }, //获取URL上面的参数 getQueryString:function(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = decodeURIComponent(window.location.hash.replace(/^(\#\!|\#)/,'')).match(reg); if (r != null) return unescape(r[2]); return null; }, pushState:function(){ if(window.history&&window.history.pushState) this.query ? history.pushState({},"linux_commands","#!kw="+this.query): history.pushState({},"linux_commands",window.location.pathname); }, //简单模版 simple:function(str,obj){ return str.replace(/\$\w+\$/gi, function(matchs) { var returns = obj[matchs.replace(/\$/g, "")]; return typeof returns === "undefined" ? "" : returns; }) }, createKeyworldsHTML:function(json,keywolds){ var name = json.n,des = json.d,self = this, reg = new RegExp("("+keywolds+")","ig"); if(keywolds){ name = json.n.replace(reg,''+"$1"+""); des = json.d.replace(reg,''+"$1"+"") || ''; } return this.simple('$name$ - $des$',{ name:name, url:json.p, des:des }) }, createListHTML:function(){ var arr = this.commands,self = this,page_size = this.page_size,i=0; if(arr&&arr.length&&toString.call(arr).indexOf('Array')>-1){ self.elm_result.innerHTML=''; var relese = 0; for (; i < page_size; i++) { if(!arr[i]) break; var myLi = document.createElement("LI"); if(self.isSreachIndexOF(arr[i].n,self.query) || self.isSreachIndexOF(arr[i].d,self.query) ){ relese += 1 myLi.innerHTML = self.createKeyworldsHTML(arr[i],self.query) self.elm_result.appendChild(myLi); } } if(relese ===0){ myLi.innerHTML = this.query?'没有搜索到任何内容,请尝试输入其它字符!':'请尝试输入一些字符,进行搜素!'; self.elm_result.innerHTML = myLi.outerHTML; } } }, init:function(){ var self = this; var kw = self.getQueryString('kw'); var timer = null this.elm_query.value = kw; this.query = kw; this.bindEvent(this.elm_query,'input',function(e){ self.query = e.target.value; self.pushState() self.createListHTML(); self.elm_result.style.display = self.query?'block':'none'; }) this.bindEvent(this.elm_btn,'click',function(e){ self.createListHTML(); }) this.bindEvent(this.elm_query,'focus',function(e){ self.createListHTML(); self.elm_result.style.display = 'block'; }) this.bindEvent(this.elm_query,'blur',function(e){ timer = setTimeout(function(){ self.elm_result.style.display = 'none'; },600) }) if(kw) self.createListHTML(); } } new Commands() })()