MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
>HexUseMe No edit summary |
(discord loader) |
||
Line 393: | Line 393: | ||
} | } | ||
]; | ]; | ||
mediaWiki.loader.load('/wiki/MediaWiki:DiscordIntegrator/code.js?action=raw&ctype=text/javascript'); |
Latest revision as of 08:23, 12 October 2022
/** * Full credit goes to http://runescape.wikia.com/wiki/MediaWiki:Common.js/compare.js */ /*jshint multistr:true, strict:false */ /*global mw:true, $:true */ $( '.cioCompareLink' ).each( function () { var props = ( $( this ).attr( 'title' ) || '').split( '|' ), linkText = (props[0] !== '') ? props[0] : 'Compare items', items = (props.length >= 2) ? props.slice(1) : [ mw.config.get( 'wgPageName' ) ], $link = $( '<a>' ).attr( { href: '#', title: 'Compare this item with other items.' } ).click( function ( e ) { // I'm like 90% sure if you don't specify a href attribute, you don't need a preventDefault e.preventDefault(); cioOpen( items ); } ).text( linkText ); $( this ).empty().append( $link ); }); // @todo upload these to the wiki var $cioImgDelete = $( '<img>' ).attr( { src: 'http://img200.imageshack.us/img200/7898/transdelrow.png', width: 14, height: 13, alt: '[X]' } ), $cioImgLoading = $( '<img>' ).attr( { src: mw.config.get( 'stylepath' ) + '/common/progress-wheel.gif', width: 16, height: 16, alt: '...' } ), $cioImgError = $( '<img>' ).attr( { src: 'http://img12.imageshack.us/img12/508/1248624996error.png', width: 16, height: 16, alt: '!!' } ); /** Open the compare items overlay */ function cioOpen( items ) { // Darken the page if ( !$( '#overlay' ).length ) { $( '<div>' ).attr( 'id', 'overlay' ) .appendTo( 'body' ) .show() .unbind( 'click' ) .click( cioClose ); } else { $( '#overlay' ).show() .unbind( 'click' ) .click( cioClose ); } $( document ).keydown( function ( e ) { if (e.which == 27) { cioClose(); } } ); // Build the initial table var html = ' \ <div id="cioTitle"> \ <div id="modalClose" onclick="cioClose();" title="Close this overlay."><img src="http://img693.imageshack.us/img693/9906/closes.png" width="48" height="24" alt="[X]" /></div> \ Compare Items \ </div> \ <form name="cioCompare" id="cioCompare" onsubmit="cioSubmit(this.cioItem.value); return false;" action="#"> \ <table> \ <tr> \ <td><label for="cioItem">Compare <b>' + mw.config.get( 'wgTitle' ) + '</b> with:</label></td> \ <td><input type="input" type="text" name="cioItem" id="cioItem" value="" /> <input type="submit" value="Add" /></td> \ </tr> \ <tr> \ <td> </td> \ <td id="cioStatus"></td> \ </tr> \ </table> \ </form> \ <table class="wikitable" id="cioItems"> \ <thead> \ <tr> \ <th rowspan="2">Name</th> \ <th colspan="3">Mainhand Info</th> \ <th colspan="3">Offhand Info</th> \ <th colspan="3">Attributes</th> \ <th colspan="3"><span style="font-size:80%">Critical Bonuses</span></th> \ <th width="30">Speed</th> \ <th width="30">Weight</th> \ <th width="30">GE</th> \ </tr> \ <tr> \ <th width="35">Style</th> \ <th width="35"><span style="font-size:80%">Damage</span></th> \ <th width="35"><span style="font-size:80%">Accuracy</span></th> \ <th width="35">Style</th> \ <th width="35"><span style="font-size:80%">Damage</span></th> \ <th width="35"><span style="font-size:80%">Accuracy</span></th> \ <th width="35" title="Armour rating"><img src="https://images.wikia.nocookie.net/runescape/images/thumb/d/d8/Defence-icon.png/18px-Defence-icon.png"" alt="Arm" /></th> \ <th width="35" title="Life bonus"><img src="https://images.wikia.nocookie.net/runescape/images/thumb/1/1d/Constitution-icon.png/21px-Constitution-icon.png" alt="Lif" /></th> \ <th width="35" title="Prayer bonus"><img src="https://images.wikia.nocookie.net/runescape/images/2/24/Prayer-icon.png" width="20" height="20" alt="Pra" /></th> \ <th width="35" title="Melee critical"><img src="https://images.wikia.nocookie.net/runescape/images/9/90/Stab_Attack_Style.png" width="11" height="20" alt="Dam" /></th> \ <th width="35" title="Ranged critical"><img src="https://images.wikia.nocookie.net/runescape/images/7/72/Ranged-icon.png" width="20" height="20" alt="Rng" /></th> \ <th width="35" title="Magic critical"><img src="https://images.wikia.nocookie.net/runescape/images/7/77/Magic-icon.png" width="20" height="19" alt="Mag" /></th> \ <th title="Speed"><img src="https://images.wikia.nocookie.net/runescape/images/a/a9/Energy.png" width="17" height="20" alt="Spd" /></th> \ <th title="Weight (kg)"><img src="https://images.wikia.nocookie.net/runescape/images/f/fc/Weight-icon.png" width="20" height="20" alt="Wgt" /></th> \ <th title="Grand Exchange Price"><img src="https://images.wikia.nocookie.net/runescape/images/6/65/Coins_25.png" width="20" height="15" alt="GE" /></th> \ </tr> \ </thead> \ <tbody> \ <tr id="cioTotals"> \ </tr> \ </tbody> \ </table>'; // Create the modal box $('<div />').html(html).attr('id', 'modal').appendTo('body'); // Center $('#modal').css('left', $(window).width() / 2 - ($('#modal').width() / 2)); //os_enableSuggestionsOn('cioItem', 'cioCompare'); // Initial item(s) // TODO: Fold multiple item calls into one API query for (var i = 0; i < items.length && i < 5; i++) { cioSubmit(items[i]); } } //Switch Infobox if ($('.switch-infobox').length) { // importScriptPage('User:-Matt/SwitchInfobox.js', 'runescape'); // importStylesheetPage('User:-Matt/SwitchInfobox.css', 'runescape'); } /** Close the overlay. */ function cioClose() { //os_disableSuggestionsOn('cioItem'); $('#modal').fadeOut('normal', function () { $('#modal').remove(); $('#overlay').hide(); }); $(document).unbind('keydown'); } /** Submit an AJAX request to add a new item */ function cioSubmit(itemName) { // http://www.mredkj.com/javascript/numberFormat.html#addcommas function addCommas(nStr) { nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } /** Calculate bonus totals */ function calcTotals() { var totals = []; for (var i = 0; i < 15; i++) { totals[i] = 0; } // Iterate over each row and col $('#cioItems tbody tr').not('#cioTotals').each(function() { var i = 0; $(this).children('td').each(function() { var num = $(this).text().replace(/,/g, ''); totals[i++] += (isNaN(num) ? 0 : parseInt(num)); }); }); $('#cioTotals').empty().append($('<th />').text('Total')); for (var i in totals) { // Don't total weapon speeds $('#cioTotals').append(format((/(1?2|5)/.test(i)) ? null : (addCommas(totals[i]) + ''))); } } /** Format a template number and return a (jQuery) table cell */ function format(str) { if (str == null || /no|^\s*<!--.*-->\s$/i.test(str)) { return $('<td />').attr('class', 'cioEmpty').text('--'); } else { // Prepend + sign to numbers without any sign str = str.replace(/<!--.*?-->/g); //remove comments if (/\d/.test(str.substring(0, 1))) { str = '+' + str; } if(/\w/.test(str.substring(0, 1))) return $('<td />').text(str); else return $('<td />').attr('class', (str.substring(0, 1) == '-') ? 'cioNeg' : 'cioPos').text(str); } } /** Parse the parameters in a given template. */ function parseTemplate(text, tpl) { tpl = tpl.replace(/[_ ]/g, '[_ ]'); var re = new RegExp('{{\\s*(template:)?' + tpl + '\\s*\\|([\\w\\W]+?[^!])}}', 'gi'); var data = []; var match; while (match = re.exec(text)) { var params = match[2].split('|'); var j = 1; // Unnamed parameter index var tplData = []; for (var k in params) { var t = params[k].split('='); var name = null; var value = null; if (t.length == 1) { // Unnamed params name = (j++) + ''; // Cast to string value = t[0]; } else { name = t[0]; value = t[1]; } tplData[$.trim(name)] = $.trim(value); } data.push(tplData); } return data; } /** Error message */ function showError( str ) { $( '#cioStatus' ).empty() .attr( 'class', 'cioError' ) .append( $cioImgError.clone() ) .append( ' ' + str ); } /** Ajax error handler */ function ajaxError( xhr, error ) { showError( 'Error: ' + error ); } /** Ajax success handler */ function ajaxSuccess( data ) { // @todo Handle error messages from the API // List of template params to display within each column. var bonusCols = [ 'astab', 'aslash', 'acrush', 'amagic', 'arange', 'dstab', 'dslash', 'dcrush', 'dmagic', 'drange', 'slot', 'str', 'prayer', ]; var pages = data.query.pages, exchangePageId = null, pageId = null; for ( var i in pages ) { if ( pages[i].ns == '112' ) { exchangePageId = pages[i].pageid; } else { pageId = pages[i].pageid; } } if ( pageId == null ) { showError( 'Could not find that item.' ); } else { var page = data.query.pages[pageId], exchangePage = data.query.pages[exchangePageId], pageTitle = page.title, pageContent = page.revisions[0]['*'], bonusData = parseTemplate(pageContent, 'infobox bonuses'), itemData = parseTemplate(pageContent, 'infobox item'), exchangeData = []; if ( exchangePage ) { var exchangeContent = exchangePage.revisions[0]['*'].replace( '{{{View}}}', '' ); exchangeData = parseTemplate( exchangeContent, 'exchangeitem' ); } for ( var i in bonusData ) { var $row = $( '<tr>' ), $th = $( '<th>' ), $delLink = $( '<a>' ).attr( { href: '#', title: 'Remove this row.' } ).click( function () { $( this ).closest( 'tr' ).fadeOut( 'slow', function () { $( this ).remove(); calcTotals(); } ); } ), $itemLink = $( '<a>' ).attr( { href: mw.config.get( 'wgArticlePath' ).replace( '$1', encodeURI( pageTitle ) ), title: pageTitle } ).text( pageTitle ); $delLink.append( $cioImgDelete.clone() ); $th.append( $delLink ) .append( ' ' ) .append( $itemLink ); $row.append( $th ); for (var j in bonusCols) { $row.append( format( bonusData[i][bonusCols[j]] ) ); } $row.append( format( itemData.length ? itemData[0]['weight'] : null ) ); $row.append( format( exchangeData.length ? exchangeData[0]['Price'] : null ) ); $( '#cioTotals' ).before( $row ); } if ( !bonusData.length ) { showError( 'No bonus data found for the item.' ); } else { calcTotals(); $( '#cioStatus' ).empty(); } } } $( '#cioStatus' ).empty() .attr( 'class', 'cioLoading' ) .append( $cioImgLoading.clone() ) .append( ' Loading...' ); $.ajax( { data: { 'action': 'query', 'prop': 'revisions', 'titles': itemName + '|Exchange:' + itemName, 'rvprop': 'content', 'redirects': '', 'format': 'json' }, dataType: 'json', success: ajaxSuccess, error: ajaxError, url: mw.config.get( 'wgScriptPath' ) + '/api.php', timeout: 10000 // millisec }); } window.InactiveUsers = { months: 1 }; /* Any JavaScript here will be loaded for all users on every page load. */ var tooltips_config = { waitForImages: true, noCSS: true, }; var tooltips_list = [ { classname: 'unit-tooltip', parse: '{'+'{<#unit#>|rank=<#rank#>|size=<#size#>|upgrade=<#upgrade#>|upgrades=<#upgrades#>|upgraded=<#upgraded#>|race=<#race#>|tt=<#tt#>|show=no}}', //onShow: function() { if ((this).getElementsByClassName('template-unit')[0]) {Unit = (this).getElementsByClassName('template-unit')[0]; console.info("Onshow var =",Unit); processunit (Unit);} }, }, { classname: 'spell-tooltip', parse: '{'+'{<#spell#>|magnitude=<#magnitude#>|tt=<#tt#>}}', }, { classname: 'ability-tooltip', parse: '{'+'{<#ability#>|<#magnitude#>|duration=<#duration#>|tt=<#tt#>|show=no}}', }, { classname: 'structure-tooltip', parse: '{'+'{<#structure#>}}', }, { classname: 'building-tooltip', parse: '{'+'{<#building#>}}', }, { classname: 'damageability-tooltip', parse: '{'+'{<#ability#>|physical=<#physical#>|spirit=<#spirit#>|blight=<#blight#>|fire=<#fire#>|frost=<#frost#>|shock=<#shock#>|tt=<#tt#>|show=no}}', onShow: function(handle) { a = handle; writeloc = (this).getElementsByClassName('writedamage')[0]; damagesource = a.parentElement; unitloc = damagesource.parentElement.parentElement; damageCalc (writeloc, damagesource, unitloc); }, }, { classname: 'protection-tooltip', parse: '{'+'{Prottable|<#magnitude#>|<#element#>}}', }, { classname: 'weakness-tooltip', parse: '{'+'{Weaktable|<#magnitude#>|<#element#>}}', }, { classname: 'Pernix/Hover', parse: '{'+'{Weaktable|<#magnitude#>|<#element#>}}', } ]; mediaWiki.loader.load('/wiki/MediaWiki:DiscordIntegrator/code.js?action=raw&ctype=text/javascript');