This wiki is closed in favour of the new wiki. Information shown is likely to be very out of date. |
Difference between revisions of "MediaWiki:Common.js"
From Discovery Wiki
Jump to navigationJump to search (Ship pages are a bit more difficult due to the way the option on the generator page is created, so we'll look for the ship template instead to prevent false matches.) |
m (Fixed the image regex being confused by dashes in the file name.) |
||
Line 374: | Line 374: | ||
success: function(response) { | success: function(response) { | ||
var wCode = jQuery(response).filter("#content").text().trim(); | var wCode = jQuery(response).filter("#content").text().trim(); | ||
− | var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\.\w*)/g); | + | var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\-*\w*\.\w*)/g); |
if (imageStr !== null) { | if (imageStr !== null) { | ||
wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr); | wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr); | ||
Line 392: | Line 392: | ||
success: function(response) { | success: function(response) { | ||
var wCode = jQuery(response).filter("#content").text().trim(); | var wCode = jQuery(response).filter("#content").text().trim(); | ||
− | var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\.\w*)/g); | + | var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\-*\w*\.\w*)/g); |
if (imageStr !== null) { | if (imageStr !== null) { | ||
wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr); | wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr); |
Revision as of 10:46, 26 April 2015
/* Any JavaScript here will be loaded for all users on every page load. */ /* Event attach functions. */ function DW_eventAttach (obj, event, handler) { if (obj.addEventListener) { obj.addEventListener(event, handler, false); } else if (obj.attachEvent) { var r = obj.attachEvent('on' + event, handler); } else { obj['on' + event] = handler; } } /* Functions for Template:SpoilerWindow */ function DW_createSpoilerLink () { var el_list = document.getElementsByTagName('div'); var el_cur; for (var i = 0, l = el_list.length; i < l; i++){ el_cur = el_list[i]; if ((el_cur.className && el_cur.className == 'dwspoiler')) { var container = el_cur.getElementsByTagName('div'); if (!container.item(1).style.display || container.item(1).style.display == 'block') { var text = document.createTextNode('Hide'); } else { var text = document.createTextNode('Show'); } var link = document.createElement('a'); link.appendChild(text); link.setAttribute('href', 'javascript:void(0);'); DW_eventAttach(link, 'click', function () { DW_toggleVisibility(this); }); var toggle_element = el_cur.getElementsByTagName('span'); toggle_element.item(0).appendChild(document.createTextNode('[')); toggle_element.item(0).appendChild(link); toggle_element.item(0).appendChild(document.createTextNode(']')); } } } addOnloadHook(DW_createSpoilerLink); function DW_toggleVisibility (obj) { var container = obj.parentNode.parentNode.parentNode.getElementsByTagName('div').item(1); if (!container.style.display || container.style.display == 'block') { container.style.display = 'none'; obj.innerHTML = 'Show'; } else { container.style.display = 'block'; obj.innerHTML = 'Hide'; } } /** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[**DOCUMENTATION LINK**]]. * Maintainers: [[**MAINTAINERS**]] */ var autoCollapse = 2; var collapseCaption = "hide"; var expandCaption = "show"; function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = new Object(); var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName( "th" )[0]; if (!Header) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.className = "collapseButton"; //Styles are declared in Common.css ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } for ( var i = 0; i < tableIndex; i++ ) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { collapseTable( i ); } } } addOnloadHook( createCollapseButtons ); /** Test if an element has a certain class ************************************** * * Description: Uses regular expressions and caching for better performance. * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]] */ var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); /* Overwrite mediawiki's default sort function for tables, fixing how numbers are sorted in table cells if they have a unit attached at the end */ function padnum(str, len) { if (len + 1 >= str.length && str.match(/^\d/)) { str = Array(len + 1 - str.length).join('0') + str; } return str; } function ts_sort_numeric(a,b) { var aa = padnum(ts_parseFloat(a[1]),50); var bb = padnum(ts_parseFloat(b[1]),50); return (aa != bb ? aa - bb : a[2] - b[2]); } // ------------------------------------------------------------------------------- // Force Preview JavaScript code - Start // // To allow any group to bypass being forced to preview, // enter the group name in the permittedGroups array. // E.g. // var permittedGroups = []; // force everyone // var permittedGroups = [ "user"]; // permit logged-in users // var permittedGroups = [ "sysop", "bureaucrat"]; // permit sysop, bureaucrat // ------------------------------------------------------------------------------- var permittedGroups = [ "trusted", "sysop", "bureaucrat" ]; Array.prototype.intersects = function() { // -------------------------------------------------------- // Returns true if any element in the argument array // is the same as an element in this array // -------------------------------------------------------- if ( !arguments.length ) return false; var array2 = arguments[0]; var len1 = this.length; var len2 = array2.length; if ( len2 == 0 ) return false; for ( var i = 0; i < len1; i++ ) { for ( var j = 0; j < len2; j++ ) { if ( this[i] === array2[j] ) return true; } } return false; }; function forcePreview() { if ( mw.config.get( 'wgNamespaceNumber' ) == 10 || mw.config.get( 'wgNamespaceNumber' ) == 8 ) return; // No point forcing preview in the Template or MediaWiki namespaces if ( mw.config.get( "wgAction" ) != "edit" ) return; if ( mw.config.get( "wgUserGroups" ).intersects( permittedGroups ) ) return; var saveButton = document.getElementById( "wpSave" ); if ( !saveButton ) return; saveButton.disabled = true; saveButton.value = "Save page (use preview first)"; saveButton.style.fontWeight = "normal"; document.getElementById("wpPreview").style.fontWeight = "bold"; } jQuery(document).ready( forcePreview ); // ----------------------------------------------------- // Force Preview JavaScript code - End // ----------------------------------------------------- /* Scroll Gallery JS start */ jQuery( document ).ready(function() { if (document.URL.match(/printable/g)) return; function toggleImageFunction(group, remindex, shwindex) { return function() { document.getElementById("ImageGroupsGr" + group + "Im" + remindex).style["display"] = "none"; document.getElementById("ImageGroupsGr" + group + "Im" + shwindex).style["display"] = "block"; return false; }; } var divs = document.getElementsByTagName("div"); var i = 0, j = 0; var units, search; var currentimage; var UnitNode; for (i = 0; i < divs.length; i++) { if (divs[i].className !== "ImageGroup") { continue; } UnitNode = undefined; search = divs[i].getElementsByTagName("div"); for (j = 0; j < search.length; j++) { if (search[j].className !== "ImageGroupUnits") { continue; } UnitNode=search[j]; break; } if (UnitNode === undefined) { continue; } units = []; for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) { var temp = UnitNode.childNodes[j]; if (temp.className === "center") { units.push(temp); } } var rightlink = undefined; var commentText = undefined; for (j = 0; j < units.length; j++) { currentimage = units[j]; currentimage.id = "ImageGroupsGr" + i + "Im" + j; var leftlink = document.createElement("a"); if (commentText !== undefined) { leftlink.setAttribute("title", commentText); } var comment; if (typeof(currentimage.getAttribute("title")) !== "string") { commentText = (j+1) + "/" + units.length; comment = document.createElement("tt").appendChild(document.createTextNode("("+ commentText + ")")); } else { commentText = currentimage.getAttribute("title"); comment = document.createElement("span").appendChild(document.createTextNode(commentText)); currentimage.removeAttribute("title"); } if(rightlink !== undefined) { rightlink.setAttribute("title", commentText); } var imghead = document.createElement("div"); rightlink = document.createElement("a"); if (j !== 0) { leftlink.href = "#"; leftlink.onclick = toggleImageFunction(i, j, j-1); leftlink.appendChild(document.createTextNode("◀")); } if (j !== units.length - 1) { rightlink.href = "#"; rightlink.onclick = toggleImageFunction(i, j, j+1); rightlink.appendChild(document.createTextNode("▶")); } imghead.style["fontSize"] = "110%"; imghead.style["fontweight"] = "bold"; imghead.appendChild(leftlink); imghead.appendChild(document.createTextNode("\xA0")); imghead.appendChild(comment); imghead.appendChild(document.createTextNode("\xA0")); imghead.appendChild(rightlink); if (units.length > 1) { currentimage.insertBefore(imghead,currentimage.childNodes[0]); } if (j !== 0) { currentimage.style["display"] = "none"; } } } }); /* Scroll Gallery JS end */ /* ActiveUsers embed plugin start */ function sortList(ul){ var new_ul = ul.cloneNode(false); // Add all li objects to an array var lis = []; for(var i = ul.childNodes.length; i--;){ if(ul.childNodes[i].nodeName === 'LI') lis.push(ul.childNodes[i]); } // Sort li objects by user edit count lis.sort(function(b, a) { a = a.innerHTML; b = b.innerHTML; editCount = /(\d+)(?= edits in the last 30 days| edit in the last 30 days)/g; var compA = parseInt(String(a).match(editCount)); var compB = parseInt(String(b).match(editCount)); return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; }); var userCount = parseInt(document.getElementById("activeUsersEmbed").getAttribute("data-usercount")); if (userCount>0) { lis = lis.slice(0,userCount); } // Add li objects to ul in order for(var i = 0; i < lis.length; i++) new_ul.appendChild(lis[i]); ul.parentNode.replaceChild(new_ul, ul); } function getActiveUsers() { if(!!document.getElementById("activeUsersEmbed")) { // Alright, some container somewhere wants to contain a list of active users. Cool. jQuery("#activeUsersEmbed").load("http://discoverygc.com/wiki/index.php?title=Special:ActiveUsers .mw-activeusers-intro~ul", function() { sortList(document.querySelector('#activeUsersEmbed ul')); }); } } jQuery( document ).ready(function() { getActiveUsers(); }); /* ActiveUsers embed plugin end */ /* disableEditing plugin start */ /* Call the disableEditing function with an appropriate reason at page load to remove the editing form. */ /* Will allow users in editPermitted to edit as usual, and will obviously do nothing if JavaScript is */ /* disabled, but that's not really an issue. */ var editPermitted = [ "sysop", "bureaucrat" ]; function disableEditing(reason) { if ( mw.config.get( "wgUserGroups" ).intersects( editPermitted ) ) return; jQuery("#editform").html(reason); } // jQuery( document ).ready(function() { // disableEditing("Editing has been temporarily disabled."); // }); /* disableEditing plugin end */ /* code generator plugin start */ jQuery.expr[':'].textEquals = function(el, i, m) { var searchText = m[3]; var match = jQuery(el).text().trim().match("^" + searchText + "$") return match && match.length > 0; } function showBaseDiff(internalNickname) { jQuery.ajax({ data: { basenick: internalNickname, disptype: "wiki", submit: "Get+Base+Info"}, type: "POST", url: "http://discoverygc.com/wikigen/basegen.php?itemtype=bases", success: function(response) { var wCode = jQuery(response).filter("#content").text().trim(); var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\-*\w*\.\w*)/g); if (imageStr !== null) { wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr); } jQuery("input#wpSummary").val("Default message: Importing autogenerated base page from code generator."); jQuery("textarea#wpTextbox1").val(wCode); jQuery("input#wpDiff").click(); } }); } function showShipDiff(internalNickname) { jQuery.ajax({ data: { shipselect: internalNickname, disptype: "wiki", submit: "Get+Ship+Info"}, type: "POST", url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ship", success: function(response) { var wCode = jQuery(response).filter("#content").text().trim(); var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\-*\w*\.\w*)/g); if (imageStr !== null) { wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr); } jQuery("input#wpSummary").val("Default message: Importing autogenerated ship page from code generator."); jQuery("textarea#wpTextbox1").val(wCode); jQuery("input#wpDiff").click(); } }); } function showWeapDiff(internalNickname) { jQuery.ajax({ data: { weapselect: internalNickname, disptype: "wiki", submit: "Weapon+Detail+Info"}, type: "POST", url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=weapon", success: function(response) { var wCode = jQuery(response).filter("#content").text().trim(); jQuery("input#wpSummary").val("Default message: Importing autogenerated weapon page from code generator."); jQuery("textarea#wpTextbox1").val(wCode); jQuery("input#wpDiff").click(); } }); } function showIDDiff(internalNickname) { jQuery.ajax({ data: { idselect: internalNickname, disptype: "wiki", submit: "ID+Sell+Locations"}, type: "POST", url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ID", success: function(response) { var wCode = jQuery(response).filter("#content").text().trim(); wCode = wCode.replace(/(\*\ \-\ )/g, "*"); // Remove double "bullet points" wCode = wCode.replace(/(\*\s*\n)/g, ""); // Remove blank list items jQuery("input#wpSummary").val("Default message: Importing autogenerated weapon page from code generator."); jQuery("textarea#wpTextbox1").val(wCode); jQuery("input#wpDiff").click(); } }); } function generateGeneratorQuery(pageName) { // is the page a base? if so, generate a button jQuery.ajax({ data: { basenick: "", disptype: "wiki", submit:"Get+Base+Info"}, type: "POST", url: "http://discoverygc.com/wikigen/basegen.php?itemtype=bases", success: function(response) { var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value"); if (!internalNickname == 0) { jQuery("<form style=\"display: inline;\"><input onclick=\"showBaseDiff('"+internalNickname+"')\" type=\"submit\" value=\"Generate code (base)\"></form><span> Remember to add links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff"); } } }); // is the page a gun? if so, generate a button jQuery.ajax({ data: { weapselect: "", disptype: "wiki", submit:"Weapon+Detail+Info"}, type: "POST", url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=weapon", success: function(response) { var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value"); if (!internalNickname == 0) { jQuery("<form style=\"display: inline;\"><input onclick=\"showWeapDiff('"+internalNickname+"')\" type=\"submit\" value=\"Generate code (gun)\"></form><span> Remember to add links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff"); } } }); // is the page an ID? if so, generate a button if (wgTitle.indexOf("ID") != -1) { jQuery.ajax({ data: { idselect: "", disptype: "wiki", submit:"ID+Sell+Locations"}, type: "POST", url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ID", success: function(response) { var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value"); if (!internalNickname == 0) { jQuery("<form style=\"display: inline;\"><input onclick=\"showIDDiff('"+internalNickname+"')\" type=\"submit\" value=\"Generate code (ID)\"></form><span> Remember to add links when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff"); } } }); } // is the page a ship? if so, generate a button jQuery.ajax({ data: { shipselect: "", disptype: "wiki", submit:"Get+Ship+Info"}, type: "POST", url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ship", success: function(response) { var internalNickname = jQuery(response).find("option:contains('"+pageName+"')").attr("value"); if (!internalNickname == 0 && jQuery("textarea#wpTextbox1").text().match(/({{[S|s]hip|HIP)/g) !== null) { jQuery("<form style=\"display: inline;\"><input onclick=\"showShipDiff('"+internalNickname+"')\" type=\"submit\" value=\"Generate code (ship)\"></form><span> Remember to add reviews, links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff"); } } }); } jQuery( document ).ready(function() { if(!!document.getElementById("editform")) { generateGeneratorQuery(wgTitle); } }); /* code generator plugin end */