MediaWiki:Gadget-templatestb.js

Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі

Заўвага: каб пабачыць зьмены пасьля публікацыі, Вам можа спатрэбіцца ачысьціць кэш Вашага браўзэра.

  • Firefox / Safari: трымайце Shift і націсьніце Reload, ці націсьніце Ctrl-F5 ці Ctrl-R (⌘-R на Mac)
  • Google Chrome: націсьніце Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer / Edge: трымайце Ctrl і націсьніце Refresh, ці націсьніце Ctrl-F5
  • Opera: націсьніце Ctrl-F5.
if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) { /* WRAPPER EDIT CONDITION START */

/* messages */
mw.messages.set({
  'templates-chooseTemplate-insert': 'Уставіць',
  'templates-chooseTemplate-title': 'Выбар шаблёну',
  'templates-chooseTemplate-loading': 'Загрузка',
  'templates-toolbar-title': 'Шаблёны',
  'templates-toolbar-label': 'Выбраць шаблён',
  'templates-toolbar-button': 'Выбраць шаблён',
  'templates-syntax-subpage': 'Сынтаксіс', // subpage name
  'templates-error': 'Памылка: шаблён не існуе або не падтрымлівае гэтую магчымасьць.',
  'templates-chooseTemplate-intro': 'Увядзіце ў поле назву шаблёна. Калі ён мае код для капіяваньня, вы зможаце дадаць яго ў код старонкі.'
});

var TemplatesTB = {
  'templatesCache': {},
  'templateName': '',
  'templateCode': ''
};

TemplatesTB.init = function() {
  TemplatesTB.Api = new mw.Api();
  var templatesDialogs = {
      'templates-toolbar-chooseTemplate': {
        'title': mw.msg( 'templates-chooseTemplate-title' ),
        'resizeme': false,
        'id': 'templatestoolbar-chooseTemplate',
        'html': '<div id="templates-chooseTemplate-loading">'+
          '<img src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />'+
          '&nbsp;' + mw.msg( 'templates-chooseTemplate-loading' ) + '</div>',
        'init': function() {},
        'dialog': {
          'width': 550,
          'open': function() {
            TemplatesTB.renderChooseTemplate();
          },
          'buttons': {
            'templates-chooseTemplate-insert': function() {
              var templateName = $( '#templates-chooseTemplate-search' ).val();
              TemplatesTB.probeTemplate( templateName );
            },
            'wikieditor-toolbar-tool-table-cancel': function() {
              $(this).dialog( 'close' );
            }
        }
        }
      }
    };

  var templatesToolbar = {
      'section': 'main',
      'group': 'gadgets',
      'tools': {
        'chooseTemplateButton': {
          'label': mw.msg( 'templates-toolbar-button' ),
          'type': 'button',
          'action': {
            'type': 'dialog',
            'module': 'templates-toolbar-chooseTemplate'
          },
          'icon': '//upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Templatetools.svg/42px-Templatetools.svg.png'
        }
      }
    };

  TemplatesTB.probeTemplate = function( templateName ) {
    TemplatesTB.templateName = templateName;

    // caching
    if( TemplatesTB.templateName in TemplatesTB.templatesCache ) {
      TemplatesTB.templateCode = TemplatesTB.templatesCache[TemplatesTB.templateName];
      TemplatesTB.injectTemplate();

      $('#templatestoolbar-chooseTemplate').dialog( 'close' );
      return;
    }

    TemplatesTB.startLoading();
    
    TemplatesTB.Api.get({
      'action': 'parse',
      'page': mw.config.get( 'wgFormattedNamespaces' )[10] + ':' + TemplatesTB.templateName + '/' + mw.msg( 'templates-syntax-subpage' ),
      'redirects': '',
      'prop': 'wikitext'
    })
    .done( function( data ) {
      TemplatesTB.stopLoading();

      TemplatesTB.templateCode = $(data.parse.wikitext['*']).text();
      TemplatesTB.templatesCache[TemplatesTB.templateName] = TemplatesTB.templateCode;
      TemplatesTB.injectTemplate();

      $('#templatestoolbar-chooseTemplate').dialog( 'close' );
    } )
    .fail( function ( error ) {
      TemplatesTB.stopLoading();
      TemplatesTB.showError( mw.msg( 'templates-error' ) );
    } );
  }

  TemplatesTB.injectTemplate = function() {
    var editorContents = $( '#wpTextbox1' ).val();
    var caretPosition = $( '#wpTextbox1' ).prop( 'selectionStart' );
    editorContents = editorContents.substr( 0, caretPosition ).concat( TemplatesTB.templateCode, editorContents.substr( caretPosition )  );
    $( '#wpTextbox1' ).val( editorContents );
  }

  TemplatesTB.renderChooseTemplate = function() {
    var form = $( '<div />' );
    $( '#templatestoolbar-chooseTemplate' ).html( form );
    form.html( mw.msg( 'templates-chooseTemplate-intro' ) );
    form.after( '<div id="templates-chooseTemplate-form" />');
    $( '#templates-chooseTemplate-form' )
      .append( '<input id="templates-chooseTemplate-search" />' )
      .append( '<img id="templates-chooseTemplate-form-loading" src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />' );
    $( '#templates-chooseTemplate-form' )
      .append( '<span id="templates-chooseTemplate-form-message"></span>');

    $( '#templates-chooseTemplate-search' ).attr( 'autofocus', true );

    $( '#templates-chooseTemplate-form-loading, #templates-chooseTemplate-form-message' ).hide();
  }

  $( '#wpTextbox1' ).wikiEditor( 'addDialog', templatesDialogs );
  $( '#wpTextbox1' ).wikiEditor( 'addToToolbar', templatesToolbar );

  TemplatesTB.startLoading = function() {
    $( '#templates-chooseTemplate-form-loading' ).show();
    $( '#templates-chooseTemplate-form-message' ).hide();
  }

  TemplatesTB.stopLoading = function() {
    $( '#templates-chooseTemplate-form-loading' ).hide();
  }

  TemplatesTB.showError = function( message ) {
    $( '#templates-chooseTemplate-form-message' ).text( message ).show();
  }
}

$('#wpTextbox1').on('wikiEditor-toolbar-buildGroup-gadgets', function(event) {
  mw.loader.using(['ext.wikiEditor', 'jquery.ui', 'mediawiki.api'], function(){
    TemplatesTB.init();
  });
});

} /* WRAPPER EDIT CONDITION END */