Difference between revisions of "MediaWiki:Common.js"
From Discovery Wiki
Jump to navigationJump to searchm (I suspect it doesn't wait for the content to actually be added to the DOM so the sort function has nothing to sort.) |
m |
||
Line 331: | Line 331: | ||
jQuery('#activeUsersEmbed').load('http://discoverygc.com/wiki/index.php?title=Special:ActiveUsers .mw-activeusers-intro~ul'); | jQuery('#activeUsersEmbed').load('http://discoverygc.com/wiki/index.php?title=Special:ActiveUsers .mw-activeusers-intro~ul'); | ||
// sort it by amount of edits | // sort it by amount of edits | ||
− | jQuery('#activeUsersEmbed').ready(function() { | + | jQuery('#activeUsersEmbed ul').ready(function() { |
sortList(document.querySelector("#activeUsersEmbed ul")); | sortList(document.querySelector("#activeUsersEmbed ul")); | ||
}); | }); |
Revision as of 19:18, 18 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; console.log(String(a)+"\n"+String(b)); 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)); console.log(String(compA)+"\n"+String(compB)); return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; }); // 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'); // sort it by amount of edits jQuery('#activeUsersEmbed ul').ready(function() { sortList(document.querySelector("#activeUsersEmbed ul")); }); } } jQuery( document ).ready(function() { getActiveUsers(); }); /* ActiveUsers embed plugin end */