/* This is the script to add CGI:IRC login box to random pages (like [[Wikimania:IRC]]). Please report problems to [[user talk:Markie]]. If recently modified, do a hard refresh of [http://wikimania2008.wikimedia.org/w/index.php?title=Mediawiki:Irc.js&action=raw&ctype=text/javascript&dontcountme=s this page] to make mods go live. :Just add
to a random page. Note: This is based on the login page from CGI:IRC 0.5, which is made by David Leadbeater and is under the GPL. See http://cgiirc.sf.net . */ function add_irc() { irc_div = document.getElementById("cgiircbox"); if (irc_div) { //alt server //http://chatwikizine.memebot.com/cgi-bin/cgiirc/irc.cgi //http://irc.net/cgi-bin/irc/irc.cgi (allows all servers) //http://68.213.57.225/irc.cgi //http://wnirc.awardspace.com/advanced.html var irc_form = new_element("form", {id: 'cgiirclogin', name: 'cgiirclogin', method: 'post', action: 'http://chatwikizine.memebot.com/cgi-bin/cgiirc/irc.cgi', onsubmit: 'setjs();return nickvalid()'}, irc_div); new_input('interface', 'nonjs', 'hidden', irc_form); new_input('Server', 'irc.freenode.net', 'hidden', irc_form); table = new_element("table", {border: 0, cellpadding: 5, cellspacing: 0, id: "cgiircboxtable"}, irc_form); //to seperate out table rows (function() { var tr = new_element("tr", {}, table); var td1 = new_element("td", {colspan: 2, align: "center", bgcolor: "#c0c0dd", style: "font-weight: bold;"}, tr); var ircTitle = document.createTextNode("CGI:IRC Login"); td1.appendChild(ircTitle); })(); (function() { var tr = new_element("tr", {}, table); var td1 = new_element("td", {align: "right", bgcolor: "#f1f1f1", id: "nickname-label-a"}, tr); var td2 = new_element("td", {align: "left", bgcolor: "#f1f1f1", id: "nickname-a"}, tr); })(); (function() { var tr = new_element("tr", {}, table); var td1 = new_element("td", {align: "right", bgcolor: "#f1f1f1", id: "channel-label-a"}, tr); var td2 = new_element("td", {align: "left", bgcolor: "#f1f1f1", id: "channel-a"}, tr); })(); (function() { var tr = new_element("tr", {}, table); var td1 = new_element("td", {align: "left", bgcolor: "#d9d9d9", id: "ircAdvanced-td"}, tr); var AdvancedLink = new_element("a", {href: "javascript:show_ircAdvanced()", style: "font-size:small;", id: "ircAdvanced"}, td1); var ircAdvanced = document.createTextNode("Advanced..."); AdvancedLink.appendChild(ircAdvanced); var td2 = new_element("td", {align: "right", bgcolor: "#d9d9d9", id: "go-a"}, tr); })(); new_label('Nickname-label', 'nickname', 'Your Nickname: ', document.getElementById("nickname-label-a")); if (wgUserGroups && (wgUserGroups.indexOf("user") > 0)) { var irc_username = wgUserName; } else { var irc_username = "Wikimaniac" + (Math.floor(Math.random()*100)); } new_input('Nickname', irc_username, 'text', document.getElementById("nickname-a")); new_label('Channel-label', 'channel', 'IRC channel (which chat room): ', document.getElementById("channel-label-a")); var channel = new_element('select', {name: "Channel", id: "Channel", onchange: "irc_channelChange(this.selectedIndex);"}, document.getElementById("channel-a")); //start chat chan var ircDiscussion = new_element('optgroup', {label: "Discussion", id: "ircDiscussion"}, channel); var ircwikinews = new_element("option", {name: "#wikimania", value: "#wikimania", selected: "selected"}, ircDiscussion); ircwikinews.appendChild(document.createTextNode("General Wikimania discussion")); ircwikinewsen = new_element("option", {name: "#wikimania2008", value: "#wikimania2008"}, ircDiscussion); ircwikinewsen.appendChild(document.createTextNode("Wikimania 2008 planning")); new_input('go', ' Chat! ', 'submit', document.getElementById("go-a")); //do the setcharset stuff setcharset() } } //functions called by above function show_ircAdvanced() { //do nothing! //eventually I will make this expand the form alert("Advanced options not currently available"); } function irc_channelChange(chan) { //fix server var form = document.getElementById("cgiirclogin"); var serv = document.getElementById("Server"); //break not on all for a reason switch (chan) { case 0: case 1: //switch to freenode serv.setAttribute("value", "irc.freenode.net"); form.setAttribute("action", "http://chatwikizine.memebot.com/cgi-bin/cgiirc/irc.cgi"); break; case 2: //RC serv.setAttribute("value", "irc.wikimedia.org"); form.setAttribute("action", "http://irc.net/cgi-bin/irc/irc.cgi"); break; } } function new_input(id, value, type, attach) { var new_opt = document.createElement("input"); new_opt.setAttribute('id', id); new_opt.setAttribute('name', id); new_opt.setAttribute('value', value); new_opt.setAttribute('type', type); //starting adding to tree attach.appendChild(new_opt); return(document.getElementById(id)); } function new_label(id, input, value, attach) { var new_opt = document.createElement("label"); new_opt.setAttribute('id', id); new_opt.setAttribute('name', id); new_opt.setAttribute('for', input); var label = document.createTextNode(value); new_opt.appendChild(label); //starting adding to tree if (attach && attach.appendChild) { attach.appendChild(new_opt); } else { alert("JS Error (CGI::IRC): Can not find element to append new element to. (opt)"); } return(document.getElementById(id)); } function new_element (name, attributes) { //Create element, and attributes, and optionally add to tree // call as new_element(element name to create(string), attributes of element (object), optionally element to append as a child to) if (name) { var elm = document.createElement(name); } else { return null; } //set attributes if (typeof(attributes) == "object") { for (var i in attributes) { elm.setAttribute(i, attributes[i]); } } else { return null; } //attach to tree (but only if third argument given) if (arguments[2]) { var appendState = arguments[2].appendChild(elm) if (!appendState) { alert("JS Error (CGI::IRC): Can not find element to append new element to. (element)"); } } return elm; } function setjs() { //This function might be under the GPL as it is from cgi:irc 0.5 by David Leadbeater. see http://cgiirc.sf.net if(navigator.product == 'Gecko') { document.cgiirclogin["interface"].value = 'mozilla'; }else if(window.opera && document.childNodes) { document.cgiirclogin["interface"].value = 'opera7'; }else if(navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf("Mac_PowerPC") > 0) { document.cgiirclogin["interface"].value = 'konqueror'; }else if(navigator.appName == 'Microsoft Internet Explorer' && document.getElementById && document.getElementById('ietest').innerHTML) { document.cgiirclogin["interface"].value = 'ie'; }else if(navigator.appName == 'Konqueror') { document.cgiirclogin["interface"].value = 'konqueror'; }else if(window.opera) { document.cgiirclogin["interface"].value = 'opera'; } } function nickvalid() { //This function might be under the GPL as it is from cgi:irc 0.5 by David Leadbeater. see http://cgiirc.sf.net var nick = document.cgiirclogin.Nickname.value; if(nick.match(/^[A-Za-z0-9\[\]\{\}^\\\|\_\-`]{1,32}$/)) return true; alert('Please enter a valid nickname'); document.cgiirclogin.Nickname.value = nick.replace(/[^A-Za-z0-9\[\]\{\}^\\\|\_\-`]/g, ''); return false; } function setcharset() { //This function might be under the GPL as it is from cgi:irc 0.5 by David Leadbeater. see http://cgiirc.sf.net if(document.charset && document.cgiirclogin["Character set"]) document.cgiirclogin['Character set'].value = document.charset } //because this is already from a load event add_irc(); //