Участник:Qkowlew/vector.js

Материал из Википедии — свободной энциклопедии
Страница персонального оформления. JS-код ниже относится к теме оформления «Вектор, устаревшая (2010)». CSS-файл для этой темы: Участник:Qkowlew/vector.css.
После сохранения очистите кэш браузера.
if( typeof( wfAnchorEncode ) != "function" ) {
  function wfAnchorEncode(str) {
    str = encodeURIComponent( str );
    str = str.replace( /%/g, "." );
    str = str.replace( /\.20/g, "_" );
    str = str.replace( /\.3A/g, ":" );
    return str;
  }
}

var wgKeepPage = {
  'rq' : null,
  'newtext' : '',
  'talktext' : '',
  'editsummary' : '',
  'edittoken' : '',

  'addKeepTab' : function() {
    if( !document.getElementById( 'request_for_deletion' ) ) return;
	mw.loader.using( 'mediawiki.util', function () {
    	mw.util.addPortletLink( 'p-cactions', 'javascript:wgKeepPage.keepPage()', 'Оставить', 'ca-keep', 'Снять эту страницу с удаления' );
	});
  },

  'onTextDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;

    var pgtext = this.responseText;
    var rfdRegex = /(?:\s*<\s*noinclude\s*>)?\s*\{\{\s*(КУ|К удалению)\s*\|\s*\d{4}-\d{1,2}-\d{1,2}\s*\}\}\s*(?:<\/noinclude>\s*)?/ig;
    var matches = pgtext.match( rfdRegex );
    if( matches === null || matches.length < 1 ) {
      alert( 'Не найдена пометка {{' + 'к удалению}}' );
      return;
    }
    var date = matches[0].match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
    wgKeepPage.newtext = pgtext.replace( rfdRegex, "" );
    wgKeepPage.talktext = "{{оставлено|" + date[0] + "}}\n";
    wgKeepPage.editsummary = 'оставлено согласно \[\[Википедия:К удалению/' + parseInt(date[3]) + ' ' +
                             'января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря'
                             .split('|')[parseInt(date[2])-1] + ' ' + date[1] +
                             '#' + mw.config.get('wgPageName').replace(/_/g, ' ') + ']]';

    var uri = mw.config.get('wgServer') + 
    	mw.config.get('wgScriptPath') + 
    	'/api.php?format=json&action=query&prop=info&intoken=edit&titles=' + 
    	encodeURIComponent( mw.config.get('wgPageName') );
    wgKeepPage.rq.onreadystatechange = wgKeepPage.onTokenDownload;
    wgKeepPage.rq.open( "GET", uri, true );
    wgKeepPage.rq.send( "" );
  },

  'onTokenDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;

    result = JSON.parse(this.responseText);
    wgKeepPage.edittoken = result.query.pages[mw.config.get('wgArticleId')].edittoken;
    if( !wgKeepPage.edittoken ) {
      alert( 'Редактирование невозможно' );
      return;
    }

    var uri = mw.config.get('wgServer') + 
    	mw.config.get('wgScriptPath') + 
    	'/api.php?format=json&action=edit&title=' + 
    	encodeURIComponent( mw.config.get('wgPageName') );
    var rq = "summary=" + encodeURIComponent( wgKeepPage.editsummary ) +
      "&text=" + encodeURIComponent( wgKeepPage.newtext ) +
      "&token=" + encodeURIComponent( wgKeepPage.edittoken );

    wgKeepPage.rq.onreadystatechange = wgKeepPage.onEditSaved;
    wgKeepPage.rq.open( "POST", uri, true );
    wgKeepPage.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgKeepPage.rq.send( rq );
  },

  'onEditSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;

    result = JSON.parse(this.responseText);
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      return;
    }

    var title =  mw.config.get('wgTitle');
    var nsnum = mw.config.get('wgNamespaceNumber');
    switch (nsnum) {
    case 0 :
      title = "Обсуждение:" + title;
      break;
    case 2:
      title = "Обсуждение участника:" + title;
      break;
    case 4:
      title = "Обсуждение Википедии:" + title;
      break;
    case 6:
      title = "Обсуждение файла:" + title;
      break;
    case 10:
      title = "Обсуждение шаблона:" + title;
      break;
    case 14:
      title = "Обсуждение категории:" + title;
      break;
    default:
      mw.util.jsMessage( 'Страница была успешно снята с удаления. <a href="javascript:location.reload()">Перезагрузить страницу</a>');
      return;
    }

    var uri = mw.config.get('wgServer') + 
    	mw.config.get('wgScriptPath') + 
    	'/api.php?format=json&action=edit&title=' + 
    	encodeURIComponent( title );
    var rq = "summary=" + encodeURIComponent( wgKeepPage.editsummary ) +
      "&prependtext=" + encodeURIComponent( wgKeepPage.talktext ) +
      "&token=" + encodeURIComponent( wgKeepPage.edittoken );

    wgKeepPage.rq.onreadystatechange = wgKeepPage.onTalkSaved;
    wgKeepPage.rq.open( "POST", uri, true );
    wgKeepPage.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgKeepPage.rq.send( rq );
  },

  'onTalkSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;

    result = JSON.parse(this.responseText);
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу обсуждения: " + result.error.info );
      return;
    }

    mw.util.jsMessage( 'Страница была успешно снята с удаления; на страницу обсуждения был поставлен шаблон {{' + 'оставлено}}. ' +
      '<a href="javascript:location.reload()">Перезагрузить страницу</a>' );
  },

  'keepPage' : function() {
    var uri = mw.config.get('wgServer') + 
    	mw.config.get('wgScriptPath') + 
    	'/index.php?action=raw&title=' + 
    	encodeURIComponent( mw.config.get('wgPageName') );
    this.rq = new XMLHttpRequest();

    this.rq.onreadystatechange = this.onTextDownload;
    this.rq.open( "GET", uri, true );
    this.rq.send( "" );
  }
};

$( wgKeepPage.addKeepTab );