|
|
| Line 1: |
Line 1: |
| | /* JavaScript brought over from Wikipedia appears first. JS code written for our wiki comes second, under the heading CUSTOM ONI WIKI ADDITIONS. */ |
| | |
| | /* WIKIPEDIA CARRY-OVERS */ |
| | /* The original code on Wikipedia's Common.js page should be checked once in a while for updates to, or removal of, this code */ |
| | |
| /** extract a URL parameter from the current URL ********** | | /** extract a URL parameter from the current URL ********** |
| * From [[en:User:Lupin/autoedit.js]] | | * From [[en:User:Lupin/autoedit.js]] |
| Line 25: |
Line 30: |
| } | | } |
|
| |
|
| | | // TODO: Get this working again |
| /* Focus us on the Search box if we're on the Main Page, so we can immediately start typing */ | |
| if (mw.config.get('wgIsMainPage'))
| |
| {
| |
| $(function()
| |
| {
| |
| $('#searchInput').focus();
| |
| });
| |
| }
| |
| | |
| | |
| /* If we're on the Search page, load the script that augments that page */ | | /* If we're on the Search page, load the script that augments that page */ |
| if (mw.config.get('wgPageName') === 'Special:Search') | | if (mw.config.get('wgPageName') === 'Special:Search') |
| Line 41: |
Line 36: |
| mw.loader.load('/w/index.php?title=MediaWiki:Common.js/search.js&action=raw&ctype=text/javascript'); | | mw.loader.load('/w/index.php?title=MediaWiki:Common.js/search.js&action=raw&ctype=text/javascript'); |
| } | | } |
|
| |
|
| |
| /* Scripts specific to Internet Explorer */
| |
| if (navigator.appName == 'Microsoft Internet Explorer')
| |
| {
| |
| /** Internet Explorer bug fix **************************************************
| |
| *
| |
| * Description: Fixes IE horizontal scrollbar bug
| |
| * Maintainers: [[User:Tom-]]?
| |
| */
| |
|
| |
| var oldWidth;
| |
| var docEl = document.documentElement;
| |
|
| |
| var fixIEScroll = function()
| |
| {
| |
| if (!oldWidth || docEl.clientWidth > oldWidth)
| |
| {
| |
| doFixIEScroll();
| |
| }
| |
| else
| |
| {
| |
| setTimeout(doFixIEScroll, 1);
| |
| }
| |
|
| |
| oldWidth = docEl.clientWidth;
| |
| };
| |
|
| |
| var doFixIEScroll = function()
| |
| {
| |
| docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
| |
| };
| |
|
| |
| document.attachEvent("onreadystatechange", fixIEScroll);
| |
| document.attachEvent("onresize", fixIEScroll);
| |
|
| |
| // In print IE (7?) does not like line-height
| |
| appendCSS('@media print {sup, sub, p, .documentDescription {line-height: normal;}}');
| |
|
| |
| // IE overflow bug
| |
| appendCSS('div.overflowbugx {overflow-x: scroll !important; overflow-y: hidden !important;} div.overflowbugy {overflow-y: scroll !important; overflow-x: hidden !important;}');
| |
|
| |
| // IE zoomfix
| |
| // Use to fix right floating div/table inside tables
| |
| appendCSS('.iezoomfix div, .iezoomfix table {zoom: 1;}');
| |
| }
| |
|
| |
|
| |
| /** Hover tables *********************************************************
| |
| *
| |
| * Description: Allows tables to use mouse-over to provide explanation of
| |
| * the pointed-to content.
| |
| * Maintainers: [[User:Iritscen]]
| |
| */
| |
| function showDescrip(typeID, show_or_not)
| |
| {
| |
| var DescripPanel = document.getElementsByClassName("hovertable_descrip")[0]; /* only get 1st one on page to keep things simple */
| |
| var Descrips = DescripPanel.getElementsByTagName("span");
| |
|
| |
| if (!DescripPanel || !Descrips)
| |
| return false;
| |
|
| |
| for (var i = 0; i < Descrips.length; i++)
| |
| {
| |
| if (Descrips[i].id == typeID)
| |
| {
| |
| if (show_or_not)
| |
| Descrips[i].style.display = "block";
| |
| else
| |
| Descrips[i].style.display = "none";
| |
| }
| |
| }
| |
| }
| |
|
| |
| function initHoverTables()
| |
| {
| |
| var Tables = document.getElementsByClassName("hovertable");
| |
| if (!Tables)
| |
| return false;
| |
|
| |
| for (var i = 0; i < Tables.length; i++)
| |
| {
| |
| var Cells = Tables[i].getElementsByTagName("td");
| |
| if (!Cells) continue;
| |
|
| |
| for (var j = 0; j < Cells.length; j++)
| |
| {
| |
| if ($(Cells[j]).hasClass("hovercell"))
| |
| {
| |
| $(Cells[j]).mouseover(new Function("evt", "showDescrip(this.id, true);"));
| |
| $(Cells[j]).mouseout(new Function("evt", "showDescrip(this.id, false);"));
| |
| }
| |
| }
| |
| }
| |
| }
| |
|
| |
| $(initHoverTables);
| |
|
| |
| /** Hover GIFs *********************************************************
| |
| *
| |
| * Description: Allows GIFs to only animate upon mouse-over.
| |
| *
| |
| * Maintainers: [[User:Iritscen]]
| |
| */
| |
| function swapImage(gifID, show_gif)
| |
| {
| |
| var gif_span = document.getElementById(gifID);
| |
| var gif_image = gif_span.getElementsByClassName("image")[0];
| |
| var gif_img = gif_image.getElementsByTagName("img")[0];
| |
| var gif_src = gif_img.src;
| |
|
| |
| if (!gif_img)
| |
| return false;
| |
|
| |
| if (show_gif)
| |
| gif_img.src = gif_src.replace('.jpg', '.gif');
| |
| else
| |
| gif_img.src = gif_src.replace('.gif', '.jpg');
| |
| }
| |
|
| |
| function initHoverGIFs()
| |
| {
| |
| var gifs = document.getElementsByClassName("hovergif");
| |
|
| |
| if (!gifs)
| |
| return false;
| |
|
| |
| for (var i = 0; i < gifs.length; i++)
| |
| {
| |
| $(gifs[i]).mouseover(swapImage(this.id, true));
| |
| $(gifs[i]).mouseout(swapImage(this.id, false));
| |
| }
| |
| }
| |
|
| |
| $(initHoverGIFs);
| |
|
| |
|
| |
|
| /** Collapsible tables ********************************************************* | | /** Collapsible tables ********************************************************* |
| Line 218: |
Line 77: |
| } | | } |
| } | | } |
|
| |
| function createCollapseButtons() | | function createCollapseButtons() |
| { | | { |
| Line 279: |
Line 137: |
| } | | } |
| } | | } |
| | $(createCollapseButtons); |
|
| |
|
| $(createCollapseButtons);
| | /* CUSTOM ONI WIKI ADDITIONS */ |
|
| |
|
| | /* Focus us on the Search box if we're on the Main Page, so we can immediately start typing */ |
| | if (mw.config.get('wgIsMainPage')) |
| | { |
| | $(function() |
| | { |
| | $('#searchInput').focus(); |
| | }); |
| | } |
|
| |
|
| /** Dynamic Navigation Bars (experimental) ************************************* | | /** Hover tables ********************************************************* |
| * | | * |
| * Description: See [[Wikipedia:NavFrame]]. | | * Description: Allows tables to use mouse-over to provide explanation of |
| * Maintainers: UNMAINTAINED | | * the pointed-to content. |
| | * Maintainers: [[User:Iritscen]] |
| */ | | */ |
| | | function showDescrip(typeID, show_or_not) |
| // set up the words in your language
| |
| var NavigationBarHide = '[' + collapseCaption + ']';
| |
| var NavigationBarShow = '[' + expandCaption + ']';
| |
| | |
| // shows and hides content and picture (if available) of navigation bars
| |
| // Parameters:
| |
| // indexNavigationBar: the index of navigation bar to be toggled
| |
| function toggleNavigationBar(indexNavigationBar) | |
| { | | { |
| var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); | | var DescripPanel = document.getElementsByClassName("hovertable_descrip")[0]; /* only get 1st one on page to keep things simple */ |
| var NavFrame = document.getElementById("NavFrame" + indexNavigationBar); | | var Descrips = DescripPanel.getElementsByTagName("span"); |
|
| |
|
| if (!NavFrame || !NavToggle) | | if (!DescripPanel || !Descrips) |
| return false; | | return false; |
|
| |
|
| // if shown now | | for (var i = 0; i < Descrips.length; i++) |
| if (NavToggle.firstChild.data == NavigationBarHide)
| |
| { | | { |
| for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) | | if (Descrips[i].id == typeID) |
| { | | { |
| if ($(NavChild).hasClass("NavContent") || $(NavChild).hasClass("NavPic")) | | if (show_or_not) |
| { | | Descrips[i].style.display = "block"; |
| NavChild.style.display = 'none'; | | else |
| }
| | Descrips[i].style.display = "none"; |
| } | | } |
| NavToggle.firstChild.data = NavigationBarShow; | | } |
| | } |
| | function initHoverTables() |
| | { |
| | var Tables = document.getElementsByClassName("hovertable"); |
| | if (!Tables) |
| | return false; |
|
| |
|
| // if hidden now | | for (var i = 0; i < Tables.length; i++) |
| }
| |
| else if (NavToggle.firstChild.data == NavigationBarShow)
| |
| { | | { |
| for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) | | var Cells = Tables[i].getElementsByTagName("td"); |
| | if (!Cells) continue; |
| | |
| | for (var j = 0; j < Cells.length; j++) |
| { | | { |
| if ($(NavChild).hasClass("NavContent") || $(NavChild).hasClass("NavPic")) | | if ($(Cells[j]).hasClass("hovercell")) |
| { | | { |
| NavChild.style.display = 'block'; | | $(Cells[j]).mouseover(new Function("evt", "showDescrip(this.id, true);")); |
| | $(Cells[j]).mouseout(new Function("evt", "showDescrip(this.id, false);")); |
| } | | } |
| } | | } |
| NavToggle.firstChild.data = NavigationBarHide;
| |
| } | | } |
| } | | } |
| | $(initHoverTables); |
|
| |
|
| // adds show/hide-button to navigation bars | | /** Hover GIFs ********************************************************* |
| function createNavigationBarToggleButton() | | * |
| | * Description: Allows GIFs to only animate upon mouse-over. |
| | * |
| | * Maintainers: [[User:Iritscen]] |
| | */ |
| | function swapImage(gifID, show_gif) |
| { | | { |
| var indexNavigationBar = 0; | | var gif_span = document.getElementById(gifID); |
| // iterate over all < div >-elements
| | var gif_image = gif_span.getElementsByClassName("image")[0]; |
| var divs = document.getElementsByTagName("div");
| | var gif_img = gif_image.getElementsByTagName("img")[0]; |
| for (var i = 0; NavFrame = divs[i]; i++) | | var gif_src = gif_img.src; |
| {
| |
| // if found a navigation bar
| |
| if ($(NavFrame).hasClass("NavFrame"))
| |
| {
| |
| indexNavigationBar++;
| |
| var NavToggle = document.createElement("a");
| |
| NavToggle.className = 'NavToggle';
| |
| NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
| |
| NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
| |
|
| |
|
| var isCollapsed = $(NavFrame).hasClass("collapsed");
| | if (!gif_img) |
| /*
| | return false; |
| * Check if any children are already hidden. This loop is here for backwards compatibility:
| |
| * the old way of making NavFrames start out collapsed was to manually add style="display:none"
| |
| * to all the NavPic/NavContent elements. Since this was bad for accessibility (no way to make
| |
| * the content visible without JavaScript support), the new recommended way is to add the class
| |
| * "collapsed" to the NavFrame itself, just like with collapsible tables.
| |
| */
| |
| for (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling)
| |
| {
| |
| if ($(NavChild).hasClass("NavPic") || $(NavChild).hasClass("NavContent"))
| |
| {
| |
| if (NavChild.style.display == 'none')
| |
| {
| |
| isCollapsed = true;
| |
| }
| |
| }
| |
| }
| |
| if (isCollapsed)
| |
| {
| |
| for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling)
| |
| {
| |
| if ($(NavChild).hasClass("NavPic") || $(NavChild).hasClass("NavContent"))
| |
| {
| |
| NavChild.style.display = 'none';
| |
| }
| |
| }
| |
| }
| |
| var NavToggleText = document.createTextNode(isCollapsed ? NavigationBarShow : NavigationBarHide);
| |
| NavToggle.appendChild(NavToggleText);
| |
|
| |
|
| // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
| | if (show_gif) |
| for (var j = 0; j < NavFrame.childNodes.length; j++)
| | gif_img.src = gif_src.replace('.jpg', '.gif'); |
| {
| | else |
| if ($(NavFrame.childNodes[j]).hasClass("NavHead"))
| | gif_img.src = gif_src.replace('.gif', '.jpg'); |
| {
| |
| NavToggle.style.color = NavFrame.childNodes[j].style.color;
| |
| NavFrame.childNodes[j].appendChild(NavToggle);
| |
| }
| |
| }
| |
| NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
| |
| }
| |
| }
| |
| } | | } |
| | | function initHoverGIFs() |
| $(createNavigationBarToggleButton);
| |
| | |
| | |
| // Allows sidebar's "navigation", "toolbox" and "languages" sections to be customized
| |
| function ModifySidebar(action, section, name, link) | |
| { | | { |
| try | | var gifs = document.getElementsByClassName("hovergif"); |
| {
| |
| switch (section)
| |
| {
| |
| case "languages":
| |
| var target = "p-lang";
| |
| break;
| |
| case "toolbox":
| |
| var target = "p-tb";
| |
| break;
| |
| case "navigation":
| |
| var target = "p-navigation";
| |
| break;
| |
| default:
| |
| var target = "p-" + section;
| |
| break;
| |
| }
| |
|
| |
| if (action == "add")
| |
| {
| |
| var node = document.getElementById(target)
| |
| .getElementsByTagName('div')[0]
| |
| .getElementsByTagName('ul')[0];
| |
|
| |
| var aNode = document.createElement('a');
| |
| var liNode = document.createElement('li');
| |
|
| |
| aNode.appendChild(document.createTextNode(name));
| |
| aNode.setAttribute('href', link);
| |
| liNode.appendChild(aNode);
| |
| liNode.className='plainlinks';
| |
| node.appendChild(liNode);
| |
| }
| |
|
| |
|
| if (action == "sep")
| | if (!gifs) |
| {
| | return false; |
| var node = document.getElementById(target)
| |
| .getElementsByTagName('div')[0]
| |
| .getElementsByTagName('ul')[0];
| |
|
| |
| var liNode = document.createElement('li');
| |
| liNode.style.listStyleImage="url('http://wiki.oni2.net/w/images/1/10/Separator.png')";
| |
| liNode.style.listStylePosition='inside';
| |
| node.appendChild(liNode);
| |
| }
| |
|
| |
| if (action == "remove")
| |
| {
| |
| var list = document.getElementById(target)
| |
| .getElementsByTagName('div')[0]
| |
| .getElementsByTagName('ul')[0];
| |
|
| |
| var listelements = list.getElementsByTagName('li');
| |
|
| |
| for (var i = 0; i < listelements.length; i++)
| |
| {
| |
| if (listelements[i].getElementsByTagName('a')[0].innerHTML == name ||
| |
| listelements[i].getElementsByTagName('a')[0].href == link)
| |
| {
| |
|
| |
| list.removeChild(listelements[i]);
| |
| }
| |
| }
| |
| } | |
|
| |
| }
| |
| catch(e)
| |
| {
| |
| // let's just ignore what's happened
| |
| return;
| |
| }
| |
| }
| |
|
| |
|
| | | for (var i = 0; i < gifs.length; i++) |
| /** Table sorting fixes ************************************************
| |
| *
| |
| * Description: Disables code in table sorting routine to set classes on even/odd rows
| |
| * Maintainers: [[User:Random832]]
| |
| */
| |
| ts_alternate_row_colors = false;
| |
| | |
| | |
| /***** uploadwizard_newusers ********
| |
| * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
| |
| *
| |
| * Maintainers: [[User:Krimpet]]
| |
| */
| |
| function uploadwizard_newusers()
| |
| {
| |
| if (mw.config.get('wgNamespaceNumber') == 4 && mw.config.get('wgTitle') == 'Upload' && mw.config.get('wgAction') === 'view')
| |
| { | | { |
| var oldDiv = document.getElementById("autoconfirmedusers"), | | $(gifs[i]).mouseover(swapImage(this.id, true)); |
| newDiv = document.getElementById("newusers");
| | $(gifs[i]).mouseout(swapImage(this.id, false)); |
| if (oldDiv && newDiv)
| |
| {
| |
| if (typeof wgUserGroups == "object" && wgUserGroups)
| |
| {
| |
| for (i = 0; i < wgUserGroups.length; i++)
| |
| {
| |
| if (wgUserGroups[i] == "autoconfirmed")
| |
| {
| |
| oldDiv.style.display = "block";
| |
| newDiv.style.display = "none";
| |
| return;
| |
| }
| |
| }
| |
| }
| |
| oldDiv.style.display = "none";
| |
| newDiv.style.display = "block";
| |
| return;
| |
| }
| |
| } | | } |
| } | | } |
| | | $(initHoverGIFs); |
| $(uploadwizard_newusers); | |
| | |
|
| |
|
| /***** autosort_sortable ******** | | /***** autosort_sortable ******** |
| Line 523: |
Line 241: |
| * Maintainers: [[User:Iritscen]] | | * Maintainers: [[User:Iritscen]] |
| */ | | */ |
|
| |
| // For some reason, the arrow buttons and headerSort classes are not attached to sortable tables immediately upon the "load" event, and we need those, so we wait a bit before trying to sort | | // For some reason, the arrow buttons and headerSort classes are not attached to sortable tables immediately upon the "load" event, and we need those, so we wait a bit before trying to sort |
| function sortTimer() | | function sortTimer() |
| Line 532: |
Line 249: |
| }, (1 * 1000)); | | }, (1 * 1000)); |
| } | | } |
|
| |
| function sortSortableTables() | | function sortSortableTables() |
| { | | { |
| Line 592: |
Line 308: |
| } | | } |
| } | | } |
|
| |
| $(sortTimer); | | $(sortTimer); |