Skip to content

Instantly share code, notes, and snippets.

@revolunet
Created February 24, 2011 16:11
Show Gist options
  • Save revolunet/842354 to your computer and use it in GitHub Desktop.
Save revolunet/842354 to your computer and use it in GitHub Desktop.
inject jQuery code from GET parameters
//
// when this script is inserted in your pages (with jQuery)
// you can send a initPage querystring parameter to control the page display
// what you send in initPage is executed with jQuery
//
// eg : send a link to this page, but with some dynamic modifications to someone (form filled...)
//
// example send :
// // this fill an input and check a box on the page
// initPage=[{selector:'input#testinput', method:'val',value:'Hello, World'}, {selector:'form[name=form1] input[name=check1]', method:'attr',value:['checked', true]}
//
// initPage sent param should be correctly url-encoded
//
/**
*
* Base64 encode / decode
* http://www.webtoolkit.info/
*
**/
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;input=Base64._utf8_encode(input);while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}
output=output+
this._keyStr.charAt(enc1)+this._keyStr.charAt(enc2)+
this._keyStr.charAt(enc3)+this._keyStr.charAt(enc4);}
return output;},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=this._keyStr.indexOf(input.charAt(i++));enc2=this._keyStr.indexOf(input.charAt(i++));enc3=this._keyStr.indexOf(input.charAt(i++));enc4=this._keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);}
if(enc4!=64){output=output+String.fromCharCode(chr3);}}
output=Base64._utf8_decode(output);return output;},_utf8_encode:function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);utftext+=String.fromCharCode((c&63)|128);}}
return utftext;},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
else if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
return string;}}
// querystring parser
function gup(name)
{name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(window.location.href);if(results==null)
return null;else
return results[1];}
function initPage() {
// load given initPage parameter then execute jQuery stuff
var inits = JSON.parse( lzw_decode(Base64.decode(gup('initPage'))) );
for (var i=0; i<inits.length; i++) {
var action = inits[i];
$( action.selector ).each(function(idnex, element) {
var tgt = $(this);
if (typeof(action.value) == 'object') {
tgt[ action.method ].apply(tgt, action.value );
}
else {
tgt[ action.method ]( action.value );
}
});
}
}
initPage();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment