X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/blobdiff_plain/4dd199c33768fd3252a714a55f04f306c241aca9..015ab79ac65cca3c99282e6c735412131f92e4f9:/js/qwebircinterface.js diff --git a/js/qwebircinterface.js b/js/qwebircinterface.js index 2ea6ac1..4655e0f 100644 --- a/js/qwebircinterface.js +++ b/js/qwebircinterface.js @@ -1,3 +1,13 @@ +function qwebirc_ui_onbeforeunload(e) { /* IE sucks */ + if(qwebirc.connected) { + var message = "This action will close all active IRC connections."; + var e = e || window.event; + if(e) + e.returnValue = message; + return message; + } +} + qwebirc.ui.Interface = new Class({ Implements: [Options], options: { @@ -10,16 +20,60 @@ qwebirc.ui.Interface = new Class({ searchURL: true, theme: undefined, baseURL: null, - hue: null + hue: null, + saturation: null, + lightness: null, + thue: null, + tsaturation: null, + tlightness: null, + uiOptionsArg: null, + nickValidation: null, + dynamicBaseURL: "/", + staticBaseURL: "/", + cloak: false, + logoURL: null, + accountWhoisCommand: null }, initialize: function(element, ui, options) { this.setOptions(options); + var extractHost = function() { + var uri = document.location.href; + + /* IE6 doesn't have document.origin ... */ + var start = uri.indexOf('?'); + if(start != -1) + uri = uri.substring(0, start); + var start = uri.indexOf('#'); + if(start != -1) + uri = uri.substring(0, start); + + if(QWEBIRC_DEBUG && uri.endsWith(".html")) { + var last = uri.lastIndexOf("/"); + uri = uri.substring(0, last + 1); + } + if(uri.substr(uri.length - 1) != "/") + uri = uri + "/"; + + return uri; + }; + + options.baseURL = extractHost(); + + /* HACK */ + qwebirc.global = { + dynamicBaseURL: options.dynamicBaseURL, + staticBaseURL: options.staticBaseURL, + baseURL: options.baseURL, + nicknameValidator: $defined(options.nickValidation) ? new qwebirc.irc.NicknameValidator(options.nickValidation) : new qwebirc.irc.DummyNicknameValidator() + }; window.addEvent("domready", function() { var callback = function(options) { + options.cloak = ui_.options.cloak; var IRC = new qwebirc.irc.IRCClient(options, ui_); IRC.connect(); - window.addEvent("beforeunload", function() { + window.onbeforeunload = qwebirc_ui_onbeforeunload; + window.addEvent("unload", function() { IRC.quit("Page closed"); }); }; @@ -30,16 +84,26 @@ qwebirc.ui.Interface = new Class({ if(this.options.searchURL) { var args = qwebirc.util.parseURI(String(document.location)); - this.options.hue = this.getHueArg(args); - var url = args["url"]; - var chans, nick = args["nick"]; + this.options.hue = this.getHueArg(args, ""); + this.options.saturation = this.getSaturationArg(args, ""); + this.options.lightness = this.getLightnessArg(args, ""); + + this.options.thue = this.getHueArg(args, "t"); + this.options.tsaturation = this.getSaturationArg(args, "t"); + this.options.tlightness = this.getLightnessArg(args, "t"); + + if(args.contains("uio")) + this.options.uiOptionsArg = args.get("uio"); + + var url = args.get("url"); + var chans, nick = args.get("nick"); if($defined(url)) { ichans = this.parseIRCURL(url); if($defined(chans) && chans != "") canAutoConnect = true; } else { - chans = args["channels"]; + chans = args.get("channels"); var canAutoConnect = false; @@ -51,8 +115,9 @@ qwebirc.ui.Interface = new Class({ for(var i=0;i 100 || saturation < -100) + return null; + return saturation; + }, + getLightnessArg: function(args, t) { + var lightness = args.get(t + "lightness"); + if(!$defined(lightness)) + return null; + lightness = parseInt(lightness); + if(lightness > 100 || lightness < -100) + return null; + return lightness; + }, randSub: function(nick) { var getDigit = function() { return Math.floor(Math.random() * 10); } @@ -164,16 +250,14 @@ qwebirc.ui.Interface = new Class({ } if($defined(queryArgs)) { - for(var key_ in queryArgs) { - var value = queryArgs[key_]; - + queryArgs.each(function(key_, value) { if(key_ == "key") { key = value; needkey = true; } else { not_supported.push(key_); } - } + }); } if(needkey) {