User:Unit388/src/glooInit.js
Appearance
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:Unit388/src/glooInit. |
/* ======================================================== *\
** igloo frontend manager - init
** @author Kangaroopower
** igloo concept and initial code by Alex Barley (User:Ale_jrb on Wikipedia)
\* ======================================================== */
function iglooInitControl() {
var iglooInit = this,
remoteConnect = false,
firstRun = false,
connectLocal = false, //this is never used except when iglooNet is down
sessionKey;
// initialisation sequence
this.init = function(callback) {
switch (callback) {
default:
document.title = 'igloo is loading - please wait';
igLauncher.runIglooInterface.startInterface();
break;
case '1':
igLauncher.runIglooInterface.addStatus('- Checking for usergroups...');
var groups = mw.config.get('wgUserGroups');
for ( var i = 0; i < groups.length; i ++ ) {
if ( (groups[i] === 'rollbacker') || (groups[i] === 'users') || (groups[i] === 'Unit388') ) {
igLauncher.runIglooInterface.addStatus('- Usergroup OK!');
setTimeout(function() {
igLauncher.runIglooInit.init('2');
}, 500);
return true;
}
}
igLauncher.runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: rollback rights are required to use igloo. Loading stopped.</div>', true);
break;
case '2':
igLauncher.runIglooInterface.addStatus('- Checking read API...');
if (true === true) {
igLauncher.runIglooInterface.addStatus('- Read API OK!');
} else {
igLauncher.runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: read API access is requried for igloo for run. Loading stopped.</div>', true);
return false;
}
igLauncher.runIglooInterface.addStatus('- Checking write API...');
if (true === true) {
igLauncher.runIglooInterface.addStatus('- Write API OK!');
} else {
igLauncher.runIglooInterface.addStatus('<div style="color: #dd6666;">- Warning: write API access is requried for igloo for run. Loading stopped.</div>', true);
return false;
}
setTimeout(function() {
igLauncher.runIglooInit.init('3');
}, 500);
break;
case '3':
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('- Retrieving resources...');
iglooImport('https://raw.github.com/Kangaroopower/Igloo/'+ iglooBranch +'/src/glooMain.js', true).onload = function () {
igLauncher.runIglooInterface.addStatus('- Retrieved Resources!');
setTimeout(function() {
igLauncher.runIglooInit.init('4');
}, 500);
};
break;
case '4':
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('- Retrieving settings...');
if (mw.user.options.get('userjs-iglooFirstRun') === null) {
firstRun = true;
Flash('preferences').load({key: 'userjs-iglooFirstRun', value: 'false'}).wait(function (data) {
setTimeout(function() {
igLauncher.runIglooInit.init('5');
}, 500);
}).run();
} else {
setTimeout(function() {
igLauncher.runIglooInit.init('5');
}, 500);
}
break;
case '5':
if (/*mw.user.options.get('userjs-iglooRemoteConnect') === null ||*/ firstRun === true) {
var remoteClick = false;
firstRun = true;
/*igLauncher.runIglooInterface.addStatus('Note: This appears to be your first time connecting to igloo');
igLauncher.runIglooInterface.addStatus('<span style="font-color:red">You should no that there are two ways to store data in igloo- iglooNet and locally</span>');
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('iglooNet is a remote server hosted on Wikimedia Labs, but run by igloo developers.');
igLauncher.runIglooInterface.addStatus('<span style="color:red">We don\'t collect IP adresses or any other personal info, just user defined settings and a session key tied to your account</span>');
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('Connecting locally means that your settings are stored on Wikipedia.');
igLauncher.runIglooInterface.addStatus('<span style="font-color:red">This is less reliable, and settings may vanish, but it also means that nobody else (except the WMF) can see your settings.</span>');
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('Before we proceed further, igloo will require you to choose a method of connection');
igLauncher.runIglooInterface.addStatus('You will always be allowed to reset your method of storage later through the settings module in igloo.');
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('One last note: If you choose to connect to iglooNet, igloo still stores settings locally as a backup in case iglooNet is down.');
igLauncher.runIglooInterface.addStatus('However, if you store settings only locally and they are lost, there is no way to retrieve them.');
igLauncher.runIglooInterface.addStatus('');
igLauncher.runIglooInterface.addStatus('<center><span id="ig-remoteConnect" style="margin:auto; width: 170px; border: 1px solid rgb(68, 68, 68); background-color: rgb(241, 241, 241); color: #0b0080; font-size: 1.35em; font-weight: bold; text-align: center; cursor: pointer;">Connect Remotely</span> <span id="ig-localConnect" style="margin:auto; width: 170px; border: 1px solid rgb(68, 68, 68); background-color: rgb(241, 241, 241); color: #0b0080; font-size: 1.35em; font-weight: bold; text-align: center; cursor: pointer;">Connect Locally</span></center>');
igLauncher.runIglooInterface.addStatus(''); */
igLauncher.runIglooInterface.addStatus('Note: This appears to be your first time connecting to igloo');
igLauncher.runIglooInterface.addStatus('Please note that Igloo stores your settings on Wikipedia\'s servers and has no access to it');
/* $('#ig-remoteConnect').click(function () {
remoteClick = true;
Flash('preferences').load({key: 'userjs-iglooRemoteConnect', value: 'true'}).wait(function (data) {
igLauncher.runIglooInterface.addStatus('You have decided to store settings remotely. You can change this later in igloo settings.');
remoteConnect = true;
//connect to server here and retrieve session key
setTimeout(function() {
igLauncher.runIglooInit.init('6');
}, 500);
}).run();
}); */
//$('#ig-localConnect').click(function () {
// if (remoteClick) return;
Flash('preferences').load({key: 'userjs-iglooRemoteConnect', value: 'false'}).wait(function (data) {
igLauncher.runIglooInterface.addStatus('You have decided to store settings locally. You can change this later in igloo settings.');
remoteConnect = false;
sessionKey = null;
setTimeout(function() {
igLauncher.runIglooInit.init('6');
}, 500);
}).run();
//});
} /*else if (mw.user.options.get('userjs-iglooRemoteConnect') === "true" && connectLocal !== true) {
firstRun = false;
remoteConnect = true;
igLauncher.runIglooInterface.addStatus('<span style="font-color:red">At some time in the past, you decided to connect to iglooNet.</span>');
igLauncher.runIglooInterface.addStatus('If you wish to connect locally instead, please change this in your igloo settings.');
igLauncher.runIglooInterface.addStatus('Remember, igloo only stores settings and a session id- no IP adresses or personal info.');
igLauncher.runIglooInterface.addStatus('');
//Connect to server here
//include way to see if server is online, and if not, redo iglooInit step 5
//except with the way to connect locally instead
setTimeout(function() {
igLauncher.runIglooInit.init('6');
}, 500);
} */else {
remoteConnect = false;
firstRun = false;
sessionKey = null;
/*igLauncher.runIglooInterface.addStatus('You have decided to connect locally, hosting your settings on Wikipedia servers');
igLauncher.runIglooInterface.addStatus('This means igloo does not host any info on you, but your info can also be lost more easily.');
igLauncher.runIglooInterface.addStatus('If you wish to change and connect to iglooNet, you may do so in iglooSettings');
igLauncher.runIglooInterface.addStatus('');*/
setTimeout(function() {
igLauncher.runIglooInit.init('6');
}, 500);
}
break;
case '6':
igLauncher.runIglooInterface.addStatus('Loading complete! igloo will launch in a few seconds...');
setTimeout(function() {
iglooHandleLaunch({
isFirstRun: firstRun,
doRemoteConnect: remoteConnect,
sessionId: sessionKey,
isDown: connectLocal
});
}, 1000);
break;
}
};
}
function iglooInitInterface() {
var iglooInterface = this;
this.iglooStatus = [];
this.startInterface = function() {
// blank page, generate interface object to work with.
this.canvas = new jin.Canvas();
this.canvas.setFullScreen(true);
// Create Background
this.iglooBack = new jin.Panel();
this.iglooBack.setPosition(0, 0);
this.iglooBack.setSize(0, 0);
this.iglooBack.setColour(jin.Colour.LIGHT_GREY);
//Secondary Background
this.initInterface = new jin.Panel();
this.initInterface.setPosition(0, 0);
this.initInterface.setSize(650, 400);
this.initInterface.setColour(jin.Colour.LIGHT_GREY);
//Status Window
this.initInterfaceStatus = new jin.Panel();
this.initInterfaceStatus.setPosition(100, 17);
this.initInterfaceStatus.setSize(450, 350);
this.initInterfaceStatus.setColour(jin.Colour.WHITE);
// Combine interface elements.
this.initInterface.add(this.initInterfaceStatus);
this.canvas.add(this.iglooBack);
this.canvas.add(this.initInterface);
// Do initial render.
this.canvas.render(jin.getDocument());
//Content and extra css
this.center(this.initInterface.panel, [0, -50]);
$(this.initInterfaceStatus.panel).css({
padding: '7px',
border: '1px solid '+ jin.Colour.DARK_GREY,
'font-size': '10px'
});
$(this.initInterfaceStatus.panel).append('<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>');
setTimeout(function() {
igLauncher.runIglooInit.init('1');
}, 500);
};
this.addStatus = function(message, noEndline) {
// add a message to the status output, and display it.
if (this.iglooStatus.length > 20) this.iglooStatus.splice(0, 1);
if (!noEndline) {
message += '<br />';
}
this.iglooStatus.push(message);
if (document.getElementById('iglooStatusContent') !== null) {
document.getElementById('iglooStatusContent').innerHTML = this.iglooStatus.join('');
return true;
} else {
return false;
}
};
this.center = function (el, offset) {
// center - places the window in the centre of the user's screen. set maintainCenter to true and this position will be kept even if
// the window is resized.
var screenWidth = parseInt(this.canvas.canvasBase.children[0].style.width, 10),
screenHeight = parseInt(this.canvas.canvasBase.children[0].style.height, 10),
myWidth = el.offsetWidth,
myHeight = el.offsetHeight,
leftPos = ((screenWidth / 2) - (myWidth / 2)),
topPos = ((screenHeight / 2) - (myHeight / 2)),
me = this;
if ($.isArray(offset)) {
leftPos += offset[0];
topPos += offset[1];
}
$(el).css({
'left': leftPos + 'px',
'top': topPos + 'px'
});
$(window).resize(function() {
me.center(el, offset);
});
return true;
};
}
function iglooInit () {
//Perform page checks
this.runIglooInterface = new iglooInitInterface();
this.runIglooInit = new iglooInitControl();
this.launch = function () {
if (mw.config.get('wgPageName') !== 'Wikipedia:Igloo/run' || mw.config.get('wgAction') !== 'view') return;
this.runIglooInit.init();
};
}
var igLauncher = new iglooInit();
igLauncher.launch();