Created
May 11, 2010 10:06
-
-
Save critical-bug/397142 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name always search options | |
// @namespace http://entrance.cjb.net | |
// @description enables search options of target time range and languages | |
// @include http://www.google.com/* | |
// @include http://www.google.co.jp/* | |
// ==/UserScript== | |
(function(){ | |
function create_element(html_string) { | |
var div_elem = document.createElement('div'); | |
div_elem.innerHTML = html_string; | |
return div_elem.firstChild; | |
} | |
// insert element after node | |
function insert_after(element, node) { | |
node.parentNode.insertBefore(element, node.nextSibling); | |
} | |
// insert element before node | |
function insert_before(element, node) { | |
node.parentNode.insertBefore(element, node); | |
} | |
var fsearch_node_res = document.evaluate('//form[@action="/search"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); | |
if (fsearch_node_res.snapshotLength <= 0) { | |
return; | |
} | |
var fsearch_node = fsearch_node_res.snapshotItem(0); | |
function xpath_ordered(query) { | |
return document.evaluate(query, fsearch_node, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); | |
} | |
function xpath(query) { | |
return document.evaluate(query, fsearch_node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); | |
} | |
var qdr_res = xpath('//select[@name="as_qdr"]'); | |
if (qdr_res.snapshotLength == 0) { | |
// E4X here document | |
var select_time_elem = | |
create_element(<><span style="text-align: left; font-size: small;"><input | |
type="radio" name="as_qdr" value="all" /><label>anytime</label><input | |
type="radio" name="as_qdr" value="y" /><label>year</label><input | |
type="radio" name="as_qdr" value="m" /><label>month</label><input | |
type="radio" name="as_qdr" value="w" /><label>week</label><input | |
type="radio" name="as_qdr" value="d" /><label>24h</label></span></>); | |
//var elements = new Array(10); | |
//for (var i = 0; i < 5; i++) { | |
// elements[i*2] = document.createElement('input'); | |
// elements[i*2].name = 'as_qdr'; | |
// elements[i*2].type = 'radio'; | |
// elements[i*2 + 1] = document.createElement('label'); | |
//} | |
//elements[0].value = 'all'; | |
//elements[1].innerHTML = 'anytime'; | |
//elements[2].value = 'y'; | |
//elements[3].innerHTML = 'year'; | |
//elements[4].value = 'm'; | |
//elements[5].innerHTML = 'month'; | |
//elements[6].value = 'w'; | |
//elements[7].innerHTML = 'week'; | |
//elements[8].value = 'd'; | |
//elements[9].innerHTML = '24h'; | |
// where to insert | |
var res = xpath_ordered('table//table[@class]'); | |
var elem; | |
if (res.snapshotLength == 0) { | |
res = xpath_ordered('//input[@name="q"]'); | |
elem = res.snapshotItem(0); | |
insert_after(document.createElement('br'), elem) | |
elem = elem.nextSibling; | |
} else { | |
elem = res.snapshotItem(0); | |
} | |
insert_after(select_time_elem, elem); | |
} | |
var input_lr_res = xpath('//input[@name="lr" and @value="lang_ja"]'); | |
var input_meta_lr_res = xpath('//input[@name="meta" and @value="lr=lang_ja"]'); | |
if (input_lr_res.snapshotLength == 0 && input_meta_lr_res.snapshotLength == 0) { | |
var radio_lang_elem = | |
create_element(<><span style="text-align: left; font-size: small;">Search<input | |
id="all" type="radio" name="lr" value="" /><label for="all">the Web</label><input | |
id="il" type="radio" name="lr" value="lang_ja" /><label for="il">Japanese pages</label></span></>); | |
// where to insert | |
var qdr_res = xpath('//select[@name="as_qdr"]'); | |
if (qdr_res.snapshotLength == 0) { | |
// span element holding input element named as_qdr | |
qdr_res = xpath_ordered('//span[input/@name="as_qdr"]'); | |
} | |
insert_after(radio_lang_elem, qdr_res.snapshotItem(0)); | |
} | |
var input_hl_res = xpath_ordered('//input[@name="hl"]'); // hidden or other type | |
var radio_hl_elem = | |
create_element(<><span style="text-align: left; font-size: small;"><input | |
id="hl" type="radio" name="hl" value="" /><label for="hl">hl=</label><input | |
id="hlja" type="radio" name="hl" value="ja" /><label for="hlja">hl=ja</label></span></>); | |
if (input_hl_res.snapshotLength != 0) { | |
// where to insert | |
var input_hl_elem = input_hl_res.snapshotItem(0); | |
input_hl_elem.parentNode.replaceChild(radio_hl_elem, input_hl_elem); | |
} else if (document.URL.match('[?&]hl=[a-z]+')) { | |
// where to insert | |
var qdr_res = xpath_ordered('//select[@name="as_qdr"]'); | |
if (qdr_res.snapshotLength == 0) { | |
// span element holding input element named as_qdr | |
qdr_res = xpath_ordered('//span[input/@name="as_qdr"]'); | |
} | |
insert_before(radio_hl_elem, qdr_res.snapshotItem(0)); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment