User:Ale jrb/Scripts/iglooInit.js
Appearance
< User:Ale jrb | Scripts
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Ale jrb/Scripts/iglooInit. |
/* ======================================================== *\
** igloo frontend manager - init
\* ======================================================== */
function iglooInitControl() {
var iglooInit = this;
// initialisation sequence
this.init = function(callback) {
switch (callback) {
default:
// 1. Build the interface on the init page.
//document.getElementsByTagName('title')[0].innerHTML =
document.title = 'igloo is loading - please wait';
runIglooInterface.startInterface();
break;
case '1':
// Nforcer hook - validate versioning
runIglooInterface.addStatus('- Nforcer is validating your igloo version...');
var ig_nforcer = new nforcer('User:Ale_jrb/Scripts/iglooSettings.js', 'this.version', iglooSettings.version, 'permission-block:true');
ig_nforcer.onStatusChange = function (permitted) { if (permitted == true) { runIglooInterface.addStatus('- Nforcer OK!'); iglooInit.init('2'); } else { runIglooInterface.addStatus('<div style="color: #dd6666;">- Nforcer reports that the version of igloo in your browser cache is out of date. Fully clear your browser cache, and refresh this page. Loading stopped.</div>', true); } };
ig_nforcer.check();
break;
case '2':
// 2. Check browser.
runIglooInterface.addStatus('- Checking browser for compatibility...');
var browserTest = /(firefox|msie|opera|safari|chrome)/i;
browserTest = browserTest.exec(navigator.userAgent.toLowerCase());
if ( browserTest[1] == 'opera' ) {
runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: igloo is not compatible with this browser. Loading stopped.</div>', true);
} else if (browserTest[1] != 'firefox') {
runIglooInterface.addStatus('<div style="color: #dd6666;">- Notice: igloo is designed for Mozilla Firefox, and may work incorrectly with other browsers.</div>', true);
setTimeout(function() { iglooInit.init('3'); }, 2500);
} else {
runIglooInterface.addStatus('- Browser OK!'); iglooInit.init('3');
}
break;
case '3':
runIglooInterface.addStatus('- Checking for usergroups...');
for (var i = 0; i < wgUserGroups.length; i ++) {
if ( (wgUserGroups[i] == 'rollbacker') || (wgUserGroups[i] == 'sysop') ) { runIglooInterface.addStatus('- Usergroup OK!'); setTimeout(function() { iglooInit.init('4'); }, 500); return true; }
}
runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: rollback rights are required to use igloo. Loading stopped.</div>', true);
break;
case '4':
runIglooInterface.addStatus('- Checking read API...');
if (true == true) { runIglooInterface.addStatus('- Read API OK!'); } else { runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: read API access is requried for igloo for run. Loading stopped.</div>', true); return false; }
runIglooInterface.addStatus('- Checking write API...');
if (true == true) { runIglooInterface.addStatus('- Write API OK!'); } else { runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: write API access is requried for igloo for run. Loading stopped.</div>', true); return false; }
setTimeout(function() { iglooInit.init('5'); }, 500);
break;
case '5':
runIglooInterface.addStatus('- Checking for igloo configuration page...');
var statusRequest = new wa_mediawikiApi();
statusRequest.onCompleteAction = function(data) { iglooInit.data = data; iglooInit.init('6'); };
statusRequest.getPage(iglooSettings.localBase + 'config', 1, 'content');
break;
case '6':
if (this.data['page']['status'] != 'OK') {
runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: igloo could not locate its configuration page. Loading stopped.</div>', true);
return false;
}
runIglooInterface.addStatus('- Configuration page OK!');
runIglooInterface.addStatus('- Checking igloo status...');
var regTest = /(status:enabled;;)/i;
regResult = regTest.exec(this.data['page']['revisions'][0]['content']);
if (regResult == null) {
runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: igloo is not enabled. It may be disabled, or the configuration page may be corrupt. Loading stopped.</div>', true);
return false;
}
if ( (iglooSettings.developerMode == true) && (wgUserName != 'Ale jrb') && (wgUserName != 'Methecooldude') ) {
runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: igloo is in developer mode, and is only accessible to developers - check back soon. Loading stopped.</div>', true);
return false;
}
runIglooInterface.addStatus('- igloo enabled OK!');
runIglooInterface.addStatus('<div style="font-weight: bold; color: #dd6666;">- Notice: igloo is about to establish a connection with iglooNet - a remote, non-Wikimedia server. To prevent this connection, or close it once established, click <span style="cursor: pointer; text-decoration: underline;" onclick="clearInterval(runIglooInit.timeoutInterval); window.close();">here</span>.</div>', true);
i = 10;
runIglooInit.timeoutInterval = setInterval(function() {
if (i == 0) { runIglooInterface.addStatus(' ... done!', false, true); runIglooInterface.addStatus('- Launching session manager...'); iglooInit.init('7'); clearInterval(runIglooInit.timeoutInterval); }
else if (i == 10) { runIglooInterface.addStatus('Connecting in (<span style="cursor: pointer; text-decoration: underline;" onclick="clearInterval(runIglooInit.timeoutInterval); runIglooInterface.addStatus(\' ... done!\', false, true); runIglooInterface.addStatus(\'- Launching session manager...\'); runIglooInit.init(\'7\'); ">skip</span>): '+i, true); i--; }
else { runIglooInterface.addStatus(', '+i, true, true); i--; }
}, 1000);
break;
case '7':
this.currentSession = new iglooInitSession();
this.currentSession.manageSession();
break;
case '8':
runIglooInterface.addStatus('');
runIglooInterface.addStatus('Loading complete! igloo will launch in a few seconds...');
setTimeout(function() {
var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + iglooSettings.localBase + 'run&sessionkey='+runIglooInit.currentSession.sessionKey+'::::';
window.location = url;
}, 4000);
break;
}
}
}
function iglooInitInterface() {
var iglooInterface = this;
this.iglooStatus = [];
this.startInterface = function() {
// blank page, generate interface object to work with.
wa_window.prototype = new wa_document;
wa_element.prototype = new wa_document;
var docBase = new wa_document();
docBase.wk_base.innerHTML = '';
this.iglooBack = new wa_window(docBase.wk_base);
this.iglooBack.win_bg = '#ededff';
this.iglooBack.win_fill = true;
this.iglooBack.applyAll();
this.initInterface = new wa_window();
this.initInterface.win_width = 650;
this.initInterface.win_height = 330;
this.initInterface.win_bg = '#ededff';
this.initInterface.applyAll();
this.initInterface.center('both', true, new Array(0, -50));
this.initInterfaceStatus = new wa_window(this.initInterface);
this.initInterfaceStatus.win_width = 450;
this.initInterfaceStatus.win_height = 300;
this.initInterfaceStatus.win_top = 17;
this.initInterfaceStatus.win_left = 100;
this.initInterfaceStatus.win_bd = '#bbbbff';
this.initInterfaceStatus.win_bd_wd = 1;
this.initInterfaceStatus.win_bg = '#fdfdff';
this.initInterfaceStatus.win_padding = 7;
this.initInterfaceStatus.win_content = '<div style="padding-top: 9px;">Welcome to igloo! Please be patient while igloo starts up, as this can take some time.<div id="iglooStatusContent" style="padding-top: 6px;"></div></div>';
this.initInterfaceStatus.applyAll();
this.initInterfaceInit = new wa_window(this.initInterface);
this.initInterfaceInit.win_width = 230;
this.initInterfaceInit.win_height = 17;
this.initInterfaceInit.win_top = 0;
this.initInterfaceInit.win_left = 370;
this.initInterfaceInit.win_content = '<div style="color: #555588; font-size: 1.4em; font-weight: bold; text-align: center; width: 100%;">igloo is loading. Please wait...</div>';
this.initInterfaceInit.win_bd = '#bbbbff';
this.initInterfaceInit.win_bd_wd = 1;
this.initInterfaceInit.win_bg = '#fdfdff';
this.initInterfaceInit.applyAll();
setTimeout(function() { runIglooInit.init('1'); }, 500);
}
this.addStatus = function(message, noEndline, attachToLast) {
// add a message to the status output, and display it.
if (this.iglooStatus.length > 15) this.iglooStatus.splice(0, 1);
if ( (noEndline == null) || (noEndline == false) ) { message += '<br />'; }
if ( (attachToLast == null) || (attachToLast == false) ) {
this.iglooStatus.push(message);
} else {
this.iglooStatus[this.iglooStatus.length - 1] += message;
}
var echoString = '';
for (var i = 0; i < this.iglooStatus.length; i ++) {
echoString += this.iglooStatus[i];
}
if (document.getElementById('iglooStatusContent') != null) {
document.getElementById('iglooStatusContent').innerHTML = echoString;
return true;
} else { return false; }
}
}
function iglooInitSession() {
var iglooSession = this;
this.sessionKey = false;
this.manageSession = function(callback) {
switch (callback) {
default:
if (this.sessionKey != false) return this.sessionkey;
runIglooInterface.addStatus('- Session manager loaded.');
runIglooInterface.addStatus('- Attempting to connect to the server, requesting token...');
iglooImport(iglooSettings.remoteHost + 'main.php?action=connect&user=' + encodeURIComponent(wgUserName), true);
this.count = 0;
this.connection = setInterval('if (typeof iglooSessionRequest == \'undefined\') { if (runIglooInit.currentSession.count < iglooSettings.serverTimeout) { runIglooInit.currentSession.count ++; } else { clearInterval(runIglooInit.currentSession.connection); runIglooInterface.addStatus(\'<div style="color: #dd6666;">- Warning: igloo could not connect to the remote server. Loading stopped.</div>\', true); } } else { clearInterval(runIglooInit.currentSession.connection); runIglooInit.currentSession.sessionKey = iglooSessionRequest; runIglooInit.currentSession.manageSession(\'1\'); }', 1000);
break;
case '1':
runIglooInterface.addStatus('- Connected to the remote server.');
runIglooInterface.addStatus('- Requesting session scheme...');
iglooImport(iglooSettings.remoteHost + 'main.php?action=connect&include=sessionHandleDwa', true);
this.count = 0;
this.connection = setInterval(''+
'if (typeof iglooJavascriptLoadComplete == \'undefined\') { '+
'if (runIglooInit.currentSession.count < iglooSettings.serverTimeout) { runIglooInit.currentSession.count ++; } else { '+
'clearInterval(runIglooInit.currentSession.connection); '+
'runIglooInterface.addStatus(\'<div style="color: #dd6666;">- Warning: igloo lost its connection to the remote server. Loading stopped.</div>\', true); '+
'} '+
'} else { '+
'if (typeof iglooServerError != \'undefined\') { clearInterval(runIglooInit.currentSession.connection); runIglooInterface.addStatus(\'<div style="color: #dd6666;">- Warning: igloo server returned an error: \'+iglooServerError+\'. Loading stopped.</div>\', true); } else { '+
'runIglooInit.currentSession.sessionKey = genSessionDwa(runIglooInit.currentSession.sessionKey);'+
'clearInterval(runIglooInit.currentSession.connection);'+
'runIglooInit.currentSession.manageSession(\'2\');'+
' }}'+
'', 1000);
break;
case '2':
runIglooInterface.addStatus('- Obtained session key, checking with server...');
iglooImport(iglooSettings.remoteHost + 'main.php?action=connect&user='+wgUserName+'&session='+encodeURIComponent(runIglooInit.currentSession.sessionKey), true);
this.count = 0;
this.connection = setInterval(''+
'if (typeof iglooJavascriptSessionComplete == \'undefined\') { '+
'if (runIglooInit.currentSession.count < iglooSettings.serverTimeout) { runIglooInit.currentSession.count ++; } else { '+
'clearInterval(runIglooInit.currentSession.connection); '+
'runIglooInterface.addStatus(\'<div style="color: #dd6666;">- Warning: igloo lost its connection to the remote server. Loading stopped.</div>\', true); '+
'} '+
'} else { '+
'if (typeof iglooServerError != \'undefined\') { clearInterval(runIglooInit.currentSession.connection); runIglooInterface.addStatus(\'<div style="color: #dd6666;">- Warning: igloo server returned an error: \'+iglooServerError+\'. Loading stopped.</div>\', true); } else { '+
'runIglooInit.init(\'8\');'+
'clearInterval(runIglooInit.currentSession.connection);'+
' }}'+
'', 1000);
break;
}
}
}
var runIglooInit = new iglooInitControl();
var runIglooInterface = new iglooInitInterface();
runIglooInit.init();