MediaWiki:Common.js/edit.js

Википедия — эркин энциклопедияны бети.

Эслегиз: Бетде сакъланнгандан сора тюрлендириуле кёрюнюрча браузеригизни кэшин ариулатыргъа керек болургъа боллукъду.

  • Firefox / Safari: Shift тиекни басыб тургъанлай адырланы панелинде Джангырт тиекни басыгъыз, неда Ctrl-F5 басыгъыз, неда Ctrl-R (Mac-да — ⌘-Shift-R)
  • Google Chrome: Ctrl-Shift-R басыгъыз (Mac-да — ⌘-Shift-R)
  • Internet Explorer / Edge: Ctrl тиекни басыб тургъанлай Джангырт тиекни басыгъыз, неда Ctrl-F5 басыгъыз
  • Opera: Ctrl-F5 басыгъыз.
/* Any JavaScript here will be loaded for all users on every page load. */
/**
 * Applications spécifiques à la page d'édition.
 *
 * Todo : migrer celles qui ne sont pas vitales dans les gadgets
 *
 * <nowiki>
 */

/**
 * Désactiver le bouton Sauvegarder à la première édition
 * English : Force IP to preview before saving changes.
 * Copyright Marc Mongenet, 2006
 * Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners
 */
function forcePreview() {
  if (mw.config.get('wgUserName') != null || mw.config.get('wgAction') != "edit") return;
  var saveButton = document.getElementById("wpSave");
  if (!saveButton) return;
  saveButton.disabled = true;
  saveButton.value = "Регистрациясыз (ал къараудан сора)";
  saveButton.style.fontWeight = "normal";
  document.getElementById("wpPreview").style.fontWeight = "bold";
}
$(forcePreview);

/**
 * Fonctions de remplissage automatique
 */

function InitIaA(page_name) {
  return "<!-- Enregistrer la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Amélioration image}}";
}

function InitArbReq(page_name) {
  return "<!-- Ne pas indexer la page par les robots -->\n" +
         "__NOINDEX__ \n" +
         "<!-- Enregistrer la page pour l'initialiser puis suivre les instructions -->\n" +
         "{{subst:Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}\n" +
         "<!-- N'oubliez pas d'ajouter un lien vers cette page sur [[Wikipédia:Comité d'arbitrage/Arbitrage]] -->";
}

function InitDiscArbReq(page_name) {
  return "<!-- Ne pas indexer la page par les robots -->\n" +
         "__NOINDEX__ \n" +
         "<!-- Enregistrer la page pour l'initialiser -->\n" +
         "{{subst:Discussion Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}";
}

function InitPL(page_name) {
  return "<!-- Remplir les paramètres mois et année à la sous page correspondante, et créer les liens rouges -->\n" +
         "{{Portail:Littérature/Invitation à la lecture/Sélection/Modèle \n" +
         "| mois = \n" +
         "| année = \n" +
         "}} \n" +
         "<noinclude>{{Portail:Littérature/Invitation à la lecture/Sélection/Modèle inclusion \n" +
         "| mois = \n" +
         "| année = \n" +
         "}} \n" +
         "</noinclude>";
}

var init_if_empty = new Array(
new Array('Discussion_Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitDiscArbReq),
new Array('Wikipédia:Comité_d\'arbitrage/Arbitrage/', InitArbReq),
new Array('Portail:Littérature/Invitation_à_la_lecture/Sélection/', InitPL)
);

/**
 * Remplit la zone d'édition si elle est vide avec le texte retourné par
 * un pointeur de fonction sélectionné par le nom de la page.
 */
function InitPage() {
  // Tester si editform et wpTextbox1 existe sinon il y a une erreur lorsqu'on
  // ouvre l'historique d'une page qui match un des noms de init_if_empty[],
  // tester seulement le nom de la page n'est pas suffisant.
  if (document.editform == undefined || document.editform.wpTextbox1 == undefined) return;
  var text_area = document.editform.wpTextbox1;
  if (text_area.value.length != 0) return;
  for (var i = 0; i < init_if_empty.length; ++i) {
    var page_match = init_if_empty[i][0];
    var index = mw.config.get('wgPageName').indexOf(page_match);
    if (index == 0) {
      var page_name = mw.config.get('wgPageName').slice(page_match.length);
      page_name = page_name.replace(/_/g, ' ');
      text_area.value = init_if_empty[i][1](page_name);
      break;
    }
  }
}
$(InitPage);


/**
 * Caractères spéciaux
 *
 * Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux.
 * Ecrit par Zelda, voir sur [[Utilisateur:Zelda/Edittools.js]].
 * Remplace l'ancienne fonction par une variante plus rapide.
 */

/**
 * Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux
 * Les caractères spéciaux sont définis dans Mediawiki:Edittools
 */
function addCharSubsetMenu() {
  var specialchars = document.getElementById('specialcharsets');
  if (!specialchars) return;

  // Construction du menu de selection
  var charSubsetSelect = document.createElement("select");
  charSubsetSelect.setAttribute("style", "display:inline");
  charSubsetSelect.onchange = function () { chooseCharSubset(this.selectedIndex); };

  // Ajout des options au menu
  var p = document.getElementById('specialcharsets').getElementsByTagName('p');
  for (var i = 0; i < p.length ; i++) {
    var opt = document.createElement("option");
    var txt = document.createTextNode(p[i].title);
    opt.appendChild(txt);
    charSubsetSelect.appendChild(opt);
  }

  specialchars.insertBefore(charSubsetSelect, specialchars.childNodes[0]);

  /* default subset - try to use a cookie some day */
  chooseCharSubset(0);
}

/**
 * Affichage du jeu de caractères sélectionné
 */
function chooseCharSubset(index) {
  var p = document.getElementById('specialcharsets').getElementsByTagName('p');
  for (var i = 0; i < p.length ; i++) {
    // Initialisation du jeu de caractères sélectionné
    if (i == index) {
    	initializeCharSubset(p[i]);
    }
    // Affichage du jeu sélectionné, masquage des autres
    p[i].style.display = i == index ? 'inline' : 'none';
    p[i].style.visibility = i == index ? 'visible' : 'hidden';
  }
}

/**
 * Initialisation du jeu de caractères sélectionné
 * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les
 * caractères contenus dans les sous-spans du paragraphe
 */
function initializeCharSubset(p) {
  // recherche des sous-elements de type span à traiter
  var spans = p.getElementsByTagName("span");
  if (!spans) return;

  // regexp pour echapper les caractères JS spéciaux : \ et '
  var re = new RegExp("(\\\\|')", "g");
  // gestion du caractère d'échappement '\'
  var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g");
  var unescapeRe = new RegExp("\\\\\\\\", "g");

  // traitement des spans du paragraphe
  for (var j = 0; j < spans.length; j++) {
    // span deja traité
    if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue;

    // On parse le contenu du span
    var chars = spans[j].childNodes[0].nodeValue.split(" ");
    for (var k = 0; k < chars.length; k++) {
      var a = document.createElement("a");
      var tags = chars[k];
      tags = tags.replace(/%27/g, "'").replace(/%5C/g, "\\");

      // regroupement des mots se terminant par un espace protégé par un \
      while (k < chars.length && chars[k].match(escapeRe)) {
      	k++;
	tags = tags.substr(0, tags.length - 1) + " " + chars[k];
      }

      // création du lien insertTag(tagBegin, tagEnd, defaultValue) en protegeant les caractères JS \ et '
      tags = (tags.replace(unescapeRe, "\\")).split("+");
      var tagBegin = tags[0].replace(re, "\\$1");
      var tagEnd = tags.length > 1 ? tags[1].replace(re, "\\$1") : "";
      var defaultValue = tags.length > 2 ? tags[2].replace(re, "\\$1") : "";
      a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')";
      //a.href="#";
      //eval("a.onclick = function() { insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "'); return false; }");

      a.appendChild(document.createTextNode((tagBegin + tagEnd).replace(unescapeRe, "\\")));
      spans[j].appendChild(a);
      spans[j].appendChild(document.createTextNode(" "));
    }
    // suppression de l'ancien contenu
    spans[j].removeChild(spans[j].firstChild);
  }
}
$(addCharSubsetMenu);

/**
 * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
 * paramètres :
 * - nom du jeu de caractères
 * - contenu HTML. Les caractères spéciaux doivent être dans des spans
 *   exemple : "caractères : <span>â ê î ô û</span>"
 */
function addSpecialCharsetHTML(title, charsHTML) {
  var specialchars = document.getElementById('specialcharsets');
  if (!specialchars) return;

  // Ajout des caractères spéciaux. Les liens seront initialisé par initializeCharSubset()
  // lors de la sélection
  var specialcharsets = document.getElementById('specialcharsets');
  var p = document.createElement("p");
  p.style.display = "none";
  p.title = title;
  p.innerHTML = charsHTML;
  specialcharsets.appendChild(p);
}

/**
 * Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
 * paramètres :
 * - nom du jeu de caractères
 * - caractères spéciaux
 * exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û");
 */
function addSpecialCharset(title, chars) {
  addSpecialCharsetHTML(title, "<span>" + chars + "</span>");
}

// TODO : les fonctions de génération de tableaux devraient être migrées vers le gadget BoutonPlus, après s'être assuré qu'elles ne sont pas utilisées ailleurs

/**
 * Générateur de tableaux
 * English: Generate an array using Mediawiki syntax
 *
 * @author: fr:user:dake
 * @version: 0.2
 */

function generateTableau(nbCol, nbRow, styleHeader, styleLine) {
  var classe = (styleHeader==1)
    ? ((styleLine==1) ? 'wikitable alternance' : 'wikitable')
    : ((styleLine==1) ? 'alternance' : '');

  var code = "\n{| " +
    ((classe!='') ? 'class="'+classe+'"' : '')+
    '\n|+ Titre du tableau\n';

  for (var i=0; i<nbCol; i++) code += '! en-tête ' + i + '\n';

  for (var j=0; j<nbRow; j++) {
    code += '|-----\n';

    for (var i=0; i<nbCol; i++) code += '| élément\n';
  }

  code += '|}';
  insertTags('','', code);
}

/**
 * English: Open a popup with parameters to generate an array.
 * The number of rows/columns can be modified. Some additional
 * parameters are related to templates available on :fr
 *
 * @author: fr:user:dake
 * @version: 0.1
 */

function popupTableau() {
  var popup = window.open('','name','height=400,width=500');

  var javaCode = '<script type="text\/javascript">function insertCode(){';
  javaCode += 'var row = parseInt(document.paramForm.inputRow.value); ';
  javaCode += 'var col = parseInt(document.paramForm.inputCol.value); ';
  javaCode += 'var styleHeader = document.paramForm.inputHeader.checked; ';
  javaCode += 'var styleLine = document.paramForm.inputLine.checked; ';
  javaCode += 'window.opener.generateTableau(col,row,styleHeader,styleLine); ';
  javaCode += '}<\/script>';

  popup.document.write('<html><head><title>Paramètres du tableau</title>');
  popup.document.write(javaCode);
  popup.document.write('</head><body>');
  popup.document.write('<p>Veuillez entrer les paramètres du tableau : </p>');
  popup.document.write('<form name="paramForm">');
  popup.document.write('<label for="popuptableau-inputrow">Nombre de lignes :</label> <input type="text" name="inputRow" value="3" id="popuptableau-inputrow"><p>');
  popup.document.write('<label for="popuptableau-inputcol">Nombre de colonnes :</label> <input type="text" name="inputCol" value="3" id="popuptableau-inputcol"><p>');
  popup.document.write('<label for="popuptableau-inputheader">Mise en forme (wikitable) :</label> <input type="checkbox" name="inputHeader" checked="1" id="popuptableau-inputheader"><p>');
  popup.document.write('<label for="popuptableau-inputline">Lignes grises alternées :</label> <input type="checkbox" name="inputLine" checked="0" id="popuptableau-inputline"><p>');
  popup.document.write('</form">');
  popup.document.write('<p><a href="javascript:insertCode()"> Insérer le code dans la fenêtre d\'édition</a></p>');
  popup.document.write('<p><a href="javascript:self.close()"> Fermer</a></p>');
  popup.document.write('</body></html>');
  popup.document.close();
}

/**
 * Changer le lien du bouton de création de tableau et supprime le bouton signature sur les articles
 */
function changButtons() {
  var toolbarArray = document.getElementById('mw-editbutton-array');
  if (toolbarArray) {
    toolbarArray.onclick = function() {
      popupTableau();
      return false;
    }
  }

  var btnSigImg = document.getElementById('mw-editbutton-signature');
  if (btnSigImg && mw.config.get('wgNamespaceNumber') == 0) btnSigImg.style.display = "none";
}
$(changButtons);

//</nowiki>


//Summary buttons
 
function insertSummary(txt){
 if( typeof txt != 'string' ) txt = this.title
 var vv = $('#wpSummary').val()
 if( vv.indexOf(txt) != -1 ) return
 if( /[^,; \/]$/.test(vv) ) vv += ','
 if( /[^ ]$/.test(vv) ) vv += ' '
 $('#wpSummary').val(vv + txt)
}
 
function addSumButton(btn, txt){
 $('<a title="' + txt + '">' + btn + '</a>')
 .appendTo('#userSummaryButtonsA')
 .click(insertSummary)
}
 
$(function(){
 var wgArticleId = mw.config.get('wgArticleId')''
 var frm = document.getElementById('editform')
 if( !wgArticleId || !frm || $(frm.wpSection).val() == 'new' ) return
 mw.util.addCSS('\
 input#wpSummary {margin-bottom: 0}\
 #userSummaryButtonsA a {background:#cef; border:1px solid #adf; padding:0 2px;\
  margin:0 2px;cursor:pointer; font-size:86%; color:#666}\
 #userSummaryButtonsA a:hover {background:#bdf; color:black; text-decoration:none}')
 $('<div id=userSummaryButtonsA />').insertAfter('#wpSummary')
 $.each( ['викиф|икация', 'джасау', 'стил|истика тюрлендириуле', 'орфогр|афия', 'пункт|уация',
 'джууаб',  'комм|ентарий', 'кат|егория', 'шаб|лон', 'кетер|иу', 'сурат', 'къайн|акъла', 'къош|акъ', 'кесгин| этиу', 'джангы|ртыу'],
  function(i,s){  addSumButton( s.replace(/\|.*/,''), s.replace(/\|/,'') )  }
 )
})