/* ======================================================== *\
** 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();