User:Alex Smotrov/searchlist.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
function searchList(){ if (!window.searchListInNewWin) searchListInNewWin = false var newWinOption var msgThisWin, msgNewWin = 'NEW window' var msgSelectTitle = '' //'Choose namespace to search in' if (!window.searchListNS) searchListNS = [ ['','Find in…'], [-5,'this window', 'Select whether to open search in a new window'], //value -5 is special ['','External'], ['http://www.google.com/custom?domains=en.wikipedia.org&sitesearch=en.wikipedia.org&q=', 'Google en.wp', 'Google: search English Wikipedia'], ['http://www.google.com/custom?domains=wikipedia.org&sitesearch=wikipedia.org&q=', 'Google wp', 'Google: search Wikipedia'], ['','MediaWiki'], [-1,'Default search', 'Search in namespace(s) defined in your preferences'], //value -1 is special [0,'Article'], [1,'Talk'], [2,'User'], [3,'User talk'], [4,'Wikipedia'], [5,'Wikipedia talk'], [6,'Image'], [7,'Image talk'], [8,'Mediawiki'], [9,'Mediawiki talk'], [10,'Template'], [11,'Template talk'], [12,'Help'] ] if (!window.searchListShortNS) searchListShortNS = { 'u':'User', 'i':'Image', 't':'Template', 'c':'Category', 'me':'MediaWiki' } var searchForm = document.getElementById('searchform') if (!searchForm) return //create namespace selector hidden input var searchHidden = document.createElement('input') searchHidden.type = 'hidden' searchHidden.value = '1' searchForm.fulltext.parentNode.appendChild(searchHidden) //create select var select = document.createElement('select'), item, opt, text for (var i=0; i<searchListNS.length; i++){ item = searchListNS[i] opt = new Option(item[1], item[0]) opt.title = item[2] || '' if (i == 0) opt.style.color = '#222222' else if (opt.value == -5){ newWinOption = opt msgThisWin = opt.text }else if (opt.value == ''){ opt.disabled = true opt.style.color = 'gray' opt.style.paddingLeft = '10px' }else opt.txt = ' ' + opt.txt select.options[select.options.length] = opt } //select.selectedIndex = 0 with (select.style){ margin = '0'; marginTop = '2px'; fontSize = '90%'} setTarget() searchForm.fulltext.parentNode.insertBefore(select, searchHidden) //hide standard Search button if not IE //if (is_opera || is_gecko){ if (navigator.userAgent.indexOf('MSIE') == -1){ searchForm.fulltext.style.display = 'none' searchForm.go.title = searchForm.go.value searchForm.go.value = ' → ' searchForm.go.style.width = '30px' select.style.width = '90px' } select.title = msgSelectTitle searchForm.go.title += ' (' + (is_gecko||is_safari?'Ctrl':'Shift') + ': ' + msgNewWin + ')' //events addHandler(searchForm.search, 'keydown', detectShift) //if Enter pressed addHandler(searchForm.go, 'mouseup', detectShift) //Go clicked select.onchange = onSelect //addHandler(select, 'click', detectShift) addHandler(searchForm, 'submit', shortNS) return function detectShift(e){ //open in new win if shift is pressed e = e || window.event searchForm.target = (searchListInNewWin || e.shiftKey || (is_gecko||is_safari) && e.ctrlKey) ? '_blank' : '' } function onSelect(e){ if (this.selectedIndex == 0 || this.options[this.selectedIndex].disabled){ this.selectedIndex = 0 return } var val = this.options[this.selectedIndex].value this.selectedIndex = 0 if (! /^-?\d+$/.test(val)){ //not a number => external search engine var url = val + encodeURIComponent(searchForm.search.value) if (searchListInNewWin) window.open(url) else window.location = url }else if (val == -5){ //new window switch searchListInNewWin = !searchListInNewWin setTarget() }else if (searchForm.search.value == ''){ searchForm.search.value = '?' }else { //MediaWiki search searchHidden.name = (val == -1) ? '' : 'ns' + val detectShift(e) //doesn't work in FF/Safari anyway searchForm.fulltext.click() } } function setTarget(){ searchForm.target = searchListInNewWin ? '_blank' : '' select.style.backgroundColor = searchListInNewWin ? '#F5F5FF' : '' newWinOption.text = ' (' + (searchListInNewWin ? msgNewWin : msgThisWin) + ')' } function shortNS(){ //expands 'u:test' into 'User:test' var txt = searchForm.search.value, k if ((k=txt.indexOf(':'))==-1 || txt.substring(0,1) == ' ') return var pref = txt.substring(0,k).toLowerCase() if (searchListShortNS[pref]) searchForm.search.value = searchListShortNS[pref] + txt.substring(k) return true } }//searchList func if (doneOnloadHook)searchList() else addOnloadHook(searchList)

