Difference between revisions of "MediaWiki:Common.js"
From Baloogan Campaign Wiki
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | /** | ||
+ | * Collapsible tables | ||
+ | * | ||
+ | * @version 2.0.1 (2013-03-26) | ||
+ | * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js | ||
+ | * @author [[User:R. Koot]] | ||
+ | * @author [[User:Krinkle]] | ||
+ | * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which | ||
+ | * is supported in MediaWiki core. | ||
+ | */ | ||
+ | |||
+ | 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 createClickHandler( tableIndex ) { | ||
+ | return function ( e ) { | ||
+ | e.preventDefault(); | ||
+ | collapseTable( tableIndex ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function createCollapseButtons() { | ||
+ | var tableIndex = 0; | ||
+ | var NavigationBoxes = {}; | ||
+ | var Tables = document.getElementsByTagName( 'table' ); | ||
+ | |||
+ | for ( var i = 0; i < Tables.length; i++ ) { | ||
+ | if ( $( Tables[i] ).hasClass( '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.style.styleFloat = 'right'; | ||
+ | Button.style.cssFloat = 'right'; | ||
+ | Button.style.fontWeight = 'normal'; | ||
+ | Button.style.textAlign = 'right'; | ||
+ | Button.style.width = '6em'; | ||
+ | |||
+ | ButtonLink.style.color = Header.style.color; | ||
+ | ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); | ||
+ | $( ButtonLink ).on( 'click', createClickHandler( 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 ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || | ||
+ | ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) | ||
+ | ) { | ||
+ | collapseTable( i ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $( createCollapseButtons ); | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
/** | /** | ||
Line 480: | Line 579: | ||
jQuery( document ).ready( function( $ ) { | jQuery( document ).ready( function( $ ) { | ||
$(function(){ | $(function(){ | ||
− | + | // $("input[type=text]").autoSuggest("https://wiki.baloogancampaign.com/search.php", { | |
+ | $("input[id=bodySearchInput]").autoSuggest("https://wiki.baloogancampaign.com/search.php", { | ||
resultClick: function(data){ | resultClick: function(data){ | ||
window.location.href = data.attributes.name; | window.location.href = data.attributes.name; |
Latest revision as of 09:31, 17 August 2016
/** * Collapsible tables * * @version 2.0.1 (2013-03-26) * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js * @author [[User:R. Koot]] * @author [[User:Krinkle]] * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which * is supported in MediaWiki core. */ 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 createClickHandler( tableIndex ) { return function ( e ) { e.preventDefault(); collapseTable( tableIndex ); } } function createCollapseButtons() { var tableIndex = 0; var NavigationBoxes = {}; var Tables = document.getElementsByTagName( 'table' ); for ( var i = 0; i < Tables.length; i++ ) { if ( $( Tables[i] ).hasClass( '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.style.styleFloat = 'right'; Button.style.cssFloat = 'right'; Button.style.fontWeight = 'normal'; Button.style.textAlign = 'right'; Button.style.width = '6em'; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); $( ButtonLink ).on( 'click', createClickHandler( 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 ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) { collapseTable( i ); } } } $( createCollapseButtons ); /* Any JavaScript here will be loaded for all users on every page load. */ /** * Dynamic Navigation Bars. See [[Wikipedia:NavFrame]] * * Based on script from en.wikipedia.org, 2008-09-15. * * @source www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js * @maintainer Helder.wiki, 2012–2013 * @maintainer Krinkle, 2013 */ ( function () { // Set up the words in your language var collapseCaption = 'hide'; var expandCaption = 'show'; var navigationBarHide = '[' + collapseCaption + ']'; var navigationBarShow = '[' + expandCaption + ']'; /** * Shows and hides content and picture (if available) of navigation bars. * * @param {number} indexNavigationBar The index of navigation bar to be toggled * @param {jQuery.Event} e Event object */ function toggleNavigationBar( indexNavigationBar, e ) { var navChild, navToggle = document.getElementById( 'NavToggle' + indexNavigationBar ), navFrame = document.getElementById( 'NavFrame' + indexNavigationBar ); // Prevent browser from jumping to href "#" e.preventDefault(); if ( !navFrame || !navToggle ) { return false; } // If shown now if ( navToggle.firstChild.data == navigationBarHide ) { for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) { if ( hasClass( navChild, 'NavPic' ) ) { navChild.style.display = 'none'; } if ( hasClass( navChild, 'NavContent' ) ) { navChild.style.display = 'none'; } } navToggle.firstChild.data = navigationBarShow; // If hidden now } else if ( navToggle.firstChild.data == navigationBarShow ) { for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) { if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) { navChild.style.display = 'block'; } } navToggle.firstChild.data = navigationBarHide; } } /** * Adds show/hide-button to navigation bars. * * @param {jQuery} $content */ function createNavigationBarToggleButton( $content ) { var i, j, navFrame, navToggle, navToggleText, navChild, indexNavigationBar = 0, navFrames = $content.find( 'div.NavFrame' ).toArray(); // Iterate over all (new) nav frames for ( i = 0; i < navFrames.length; i++ ) { navFrame = navFrames[i]; // If found a navigation bar indexNavigationBar++; navToggle = document.createElement( 'a' ); navToggle.className = 'NavToggle'; navToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar ); navToggle.setAttribute( 'href', '#' ); $( navToggle ).on( 'click', $.proxy( toggleNavigationBar, null, indexNavigationBar ) ); navToggleText = document.createTextNode( navigationBarHide ); for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) { if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) { if ( navChild.style.display == 'none' ) { navToggleText = document.createTextNode( navigationBarShow ); break; } } } navToggle.appendChild( navToggleText ); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for ( j = 0; j < navFrame.childNodes.length; j++ ) { if ( $( navFrame.childNodes[j] ).hasClass( 'NavHead' ) ) { navFrame.childNodes[j].appendChild( navToggle ); } } navFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar ); } } mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton ); }()); /* * AutoSuggest * Copyright 2009-2010 Drew Wilson * www.drewwilson.com * code.drewwilson.com/entry/autosuggest-jquery-plugin * * Version 1.4 - Updated: Mar. 23, 2010 * * This Plug-In will auto-complete or auto-suggest completed search queries * for you as you type. You can add multiple selections and remove them on * the fly. It supports keybord navigation (UP + DOWN + RETURN), as well * as multiple AutoSuggest fields on the same page. * * Inspied by the Autocomplete plugin by: Jšrn Zaefferer * and the Facelist plugin by: Ian Tearle (iantearle.com) * * This AutoSuggest jQuery plug-in is dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function($){ $.fn.autoSuggest = function(data, options) { var defaults = { asHtmlID: false, startText: "Database Search...", emptyText: "No Results Found", preFill: {}, limitText: "No More Selections Are Allowed", selectedItemProp: "value", //name of object property selectedValuesProp: "value", //name of object property searchObjProps: "value", //comma separated list of object property names queryParam: "q", retrieveLimit: false, //number for 'limit' param on ajax request extraParams: "", matchCase: false, minChars: 3, keyDelay: 400, resultsHighlight: true, neverSubmit: true, selectionLimit: false, showResultList: true, start: function(){}, selectionClick: function(elem){}, selectionAdded: function(elem){}, selectionRemoved: function(elem){ elem.remove(); }, formatList: false, //callback function beforeRetrieve: function(string){ return string; }, retrieveComplete: function(data){ return data; }, resultClick: function(data){}, resultsComplete: function(){} }; var opts = $.extend(defaults, options); var d_type = "object"; var d_count = 0; if(typeof data == "string") { d_type = "string"; var req_string = data; } else { var org_data = data; for (k in data) if (data.hasOwnProperty(k)) d_count++; } if((d_type == "object" && d_count > 0) || d_type == "string"){ return this.each(function(x){ if(!opts.asHtmlID){ x = x+""+Math.floor(Math.random()*100); //this ensures there will be unique IDs on the page if autoSuggest() is called multiple times var x_id = "as-input-"+x; } else { x = opts.asHtmlID; var x_id = x; } opts.start.call(this); var input = $(this); input.attr("autocomplete","off").addClass("as-input").attr("id",x_id).val(opts.startText); var input_focus = false; // Setup basic elements and render them to the DOM input.wrap('<ul class="as-selections" id="as-selections-'+x+'"></ul>').wrap('<li class="as-original" id="as-original-'+x+'"></li>'); var selections_holder = $("#as-selections-"+x); var org_li = $("#as-original-"+x); var results_holder = $('<div class="as-results" id="as-results-'+x+'"></div>').hide(); var results_ul = $('<ul class="as-list"></ul>'); var values_input = $('<input type="hidden" class="as-values" name="as_values_'+x+'" id="as-values-'+x+'" />'); var prefill_value = ""; if(typeof opts.preFill == "string"){ var vals = opts.preFill.split(","); for(var i=0; i < vals.length; i++){ var v_data = {}; v_data[opts.selectedValuesProp] = vals[i]; if(vals[i] != ""){ add_selected_item(v_data, "000"+i); } } prefill_value = opts.preFill; } else { prefill_value = ""; var prefill_count = 0; for (k in opts.preFill) if (opts.preFill.hasOwnProperty(k)) prefill_count++; if(prefill_count > 0){ for(var i=0; i < prefill_count; i++){ var new_v = opts.preFill[i][opts.selectedValuesProp]; if(new_v == undefined){ new_v = ""; } prefill_value = prefill_value+new_v+","; if(new_v != ""){ add_selected_item(opts.preFill[i], "000"+i); } } } } if(prefill_value != ""){ input.val(""); var lastChar = prefill_value.substring(prefill_value.length-1); if(lastChar != ","){ prefill_value = prefill_value+","; } values_input.val(","+prefill_value); $("li.as-selection-item", selections_holder).addClass("blur").removeClass("selected"); } input.after(values_input); selections_holder.click(function(){ input_focus = true; input.focus(); }).mousedown(function(){ input_focus = false; }).after(results_holder); var timeout = null; var prev = ""; var totalSelections = 0; var tab_press = false; // Handle input field events input.focus(function(){ if($(this).val() == opts.startText && values_input.val() == ""){ $(this).val(""); } else if(input_focus){ $("li.as-selection-item", selections_holder).removeClass("blur"); if($(this).val() != ""){ results_ul.css("width",selections_holder.outerWidth()); results_holder.show(); } } input_focus = true; return true; }).blur(function(){ if($(this).val() == "" && values_input.val() == "" && prefill_value == ""){ $(this).val(opts.startText); } else if(input_focus){ $("li.as-selection-item", selections_holder).addClass("blur").removeClass("selected"); results_holder.hide(); } }).keydown(function(e) { // track last key pressed lastKeyPressCode = e.keyCode; first_focus = false; switch(e.keyCode) { case 38: // up e.preventDefault(); moveSelection("up"); break; case 40: // down e.preventDefault(); moveSelection("down"); break; case 8: // delete if(input.val() == ""){ var last = values_input.val().split(","); last = last[last.length - 2]; selections_holder.children().not(org_li.prev()).removeClass("selected"); if(org_li.prev().hasClass("selected")){ values_input.val(values_input.val().replace(","+last+",",",")); opts.selectionRemoved.call(this, org_li.prev()); } else { opts.selectionClick.call(this, org_li.prev()); org_li.prev().addClass("selected"); } } if(input.val().length == 1){ results_holder.hide(); prev = ""; } if($(":visible",results_holder).length > 0){ if (timeout){ clearTimeout(timeout); } timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); } break; case 9: case 188: // tab or comma tab_press = true; var i_input = input.val().replace(/(,)/g, ""); if(i_input != "" && values_input.val().search(","+i_input+",") < 0 && i_input.length >= opts.minChars){ e.preventDefault(); var n_data = {}; n_data[opts.selectedItemProp] = i_input; n_data[opts.selectedValuesProp] = i_input; var lis = $("li", selections_holder).length; add_selected_item(n_data, "00"+(lis+1)); input.val(""); } case 13: // return tab_press = false; var active = $("li.active:first", results_holder); if(active.length > 0){ active.click(); results_holder.hide(); } if(opts.neverSubmit || active.length > 0){ e.preventDefault(); } break; default: if(opts.showResultList){ if(opts.selectionLimit && $("li.as-selection-item", selections_holder).length >= opts.selectionLimit){ results_ul.html('<li class="as-message">'+opts.limitText+'</li>'); results_holder.show(); } else { if (timeout){ clearTimeout(timeout); } timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); } } break; } }); function keyChange() { // ignore if the following keys are pressed: [del] [shift] [capslock] if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ){ return results_holder.hide(); } var string = input.val().replace(/[\\]+|[\/]+/g,""); if (string == prev) return; prev = string; if (string.length >= opts.minChars) { selections_holder.addClass("loading"); if(d_type == "string"){ var limit = ""; if(opts.retrieveLimit){ limit = "&limit="+encodeURIComponent(opts.retrieveLimit); } if(opts.beforeRetrieve){ string = opts.beforeRetrieve.call(this, string); } $.getJSON(req_string+"?"+opts.queryParam+"="+encodeURIComponent(string)+limit+opts.extraParams, function(data){ d_count = 0; var new_data = opts.retrieveComplete.call(this, data); for (k in new_data) if (new_data.hasOwnProperty(k)) d_count++; processData(new_data, string); }); } else { if(opts.beforeRetrieve){ string = opts.beforeRetrieve.call(this, string); } processData(org_data, string); } } else { selections_holder.removeClass("loading"); results_holder.hide(); } } var num_count = 0; function processData(data, query){ if (!opts.matchCase){ query = query.toLowerCase(); } var matchCount = 0; results_holder.html(results_ul.html("")).hide(); for(var i=0;i<d_count;i++){ var num = i; num_count++; var forward = false; if(opts.searchObjProps == "value") { var str = data[num].value; } else { var str = ""; var names = opts.searchObjProps.split(","); for(var y=0;y<names.length;y++){ var name = $.trim(names[y]); str = str+data[num][name]+" "; } } if(str){ if (!opts.matchCase){ str = str.toLowerCase(); } if(str.search(query) != -1 && values_input.val().search(","+data[num][opts.selectedValuesProp]+",") == -1){ forward = true; } } if(forward){ var formatted = $('<li class="as-result-item" id="as-result-item-'+num+'"></li>').click(function(){ var raw_data = $(this).data("data"); var number = raw_data.num; if($("#as-selection-"+number, selections_holder).length <= 0 && !tab_press){ var data = raw_data.attributes; input.val("").focus(); prev = ""; add_selected_item(data, number); opts.resultClick.call(this, raw_data); results_holder.hide(); } tab_press = false; }).mousedown(function(){ input_focus = false; }).mouseover(function(){ $("li", results_ul).removeClass("active"); $(this).addClass("active"); }).data("data",{attributes: data[num], num: num_count}); var this_data = $.extend({},data[num]); if (!opts.matchCase){ var regx = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + query + ")(?![^<>]*>)(?![^&;]+;)", "gi"); } else { var regx = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + query + ")(?![^<>]*>)(?![^&;]+;)", "g"); } if(opts.resultsHighlight){ this_data[opts.selectedItemProp] = this_data[opts.selectedItemProp].replace(regx,"<em>$1</em>"); } if(!opts.formatList){ formatted = formatted.html(this_data[opts.selectedItemProp]); } else { formatted = opts.formatList.call(this, this_data, formatted); } results_ul.append(formatted); delete this_data; matchCount++; if(opts.retrieveLimit && opts.retrieveLimit == matchCount ){ break; } } } selections_holder.removeClass("loading"); if(matchCount <= 0){ results_ul.html('<li class="as-message">'+opts.emptyText+'</li>'); } results_ul.css("width", selections_holder.outerWidth()); results_holder.show(); opts.resultsComplete.call(this); } function add_selected_item(data, num){ values_input.val(values_input.val()+data[opts.selectedValuesProp]+","); var item = $('<li class="as-selection-item" id="as-selection-'+num+'"></li>').click(function(){ opts.selectionClick.call(this, $(this)); selections_holder.children().removeClass("selected"); $(this).addClass("selected"); }).mousedown(function(){ input_focus = false; }); var close = $('<a class="as-close">×</a>').click(function(){ values_input.val(values_input.val().replace(","+data[opts.selectedValuesProp]+",",",")); opts.selectionRemoved.call(this, item); input_focus = true; input.focus(); return false; }); org_li.before(item.html(data[opts.selectedItemProp]).prepend(close)); opts.selectionAdded.call(this, org_li.prev()); } function moveSelection(direction){ if($(":visible",results_holder).length > 0){ var lis = $("li", results_holder); if(direction == "down"){ var start = lis.eq(0); } else { var start = lis.filter(":last"); } var active = $("li.active:first", results_holder); if(active.length > 0){ if(direction == "down"){ start = active.next(); } else { start = active.prev(); } } lis.removeClass("active"); start.addClass("active"); } } }); } } })(jQuery); jQuery( document ).ready( function( $ ) { $(function(){ // $("input[type=text]").autoSuggest("https://wiki.baloogancampaign.com/search.php", { $("input[id=bodySearchInput]").autoSuggest("https://wiki.baloogancampaign.com/search.php", { resultClick: function(data){ window.location.href = data.attributes.name; // console.log(data); } }); }); $("img").error(function(){ $(this).hide(); }); }); /* Any JavaScript here will be loaded for users using the Vector skin */ function handleClick() { try{ TOGGLEA=(TOGGLEA % 2)}catch(e){ TOGGLEA=0; }; // initialize TOGGLEA, HOLDX, and HOLDY switch(TOGGLEA){ case 0: // this makes it four times as big as it was originally // document.getElementById('baloogan_image').setAttribute('width' ,HOLDX*4); document.getElementById('baloogan_image').className = "baloogan_big_image"; break; case 1: // this sets to a original size // document.getElementById('baloogan_image').setAttribute('width' ,HOLDX); document.getElementById('baloogan_image').className = "baloogan_small_image"; break; } TOGGLEA++; } document.getElementById('baloogan_image').onclick = handleClick;