There are 21 previous versions of this script.
// ==UserScript==
// @name LSL Style
// @namespace http://home.comcast.net/~mailerdaemon/
// @include https://wiki.secondlife.com/*
// @include http://wiki.secondlife.com/*
// @include http://lslwiki.net/lslwiki/wakka.php?wakka=*
// @include http://www.lslwiki.net/lslwiki/wakka.php?wakka=*
// @version 1.0
// ==/UserScript==
if(!GM_addStyle) GM_addStyle = function(css){style = document.createElement("style"); style.type = "text/css"; style.innerHTML = css; document.getElementsByTagName('head')[0].appendChild(style); };
var functions = [];
var get_funcs = [];
var set_funcs = [];
var constants = [];
var events = [];
var control = [];
var search = "";
var constfind, constreplace;
var prefixed = false;
if($X("//head/meta[@name='generator' and starts-with(@content,'MediaWiki ')]"))
{
constants = ["PERMISSION_TAKE_CONTROLS", "PSYS_SRC_(?:ACCEL|TEXTURE|MAX_AGE|OMEGA|TARGET_KEY)", "FALSE"];
GM_addStyle("table.diff td div {overflow:visible;} pre.code a{ text-decoration:none; }");
GM_addStyle(".pBody { padding:0pt 0.8em 0.3em 0.5em; border:1px solid #AAAAAA; } .portlet h5 {background: transparent;}");
//GM_addStyle("#p-logo a { background-image:url(http://mailerdaemon.home.comcast.net/SL_logo_small.png)!important; }")
prefixs = ["/wiki/","/wiki/Special:Search?search="];
search = "//pre[@class='code']";
if((breadcrumbs = $X("//div[@id='contentSub']")))
{
if(!(title = unsafeWindow.realTitleText))
if(title = $X("//div[@id='ReatTitleBanner']/span[@id='RealTitle']"))
title = title.textContent;
if(title)
$Z(".//text()[contains(.,'"+unsafeWindow.wgTitle+"')]",function(r,i,p){
r.data = r.data.replace(unsafeWindow.wgTitle, title);
}, breadcrumbs);
}
//constfind = "&go=Go&search=LSL_";
//constreplace = "?search=";
}
else if($X("//div[@class='copyright']/a[starts-with(text(),'WakkaWiki ')]"))
{//I don't beleive I'm supporting this crappy wiki and it's very out of date syntax highlighter.
GM_addStyle([
// ".code .imp {font-weight: bold; color: red;}",
".code .kw1 {color: rgb(0, 0, 255);}",
".code .kw2 {color: rgb(0, 119, 0);}",
".code .kw3 {color: rgb(0, 160, 160);}",
".code .kw4 {color: rgb(0, 0, 160);}",
".code .kw5 {color: rgb(160, 0, 0);}",
// ".code .co1 {color: #FF7700;}",
// ".code .es0 {color: #FF7700;}",
// ".code .br0 {color: #66cc66;}",
// ".code .st0 {color: #00A000;}",
// ".code .nu0 {color: rgb(0, 0, 0);}",
// ".code .me1 {color: #006600;}",
// ".code .me2 {color: #006600;}",
""].join("\n"));
prefixs = ["/lslwiki/wakka.php?wakka=","/lslwiki/wakka.php?wakka=TextSearch&phrase="];
functions = ["ModPow","MapDestination","AddToLandBanList","ClearCameraParams","ListStatistics","XorBase64StringsCorrect","HTTP(?:Request|Response)",
"(?:Load|RefreshPrim|Escape|Unescape)URL","RemoveFromLand(?:Pass|Ban)List","ParcelMedia(?:CommandList|Query)", "StringTrim","TextBox",
"RegionSay","DetectedTouch(?:UV|ST|Face|Pos|Normal|Binormal)","SHA1String","ResetLand(?:Ban|Pass)List","Re(?:lease|quest(?:Secure|))URL"];
get_funcs = ["InventoryType","Camera(?:Pos|Rot)","UnixTime","AgentLanguage","Region(?:Flags|AgentCount)","Parcel(?:Flags|PrimCount)","FreeURLs",
"HTTPHeader","Object(?:Details|PrimCount)",];
set_funcs = ["PayPrice","PrimURL","CameraParams","ClickAction","Link(?:PrimitiveParams|Texture)"];
constants = ["PARCEL_FLAG_(?:"+["USE_(?:ACCESS_GROUP|(?:ACCESS|BAN|LAND_PASS)_LIST)", "LOCAL_SOUND_ONLY", "RESTRICT_PUSHOBJECT",
"ALLOW_(?:FLY|(?:GROUP_|)SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|(?:CREATE_|GROUP_|)OBJECTS|(?:ALL|GROUP)_OBJECT_ENTRY)"].join("|")+")",
"REGION_FLAG_(?:"+["ALLOW_(?:DAMAGE|DIRECT_TELEPORT)", "DISABLE_(?:COLLISIONS|PHYSICS)", "FIXED_SUN", "BLOCK_TERRAFORM","SANDBOX",
"BLOCK_FLY","RESTRICT_PUSHOBJECT"].join("|")+")", "CAMERA_(?:"+["POSITION(?:|_(?:LAG|LOCKED|THRESHOLD))","PITCH",
"FOCUS(?:|_(?:LAG|LOCKED|OFFSET|THRESHOLD))","BEHINDNESS_(?:ANGLE|LAG)", "DISTANCE", "ACTIVE"].join("|")+")", "PAY_(?:HIDE|DEFAULT)",
"LIST_STAT_(?:RANGE|MIN|MAX|(?:|GEOMETRIC_)MEAN|MEDIAN|STD_DEV|SUM(?:|_SQUARES)|NUM_COUNT)", "INVENTORY_NONE",
"HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|VERIFY_CERT)", "PERMISSION_(?:TRACK|CONTROL)_CAMERA",
"PARCEL_MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP(?:|_SET)|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC)",
"OBJECT_(?:NAME|DESC|POS|ROT|VELOCITY|OWNER|CREATOR|GROUP)", "TEXTURE_(?:DEFAULT|TRANSPARENT|PLYWOOD|BLANK|MEDIA)",
"PRIM_(?:TYPE_SCULPT|GLOW|SCULPT_TYPE_(?:SPHERE|TORUS|CYLINDER|PLANE))", "STRING_TRIM(?:_(?:HEAD|TAIL)|)",
"TOUCH_INVALID_(?:FACE|TEXCOORD|VECTOR)", "URL_REQUEST_(?:GRANTED|DENIED)","CHANGED_REGION_START"];
events = ["http_request", "http_response"];
search = "//div[@class='code']/pre";
constfind = "?wakka=TextSearch?phrase=";
constreplace = "?wakka=TextSearch&phrase=";
}
if(get_funcs.length) functions = functions.concat("Get(?:"+get_funcs.join("|")+")");
if(set_funcs.length) functions = functions.concat("Set(?:"+set_funcs.join("|")+")");
const types = [ "integer", "float", "string", "key", "vector", "rotation", "quaternion", "list" ];
//*
function generate(t,c,v,r){return {r:r, t:t, c:c, v:v, toString: function(){return this.r;}};}
var groups = [generate("span", "nu0", function(s, v){;}, "(0[xX][0-9a-fA-F]+|\\.[0-9]*[Ee][0-9]*|[0-9]+[Ee][0-9]*)")];
if(control.length) groups.push(generate("a", "kw1", function(s,v){s.href = prefixs[0]+v+lang;}, "("+control.join("|")+")"));
if(types.length) groups.push(generate("a", "kw2", function(s,v){s.href = prefixs[0]+v+lang;}, "("+types.join("|")+")"));
if(events.length) groups.push(generate("a", "kw3", function(s,v){s.href = prefixs[0]+v+lang;}, "("+events.join("|")+")"));
if(constants.length) groups.push(generate("a", "kw4", function(s,v){s.href = prefixs[1]+v+lang;}, "("+constants.join("|")+")"));
if(functions.length) groups.push(generate("a", "kw5", function(s,v){s.href = prefixs[0]+v+lang;}, "(ll(?:"+functions.join("|")+"))"));
const gl = groups.length;
var missed = new RegExp("^(|[\\W\\w]*?\\W)(?:"+groups.join("|")+")([\\W][\\W\\w]*|)$");
var lang = $X("//div[@id='PageLanguage']");
lang = lang?lang.innerHTML:"";
$Z(search, function(r,i,p){
for(var a = 0; b = r.childNodes[a]; ++a)
if(b.nodeName == "#text" && (c = missed.exec(d = b.nodeValue)))
{
var s, v;
if((v = c[gl+2]) && (v != ""))
insertAfter(document.createTextNode(v), b);
for(p=0; p < gl; p++)
{
if((v = c[p+2]) && (v != ""))
{
var n = groups[p];
s = document.createElement(n.t);
s.className=n.c;
s.innerHTML=v;
n.v(s, v);
s = insertAfter(s, b);
break;
}
}
if(!(v = c[1]) || (v == ""))
b.parentNode.removeChild(b);
else
b.nodeValue = c[1];
//++a;
}
if((b = r.childNodes[0]) && b.nodeName == "#text" && b.nodeValue.substring(0,7) == " \n")
b.nodeValue = b.nodeValue.substring(7);
if((b = r.childNodes[r.childNodes.length]) && b.nodeName == "#text" && b.nodeValue.substr(-2) == "\n ")
b.nodeValue = b.nodeValue.substring(0, b.nodeValue.length - 2);
if(constfind) $Z("./a[contains(@href, '"+constfind+"')]", function(ir,ii,ip){var t = ir.attributes.getNamedItem("href"); t.value = t.value.replace(constfind, constreplace)+lang;}, r);
if(lang) $Z("./a[span[starts-with(@class,'kw')]]", function(ir,ii,ip){ir.attributes.getNamedItem("href").value += lang;}, r);
});
$Z("//a[starts-with(@title, 'Ll') and starts-with(@title, text())]", function(r,i,p){
var m = "l" + r.title.substring(1);
if(r.title == r.innerHTML)
r.innerHTML = m;
r.title = m;
});
//*
if(m = $X("//li[@id='n-editingdiscussion']")){
n = document.createElement("li");
n.id = "n-randompage";
n.innerHTML = "<a accesskey='x' title='Load a random article [alt-shift-x]' href='/wiki/Special:Random'>Random Page</a>";
insertAfter(n, m);
}
/**/
function $X(_xpath, node){return document.evaluate(_xpath, node?node:document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);}
function $Y(_xpath, node){return document.evaluate(_xpath, node?node:document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);}
function $Z(_xpath, func, node, payload){
var res = document.evaluate(_xpath, node?node:document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var i, j;
for (i = j = 0; link = res.snapshotItem(i); ++i)
j += func(link, i, payload);
return j;
}
function insertAfter(insert, after){return after.parentNode.insertBefore(insert, after.nextSibling);}
function insertBefore(insert, before){return before.parentNode.insertBefore(insert, before);}
function log()
{
var arg;
switch(arguments.length)
{
case 1:
arg = arguments[0];
break;
case 0:
arg = null;
break;
default:
arg = arguments;
break;
}
var f = JSON.stringify(arg);
if(typeof(unsafeWindow.console) != "undefined" && typeof(unsafeWindow.console.log) != "undefined")
unsafeWindow.console.log(f);
else
GM_log(f);
return arg;
}
