MediaWiki:Common.js
From Discovery Wiki
Jump to navigationJump to search
Note: After saving, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
/* 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 // -----------------------------------------------------