Yah's Assistant

By yah Last update Sep 4, 2009 — Installed 63 times.

There are 9 previous versions of this script.

// ==UserScript==
// @name           Yah's Assistant
// @namespace      http://userscripts.org/scripts/show/56751
// @include        http://*

// ==/UserScript==
// version                     0.44 04 Sep 2009
var local_version = new Number(0.44);

//It's not what you know, it's all about who you know

////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Variables
////////////////////////////////////////////////////////////////////////////////////////////////////////
var br = "<br>";
var btns = [];
var cmds = [];
var css_ya_div = "background-color:#EEEEEE; border-left-style:solid; border-bottom-style:solid; border-right-style:solid; border-width:2px; margin-top:0px; margin-bottom:0px; position:fixed; top:0px; z-index:999999999;";
var css_td = 'style="margin:0px 0px 0px 0px; padding:0px 0px 0px 0px; border-spacing:0px 0px 0px 0px;"';
var css_txt = "font-family:sans-serif; font-size:15px; font-style:normal; font-variant:normal; font-weight:normal; font-weight:bolder; line-height:.5em;";

////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Buttons
////////////////////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////////////////////
//	How to match input to action to response processing/display
//
//		. title
//		. Match string for determining command
//		. Match string word qty
//		. url of site (including the variable used to data string: $data)
//		. URL search/replace string(s) separated with a | and use a = between search and replace
//		. Extract string 1
//		. Extract string 2
//		. Extract string 3
//		. Help Screen string
//
////////////////////////////////////////////////////////////////////////////////////////////////////////
cmds.push (["calc",
             /^calc\s/i,
             1,
             "http://www.google.com/search?hl=en&num=1&q=$params",
             [/\+/g,"%2b"],
             "/images/calc_img.gif",
             "<b>",
             "</b>",
             ""
             ]);
cmds.push (["convert",
             /^convert\s|^conv\s|^cv\s/i,
             1,
             "http://www.google.com/search?hl=en&num=1&q=convert $params",
             [],
             "/images/calc_img.gif",
             "<b>",
             "</b>",
             ""
             ]);
cmds.push (["define",
             /^define\s|^def\s/i,
             1,
             "http://www.google.com/search?hl=en&num=1&q=define: $params",
             [],
             "Definitions of",
             "</ul>",
             "",
             ""
             ]);
cmds.push (["help",
             /^help\s|^h\s/i,
             1,
             "help",
             [],
             "",
             "",
             ""
             ]);
cmds.push (["weather",
             /^weather\s|^weath\s/i,
             1,
             "http://www.weather.com/weather/print/$params",
             [],
             '"tenday">',
             'code below -->',
             '<P CLASS="Spacing"></P>'
             ]);
             
             
//"http://www.weather.com/outlook/health/airquality/tenday/$params?from=36hr_topnav_undeclared",
             
////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Setup YA div
////////////////////////////////////////////////////////////////////////////////////////////////////////
var div_ya = document.createElement('div_ya');
document.body.appendChild(div_ya);
div_ya.id = "div_ya";

ya_show_sm();

////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Setup menu for TCLC preferences
////////////////////////////////////////////////////////////////////////////////////////////////////////
GM_registerMenuCommand("Yah's Assistant", ya_show_lg);


function ya_close(){
	ya_show_sm();
}

function ya_process(){
	var ext1 = "";
	var ext2 = "";
	var ext3 = "";
	var help = "";
	var out = "";
	var params = "";
	var srchRepl = [];
	var URL = "";
	var wQty = 0;

	var inp = document.getElementById("ya_input").value;
	for (var i = 0; i < cmds.length; i++){
		var matchStr = 	cmds[i][1];
		if (inp.search(matchStr) != -1){
			wQty = 		cmds[i][2]
			URL =  		cmds[i][3];
			srchRepl = 	cmds[i][4];
			ext1 = 		cmds[i][5];
			ext2 = 		cmds[i][6];
			ext3 = 		cmds[i][7];
			help = 		cmds[i][8];
		}
	}
	// Input and params
	var inps = inp.split(" ");
	for (var i = wQty; i < inps.length; i++){
		params += inps[i] + " ";
	}
	
	// Do what we're told
	if (URL == ""){	// No match
		document.getElementById("ya_output").innerHTML = "Unrecognized request.";
	} else if (URL == "help"){
		document.getElementById("ya_output").innerHTML = "<b>Help for: " + params + "</b><br>" + help;
	} else {
		//Replace data portion of string with $data in URL
		if (srchRepl.length > 0){
			//GM_log("There are search/replace parameters...");
			var loops = srchRepl.length / 2;					//Might add an error routine here to warn of an odd number of search/replace strings
			for (var i = 0; i < loops; i=i+2){
				//GM_log("Search: " + srchRepl[i]);
				//GM_log("Replace: " + srchRepl[i+1]);
				//GM_log("Params Before: " + params);
				params = params.replace(srchRepl[i], srchRepl[i+1]);
				//GM_log("Params After: " + params);
			}
		}

		URL = URL.replace(/\$params/,params);
		GM_log("Params: " + params);
		GM_log("URL: " + URL);
		
	    GM_xmlhttpRequest({
	        method: "GET",
	        url: '' + URL,
	    	headers:{'User-agent': 'Mozilla/5.0 (compatible) Greasemonkey'},
	        data:'',
	        onload:function(result) {
	            var res = result.responseText;
				document.getElementById("ya_output").innerHTML = extract(res, ext1, ext2, ext3);
				//GM_log("res: " + res);
	        }
	    });
	}
}

function ya_show_lg(){
    var wid = 600;
    var divL = (window.top.document.documentElement.clientWidth - wid - 10).toString();
    var t = new Array();
    var txt = window.getSelection();

    t.push('<div id="ya" style="' + css_ya_div + ' left:' + divL + 'px; line-height=.5em; width:600px;" >');
    t.push('	<table border=1 cellspacing=0 cellpadding=0 ' + css_td + ' width=100%>');
    t.push('		<tr>');
    t.push('			<td ' + css_td + ' width=100%><center><div style="' + css_txt + '">Yah\'s Assistant</div></center></td>');
    t.push('			<td ' + css_td + ' valign=top><center><button id="ya_btn_close" type="button" onClick="ya_close()"><font size=-2><b>X</b></font></button></center></td>');
    t.push('		</tr><tr>');
    t.push('			<td  ' + css_td + ' colspan=2><div><input id="ya_input" style="width:99.5%;" type=text value="' + txt + '"></input></div></td>');
    t.push('		</tr><tr>');
    t.push('			<td  ' + css_td + ' colspan=2><button id="ya_btn_process" type="button" onClick="ya_process()">Process</button></td>');
	t.push('		</tr><tr>');
    t.push('			<td  ' + css_td + ' colspan=2><div id="ya_output" style="background-color:white;"></div></td>');
    t.push('		</tr>');
    t.push('	</table>');
    t.push('</div>');
	div_ya.innerHTML = t.join('\n');

    var btn_close = document.getElementById("ya_btn_close");
    btn_close.addEventListener("click", ya_close, false);

    var btn_process = document.getElementById("ya_btn_process");
    btn_process.addEventListener("click", ya_process, false);    
}

function ya_show_sm(){
	var t = new Array();
    var divL = (window.top.document.documentElement.clientWidth - 20).toString();
	t.push('<div id="ya" style="height:15px; width:15px; ' + css_ya_div + 'left:' + divL + 'px; ' + css_txt + '" >');
	t.push('<center style="padding-top:2px;">Y</center>');
	t.push('</div>');
	div_ya.innerHTML = t.join('\n');

    var div_click = document.getElementById("ya");
    div_click.addEventListener("mouseover", ya_show_lg, false);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////
//    General Functions
////////////////////////////////////////////////////////////////////////////////////////////////////////
function extract(fullStr, ext1, ext2, ext3){
	if (ext3 == ""){
		var startPos = fullStr.indexOf(ext1) + ext1.length;
		var stopPos = fullStr.indexOf(ext2, startPos + 1);
		var len = stopPos - startPos;
		var ret = fullStr.substr(startPos, len);	
	} else {
		var findPos = fullStr.indexOf(ext1);
		var startPos = fullStr.indexOf(ext2, findPos + 1) + ext2.length;
		var stopPos = fullStr.indexOf(ext3, startPos + 1);
		var len = stopPos - startPos;
		var ret = fullStr.substr(startPos, len);
	}
	GM_log("ext1: " + ext1);
	GM_log("ext2: " + ext2);
	GM_log("ext3: " + ext3);
	GM_log("startPos: " + startPos);
	GM_log("stopPos: " + stopPos);
	GM_log("ret: " + ret);
	return ret;
}