跳转至内容

MediaWiki:Common.js

来自维客旅行

注意: 发布后,您可能需要绕过浏览器的缓存才能看到更改。

  • Firefox / Safari: 按住 Shift 键的同时点击 重新加载,或者按下 Ctrl-F5Ctrl-R (Mac 上的 ⌘-R)
  • Google Chrome: 按下 Ctrl-Shift-R (Mac 上的 ⌘-Shift-R)
  • Edge: 按住 Ctrl 键的同时点击 刷新,或者按下 Ctrl-F5
/**
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
 * loaded for all users on every wiki page. If possible create a gadget that is
 * enabled by default instead of adding it here (since gadgets are fully.
 * optimized ResourceLoader modules with possibility to add dependencies etc.)
 *
 * Since Common.js isn't a gadget, there is no place to declare its
 * dependencies, remember to wrap snippets in a mw.loader.using callback
 * as needed. In most cases these dependencies will already be loaded (or loading)
 * and the callback will not be delayed.
 */

/* global mw, $, importStylesheet, importScript */
/* jshint strict:false, browser:true */

/*
* rwdImageMaps jQuery plugin v1.4
*
* Allows image maps to be used in a responsive design by recalculating the area coordinates to match the actual image size on load and window.resize
*
* Copyright (c) 2012 Matt Stow
* https://github.com/stowball/jQuery-rwdImageMaps
* http://mattstow.com
* Licensed under the MIT license
*/
;(function(a){a.fn.rwdImageMaps=function(){var d=this,c=parseFloat(a.fn.jquery);var b=function(){d.each(function(){if(typeof(a(this).attr("usemap"))=="undefined"){return}var f=this,e=a(f);a("<img />").on('load',function(){var o,k,i="width",n="height";if(c<1.6){o=f.getAttribute(i),k=f.getAttribute(n)}else{o=e.attr(i),k=e.attr(n)}if(!o||!k){var p=new Image();p.src=e.attr("src");if(!o){o=p.width}if(!k){k=p.height}}var g=e.width()/100,l=e.height()/100,j=e.attr("usemap").replace("#",""),m="coords";a('map[name="'+j+'"]').find("area").each(function(){var s=a(this);if(!s.data(m)){s.data(m,s.attr(m))}var r=s.data(m).split(","),q=new Array(r.length);for(var h=0;h<q.length;++h){if(h%2===0){q[h]=parseInt(((r[h]/o)*100)*g)}else{q[h]=parseInt(((r[h]/k)*100)*l)}}s.attr(m,q.toString())})}).attr("src",e.attr("src"))})};a(window).resize(b).trigger("resize");return this}})(jQuery);

// This method will resize elements that have a class name of "js-proportional-resize" by
// changing the font-size (%) based on a viewing area width of 900px being the baseline,
// i.e. 450px width=font size 50%, 900px width=font size 100%, 1800px width=font size 200%.
function proportionalResize() {
  var EXPECTED_PAGE_WIDTH = 900.00;
  $('.js-proportonal-resize').each(function() {
    var fontSizeCss= (($(this).width() / EXPECTED_PAGE_WIDTH) * 100.00) + '%';
    $(this).css("font-size", fontSizeCss);
  });
}

$(document).ready(function(e) {
  $('img[usemap]').rwdImageMaps();
  proportionalResize();
});
$(window).on('load', function() {
  // the main page carousel text boxes aren't being initialized to the
  // correct size on IE, so add a second resize post-DOM-ready
  proportionalResize();
});
$(window).resize(function(e) {
  proportionalResize();
});

// Add listing buttons in edit toolbar
var customizeToolbar = function( $textarea ) {
  $textarea.wikiEditor( 'removeFromToolbar', {
    section: 'main',
    group: 'insert',
    tool: 'reference'
  });

  $textarea.wikiEditor( 'addToToolbar', {
    section: 'main',
      groups: {
        'listings': {
          label: 'Listings'
        }
    }
  } );

  function currentLastEditDate() {
      // return the date as "2015-01-15"
      var d = new Date();
      var year = d.getFullYear();
      // Date.getMonth() returns 0-11
      var month = d.getMonth() + 1;
      if (month < 10) month = '0' + month;
      var day = d.getDate();
      if (day < 10) day = '0' + day;
      return year + '-' + month + '-' + day;
  }

  var CURRENT_LAST_EDIT_DATE = currentLastEditDate();
  var LISTING_TOOLBAR_ITEMS = {
    'see': {
        label: 'See listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/b/b7/Italian_traffic_signs_-_icona_museo.svg/22px-Italian_traffic_signs_-_icona_museo.svg.png',
        options: {
            pre: '* \{\{see\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'do': {
        label: 'Do listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/3/30/Pictograms-nps-bicycle_trail-2.svg/22px-Pictograms-nps-bicycle_trail-2.svg.png',
        options: {
            pre: '* \{\{do\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'buy': {
        label: 'Buy listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Italian_traffic_signs_-_icona_supermercato.svg/22px-Italian_traffic_signs_-_icona_supermercato.svg.png',
        options: {
            pre: '* \{\{buy\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'eat': {
        label: 'Eat listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Italian_traffic_signs_-_icona_ristorante.svg/22px-Italian_traffic_signs_-_icona_ristorante.svg.png',
        options: {
            pre: '* \{\{eat\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'drink': {
        label: 'Drink listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Verre_cocktail.svg/22px-Verre_cocktail.svg.png',
        options: {
            pre: '* \{\{drink\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'sleep': {
        label: 'Sleep listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/2/25/Pictograms-nps-lodging.svg/22px-Pictograms-nps-lodging.svg.png',
        options: {
            pre: '* \{\{sleep\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree= | fax=\n| checkin= | checkout= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'go': {
        label: 'Go listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Pictograms-nps-airport.svg/22px-Pictograms-nps-airport.svg.png',
        options: {
            pre: '* \{\{go\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    },
    'listing': {
        label: 'Other listing', // or use labelMsg for a localized label, see above
        icon: '//upload.wikimedia.org/wikipedia/commons/thumb/f/f5/Italian_traffic_signs_-_icona_informazioni_%28figura_II_108%29.svg/22px-Italian_traffic_signs_-_icona_informazioni_%28figura_II_108%29.svg.png',
        options: {
            pre: '* \{\{listing\n| name=',
            post: ' | alt= | url= | email=\n| address= | lat= | long= | directions=\n| phone= | tollfree=\n| hours= | price=\n| wikidata=\n| lastedit=' + CURRENT_LAST_EDIT_DATE + '\n| content=\n}}' // text to be inserted
        }
    }
  };

  $.each(LISTING_TOOLBAR_ITEMS, function(index, element) {
    $textarea.wikiEditor( 'addToToolbar', {
      section: 'main',
      group: 'listings',
      tools: {
        'Listings': {
          label: element.label,
          type: 'button',
          icon: element.icon,
          action: {
          type: 'encapsulate',
            options: element.options
          }
        }
      }
    } );
  });
};

// https://www.mediawiki.org/wiki/Extension:WikiEditor/Toolbar_customization
// Check if view is in edit mode and that the required modules are available.
// Then, customize the toolbar
mw.hook( 'wikiEditor.toolbarReady' ).add( customizeToolbar );

// watchlist scripts
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
  importScript( 'MediaWiki:Common.js/watchlist.js' );
}

// Include [[Template:GPX indicator]] on all pages, but only make it visible if there are geo listings.
var hasListing = $('.geo, #GPX-track').length;
if (hasListing) {
  $('#mw-indicator-GPX').css('display','inline-block');
}
© 2026 wikivoyage.cn. Text is available under the CC BY-SA 4.0 License.