Skip to content

Instantly share code, notes, and snippets.

@critical-bug
Created May 11, 2010 10:06
Show Gist options
  • Save critical-bug/397142 to your computer and use it in GitHub Desktop.
Save critical-bug/397142 to your computer and use it in GitHub Desktop.
// ==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