User:Rich Smith/iglooInit.js

/* ======================================================== *\ ** igloo frontend manager - init \* ======================================================== *

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

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.